// Type definitions for ArcGIS API for JavaScript 4.20
// 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

type HashMap<T> = Record<string, T>;
type IPromise<T> = Promise<T>;

interface IHandle {
  remove(): void;
}

interface __esriImplementsIteration<T> {
  [Symbol.iterator](): IterableIterator<T>;
}

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, __esriImplementsIteration<T> {
    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>;
    filter<S extends T>(callback: (item: T, index: number) => item is S): Collection<S>;
    find(callback: ItemTestCallback<T>): T;
    findIndex(callback: ItemTestCallback<T>): number;
    flatten(callback: (item: T, index: number) => T[] | Collection<T>): Collection<T>;
    flatten<U>(callback: (item: U, index: number) => U[] | Collection<U>): Collection<U>;
    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>;

  interface CollectionPropertiesBase<T = any> {
    items?: T[];
  }

  type DateProperties = number | string | Date;

  export type AreaMeasurementLayerLayerviewCreateErrorEventHandler = (
    event: AreaMeasurementLayerLayerviewCreateErrorEvent
  ) => void;

  export type AreaMeasurementLayerLayerviewCreateEventHandler = (
    event: AreaMeasurementLayerLayerviewCreateEvent
  ) => void;

  export type AreaMeasurementLayerLayerviewDestroyEventHandler = (
    event: AreaMeasurementLayerLayerviewDestroyEvent
  ) => void;

  /**
   * An object describing the parameter values for the [attributeParameterValues](global.html#attributeParameterValues) property of [RouteParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html).
   *
   * [Read more...](global.html#AttributeParamValue)
   */
  export interface AttributeParamValue extends Object {
    /**
     * The name of the attribute.
     *
     * [Read more...](global.html#AttributeParamValue)
     */
    attributeName: string;
    /**
     * The name of the parameter.
     *
     * [Read more...](global.html#AttributeParamValue)
     */
    parameterName: string;
    /**
     * The parameter's value.
     *
     * [Read more...](global.html#AttributeParamValue)
     */
    value: string;
  }

  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 BasemapLayerListTriggerActionEventHandler = (event: BasemapLayerListTriggerActionEvent) => void;

  export type BasemapToggleToggleEventHandler = (event: BasemapToggleToggleEvent) => 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 BookmarksBookmarkEditEventHandler = (event: BookmarksBookmarkEditEvent) => void;

  export type BookmarksBookmarkSelectEventHandler = (event: BookmarksBookmarkSelectEvent) => 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 ClassedColorSliderSegmentDragEventHandler = (event: ClassedColorSliderSegmentDragEvent) => 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 ClassedSizeSliderMaxChangeEventHandler = (event: ClassedSizeSliderMaxChangeEvent) => void;

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

  export type ClassedSizeSliderSegmentDragEventHandler = (event: ClassedSizeSliderSegmentDragEvent) => 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 ColorSizeSliderMaxChangeEventHandler = (event: ColorSizeSliderMaxChangeEvent) => void;

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

  export type ColorSizeSliderSegmentDragEventHandler = (event: ColorSizeSliderSegmentDragEvent) => 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 ColorSliderMaxChangeEventHandler = (event: ColorSliderMaxChangeEvent) => void;

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

  export type ColorSliderSegmentDragEventHandler = (event: ColorSliderSegmentDragEvent) => 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 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 DirectLineMeasurementLayerLayerviewCreateErrorEventHandler = (
    event: DirectLineMeasurementLayerLayerviewCreateErrorEvent
  ) => void;

  export type DirectLineMeasurementLayerLayerviewCreateEventHandler = (
    event: DirectLineMeasurementLayerLayerviewCreateEvent
  ) => void;

  export type DirectLineMeasurementLayerLayerviewDestroyEventHandler = (
    event: DirectLineMeasurementLayerLayerviewDestroyEvent
  ) => 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 FeatureFormSubmitEventHandler = (event: FeatureFormSubmitEvent) => void;

  export type FeatureFormValueChangeEventHandler = (event: FeatureFormValueChangeEvent) => void;

  export type FeatureFormViewModelSubmitEventHandler = (event: FeatureFormViewModelSubmitEvent) => void;

  export type FeatureFormViewModelValueChangeEventHandler = (event: FeatureFormViewModelValueChangeEvent) => void;

  export type FeatureLayerEditsEventHandler = (event: FeatureLayerEditsEvent) => void;

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

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

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

  export type FeatureTableSelectionChangeEventHandler = (event: FeatureTableSelectionChangeEvent) => void;

  export type FeatureTemplatesSelectEventHandler = (event: FeatureTemplatesSelectEvent) => void;

  export type FeatureTemplatesViewModelSelectEventHandler = (event: FeatureTemplatesViewModelSelectEvent) => void;

  export type GeoJSONLayerEditsEventHandler = (event: GeoJSONLayerEditsEvent) => 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 HeatmapSliderThumbChangeEventHandler = (event: HeatmapSliderThumbChangeEvent) => void;

  export type HeatmapSliderThumbDragEventHandler = (event: HeatmapSliderThumbDragEvent) => void;

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

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

  export type HistogramRangeSliderMaxChangeEventHandler = (event: HistogramRangeSliderMaxChangeEvent) => void;

  export type HistogramRangeSliderMinChangeEventHandler = (event: HistogramRangeSliderMinChangeEvent) => void;

  export type HistogramRangeSliderSegmentDragEventHandler = (event: HistogramRangeSliderSegmentDragEvent) => void;

  export type HistogramRangeSliderThumbChangeEventHandler = (event: HistogramRangeSliderThumbChangeEvent) => void;

  export type HistogramRangeSliderThumbDragEventHandler = (event: HistogramRangeSliderThumbDragEvent) => void;

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

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

  export type HomeGoEventHandler = (event: HomeGoEvent) => void;

  export type HomeViewModelGoEventHandler = (event: HomeViewModelGoEvent) => void;

  export type IdentityManagerCredentialCreateEventHandler = (event: IdentityManagerCredentialCreateEvent) => void;

  export type IdentityManagerDialogCreateEventHandler = (event: IdentityManagerDialogCreateEvent) => void;

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

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

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

  export type ImageryTileLayerLayerviewCreateErrorEventHandler = (
    event: ImageryTileLayerLayerviewCreateErrorEvent
  ) => void;

  export type ImageryTileLayerLayerviewCreateEventHandler = (event: ImageryTileLayerLayerviewCreateEvent) => void;

  export type ImageryTileLayerLayerviewDestroyEventHandler = (event: ImageryTileLayerLayerviewDestroyEvent) => 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 LayerLayerviewCreateErrorEventHandler = (event: LayerLayerviewCreateErrorEvent) => void;

  export type LayerLayerviewCreateEventHandler = (event: LayerLayerviewCreateEvent) => void;

  export type LayerLayerviewDestroyEventHandler = (event: LayerLayerviewDestroyEvent) => void;

  export type LayerListTriggerActionEventHandler = (event: LayerListTriggerActionEvent) => void;

  export type LayerListViewModelTriggerActionEventHandler = (event: LayerListViewModelTriggerActionEvent) => void;

  export type LocateLocateErrorEventHandler = (event: LocateLocateErrorEvent) => void;

  export type LocateLocateEventHandler = (event: LocateLocateEvent) => void;

  export type LocateViewModelLocateErrorEventHandler = (event: LocateViewModelLocateErrorEvent) => 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 MapViewImmediateDoubleClickEventHandler = (event: MapViewImmediateDoubleClickEvent) => 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;

  /**
   * Note: reserved for internal use only, this is not part of the stable public API.
   *
   * Various utilities for the Scene Viewer application.
   */
  interface sceneViewerUtils {
    /**
     * Note: reserved for internal use only, this is not part of the stable public API.
     *
     * Get number of pending features in the batch create workflow.
     */
    batchCreateGetNumPendingFeatures(viewModel: EditorViewModel): number;
    /**
     * Note: reserved for internal use only, this is not part of the stable public API.
     *
     * Get the active workflow state.
     */
    getActiveWorkflowState(
      viewModel: EditorViewModel
    ):
      | "adding-attachment"
      | "awaiting-feature-creation-info"
      | "awaiting-feature-to-create"
      | "awaiting-feature-to-update"
      | "awaiting-update-feature-candidate"
      | "batch-creating-features"
      | "disabled"
      | "editing-attachment"
      | "editing-existing-feature"
      | "editing-new-feature"
      | "ready";
    /**
     * Note: reserved for internal use only, this is not part of the stable public API.
     *
     * Get the active workflow type.
     */
    getActiveWorkflowType(viewModel: EditorViewModel): "create" | "batch-create" | "update";
    /**
     * Note: reserved for internal use only, this is not part of the stable public API.
     *
     * Get number of feature templates available in a FeatureTemplatesViewModel (before filtering).
     */
    numberOfFeatureTemplates(viewModel: FeatureTemplatesViewModel): number;
    /**
     * Note: reserved for internal use only, this is not part of the stable public API.
     *
     * Starts a batch create workflow on the given editor view model
     */
    startBatchCreateWorkflow(editorVM: EditorViewModel, creationInfo: CreationInfo, startAt: string): Promise<void>;
  }

  export const sceneViewerUtils: sceneViewerUtils;

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#loaded)
     */
    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 spatial reference of the Basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#spatialReference)
     */
    spatialReference: SpatialReference;
    /**
     * The URL pointing to an image that represents the basemap.
     *
     * [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;
    /**
     * Destroys the basemap, and any associated resources, including its [layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#layers) and [portalItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#portalItem).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#destroy)
     */
    destroy(): void;
    /**
     * Loads all the externally loadable resources associated with the basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#loadAll)
     */
    loadAll(): Promise<Basemap>;
  }

  interface BasemapConstructor {
    /**
     * Creates a new basemap object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html)
     */

    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#fromId)
     */
    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 spatial reference of the Basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#spatialReference)
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * The URL pointing to an image that represents the basemap.
     *
     * [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 diagonal field of view (fov) angle for the camera.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#fov)
     */
    fov: number;
    /**
     * The compass heading of the camera in degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#heading)
     */
    heading: number;
    /**
     * The position of the camera defined by a map point.
     *
     * [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 projected down from the camera position.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#tilt)
     */
    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 {
    /**
     * The camera defines the [position](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#position), [tilt](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#tilt), and [heading](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#heading) of the point from which the [SceneView's](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) visible extent is observed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html)
     */

    new (properties?: CameraProperties): Camera;

    fromJSON(json: any): Camera;
  }

  export const Camera: CameraConstructor;

  interface CameraProperties {
    /**
     * The diagonal field of view (fov) angle for the camera.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#fov)
     */
    fov?: number;
    /**
     * The compass heading of the camera in degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#heading)
     */
    heading?: number;
    /**
     * The position of the camera defined by a map point.
     *
     * [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 projected down from the camera position.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#tilt)
     */
    tilt?: number;
  }

  interface Color {
    /**
     * The alpha value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#a)
     */
    a: number;
    /**
     * The blue value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#b)
     */
    b: number;
    /**
     * The green value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#g)
     */
    g: number;
    /**
     * The red value.
     *
     * [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) object and sets this color instance to the input value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#setColor)
     */
    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)
     */
    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 new color object by passing either a hex, rgb(a), hsl(a) or [named color value](https://www.w3.org/wiki/CSS/Properties/color/keywords).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html)
     */

    /**
     * Creates a Color instance by blending two colors using a weight factor.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#blendColors)
     */
    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 to the rgb(a) values of the color.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#fromArray)
     */
    fromArray(a: number[], obj?: Color): Color;
    /**
     * Creates a Color instance from a hex string with a '#' prefix.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#fromHex)
     */
    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)
     */
    fromJSON(json: any): Color;
    /**
     * Creates a Color instance from a string of the form "rgb()" or "rgba()".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#fromRgb)
     */
    fromRgb(color: string, out?: Color): Color;
    /**
     * Creates a Color instance by parsing a generic string.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html#fromString)
     */
    fromString(str: string, obj?: Color): Color;
  }

  export const Color: ColorConstructor;

  /**
   * Configure global properties of the library.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html)
   */
  interface config {
    /**
     * An authorization string used to access a resource or service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#apiKey)
     */
    apiKey: string;
    /**
     * Overrides the URL for loading the API assets when using local builds of the `@arcgis/core` and `arcgis-js-api` NPM packages.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#assetsPath)
     */
    assetsPath: string;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#fontsUrl)
     */
    fontsUrl: string;
    /**
     * The default [GeometryService](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html) used by widgets and other operations, such as on-the-fly projections.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#geometryServiceUrl)
     */
    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)
     */
    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)
     */
    kmlServiceUrl: string;
    /**
     * An object with properties that control various aspects of log messages.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#log)
     */
    log: configLog;
    /**
     * The default URL of new portal instances.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#portalUrl)
     */
    portalUrl: string;
    /**
     * An object with properties that control various aspects of communication between 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.
     *
     * [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 configLog extends Object {
    /**
     * An array of custom interceptor functions that can be used to intercept log messages.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#log)
     */
    interceptors: LogInterceptor[];
    /**
     * The level of messages to log.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#log)
     */
    level: "none" | "error" | "warn" | "info";
  }

  export interface configRequest extends Object {
    /**
     * List of domain suffixes known to support https.
     *
     * [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.
     *
     * [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 requests made by [request](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#request)
     */
    maxUrlLength?: number;
    /**
     * A proxy rule defines a proxy for a set of resources with an identical URL prefix.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#request)
     */
    proxyRules?: configRequestProxyRules[];
    /**
     * Resource proxy for your application.
     *
     * [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 wait for response from a server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#request)
     */
    timeout?: number;
    /**
     * **Since:** 4.9 Indicates whether cross origin requests made to the associated server should include credentials such as cookies and authorization headers.
     *
     * [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)
     */
    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 or SystemJS loader used in the worker.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#workers)
     */
    loaderUrl?: any;
    /**
     * This is used by the `@arcgis/core` and `arcgis-js-api` NPM packages to control where to load a custom build of the `RemoteClient` from.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#workers)
     */
    workerPath?: string;
    /**
     * 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[];
  }

  export type ErrorCallback = (error: Error) => void;

  export type LogInterceptor = (level: "error" | "warn" | "info", module: string, ...args: any[]) => boolean;

  /**
   * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#RequestInterceptor)
     */
    before?: BeforeInterceptorCallback;
    /**
     * When an error occurs 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#RequestInterceptor)
     */
    error?: ErrorCallback;
    /**
     * Sets or adds headers into `requestOptions.headers`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#RequestInterceptor)
     */
    headers?: any;
    /**
     * Sets or adds query parameters into `requestOptions.query`.
     *
     * [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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#RequestInterceptor)
     */
    urls?: string | RegExp | (string | RegExp)[];
  }

  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;
  }

  /**
   * This module contains Accessor [TypeScript](https://www.typescriptlang.org/docs/handbook/decorators.html) decorators.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-accessorSupport-decorators.html)
   */
  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)
     */
    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)
     */
    cast(propertyName: string): Function;
    /**
     * This property decorator is used to define the function or class for a property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-accessorSupport-decorators.html#cast)
     */
    cast(functionOrClass: Function): Function;
    /**
     * A function that can be used as a class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-accessorSupport-decorators.html#declared)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-accessorSupport-decorators.html#property)
     */
    property(propertyMetadata?: decoratorsPropertyPropertyMetadata): Function;

    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/programming-patterns/#autocasting) 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/programming-patterns/#autocasting) the property.
     *
     * [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)
     */
    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)
     */
    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;
  }

  export interface CollectionAfterAddEvent {
    item: any;
  }

  export interface CollectionAfterChangesEvent {}

  export interface CollectionAfterRemoveEvent {
    item: any;
  }

  export interface CollectionBeforeAddEvent {
    cancellable: boolean;

    defaultPrevented: boolean;

    item: any;

    preventDefault: Function;
  }

  export interface CollectionBeforeChangesEvent {
    cancellable: boolean;

    defaultPrevented: boolean;

    item: any;

    preventDefault: Function;
  }

  export interface CollectionBeforeRemoveEvent {
    cancellable: boolean;

    defaultPrevented: boolean;

    item: any;

    preventDefault: Function;
  }

  interface Error {
    /**
     * The details object provides additional details specific to the error, giving more information about why the error was raised.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html#details)
     */
    details: any;
    /**
     * A message describing the details of the error.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html#message)
     */
    message: string;
    /**
     * A unique error name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html#name)
     */
    name: string;
  }

  interface ErrorConstructor {
    /**
     * Error is a class that enhances the debugging and error handling process.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html)
     */

    new (name: string, message?: string, details?: any): Error;
  }

  export const Error: ErrorConstructor;

  export class Evented {
    /**
     * Emits an event on the instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Evented.html#emit)
     */
    emit(type: string, event?: any): boolean;
    /**
     * Indicates whether there is an event listener on the instance that matches the provided event name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Evented.html#hasEventListener)
     */
    hasEventListener(type: string): boolean;
    /**
     * Registers an event handler on the instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Evented.html#on)
     */
    on(type: string | string[], listener: EventHandler): IHandle;
  }

  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 {
    /**
     * Provides a single [handles](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-HandleOwner.html#handles) property to be shared with all subclasses.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-HandleOwner.html)
     */

    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)
     */
    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)
     */
    has(key: any): boolean;
    /**
     * Removes a group of handles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Handles.html#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 {
    /**
     * This class helps manage a group of handles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Handles.html)
     */

    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.
   *
   * [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.
     *
     * [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 object generated from an ArcGIS product.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-JSONSupport.html#fromJSON)
     */
    fromJSON(json: any): any;
  }

  export const JSONSupport: JSONSupportConstructor;

  /**
   * Provides a utility method for deeply cloning objects with properties that are computed or have their own `clone()` method, such as [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-lang.html)
   */
  interface lang {
    /**
     * Use this method to deeply clone objects with properties that are computed or have their own `clone()` method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-lang.html#clone)
     */
    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)
     */
    readonly loadError: Error;
    /**
     * Represents the status of a [load](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Loadable.html#load) operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Loadable.html#loadStatus)
     */
    readonly loadStatus: "not-loaded" | "loading" | "failed" | "loaded";
    /**
     * 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).
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Loadable.html#isResolved)
     */
    isResolved(): boolean;
    /**
     * Loads the resources referenced by this class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Loadable.html#load)
     */
    load(signal?: AbortSignal): Promise<any>;
    /**
     * `when()` may be leveraged once an instance of the class is created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Loadable.html#when)
     */
    when(callback?: Function, errback?: Function): Promise<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).
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Promise.html#when)
     */
    when(callback?: Function, errback?: Function): Promise<any>;
  }

  interface corePromiseConstructor {
    new (): corePromise;
  }

  export const corePromise: corePromiseConstructor;

  /**
   * Various utilities and convenience functions for working with promises.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-promiseUtils.html)
   */
  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)
     */
    create(executor: Executor): Promise<any>;
    /**
     * Creates a special error object which is used to signal aborted requests in promise chains.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-promiseUtils.html#createAbortError)
     */
    createAbortError(): Error;
    /**
     * A utility for ensuring an input function is not simultaneously invoked more than once at a time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-promiseUtils.html#debounce)
     */
    debounce<T>(callback: T): T;
    /**
     * Convenience utility method to wait for a number of promises to either resolve or reject.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-promiseUtils.html#eachAlways)
     */
    eachAlways(promises: Promise<any>[] | any): Promise<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)
     */
    filter<T>(input: T[], predicate: FilterPredicateCallback): Promise<T[]>;
    /**
     * Check if the provided error object is the special kind of error with which promises are rejected when they are aborted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-promiseUtils.html#isAbortError)
     */
    isAbortError(error: Error): boolean;
    /**
     * Convenience utility method to create a promise that has been rejected with a provided error value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-promiseUtils.html#reject)
     */
    reject<T>(error?: any): Promise<T>;
    /**
     * Convenience utility method to create a promise that will be resolved with a provided value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-promiseUtils.html#resolve)
     */
    resolve<T>(value?: T): Promise<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: Promise<any>;
    /**
     * The value with which 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.
     *
     * [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) => Promise<any>;

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

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

  /**
   * Various utilities and convenience functions for executing code at various phases of browser frames.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html)
   */
  interface scheduling {
    /**
     * Registers a frame task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html#addFrameTask)
     */
    addFrameTask(phases: PhaseCallbacks): FrameTaskHandle;
    /**
     * Schedules the execution of a `callback` function at the next web browser tick.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html#schedule)
     */
    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 at specific 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-scheduling.html#PhaseEvent)
     */
    elapsedFrameTime: number;
  }

  /**
   * Creates a [WhereClause](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-sql-WhereClause.html) expression that adheres to standardized SQL expressions.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-sql.html)
   */
  interface sql {
    /**
     * Parses the given where clause string and returns an instance of [WhereClause](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-sql-WhereClause.html) when resolved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-sql.html#parseWhereClause)
     */
    parseWhereClause(clause: string, fieldsIndex: FieldsIndex): Promise<WhereClause>;
  }

  export const sql: sql;

  /**
   * The WhereClause is used to extract the features that meet a specified condition by parsing the provided results in to a value.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-sql-WhereClause.html)
   */
  interface WhereClause {
    /**
     * An array of the field names used in the where clause.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-sql-WhereClause.html#fieldNames)
     */
    fieldNames: string[];
    /**
     * Returns `true` if the parsed where clause meets the requirements of standardized sql.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-sql-WhereClause.html#isStandardized)
     */
    readonly isStandardized: boolean;

    /**
     * Executes the where clause against a feature to generate a value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-sql-WhereClause.html#calculateValue)
     */
    calculateValue(feature: any): any;
    /**
     * Tests the attributes of a feature against the `whereClause`, and returns `true` if the test passes, `false` otherwise.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-sql-WhereClause.html#testFeature)
     */
    testFeature(feature: any): boolean;
  }

  export const WhereClause: WhereClause;

  /**
   * Types of units used across the JS API.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-units.html)
   */
  namespace units {
    /**
     * Units for lengths.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-units.html#LengthUnit)
     */
    export type LengthUnit =
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet";

    /**
     * Units for areas.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-units.html#AreaUnit)
     */
    export type AreaUnit =
      | "square-millimeters"
      | "square-centimeters"
      | "square-decimeters"
      | "square-meters"
      | "square-kilometers"
      | "square-inches"
      | "square-feet"
      | "square-yards"
      | "square-miles"
      | "square-us-feet"
      | "acres"
      | "ares"
      | "hectares";

    /**
     * Units for volumes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-units.html#VolumeUnit)
     */
    export type VolumeUnit =
      | "liters"
      | "cubic-millimeters"
      | "cubic-centimeters"
      | "cubic-decimeters"
      | "cubic-meters"
      | "cubic-kilometers"
      | "cubic-inches"
      | "cubic-feet"
      | "cubic-yards"
      | "cubic-miles";

    /**
     * Units for angles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-units.html#AngleUnit)
     */
    export type AngleUnit = "degrees" | "radians";

    /**
     * Units for angles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-units.html#Unit)
     */
    export type Unit = __esri.LengthUnit | __esri.AreaUnit | __esri.VolumeUnit | __esri.AngleUnit;

    /**
     * Measurement systems.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-units.html#MeasurementSystem)
     */
    export type MeasurementSystem = "imperial" | "metric";

    /**
     * Measurement systems or an area units.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-units.html#SystemOrAreaUnit)
     */
    export type SystemOrAreaUnit = __esri.MeasurementSystem | __esri.AreaUnit;

    /**
     * Measurement system or an length unit.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-units.html#SystemOrLengthUnit)
     */
    export type SystemOrLengthUnit = __esri.MeasurementSystem | __esri.LengthUnit;
  }

  /**
   * Units for angles.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-units.html#AngleUnit)
   */
  export type AngleUnit = "degrees" | "radians";

  /**
   * Units for areas.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-units.html#AreaUnit)
   */
  export type AreaUnit =
    | "square-millimeters"
    | "square-centimeters"
    | "square-decimeters"
    | "square-meters"
    | "square-kilometers"
    | "square-inches"
    | "square-feet"
    | "square-yards"
    | "square-miles"
    | "square-us-feet"
    | "acres"
    | "ares"
    | "hectares";

  /**
   * Units for lengths.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-units.html#LengthUnit)
   */
  export type LengthUnit =
    | "millimeters"
    | "centimeters"
    | "decimeters"
    | "meters"
    | "kilometers"
    | "inches"
    | "feet"
    | "yards"
    | "miles"
    | "nautical-miles"
    | "us-feet";

  /**
   * Measurement systems.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-units.html#MeasurementSystem)
   */
  export type MeasurementSystem = "imperial" | "metric";

  /**
   * Measurement systems or an area units.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-units.html#SystemOrAreaUnit)
   */
  export type SystemOrAreaUnit = MeasurementSystem | AreaUnit;

  /**
   * Measurement system or an length unit.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-units.html#SystemOrLengthUnit)
   */
  export type SystemOrLengthUnit = MeasurementSystem | LengthUnit;

  /**
   * Units for angles.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-units.html#Unit)
   */
  export type Unit = LengthUnit | AreaUnit | VolumeUnit | AngleUnit;

  /**
   * Units for volumes.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-units.html#VolumeUnit)
   */
  export type VolumeUnit =
    | "liters"
    | "cubic-millimeters"
    | "cubic-centimeters"
    | "cubic-decimeters"
    | "cubic-meters"
    | "cubic-kilometers"
    | "cubic-inches"
    | "cubic-feet"
    | "cubic-yards"
    | "cubic-miles";

  /**
   * Utility methods for working with URLs.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-urlUtils.html)
   */
  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)
     */
    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)
     */
    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)
     */
    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;
  }

  /**
   * Various utilities and convenience functions for watching [Accessor](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Accessor.html) properties.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html)
   */
  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)
     */
    init(obj: Accessor, propertyName: string | string[], callback: WatchCallback): WatchHandle;
    /**
     * Watches a property for changes and automatically attaches and detaches an event handler for a given event to the property value as needed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#on)
     */
    on(
      obj: Accessor,
      propertyName: string | string[],
      eventName: string,
      eventHandler: Function,
      attachedHandler?: EventAttachedCallback,
      detachedHandler?: EventAttachedCallback
    ): WatchHandle;
    /**
     * Watches a property for changes once.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#once)
     */
    once(obj: Accessor, propertyName: string | string[], callback?: WatchCallback): PromisedWatchHandle;
    /**
     * Watches a property for changes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#pausable)
     */
    pausable(obj: Accessor, propertyName: string | string[], callback?: WatchCallback): PausableWatchHandle;
    /**
     * Watches a property for changes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#watch)
     */
    watch(obj: Accessor, propertyName: string | string[], callback: WatchCallback): WatchHandle;
    /**
     * Watches a property for becoming truthy.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#when)
     */
    when(obj: Accessor, propertyName: string | string[], callback: WatchCallback): WatchHandle;
    /**
     * Watches a property for becoming `defined`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenDefined)
     */
    whenDefined(obj: Accessor, propertyName: string | string[], callback: WatchCallback): WatchHandle;
    /**
     * Watches a property for becoming `defined` once.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenDefinedOnce)
     */
    whenDefinedOnce(obj: Accessor, propertyName: string | string[], callback?: WatchCallback): PromisedWatchHandle;
    /**
     * Watches a property for becoming equal with a given `value`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenEqual)
     */
    whenEqual(obj: Accessor, propertyName: string, value: any, callback: WatchCallback): WatchHandle;
    /**
     * Watches a property for becoming equal with a given `value`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenEqualOnce)
     */
    whenEqualOnce(obj: Accessor, propertyName: string, value: any, callback?: WatchCallback): PromisedWatchHandle;
    /**
     * Watches a property for becoming `false`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenFalse)
     */
    whenFalse(obj: Accessor, propertyName: string | string[], callback: WatchCallback): WatchHandle;
    /**
     * Watches a property for becoming `false` once.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenFalseOnce)
     */
    whenFalseOnce(obj: Accessor, propertyName: string | string[], callback?: WatchCallback): PromisedWatchHandle;
    /**
     * Watches a property for becoming falsy.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenNot)
     */
    whenNot(obj: Accessor, propertyName: string | string[], callback: WatchCallback): WatchHandle;
    /**
     * Watches a property for becoming falsy once.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenNotOnce)
     */
    whenNotOnce(obj: Accessor, propertyName: string | string[], callback?: WatchCallback): PromisedWatchHandle;
    /**
     * Watches a property for becoming truthy once.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenOnce)
     */
    whenOnce(obj: Accessor, propertyName: string | string[], callback?: WatchCallback): PromisedWatchHandle;
    /**
     * Watches a property for becoming `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenTrue)
     */
    whenTrue(obj: Accessor, propertyName: string | string[], callback: WatchCallback): WatchHandle;
    /**
     * Watches a property for becoming `true` once.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenTrueOnce)
     */
    whenTrueOnce(obj: Accessor, propertyName: string | string[], callback?: WatchCallback): PromisedWatchHandle;
    /**
     * Watches a property for becoming `undefined`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenUndefined)
     */
    whenUndefined(obj: Accessor, propertyName: string | string[], callback: WatchCallback): WatchHandle;
    /**
     * Watches a property for becoming `undefined` once.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-watchUtils.html#whenUndefinedOnce)
     */
    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 Promise<any> {
    remove(): void;
  }

  /**
   * This module is a utility framework that simplifies the use of [Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers) in the ArcGIS API for JavaScript.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers.html)
   */
  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)
     */
    open(modulePath: string, options?: workersOpenOptions): Promise<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)
     */
    broadcast(methodName: string, data?: any, options?: ConnectionBroadcastOptions): Promise<any>[];
    /**
     * Closes the existing connection instance to workers.
     *
     * [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)
     */
    invoke(methodName: string, data?: any, options?: ConnectionInvokeOptions): Promise<any>;
  }

  interface ConnectionConstructor {
    /**
     * This class is used to execute remote methods located on the module loaded into a separate thread via 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-core-workers-Connection.html)
     */

    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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers.html#open)
     */
    strategy?: "distributed" | "dedicated" | "local";
    /**
     * [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) allows for cancelable asynchronous job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-workers.html#open)
     */
    signal?: AbortSignal;
  }

  interface Element extends Accessor, JSONSupport, ElementMixin {
    /**
     * The type of form element displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-Element.html#type)
     */
    readonly type: "field" | "group";
  }

  interface ElementConstructor {
    /**
     * Form elements define what should display within the [FormTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-FormTemplate.html) elements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-Element.html)
     */

    new (properties?: ElementProperties): Element;

    fromJSON(json: any): Element;
  }

  export const Element: ElementConstructor;

  interface ElementProperties extends ElementMixinProperties {}

  interface ElementMixin {
    /**
     * The element's description providing the purpose behind it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-ElementMixin.html#description)
     */
    description: string;
    /**
     * A string value containing the field alias.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-ElementMixin.html#label)
     */
    label: string;
    /**
     * A reference to an [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a boolean value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-ElementMixin.html#visibilityExpression)
     */
    visibilityExpression: string;
  }

  interface ElementMixinProperties {
    /**
     * The element's description providing the purpose behind it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-ElementMixin.html#description)
     */
    description?: string;
    /**
     * A string value containing the field alias.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-ElementMixin.html#label)
     */
    label?: string;
    /**
     * A reference to an [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a boolean value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-ElementMixin.html#visibilityExpression)
     */
    visibilityExpression?: string;
  }

  interface FieldElement extends Element {
    /**
     * The [coded value domain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-CodedValueDomain.html) or [range domain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RangeDomain.html) of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-FieldElement.html#domain)
     */
    domain: CodedValueDomain | RangeDomain;
    /**
     * Indicates whether the field can be edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-FieldElement.html#editable)
     */
    editable: boolean;
    /**
     * The field name as defined by the feature layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-FieldElement.html#fieldName)
     */
    fieldName: string;
    /**
     * Contains a hint used to help editors while editing fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-FieldElement.html#hint)
     */
    hint: string;
    /**
     * The input to use for the element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-FieldElement.html#input)
     */
    input: TextBoxInput | TextAreaInput | DateTimePickerInput | BarcodeScannerInput | ComboBoxInput | RadioButtonsInput;
    /**
     * A reference to an [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a boolean value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-FieldElement.html#requiredExpression)
     */
    requiredExpression: string;
    /**
     * Indicates the type of form [element](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-Element.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-FieldElement.html#type)
     */
    type: "field";

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

  interface FieldElementConstructor {
    /**
     * A `FieldElement` form element defines how a feature layer's [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html) participates in the [FeatureForm](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-FieldElement.html)
     */

    new (properties?: FieldElementProperties): FieldElement;

    fromJSON(json: any): FieldElement;
  }

  export const FieldElement: FieldElementConstructor;

  interface FieldElementProperties extends ElementProperties {
    /**
     * The [coded value domain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-CodedValueDomain.html) or [range domain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RangeDomain.html) of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-FieldElement.html#domain)
     */
    domain?: (CodedValueDomainProperties & { type: "coded-value" }) | (RangeDomainProperties & { type: "range" });
    /**
     * Indicates whether the field can be edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-FieldElement.html#editable)
     */
    editable?: boolean;
    /**
     * The field name as defined by the feature layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-FieldElement.html#fieldName)
     */
    fieldName?: string;
    /**
     * Contains a hint used to help editors while editing fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-FieldElement.html#hint)
     */
    hint?: string;
    /**
     * The input to use for the element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-FieldElement.html#input)
     */
    input?:
      | (TextBoxInputProperties & { type: "text-box" })
      | (TextAreaInputProperties & { type: "text-area" })
      | (DateTimePickerInputProperties & { type: "datetime-picker" })
      | (BarcodeScannerInputProperties & { type: "barcode-scanner" })
      | (ComboBoxInputProperties & { type: "combo-box" })
      | (RadioButtonsInputProperties & { type: "radio-buttons" });
    /**
     * A reference to an [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a boolean value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-FieldElement.html#requiredExpression)
     */
    requiredExpression?: string;
    /**
     * Indicates the type of form [element](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-Element.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-FieldElement.html#type)
     */
    type?: "field";
  }

  interface GroupElement extends Element {
    /**
     * An array of [field elements](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-FieldElement.html) to display as grouped.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-GroupElement.html#elements)
     */
    elements: FieldElement[];
    /**
     * Defines if the group should be expanded or collapsed when the form is initially displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-GroupElement.html#initialState)
     */
    initialState: "collapsed" | "expanded";
    /**
     * The type of the [element](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-Element.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-GroupElement.html#type)
     */
    type: "group";

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

  interface GroupElementConstructor {
    /**
     * A `GroupElement` form element defines a container that holds a set of [form elements](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-FormTemplate.html#elements) that can be expanded, collapsed, or displayed together.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-GroupElement.html)
     */

    new (properties?: GroupElementProperties): GroupElement;

    fromJSON(json: any): GroupElement;
  }

  export const GroupElement: GroupElementConstructor;

  interface GroupElementProperties extends ElementProperties {
    /**
     * An array of [field elements](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-FieldElement.html) to display as grouped.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-GroupElement.html#elements)
     */
    elements?: FieldElementProperties[];
    /**
     * Defines if the group should be expanded or collapsed when the form is initially displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-GroupElement.html#initialState)
     */
    initialState?: "collapsed" | "expanded";
    /**
     * The type of the [element](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-Element.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-GroupElement.html#type)
     */
    type?: "group";
  }

  interface BarcodeScannerInput extends Accessor, TextInput, JSONSupport {
    /**
     * The type of form element input.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-BarcodeScannerInput.html#type)
     */
    readonly type: "barcode-scanner";
  }

  interface BarcodeScannerInputConstructor {
    /**
     * The `BarcodeScannerInput` class defines the desired user interface for a barcode or QR code scanner.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-BarcodeScannerInput.html)
     */

    new (properties?: BarcodeScannerInputProperties): BarcodeScannerInput;

    fromJSON(json: any): BarcodeScannerInput;
  }

  export const BarcodeScannerInput: BarcodeScannerInputConstructor;

  interface BarcodeScannerInputProperties extends TextInputProperties {}

  interface ComboBoxInput extends Accessor, JSONSupport {
    /**
     * The text used to represent a null value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-ComboBoxInput.html#noValueOptionLabel)
     */
    noValueOptionLabel: string;
    /**
     * Determines whether a null value option is displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-ComboBoxInput.html#showNoValueOption)
     */
    showNoValueOption: boolean;
    /**
     * The type of form element input.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-ComboBoxInput.html#type)
     */
    readonly type: "combo-box";

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

  interface ComboBoxInputConstructor {
    /**
     * The `ComboBoxInput` class defines the desired user interface for a combo box  group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-ComboBoxInput.html)
     */

    new (properties?: ComboBoxInputProperties): ComboBoxInput;

    fromJSON(json: any): ComboBoxInput;
  }

  export const ComboBoxInput: ComboBoxInputConstructor;

  interface ComboBoxInputProperties {
    /**
     * The text used to represent a null value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-ComboBoxInput.html#noValueOptionLabel)
     */
    noValueOptionLabel?: string;
    /**
     * Determines whether a null value option is displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-ComboBoxInput.html#showNoValueOption)
     */
    showNoValueOption?: boolean;
  }

  interface DateTimePickerInput extends Accessor, JSONSupport {
    /**
     * Indicates if the input should provide an option to select the time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-DateTimePickerInput.html#includeTime)
     */
    includeTime: boolean;
    /**
     * The maximum date to allow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-DateTimePickerInput.html#max)
     */
    max: number;
    /**
     * The minimum date to allow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-DateTimePickerInput.html#min)
     */
    min: number;
    /**
     * The type of form element input.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-DateTimePickerInput.html#type)
     */
    readonly type: "datetime-picker";

    /**
     * Creates a deep clone of the `DateTimePicker` class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-DateTimePickerInput.html#clone)
     */
    clone(): DateTimePickerInput;
  }

  interface DateTimePickerInputConstructor {
    /**
     * The `DateTimePickerInput` class defines the desired user interface for editing date fields in a form.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-DateTimePickerInput.html)
     */

    new (properties?: DateTimePickerInputProperties): DateTimePickerInput;

    fromJSON(json: any): DateTimePickerInput;
  }

  export const DateTimePickerInput: DateTimePickerInputConstructor;

  interface DateTimePickerInputProperties {
    /**
     * Indicates if the input should provide an option to select the time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-DateTimePickerInput.html#includeTime)
     */
    includeTime?: boolean;
    /**
     * The maximum date to allow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-DateTimePickerInput.html#max)
     */
    max?: number;
    /**
     * The minimum date to allow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-DateTimePickerInput.html#min)
     */
    min?: number;
  }

  interface RadioButtonsInput extends Accessor, JSONSupport {
    /**
     * The text used to represent a null value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-RadioButtonsInput.html#noValueOptionLabel)
     */
    noValueOptionLabel: string;
    /**
     * Determines whether a null value option is displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-RadioButtonsInput.html#showNoValueOption)
     */
    showNoValueOption: boolean;
    /**
     * The type of form element input.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-RadioButtonsInput.html#type)
     */
    readonly type: "radio-buttons";

    /**
     * Creates a deep clone of the `RadioButtonsInput` class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-RadioButtonsInput.html#clone)
     */
    clone(): RadioButtonsInput;
  }

  interface RadioButtonsInputConstructor {
    /**
     * The `RadioButtonsInput` class defines the desired user interface for a radio button group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-RadioButtonsInput.html)
     */

    new (properties?: RadioButtonsInputProperties): RadioButtonsInput;

    fromJSON(json: any): RadioButtonsInput;
  }

  export const RadioButtonsInput: RadioButtonsInputConstructor;

  interface RadioButtonsInputProperties {
    /**
     * The text used to represent a null value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-RadioButtonsInput.html#noValueOptionLabel)
     */
    noValueOptionLabel?: string;
    /**
     * Determines whether a null value option is displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-RadioButtonsInput.html#showNoValueOption)
     */
    showNoValueOption?: boolean;
  }

  interface TextAreaInput extends TextInput, JSONSupport {
    /**
     * The type of form element input.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-TextAreaInput.html#type)
     */
    readonly type: "text-area";

    /**
     * Creates a deep clone of the `TextAreaInput` class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-TextAreaInput.html#clone)
     */
    clone(): TextAreaInput;
  }

  interface TextAreaInputConstructor {
    /**
     * The `TextAreaInput` class defines the desired user interface as a multi-line text area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-TextAreaInput.html)
     */

    new (properties?: TextAreaInputProperties): TextAreaInput;

    fromJSON(json: any): TextAreaInput;
  }

  export const TextAreaInput: TextAreaInputConstructor;

  interface TextAreaInputProperties extends TextInputProperties {}

  interface TextBoxInput extends Accessor, TextInput, JSONSupport {
    /**
     * The type of form element input.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-TextBoxInput.html#type)
     */
    readonly type: "text-box";

    /**
     * Creates a deep clone of the `TextBoxInput` class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-TextBoxInput.html#clone)
     */
    clone(): TextBoxInput;
  }

  interface TextBoxInputConstructor {
    /**
     * The `TextBoxInput` class defines the desired user interface as a single-line text box.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-TextBoxInput.html)
     */

    new (properties?: TextBoxInputProperties): TextBoxInput;

    fromJSON(json: any): TextBoxInput;
  }

  export const TextBoxInput: TextBoxInputConstructor;

  interface TextBoxInputProperties extends TextInputProperties {}

  interface TextInput {
    /**
     * When set, defines the text input's maximum length.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-TextInput.html#maxLength)
     */
    maxLength: number;
    /**
     * When set, defines the text input's minimum length.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-TextInput.html#minLength)
     */
    minLength: number;
  }

  interface TextInputConstructor {
    new (): TextInput;
  }

  export const TextInput: TextInputConstructor;

  interface TextInputProperties {
    /**
     * When set, defines the text input's maximum length.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-TextInput.html#maxLength)
     */
    maxLength?: number;
    /**
     * When set, defines the text input's minimum length.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-TextInput.html#minLength)
     */
    minLength?: number;
  }

  /**
   * The `BarcodeScannerInput` class defines the desired user interface is a barcode or QR code scanner.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs.html#BarcodeScannerInput)
   */
  export type inputsBarcodeScannerInput = BarcodeScannerInput;

  /**
   * The `DateTimePickerInput` class defines the desired user interface for editing date fields in a form.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs.html#DateTimePickerInput)
   */
  export type inputsDateTimePickerInput = DateTimePickerInput;

  /**
   * Form element input types.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs.html#Input)
   */
  export type inputsInput =
    | DateTimePickerInput
    | TextAreaInput
    | TextBoxInput
    | BarcodeScannerInput
    | ComboBoxInput
    | RadioButtonsInput;

  /**
   * `TextAreaInput` defines the desired user interface is a multi-line text area.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs.html#TextAreaInput)
   */
  export type inputsTextAreaInput = TextAreaInput;

  /**
   * `TextBoxInput` defines the desired user interface is a single-line text box.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs.html#TextBoxInput)
   */
  export type inputsTextBoxInput = TextBoxInput;

  /**
   * A convenience module for importing [Input](module-esri-form-elements-inputs-Input.html) classes when developing with [TypeScript](https://developers.arcgis.com/javascript/latest/typescript-setup/).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-support-inputs.html)
   */
  interface inputs {}

  export const inputs: inputs;

  interface ExpressionInfo extends Accessor, JSONSupport {
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression evaluating to either a string, number, dictionary, or array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-ExpressionInfo.html#expression)
     */
    expression: string;
    /**
     * The name of the expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-ExpressionInfo.html#name)
     */
    name: string;
    /**
     * Indicates the return type of the Arcade expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-ExpressionInfo.html#returnType)
     */
    returnType: "boolean" | "number" | "string";
    /**
     * The title used to describe the value returned by the expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-ExpressionInfo.html#title)
     */
    title: string;

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

  interface ExpressionInfoConstructor {
    /**
     * The `ExpressionInfo` class defines the [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expressions executed in a layer's [FormTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-FormTemplate.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-ExpressionInfo.html)
     */

    new (properties?: ExpressionInfoProperties): ExpressionInfo;

    fromJSON(json: any): ExpressionInfo;
  }

  export const ExpressionInfo: ExpressionInfoConstructor;

  interface ExpressionInfoProperties {
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression evaluating to either a string, number, dictionary, or array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-ExpressionInfo.html#expression)
     */
    expression?: string;
    /**
     * The name of the expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-ExpressionInfo.html#name)
     */
    name?: string;
    /**
     * Indicates the return type of the Arcade expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-ExpressionInfo.html#returnType)
     */
    returnType?: "boolean" | "number" | "string";
    /**
     * The title used to describe the value returned by the expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-ExpressionInfo.html#title)
     */
    title?: string;
  }

  interface FormTemplate extends Accessor, JSONSupport {
    /**
     * The description of the form.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-FormTemplate.html#description)
     */
    description: string;
    /**
     * An array of [form element](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-Element.html) objects that represent an ordered list of form elements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-FormTemplate.html#elements)
     */
    elements: Element[];
    /**
     * An array of objects or [ExpressionInfo[]](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-ExpressionInfo.html) that reference [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-FormTemplate.html#expressionInfos)
     */
    expressionInfos: ExpressionInfo[];
    /**
     * The string template for defining how to format the title used in a popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-FormTemplate.html#title)
     */
    title: string;

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

  interface FormTemplateConstructor {
    /**
     * A FormTemplate formats and defines the content of a [FeatureForm](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html) for a specific [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) or [Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-FormTemplate.html)
     */

    new (properties?: FormTemplateProperties): FormTemplate;

    fromJSON(json: any): FormTemplate;
  }

  export const FormTemplate: FormTemplateConstructor;

  interface FormTemplateProperties {
    /**
     * The description of the form.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-FormTemplate.html#description)
     */
    description?: string;
    /**
     * An array of [form element](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-Element.html) objects that represent an ordered list of form elements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-FormTemplate.html#elements)
     */
    elements?: ElementProperties[];
    /**
     * An array of objects or [ExpressionInfo[]](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-ExpressionInfo.html) that reference [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-FormTemplate.html#expressionInfos)
     */
    expressionInfos?: ExpressionInfoProperties[];
    /**
     * The string template for defining how to format the title used in a popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-FormTemplate.html#title)
     */
    title?: string;
  }

  /**
   * A convenience module for importing [Element](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-Element.html) classes when developing with [TypeScript](https://developers.arcgis.com/javascript/latest/typescript-setup/).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-support-elements.html)
   */
  interface elements {}

  export const elements: elements;

  /**
   * A convenience module for importing [Geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html) classes when developing with [TypeScript](https://developers.arcgis.com/javascript/latest/typescript-setup/).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry.html)
   */
  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.
     *
     * [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 Web Mercator (wkid: 3857) or geographic/geodesic (wkid: 4326).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#geodesic)
     */
    geodesic: boolean;
    /**
     * This value defines the number of points along the curve of the circle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#numberOfPoints)
     */
    numberOfPoints: number;
    /**
     * The radius of the circle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#radius)
     */
    radius: number;
    /**
     * Unit of the radius.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#radiusUnit)
     */
    radiusUnit: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";

    /**
     * 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 {
    /**
     * A circle is a [Polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) created by specifying a [center point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#center) and a [radius](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#radius).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html)
     */

    new (properties?: CircleProperties): Circle;

    fromJSON(json: any): Circle;
  }

  export const Circle: CircleConstructor;

  interface CircleProperties extends PolygonProperties {
    /**
     * The center point of the circle.
     *
     * [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 Web Mercator (wkid: 3857) or geographic/geodesic (wkid: 4326).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#geodesic)
     */
    geodesic?: boolean;
    /**
     * This value defines the number of points along the curve of the circle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#numberOfPoints)
     */
    numberOfPoints?: number;
    /**
     * The radius of the circle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#radius)
     */
    radius?: number;
    /**
     * Unit of the radius.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Circle.html#radiusUnit)
     */
    radiusUnit?: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
  }

  /**
   * Converts between [points](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) and formatted coordinates notation strings such as:
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-coordinateFormatter.html)
   */
  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-coordinateFormatter.html#fromLatitudeLongitude)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-coordinateFormatter.html#fromMgrs)
     */
    fromMgrs(
      coordinates: string,
      spatialReference: SpatialReference,
      conversionMode:
        | "automatic"
        | "new-180-in-zone-01"
        | "new-180-in-zone-60"
        | "old-180-in-zone-01"
        | "old-180-in-zone-60"
    ): 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-coordinateFormatter.html#fromUsng)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-coordinateFormatter.html#fromUtm)
     */
    fromUtm(
      coordinates: string,
      spatialReference: SpatialReference,
      conversionMode: "latitude-band-indicators" | "north-south-indicators"
    ): 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.
     *
     * [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(): Promise<any>;
    /**
     * Returns formatted coordinates in latitude/longitude notation representing the given point's location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-coordinateFormatter.html#toLatitudeLongitude)
     */
    toLatitudeLongitude(point: Point, format: "dd" | "ddm" | "dms", decimalPlaces?: number): string;
    /**
     * Returns formatted coordinates in Military Grid Reference System (MGRS) notation representing the given point's location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-coordinateFormatter.html#toMgrs)
     */
    toMgrs(
      point: Point,
      conversionMode:
        | "automatic"
        | "new-180-in-zone-01"
        | "new-180-in-zone-60"
        | "old-180-in-zone-01"
        | "old-180-in-zone-60",
      precision?: number,
      addSpaces?: boolean
    ): string;
    /**
     * Returns formatted coordinates in United States National Grid (USNG) notation representing the given point's location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-coordinateFormatter.html#toUsng)
     */
    toUsng(point: Point, precision?: number, addSpaces?: boolean): string;
    /**
     * Returns formatted coordinates in Universal Transverse Mercator (UTM) notation representing the given point's location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-coordinateFormatter.html#toUtm)
     */
    toUtm(
      point: Point,
      conversionMode: "latitude-band-indicators" | "north-south-indicators",
      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)
     */
    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)
     */
    mmin: number;

    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 maximum X-coordinate of an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#xmax)
     */
    xmax: number;
    /**
     * The minimum X-coordinate of an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#xmin)
     */
    xmin: number;
    /**
     * The maximum Y-coordinate of an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#ymax)
     */
    ymax: number;
    /**
     * The minimum Y-coordinate of an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#ymin)
     */
    ymin: number;
    /**
     * The maximum possible `z`, or elevation, value in an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#zmax)
     */
    zmax: number;
    /**
     * The minimum possible `z`, or elevation, value of an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#zmin)
     */
    zmin: number;

    /**
     * Centers the extent to the specified [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#centerAt)
     */
    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)
     */
    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)
     */
    equals(extent: Extent): boolean;
    /**
     * Expands the extent by the given factor.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#expand)
     */
    expand(factor: number): Extent;
    /**
     * Shrinks the original extent to the intersection with the input extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#intersection)
     */
    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)
     */
    intersects(geometry: Geometry): boolean;
    /**
     * Returns an array with either one Extent that's been shifted to within +/- 180 or two Extents if the original extent intersects the International Dateline.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#offset)
     */
    offset(dx: number, dy: number, dz: number): Extent;
    /**
     * Expands the original extent to include the extent of the input Extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#union)
     */
    union(extent: Extent): Extent;
  }

  interface ExtentConstructor {
    /**
     * The minimum and maximum X and Y coordinates of a bounding box.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html)
     */

    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)
     */
    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)
     */
    mmin?: number;
    /**
     * The maximum X-coordinate of an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#xmax)
     */
    xmax?: number;
    /**
     * The minimum X-coordinate of an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#xmin)
     */
    xmin?: number;
    /**
     * The maximum Y-coordinate of an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#ymax)
     */
    ymax?: number;
    /**
     * The minimum Y-coordinate of an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#ymin)
     */
    ymin?: number;
    /**
     * The maximum possible `z`, or elevation, value in an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#zmax)
     */
    zmax?: number;
    /**
     * The minimum possible `z`, or elevation, value of an extent envelope.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html#zmin)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html#cache)
     */
    readonly cache: any;
    /**
     * The extent of the geometry.
     *
     * [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;
    /**
     * Indicates if the geometry has z-values (elevation).
     *
     * [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)
     */
    spatialReference: SpatialReference;
    /**
     * The geometry type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html#type)
     */
    readonly type: "point" | "multipoint" | "polyline" | "polygon" | "extent" | "mesh";

    /**
     * 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 {
    /**
     * The base class for geometry objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html)
     */

    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;
    /**
     * Indicates if the geometry has z-values (elevation).
     *
     * [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)
     */
    spatialReference?: SpatialReferenceProperties;
  }

  /**
   * A client-side geometry engine for testing, measuring, and analyzing the spatial relationship between two or more 2D geometries.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html)
   */
  interface geometryEngine {
    /**
     * Creates planar (or Euclidean) buffer polygons at a specified distance around the input geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#buffer)
     */
    buffer(
      geometry: Geometry | Geometry[],
      distance: number | number[],
      unit: LinearUnits | 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)
     */
    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)
     */
    contains(containerGeometry: Geometry, insideGeometry: Geometry): boolean;
    /**
     * Calculates the convex hull of the input geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#convexHull)
     */
    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)
     */
    crosses(geometry1: Geometry, geometry2: Geometry): boolean;
    /**
     * Splits the input Polyline or Polygon where it crosses a cutting Polyline.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#cut)
     */
    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)
     */
    densify(geometry: Geometry, maxSegmentLength: number, maxSegmentLengthUnit: LinearUnits | number): Geometry;
    /**
     * Creates the difference of two geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#difference)
     */
    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)
     */
    disjoint(geometry1: Geometry, geometry2: Geometry): boolean;
    /**
     * Calculates the shortest planar distance between two geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#distance)
     */
    distance(geometry1: Geometry, geometry2: Geometry, distanceUnit: LinearUnits | number): number;
    /**
     * Indicates if two geometries are equal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#equals)
     */
    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)
     */
    extendedSpatialReferenceInfo(spatialReference: SpatialReference): SpatialReferenceInfo;
    /**
     * Flips a geometry on the horizontal axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#flipHorizontal)
     */
    flipHorizontal(geometry: Geometry, flipOrigin?: Point): Geometry;
    /**
     * Flips a geometry on the vertical axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#flipVertical)
     */
    flipVertical(geometry: Geometry, flipOrigin?: Point): Geometry;
    /**
     * Performs the generalize operation on the geometries in the cursor.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#generalize)
     */
    generalize(
      geometry: Geometry,
      maxDeviation: number,
      removeDegenerateParts?: boolean,
      maxDeviationUnit?: LinearUnits | number
    ): Geometry;
    /**
     * Calculates the area of the input geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#geodesicArea)
     */
    geodesicArea(geometry: Polygon, unit: ArealUnits | number): number;
    /**
     * Creates geodesic buffer polygons at a specified distance around the input geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#geodesicBuffer)
     */
    geodesicBuffer(
      geometry: Geometry | Geometry[],
      distance: number | number[],
      unit: LinearUnits | number,
      unionResults?: boolean
    ): Polygon | Polygon[];
    /**
     * Returns a geodesically densified version of the input geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#geodesicDensify)
     */
    geodesicDensify(
      geometry: Polyline | Polygon,
      maxSegmentLength: number,
      maxSegmentLengthUnit?: LinearUnits | number
    ): Geometry;
    /**
     * Calculates the length of the input geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#geodesicLength)
     */
    geodesicLength(geometry: Geometry, unit: LinearUnits | 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)
     */
    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)
     */
    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)
     */
    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)
     */
    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)
     */
    nearestVertex(geometry: Geometry, inputPoint: Point): NearestPointResult;
    /**
     * Finds all vertices in the given distance from the specified point, sorted from the closest to the furthest and returns them as an array of Objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#nearestVertices)
     */
    nearestVertices(
      geometry: Geometry,
      inputPoint: Point,
      searchRadius: number,
      maxVertexCountToReturn: number
    ): NearestPointResult[];
    /**
     * The offset operation creates a geometry that is a constant planar distance from an input polyline or polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#offset)
     */
    offset(
      geometry: Geometry | Geometry[],
      offsetDistance: number,
      offsetUnit: LinearUnits | number,
      joinType: "round" | "bevel" | "miter" | "square",
      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)
     */
    overlaps(geometry1: Geometry, geometry2: Geometry): boolean;
    /**
     * Calculates the area of the input geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#planarArea)
     */
    planarArea(geometry: Polygon, unit: ArealUnits | number): number;
    /**
     * Calculates the length of the input geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#planarLength)
     */
    planarLength(geometry: Geometry, unit: LinearUnits | number): number;
    /**
     * Indicates if the given DE-9IM relation is true for the two geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#relate)
     */
    relate(geometry1: Geometry, geometry2: Geometry, relation: string): boolean;
    /**
     * Rotates a geometry counterclockwise by the specified number of degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#rotate)
     */
    rotate(geometry: Geometry, angle: number, rotationOrigin?: Point): Geometry;
    /**
     * Performs the simplify operation on the geometry which 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-geometry-geometryEngine.html#simplify)
     */
    simplify(geometry: Geometry): Geometry;
    /**
     * Creates the symmetric difference of two geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#symmetricDifference)
     */
    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)
     */
    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)
     */
    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)
     */
    within(innerGeometry: Geometry, outerGeometry: Geometry): boolean;
  }

  export const geometryEngine: geometryEngine;

  /**
   * Units for areal measurements.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#ArealUnits)
   */
  export type ArealUnits =
    | "acres"
    | "ares"
    | "hectares"
    | "square-feet"
    | "square-meters"
    | "square-yards"
    | "square-kilometers"
    | "square-miles";

  /**
   * Units for linear measurements.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#LinearUnits)
   */
  export type LinearUnits = "meters" | "feet" | "kilometers" | "miles" | "nautical-miles" | "yards";

  /**
   * 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;
    /**
     * 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;
  }

  /**
   * The return object of the [extendedSpatialReferenceInfo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#extendedSpatialReferenceInfo) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#SpatialReferenceInfo)
   */
  export interface SpatialReferenceInfo extends Object {
    /**
     * The XY tolerance of the spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#SpatialReferenceInfo)
     */
    tolerance: number;
    /**
     * Base factor.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#SpatialReferenceInfo)
     */
    unitBaseFactor: number;
    /**
     * Unit ID.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#SpatialReferenceInfo)
     */
    unitID: number;
    /**
     * Square derivative.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#SpatialReferenceInfo)
     */
    unitSquareDerivative: number;
    /**
     * Unit type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngine.html#SpatialReferenceInfo)
     */
    unitType: number;
  }

  /**
   * An asynchronous client-side geometry engine for testing, measuring, and analyzing the spatial relationship between two or more 2D geometries.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html)
   */
  interface geometryEngineAsync {
    /**
     * Creates planar (or Euclidean) buffer polygons at a specified distance around the input geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#buffer)
     */
    buffer(
      geometry: Geometry | Geometry[],
      distance: number | number[],
      unit: LinearUnits | number,
      unionResults?: boolean
    ): Promise<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)
     */
    clip(geometry: Geometry, envelope: Extent): Promise<Geometry>;
    /**
     * Indicates if one geometry contains another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#contains)
     */
    contains(containerGeometry: Geometry, insideGeometry: Geometry): Promise<boolean>;
    /**
     * Calculates the convex hull of the input geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#convexHull)
     */
    convexHull(geometry: Geometry, merge?: boolean): Promise<Geometry>;
    /**
     * Indicates if one geometry crosses another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#crosses)
     */
    crosses(geometry1: Geometry, geometry2: Geometry): Promise<boolean>;
    /**
     * Split the input Polyline or Polygon where it crosses a cutting Polyline.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#cut)
     */
    cut(geometry: Geometry, cutter: Polyline): Promise<Geometry[]>;
    /**
     * Densify geometries by plotting points between existing vertices.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#densify)
     */
    densify(
      geometry: Geometry,
      maxSegmentLength: number,
      maxSegmentLengthUnit: LinearUnits | number
    ): Promise<Geometry>;
    /**
     * Creates the difference of two geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#difference)
     */
    difference(inputGeometry: Geometry | Geometry[], subtractor: Geometry): Promise<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)
     */
    disjoint(geometry1: Geometry, geometry2: Geometry): Promise<boolean>;
    /**
     * Calculates the shortest planar distance between two geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#distance)
     */
    distance(geometry1: Geometry, geometry2: Geometry, distanceUnit: LinearUnits | number): Promise<number>;
    /**
     * Indicates if two geometries are equal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#equals)
     */
    equals(geometry1: Geometry, geometry2: Geometry): Promise<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)
     */
    extendedSpatialReferenceInfo(spatialReference: SpatialReference): Promise<geometryEngineAsyncSpatialReferenceInfo>;
    /**
     * Flips a geometry on the horizontal axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#flipHorizontal)
     */
    flipHorizontal(geometry: Geometry, flipOrigin?: Point): Promise<Geometry>;
    /**
     * Flips a geometry on the vertical axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#flipVertical)
     */
    flipVertical(geometry: Geometry, flipOrigin?: Point): Promise<Geometry>;
    /**
     * Performs the generalize operation on the geometries in the cursor.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#generalize)
     */
    generalize(
      geometry: Geometry,
      maxDeviation: number,
      removeDegenerateParts?: boolean,
      maxDeviationUnit?: LinearUnits | number
    ): Promise<Geometry>;
    /**
     * Calculates the area of the input geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#geodesicArea)
     */
    geodesicArea(geometry: Polygon, unit: ArealUnits | number): Promise<number>;
    /**
     * Creates geodesic buffer polygons at a specified distance around the input geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#geodesicBuffer)
     */
    geodesicBuffer(
      geometry: Geometry | Geometry[],
      distance: number | number[],
      unit: LinearUnits | number,
      unionResults?: boolean
    ): Promise<Polygon | Polygon[]>;
    /**
     * Returns a geodesically densified version of the input geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#geodesicDensify)
     */
    geodesicDensify(
      geometry: Polyline | Polygon,
      maxSegmentLength: number,
      maxSegmentLengthUnit?: LinearUnits | number
    ): Promise<Geometry>;
    /**
     * Calculates the length of the input geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#geodesicLength)
     */
    geodesicLength(geometry: Geometry, unit: LinearUnits | number): Promise<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)
     */
    intersect(geometry: Geometry | Geometry[], intersector: Geometry): Promise<Geometry>;
    /**
     * Indicates if one geometry intersects another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#intersects)
     */
    intersects(geometry1: Geometry, geometry2: Geometry): Promise<boolean>;
    /**
     * Indicates if the given geometry is topologically simple.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#isSimple)
     */
    isSimple(geometry: Geometry): Promise<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)
     */
    nearestCoordinate(geometry: Geometry, inputPoint: Point): Promise<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)
     */
    nearestVertex(geometry: Geometry, inputPoint: Point): Promise<NearestPointResult>;
    /**
     * Finds all vertices in the given distance from the specified point, sorted from the closest to the furthest and returns them as an array of Objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#nearestVertices)
     */
    nearestVertices(
      geometry: Geometry,
      inputPoint: Point,
      searchRadius: number,
      maxVertexCountToReturn: number
    ): Promise<NearestPointResult>;
    /**
     * The offset operation creates a geometry that is a constant planar distance from an input polyline or polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#offset)
     */
    offset(
      geometry: Geometry | Geometry[],
      offsetDistance: number,
      offsetUnit: LinearUnits | number,
      joinType: "round" | "bevel" | "miter" | "square",
      bevelRatio?: number,
      flattenError?: number
    ): Promise<Geometry | Geometry[]>;
    /**
     * Indicates if one geometry overlaps another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#overlaps)
     */
    overlaps(geometry1: Geometry, geometry2: Geometry): Promise<boolean>;
    /**
     * Calculates the area of the input geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#planarArea)
     */
    planarArea(geometry: Polygon, unit: ArealUnits | number): Promise<number>;
    /**
     * Calculates the length of the input geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#planarLength)
     */
    planarLength(geometry: Geometry, unit: LinearUnits | number): Promise<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)
     */
    relate(geometry1: Geometry, geometry2: Geometry, relation: string): Promise<boolean>;
    /**
     * Rotates a geometry counterclockwise by the specified number of degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#rotate)
     */
    rotate(geometry: Geometry, angle: number, rotationOrigin?: Point): Promise<Geometry>;
    /**
     * Performs the simplify operation on the geometry which 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-geometry-geometryEngineAsync.html#simplify)
     */
    simplify(geometry: Geometry): Promise<Geometry>;
    /**
     * Creates the symmetric difference of two geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#symmetricDifference)
     */
    symmetricDifference(leftGeometry: Geometry | Geometry[], rightGeometry: Geometry): Promise<Geometry | Geometry[]>;
    /**
     * Indicates if one geometry touches another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#touches)
     */
    touches(geometry1: Geometry, geometry2: Geometry): Promise<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)
     */
    union(geometries: Geometry[]): Promise<Geometry>;
    /**
     * Indicates if one geometry is within another geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#within)
     */
    within(innerGeometry: Geometry, outerGeometry: Geometry): Promise<boolean>;
  }

  export const geometryEngineAsync: geometryEngineAsync;

  /**
   * The return object of the [extendedSpatialReferenceInfo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#extendedSpatialReferenceInfo) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#SpatialReferenceInfo)
   */
  export interface geometryEngineAsyncSpatialReferenceInfo extends Object {
    /**
     * The XY tolerance of the spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#SpatialReferenceInfo)
     */
    tolerance: number;
    /**
     * Base factor.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#SpatialReferenceInfo)
     */
    unitBaseFactor: number;
    /**
     * Unit ID.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#SpatialReferenceInfo)
     */
    unitID: number;
    /**
     * Square derivative.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#SpatialReferenceInfo)
     */
    unitSquareDerivative: number;
    /**
     * Unit type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-geometryEngineAsync.html#SpatialReferenceInfo)
     */
    unitType: number;
  }

  interface HeightModelInfo extends Accessor, JSONSupport {
    /**
     * The surface type or height model of the vertical coordinate system (VCS).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-HeightModelInfo.html#heightModel)
     */
    readonly heightModel: "gravity-related-height" | "ellipsoidal";
    /**
     * The unit of the vertical coordinate system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-HeightModelInfo.html#heightUnit)
     */
    readonly heightUnit:
      | "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";
    /**
     * The datum realization of the vertical coordinate system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-HeightModelInfo.html#vertCRS)
     */
    readonly vertCRS: string;
  }

  interface HeightModelInfoConstructor {
    /**
     * The height model info defines the characteristics of a vertical coordinate system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-HeightModelInfo.html)
     */

    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-HeightModelInfo.html#heightModel)
     */
    heightModel?: "gravity-related-height" | "ellipsoidal";
    /**
     * The unit of the vertical coordinate system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-HeightModelInfo.html#heightUnit)
     */
    heightUnit?:
      | "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";
    /**
     * The datum realization of the vertical coordinate system.
     *
     * [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 materials to different regions of the same mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#components)
     */
    components: MeshComponent[];
    /**
     * The string value representing the type of geometry.
     *
     * [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.
     *
     * [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)
     */
    addComponent(component: MeshComponent | MeshComponentProperties): void;
    /**
     * Centers the mesh at the specified location without changing its scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#centerAt)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#offset)
     */
    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)
     */
    removeComponent(component: MeshComponent): void;
    /**
     * Rotates the mesh geometry around its x, y and z axis (in that order).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#rotate)
     */
    rotate(angleX: number, angleY: number, angleZ: number, params?: MeshRotateParams): Mesh;
    /**
     * Scales the mesh geometry by the specified factor.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#scale)
     */
    scale(factor: number, params?: MeshScaleParams): Mesh;
    /**
     * Notifies that any cached values that depend on vertex attributes need to be recalculated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributesChanged)
     */
    vertexAttributesChanged(): void;
  }

  interface MeshConstructor {
    /**
     * A mesh is a general, client-side 3D [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html) type composed of [vertices with attributes](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributes).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html)
     */

    new (properties?: MeshProperties): Mesh;

    /**
     * Creates a mesh representing a box.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createBox)
     */
    createBox(location: Point, params?: MeshCreateBoxParams): Mesh;
    /**
     * Creates a mesh representing a cylinder.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createCylinder)
     */
    createCylinder(location: Point, params?: MeshCreateCylinderParams): Mesh;
    /**
     * Creates a new mesh geometry from a glTF model referenced by the `url` parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createFromGLTF)
     */
    createFromGLTF(location: Point, url: string, params?: MeshCreateFromGLTFParams): Promise<Mesh>;
    /**
     * Creates a new mesh geometry from a polygon geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createFromPolygon)
     */
    createFromPolygon(polygon: Polygon, params?: MeshCreateFromPolygonParams): Mesh;
    /**
     * Creates a mesh representing a plane.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createPlane)
     */
    createPlane(location: Point, params?: MeshCreatePlaneParams): Mesh;
    /**
     * Creates a mesh representing a sphere.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createSphere)
     */
    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 materials to different regions of the same mesh.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributes)
     */
    vertexAttributes?: MeshVertexAttributesProperties;
  }

  export interface MeshCenterAtParams extends Object {
    /**
     * Whether to georeference relative to the globe or the projected coordinate system (PCS).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#centerAt)
     */
    geographic?: boolean;
    /**
     * The origin at which to 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.
     *
     * [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).
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createBox)
     */
    unit?:
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet";
    /**
     * 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.
     *
     * [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.
     *
     * [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).
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createCylinder)
     */
    unit?:
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet";
    /**
     * The additional number of subdivisions for generating the mesh representing a cylinder.
     *
     * [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 to georeference relative to the globe or the projected coordinate system (PCS).
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createPlane)
     */
    size?: number | MeshCreatePlaneParamsSize;
    /**
     * Direction the plane is facing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createPlane)
     */
    facing?: "east" | "west" | "north" | "south" | "up" | "down";
    /**
     * Whether to georeference relative to the globe or the projected coordinate system (PCS).
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createPlane)
     */
    unit?:
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet";
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createSphere)
     */
    size?: number | MeshCreateSphereParamsSize;
    /**
     * Whether to georeference relative to the globe or the projected coordinate system (PCS).
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#createSphere)
     */
    unit?:
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet";
    /**
     * The additional number of subdivisions for generating the mesh representing a sphere.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#offset)
     */
    geographic?: boolean;
    /**
     * The origin at which to apply the offset.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#offset)
     */
    origin?: Point;
  }

  export interface MeshRotateParams extends Object {
    /**
     * Whether to georeference relative to the globe or the projected coordinate system (PCS).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#rotate)
     */
    geographic?: boolean;
    /**
     * The origin around which to rotate.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#scale)
     */
    geographic?: boolean;
    /**
     * The origin point for scaling.
     *
     * [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.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributes)
     */
    color?: Uint8Array | number[] | Uint8ClampedArray;
    /**
     * **Since: 4.11**    A flat array of the vertex tangents (4 elements per vertex ranging from -1 to 1.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributes)
     */
    tangent?: Float32Array | number[] | Float64Array;
  }

  export interface MeshVertexAttributes extends AnonymousAccessor {
    /**
     * A flat array of vertex positions.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributes)
     */
    color?: Uint8Array;
    /**
     * **Since: 4.11**    A flat array of the vertex tangents (4 elements per vertex ranging from -1 to 1.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html#vertexAttributes)
     */
    tangent?: Float32Array;
  }

  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[][];
    /**
     * The string value representing the type of geometry.
     *
     * [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)
     */
    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)
     */
    getPoint(index: number): Point;
    /**
     * Removes a point from the Multipoint.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html#removePoint)
     */
    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)
     */
    setPoint(index: number, point: Point | number[]): Multipoint;
  }

  interface MultipointConstructor {
    /**
     * An ordered collection of points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#latitude)
     */
    latitude: number;
    /**
     * The longitude of the point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#longitude)
     */
    longitude: number;
    /**
     * The m-coordinate of the point in map units.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#m)
     */
    m: number;
    /**
     * The string value representing the type of geometry.
     *
     * [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)
     */
    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)
     */
    y: number;
    /**
     * The z-coordinate (or elevation) of the point in map units.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#z)
     */
    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)
     */
    copy(other: Point): void;
    /**
     * Computes the Euclidean distance between this Point and a given Point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#distance)
     */
    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)
     */
    equals(point: Point): boolean;
    /**
     * Modifies the point geometry in-place by shifting the X-coordinate to within +/- 180 span in map units.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#normalize)
     */
    normalize(): Point;
  }

  interface PointConstructor {
    /**
     * A location defined by X, Y, and Z coordinates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html)
     */

    new (properties?: PointProperties): Point;

    fromJSON(json: any): Point;
  }

  export const Point: PointConstructor;

  interface PointProperties extends GeometryProperties {
    /**
     * The latitude of the point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#latitude)
     */
    latitude?: number;
    /**
     * The longitude of the point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#longitude)
     */
    longitude?: number;
    /**
     * The m-coordinate of the point in map units.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#m)
     */
    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)
     */
    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)
     */
    y?: number;
    /**
     * The z-coordinate (or elevation) of the point in map units.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html#z)
     */
    z?: number;
  }

  interface Polygon extends Geometry {
    /**
     * The centroid of the polygon.
     *
     * [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 is self-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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#rings)
     */
    rings: number[][][];
    /**
     * The string value representing the type of geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#type)
     */
    readonly type: "polygon";

    /**
     * Adds a ring to the Polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#addRing)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#contains)
     */
    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)
     */
    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)
     */
    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)
     */
    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)
     */
    removePoint(ringIndex: number, pointIndex: number): Point[];
    /**
     * Removes a ring from the Polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#removeRing)
     */
    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)
     */
    setPoint(ringIndex: number, pointIndex: number, point: Point | number[]): Polygon;
  }

  interface PolygonConstructor {
    /**
     * A polygon contains an array of [rings](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#rings) and a [spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#spatialReference).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html)
     */

    new (properties?: PolygonProperties): Polygon;

    /**
     * Converts the given Extent to a Polygon instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html#fromExtent)
     */
    fromExtent(extent: Extent): Polygon;

    fromJSON(json: any): Polygon;
  }

  export const Polygon: PolygonConstructor;

  interface PolygonProperties extends GeometryProperties {
    /**
     * The centroid of the polygon.
     *
     * [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 is self-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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#paths)
     */
    paths: number[][][];

    readonly type: "polyline";

    /**
     * Adds a path, or line segment, to the polyline.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#addPath)
     */
    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)
     */
    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)
     */
    insertPoint(pathIndex: number, pointIndex: number, point: Point | number[]): Polyline;
    /**
     * Removes a path from the Polyline.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#removePath)
     */
    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)
     */
    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)
     */
    setPoint(pathIndex: number, pointIndex: number, point: Point | number[]): Polyline;
  }

  interface PolylineConstructor {
    /**
     * A polyline contains an array of [paths](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#paths) and [spatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#spatialReference).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html#paths)
     */
    paths?: number[][][];
  }

  /**
   * A client-side projection engine for converting geometries from one [SpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html) to another.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-projection.html)
   */
  interface projection {
    /**
     * Returns the default geographic transformation used to convert the geometry from the input spatial reference to the output spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-projection.html#getTransformation)
     */
    getTransformation(
      inSpatialReference: SpatialReference | SpatialReferenceProperties,
      outSpatialReference: SpatialReference | SpatialReferenceProperties,
      extent?: Extent
    ): GeographicTransformation;
    /**
     * Returns a list of all geographic transformations suitable to convert geometries from the input spatial reference to the specified output spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-projection.html#getTransformations)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-projection.html#isSupported)
     */
    isSupported(): boolean;
    /**
     * Loads this module's dependencies.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-projection.html#load)
     */
    load(): Promise<any>;
    /**
     * Projects a geometry or an array of geometries to the specified output spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-projection.html#project)
     */
    project(
      geometry: Geometry | Geometry[],
      outSpatialReference: SpatialReference | SpatialReferenceProperties,
      geographicTransformation?: GeographicTransformation
    ): Geometry | Geometry[];
  }

  export const projection: projection;

  interface SpatialReference extends Accessor, JSONSupport {
    /**
     * An [image coordinate system](https://developers.arcgis.com/rest/services-reference/raster-ics.htm) defines the spatial reference used to display the image in its original coordinates without distortion, map transformations or ortho-rectification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#imageCoordinateSystem)
     */
    imageCoordinateSystem: any;
    /**
     * 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 International Date Line.
     *
     * [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.
     *
     * [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)
     */
    equals(spatialReference: SpatialReference): boolean;
  }

  interface SpatialReferenceConstructor {
    /**
     * Defines the spatial reference of a view, layer, or task parameters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html)
     */

    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 {
    /**
     * An [image coordinate system](https://developers.arcgis.com/rest/services-reference/raster-ics.htm) defines the spatial reference used to display the image in its original coordinates without distortion, map transformations or ortho-rectification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#imageCoordinateSystem)
     */
    imageCoordinateSystem?: any;
    /**
     * The well-known ID of a spatial reference.
     *
     * [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;
  }

  /**
   * This class performs geodetic computations for Earth and 70+ non-Earth spheroids.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-geodesicUtils.html)
   */
  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)
     */
    geodesicAreas(
      polygons: Polygon[],
      unit?:
        | "square-millimeters"
        | "square-centimeters"
        | "square-decimeters"
        | "square-meters"
        | "square-kilometers"
        | "square-inches"
        | "square-feet"
        | "square-yards"
        | "square-miles"
        | "square-us-feet"
        | "acres"
        | "ares"
        | "hectares"
    ): 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)
     */
    geodesicDensify(geometry: Polyline | Polygon, maxSegmentLength: number): Polyline | Polygon;
    /**
     * Geodetically computes the direction and distance between two known locations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-geodesicUtils.html#geodesicDistance)
     */
    geodesicDistance(
      from: Point,
      to: Point,
      unit?:
        | "millimeters"
        | "centimeters"
        | "decimeters"
        | "meters"
        | "kilometers"
        | "inches"
        | "feet"
        | "yards"
        | "miles"
        | "nautical-miles"
        | "us-feet"
    ): 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)
     */
    geodesicLengths(
      geometries: Polyline[] | Polygon[],
      unit?:
        | "millimeters"
        | "centimeters"
        | "decimeters"
        | "meters"
        | "kilometers"
        | "inches"
        | "feet"
        | "yards"
        | "miles"
        | "nautical-miles"
        | "us-feet"
    ): 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)
     */
    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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-GeographicTransformation.html#getInverse)
     */
    getInverse(): GeographicTransformation;
  }

  interface GeographicTransformationConstructor {
    /**
     * Projecting your data between coordinate systems sometimes requires transforming between geographic coordinate systems.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-GeographicTransformation.html)
     */

    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)
     */
    isInverse: boolean;
    /**
     * The well-known id (wkid) hat represents a known geographic transformation.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-GeographicTransformationStep.html#getInverse)
     */
    getInverse(): GeographicTransformationStep;
  }

  interface GeographicTransformationStepConstructor {
    /**
     * Represents a step in the process of transforming coordinates from one geographic coordinate system to another.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-GeographicTransformationStep.html)
     */

    new (properties?: any): GeographicTransformationStep;
  }

  export const GeographicTransformationStep: GeographicTransformationStepConstructor;

  /**
   * Provides utility methods for working with ArcGIS JSON geometry objects.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-jsonUtils.html)
   */
  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 object generated from an ArcGIS product.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-jsonUtils.html#fromJSON)
     */
    fromJSON(json: any): Geometry;
    /**
     * Returns the type for a given geometry in the JSON format used by ArcGIS.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-jsonUtils.html#getJsonType)
     */
    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 the mesh to which the component belongs.
     *
     * [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 | MeshMaterialMetallicRoughness;
    /**
     * Specifies the type of normals used for lighting.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshComponent.html#shading)
     */
    shading: "source" | "flat" | "smooth";

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

  interface MeshComponentConstructor {
    /**
     * The MeshComponent class is used to apply one or more materials to a single [Mesh](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshComponent.html)
     */

    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 the mesh to which the component belongs.
     *
     * [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 | MeshMaterialMetallicRoughnessProperties;
    /**
     * Specifies the type of normals used for lighting.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshComponent.html#shading)
     */
    shading?: "source" | "flat" | "smooth";
  }

  interface MeshMaterial extends Accessor {
    /**
     * Specifies how transparency on the object is handled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html#alphaCutoff)
     */
    alphaCutoff: number;
    /**
     * Specifies how transparency on the object is handled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html#alphaMode)
     */
    alphaMode: "auto" | "blend" | "opaque" | "mask";
    /**
     * Specifies a single, uniform color for the mesh component.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html#color)
     */
    color: Color;
    /**
     * Specifies a texture from which to get color information.
     *
     * [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)
     */
    doubleSided: boolean;
    /**
     * Specifies a texture from which to get normal information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html#normalTexture)
     */
    normalTexture: MeshTexture;
  }

  interface MeshMaterialConstructor {
    /**
     * The material determines how a [MeshComponent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshComponent.html) is visualized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html)
     */

    new (properties?: MeshMaterialProperties): MeshMaterial;
  }

  export const MeshMaterial: MeshMaterialConstructor;

  interface MeshMaterialProperties {
    /**
     * Specifies how transparency on the object is handled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html#alphaCutoff)
     */
    alphaCutoff?: number;
    /**
     * Specifies how transparency on the object is handled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html#alphaMode)
     */
    alphaMode?: "auto" | "blend" | "opaque" | "mask";
    /**
     * Specifies a single, uniform color for the mesh component.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html#color)
     */
    color?: Color | number[] | string;
    /**
     * Specifies a texture from which to get color information.
     *
     * [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)
     */
    doubleSided?: boolean;
    /**
     * Specifies a texture from which to get normal information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html#normalTexture)
     */
    normalTexture?: MeshTextureProperties | HTMLImageElement | HTMLCanvasElement | ImageData | string;
  }

  interface MeshMaterialMetallicRoughness extends MeshMaterial {
    /**
     * Specifies a single, uniform emissive color for the [MeshComponent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshComponent.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterialMetallicRoughness.html#emissiveColor)
     */
    emissiveColor: Color;
    /**
     * Specifies a texture from which to get emissive color information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterialMetallicRoughness.html#emissiveTexture)
     */
    emissiveTexture: MeshTexture;
    /**
     * Specifies how much the material behaves like a metal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterialMetallicRoughness.html#metallic)
     */
    metallic: number;
    /**
     * Specifies a texture from which to get the combined metallic/roughness information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterialMetallicRoughness.html#metallicRoughnessTexture)
     */
    metallicRoughnessTexture: MeshTexture;
    /**
     * Allows to specify a texture to get the occlusion information from.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterialMetallicRoughness.html#occlusionTexture)
     */
    occlusionTexture: MeshTexture;
    /**
     * Indicates how rough the surface of the material is.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterialMetallicRoughness.html#roughness)
     */
    roughness: number;
  }

  interface MeshMaterialMetallicRoughnessConstructor {
    /**
     * A material determines how a [MeshComponent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshComponent.html) is visualized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterialMetallicRoughness.html)
     */

    new (properties?: MeshMaterialMetallicRoughnessProperties): MeshMaterialMetallicRoughness;
  }

  export const MeshMaterialMetallicRoughness: MeshMaterialMetallicRoughnessConstructor;

  interface MeshMaterialMetallicRoughnessProperties extends MeshMaterialProperties {
    /**
     * Specifies a single, uniform emissive color for the [MeshComponent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshComponent.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterialMetallicRoughness.html#emissiveColor)
     */
    emissiveColor?: Color | number[] | string;
    /**
     * Specifies a texture from which to get emissive color information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterialMetallicRoughness.html#emissiveTexture)
     */
    emissiveTexture?: MeshTextureProperties | HTMLImageElement | HTMLCanvasElement | ImageData | string;
    /**
     * Specifies how much the material behaves like a metal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterialMetallicRoughness.html#metallic)
     */
    metallic?: number;
    /**
     * Specifies a texture from which to get the combined metallic/roughness information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterialMetallicRoughness.html#metallicRoughnessTexture)
     */
    metallicRoughnessTexture?: MeshTextureProperties | HTMLImageElement | HTMLCanvasElement | ImageData | string;
    /**
     * Allows to specify a texture to get the occlusion information from.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterialMetallicRoughness.html#occlusionTexture)
     */
    occlusionTexture?: MeshTextureProperties | HTMLImageElement | HTMLCanvasElement | ImageData | string;
    /**
     * Indicates how rough the surface of the material is.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterialMetallicRoughness.html#roughness)
     */
    roughness?: number;
  }

  interface MeshTexture extends Accessor {
    /**
     * A direct reference to the image or video data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html#data)
     */
    data: HTMLImageElement | HTMLCanvasElement | any | ImageData;
    /**
     * Indicates whether the image data should be interpreted as being semi-transparent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html#transparent)
     */
    transparent: boolean;
    /**
     * The url to the image resource.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html#wrap)
     */
    wrap: "clamp" | "repeat" | "mirror" | SeparableWrapModes;

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

  interface MeshTextureConstructor {
    /**
     * MeshTexture represents image data to be used for [MeshMaterial](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html) or [MeshMaterialMetallicRoughness](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterialMetallicRoughness.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html)
     */

    new (properties?: MeshTextureProperties): MeshTexture;
  }

  export const MeshTexture: MeshTextureConstructor;

  interface MeshTextureProperties {
    /**
     * A direct reference to the image or video data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html#data)
     */
    data?: HTMLImageElement | HTMLCanvasElement | any | ImageData;
    /**
     * Indicates whether the image data should be interpreted as being semi-transparent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html#transparent)
     */
    transparent?: boolean;
    /**
     * The url to the image resource.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html#wrap)
     */
    wrap?: "clamp" | "repeat" | "mirror" | SeparableWrapModes;
  }

  /**
   * A separable wrap configuration for horizontal and vertical wrapping modes.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html#SeparableWrapModes)
   */
  export interface SeparableWrapModes extends Object {
    /**
     * Horizontal wrapping mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html#SeparableWrapModes)
     */
    horizontal: "clamp" | "repeat" | "mirror";
    /**
     * Vertical wrapping mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html#SeparableWrapModes)
     */
    vertical: "clamp" | "repeat" | "mirror";
  }

  /**
   * Various utilities and convenience functions for working with [Mesh](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html) objects.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html)
   */
  interface meshUtils {
    /**
     * Creates an elevation sampler from a mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#createElevationSampler)
     */
    createElevationSampler(mesh: Mesh, options?: meshUtilsCreateElevationSamplerOptions): Promise<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)
     */
    createFromElevation(
      source: ElevationLayer | Ground | ElevationSampler,
      extent: Extent,
      options?: meshUtilsCreateFromElevationOptions
    ): Promise<Mesh>;
    /**
     * Georeferences vertices specified in a Cartesian coordinate system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#georeference)
     */
    georeference(
      vertexAttributes: VertexAttributes,
      location: Point,
      options?: meshUtilsGeoreferenceOptions
    ): VertexAttributes;
    /**
     * Merges multiple meshes into a single mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#merge)
     */
    merge(geometries: Mesh[]): Mesh;
    /**
     * Projects georeferenced vertices to a Cartesian coordinate system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#ungeoreference)
     */
    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)
     */
    noDataValue?: number;
  }

  export interface meshUtilsCreateFromElevationOptions extends Object {
    /**
     * Controls the horizontal resolution (cell size) in meters from which elevation data is sampled (defaults to `auto`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#createFromElevation)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#georeference)
     */
    unit?:
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet";
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#ungeoreference)
     */
    unit?:
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet";
  }

  /**
   * 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;
    /**
     * The tangent buffer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-meshUtils.html#VertexAttributes)
     */
    tangent?: Float32Array;
  }

  /**
   * Provides a utility method that normalizes geometries that intersect the central meridian or fall outside the world extent so they stay within the coordinate system of the view.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-normalizeUtils.html)
   */
  interface normalizeUtils {
    /**
     * Normalizes geometries that intersect the central meridian or fall outside the world extent so they stay within the coordinate system of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-normalizeUtils.html#normalizeCentralMeridian)
     */
    normalizeCentralMeridian(
      geometries: Geometry[],
      geometryService?: GeometryService,
      requestOptions?: any
    ): Promise<Geometry[]>;
  }

  export const normalizeUtils: normalizeUtils;

  /**
   * Converts Web Mercator coordinates to geographic coordinates and vice versa.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-webMercatorUtils.html)
   */
  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, or if 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)
     */
    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)
     */
    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)
     */
    lngLatToXY(long: number, lat: number): number[];
    /**
     * Projects the geometry clientside (if possible).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-webMercatorUtils.html#project)
     */
    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)
     */
    webMercatorToGeographic(geometry: Geometry): Geometry;
    /**
     * Translates the given Web Mercator coordinates to Longitude and Latitude values (decimal degrees).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-webMercatorUtils.html#xyToLngLat)
     */
    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;
    /**
     * The geometry that defines the graphic's location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#geometry)
     */
    geometry: Geometry;
    /**
     * Indicates whether the graphic refers to an aggregate, or [cluster](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html) graphic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#isAggregate)
     */
    readonly isAggregate: boolean;
    /**
     * 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.
     *
     * [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.
     *
     * [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)
     */
    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)
     */
    getAttribute(name: string): any;
    /**
     * Returns the popup template applicable for the graphic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#getEffectivePopupTemplate)
     */
    getEffectivePopupTemplate(defaultPopupTemplateEnabled?: boolean): PopupTemplate;
    /**
     * Returns the Object ID of the feature associated with the graphic, if it exists.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#getObjectId)
     */
    getObjectId(): number;
    /**
     * Sets a new value to the specified attribute.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#setAttribute)
     */
    setAttribute(name: string, newValue: any): void;
  }

  interface GraphicConstructor {
    /**
     * A Graphic is a vector representation of real world geographic phenomena.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html)
     */

    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;
    /**
     * The geometry that defines the graphic's location.
     *
     * [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.
     *
     * [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.
     *
     * [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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#layers)
     */
    layers: Collection<ElevationLayer>;
    /**
     * Indicates whether the instance has loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#loaded)
     */
    readonly loaded: boolean;
    /**
     * Specifies the user navigation constraints relative to the 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#opacity)
     */
    opacity: number;
    /**
     * The color of the ground surface, displayed underneath the basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#surfaceColor)
     */
    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 layers for elevation data and caching it so values may be sampled quickly afterwards.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#createElevationSampler)
     */
    createElevationSampler(extent: Extent, options?: GroundCreateElevationSamplerOptions): Promise<ElevationSampler>;
    /**
     * Destroys the ground and its [layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#layers).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#destroy)
     */
    destroy(): void;
    /**
     * Loads all the externally loadable resources associated with the ground.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#loadAll)
     */
    loadAll(): Promise<Ground>;
    /**
     * Query the ground layer services for elevation values for the given geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#queryElevation)
     */
    queryElevation(
      geometry: Point | Multipoint | Polyline,
      options?: GroundQueryElevationOptions
    ): Promise<ElevationQueryResult>;
  }

  interface GroundConstructor {
    /**
     * The Ground class contains properties that specify how the ground surface is displayed in 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-Ground.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#layers)
     */
    layers?: CollectionProperties<ElevationLayerProperties>;
    /**
     * Specifies the user navigation constraints relative to the 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#opacity)
     */
    opacity?: number;
    /**
     * The color of the ground surface, displayed underneath the basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#surfaceColor)
     */
    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.
     *
     * [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 {
    /**
     * Controls the horizontal resolution (cell size) in meters from which elevation data is sampled (defaults to `auto`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#createElevationSampler)
     */
    demResolution?: number | string;
    /**
     * The value to use when there is no data available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#createElevationSampler)
     */
    noDataValue?: number;
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#createElevationSampler)
     */
    signal?: AbortSignal;
  }

  export interface GroundNavigationConstraintProperties extends Object {
    /**
     * The type of the constraint.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#navigationConstraint)
     */
    type?: "stay-above" | "none";
  }

  export interface GroundNavigationConstraint extends AnonymousAccessor {
    /**
     * The type of the constraint.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#navigationConstraint)
     */
    type: "stay-above" | "none";
  }

  export interface GroundQueryElevationOptions extends Object {
    /**
     * Controls the horizontal resolution (cell size) in meters from which elevation data is sampled (defaults to `auto`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#queryElevation)
     */
    demResolution?: number | string;
    /**
     * Indicates whether to return additional sample information for each sampled coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#queryElevation)
     */
    returnSampleInfo?: boolean;
    /**
     * The value that appears in the resulting geometry when there is no data available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#queryElevation)
     */
    noDataValue?: number;
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#queryElevation)
     */
    signal?: AbortSignal;
  }

  export interface ElevationQueryResultSampleInfo extends Object {
    /**
     * The resolution at which the z-value was sampled.
     *
     * [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/enterprise/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.
     *
     * [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.
     *
     * [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 with the newly acquired token.
     *
     * [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/enterprise/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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#dialog)
     */
    dialog: Widget;
    /**
     * The suggested lifetime of the token in minutes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#tokenValidity)
     */
    tokenValidity: number;

    /**
     * Returns a [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 and is allowed to do so when using the given application id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#checkAppAccess)
     */
    checkAppAccess(resUrl: string, appId: string): Promise<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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#checkSignInStatus)
     */
    checkSignInStatus(resUrl: string): Promise<Credential>;
    /**
     * Destroys all credentials.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#destroyCredentials)
     */
    destroyCredentials(): void;
    /**
     * Disables the use of `window.postMessage` to serve authentication requests that were enabled by [enablePostMessageAuth](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#enablePostMessageAuth).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#disablePostMessageAuth)
     */
    disablePostMessageAuth(): void;
    /**
     * Enables the IdentityManager to serve authentication requests for the given resource from apps running in child iframes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#enablePostMessageAuth)
     */
    enablePostMessageAuth(resUrl?: string): void;
    /**
     * Returns the [Credential](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-Credential.html) for the resource identified by the specified url.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#findCredential)
     */
    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)
     */
    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)
     */
    findServerInfo(url: string): ServerInfo;
    /**
     * Returns an object containing a token and its expiration time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#generateToken)
     */
    generateToken(serverInfo: ServerInfo, userInfo: any, options?: IdentityManagerGenerateTokenOptions): Promise<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)
     */
    getCredential(url: string, options?: IdentityManagerGetCredentialOptions): Promise<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)
     */
    initialize(json: any): void;
    /**
     * Indicates if the IdentityManager is busy accepting user input.
     *
     * [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)
     */
    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)
     */
    registerServers(serverInfos: ServerInfo[]): void;
    /**
     * Registers the given OAuth 2.0 access token or ArcGIS Server token with the IdentityManager.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#registerToken)
     */
    registerToken(properties: IdentityManagerRegisterTokenProperties): void;
    /**
     * Once a user successfully logs in, they are redirected back to the application.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#setOAuthRedirectionHandler)
     */
    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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#setProtocolErrorHandler)
     */
    setProtocolErrorHandler(handlerFunction: IdentityManagerSetProtocolErrorHandlerHandlerFunction): void;
    /**
     * Return properties of this object in JSON format.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#toJSON)
     */
    toJSON(): any;

    on(name: "dialog-create", eventHandler: IdentityManagerDialogCreateEventHandler): IHandle;

    on(name: "credential-create", eventHandler: IdentityManagerCredentialCreateEventHandler): IHandle;
  }

  interface IdentityManagerConstructor {
    /**
     * This object provides the framework and helper methods used in managing user credentials for the following resources:
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html)
     */

    new (): IdentityManager;
  }

  export const IdentityManager: IdentityManagerConstructor;

  export interface IdentityManagerCredentialCreateEvent {
    credential: Credential;
  }

  export interface IdentityManagerDialogCreateEvent {}

  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)
     */
    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...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#registerToken)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#registerToken)
     */
    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...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#registerToken)
     */
    ssl?: boolean;
    /**
     * The access token.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#registerToken)
     */
    token: string;
    /**
     * The id of the user who owns the access token.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#registerToken)
     */
    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;
  }

  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)
     */
    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)
     */
    expiration: number;
    /**
     * Set this property to `true` to force the user to sign in with the id in `userId`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#forceUserId)
     */
    forceUserId: boolean;
    /**
     * The locale for the OAuth sign in page.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#locale)
     */
    locale: string;
    /**
     * The minimum time in minutes before a saved token is due to expire that it should still be considered valid for use.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#minTimeUntilExpiration)
     */
    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)
     */
    popup: boolean;
    /**
     * Applicable if working with the popup user-login workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#popupCallbackUrl)
     */
    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)
     */
    popupWindowFeatures: string;
    /**
     * The ArcGIS Enterprise portal URL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#portalUrl)
     */
    portalUrl: string;
    /**
     * Set this property to `true` when [popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#popup) is `false` in order to have the window's location hash value restored after signing in.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#preserveUrlHash)
     */
    preserveUrlHash: boolean;
    /**
     * The user id used when `forceUserId` is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#userId)
     */
    userId: 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 {
    /**
     * This class contains information about an OAuth 2.0 configuration.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html)
     */

    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)
     */
    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)
     */
    expiration?: number;
    /**
     * Set this property to `true` to force the user to sign in with the id in `userId`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#forceUserId)
     */
    forceUserId?: boolean;
    /**
     * The locale for the OAuth sign in page.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#locale)
     */
    locale?: string;
    /**
     * The minimum time in minutes before a saved token is due to expire that it should still be considered valid for use.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#minTimeUntilExpiration)
     */
    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)
     */
    popup?: boolean;
    /**
     * Applicable if working with the popup user-login workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#popupCallbackUrl)
     */
    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)
     */
    popupWindowFeatures?: string;
    /**
     * The ArcGIS Enterprise portal URL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#portalUrl)
     */
    portalUrl?: string;
    /**
     * Set this property to `true` when [popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#popup) is `false` in order to have the window's location hash value restored after signing in.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#preserveUrlHash)
     */
    preserveUrlHash?: boolean;
    /**
     * The user id used when `forceUserId` is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-OAuthInfo.html#userId)
     */
    userId?: 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;
    /**
     * Indicates whether the [server](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-ServerInfo.html#server) is a [Portal](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html) instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-ServerInfo.html#hasPortal)
     */
    hasPortal: boolean;
    /**
     * Indicates whether the [server](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-ServerInfo.html#server) is an [ArcGIS Server](https://enterprise.arcgis.com/en/server/latest/get-started/windows/what-is-arcgis-for-server-.htm) instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-ServerInfo.html#hasServer)
     */
    hasServer: boolean;
    /**
     * 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 {
    /**
     * This class contains information about an ArcGIS Server and its token endpoint.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-ServerInfo.html)
     */

    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;
    /**
     * Indicates whether the [server](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-ServerInfo.html#server) is a [Portal](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html) instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-ServerInfo.html#hasPortal)
     */
    hasPortal?: boolean;
    /**
     * Indicates whether the [server](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-ServerInfo.html#server) is an [ArcGIS Server](https://enterprise.arcgis.com/en/server/latest/get-started/windows/what-is-arcgis-for-server-.htm) instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-ServerInfo.html#hasServer)
     */
    hasServer?: boolean;
    /**
     * 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;
  }

  /**
   * This module provides date and number formatting methods and supporting utilities.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html)
   */
  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)
     */
    convertDateFormatToIntlOptions(
      format?:
        | "short-date"
        | "short-date-short-time"
        | "short-date-short-time-24"
        | "short-date-long-time"
        | "short-date-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"
    ): 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)
     */
    convertNumberFormatToIntlOptions(format?: NumberFormat): Intl.NumberFormatOptions;
    /**
     * Creates a message bundle loader specialized in loading translation files as JSON files.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#createJSONLoader)
     */
    createJSONLoader(params: intlCreateJSONLoaderParams): MessageBundleLoader;
    /**
     * Loads a localized message bundle used with the current API locale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#fetchMessageBundle)
     */
    fetchMessageBundle(bundleId: string): Promise<any>;
    /**
     * Formats a `Date` or `Number` value to a string in the current locale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#formatDate)
     */
    formatDate(value: Date | number, formatOptions?: Intl.DateTimeFormatOptions): string;
    /**
     * Formats a `Number` value to a string in the current locale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#formatNumber)
     */
    formatNumber(value: number, formatOptions?: Intl.NumberFormatOptions): string;
    /**
     * Returns the current locale used by the API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#getLocale)
     */
    getLocale(): string;
    /**
     * Returns one of the known message bundle locale for an input locale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#normalizeMessageBundleLocale)
     */
    normalizeMessageBundleLocale(locale: void): string | any;
    /**
     * Registers a [callback](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#LocaleChangeCallback) that gets notified when the locale changes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#onLocaleChange)
     */
    onLocaleChange(callback: LocaleChangeCallback): Handle;
    /**
     * Provides right-to-left preference for input locale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#prefersRTL)
     */
    prefersRTL(locale?: string): boolean;
    /**
     * Registers a message loader to load specified message bundles needed for translating strings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#registerMessageBundleLoader)
     */
    registerMessageBundleLoader(loader: MessageBundleLoader): any;
    /**
     * Sets the locale used by the API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#setLocale)
     */
    setLocale(locale: string): void;
    /**
     * Use this to substitute keys in a `template` string with values from the argument `data`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#substitute)
     */
    substitute(template: string, data: any, options?: SubstituteOptions): string;
  }

  export const intl: intl;

  export type FetchMessageBundle = (bundleId: string, locale: string) => Promise<any>;

  export interface intlCreateJSONLoaderParams extends Object {
    /**
     * Used to check if the loader should be used to load a candidate's message bundle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#createJSONLoader)
     */
    pattern: string | RegExp;
    /**
     * Used to calculate the relative path of the file to load.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#createJSONLoader)
     */
    base: string;
    /**
     * The location of the translation files.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#createJSONLoader)
     */
    location: string | any | Function;
  }

  export type LocaleChangeCallback = (newLocale: string) => void;

  /**
   * A message bundle loader is an object used to load translation strings in the user's locale.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#MessageBundleLoader)
   */
  export interface MessageBundleLoader extends Object {
    /**
     * Used to check if the loader should be used to load a candidate message bundle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#MessageBundleLoader)
     */
    pattern: string | RegExp;
    /**
     * Called to load the message bundle if the `pattern` matches the bundle identifier.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html#MessageBundleLoader)
     */
    fetchMessageBundle: FetchMessageBundle;
  }

  /**
   * The Web map definition for formatting numbers.
   *
   * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
   *
   * [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>;
  }

  /**
   * Utility for retrieving the current version of the API.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-kernel.html)
   */
  interface kernel {
    /**
     * Current version of the ArcGIS API for JavaScript.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-kernel.html#version)
     */
    readonly version: string;
  }

  export const kernel: kernel;

  interface AreaMeasurementLayer extends Layer {
    /**
     * Polygon spanning the area to be measured.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-AreaMeasurementLayer.html#geometry)
     */
    readonly geometry: Polygon;

    readonly type: "area-measurement";

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

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

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

  interface AreaMeasurementLayerConstructor {
    /**
     * The AreaMeasurementLayer can be used to programmatically measure the area of a [polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) geometry and display the measurement result in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-AreaMeasurementLayer.html)
     */

    new (properties?: AreaMeasurementLayerProperties): AreaMeasurementLayer;
  }

  export const AreaMeasurementLayer: AreaMeasurementLayerConstructor;

  interface AreaMeasurementLayerProperties extends LayerProperties {}

  export interface AreaMeasurementLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface AreaMeasurementLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface AreaMeasurementLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface BaseDynamicLayer extends Layer, ScaleRangeLayer, RefreshableLayer, BlendLayer {
    readonly type: "base-dynamic";

    /**
     * Adds a promise to the layer's [loadable](https://developers.arcgis.com/javascript/latest/programming-patterns/#loadable) chain.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseDynamicLayer.html#addResolvingPromise)
     */
    addResolvingPromise(promiseToLoad: Promise<any>): Promise<any>;
    /**
     * This method fetches the image for the specified extent and size.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseDynamicLayer.html#fetchImage)
     */
    fetchImage(
      extent: Extent,
      width: number,
      height: number,
      options?: BaseDynamicLayerFetchImageOptions
    ): Promise<HTMLImageElement | HTMLCanvasElement>;
    /**
     * 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-BaseDynamicLayer.html#getImageUrl)
     */
    getImageUrl(extent: Extent, width: number, height: number): Promise<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 {
    /**
     * This class may be extended to create dynamic map layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseDynamicLayer.html)
     */

    new (properties?: BaseDynamicLayerProperties): BaseDynamicLayer;
  }

  export const BaseDynamicLayer: BaseDynamicLayerConstructor;

  interface BaseDynamicLayerProperties
    extends LayerProperties,
      ScaleRangeLayerProperties,
      RefreshableLayerProperties,
      BlendLayerProperties {}

  export interface BaseDynamicLayerFetchImageOptions extends Object {
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.
     *
     * [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)
     */
    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;

    readonly type: "base-elevation";

    /**
     * Adds a promise to the layer's [loadable](https://developers.arcgis.com/javascript/latest/programming-patterns/#loadable) chain.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#addResolvingPromise)
     */
    addResolvingPromise(promiseToLoad: Promise<any>): Promise<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 layer for elevation data and caching it so values may be sampled quickly afterwards.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#createElevationSampler)
     */
    createElevationSampler(
      extent: Extent,
      options?: BaseElevationLayerCreateElevationSamplerOptions
    ): Promise<ElevationSampler>;
    /**
     * Fetches a tile at the given level, row, and column present in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#fetchTile)
     */
    fetchTile(
      level: number,
      row: number,
      column: number,
      options?: BaseElevationLayerFetchTileOptions
    ): Promise<ElevationTileData>;
    /**
     * Returns the bounds of the tile as an array of four numbers that can 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-layers-BaseElevationLayer.html#getTileBounds)
     */
    getTileBounds(level: number, row: number, column: number, out?: number[]): number[];
    /**
     * Queries the service layer for elevation values for the given geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#queryElevation)
     */
    queryElevation(
      geometry: Point | Multipoint | Polyline,
      options?: BaseElevationLayerQueryElevationOptions
    ): Promise<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 {
    /**
     * BaseElevationLayer is intended to be extended for creating custom elevation layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html)
     */

    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)
     */
    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`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#createElevationSampler)
     */
    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)
     */
    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.
     *
     * [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`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseElevationLayer.html#queryElevation)
     */
    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-BaseElevationLayer.html#queryElevation)
     */
    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)
     */
    noDataValue?: number;
  }

  /**
   * Describes elevation contained in the pixels that comprise an 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, BlendLayer {
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html#spatialReference)
     */
    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;
    /**
     * For [BaseTileLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html) the type is `base-tile`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html#type)
     */
    readonly type: "base-tile" | "bing-maps";

    /**
     * Adds a promise to the layer's [loadable](https://developers.arcgis.com/javascript/latest/programming-patterns/#loadable) chain.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html#addResolvingPromise)
     */
    addResolvingPromise(promiseToLoad: Promise<any>): Promise<any>;
    /**
     * 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-BaseTileLayer.html#fetchTile)
     */
    fetchTile(
      level: number,
      row: number,
      col: number,
      options?: BaseTileLayerFetchTileOptions
    ): Promise<HTMLImageElement | HTMLCanvasElement>;
    /**
     * Returns 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-layers-BaseTileLayer.html#getTileBounds)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html#getTileUrl)
     */
    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 {
    /**
     * This class may be extended to create a custom [TileLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html)
     */

    new (properties?: BaseTileLayerProperties): BaseTileLayer;
  }

  export const BaseTileLayer: BaseTileLayerConstructor;

  interface BaseTileLayerProperties
    extends LayerProperties,
      ScaleRangeLayerProperties,
      RefreshableLayerProperties,
      BlendLayerProperties {
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html#spatialReference)
     */
    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.
     *
     * [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, BlendLayer {
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BingMapsLayer.html#culture)
     */
    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)
     */
    key: string;
    /**
     * This will alter Geopolitical disputed borders and labels to align with the specified user region.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BingMapsLayer.html#region)
     */
    region: string;
    /**
     * For more information on Bing map styles please visit: https://docs.microsoft.com/en-us/bingmaps/rest-services/imagery/get-imagery-metadata
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BingMapsLayer.html#style)
     */
    style: "road" | "aerial" | "hybrid";

    readonly type: "bing-maps";

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

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

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

  interface BingMapsLayerConstructor {
    /**
     * This layer supports Microsoft's Bing tiled map content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BingMapsLayer.html)
     */

    new (properties?: BingMapsLayerProperties): BingMapsLayer;
  }

  export const BingMapsLayer: BingMapsLayerConstructor;

  interface BingMapsLayerProperties extends BaseTileLayerProperties, BlendLayerProperties {
    /**
     * Provides culture specific map labels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BingMapsLayer.html#culture)
     */
    culture?: string;
    /**
     * Bing Maps Key.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BingMapsLayer.html#key)
     */
    key?: string;
    /**
     * This will alter Geopolitical disputed borders and labels to align with the specified user region.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BingMapsLayer.html#region)
     */
    region?: string;
    /**
     * For more information on Bing map styles please visit: https://docs.microsoft.com/en-us/bingmaps/rest-services/imagery/get-imagery-metadata
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BingMapsLayer.html#style)
     */
    style?: "road" | "aerial" | "hybrid";
  }

  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.
     *
     * [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).
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#filters)
     */
    filters: Collection<BuildingFilter>;
    /**
     * An array of field names from the service to include with each feature in all sublayers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#outFields)
     */
    outFields: string[];
    /**
     * Hierarchical structure of sublayers in a BuildingSceneLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#sublayers)
     */
    readonly sublayers: Collection<BuildingGroupSublayer | BuildingComponentSublayer>;
    /**
     * Summary statistics for all component layers in the building scene layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#summaryStatistics)
     */
    readonly summaryStatistics: BuildingSummaryStatistics;

    readonly type: "building-scene";

    /**
     * Loads the layer and all of its sublayers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#loadAll)
     */
    loadAll(): Promise<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 {
    /**
     * The BuildingSceneLayer is designed for visualizing buildings with detailed interiors in 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-layers-BuildingSceneLayer.html)
     */

    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.
     *
     * [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).
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#filters)
     */
    filters?: CollectionProperties<BuildingFilterProperties>;
    /**
     * An array of field names from the service to include with each feature in all sublayers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#outFields)
     */
    outFields?: string[];
  }

  export interface BuildingSceneLayerElevationInfo extends Object {
    /**
     * Defines how features are placed on the vertical axis (z).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#elevationInfo)
     */
    mode: "absolute-height";
    /**
     * 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)
     */
    offset?: number;
    /**
     * The unit for `offset` values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#elevationInfo)
     */
    unit?: "feet" | "meters" | "kilometers" | "miles" | "us-feet" | "yards";
  }

  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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#listMode)
     */
    listMode: "show" | "hide";
    /**
     * An array of field names from the service to include with each feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#outFields)
     */
    outFields: 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-buildingSublayers-BuildingComponentSublayer.html#popupEnabled)
     */
    popupEnabled: boolean;
    /**
     * The popup template for the sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * The renderer assigned to the sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#renderer)
     */
    renderer: Renderer;

    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)
     */
    createPopupTemplate(options?: CreatePopupTemplateOptions): PopupTemplate;
    /**
     * Creates a query object that can be used to fetch features that satisfy the component sublayer's current [definition expression](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#definitionExpression).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#createQuery)
     */
    createQuery(): supportQuery;
    /**
     * 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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#getFieldDomain)
     */
    getFieldDomain(fieldName: string): Domain;
    /**
     * Gets field usage information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#getFieldUsageInfo)
     */
    getFieldUsageInfo(fieldName: string): any;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the associated feature service and returns the 2D [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of features that satisfy the query.
     *
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the associated feature 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 [BuildingComponentSublayerView.queryExtent()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.html#queryExtent), but this will return the 3D extent only for features currently in the view. The query succeeds only if the BuildingSceneLayer has an associated feature layer. If an associated feature layer is not available, then an error with the name `buildingscenelayer:query-not-available` is thrown. Read more about queries in the Querying section of the BuildingSceneLayer class description. [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#queryExtent)
     */
    queryExtent(
      query?: supportQuery | supportQueryProperties,
      options?: BuildingComponentSublayerQueryExtentOptions
    ): Promise<any>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the associated feature service and returns the number of features that satisfy the query.
     *
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the associated feature service and returns the number of features that satisfy the query. 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-buildingSublayers-BuildingComponentSublayer.html#getFieldUsageInfo) method to check if the layer supports queries. If querying is not enabled, then an error with the name `buildingscenelayer:query-not-available` is thrown. Read more about queries in the Querying section of the BuildingSceneLayer class description. [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#queryFeatureCount)
     */
    queryFeatureCount(
      query?: supportQuery | supportQueryProperties,
      options?: BuildingComponentSublayerQueryFeatureCountOptions
    ): Promise<number>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the associated feature service and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html).
     *
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the associated feature service and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html). 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-buildingSublayers-BuildingComponentSublayer.html#getFieldUsageInfo) method to check if the layer supports queries. If querying is not enabled, then an error with the name `buildingscenelayer:query-not-available` is thrown. Read more about queries in the Querying section of the BuildingSceneLayer class description. [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#queryFeatures)
     */
    queryFeatures(
      query?: supportQuery | supportQueryProperties,
      options?: BuildingComponentSublayerQueryFeaturesOptions
    ): Promise<supportFeatureSet>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the associated feature service and returns an array of ObjectIDs of the features that satisfy the input query.
     *
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the associated feature service and returns an array of ObjectIDs of the features that satisfy the input query. 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-buildingSublayers-BuildingComponentSublayer.html#getFieldUsageInfo) method to check if the layer supports queries. If querying is not enabled, then an error with the name `buildingscenelayer:query-not-available` is thrown. Read more about queries in the Querying section of the SceneLayer class description. [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#queryObjectIds)
     */
    queryObjectIds(
      query?: supportQuery | supportQueryProperties,
      options?: BuildingComponentSublayerQueryObjectIdsOptions
    ): Promise<number[]>;
  }

  interface BuildingComponentSublayerConstructor {
    /**
     * BuildingComponentSublayers contain 3D Object features representing building components like doors, pipes or AC units.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html)
     */

    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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#listMode)
     */
    listMode?: "show" | "hide";
    /**
     * An array of field names from the service to include with each feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#outFields)
     */
    outFields?: 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-buildingSublayers-BuildingComponentSublayer.html#popupEnabled)
     */
    popupEnabled?: boolean;
    /**
     * The popup template for the sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * The renderer assigned to the sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#renderer)
     */
    renderer?: RendererProperties;
  }

  export interface BuildingComponentSublayerQueryExtentOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#queryExtent)
     */
    signal?: AbortSignal;
  }

  export interface BuildingComponentSublayerQueryFeatureCountOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#queryFeatureCount)
     */
    signal?: AbortSignal;
  }

  export interface BuildingComponentSublayerQueryFeaturesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#queryFeatures)
     */
    signal?: AbortSignal;
  }

  export interface BuildingComponentSublayerQueryObjectIdsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#queryObjectIds)
     */
    signal?: AbortSignal;
  }

  interface BuildingGroupSublayer extends BuildingSublayer {
    /**
     * Indicates how the sublayer should display in the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingGroupSublayer.html#listMode)
     */
    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>;

    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(): Promise<BuildingSceneLayer>;
  }

  interface BuildingGroupSublayerConstructor {
    /**
     * Hierarchical group of [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html) sublayers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingGroupSublayer.html)
     */

    new (properties?: BuildingGroupSublayerProperties): BuildingGroupSublayer;

    fromJSON(json: any): BuildingGroupSublayer;
  }

  export const BuildingGroupSublayer: BuildingGroupSublayerConstructor;

  interface BuildingGroupSublayerProperties extends BuildingSublayerProperties {
    /**
     * Indicates how the sublayer should display in the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingGroupSublayer.html#listMode)
     */
    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;
    /**
     * Indicates if this sublayer is empty.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingSublayer.html#isEmpty)
     */
    readonly isEmpty: boolean;
    /**
     * The modelName is a standard name for each sublayer.
     *
     * [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)
     */
    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)
     */
    visible: boolean;
  }

  interface BuildingSublayerConstructor {
    /**
     * BuildingSublayer is the base class for sublayers of a BuildingSceneLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingSublayer.html)
     */

    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)
     */
    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)
     */
    visible?: boolean;
  }

  interface CSVLayer extends Layer, PortalLayer, ScaleRangeLayer, TemporalLayer, BlendLayer {
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#definitionExpression)
     */
    definitionExpression: string;
    /**
     * The column delimiter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#delimiter)
     */
    delimiter: string;
    /**
     * The name of the layer's primary display field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#displayField)
     */
    displayField: string;
    /**
     * Specifies how graphics are placed on the vertical axis (z).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#elevationInfo)
     */
    elevationInfo: CSVLayerElevationInfo;
    /**
     * Configures the method for reducing the number of point features in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#featureReduction)
     */
    featureReduction: FeatureReductionCluster | FeatureReductionSelection;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#fieldsIndex)
     */
    readonly fieldsIndex: FieldsIndex;
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#labelingInfo)
     */
    labelingInfo: LabelClass[];
    /**
     * Indicates whether to display labels for this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#labelsVisible)
     */
    labelsVisible: boolean;
    /**
     * The latitude field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#latitudeField)
     */
    latitudeField: string;
    /**
     * The longitude field name.
     *
     * [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) containing a 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#popupEnabled)
     */
    popupEnabled: boolean;
    /**
     * The popup template for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * The renderer assigned to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#renderer)
     */
    renderer: Renderer;
    /**
     * Apply perspective scaling to screen-size point symbols in 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-layers-CSVLayer.html#screenSizePerspectiveEnabled)
     */
    screenSizePerspectiveEnabled: boolean;
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#spatialReference)
     */
    spatialReference: SpatialReference;

    readonly type: "csv";
    /**
     * 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)
     */
    createPopupTemplate(options?: CreatePopupTemplateOptions): PopupTemplate;
    /**
     * Creates query parameters that can be used to fetch features that satisfy the layer's current filters, and definitions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#createQuery)
     */
    createQuery(): supportQuery;
    /**
     * 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-CSVLayer.html#getField)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#getFieldDomain)
     */
    getFieldDomain(fieldName: string, options?: CSVLayerGetFieldDomainOptions): Domain;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the CSV data and returns the [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#queryExtent)
     */
    queryExtent(query?: supportQuery | supportQueryProperties, options?: CSVLayerQueryExtentOptions): Promise<any>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the CSV data and returns the number of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#queryFeatureCount)
     */
    queryFeatureCount(
      query?: supportQuery | supportQueryProperties,
      options?: CSVLayerQueryFeatureCountOptions
    ): Promise<number>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the CSV data and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html), which can be accessed using the `.then()` method once the promise resolves.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#queryFeatures)
     */
    queryFeatures(
      query?: supportQuery | supportQueryProperties,
      options?: CSVLayerQueryFeaturesOptions
    ): Promise<supportFeatureSet>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the CSV data and returns an array of Object IDs for features that satisfy the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#queryObjectIds)
     */
    queryObjectIds(
      query?: supportQuery | supportQueryProperties,
      options?: CSVLayerQueryObjectIdsOptions
    ): Promise<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 {
    /**
     * The CSVLayer is a point layer based on a CSV file (.csv, .txt).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html)
     */

    new (properties?: CSVLayerProperties): CSVLayer;

    fromJSON(json: any): CSVLayer;
  }

  export const CSVLayer: CSVLayerConstructor;

  interface CSVLayerProperties
    extends LayerProperties,
      PortalLayerProperties,
      ScaleRangeLayerProperties,
      TemporalLayerProperties,
      BlendLayerProperties {
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#definitionExpression)
     */
    definitionExpression?: string;
    /**
     * The column delimiter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#delimiter)
     */
    delimiter?: string;
    /**
     * The name of the layer's primary display field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#displayField)
     */
    displayField?: string;
    /**
     * Specifies how graphics are placed on the vertical axis (z).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#elevationInfo)
     */
    elevationInfo?: CSVLayerElevationInfo;
    /**
     * Configures the method for reducing the number of point features in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#featureReduction)
     */
    featureReduction?:
      | (FeatureReductionClusterProperties & { type: "cluster" })
      | (FeatureReductionSelectionProperties & { type: "selection" });
    /**
     * An array of fields in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#fields)
     */
    fields?: FieldProperties[];
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#labelingInfo)
     */
    labelingInfo?: LabelClassProperties[];
    /**
     * Indicates whether to display labels for this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#labelsVisible)
     */
    labelsVisible?: boolean;
    /**
     * The latitude field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#latitudeField)
     */
    latitudeField?: string;
    /**
     * The longitude field name.
     *
     * [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) containing a 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#popupEnabled)
     */
    popupEnabled?: boolean;
    /**
     * The popup template for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * The renderer assigned to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#renderer)
     */
    renderer?: RendererProperties;
    /**
     * Apply perspective scaling to screen-size point symbols in 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-layers-CSVLayer.html#screenSizePerspectiveEnabled)
     */
    screenSizePerspectiveEnabled?: boolean;
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#spatialReference)
     */
    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-rest-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.
     *
     * [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.
     *
     * [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.
     *
     * [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).
     *
     * [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 layer can be updated.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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-rest-support-Query.html#spatialRelationship).
     *
     * [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.
     *
     * [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.
     *
     * [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-rest-support-Query.html#having) clause on the service.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsOrderBy: boolean;
    /**
     * Indicates if the query response supports pagination.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsPagination: boolean;
    /**
     * Indicates if the layer supports [percentile statisticType](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-StatisticDefinition.html#statisticType).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsPercentileStatistics: boolean;
    /**
     * Indicates if the query response includes the [query geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html#queryGeometry).
     *
     * [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.
     *
     * [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).
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
     */
    supportsPagination: boolean;
  }

  export interface CSVLayerElevationInfo extends Object {
    /**
     * Defines how the feature is placed with respect to the terrain surface or 3D objects in the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#elevationInfo)
     */
    mode: "on-the-ground" | "relative-to-ground" | "absolute-height" | "relative-to-scene";
    /**
     * An elevation offset, which is added to the vertical position of the graphic.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#elevationInfo)
     */
    unit?: "feet" | "meters" | "kilometers" | "miles" | "us-feet" | "yards";
  }

  export interface CSVLayerElevationInfoFeatureExpressionInfo extends Object {
    /**
     * An [Arcade expression](https://developers.arcgis.com/javascript/latest/arcade/) evaluating to a number that determines the z-value of the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#elevationInfo)
     */
    expression?: string;
  }

  export interface CSVLayerGetFieldDomainOptions 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-CSVLayer.html#getFieldDomain)
     */
    feature: Graphic;
  }

  export interface CSVLayerQueryExtentOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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 DirectLineMeasurementLayer extends Layer {
    /**
     * Ending point for the measurement.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-DirectLineMeasurementLayer.html#endPoint)
     */
    endPoint: Point;
    /**
     * Starting point for the measurement.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-DirectLineMeasurementLayer.html#startPoint)
     */
    startPoint: Point;

    readonly type: "direct-line-measurement";

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

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

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

  interface DirectLineMeasurementLayerConstructor {
    /**
     * The DirectLineMeasurementLayer computes the distance between 2 points and displays it in the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-DirectLineMeasurementLayer.html)
     */

    new (properties?: DirectLineMeasurementLayerProperties): DirectLineMeasurementLayer;
  }

  export const DirectLineMeasurementLayer: DirectLineMeasurementLayerConstructor;

  interface DirectLineMeasurementLayerProperties extends LayerProperties {
    /**
     * Ending point for the measurement.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-DirectLineMeasurementLayer.html#endPoint)
     */
    endPoint?: PointProperties;
    /**
     * Starting point for the measurement.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-DirectLineMeasurementLayer.html#startPoint)
     */
    startPoint?: PointProperties;
  }

  export interface DirectLineMeasurementLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface DirectLineMeasurementLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface DirectLineMeasurementLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface ElevationLayer extends Layer, ArcGISCachedService, PortalLayer {
    /**
     * The [image service's metadata JSON](https://developers.arcgis.com/rest/services-reference/image-service.htm) exposed by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#sourceJSON)
     */
    sourceJSON: any;

    readonly type: "elevation";
    /**
     * 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 layer for elevation data and caching it so values may be sampled quickly afterwards.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#createElevationSampler)
     */
    createElevationSampler(
      extent: Extent,
      options?: ElevationLayerCreateElevationSamplerOptions
    ): Promise<ElevationSampler>;
    /**
     * Requests a tile from the service and decodes the data into a linear array of elevation values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#fetchTile)
     */
    fetchTile(
      level: number,
      row: number,
      column: number,
      options?: ElevationLayerFetchTileOptions
    ): Promise<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)
     */
    getTileUrl(level: number, row: number, col: number): string;
    /**
     * Queries the service layer for elevation values for the given geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#queryElevation)
     */
    queryElevation(
      geometry: Point | Multipoint | Polyline,
      options?: ElevationLayerQueryElevationOptions
    ): Promise<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 {
    /**
     * ElevationLayer is a tile layer used for rendering elevations in [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-ElevationLayer.html)
     */

    new (properties?: ElevationLayerProperties): ElevationLayer;

    fromJSON(json: any): ElevationLayer;
  }

  export const ElevationLayer: ElevationLayerConstructor;

  interface ElevationLayerProperties extends LayerProperties, ArcGISCachedServiceProperties, PortalLayerProperties {
    /**
     * The [image service's metadata JSON](https://developers.arcgis.com/rest/services-reference/image-service.htm) exposed by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#sourceJSON)
     */
    sourceJSON?: any;
    /**
     * 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`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#createElevationSampler)
     */
    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)
     */
    noDataValue?: number;
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#createElevationSampler)
     */
    signal?: AbortSignal;
  }

  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.
     *
     * [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`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html#queryElevation)
     */
    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)
     */
    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)
     */
    noDataValue?: number;
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.
     *
     * [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.
     *
     * [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.
     *
     * [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,
      BlendLayer,
      CustomParametersMixin,
      APIKeyMixin {
    /**
     * 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.
     *
     * [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.
     *
     * [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 data either from map service sublayers or data from a registered workspace.
     *
     * [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 service and when edits are made.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#editFieldsInfo)
     */
    readonly editFieldsInfo: EditFieldsInfo;
    /**
     * Determines if the layer is editable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#editingEnabled)
     */
    editingEnabled: boolean;
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#elevationInfo)
     */
    elevationInfo: FeatureLayerElevationInfo;
    /**
     * Configures the method for reducing the number of point features in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#featureReduction)
     */
    featureReduction: FeatureReductionCluster | FeatureReductionSelection;
    /**
     * An array of fields in the layer.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#fieldsIndex)
     */
    readonly fieldsIndex: FieldsIndex;
    /**
     * When a feature layer is configured as floor-aware, it has a floorInfo property defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#floorInfo)
     */
    floorInfo: LayerFloorInfo;
    /**
     * The associated [template](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-FormTemplate.html) used in an associated layer's [FeatureForm](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#formTemplate)
     */
    formTemplate: FormTemplate;
    /**
     * The version of the geodatabase of the feature service data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#gdbVersion)
     */
    gdbVersion: string;
    /**
     * Provides information on the system maintained area and length fields along with their respective units.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#geometryFieldsInfo)
     */
    readonly geometryFieldsInfo: GeometryFieldsInfo;
    /**
     * The geometry type of features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#geometryType)
     */
    geometryType: "point" | "multipoint" | "polyline" | "polygon" | "multipatch" | "mesh";
    /**
     * Indicates whether the client-side features in the layer have `M` (measurement) values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#hasM)
     */
    hasM: boolean;
    /**
     * Indicates whether the client-side features in the layer have `Z` (elevation) values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#hasZ)
     */
    hasZ: boolean;
    /**
     * The historic moment to query.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#isTable)
     */
    readonly isTable: boolean;
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#labelingInfo)
     */
    labelingInfo: LabelClass[];
    /**
     * Indicates whether to display labels for this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#labelsVisible)
     */
    labelsVisible: boolean;
    /**
     * The layer ID, or layer index, of a Feature Service layer.
     *
     * [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)
     */
    legendEnabled: boolean;
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#fields) containing a unique value or identifier for each feature in the layer.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#outFields)
     */
    outFields: 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-FeatureLayer.html#popupEnabled)
     */
    popupEnabled: boolean;
    /**
     * The popup template for the layer.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#relationships)
     */
    readonly relationships: Relationship[];
    /**
     * The renderer assigned to the layer.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#returnM)
     */
    returnM: boolean;
    /**
     * When `true`, indicates that z-values will always be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#returnZ)
     */
    returnZ: boolean;
    /**
     * Apply perspective scaling to screen-size point symbols in 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-layers-FeatureLayer.html#screenSizePerspectiveEnabled)
     */
    screenSizePerspectiveEnabled: boolean;
    /**
     * The service definition expression limits the features available for display and query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#serviceDefinitionExpression)
     */
    readonly serviceDefinitionExpression: string;
    /**
     * A collection of [Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) objects used to create a FeatureLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#source)
     */
    source: Collection<Graphic>;
    /**
     * The [feature service's metadata JSON](https://developers.arcgis.com/rest/services-reference/layer-feature-service-.htm) exposed by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#sourceJSON)
     */
    sourceJSON: any;
    /**
     * The spatial reference of the layer.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#templates)
     */
    templates: FeatureTemplate[];

    readonly type: "feature";
    /**
     * The name of the field holding the type ID or subtypes for the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#typeIdField)
     */
    typeIdField: string;
    /**
     * An array of subtypes defined in the feature service exposed by ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#types)
     */
    types: FeatureType[];
    /**
     * The absolute URL of the REST endpoint of the layer, non-spatial table or service.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#addAttachment)
     */
    addAttachment(feature: Graphic, attachment: HTMLFormElement | FormData): Promise<FeatureEditResult>;
    /**
     * Applies edits to features in a layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits)
     */
    applyEdits(edits: FeatureLayerApplyEditsEdits, options?: FeatureLayerApplyEditsOptions): Promise<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)
     */
    createPopupTemplate(options?: CreatePopupTemplateOptions): PopupTemplate;
    /**
     * Creates query parameter object that can be used to fetch features that satisfy 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#createQuery)
     */
    createQuery(): supportQuery;
    /**
     * Deletes attachments from a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#deleteAttachments)
     */
    deleteAttachments(feature: Graphic, attachmentIds: number[]): Promise<FeatureEditResult>;
    /**
     * Returns a [FeatureType](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureType.html) describing the feature's type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#getFeatureType)
     */
    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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#getFieldDomain)
     */
    getFieldDomain(fieldName: string, options?: FeatureLayerGetFieldDomainOptions): Domain;
    /**
     * Query information about attachments associated with features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryAttachments)
     */
    queryAttachments(
      attachmentQuery: supportAttachmentQuery | supportAttachmentQueryProperties,
      options?: FeatureLayerQueryAttachmentsOptions
    ): Promise<any>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the feature service and returns the [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryExtent)
     */
    queryExtent(query?: supportQuery | supportQueryProperties, options?: FeatureLayerQueryExtentOptions): Promise<any>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the feature service and returns the number of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryFeatureCount)
     */
    queryFeatureCount(
      query?: supportQuery | supportQueryProperties,
      options?: FeatureLayerQueryFeatureCountOptions
    ): Promise<number>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the feature service and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html), which can be accessed using the `.then()` method once the promise resolves.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryFeatures)
     */
    queryFeatures(
      query?: supportQuery | supportQueryProperties,
      options?: FeatureLayerQueryFeaturesOptions
    ): Promise<supportFeatureSet>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the feature service and returns an array of Object IDs for features that satisfy the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryObjectIds)
     */
    queryObjectIds(
      query?: supportQuery | supportQueryProperties,
      options?: FeatureLayerQueryObjectIdsOptions
    ): Promise<number[]>;
    /**
     * Executes a [RelationshipQuery](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html) against the feature service and returns [FeatureSets](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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)
     */
    queryRelatedFeatures(
      relationshipQuery: supportRelationshipQuery | supportRelationshipQueryProperties,
      options?: FeatureLayerQueryRelatedFeaturesOptions
    ): Promise<any>;
    /**
     * Executes a [RelationshipQuery](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html) against the feature service and when resolved, it returns an `object` containing key value pairs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryRelatedFeaturesCount)
     */
    queryRelatedFeaturesCount(
      relationshipQuery: supportRelationshipQuery | supportRelationshipQueryProperties,
      options?: FeatureLayerQueryRelatedFeaturesCountOptions
    ): Promise<any>;
    /**
     * Executes a [TopFeaturesQuery](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html) against a feature service and returns the count of features or records that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryTopFeatureCount)
     */
    queryTopFeatureCount(
      topFeaturesQuery: TopFeaturesQuery | TopFeaturesQueryProperties,
      options?: FeatureLayerQueryTopFeatureCountOptions
    ): Promise<number>;
    /**
     * Executes a [TopFeaturesQuery](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html) against a feature service and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html) once the promise resolves.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryTopFeatures)
     */
    queryTopFeatures(
      topFeaturesQuery: TopFeaturesQuery | TopFeaturesQueryProperties,
      options?: FeatureLayerQueryTopFeaturesOptions
    ): Promise<supportFeatureSet>;
    /**
     * Executes a [TopFeaturesQuery](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html) against a feature service and returns the [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryTopFeaturesExtent)
     */
    queryTopFeaturesExtent(
      topFeaturesQuery: TopFeaturesQuery | TopFeaturesQueryProperties,
      options?: FeatureLayerQueryTopFeaturesExtentOptions
    ): Promise<any>;
    /**
     * Executes a [TopFeaturesQuery](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html) against a feature service and returns an array of Object IDs of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryTopObjectIds)
     */
    queryTopObjectIds(
      topFeaturesQuery: TopFeaturesQuery | TopFeaturesQueryProperties,
      options?: FeatureLayerQueryTopObjectIdsOptions
    ): Promise<number[]>;
    /**
     * Updates an existing attachment for a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#updateAttachment)
     */
    updateAttachment(
      feature: Graphic,
      attachmentId: number,
      attachment: HTMLFormElement | FormData
    ): Promise<FeatureEditResult>;

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

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

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

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

  interface FeatureLayerConstructor {
    /**
     * A FeatureLayer is a single layer that can be created from a [Map Service](https://enterprise.arcgis.com/en/server/latest/publish-services/windows/what-is-a-map-service.htm) or [Feature Service](https://enterprise.arcgis.com/en/server/latest/publish-services/windows/what-is-a-feature-service-.htm); ArcGIS Online or ArcGIS Enterprise portal items; or from an array of client-side features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html)
     */

    new (properties?: FeatureLayerProperties): FeatureLayer;

    fromJSON(json: any): FeatureLayer;
  }

  export const FeatureLayer: FeatureLayerConstructor;

  interface FeatureLayerProperties
    extends LayerProperties,
      PortalLayerProperties,
      ScaleRangeLayerProperties,
      RefreshableLayerProperties,
      TemporalLayerProperties,
      BlendLayerProperties,
      CustomParametersMixinProperties,
      APIKeyMixinProperties {
    /**
     * 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.
     *
     * [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.
     *
     * [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 data either from map service sublayers or data from a registered workspace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#dynamicDataSource)
     */
    dynamicDataSource?: (DynamicMapLayer & { type: "map-layer" }) | (DynamicDataLayer & { type: "data-layer" });
    /**
     * Determines if the layer is editable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#editingEnabled)
     */
    editingEnabled?: boolean;
    /**
     * Specifies how features are placed on the vertical axis (z).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#elevationInfo)
     */
    elevationInfo?: FeatureLayerElevationInfo;
    /**
     * Configures the method for reducing the number of point features in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#featureReduction)
     */
    featureReduction?:
      | (FeatureReductionClusterProperties & { type: "cluster" })
      | (FeatureReductionSelectionProperties & { type: "selection" });
    /**
     * An array of fields in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#fields)
     */
    fields?: FieldProperties[];
    /**
     * When a feature layer is configured as floor-aware, it has a floorInfo property defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#floorInfo)
     */
    floorInfo?: LayerFloorInfoProperties;
    /**
     * The associated [template](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-FormTemplate.html) used in an associated layer's [FeatureForm](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#formTemplate)
     */
    formTemplate?: FormTemplateProperties;
    /**
     * The version of the geodatabase of the feature service data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#gdbVersion)
     */
    gdbVersion?: string;
    /**
     * The geometry type of features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#geometryType)
     */
    geometryType?: "point" | "multipoint" | "polyline" | "polygon" | "multipatch" | "mesh";
    /**
     * Indicates whether the client-side features in the layer have `M` (measurement) values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#hasM)
     */
    hasM?: boolean;
    /**
     * Indicates whether the client-side features in the layer have `Z` (elevation) values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#hasZ)
     */
    hasZ?: boolean;
    /**
     * The historic moment to query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#historicMoment)
     */
    historicMoment?: DateProperties;
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#labelingInfo)
     */
    labelingInfo?: LabelClassProperties[];
    /**
     * Indicates whether to display labels for this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#labelsVisible)
     */
    labelsVisible?: boolean;
    /**
     * The layer ID, or layer index, of a Feature Service layer.
     *
     * [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)
     */
    legendEnabled?: boolean;
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#fields) containing a unique value or identifier for each feature in the layer.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#outFields)
     */
    outFields?: 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-FeatureLayer.html#popupEnabled)
     */
    popupEnabled?: boolean;
    /**
     * The popup template for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * The renderer assigned to the layer.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#returnM)
     */
    returnM?: boolean;
    /**
     * When `true`, indicates that z-values will always be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#returnZ)
     */
    returnZ?: boolean;
    /**
     * Apply perspective scaling to screen-size point symbols in 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-layers-FeatureLayer.html#screenSizePerspectiveEnabled)
     */
    screenSizePerspectiveEnabled?: boolean;
    /**
     * A collection of [Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) objects used to create a FeatureLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#source)
     */
    source?: CollectionProperties<GraphicProperties>;
    /**
     * The [feature service's metadata JSON](https://developers.arcgis.com/rest/services-reference/layer-feature-service-.htm) exposed by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#sourceJSON)
     */
    sourceJSON?: any;
    /**
     * The spatial reference of the layer.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#templates)
     */
    templates?: FeatureTemplateProperties[];
    /**
     * The name of the field holding the type ID or subtypes for the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#typeIdField)
     */
    typeIdField?: string;
    /**
     * An array of subtypes defined in the feature service exposed by ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#types)
     */
    types?: FeatureTypeProperties[];
    /**
     * The absolute URL of the REST endpoint of the layer, non-spatial table or service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#url)
     */
    url?: string;
  }

  /**
   * AttachmentEdit represents an attachment that can be added, updated or deleted via [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#AttachmentEdit)
   */
  export interface AttachmentEdit extends Object {
    /**
     * The feature, `objectId` or `globalId` of feature associated with the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#AttachmentEdit)
     */
    feature: Graphic | number | string;
    /**
     * The attachment to be added, updated or deleted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#AttachmentEdit)
     */
    attachment: AttachmentEditAttachment;
  }

  /**
   * The fields that record who adds or 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#EditingInfo)
     */
    lastEditDate: Date;
  }

  export interface FeatureLayerEditsEvent {
    addedAttachments: FeatureEditResult[];

    addedFeatures: FeatureEditResult[];

    deletedAttachments: FeatureEditResult[];

    deletedFeatures: FeatureEditResult[];

    updatedAttachments: FeatureEditResult[];

    updatedFeatures: FeatureEditResult[];
  }

  /**
   * FeatureEditResult represents the result of adding, updating or deleting a feature or an attachment.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#FeatureEditResult)
   */
  export interface FeatureEditResult extends Object {
    /**
     * The objectId of the feature or the attachmentId of the attachment that was edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#FeatureEditResult)
     */
    objectId: number;
    /**
     * The globalId of the feature or the attachment that was edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#FeatureEditResult)
     */
    globalId: string;
    /**
     * 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 {
    /**
     * An array or a [collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of features to be added.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits)
     */
    addFeatures?: Graphic[] | Collection<Graphic>;
    /**
     * An array or a [collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of features to be updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits)
     */
    updateFeatures?: Graphic[] | Collection<Graphic>;
    /**
     * An array or a [collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of features, or an array of objects with `objectId` or `globalId` of each feature to be deleted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits)
     */
    deleteFeatures?: Graphic[] | Collection<Graphic> | any[];
    /**
     * An array of attachments to be added.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits)
     */
    addAttachments?: AttachmentEdit[];
    /**
     * An array of attachments to be updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits)
     */
    updateAttachments?: AttachmentEdit[];
    /**
     * An array of [globalId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#AttachmentEdit)s for attachments to be deleted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits)
     */
    deleteAttachments?: string[];
  }

  export interface FeatureLayerApplyEditsOptions extends Object {
    /**
     * The geodatabase version to apply the edits.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits)
     */
    gdbVersion?: string;
    /**
     * Indicates whether the edits should be applied only if all submitted edits succeed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits)
     */
    rollbackOnFailureEnabled?: boolean;
    /**
     * Indicates whether the edits can be applied using globalIds of features or attachments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#applyEdits)
     */
    globalIdUsed?: boolean;
  }

  export interface FeatureLayerCapabilities extends Object {
    /**
     * Describes what attachment capabilities are enabled on the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    attachment: FeatureLayerCapabilitiesAttachment;
    /**
     * 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 via [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)
     */
    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-rest-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 FeatureLayerCapabilitiesAttachment extends Object {
    /**
     * Indicates if the attachments can be [queried](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html) by their names.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsName: boolean;
    /**
     * Indicates if the attachments can be [queried](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html) by their sizes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsSize: boolean;
    /**
     * Indicates if the attachments can be [queried](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html) by their content types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsContentType: boolean;
    /**
     * Indicates if the attachments can be [queried](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html) by their keywords.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsKeywords: boolean;
    /**
     * Indicates if the attachment [queries](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html) support `exifInfo`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsExifInfo: boolean;
  }

  export interface FeatureLayerCapabilitiesData extends Object {
    /**
     * Indicates if the feature service is versioned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    isVersioned: boolean;
    /**
     * 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.
     *
     * [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.
     *
     * [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 `rollbackOnFailureEnabled` parameter can be set to `true` or `false` when editing features.
     *
     * [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.
     *
     * [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).
     *
     * [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 layer can be updated.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsResizeAttachments: boolean;
  }

  export interface FeatureLayerCapabilitiesQuery extends Object {
    /**
     * The maximum number of records that will be returned for a given query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    maxRecordCount: number;
    /**
     * Indicates if the geometry centroid associated with each polygon feature can be returned.
     *
     * [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-rest-support-Query.html#spatialRelationship).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsDisjointSpatialRelationship: boolean;
    /**
     * Indicates if the query operation supports a [cache hint](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#cacheHint).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsCacheHint: boolean;
    /**
     * Indicates if the layer's query response includes the extent of features.
     *
     * [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.
     *
     * [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-rest-support-Query.html#having) clause on the service.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsOrderBy: boolean;
    /**
     * Indicates if the query response supports pagination.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsPagination: boolean;
    /**
     * Indicates if the layer supports [percentile statisticType](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-StatisticDefinition.html#statisticType).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsPercentileStatistics: boolean;
    /**
     * Indicates if the query response includes the [query geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html#queryGeometry).
     *
     * [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.
     *
     * [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).
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#capabilities)
     */
    supportsPagination: boolean;
  }

  export interface FeatureLayerElevationInfo extends Object {
    /**
     * Defines how the feature is placed with respect to the terrain surface or 3D objects in the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#elevationInfo)
     */
    mode: "on-the-ground" | "relative-to-ground" | "absolute-height" | "relative-to-scene";
    /**
     * An elevation offset, which is added to the vertical position of the feature.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#elevationInfo)
     */
    unit?: "feet" | "meters" | "kilometers" | "miles" | "us-feet" | "yards";
  }

  export interface FeatureLayerElevationInfoFeatureExpressionInfo extends Object {
    /**
     * An [Arcade expression](https://developers.arcgis.com/javascript/latest/arcade/) evaluating to a number that determines the z-value of the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#elevationInfo)
     */
    expression?: 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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryObjectIds)
     */
    signal?: AbortSignal;
  }

  export interface FeatureLayerQueryRelatedFeaturesCountOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryRelatedFeaturesCount)
     */
    signal?: AbortSignal;
  }

  export interface FeatureLayerQueryRelatedFeaturesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryRelatedFeatures)
     */
    signal?: AbortSignal;
  }

  export interface FeatureLayerQueryTopFeatureCountOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryTopFeatureCount)
     */
    signal?: AbortSignal;
  }

  export interface FeatureLayerQueryTopFeaturesExtentOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryTopFeaturesExtent)
     */
    signal?: AbortSignal;
  }

  export interface FeatureLayerQueryTopFeaturesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryTopFeatures)
     */
    signal?: AbortSignal;
  }

  export interface FeatureLayerQueryTopObjectIdsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryTopObjectIds)
     */
    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 AttachmentEditAttachment extends Object {
    /**
     * The globalId of the attachment to be added or updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#AttachmentEdit)
     */
    globalId: string;
    /**
     * The name of the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#AttachmentEdit)
     */
    name?: string;
    /**
     * The content type of the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#AttachmentEdit)
     */
    contentType?: string;
    /**
     * The id of pre-loaded attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#AttachmentEdit)
     */
    uploadId?: string;
    /**
     * The attachment data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#AttachmentEdit)
     */
    data?: Blob | any | string;
  }

  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, BlendLayer {
    /**
     * 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.
     *
     * [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.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#elevationInfo)
     */
    elevationInfo: GeoJSONLayerElevationInfo;
    /**
     * Configures the method for reducing the number of point features in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#featureReduction)
     */
    featureReduction: FeatureReductionCluster | FeatureReductionSelection;
    /**
     * 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#geometryType)
     */
    geometryType: "point" | "polygon" | "polyline" | "multipoint";
    /**
     * Indicates whether the client-side features in the layer have `Z` (elevation) values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#hasZ)
     */
    readonly hasZ: boolean;
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#labelingInfo)
     */
    labelingInfo: LabelClass[];
    /**
     * Indicates whether to display labels for this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#labelsVisible)
     */
    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)
     */
    legendEnabled: boolean;
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#fields) containing a unique value or identifier for each feature in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#objectIdField)
     */
    objectIdField: string;
    /**
     * An array of field names from the geoJSON file to include with each feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#outFields)
     */
    outFields: 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-GeoJSONLayer.html#popupEnabled)
     */
    popupEnabled: boolean;
    /**
     * The popup template for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * The renderer assigned to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#renderer)
     */
    renderer: Renderer;
    /**
     * Apply perspective scaling to screen-size point symbols in 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-layers-GeoJSONLayer.html#screenSizePerspectiveEnabled)
     */
    screenSizePerspectiveEnabled: boolean;
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#spatialReference)
     */
    spatialReference: SpatialReference;
    /**
     * An array of feature templates defined in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#templates)
     */
    templates: FeatureTemplate[];

    readonly type: "geojson";
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#applyEdits)
     */
    applyEdits(edits: GeoJSONLayerApplyEditsEdits): Promise<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)
     */
    createPopupTemplate(options?: CreatePopupTemplateOptions): PopupTemplate;
    /**
     * Creates query parameter object that can be used to fetch features that satisfy the layer's configurations such as [definitionExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#definitionExpression).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#createQuery)
     */
    createQuery(): supportQuery;
    /**
     * 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)
     */
    getField(fieldName: string): Field;
    /**
     * Returns the Domain associated with the given field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#getFieldDomain)
     */
    getFieldDomain(fieldName: string, options?: GeoJSONLayerGetFieldDomainOptions): Domain;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the layer and returns the [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#queryExtent)
     */
    queryExtent(query?: supportQuery | supportQueryProperties, options?: GeoJSONLayerQueryExtentOptions): Promise<any>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the layer and returns the number of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#queryFeatureCount)
     */
    queryFeatureCount(
      query?: supportQuery | supportQueryProperties,
      options?: GeoJSONLayerQueryFeatureCountOptions
    ): Promise<number>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the layer and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html), which can be accessed using the `.then()` method once the promise resolves.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#queryFeatures)
     */
    queryFeatures(
      query?: supportQuery | supportQueryProperties,
      options?: GeoJSONLayerQueryFeaturesOptions
    ): Promise<supportFeatureSet>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the layer and returns an array of Object IDs for features that satisfy the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#queryObjectIds)
     */
    queryObjectIds(
      query?: supportQuery | supportQueryProperties,
      options?: GeoJSONLayerQueryObjectIdsOptions
    ): Promise<number[]>;

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

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

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

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

  interface GeoJSONLayerConstructor {
    /**
     * The GeoJSONLayer class is used to create a layer based on [GeoJSON](http://geojson.org/).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html)
     */

    new (properties?: GeoJSONLayerProperties): GeoJSONLayer;
  }

  export const GeoJSONLayer: GeoJSONLayerConstructor;

  interface GeoJSONLayerProperties
    extends LayerProperties,
      ScaleRangeLayerProperties,
      TemporalLayerProperties,
      BlendLayerProperties {
    /**
     * 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.
     *
     * [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.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#elevationInfo)
     */
    elevationInfo?: GeoJSONLayerElevationInfo;
    /**
     * Configures the method for reducing the number of point features in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#featureReduction)
     */
    featureReduction?:
      | (FeatureReductionClusterProperties & { type: "cluster" })
      | (FeatureReductionSelectionProperties & { type: "selection" });
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#geometryType)
     */
    geometryType?: "point" | "polygon" | "polyline" | "multipoint";
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#labelingInfo)
     */
    labelingInfo?: LabelClassProperties[];
    /**
     * Indicates whether to display labels for this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#labelsVisible)
     */
    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)
     */
    legendEnabled?: boolean;
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#fields) containing a unique value or identifier for each feature in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#objectIdField)
     */
    objectIdField?: string;
    /**
     * An array of field names from the geoJSON file to include with each feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#outFields)
     */
    outFields?: 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-GeoJSONLayer.html#popupEnabled)
     */
    popupEnabled?: boolean;
    /**
     * The popup template for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * The renderer assigned to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#renderer)
     */
    renderer?: RendererProperties;
    /**
     * Apply perspective scaling to screen-size point symbols in 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-layers-GeoJSONLayer.html#screenSizePerspectiveEnabled)
     */
    screenSizePerspectiveEnabled?: boolean;
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#spatialReference)
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * An array of feature templates defined in the layer.
     *
     * [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 GeoJSONLayerEditsEvent {
    addedFeatures: GeoJSONLayerEditsEventAddedFeatures[];

    deletedFeatures: GeoJSONLayerEditsEventDeletedFeatures[];

    updatedFeatures: GeoJSONLayerEditsEventUpdatedFeatures[];
  }

  export interface GeoJSONLayerApplyEditsEdits extends Object {
    /**
     * An array or a [collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of features to be added.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#applyEdits)
     */
    addFeatures?: Graphic[] | Collection<Graphic>;
    /**
     * An array or a [collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of features to be updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#applyEdits)
     */
    updateFeatures?: Graphic[] | Collection<Graphic>;
    /**
     * An array or a [collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of features, or objects to be deleted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#applyEdits)
     */
    deleteFeatures?: Graphic[] | any[] | Collection<Graphic>;
  }

  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-rest-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.
     *
     * [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.
     *
     * [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.
     *
     * [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).
     *
     * [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 layer can be updated.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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-rest-support-Query.html#spatialRelationship).
     *
     * [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.
     *
     * [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.
     *
     * [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-rest-support-Query.html#having) clause on the service.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsOrderBy: boolean;
    /**
     * Indicates if the query response supports pagination.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsPagination: boolean;
    /**
     * Indicates if the layer supports [percentile statisticType](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-StatisticDefinition.html#statisticType).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsPercentileStatistics: boolean;
    /**
     * Indicates if the query response includes the [query geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html#queryGeometry).
     *
     * [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.
     *
     * [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).
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#capabilities)
     */
    supportsPagination: boolean;
  }

  export interface GeoJSONLayerElevationInfo extends Object {
    /**
     * Defines how the feature is placed with respect to the terrain surface or 3D objects in the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#elevationInfo)
     */
    mode: "on-the-ground" | "relative-to-ground" | "absolute-height" | "relative-to-scene";
    /**
     * An elevation offset, which is added to the vertical position of the graphic.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#elevationInfo)
     */
    unit?: "feet" | "meters" | "kilometers" | "miles" | "us-feet" | "yards";
  }

  export interface GeoJSONLayerElevationInfoFeatureExpressionInfo extends Object {
    /**
     * An [Arcade expression](https://developers.arcgis.com/javascript/latest/arcade/) evaluating to a number that determines the z-value of the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#elevationInfo)
     */
    expression?: 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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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;
  }

  export interface GeoJSONLayerEditsEventAddedFeatures extends Object {
    objectId: number;
  }

  export interface GeoJSONLayerEditsEventDeletedFeatures extends Object {
    objectId: number;
  }

  export interface GeoJSONLayerEditsEventUpdatedFeatures extends Object {
    objectId: number;
  }

  interface GeoRSSLayer extends Layer, ScaleRangeLayer, BlendLayer {
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoRSSLayer.html#legendEnabled)
     */
    legendEnabled: boolean;
    /**
     * 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 | SimpleMarkerSymbol;
    /**
     * 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;

    readonly type: "geo-rss";
    /**
     * The URL pointing to a GeoRSS file.
     *
     * [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 {
    /**
     * The GeoRSSLayer class is used to create a layer based on [GeoRSS](https://www.ogc.org/standards/georss).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoRSSLayer.html)
     */

    new (properties?: GeoRSSLayerProperties): GeoRSSLayer;
  }

  export const GeoRSSLayer: GeoRSSLayerConstructor;

  interface GeoRSSLayerProperties extends LayerProperties, ScaleRangeLayerProperties, BlendLayerProperties {
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoRSSLayer.html#legendEnabled)
     */
    legendEnabled?: boolean;
    /**
     * 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 & { type: "picture-marker" })
      | (SimpleMarkerSymbolProperties & { type: "simple-marker" });
    /**
     * 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.
     *
     * [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, BlendLayer {
    /**
     * Specifies how graphics are placed on the vertical axis (z).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#graphics)
     */
    graphics: Collection<Graphic>;
    /**
     * Apply perspective scaling to screen-size point symbols in 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-layers-GraphicsLayer.html#screenSizePerspectiveEnabled)
     */
    screenSizePerspectiveEnabled: boolean;

    readonly type: "graphics";

    /**
     * Adds a graphic to the layer's graphic collection.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#add)
     */
    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)
     */
    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)
     */
    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)
     */
    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 {
    /**
     * A GraphicsLayer contains one or more client-side [Graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html)
     */

    new (properties?: GraphicsLayerProperties): GraphicsLayer;
  }

  export const GraphicsLayer: GraphicsLayerConstructor;

  interface GraphicsLayerProperties extends LayerProperties, ScaleRangeLayerProperties, BlendLayerProperties {
    /**
     * Specifies how graphics are placed on the vertical axis (z).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#graphics)
     */
    graphics?: CollectionProperties<GraphicProperties>;
    /**
     * Apply perspective scaling to screen-size point symbols in 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-layers-GraphicsLayer.html#screenSizePerspectiveEnabled)
     */
    screenSizePerspectiveEnabled?: boolean;
  }

  export interface GraphicsLayerElevationInfo extends Object {
    /**
     * Defines how the feature is placed with respect to the terrain surface or 3D objects in the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#elevationInfo)
     */
    mode: "on-the-ground" | "relative-to-ground" | "absolute-height" | "relative-to-scene";
    /**
     * An elevation offset, which is added to the vertical position of the graphic.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html#elevationInfo)
     */
    unit?: "feet" | "meters" | "kilometers" | "miles" | "us-feet" | "yards";
  }

  export interface GraphicsLayerElevationInfoFeatureExpressionInfo extends Object {
    /**
     * An [Arcade expression](https://developers.arcgis.com/javascript/latest/arcade/) evaluating to a number that determines the z-value of the 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, TablesMixin, PortalLayer, BlendLayer {
    /**
     * The maximum scale (most zoomed in) at which the layer is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html#maxScale)
     */
    maxScale: number;
    /**
     * The minimum scale (most zoomed out) at which the layer is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html#minScale)
     */
    minScale: number;

    readonly type: "group";
    /**
     * Indicates how to manage the visibility of the children layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html#visibilityMode)
     */
    visibilityMode: "independent" | "inherited" | "exclusive";

    /**
     * Loads all the externally loadable resources associated with the group layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html#loadAll)
     */
    loadAll(): Promise<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 {
    /**
     * GroupLayer provides the ability to organize several sublayers into one common layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html)
     */

    new (properties?: GroupLayerProperties): GroupLayer;

    fromJSON(json: any): GroupLayer;
  }

  export const GroupLayer: GroupLayerConstructor;

  interface GroupLayerProperties
    extends LayerProperties,
      LayersMixinProperties,
      TablesMixinProperties,
      PortalLayerProperties,
      BlendLayerProperties {
    /**
     * The maximum scale (most zoomed in) at which the layer is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html#maxScale)
     */
    maxScale?: number;
    /**
     * The minimum scale (most zoomed out) at which the layer is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html#minScale)
     */
    minScale?: number;
    /**
     * Indicates how to manage the visibility of the children layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GroupLayer.html#visibilityMode)
     */
    visibilityMode?: "independent" | "inherited" | "exclusive";
  }

  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,
      BlendLayer {
    /**
     * A list of custom parameters appended to the URL of all resources fetched by the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#customParameters)
     */
    customParameters: any;
    /**
     * 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)
     */
    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)
     */
    popupEnabled: boolean;
    /**
     * The popup template for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;

    readonly type: "imagery";

    /**
     * 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)
     */
    createPopupTemplate(options?: CreatePopupTemplateOptions): 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 {
    /**
     * Represents an [image service resource](https://developers.arcgis.com/rest/services-reference/image-service.htm) as a layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html)
     */

    new (properties?: ImageryLayerProperties): ImageryLayer;

    fromJSON(json: any): ImageryLayer;
  }

  export const ImageryLayer: ImageryLayerConstructor;

  interface ImageryLayerProperties
    extends LayerProperties,
      ArcGISImageServiceProperties,
      PortalLayerProperties,
      RefreshableLayerProperties,
      ScaleRangeLayerProperties,
      TemporalLayerProperties,
      BlendLayerProperties {
    /**
     * A list of custom parameters appended to the URL of all resources fetched by the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#customParameters)
     */
    customParameters?: any;
    /**
     * 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)
     */
    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)
     */
    popupEnabled?: boolean;
    /**
     * The popup template for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
  }

  export interface ImageryLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface ImageryLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface ImageryLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  /**
   * 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.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#PixelData)
   */
  export interface PixelData extends Object {
    /**
     * The extent of the `pixelBlock`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#PixelData)
     */
    extent: Extent;
    /**
     * An object representing the pixels in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#PixelData)
     */
    pixelBlock: PixelBlock;
  }

  export type PixelFilterFunction = (pixelData: PixelData) => void;

  /**
   * Raster statistics information returned that meets the specified [ImageHistogramParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageHistogramParameters.html) from the [computeStatisticsHistograms()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#computeStatisticsHistograms) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#RasterBandStatistics)
   */
  export interface RasterBandStatistics extends Object {
    /**
     * Minimum value of the statistics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#RasterBandStatistics)
     */
    min: number;
    /**
     * Maximum value of the statistics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#RasterBandStatistics)
     */
    max: number;
    /**
     * Average of the statistics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#RasterBandStatistics)
     */
    avg: number;
    /**
     * Standard deviation of the statistics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#RasterBandStatistics)
     */
    stddev: number;
  }

  /**
   * Raster histogram information returned that meets the specified [ImageHistogramParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageHistogramParameters.html) from the [computeHistograms()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#computeHistograms) or [computeStatisticsHistograms()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#computeStatisticsHistograms) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#RasterHistogram)
   */
  export interface RasterHistogram extends Object {
    /**
     * Number of bins.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#RasterHistogram)
     */
    size: number;
    /**
     * The minimum pixel value of the histogram.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#RasterHistogram)
     */
    min: number;
    /**
     * The maximum pixel value of the histogram.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#RasterHistogram)
     */
    max: number;
    /**
     * Count of pixels that fall into each bin.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#RasterHistogram)
     */
    counts: number[] | Uint32Array;
  }

  interface ImageryTileLayer extends Layer, ImageryTileMixin, PortalLayer, ScaleRangeLayer, BlendLayer {
    /**
     * A list of custom parameters appended to the URL of all resources fetched by the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#customParameters)
     */
    customParameters: any;
    /**
     * Defines how to interpolate pixel values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#interpolation)
     */
    interpolation: "nearest" | "bilinear" | "cubic" | "majority";
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#legendEnabled)
     */
    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-ImageryTileLayer.html#popupEnabled)
     */
    popupEnabled: boolean;
    /**
     * The popup template for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * A complete list of fields that consists of raster attribute table fields, item pixel value, service pixel value, service pixel value with various server defined function templates, and raster attribute table fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#rasterFields)
     */
    readonly rasterFields: Field[];
    /**
     * The [tiled image service's metadata JSON](https://developers.arcgis.com/rest/services-reference/image-service.htm) exposed by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#sourceJSON)
     */
    sourceJSON: any;
    /**
     * The tiling scheme information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#tileInfo)
     */
    tileInfo: TileInfo;

    readonly type: "imagery-tile";
    /**
     * The version of ArcGIS Server in which the image service is published.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#version)
     */
    readonly version: number;

    /**
     * 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-ImageryTileLayer.html#createPopupTemplate)
     */
    createPopupTemplate(options?: CreatePopupTemplateOptions): PopupTemplate;

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

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

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

  interface ImageryTileLayerConstructor {
    /**
     * ImageryTileLayer presents raster data from a tiled image service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html)
     */

    new (properties?: ImageryTileLayerProperties): ImageryTileLayer;

    fromJSON(json: any): ImageryTileLayer;
  }

  export const ImageryTileLayer: ImageryTileLayerConstructor;

  interface ImageryTileLayerProperties
    extends LayerProperties,
      ImageryTileMixinProperties,
      PortalLayerProperties,
      ScaleRangeLayerProperties,
      BlendLayerProperties {
    /**
     * A list of custom parameters appended to the URL of all resources fetched by the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#customParameters)
     */
    customParameters?: any;
    /**
     * Defines how to interpolate pixel values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#interpolation)
     */
    interpolation?: "nearest" | "bilinear" | "cubic" | "majority";
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#legendEnabled)
     */
    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-ImageryTileLayer.html#popupEnabled)
     */
    popupEnabled?: boolean;
    /**
     * The popup template for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * The [tiled image service's metadata JSON](https://developers.arcgis.com/rest/services-reference/image-service.htm) exposed by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#sourceJSON)
     */
    sourceJSON?: any;
    /**
     * The tiling scheme information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#tileInfo)
     */
    tileInfo?: TileInfoProperties;
  }

  export interface ImageryTileLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface ImageryTileLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface ImageryTileLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  /**
   * Additional options to set for `identify()` method on [ImageryTileLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#identify) and [WCSLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WCSLayer.html#identify).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#RasterIdentifyOptions)
   */
  export interface RasterIdentifyOptions extends Object {
    /**
     * A dimensional definition that will be used for the `identify` operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#RasterIdentifyOptions)
     */
    multidimensionalDefinition?: DimensionalDefinition[];
    /**
     * [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#RasterIdentifyOptions)
     */
    signal?: AbortSignal;
  }

  /**
   * The result of `identify` operation.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#RasterIdentifyResult)
   */
  export interface RasterIdentifyResult extends Object {
    /**
     * The identified location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#RasterIdentifyResult)
     */
    location: Point;
    /**
     * Image service pixel values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html#RasterIdentifyResult)
     */
    value: number[];
  }

  interface IntegratedMeshLayer extends Layer, SceneService, PortalLayer, ScaleRangeLayer {
    /**
     * Specifies how the mesh is placed on the vertical axis (z).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html#elevationInfo)
     */
    elevationInfo: IntegratedMeshLayerElevationInfo;
    /**
     * A collection of [SceneModification](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SceneModification.html) with polygons and types to apply client-side modifications.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html#modifications)
     */
    modifications: SceneModifications;

    readonly type: "integrated-mesh";

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

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

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

  interface IntegratedMeshLayerConstructor {
    /**
     * The IntegratedMeshLayer is designed for visualizing accurate representations in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) of infrastructure and natural landscapes that are difficult to access.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html)
     */

    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html#elevationInfo)
     */
    elevationInfo?: IntegratedMeshLayerElevationInfo;
    /**
     * A collection of [SceneModification](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SceneModification.html) with polygons and types to apply client-side modifications.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html#modifications)
     */
    modifications?: SceneModificationsProperties;
  }

  export interface IntegratedMeshLayerElevationInfo extends Object {
    /**
     * Defines how the mesh is placed on the vertical axis (z).
     *
     * [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)
     */
    offset?: number;
    /**
     * The unit for `offset` values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html#elevationInfo)
     */
    unit?: "feet" | "meters" | "kilometers" | "miles" | "us-feet" | "yards";
  }

  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, BlendLayer {
    /**
     * 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>;

    readonly type: "kml";
    /**
     * 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 {
    /**
     * The KMLLayer class is used to create a layer based on a KML file (.kml, .kmz).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-KMLLayer.html)
     */

    new (properties?: KMLLayerProperties): KMLLayer;

    fromJSON(json: any): KMLLayer;
  }

  export const KMLLayer: KMLLayerConstructor;

  interface KMLLayerProperties
    extends LayerProperties,
      PortalLayerProperties,
      ScaleRangeLayerProperties,
      BlendLayerProperties {
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#fullExtent)
     */
    fullExtent: Extent;
    /**
     * The unique ID assigned to the layer.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#listMode)
     */
    listMode: "show" | "hide" | "hide-children";
    /**
     * Indicates whether the layer's resources have loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#loaded)
     */
    readonly loaded: boolean;
    /**
     * The opacity of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#opacity)
     */
    opacity: number;
    /**
     * The title of the layer used to identify it in places such as the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widget.
     *
     * [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 layer without the need to import specific layer modules.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#type)
     */
    readonly type:
      | "base-dynamic"
      | "base-elevation"
      | "base-tile"
      | "bing-maps"
      | "building-scene"
      | "csv"
      | "elevation"
      | "feature"
      | "geojson"
      | "geo-rss"
      | "graphics"
      | "group"
      | "imagery"
      | "imagery-tile"
      | "integrated-mesh"
      | "kml"
      | "map-image"
      | "map-notes"
      | "ogc-feature"
      | "open-street-map"
      | "point-cloud"
      | "route"
      | "scene"
      | "stream"
      | "tile"
      | "unknown"
      | "unsupported"
      | "vector-tile"
      | "wcs"
      | "web-tile"
      | "wfs"
      | "wms"
      | "wmts"
      | "slice"
      | "area-measurement"
      | "direct-line-measurement"
      | "line-of-sight"
      | "voxel"
      | "subtype-group";
    /**
     * Indicates if the layer is visible 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-Layer.html#visible)
     */
    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 must be created for it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#createLayerView)
     */
    createLayerView(view: any, options?: LayerCreateLayerViewOptions): Promise<LayerView>;
    /**
     * Destroys the layer and any associated resources (including its [portalItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#portalItem), if it is a property on the layer).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#destroy)
     */
    destroy(): 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(): Promise<any>;

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

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

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

  interface LayerConstructor {
    /**
     * The layer is the most fundamental component of a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html)
     */

    new (properties?: LayerProperties): Layer;

    /**
     * Creates a new layer instance from an ArcGIS Server URL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#fromArcGISServerUrl)
     */
    fromArcGISServerUrl(params: LayerFromArcGISServerUrlParams): Promise<Layer>;
    /**
     * Creates a new layer instance of the appropriate layer class from an ArcGIS Online or ArcGIS Enterprise [portal item](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#fromPortalItem)
     */
    fromPortalItem(params: LayerFromPortalItemParams): Promise<Layer>;
  }

  export const Layer: LayerConstructor;

  interface LayerProperties extends LoadableProperties {
    /**
     * The full extent of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#fullExtent)
     */
    fullExtent?: ExtentProperties;
    /**
     * The unique ID assigned to the layer.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#listMode)
     */
    listMode?: "show" | "hide" | "hide-children";
    /**
     * The opacity of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#opacity)
     */
    opacity?: number;
    /**
     * The title of the layer used to identify it in places such as the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widget.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#visible)
     */
    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 here for constructing the layer instance (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html#fromArcGISServerUrl)
     */
    properties?: any;
  }

  export interface LayerFromPortalItemParams extends Object {
    /**
     * The object representing an ArcGIS Online 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;
  }

  export interface LayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface LayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface LayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface MapImageLayer
    extends Layer,
      SublayersOwner,
      ArcGISMapService,
      ScaleRangeLayer,
      RefreshableLayer,
      TemporalLayer,
      BlendLayer,
      CustomParametersMixin,
      APIKeyMixin {
    /**
     * 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.
     *
     * [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)
     */
    dpi: number;
    /**
     * The version of the geodatabase of the map service data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#gdbVersion)
     */
    gdbVersion: string;
    /**
     * The output image type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#imageFormat)
     */
    imageFormat: "png" | "png8" | "png24" | "png32" | "jpg" | "pdf" | "bmp" | "gif" | "svg" | "pngjpg";
    /**
     * 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)
     */
    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)
     */
    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)
     */
    imageTransparency: boolean;
    /**
     * The portal item from which the layer is loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#portalItem)
     */
    portalItem: PortalItem;
    /**
     * The [map service's metadata JSON](https://developers.arcgis.com/rest/services-reference/map-service.htm) exposed by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#sourceJSON)
     */
    sourceJSON: any;
    /**
     * 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 that allow you to alter the properties of one or more sublayers of the MapImageLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#sublayers)
     */
    sublayers: Collection<Sublayer>;

    readonly type: "map-image";
    /**
     * 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)
     */
    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)
     */
    fetchImage(
      extent: Extent,
      width: number,
      height: number,
      options?: MapImageLayerFetchImageOptions
    ): Promise<HTMLImageElement>;
    /**
     * Loads all of the sublayers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#loadAll)
     */
    loadAll(): Promise<Sublayer>;

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

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

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

  interface MapImageLayerConstructor {
    /**
     * MapImageLayer allows you to display and analyze data from [sublayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#sublayers) defined in a [map service](https://enterprise.arcgis.com/en/server/latest/publish-services/windows/what-is-a-map-service.htm), exporting images instead of features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html)
     */

    new (properties?: MapImageLayerProperties): MapImageLayer;

    fromJSON(json: any): MapImageLayer;
  }

  export const MapImageLayer: MapImageLayerConstructor;

  interface MapImageLayerProperties
    extends LayerProperties,
      ArcGISMapServiceProperties,
      ScaleRangeLayerProperties,
      RefreshableLayerProperties,
      TemporalLayerProperties,
      BlendLayerProperties,
      CustomParametersMixinProperties,
      APIKeyMixinProperties {
    /**
     * The output dots per inch (DPI) of the MapImageLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#dpi)
     */
    dpi?: number;
    /**
     * The version of the geodatabase of the map service data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#gdbVersion)
     */
    gdbVersion?: string;
    /**
     * The output image type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#imageFormat)
     */
    imageFormat?: "png" | "png8" | "png24" | "png32" | "jpg" | "pdf" | "bmp" | "gif" | "svg" | "pngjpg";
    /**
     * 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)
     */
    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)
     */
    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)
     */
    imageTransparency?: boolean;
    /**
     * The portal item from which the layer is loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#portalItem)
     */
    portalItem?: PortalItemProperties;
    /**
     * The [map service's metadata JSON](https://developers.arcgis.com/rest/services-reference/map-service.htm) exposed by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#sourceJSON)
     */
    sourceJSON?: any;
    /**
     * 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 that allow you to alter the properties of one or more sublayers of the MapImageLayer.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html#fetchImage)
     */
    signal?: AbortSignal;
  }

  interface MapNotesLayer extends Layer, PortalLayer, ScaleRangeLayer, BlendLayer {
    /**
     * Describes the layer's supported capabilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapNotesLayer.html#capabilities)
     */
    readonly capabilities: MapNotesLayerCapabilities;
    /**
     * A layer containing a collection of graphics with multipoint geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapNotesLayer.html#multipointLayer)
     */
    readonly multipointLayer: GraphicsLayer;
    /**
     * A layer containing a collection of graphics with point geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapNotesLayer.html#pointLayer)
     */
    readonly pointLayer: GraphicsLayer;
    /**
     * A layer containing a collection of graphics with polygon geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapNotesLayer.html#polygonLayer)
     */
    readonly polygonLayer: GraphicsLayer;
    /**
     * A layer containing a collection of graphics with polyline geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapNotesLayer.html#polylineLayer)
     */
    readonly polylineLayer: GraphicsLayer;
    /**
     * A layer containing a collection of text graphics with point geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapNotesLayer.html#textLayer)
     */
    readonly textLayer: GraphicsLayer;

    readonly type: "map-notes";

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

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

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

  interface MapNotesLayerConstructor {
    /**
     * The MapNotesLayer lets you display and modify map notes (features sketched on a web map) from the [Map Viewer](https://www.arcgis.com/apps/mapviewer/index.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapNotesLayer.html)
     */

    new (properties?: MapNotesLayerProperties): MapNotesLayer;

    fromJSON(json: any): MapNotesLayer;
  }

  export const MapNotesLayer: MapNotesLayerConstructor;

  interface MapNotesLayerProperties
    extends LayerProperties,
      PortalLayerProperties,
      ScaleRangeLayerProperties,
      BlendLayerProperties {}

  export interface MapNotesLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface MapNotesLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface MapNotesLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  export interface MapNotesLayerCapabilities extends Object {
    /**
     * Describes operations that can be performed on map notes in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapNotesLayer.html#capabilities)
     */
    operations: MapNotesLayerCapabilitiesOperations;
  }

  export interface MapNotesLayerCapabilitiesOperations extends Object {
    /**
     * Indicates if map notes in the layer can be edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapNotesLayer.html#capabilities)
     */
    supportsMapNotesEditing: boolean;
  }

  interface APIKeyMixin {
    /**
     * An authorization string used to access a resource or service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-APIKeyMixin.html#apiKey)
     */
    apiKey: string;
  }

  interface APIKeyMixinConstructor {
    new (): APIKeyMixin;
  }

  export const APIKeyMixin: APIKeyMixinConstructor;

  interface APIKeyMixinProperties {
    /**
     * An authorization string used to access a resource or service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-APIKeyMixin.html#apiKey)
     */
    apiKey?: string;
  }

  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 {
    /**
     * Defines a band combination using 0-based band indexes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#bandIds)
     */
    bandIds: number[];
    /**
     * Describes the layer's supported capabilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    capabilities: ArcGISImageServiceCapabilities;
    /**
     * The compression quality value.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#compressionTolerance)
     */
    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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#fields)
     */
    fields: Field[];
    /**
     * The format of the exported image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#format)
     */
    format: "png" | "png8" | "png24" | "png32" | "jpg" | "bmp" | "gif" | "jpgpng" | "lerc" | "tiff";
    /**
     * 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 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)
     */
    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)
     */
    imageMaxWidth: number;
    /**
     * Defines how to interpolate pixel values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#interpolation)
     */
    interpolation: "nearest" | "bilinear" | "cubic" | "majority";
    /**
     * 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 layer if the layer's [hasMultidimensions](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#hasMultidimensions) property is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#multidimensionalInfo)
     */
    multidimensionalInfo: any;
    /**
     * The pixel value representing no available information.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#noDataInterpretation)
     */
    noDataInterpretation: "any" | "all";
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#fields) containing a 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#pixelFilter)
     */
    pixelFilter: PixelFilterFunction;
    /**
     * Raster source pixel type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#pixelType)
     */
    pixelType: "unknown" | "s8" | "s16" | "s32" | "u8" | "u16" | "u32" | "f32" | "f64";
    /**
     * A complete list of fields that consists of raster attribute table fields, item pixel value, service pixel value, service pixel value with various server defined function templates, and raster attribute table fields.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#renderer)
     */
    renderer:
      | ClassBreaksRenderer
      | UniqueValueRenderer
      | RasterStretchRenderer
      | RasterShadedReliefRenderer
      | RasterColormapRenderer
      | VectorFieldRenderer;
    /**
     * Specifies the rule for how the requested image should be rendered.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#serviceRasterInfo)
     */
    readonly serviceRasterInfo: RasterInfo;
    /**
     * The [image service's metadata JSON](https://developers.arcgis.com/rest/services-reference/image-service.htm) exposed by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#sourceJSON)
     */
    sourceJSON: any;
    /**
     * 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.
     *
     * [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;

    /**
     * Computes histograms based on the provided [ImageHistogramParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageHistogramParameters.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#computeHistograms)
     */
    computeHistograms(
      parameters: supportImageHistogramParameters | supportImageHistogramParametersProperties,
      options?: ArcGISImageServiceComputeHistogramsOptions
    ): Promise<any>;
    /**
     * Computes [statistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#RasterBandStatistics) and [histograms](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#RasterHistogram) for the provided [ImageHistogramParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageHistogramParameters.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#computeStatisticsHistograms)
     */
    computeStatisticsHistograms(
      parameters: supportImageHistogramParameters | supportImageHistogramParametersProperties,
      options?: ArcGISImageServiceComputeStatisticsHistogramsOptions
    ): Promise<any>;
    /**
     * Returns an image using the [export REST operation](https://developers.arcgis.com/rest/services-reference/export-image.htm) that displays data 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)
     */
    fetchImage(
      extent: Extent,
      width: number,
      height: number,
      options?: ArcGISImageServiceFetchImageOptions
    ): Promise<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)
     */
    generateRasterInfo(renderingRule: RasterFunction | RasterFunctionProperties): Promise<RasterInfo>;
    /**
     * Gets the [image coordinate system](https://developers.arcgis.com/rest/services-reference/raster-ics.htm) information of a catalog item in an image service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#getCatalogItemICSInfo)
     */
    getCatalogItemICSInfo(rasterId: number, abortOptions?: AbortSignal): Promise<any>;
    /**
     * Get the [raster info](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html) of a [catalog item](https://developers.arcgis.com/rest/services-reference/raster-catalog-item.htm) in an image service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#getCatalogItemRasterInfo)
     */
    getCatalogItemRasterInfo(rasterId: number, abortOptions?: AbortSignal): Promise<RasterInfo>;
    /**
     * Returns sample point locations, pixel values and corresponding resolutions of the souce data for a given geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#getSamples)
     */
    getSamples(
      parameters: ImageSampleParameters | ImageSampleParametersProperties,
      options?: ArcGISImageServiceGetSamplesOptions
    ): Promise<ImageSampleResult>;
    /**
     * Sends a request to the ArcGIS REST image service to identify content based on the specified [ImageIdentifyParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#identify)
     */
    identify(
      parameters: supportImageIdentifyParameters | supportImageIdentifyParametersProperties,
      options?: ArcGISImageServiceIdentifyOptions
    ): Promise<supportImageIdentifyResult>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against an image service and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html), which can be accessed using the `.then()` method once the promise resolves.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#queryRasters)
     */
    queryRasters(
      query: supportQuery | supportQueryProperties,
      options?: ArcGISImageServiceQueryRastersOptions
    ): Promise<supportFeatureSet>;
  }

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

    fromJSON(json: any): ArcGISImageService;
  }

  export const ArcGISImageService: ArcGISImageServiceConstructor;

  interface ArcGISImageServiceProperties {
    /**
     * Defines a band combination using 0-based band indexes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#bandIds)
     */
    bandIds?: number[];
    /**
     * Describes the layer's supported capabilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    capabilities?: ArcGISImageServiceCapabilities;
    /**
     * The compression quality value.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#compressionTolerance)
     */
    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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#fields)
     */
    fields?: FieldProperties[];
    /**
     * The format of the exported image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#format)
     */
    format?: "png" | "png8" | "png24" | "png32" | "jpg" | "bmp" | "gif" | "jpgpng" | "lerc" | "tiff";
    /**
     * 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 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)
     */
    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)
     */
    imageMaxWidth?: number;
    /**
     * Defines how to interpolate pixel values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#interpolation)
     */
    interpolation?: "nearest" | "bilinear" | "cubic" | "majority";
    /**
     * 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 layer if the layer's [hasMultidimensions](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#hasMultidimensions) property is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#multidimensionalInfo)
     */
    multidimensionalInfo?: any;
    /**
     * The pixel value representing no available information.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#noDataInterpretation)
     */
    noDataInterpretation?: "any" | "all";
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#fields) containing a 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#pixelFilter)
     */
    pixelFilter?: PixelFilterFunction;
    /**
     * Raster source pixel type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#pixelType)
     */
    pixelType?: "unknown" | "s8" | "s16" | "s32" | "u8" | "u16" | "u32" | "f32" | "f64";
    /**
     * The renderer assigned to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#renderer)
     */
    renderer?:
      | (ClassBreaksRendererProperties & { type: "class-breaks" })
      | (UniqueValueRendererProperties & { type: "unique-value" })
      | (RasterStretchRendererProperties & { type: "raster-stretch" })
      | (RasterShadedReliefRendererProperties & { type: "raster-shaded-relief" })
      | (RasterColormapRendererProperties & { type: "raster-colormap" })
      | (VectorFieldRendererProperties & { type: "vector-field" });
    /**
     * Specifies the rule for how the requested image should be rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#renderingRule)
     */
    renderingRule?: RasterFunctionProperties;
    /**
     * The [image service's metadata JSON](https://developers.arcgis.com/rest/services-reference/image-service.htm) exposed by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#sourceJSON)
     */
    sourceJSON?: any;
    /**
     * The URL to the REST endpoint of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#url)
     */
    url?: string;
  }

  export interface ArcGISImageServiceCapabilities extends Object {
    /**
     * Describes operations supported by the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    operations: ArcGISImageServiceCapabilitiesOperations;
    /**
     * Describes [query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) operations supported by the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    query: ArcGISImageServiceCapabilitiesQuery;
  }

  export interface ArcGISImageServiceCapabilitiesOperations extends Object {
    /**
     * Indicates if the layer supports a [compute histograms](https://developers.arcgis.com/rest/services-reference/compute-histograms.htm) operation from an area of interest.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    supportsComputeHistograms: void;
    /**
     * Indicates if the layer supports an [export image](https://developers.arcgis.com/rest/services-reference/export-image.htm) operation based on a bounding box.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    supportsExportImage: void;
    /**
     * Indicates if the layer supports an [identify](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ImageIdentifyTask.html) operation on pixel values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    supportsIdentify: void;
    /**
     * Indicates if the layer supports mensuration.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    supportsMeasure: void;
    /**
     * Indicates if the layer allows the source image to be [downloaded](https://developers.arcgis.com/rest/services-reference/download-rasters.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    supportsDownload: void;
    /**
     * Indicates if the layer supports an operation to [query images](https://developers.arcgis.com/rest/services-reference/query-image-service-.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    supportsQuery: void;
    /**
     * Indicates if the layer supports a [sampling operation](https://developers.arcgis.com/rest/services-reference/get-samples.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    supportsGetSamples: void;
    /**
     * Indicates if the layer supports [projection of geometries](https://developers.arcgis.com/rest/services-reference/project.htm), including from/to image spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    supportsProject: void;
    /**
     * Indicates if the layer supports an operation [computing statistics and histograms](https://developers.arcgis.com/rest/services-reference/compute-statistics-and-histograms.htm) from an area of interest.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    supportsComputeStatisticsHistograms: void;
    /**
     * Indicates if the layer supports an operation to [query the service's boundary](https://developers.arcgis.com/rest/services-reference/query-boundary.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    supportsQueryBoundary: void;
    /**
     * Indicates if the elevation layer supports an operation to [compute volumes](https://developers.arcgis.com/rest/services-reference/calculate-volume.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    supportsCalculateVolume: void;
    /**
     * Indicates if the layer supports [computing pixel location](https://developers.arcgis.com/rest/services-reference/compute-pixel-location.htm) in pixel space.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    supportsComputePixelLocation: void;
  }

  export interface ArcGISImageServiceCapabilitiesQuery extends Object {
    /**
     * Indicates if the layer supports field-based statistical functions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    supportsStatistics: void;
    /**
     * Indicates if the layer returned in the query response can be ordered by one or more fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    supportsOrderBy: void;
    /**
     * Indicates if the layer supports queries for distinct values based on fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    supportsDistinct: void;
    /**
     * Indicates if the layer supports paged queries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    supportsPagination: void;
    /**
     * Indicates if the layer supports use of standardized queries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    supportsStandardizedQueriesOnly: void;
    /**
     * The maximum number of records that will be returned for a given query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#capabilities)
     */
    maxRecordCount: void;
  }

  export interface ArcGISImageServiceComputeHistogramsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#computeHistograms)
     */
    signal?: AbortSignal;
  }

  export interface ArcGISImageServiceComputeStatisticsHistogramsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#computeStatisticsHistograms)
     */
    signal?: AbortSignal;
  }

  export interface ArcGISImageServiceFetchImageOptions extends Object {
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#fetchImage)
     */
    signal?: AbortSignal;
  }

  export interface ArcGISImageServiceGetSamplesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#getSamples)
     */
    signal?: AbortSignal;
  }

  export interface ArcGISImageServiceIdentifyOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#identify)
     */
    signal?: AbortSignal;
  }

  export interface ArcGISImageServiceQueryRastersOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISImageService.html#queryRasters)
     */
    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)
     */
    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)
     */
    legendEnabled?: boolean;
  }

  export interface ArcGISMapServiceCapabilities extends Object {
    /**
     * Indicates options supported by the exportMap operation.
     *
     * [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.
     *
     * [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 support Arcade expressions for labeling.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#capabilities)
     */
    supportsArcadeExpressionForLabeling: 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 can be added, or removed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ArcGISMapService.html#capabilities)
     */
    supportsSublayersChanges: 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;
    /**
     * 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;
  }

  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 BlendLayer {
    /**
     * Blend modes are used to blend layers together to create an interesting effect in a layer, or even to produce what seems like a new layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-BlendLayer.html#blendMode)
     */
    blendMode:
      | "average"
      | "color-burn"
      | "color-dodge"
      | "color"
      | "darken"
      | "destination-atop"
      | "destination-in"
      | "destination-out"
      | "destination-over"
      | "difference"
      | "exclusion"
      | "hard-light"
      | "hue"
      | "invert"
      | "lighten"
      | "lighter"
      | "luminosity"
      | "minus"
      | "multiply"
      | "normal"
      | "overlay"
      | "plus"
      | "reflect"
      | "saturation"
      | "screen"
      | "soft-light"
      | "source-atop"
      | "source-in"
      | "source-out"
      | "vivid-light"
      | "xor";
    /**
     * Effect provides various filter functions that can be performed on the layer to achieve different visual effects similar to how image filters work.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-BlendLayer.html#effect)
     */
    effect: Effect;
  }

  interface BlendLayerConstructor {
    new (): BlendLayer;
  }

  export const BlendLayer: BlendLayerConstructor;

  interface BlendLayerProperties {
    /**
     * Blend modes are used to blend layers together to create an interesting effect in a layer, or even to produce what seems like a new layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-BlendLayer.html#blendMode)
     */
    blendMode?:
      | "average"
      | "color-burn"
      | "color-dodge"
      | "color"
      | "darken"
      | "destination-atop"
      | "destination-in"
      | "destination-out"
      | "destination-over"
      | "difference"
      | "exclusion"
      | "hard-light"
      | "hue"
      | "invert"
      | "lighten"
      | "lighter"
      | "luminosity"
      | "minus"
      | "multiply"
      | "normal"
      | "overlay"
      | "plus"
      | "reflect"
      | "saturation"
      | "screen"
      | "soft-light"
      | "source-atop"
      | "source-in"
      | "source-out"
      | "vivid-light"
      | "xor";
    /**
     * Effect provides various filter functions that can be performed on the layer to achieve different visual effects similar to how image filters work.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-BlendLayer.html#effect)
     */
    effect?: any[] | string;
  }

  interface CustomParametersMixin {
    /**
     * A list of custom parameters appended to the URL of all resources fetched by the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-CustomParametersMixin.html#customParameters)
     */
    customParameters: any;
  }

  interface CustomParametersMixinConstructor {
    new (): CustomParametersMixin;
  }

  export const CustomParametersMixin: CustomParametersMixinConstructor;

  interface CustomParametersMixinProperties {
    /**
     * A list of custom parameters appended to the URL of all resources fetched by the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-CustomParametersMixin.html#customParameters)
     */
    customParameters?: any;
  }

  interface ImageryTileMixin {
    /**
     * Defines a band combination using 0-based band indexes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ImageryTileMixin.html#bandIds)
     */
    bandIds: number[];
    /**
     * The copyright text as defined by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ImageryTileMixin.html#copyright)
     */
    copyright: string;
    /**
     * Raster information retrieved from data source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ImageryTileMixin.html#rasterInfo)
     */
    rasterInfo: RasterInfo;
    /**
     * The renderer assigned to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ImageryTileMixin.html#renderer)
     */
    renderer:
      | ClassBreaksRenderer
      | UniqueValueRenderer
      | RasterStretchRenderer
      | RasterShadedReliefRenderer
      | RasterColormapRenderer;
    /**
     * The URL of the REST endpoint of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ImageryTileMixin.html#url)
     */
    url: string;

    /**
     * Fetches pixels for a given extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ImageryTileMixin.html#fetchPixels)
     */
    fetchPixels(
      extent: Extent,
      width: number,
      height: number,
      options?: ImageryTileMixinFetchPixelsOptions
    ): Promise<any>;
    /**
     * 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-mixins-ImageryTileMixin.html#fetchTile)
     */
    fetchTile(level: number, row: number, col: number, options?: any): Promise<any>;
    /**
     * Identify pixel values at a given location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ImageryTileMixin.html#identify)
     */
    identify(point: Point, options?: RasterIdentifyOptions): Promise<any>;
  }

  interface ImageryTileMixinConstructor {
    new (): ImageryTileMixin;
  }

  export const ImageryTileMixin: ImageryTileMixinConstructor;

  interface ImageryTileMixinProperties {
    /**
     * Defines a band combination using 0-based band indexes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ImageryTileMixin.html#bandIds)
     */
    bandIds?: number[];
    /**
     * The copyright text as defined by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ImageryTileMixin.html#copyright)
     */
    copyright?: string;
    /**
     * Raster information retrieved from data source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ImageryTileMixin.html#rasterInfo)
     */
    rasterInfo?: RasterInfoProperties;
    /**
     * The renderer assigned to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ImageryTileMixin.html#renderer)
     */
    renderer?:
      | (ClassBreaksRendererProperties & { type: "class-breaks" })
      | (UniqueValueRendererProperties & { type: "unique-value" })
      | (RasterStretchRendererProperties & { type: "raster-stretch" })
      | (RasterShadedReliefRendererProperties & { type: "raster-shaded-relief" })
      | (RasterColormapRendererProperties & { type: "raster-colormap" });
    /**
     * The URL of the REST endpoint of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ImageryTileMixin.html#url)
     */
    url?: string;
  }

  export interface ImageryTileMixinFetchPixelsOptions extends Object {
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ImageryTileMixin.html#fetchPixels)
     */
    signal?: AbortSignal;
  }

  interface PortalLayer {
    /**
     * The portal item from which the layer is loaded.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-RefreshableLayer.html#refreshInterval)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-RefreshableLayer.html#refreshInterval)
     */
    refreshInterval?: number;
  }

  interface ScaleRangeLayer {
    /**
     * The maximum scale (most zoomed in) at which the layer is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ScaleRangeLayer.html#maxScale)
     */
    maxScale: number;
    /**
     * The minimum scale (most zoomed out) at which the layer is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ScaleRangeLayer.html#minScale)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ScaleRangeLayer.html#maxScale)
     */
    maxScale?: number;
    /**
     * The minimum scale (most zoomed out) at which the layer is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-ScaleRangeLayer.html#minScale)
     */
    minScale?: number;
  }

  interface SceneService {
    /**
     * An authorization string used to access a resource or service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#apiKey)
     */
    apiKey: string;
    /**
     * 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.
     *
     * [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.
     *
     * [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 {
    /**
     * An authorization string used to access a resource or service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SceneService.html#apiKey)
     */
    apiKey?: string;
    /**
     * 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.
     *
     * [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.
     *
     * [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 as defined by the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SublayersOwner.html#createServiceSublayers)
     */
    createServiceSublayers(): Collection<any>;
    /**
     * Returns the sublayer with the given layerId.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-SublayersOwner.html#findSublayerById)
     */
    findSublayerById(id: number): any;
  }

  interface SublayersOwnerConstructor {
    new (): SublayersOwner;
  }

  export const SublayersOwner: SublayersOwnerConstructor;

  interface TemporalLayer {
    /**
     * The layer's time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-TemporalLayer.html#timeExtent)
     */
    timeExtent: TimeExtent;
    /**
     * TimeInfo 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) time for each feature and the [fullTimeExtent](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#fullTimeExtent) for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-TemporalLayer.html#timeInfo)
     */
    timeInfo: TimeInfo;
    /**
     * A temporary offset of the time data based on a certain [TimeInterval](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeInterval.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-TemporalLayer.html#timeOffset)
     */
    timeOffset: TimeInterval;
    /**
     * Determines if the layer will update its temporal data based on the view's [timeExtent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#timeExtent).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-TemporalLayer.html#useViewTime)
     */
    useViewTime: boolean;
  }

  interface TemporalLayerConstructor {
    new (): TemporalLayer;
  }

  export const TemporalLayer: TemporalLayerConstructor;

  interface TemporalLayerProperties {
    /**
     * The layer's time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-TemporalLayer.html#timeExtent)
     */
    timeExtent?: TimeExtentProperties;
    /**
     * TimeInfo 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) time for each feature and the [fullTimeExtent](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#fullTimeExtent) for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-TemporalLayer.html#timeInfo)
     */
    timeInfo?: TimeInfoProperties;
    /**
     * A temporary offset of the time data based on a certain [TimeInterval](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeInterval.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-TemporalLayer.html#timeOffset)
     */
    timeOffset?: TimeIntervalProperties;
    /**
     * Determines if the layer will update its temporal data based on the view's [timeExtent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#timeExtent).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-TemporalLayer.html#useViewTime)
     */
    useViewTime?: boolean;
  }

  /**
   * Provides utility functions for the [WFSLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html)
   */
  interface wfsUtils {
    /**
     * Fetches the GetCapabilities document of a WFS service which contains information about the list of layers in the service and the available operations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#getCapabilities)
     */
    getCapabilities(url: string, options?: wfsUtilsGetCapabilitiesOptions): Promise<WFSCapabilities>;
    /**
     * Returns the [WFSLayerInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSLayerInfo) from the capabilities of the WFS service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#getWFSLayerInfo)
     */
    getWFSLayerInfo(
      capabilities: WFSCapabilities,
      name?: string,
      namespaceUri?: string,
      options?: wfsUtilsGetWFSLayerInfoOptions
    ): Promise<WFSLayerInfo>;
  }

  export const wfsUtils: wfsUtils;

  /**
   * WFS service information about the available layers and operations.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSCapabilities)
   */
  export interface WFSCapabilities extends Object {
    /**
     * Information about the operations needed to consume the WFS service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSCapabilities)
     */
    operations: WFSOperations;
    /**
     * An array of featureTypes (or layers) available in the WFS service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSCapabilities)
     */
    featureTypes: WFSFeatureType[];
  }

  /**
   * Provides information about an individual feature type, or layer, found in the WFS service.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSFeatureType)
   */
  export interface WFSFeatureType extends Object {
    /**
     * The type name of the featureType.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSFeatureType)
     */
    typeName: string;
    /**
     * The name of the featureType.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSFeatureType)
     */
    name: string;
    /**
     * The title of the featureType.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSFeatureType)
     */
    title: string;
    /**
     * The description of the featureType.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSFeatureType)
     */
    description: string;
    /**
     * The extent of the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSFeatureType)
     */
    extent: Extent;
    /**
     * The prefix of the namespace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSFeatureType)
     */
    namespacePrefix: string;
    /**
     * The namespaceUri of the featureType.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSFeatureType)
     */
    namespaceUri: string;
    /**
     * An array of spatialReference wkids that are supported on the featureType.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSFeatureType)
     */
    supportedSpatialReferences: number[];
  }

  /**
   * The layer info from the WFS service.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSLayerInfo)
   */
  export interface WFSLayerInfo extends Object {
    /**
     * The URL to the WFS service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSLayerInfo)
     */
    url: string;
    /**
     * The name of the layer in the WFS service to display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSLayerInfo)
     */
    name: string;
    /**
     * The namespace URI for the layer name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSLayerInfo)
     */
    namespaceUri: string;
    /**
     * The fields on the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSLayerInfo)
     */
    fields: Field[];
    /**
     * The geometry type of the features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSLayerInfo)
     */
    geometryType: "point" | "multipoint" | "polyline" | "polygon";
    /**
     * The field containing the object ID.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSLayerInfo)
     */
    objectIdField: string;
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSLayerInfo)
     */
    spatialReference: SpatialReference;
    /**
     * The extent of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSLayerInfo)
     */
    extent: Extent;
    /**
     * Determines whether the X and Y coordinates should be swapped.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSLayerInfo)
     */
    swapXY: boolean | any;

    wfsCapabilities: WFSCapabilities;
    /**
     * The custom parameters applied to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSLayerInfo)
     */
    customParameters: any;
  }

  /**
   * Information about some operations of the WFS service.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSOperations)
   */
  export interface WFSOperations extends Object {
    GetCapabilities: WFSOperationsGetCapabilities;

    DescribeFeatureType: WFSOperationsDescribeFeatureType;

    GetFeature: WFSOperationsGetFeature;
  }

  export interface wfsUtilsGetCapabilitiesOptions extends Object {
    /**
     * A list of key-value pairs of parameters to append to the url.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#getCapabilities)
     */
    customParameters?: any;
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the executions of the remote method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#getCapabilities)
     */
    signal?: AbortSignal;
  }

  export interface wfsUtilsGetWFSLayerInfoOptions extends Object {
    /**
     * A list of key-value pairs of parameters to append to the url.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#getWFSLayerInfo)
     */
    customParameters?: any;
    /**
     * The desired spatial reference for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#getWFSLayerInfo)
     */
    spatialReference?: any;
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the executions of the remote method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#getWFSLayerInfo)
     */
    signal?: AbortSignal;
  }

  export interface WFSOperationsDescribeFeatureType extends Object {
    /**
     * The URL to the DescribeFeatureType endpoint.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSOperations)
     */
    url: string;
  }

  export interface WFSOperationsGetCapabilities extends Object {
    /**
     * The URL to the GetCapabilities endpoint.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSOperations)
     */
    url: string;
  }

  export interface WFSOperationsGetFeature extends Object {
    /**
     * The URL to the GetFeature endpoint.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSOperations)
     */
    url: string;
    /**
     * Value of the output format parameter to send with the GetFeature call.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSOperations)
     */
    outputFormat: string;
    /**
     * Indicates if the GetFeature request supports pagination.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#WFSOperations)
     */
    supportsPagination: boolean;
  }

  interface OGCFeatureLayer
    extends Layer,
      APIKeyMixin,
      BlendLayer,
      CustomParametersMixin,
      PortalLayer,
      RefreshableLayer,
      ScaleRangeLayer {
    /**
     * The unique identifier of the collection on the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#collectionId)
     */
    collectionId: string;
    /**
     * Copyright information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#copyright)
     */
    copyright: string;
    /**
     * Description of the features in the collection.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#description)
     */
    readonly description: string;
    /**
     * The name of the layer's primary display field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#displayField)
     */
    displayField: string;
    /**
     * Specifies how graphics are placed on the vertical axis (z).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#elevationInfo)
     */
    elevationInfo: OGCFeatureLayerElevationInfo;
    /**
     * Configures the method for reducing the number of point features in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#featureReduction)
     */
    featureReduction: FeatureReductionCluster | FeatureReductionSelection;
    /**
     * An array of fields in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#fields)
     */
    fields: Field[];
    /**
     * A convenient property that can be used to make case-insensitive lookups for a field by name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#fieldsIndex)
     */
    readonly fieldsIndex: FieldsIndex;
    /**
     * The geometry type of features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#geometryType)
     */
    geometryType: "point" | "polygon" | "polyline" | "multipoint";
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#labelingInfo)
     */
    labelingInfo: LabelClass[];
    /**
     * Indicates whether to display labels for this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#labelsVisible)
     */
    labelsVisible: boolean;
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#legendEnabled)
     */
    legendEnabled: boolean;
    /**
     * The OGCFeatureLayer requires that each feature be uniquely identified with an object id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#objectIdField)
     */
    objectIdField: 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-OGCFeatureLayer.html#popupEnabled)
     */
    popupEnabled: boolean;
    /**
     * The popup template for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * The renderer assigned to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#renderer)
     */
    renderer: Renderer;
    /**
     * The spatial reference the source data is stored in.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#spatialReference)
     */
    readonly spatialReference: SpatialReference;

    readonly type: "ogc-feature";
    /**
     * The URL to the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.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-OGCFeatureLayer.html#createPopupTemplate)
     */
    createPopupTemplate(options?: CreatePopupTemplateOptions): 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-OGCFeatureLayer.html#getField)
     */
    getField(fieldName: string): Field;

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

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

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

  interface OGCFeatureLayerConstructor {
    /**
     * The OGCFeatureLayer class is used to create a layer based on individual collections from a [OGC API Features](https://www.opengeospatial.org/standards/ogcapi-features) service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html)
     */

    new (properties?: OGCFeatureLayerProperties): OGCFeatureLayer;

    fromJSON(json: any): OGCFeatureLayer;
  }

  export const OGCFeatureLayer: OGCFeatureLayerConstructor;

  interface OGCFeatureLayerProperties
    extends LayerProperties,
      APIKeyMixinProperties,
      BlendLayerProperties,
      CustomParametersMixinProperties,
      PortalLayerProperties,
      RefreshableLayerProperties,
      ScaleRangeLayerProperties {
    /**
     * The unique identifier of the collection on the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#collectionId)
     */
    collectionId?: string;
    /**
     * Copyright information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#copyright)
     */
    copyright?: string;
    /**
     * The name of the layer's primary display field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#displayField)
     */
    displayField?: string;
    /**
     * Specifies how graphics are placed on the vertical axis (z).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#elevationInfo)
     */
    elevationInfo?: OGCFeatureLayerElevationInfo;
    /**
     * Configures the method for reducing the number of point features in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#featureReduction)
     */
    featureReduction?:
      | (FeatureReductionClusterProperties & { type: "cluster" })
      | (FeatureReductionSelectionProperties & { type: "selection" });
    /**
     * An array of fields in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#fields)
     */
    fields?: FieldProperties[];
    /**
     * The geometry type of features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#geometryType)
     */
    geometryType?: "point" | "polygon" | "polyline" | "multipoint";
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#labelingInfo)
     */
    labelingInfo?: LabelClassProperties[];
    /**
     * Indicates whether to display labels for this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#labelsVisible)
     */
    labelsVisible?: boolean;
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#legendEnabled)
     */
    legendEnabled?: boolean;
    /**
     * The OGCFeatureLayer requires that each feature be uniquely identified with an object id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#objectIdField)
     */
    objectIdField?: 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-OGCFeatureLayer.html#popupEnabled)
     */
    popupEnabled?: boolean;
    /**
     * The popup template for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * The renderer assigned to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#renderer)
     */
    renderer?: RendererProperties;
    /**
     * The URL to the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#url)
     */
    url?: string;
  }

  export interface OGCFeatureLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface OGCFeatureLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface OGCFeatureLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  export interface OGCFeatureLayerElevationInfo extends Object {
    /**
     * Defines how the graphic is placed with respect to the terrain surface.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#elevationInfo)
     */
    mode: "on-the-ground" | "relative-to-ground" | "absolute-height" | "relative-to-scene";
    /**
     * An elevation offset, which is added to the vertical position of the graphic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.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-OGCFeatureLayer.html#elevationInfo)
     */
    featureExpressionInfo?: OGCFeatureLayerElevationInfoFeatureExpressionInfo;
    /**
     * The unit for `featureExpressionInfo` and `offset` values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#elevationInfo)
     */
    unit?: "feet" | "meters" | "kilometers" | "miles" | "us-feet" | "yards";
  }

  export interface OGCFeatureLayerElevationInfoFeatureExpressionInfo extends Object {
    /**
     * An [Arcade expression](https://developers.arcgis.com/javascript/latest/arcade/) evaluating to a number that determines the z-value of the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#elevationInfo)
     */
    expression?: string;
  }

  interface OpenStreetMapLayer extends WebTileLayer {
    readonly type: "open-street-map";

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

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

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

  interface OpenStreetMapLayerConstructor {
    /**
     * Allows you to use [basemaps](http://wiki.openstreetmap.org/wiki/List_of_OSM-based_services) from [OpenStreetMap](http://www.openstreetmap.org/).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OpenStreetMapLayer.html)
     */

    new (properties?: OpenStreetMapLayerProperties): OpenStreetMapLayer;

    fromJSON(json: any): 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudFilter.html#type)
     */
    readonly type: "value" | "bitfield" | "return";
  }

  interface PointCloudFilterConstructor {
    /**
     * Point cloud filters are used to hide points that do not satisfy the filter criteria.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudFilter.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudReturnFilter.html#includedReturns)
     */
    includedReturns: ("firstOfMany" | "last" | "lastOfMany" | "single")[];

    readonly type: "return";
  }

  interface PointCloudReturnFilterConstructor {
    /**
     * Laser pulses emitted from a lidar system can have several returns depending on the surfaces that they encounter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudReturnFilter.html)
     */

    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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudValueFilter.html#mode)
     */
    mode: "include" | "exclude";

    readonly type: "value";
    /**
     * An array of numeric values representing the classification codes that the filter should apply.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudValueFilter.html#values)
     */
    values: number[];
  }

  interface PointCloudValueFilterConstructor {
    /**
     * Every lidar point can have a classification that defines the type of surface that reflected the laser pulse.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudValueFilter.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudValueFilter.html#mode)
     */
    mode?: "include" | "exclude";
    /**
     * An array of numeric values representing the classification codes that 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).
     *
     * [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[];
    /**
     * A convenient property that can be used to make case-insensitive lookups for a field by name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#fieldsIndex)
     */
    readonly fieldsIndex: FieldsIndex;
    /**
     * An array of [pointCloudFilters](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-pointCloudFilters-PointCloudFilter.html) used to filter points.
     *
     * [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)
     */
    legendEnabled: boolean;
    /**
     * An array of field names from the service to include with each feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#outFields)
     */
    outFields: string[];
    /**
     * Indicates whether to display popups when points in the layer are clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#popupEnabled)
     */
    popupEnabled: boolean;
    /**
     * The popup template for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * The renderer assigned to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#renderer)
     */
    renderer: PointCloudRenderer;

    readonly type: "point-cloud";

    /**
     * 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-PointCloudLayer.html#createPopupTemplate)
     */
    createPopupTemplate(options?: CreatePopupTemplateOptions): PopupTemplate;
    /**
     * Returns the [Domain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Domain.html) associated with the given field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#getFieldDomain)
     */
    getFieldDomain(fieldName: string): Domain;
    /**
     * Queries cached statistics from the service for a given field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#queryCachedStatistics)
     */
    queryCachedStatistics(fieldName: string, options?: PointCloudLayerQueryCachedStatisticsOptions): any;

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

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

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

  interface PointCloudLayerConstructor {
    /**
     * The PointCloudLayer is designed for visualizing large collections of points in 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-layers-PointCloudLayer.html)
     */

    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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#filters)
     */
    filters?: (
      | (PointCloudValueFilterProperties & { type: "value" })
      | (PointCloudReturnFilterProperties & { type: "return" })
    )[];
    /**
     * 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)
     */
    legendEnabled?: boolean;
    /**
     * An array of field names from the service to include with each feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#outFields)
     */
    outFields?: string[];
    /**
     * Indicates whether to display popups when points in the layer are clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#popupEnabled)
     */
    popupEnabled?: boolean;
    /**
     * The popup template for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * The renderer assigned to 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).
     *
     * [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)
     */
    offset?: number;
    /**
     * The unit for `offset` values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#elevationInfo)
     */
    unit?: "feet" | "meters" | "kilometers" | "miles" | "us-feet" | "yards";
  }

  export interface PointCloudLayerQueryCachedStatisticsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html#queryCachedStatistics)
     */
    signal?: AbortSignal;
  }

  interface SceneLayer extends Layer, SceneService, PortalLayer, ScaleRangeLayer {
    /**
     * Describes the layer's supported capabilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    readonly capabilities: SceneLayerCapabilities;
    /**
     * The SQL where clause used to filter features.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#elevationInfo)
     */
    elevationInfo: SceneLayerElevationInfo;
    /**
     * Configures the method for decluttering overlapping features in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#featureReduction)
     */
    featureReduction: FeatureReductionSelection;
    /**
     * An array of fields accessible in the layer.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#fieldsIndex)
     */
    readonly fieldsIndex: FieldsIndex;
    /**
     * When a scene layer is configured as floor-aware, it has a floorInfo property defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#floorInfo)
     */
    floorInfo: LayerFloorInfo;
    /**
     * The geometry type of features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#geometryType)
     */
    geometryType: "point" | "mesh";
    /**
     * 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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#labelsVisible)
     */
    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)
     */
    legendEnabled: boolean;
    /**
     * The name of the field containing each graphic's Object ID.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#outFields)
     */
    outFields: 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-SceneLayer.html#popupEnabled)
     */
    popupEnabled: boolean;
    /**
     * The popup template for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * The renderer assigned to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#renderer)
     */
    renderer: Renderer;
    /**
     * Apply perspective scaling to screen-size point symbols in 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-layers-SceneLayer.html#screenSizePerspectiveEnabled)
     */
    screenSizePerspectiveEnabled: boolean;

    readonly type: "scene";

    /**
     * Apply overrides for the `popupTemplate` and `popupEnabled` properties from the associated feature service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#_applyAssociatedLayerPopupOverrides)
     */
    _applyAssociatedLayerPopupOverrides(): void;
    /**
     * Applies attribute edits to the features in the associated [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-SceneLayer.html#applyEdits)
     */
    applyEdits(edits: SceneLayerApplyEditsEdits, options?: SceneLayerApplyEditsOptions): Promise<any>;
    /**
     * 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)
     */
    createPopupTemplate(options?: CreatePopupTemplateOptions): PopupTemplate;
    /**
     * Creates a query object that can be used to fetch features that satisfy the layer's current definition expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#createQuery)
     */
    createQuery(): supportQuery;
    /**
     * 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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#getFieldDomain)
     */
    getFieldDomain(fieldName: string): Domain;
    /**
     * Gets field usage information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#getFieldUsageInfo)
     */
    getFieldUsageInfo(fieldName: string): any;
    /**
     * Queries cached statistics from the service for a given field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#queryCachedStatistics)
     */
    queryCachedStatistics(fieldName: string, options?: SceneLayerQueryCachedStatisticsOptions): any;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the associated feature service and returns the 2D [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of features that satisfy the query.
     *
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the associated feature 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 SceneLayer has an associated feature layer. If an associated feature layer is not available, then an error with 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)
     */
    queryExtent(query?: supportQuery | supportQueryProperties, options?: SceneLayerQueryExtentOptions): Promise<any>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the associated feature service and returns the number of features that satisfy the query.
     *
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the associated feature service and returns the number of features that satisfy the query. 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 error with 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)
     */
    queryFeatureCount(
      query?: supportQuery | supportQueryProperties,
      options?: SceneLayerQueryFeatureCountOptions
    ): Promise<number>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the associated feature service and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html).
     *
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the associated feature service and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html). 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 error with 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)
     */
    queryFeatures(
      query?: supportQuery | supportQueryProperties,
      options?: SceneLayerQueryFeaturesOptions
    ): Promise<supportFeatureSet>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the associated feature service and returns an array of ObjectIDs of the features that satisfy the input query.
     *
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the associated feature service and returns an array of ObjectIDs of the features that satisfy the input query. 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 error with 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)
     */
    queryObjectIds(
      query?: supportQuery | supportQueryProperties,
      options?: SceneLayerQueryObjectIdsOptions
    ): Promise<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 {
    /**
     * The SceneLayer is a layer type designed for on-demand streaming and displaying large amounts of data in 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-layers-SceneLayer.html)
     */

    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.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#elevationInfo)
     */
    elevationInfo?: SceneLayerElevationInfo;
    /**
     * Configures the method for decluttering overlapping features in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#featureReduction)
     */
    featureReduction?: FeatureReductionSelectionProperties;
    /**
     * When a scene layer is configured as floor-aware, it has a floorInfo property defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#floorInfo)
     */
    floorInfo?: LayerFloorInfoProperties;
    /**
     * The geometry type of features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#geometryType)
     */
    geometryType?: "point" | "mesh";
    /**
     * 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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#labelsVisible)
     */
    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)
     */
    legendEnabled?: boolean;
    /**
     * The name of the field containing each graphic's Object ID.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#outFields)
     */
    outFields?: 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-SceneLayer.html#popupEnabled)
     */
    popupEnabled?: boolean;
    /**
     * The popup template for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * The renderer assigned to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#renderer)
     */
    renderer?: RendererProperties;
    /**
     * Apply perspective scaling to screen-size point symbols in 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-layers-SceneLayer.html#screenSizePerspectiveEnabled)
     */
    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 SceneLayerApplyEditsEdits extends Object {
    /**
     * An array or a [collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of features to be updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#applyEdits)
     */
    updateFeatures?: Graphic[] | Collection<Graphic>;
  }

  export interface SceneLayerApplyEditsOptions extends Object {
    /**
     * Indicates whether the edits should be applied only if all submitted edits succeed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#applyEdits)
     */
    rollbackOnFailureEnabled?: boolean;
    /**
     * Indicates whether the edits can be applied using globalIds of features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#applyEdits)
     */
    globalIdUsed?: boolean;
  }

  export interface SceneLayerCapabilities extends Object {
    /**
     * Describes [query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-SceneLayer.html#capabilities)
     */
    query: SceneLayerCapabilitiesQuery;
    /**
     * Describes characteristics of the data in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    data: SceneLayerCapabilitiesData;
    /**
     * Describes editing capabilities that can be performed on the features in the layer via [applyEdits()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#applyEdits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    editing: SceneLayerCapabilitiesEditing;
    /**
     * Describes operations that can be performed on features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    operations: SceneLayerCapabilitiesOperations;
  }

  export interface SceneLayerCapabilitiesData extends Object {
    /**
     * Indicates if the features in the layer support z-values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsZ: boolean;
  }

  export interface SceneLayerCapabilitiesEditing extends Object {
    /**
     * 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-SceneLayer.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-SceneLayer.html#applyEdits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsGlobalId: boolean;
    /**
     * Indicates if the `rollbackOnFailureEnabled` parameter can be set to `true` or `false` when editing features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsRollbackOnFailure: boolean;
  }

  export interface SceneLayerCapabilitiesOperations extends Object {
    /**
     * Indicates if new features can be [added](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#applyEdits) to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsAdd: boolean;
    /**
     * Indicates if features can be [deleted](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#applyEdits) from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsDelete: boolean;
    /**
     * Indicates if features in the layer can be [updated](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#applyEdits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsUpdate: boolean;
    /**
     * Indicates if features in the layer can be [edited](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#applyEdits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsEditing: boolean;
  }

  export interface SceneLayerCapabilitiesQuery extends Object {
    /**
     * The maximum number of records that will be returned for a given query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    maxRecordCount: number;
    /**
     * Indicates if the geometry centroid associated with each polygon feature can be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.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-SceneLayer.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-SceneLayer.html#outFields).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsDistinct: boolean;
    /**
     * Indicates if the query operation supports `disjoint` [spatial relationship](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#spatialRelationship).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsDisjointSpatialRelationship: boolean;
    /**
     * Indicates if the query operation supports a [cache hint](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#cacheHint).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsCacheHint: boolean;
    /**
     * Indicates if the layer's query response includes the extent of features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsExtent: boolean;
    /**
     * Indicates if the layer's query response contains geometry attributes, including shape area and length attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsGeometryProperties: boolean;
    /**
     * Indicates if the layer supports the [having](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#having) clause on the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsHavingClause: boolean;
    /**
     * Indicates if features returned in the query response can be ordered by one or more fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsOrderBy: boolean;
    /**
     * Indicates if the query response supports pagination.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsPagination: boolean;
    /**
     * Indicates if the layer supports [percentile statisticType](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-StatisticDefinition.html#statisticType).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsPercentileStatistics: boolean;
    /**
     * Indicates if the query response includes the [query geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html#queryGeometry).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsQueryGeometry: boolean;
    /**
     * Indicates if the query operation supports the projection of geometries onto a virtual grid.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.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-SceneLayer.html#capabilities)
     */
    supportsResultType: boolean;
    /**
     * Indicates if the query operation supports SQL expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsSqlExpression: boolean;
    /**
     * Indicates if the query operation supports using standardized queries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsStandardizedQueriesOnly: boolean;
    /**
     * Indicates if the layer supports field-based statistical functions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsStatistics: boolean;
    /**
     * Indicates if the layer supports historic moment query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#capabilities)
     */
    supportsHistoricMoment: boolean;
  }

  export interface SceneLayerElevationInfo extends Object {
    /**
     * Defines how the graphic is placed with respect to the terrain surface.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#elevationInfo)
     */
    mode: "on-the-ground" | "relative-to-ground" | "absolute-height" | "relative-to-scene";
    /**
     * An elevation offset which is added to the vertical position of the graphic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#elevationInfo)
     */
    offset?: number;
    /**
     * The unit for `offset` values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#elevationInfo)
     */
    unit?: "feet" | "meters" | "kilometers" | "miles" | "us-feet" | "yards";
  }

  export interface SceneLayerQueryCachedStatisticsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#queryCachedStatistics)
     */
    signal?: AbortSignal;
  }

  export interface SceneLayerQueryExtentOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#queryObjectIds)
     */
    signal?: AbortSignal;
  }

  interface SliceLayer extends Layer {
    /**
     * Geometry defining the slice plane.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SliceLayer.html#plane)
     */
    plane: SlicePlane;
    /**
     * Enable tilting the slice shape.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SliceLayer.html#tiltEnabled)
     */
    tiltEnabled: boolean;

    readonly type: "slice";

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

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

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

  interface SliceLayerConstructor {
    /**
     * The SliceLayer creates a slice in the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SliceLayer.html)
     */

    new (properties?: SliceLayerProperties): SliceLayer;
  }

  export const SliceLayer: SliceLayerConstructor;

  interface SliceLayerProperties extends LayerProperties {
    /**
     * Geometry defining the slice plane.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SliceLayer.html#plane)
     */
    plane?: SlicePlaneProperties;
    /**
     * Enable tilting the slice shape.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SliceLayer.html#tiltEnabled)
     */
    tiltEnabled?: boolean;
  }

  export interface SliceLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface SliceLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface SliceLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface StreamLayer extends Layer, ScaleRangeLayer, TemporalLayer, BlendLayer {
    /**
     * Copyright information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#copyright)
     */
    copyright: string;
    /**
     * The SQL where clause used to filter features based on their attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#definitionExpression)
     */
    definitionExpression: string;
    /**
     * The name of the layer's primary display field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#displayField)
     */
    displayField: string;
    /**
     * Specifies how graphics are placed on the vertical axis (z).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#elevationInfo)
     */
    elevationInfo: StreamLayerElevationInfo;
    /**
     * Configures the method for reducing the number of point features in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#featureReduction)
     */
    featureReduction: FeatureReductionSelection;
    /**
     * An array of fields in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#fields)
     */
    fields: Field[];
    /**
     * A convenient property that can be used to make case-insensitive lookups for a field by name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#fieldsIndex)
     */
    readonly fieldsIndex: FieldsIndex;
    /**
     * An [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) object used to filter features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#geometryDefinition)
     */
    geometryDefinition: Extent;
    /**
     * The geometry type of features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#geometryType)
     */
    geometryType: "point" | "polygon" | "polyline" | "multipoint";
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#labelingInfo)
     */
    labelingInfo: LabelClass[];
    /**
     * Indicates whether to display labels for this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#labelsVisible)
     */
    labelsVisible: boolean;
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#legendEnabled)
     */
    legendEnabled: boolean;
    /**
     * The maximum number of attempts to reconnect.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#maxReconnectionAttempts)
     */
    maxReconnectionAttempts: number;
    /**
     * The maximum time to wait in seconds between attempts to reconnect.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#maxReconnectionInterval)
     */
    maxReconnectionInterval: number;
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#fields) containing a unique value or identifier for each feature in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#objectIdField)
     */
    objectIdField: 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-StreamLayer.html#popupEnabled)
     */
    popupEnabled: boolean;
    /**
     * The popup template for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * Options for purging stale features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#purgeOptions)
     */
    purgeOptions: StreamLayerPurgeOptions;
    /**
     * The renderer assigned to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#renderer)
     */
    renderer: Renderer;
    /**
     * Apply perspective scaling to screen-size point symbols in 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-layers-StreamLayer.html#screenSizePerspectiveEnabled)
     */
    screenSizePerspectiveEnabled: boolean;
    /**
     * The [stream service's metadata JSON](https://developers.arcgis.com/rest/services-reference/stream-service.htm) exposed by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#sourceJSON)
     */
    sourceJSON: any;
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#spatialReference)
     */
    spatialReference: SpatialReference;
    /**
     * For [StreamLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html) the type is `stream`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#type)
     */
    readonly type: "stream";
    /**
     * The minimum rate (ms) at which to poll for updates over the websocket connection.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#updateInterval)
     */
    updateInterval: number;
    /**
     * The URL of the stream service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#url)
     */
    url: string;
    /**
     * The URL of a websocket connection.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#webSocketUrl)
     */
    webSocketUrl: 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-StreamLayer.html#createPopupTemplate)
     */
    createPopupTemplate(options?: CreatePopupTemplateOptions): 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-StreamLayer.html#getField)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#getFieldDomain)
     */
    getFieldDomain(fieldName: string, options?: StreamLayerGetFieldDomainOptions): Domain;

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

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

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

  interface StreamLayerConstructor {
    /**
     * StreamLayer connects to a [stream service](https://enterprise.arcgis.com/en/geoevent) or a [custom WebSocket service](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#streamlayer-from-websocket), displaying the observation streams associated with a set of [tracked objects](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#track-aware) in real-time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html)
     */

    new (properties?: StreamLayerProperties): StreamLayer;
  }

  export const StreamLayer: StreamLayerConstructor;

  interface StreamLayerProperties
    extends LayerProperties,
      ScaleRangeLayerProperties,
      TemporalLayerProperties,
      BlendLayerProperties {
    /**
     * Copyright information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#copyright)
     */
    copyright?: string;
    /**
     * The SQL where clause used to filter features based on their attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#definitionExpression)
     */
    definitionExpression?: string;
    /**
     * The name of the layer's primary display field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#displayField)
     */
    displayField?: string;
    /**
     * Specifies how graphics are placed on the vertical axis (z).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#elevationInfo)
     */
    elevationInfo?: StreamLayerElevationInfo;
    /**
     * Configures the method for reducing the number of point features in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#featureReduction)
     */
    featureReduction?: FeatureReductionSelectionProperties;
    /**
     * An array of fields in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#fields)
     */
    fields?: FieldProperties[];
    /**
     * An [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) object used to filter features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#geometryDefinition)
     */
    geometryDefinition?: ExtentProperties;
    /**
     * The geometry type of features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#geometryType)
     */
    geometryType?: "point" | "polygon" | "polyline" | "multipoint";
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#labelingInfo)
     */
    labelingInfo?: LabelClassProperties[];
    /**
     * Indicates whether to display labels for this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#labelsVisible)
     */
    labelsVisible?: boolean;
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#legendEnabled)
     */
    legendEnabled?: boolean;
    /**
     * The maximum number of attempts to reconnect.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#maxReconnectionAttempts)
     */
    maxReconnectionAttempts?: number;
    /**
     * The maximum time to wait in seconds between attempts to reconnect.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#maxReconnectionInterval)
     */
    maxReconnectionInterval?: number;
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#fields) containing a unique value or identifier for each feature in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#objectIdField)
     */
    objectIdField?: 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-StreamLayer.html#popupEnabled)
     */
    popupEnabled?: boolean;
    /**
     * The popup template for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * Options for purging stale features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#purgeOptions)
     */
    purgeOptions?: StreamLayerPurgeOptions;
    /**
     * The renderer assigned to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#renderer)
     */
    renderer?: RendererProperties;
    /**
     * Apply perspective scaling to screen-size point symbols in 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-layers-StreamLayer.html#screenSizePerspectiveEnabled)
     */
    screenSizePerspectiveEnabled?: boolean;
    /**
     * The [stream service's metadata JSON](https://developers.arcgis.com/rest/services-reference/stream-service.htm) exposed by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#sourceJSON)
     */
    sourceJSON?: any;
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#spatialReference)
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * The minimum rate (ms) at which to poll for updates over the websocket connection.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#updateInterval)
     */
    updateInterval?: number;
    /**
     * The URL of the stream service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#url)
     */
    url?: string;
    /**
     * The URL of a websocket connection.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#webSocketUrl)
     */
    webSocketUrl?: string;
  }

  export interface StreamLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface StreamLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface StreamLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  export interface StreamLayerElevationInfo extends Object {
    /**
     * Defines how the feature is placed with respect to the terrain surface or 3D objects in the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#elevationInfo)
     */
    mode: "on-the-ground" | "relative-to-ground" | "absolute-height" | "relative-to-scene";
    /**
     * An elevation offset, which is added to the vertical position of the graphic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.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-StreamLayer.html#elevationInfo)
     */
    featureExpressionInfo?: StreamLayerElevationInfoFeatureExpressionInfo;
    /**
     * The unit for `featureExpressionInfo` and `offset` values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#elevationInfo)
     */
    unit?: "feet" | "meters" | "kilometers" | "miles" | "us-feet" | "yards";
  }

  export interface StreamLayerElevationInfoFeatureExpressionInfo extends Object {
    /**
     * An [Arcade expression](https://developers.arcgis.com/javascript/latest/arcade/) evaluating to a number that determines the z-value of the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#elevationInfo)
     */
    expression?: string;
  }

  export interface StreamLayerGetFieldDomainOptions 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-StreamLayer.html#getFieldDomain)
     */
    feature: Graphic;
  }

  export interface StreamLayerPurgeOptions extends Object {
    /**
     * Specifies the maximum age of a feature in minutes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#purgeOptions)
     */
    age?: number;
    /**
     * Specifies the maximum age of a feature in minutes since it arrived in the application.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#purgeOptions)
     */
    ageReceived?: number;
    /**
     * Controls the overall maximum number of features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#purgeOptions)
     */
    displayCount?: number;
    /**
     * Controls the maximum number of observations to show within a [track](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#purgeOptions)
     */
    maxObservations?: number;
  }

  interface SubtypeGroupLayer
    extends Layer,
      PortalLayer,
      ScaleRangeLayer,
      RefreshableLayer,
      TemporalLayer,
      BlendLayer,
      CustomParametersMixin {
    /**
     * Describes the layer's supported capabilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    readonly capabilities: SubtypeGroupLayerCapabilities;
    /**
     * Copyright information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#copyright)
     */
    copyright: string;
    /**
     * The SQL where clause used to filter features on the client.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#definitionExpression)
     */
    definitionExpression: string;
    /**
     * The name of the layer's primary display field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#displayField)
     */
    displayField: string;
    /**
     * The editor tracking fields, which record who adds or edits the data through the feature service and when edits are made.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#editFieldsInfo)
     */
    readonly editFieldsInfo: SubtypeGroupLayerEditFieldsInfo;
    /**
     * Determines if the layer is editable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#editingEnabled)
     */
    editingEnabled: boolean;
    /**
     * If present, this value specifies information about editing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#editingInfo)
     */
    readonly editingInfo: SubtypeGroupLayerEditingInfo;
    /**
     * Specifies how features are placed on the vertical axis (z).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#elevationInfo)
     */
    elevationInfo: SubtypeGroupLayerElevationInfo;
    /**
     * An array of fields in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#fields)
     */
    fields: Field[];
    /**
     * A convenient property that can be used to make case-insensitive lookups for a field by name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#fieldsIndex)
     */
    readonly fieldsIndex: FieldsIndex;
    /**
     * When a feature layer is configured as floor-aware, it has a floorInfo property defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#floorInfo)
     */
    floorInfo: LayerFloorInfo;
    /**
     * The associated [template](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-FormTemplate.html) used in an associated layer's [FeatureForm](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#formTemplate)
     */
    formTemplate: FormTemplate;
    /**
     * The version of the geodatabase of the feature service data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#gdbVersion)
     */
    gdbVersion: string;
    /**
     * Provides information on the system maintained area and length fields along with their respective units.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#geometryFieldsInfo)
     */
    readonly geometryFieldsInfo: GeometryFieldsInfo;
    /**
     * The geometry type of features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#geometryType)
     */
    geometryType: "point" | "multipoint" | "polyline" | "polygon" | "multipatch" | "mesh";
    /**
     * Indicates whether the client-side features in the layer have `M` (measurement) values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#hasM)
     */
    hasM: boolean;
    /**
     * Indicates whether the client-side features in the layer have `Z` (elevation) values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#hasZ)
     */
    hasZ: boolean;
    /**
     * The historic moment to query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#historicMoment)
     */
    historicMoment: Date;
    /**
     * Returns `true` if the layer is loaded from a non-spatial table in a service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#isTable)
     */
    readonly isTable: boolean;
    /**
     * The layer ID, or layer index, of a Feature Service layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.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-SubtypeGroupLayer.html#legendEnabled)
     */
    legendEnabled: boolean;
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#fields) containing a unique value or identifier for each feature in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#objectIdField)
     */
    objectIdField: string;
    /**
     * An array of field names from the service to include with each feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#outFields)
     */
    outFields: string[];
    /**
     * When `true`, indicates that M values will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#returnM)
     */
    returnM: boolean;
    /**
     * When `true`, indicates that z-values will always be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#returnZ)
     */
    returnZ: boolean;
    /**
     * Apply perspective scaling to screen-size point symbols in 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-layers-SubtypeGroupLayer.html#screenSizePerspectiveEnabled)
     */
    screenSizePerspectiveEnabled: boolean;
    /**
     * The service definition expression limits the features available for display and query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#serviceDefinitionExpression)
     */
    readonly serviceDefinitionExpression: string;
    /**
     * The [feature service's metadata JSON](https://developers.arcgis.com/rest/services-reference/layer-feature-service-.htm) exposed by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#sourceJSON)
     */
    sourceJSON: any;
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#spatialReference)
     */
    spatialReference: SpatialReference;
    /**
     * A [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of [SubtypeSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SubtypeSublayer.html) objects that allow you to alter the properties of one or more sublayers of the SubtypeGroupLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#sublayers)
     */
    sublayers: Collection<SubtypeSublayer>;
    /**
     * The name of the SubtypeGroupLayer's subtype field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#subtypeField)
     */
    subtypeField: string;

    readonly type: "subtype-group";
    /**
     * The name of the field holding the type ID or subtypes for the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#typeIdField)
     */
    typeIdField: string;
    /**
     * The URL of the REST endpoint of the layer, non-spatial table or service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.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-SubtypeGroupLayer.html#version)
     */
    readonly version: number;

    /**
     * Adds an attachment to a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#addAttachment)
     */
    addAttachment(
      feature: Graphic,
      attachment: HTMLFormElement | FormData
    ): Promise<SubtypeGroupLayerFeatureEditResult>;
    /**
     * Applies edits to features in a layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#applyEdits)
     */
    applyEdits(edits: SubtypeGroupLayerApplyEditsEdits, options?: SubtypeGroupLayerApplyEditsOptions): Promise<any>;
    /**
     * Creates query parameter object that can be used to fetch features that satisfy the layer's configurations such as [definitionExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#definitionExpression), [gdbVersion](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#gdbVersion), and [historicMoment](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#historicMoment).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#createQuery)
     */
    createQuery(): supportQuery;
    /**
     * Deletes attachments from a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#deleteAttachments)
     */
    deleteAttachments(feature: Graphic, attachmentIds: number[]): Promise<SubtypeGroupLayerFeatureEditResult>;
    /**
     * 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-SubtypeGroupLayer.html#getField)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#getFieldDomain)
     */
    getFieldDomain(fieldName: string, options?: SubtypeGroupLayerGetFieldDomainOptions): Domain;
    /**
     * Query information about attachments associated with features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#queryAttachments)
     */
    queryAttachments(
      attachmentQuery: supportAttachmentQuery | supportAttachmentQueryProperties,
      options?: SubtypeGroupLayerQueryAttachmentsOptions
    ): Promise<any>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the feature service and returns the [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#queryExtent)
     */
    queryExtent(
      query?: supportQuery | supportQueryProperties,
      options?: SubtypeGroupLayerQueryExtentOptions
    ): Promise<any>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the feature service and returns the number of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#queryFeatureCount)
     */
    queryFeatureCount(
      query?: supportQuery | supportQueryProperties,
      options?: SubtypeGroupLayerQueryFeatureCountOptions
    ): Promise<number>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the feature service and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html), which can be accessed using the `.then()` method once the promise resolves.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#queryFeatures)
     */
    queryFeatures(
      query?: supportQuery | supportQueryProperties,
      options?: SubtypeGroupLayerQueryFeaturesOptions
    ): Promise<supportFeatureSet>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the feature service and returns an array of Object IDs for features that satisfy the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#queryObjectIds)
     */
    queryObjectIds(
      query?: supportQuery | supportQueryProperties,
      options?: SubtypeGroupLayerQueryObjectIdsOptions
    ): Promise<number[]>;
    /**
     * Updates an existing attachment for a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#updateAttachment)
     */
    updateAttachment(
      feature: Graphic,
      attachmentId: number,
      attachment: HTMLFormElement | FormData
    ): Promise<SubtypeGroupLayerFeatureEditResult>;

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

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

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

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

  interface SubtypeGroupLayerConstructor {
    /**
     * The SubtypeGroupLayer is a single layer that automatically creates a [SubtypeSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SubtypeSublayer.html) for each subtype in its corresponding [feature service](http://server.arcgis.com/en/server/latest/publish-services/windows/what-is-a-feature-service-.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html)
     */

    new (properties?: SubtypeGroupLayerProperties): SubtypeGroupLayer;

    fromJSON(json: any): SubtypeGroupLayer;
  }

  export const SubtypeGroupLayer: SubtypeGroupLayerConstructor;

  interface SubtypeGroupLayerProperties
    extends LayerProperties,
      PortalLayerProperties,
      ScaleRangeLayerProperties,
      RefreshableLayerProperties,
      TemporalLayerProperties,
      BlendLayerProperties,
      CustomParametersMixinProperties {
    /**
     * Copyright information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#copyright)
     */
    copyright?: string;
    /**
     * The SQL where clause used to filter features on the client.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#definitionExpression)
     */
    definitionExpression?: string;
    /**
     * The name of the layer's primary display field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#displayField)
     */
    displayField?: string;
    /**
     * Determines if the layer is editable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#editingEnabled)
     */
    editingEnabled?: boolean;
    /**
     * Specifies how features are placed on the vertical axis (z).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#elevationInfo)
     */
    elevationInfo?: SubtypeGroupLayerElevationInfo;
    /**
     * An array of fields in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#fields)
     */
    fields?: FieldProperties[];
    /**
     * When a feature layer is configured as floor-aware, it has a floorInfo property defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#floorInfo)
     */
    floorInfo?: LayerFloorInfoProperties;
    /**
     * The associated [template](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-FormTemplate.html) used in an associated layer's [FeatureForm](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#formTemplate)
     */
    formTemplate?: FormTemplateProperties;
    /**
     * The version of the geodatabase of the feature service data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#gdbVersion)
     */
    gdbVersion?: string;
    /**
     * The geometry type of features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#geometryType)
     */
    geometryType?: "point" | "multipoint" | "polyline" | "polygon" | "multipatch" | "mesh";
    /**
     * Indicates whether the client-side features in the layer have `M` (measurement) values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#hasM)
     */
    hasM?: boolean;
    /**
     * Indicates whether the client-side features in the layer have `Z` (elevation) values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#hasZ)
     */
    hasZ?: boolean;
    /**
     * The historic moment to query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#historicMoment)
     */
    historicMoment?: DateProperties;
    /**
     * The layer ID, or layer index, of a Feature Service layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.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-SubtypeGroupLayer.html#legendEnabled)
     */
    legendEnabled?: boolean;
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#fields) containing a unique value or identifier for each feature in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#objectIdField)
     */
    objectIdField?: string;
    /**
     * An array of field names from the service to include with each feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#outFields)
     */
    outFields?: string[];
    /**
     * When `true`, indicates that M values will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#returnM)
     */
    returnM?: boolean;
    /**
     * When `true`, indicates that z-values will always be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#returnZ)
     */
    returnZ?: boolean;
    /**
     * Apply perspective scaling to screen-size point symbols in 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-layers-SubtypeGroupLayer.html#screenSizePerspectiveEnabled)
     */
    screenSizePerspectiveEnabled?: boolean;
    /**
     * The [feature service's metadata JSON](https://developers.arcgis.com/rest/services-reference/layer-feature-service-.htm) exposed by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#sourceJSON)
     */
    sourceJSON?: any;
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#spatialReference)
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * A [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of [SubtypeSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SubtypeSublayer.html) objects that allow you to alter the properties of one or more sublayers of the SubtypeGroupLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#sublayers)
     */
    sublayers?: CollectionProperties<SubtypeSublayer>;
    /**
     * The name of the SubtypeGroupLayer's subtype field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#subtypeField)
     */
    subtypeField?: string;
    /**
     * The name of the field holding the type ID or subtypes for the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#typeIdField)
     */
    typeIdField?: string;
    /**
     * The URL of the REST endpoint of the layer, non-spatial table or service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#url)
     */
    url?: string;
  }

  /**
   * AttachmentEdit represents an attachment that can be added, updated or deleted via [applyEdits](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#applyEdits).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#AttachmentEdit)
   */
  export interface SubtypeGroupLayerAttachmentEdit extends Object {
    /**
     * The feature, `objectId` or `globalId` of feature associated with the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#AttachmentEdit)
     */
    feature: Graphic | number | string;
    /**
     * The attachment to be added, updated or deleted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#AttachmentEdit)
     */
    attachment: SubtypeGroupLayerAttachmentEditAttachment;
  }

  /**
   * The fields that record who adds or edits data in the feature service and when the edit is made.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#EditFieldsInfo)
   */
  export interface SubtypeGroupLayerEditFieldsInfo 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-SubtypeGroupLayer.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-SubtypeGroupLayer.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-SubtypeGroupLayer.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-SubtypeGroupLayer.html#EditFieldsInfo)
     */
    editDateField: string;
  }

  /**
   * Specifies information about editing.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#EditingInfo)
   */
  export interface SubtypeGroupLayerEditingInfo extends Object {
    /**
     * Indicates the last time the layer was edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#EditingInfo)
     */
    lastEditDate: Date;
  }

  export interface SubtypeGroupLayerEditsEvent {
    addedAttachments: SubtypeGroupLayerFeatureEditResult[];

    addedFeatures: SubtypeGroupLayerFeatureEditResult[];

    deletedAttachments: SubtypeGroupLayerFeatureEditResult[];

    deletedFeatures: SubtypeGroupLayerFeatureEditResult[];

    updatedAttachments: SubtypeGroupLayerFeatureEditResult[];

    updatedFeatures: SubtypeGroupLayerFeatureEditResult[];
  }

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

  export interface SubtypeGroupLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface SubtypeGroupLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface SubtypeGroupLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  export interface SubtypeGroupLayerApplyEditsEdits extends Object {
    /**
     * An array or a [collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of features to be added.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#applyEdits)
     */
    addFeatures?: Graphic[] | Collection<Graphic>;
    /**
     * An array or a [collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of features to be updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#applyEdits)
     */
    updateFeatures?: Graphic[] | Collection<Graphic>;
    /**
     * An array or a [collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of features, or an array of objects with `objectId` or `globalId` of each feature to be deleted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#applyEdits)
     */
    deleteFeatures?: Graphic[] | Collection<Graphic> | any[];
    /**
     * An array of attachments to be added.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#applyEdits)
     */
    addAttachments?: SubtypeGroupLayerAttachmentEdit[];
    /**
     * An array of attachments to be updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#applyEdits)
     */
    updateAttachments?: SubtypeGroupLayerAttachmentEdit[];
    /**
     * An array of [globalId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#AttachmentEdit)s for attachments to be deleted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#applyEdits)
     */
    deleteAttachments?: string[];
  }

  export interface SubtypeGroupLayerApplyEditsOptions extends Object {
    /**
     * The geodatabase version to apply the edits.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#applyEdits)
     */
    gdbVersion?: string;
    /**
     * Indicates whether the edits should be applied only if all submitted edits succeed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#applyEdits)
     */
    rollbackOnFailureEnabled?: boolean;
    /**
     * Indicates whether the edits can be applied using globalIds of features or attachments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#applyEdits)
     */
    globalIdUsed?: boolean;
  }

  export interface SubtypeGroupLayerCapabilities extends Object {
    /**
     * Describes what attachment capabilities are enabled on the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    attachment: SubtypeGroupLayerCapabilitiesAttachment;
    /**
     * Describes characteristics of the data in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    data: SubtypeGroupLayerCapabilitiesData;
    /**
     * Describes editing capabilities that can be performed on the features in the layer via [applyEdits()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#applyEdits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    editing: SubtypeGroupLayerCapabilitiesEditing;
    /**
     * Describes the metadata contained on features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    metadata: SubtypeGroupLayerCapabilitiesMetadata;
    /**
     * Describes operations that can be performed on features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    operations: SubtypeGroupLayerCapabilitiesOperations;
    /**
     * Describes [query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-SubtypeGroupLayer.html#capabilities)
     */
    query: SubtypeGroupLayerCapabilitiesQuery;
    /**
     * 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-SubtypeGroupLayer.html#capabilities)
     */
    queryRelated: SubtypeGroupLayerCapabilitiesQueryRelated;
  }

  export interface SubtypeGroupLayerCapabilitiesAttachment extends Object {
    /**
     * Indicates if the attachments can be [queried](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html) by their names.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsName: boolean;
    /**
     * Indicates if the attachments can be [queried](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html) by their sizes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsSize: boolean;
    /**
     * Indicates if the attachments can be [queried](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html) by their content types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsContentType: boolean;
    /**
     * Indicates if the attachments can be [queried](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html) by their keywords.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsKeywords: boolean;
    /**
     * Indicates if the attachment [queries](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html) support `exifInfo`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsExifInfo: boolean;
  }

  export interface SubtypeGroupLayerCapabilitiesData extends Object {
    /**
     * Indicates if the feature service is versioned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    isVersioned: boolean;
    /**
     * Indicates if the attachment is enabled on the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsAttachment: boolean;
    /**
     * Indicates if the features in the layer support m-values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsM: boolean;
    /**
     * Indicates if the features in the layer support z-values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsZ: boolean;
  }

  export interface SubtypeGroupLayerCapabilitiesEditing extends Object {
    /**
     * Indicates if anonymous users can delete features created by others.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.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-SubtypeGroupLayer.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-SubtypeGroupLayer.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-SubtypeGroupLayer.html#applyEdits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsGlobalId: boolean;
    /**
     * Indicates if the `rollbackOnFailureEnabled` parameter can be set to `true` or `false` when editing features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.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-SubtypeGroupLayer.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-SubtypeGroupLayer.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-SubtypeGroupLayer.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-SubtypeGroupLayer.html#capabilities)
     */
    supportsUploadWithItemId: boolean;
  }

  export interface SubtypeGroupLayerCapabilitiesMetadata extends Object {
    /**
     * Indicates whether to provide a user-defined field description.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsAdvancedFieldProperties: boolean;
  }

  export interface SubtypeGroupLayerCapabilitiesOperations extends Object {
    /**
     * Indicates if new features can be [added](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#applyEdits) to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsAdd: boolean;
    /**
     * Indicates if features can be [deleted](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#applyEdits) from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsDelete: boolean;
    /**
     * Indicates if features in the layer can be [updated](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#applyEdits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsUpdate: boolean;
    /**
     * Indicates if features in the layer can be [edited](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#applyEdits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsEditing: boolean;
    /**
     * Indicates if values of one or more field values in the layer can be updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsCalculate: boolean;
    /**
     * Indicates if features in the layer can be [queried](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#queryFeatures).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsQueryAttachments: boolean;
    /**
     * Indicates if the layer supports a SQL-92 expression or where clause.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsValidateSql: boolean;
    /**
     * Indicates if resized attachments are supported in the feature layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsResizeAttachments: boolean;
  }

  export interface SubtypeGroupLayerCapabilitiesQuery extends Object {
    /**
     * The maximum number of records that will be returned for a given query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    maxRecordCount: number;
    /**
     * Indicates if the geometry centroid associated with each polygon feature can be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.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-SubtypeGroupLayer.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-SubtypeGroupLayer.html#outFields).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsDistinct: boolean;
    /**
     * Indicates if the query operation supports `disjoint` [spatial relationship](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#spatialRelationship).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsDisjointSpatialRelationship: boolean;
    /**
     * Indicates if the query operation supports a [cache hint](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#cacheHint).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsCacheHint: boolean;
    /**
     * Indicates if the layer's query response includes the extent of features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsExtent: boolean;
    /**
     * Indicates if the layer's query response contains geometry attributes, including shape area and length attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsGeometryProperties: boolean;
    /**
     * Indicates if the layer supports the [having](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#having) clause on the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsHavingClause: boolean;
    /**
     * Indicates if features returned in the query response can be ordered by one or more fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsOrderBy: boolean;
    /**
     * Indicates if the query response supports pagination.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsPagination: boolean;
    /**
     * Indicates if the layer supports [percentile statisticType](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-StatisticDefinition.html#statisticType).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsPercentileStatistics: boolean;
    /**
     * Indicates if the query response includes the [query geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html#queryGeometry).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsQueryGeometry: boolean;
    /**
     * Indicates if the query operation supports the projection of geometries onto a virtual grid.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.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-SubtypeGroupLayer.html#capabilities)
     */
    supportsResultType: boolean;
    /**
     * Indicates if the query operation supports SQL expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsSqlExpression: boolean;
    /**
     * Indicates if the query operation supports using standardized queries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsStandardizedQueriesOnly: boolean;
    /**
     * Indicates if the layer supports field-based statistical functions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsStatistics: boolean;
    /**
     * Indicates if the layer supports historic moment query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsHistoricMoment: boolean;
  }

  export interface SubtypeGroupLayerCapabilitiesQueryRelated 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-SubtypeGroupLayer.html#capabilities)
     */
    supportsCount: boolean;
    /**
     * Indicates if the related features or records returned in the query response can be ordered by one or more fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsOrderBy: boolean;
    /**
     * Indicates if the query response supports pagination for related features or records.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#capabilities)
     */
    supportsPagination: boolean;
  }

  export interface SubtypeGroupLayerElevationInfo extends Object {
    /**
     * Defines how the feature is placed with respect to the terrain surface or 3D objects in the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#elevationInfo)
     */
    mode: "on-the-ground" | "relative-to-ground" | "absolute-height" | "relative-to-scene";
    /**
     * An elevation offset, which is added to the vertical position of the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.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-SubtypeGroupLayer.html#elevationInfo)
     */
    featureExpressionInfo?: SubtypeGroupLayerElevationInfoFeatureExpressionInfo;
    /**
     * The unit for `featureExpressionInfo` and `offset` values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#elevationInfo)
     */
    unit?: "feet" | "meters" | "kilometers" | "miles" | "us-feet" | "yards";
  }

  export interface SubtypeGroupLayerElevationInfoFeatureExpressionInfo extends Object {
    /**
     * An [Arcade expression](https://developers.arcgis.com/javascript/latest/arcade/) evaluating to a number that determines the z-value of the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#elevationInfo)
     */
    expression?: string;
  }

  export interface SubtypeGroupLayerGetFieldDomainOptions 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-SubtypeGroupLayer.html#getFieldDomain)
     */
    feature: Graphic;
  }

  export interface SubtypeGroupLayerQueryAttachmentsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#queryAttachments)
     */
    signal?: AbortSignal;
  }

  export interface SubtypeGroupLayerQueryExtentOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#queryExtent)
     */
    signal?: AbortSignal;
  }

  export interface SubtypeGroupLayerQueryFeatureCountOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#queryFeatureCount)
     */
    signal?: AbortSignal;
  }

  export interface SubtypeGroupLayerQueryFeaturesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#queryFeatures)
     */
    signal?: AbortSignal;
  }

  export interface SubtypeGroupLayerQueryObjectIdsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#queryObjectIds)
     */
    signal?: AbortSignal;
  }

  export interface SubtypeGroupLayerAttachmentEditAttachment extends Object {
    /**
     * The globalId of the attachment to be added or updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#AttachmentEdit)
     */
    globalId: string;
    /**
     * The name of the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#AttachmentEdit)
     */
    name?: string;
    /**
     * The content type of the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#AttachmentEdit)
     */
    contentType?: string;
    /**
     * The id of pre-loaded attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#AttachmentEdit)
     */
    uploadId?: string;
    /**
     * The attachment data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html#AttachmentEdit)
     */
    data?: Blob | any | string;
  }

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

  /**
   * The `AttachmentInfo` class returns information about attachments associated with a feature.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-AttachmentInfo.html)
   */
  interface AttachmentInfo {}

  export const AttachmentInfo: AttachmentInfo;

  interface BuildingFilter extends Accessor, 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;
    /**
     * Filter blocks define which features should be visible in the affected [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html) and how the filtered features are drawn.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#filterBlocks)
     */
    filterBlocks: Collection<BuildingFilterBlock>;
    /**
     * Unique filter id.
     *
     * [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 {
    /**
     * The `BuildingFilter` class defines a set of conditions that can be used to show or hide specific features of a [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html) 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-support-BuildingFilter.html)
     */

    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;
    /**
     * Filter blocks define which features should be visible in the affected [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html) and how the filtered features are drawn.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#BuildingFilterBlock)
     */
    type?: "solid" | "wire-frame" | "x-ray";
    /**
     * Defines the type of edges used to display a [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html) filtered in `wire-frame` mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingFilter.html#BuildingFilterBlock)
     */
    edges?: SolidEdges3D | SketchEdges3D;
  }

  interface BuildingSummaryStatistics extends Accessor, Loadable, JSONSupport {
    /**
     * An array of statistics on all fields in all sublayers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingSummaryStatistics.html#fields)
     */
    fields: BuildingFieldStatistics[];
  }

  interface BuildingSummaryStatisticsConstructor {
    /**
     * Contains statistics about the fields in all sublayers of 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-support-BuildingSummaryStatistics.html)
     */

    new (properties?: BuildingSummaryStatisticsProperties): BuildingSummaryStatistics;

    fromJSON(json: any): BuildingSummaryStatistics;
  }

  export const BuildingSummaryStatistics: BuildingSummaryStatisticsConstructor;

  interface BuildingSummaryStatisticsProperties extends LoadableProperties {
    /**
     * An array of statistics on all fields in all sublayers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingSummaryStatistics.html#fields)
     */
    fields?: BuildingFieldStatistics[];
  }

  /**
   * Summary statistics for a field 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-support-BuildingSummaryStatistics.html#BuildingFieldStatistics)
   */
  export interface BuildingFieldStatistics extends Object {
    /**
     * Name of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingSummaryStatistics.html#BuildingFieldStatistics)
     */
    fieldName: string;
    /**
     * Model Name of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingSummaryStatistics.html#BuildingFieldStatistics)
     */
    modelName: string;
    /**
     * Label of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingSummaryStatistics.html#BuildingFieldStatistics)
     */
    label: string;
    /**
     * Minimum value of the field for numeric values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingSummaryStatistics.html#BuildingFieldStatistics)
     */
    min: number;
    /**
     * Maximum value of the field for numeric values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingSummaryStatistics.html#BuildingFieldStatistics)
     */
    max: number;
    /**
     * List of the most frequent values of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingSummaryStatistics.html#BuildingFieldStatistics)
     */
    mostFrequentValues: string[] | number[];
    /**
     * List of sublayer ids where this field is available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-BuildingSummaryStatistics.html#BuildingFieldStatistics)
     */
    subLayerIds: number[];
  }

  interface CodedValueDomain extends Domain {
    /**
     * An array of the coded values in the domain.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-CodedValueDomain.html#codedValues)
     */
    codedValues: CodedValueDomainCodedValues[];

    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)
     */
    getName(code: string | number): string;
  }

  interface CodedValueDomainConstructor {
    /**
     * Information about the coded values belonging to the domain.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-CodedValueDomain.html)
     */

    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.
     *
     * [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)
     */
    isSlice: boolean;
    /**
     * An array of single values or tuples [min, max] each defining a range of valid 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 {
    /**
     * A dimensional definition defines a filter based on one variable and one dimension.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-DimensionalDefinition.html)
     */

    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)
     */
    isSlice?: boolean;
    /**
     * An array of single values or tuples [min, max] each defining a range of valid 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Domain.html#type)
     */
    type: "range" | "coded-value" | "inherited";
  }

  interface DomainConstructor {
    /**
     * Domains define constraints on a [layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Domain.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Domain.html#type)
     */
    type?: "range" | "coded-value" | "inherited";
  }

  interface ElevationSampler {
    /**
     * The minimum and maximum resolution of the data in the sampler.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ElevationSampler.html#demResolution)
     */
    readonly demResolution: ElevationSamplerDemResolution;
    /**
     * The extent within which the sampler can be queried.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ElevationSampler.html#extent)
     */
    readonly extent: Extent;
    /**
     * The value that is used to represent areas where there is no data available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ElevationSampler.html#noDataValue)
     */
    readonly noDataValue: number;

    /**
     * Registers an event handler on the instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ElevationSampler.html#on)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ElevationSampler.html#queryElevation)
     */
    queryElevation(geometry: Point | Multipoint | Polyline): Point | Multipoint | Polyline;

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

  interface ElevationSamplerConstructor {
    /**
     * A cache of elevation values created from an elevation service or the [GroundView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-GroundView.html) used for synchronously querying elevation information for geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ElevationSampler.html)
     */

    new (): ElevationSampler;
  }

  export const ElevationSampler: ElevationSamplerConstructor;

  export interface ElevationSamplerChangedEvent {}

  export interface ElevationSamplerDemResolution extends Object {
    /**
     * The minimum resolution.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ElevationSampler.html#demResolution)
     */
    min: number;
    /**
     * The maximum resolution.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ElevationSampler.html#demResolution)
     */
    max: number;
  }

  interface FacilityLayerInfo extends Accessor, JSONSupport {
    /**
     * The field name from the layer that defines the facility unique ID for a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FacilityLayerInfo.html#facilityIdField)
     */
    facilityIdField: string;
    /**
     * Identifies an operational layer in a map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FacilityLayerInfo.html#layerId)
     */
    layerId: string;
    /**
     * The field name from the layer that defines the facility name for a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FacilityLayerInfo.html#nameField)
     */
    nameField: string;
    /**
     * The field name from the layer that records the unique ID of a feature's associated site and can be used to identify a feature's associated site feature in floor-aware maps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FacilityLayerInfo.html#siteIdField)
     */
    siteIdField: string;
  }

  interface FacilityLayerInfoConstructor {
    /**
     * The FacilityLayerInfo describes the footprints of managed buildings and other structures.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FacilityLayerInfo.html)
     */

    new (properties?: FacilityLayerInfoProperties): FacilityLayerInfo;

    fromJSON(json: any): FacilityLayerInfo;
  }

  export const FacilityLayerInfo: FacilityLayerInfoConstructor;

  interface FacilityLayerInfoProperties {
    /**
     * The field name from the layer that defines the facility unique ID for a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FacilityLayerInfo.html#facilityIdField)
     */
    facilityIdField?: string;
    /**
     * Identifies an operational layer in a map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FacilityLayerInfo.html#layerId)
     */
    layerId?: string;
    /**
     * The field name from the layer that defines the facility name for a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FacilityLayerInfo.html#nameField)
     */
    nameField?: string;
    /**
     * The field name from the layer that records the unique ID of a feature's associated site and can be used to identify a feature's associated site feature in floor-aware maps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FacilityLayerInfo.html#siteIdField)
     */
    siteIdField?: string;
  }

  interface FeatureReductionCluster extends Accessor, JSONSupport {
    /**
     * Defines the symbol size of the largest cluster in points (or pixels if specified).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#clusterMaxSize)
     */
    clusterMaxSize: number;
    /**
     * Defines the symbol size of the smallest cluster in points (or pixels if specified).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#clusterMinSize)
     */
    clusterMinSize: number;
    /**
     * Defines the radius in points (or pixels if specified) of each area in which multiple points will be grouped and visualized as a single cluster.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#clusterRadius)
     */
    clusterRadius: number;
    /**
     * Defines labels for clusters as an array of [LabelClass](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#labelingInfo)
     */
    labelingInfo: LabelClass[];
    /**
     * Indicates whether to display labels for the clusters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#labelsVisible)
     */
    labelsVisible: boolean;
    /**
     * Indicates whether to display the cluster popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#popupEnabled)
     */
    popupEnabled: boolean;
    /**
     * The [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) to apply to clustered graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * The feature reduction type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#type)
     */
    type: "cluster";

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

  interface FeatureReductionClusterConstructor {
    /**
     * This class configures clustering as a means of reducing and summarizing point features in a [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), [GeoJSONLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html) or [OGCFeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html)
     */

    new (properties?: FeatureReductionClusterProperties): FeatureReductionCluster;

    fromJSON(json: any): FeatureReductionCluster;
  }

  export const FeatureReductionCluster: FeatureReductionClusterConstructor;

  interface FeatureReductionClusterProperties {
    /**
     * Defines the symbol size of the largest cluster in points (or pixels if specified).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#clusterMaxSize)
     */
    clusterMaxSize?: number | string;
    /**
     * Defines the symbol size of the smallest cluster in points (or pixels if specified).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#clusterMinSize)
     */
    clusterMinSize?: number | string;
    /**
     * Defines the radius in points (or pixels if specified) of each area in which multiple points will be grouped and visualized as a single cluster.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#clusterRadius)
     */
    clusterRadius?: number | string;
    /**
     * Defines labels for clusters as an array of [LabelClass](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#labelingInfo)
     */
    labelingInfo?: LabelClassProperties[];
    /**
     * Indicates whether to display labels for the clusters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#labelsVisible)
     */
    labelsVisible?: boolean;
    /**
     * Indicates whether to display the cluster popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#popupEnabled)
     */
    popupEnabled?: boolean;
    /**
     * The [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) to apply to clustered graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * The feature reduction type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#type)
     */
    type?: "cluster";
  }

  interface FeatureReductionSelection extends Accessor, JSONSupport {
    /**
     * The feature reduction type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionSelection.html#type)
     */
    type: "selection";
  }

  interface FeatureReductionSelectionConstructor {
    /**
     * Declutters points in the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) by thinning overlapping features so no features intersect on screen.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionSelection.html)
     */

    new (properties?: FeatureReductionSelectionProperties): FeatureReductionSelection;

    fromJSON(json: any): FeatureReductionSelection;
  }

  export const FeatureReductionSelection: FeatureReductionSelectionConstructor;

  interface FeatureReductionSelectionProperties {
    /**
     * The feature reduction type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionSelection.html#type)
     */
    type?: "selection";
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#drawingTool)
     */
    drawingTool:
      | "auto-complete-polygon"
      | "circle"
      | "ellipse"
      | "freehand"
      | "line"
      | "none"
      | "point"
      | "polygon"
      | "rectangle"
      | "arrow"
      | "triangle"
      | "left-arrow"
      | "right-arrow"
      | "up-arrow"
      | "down-arrow";
    /**
     * 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).
     *
     * [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 {
    /**
     * Feature templates define all the information required to create a new feature in a [feature layer](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-FeatureTemplate.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#drawingTool)
     */
    drawingTool?:
      | "auto-complete-polygon"
      | "circle"
      | "ellipse"
      | "freehand"
      | "line"
      | "none"
      | "point"
      | "polygon"
      | "rectangle"
      | "arrow"
      | "triangle"
      | "left-arrow"
      | "right-arrow"
      | "up-arrow"
      | "down-arrow";
    /**
     * 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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html#thumbnail)
     */
    contentType: "image" | "png" | "jpg" | "jpeg";
    /**
     * 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.
     *
     * [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 {
    /**
     * FeatureType is a subset of features defined in a [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) that share the same attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureType.html)
     */

    new (properties?: FeatureTypeProperties): FeatureType;

    fromJSON(json: any): FeatureType;
  }

  export const FeatureType: FeatureTypeConstructor;

  interface FeatureTypeProperties {
    /**
     * Domains associated with the 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)
     */
    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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#domain)
     */
    domain: Domain;
    /**
     * Indicates whether the field is editable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#editable)
     */
    editable: boolean;
    /**
     * The field length.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#length)
     */
    length: number;
    /**
     * The name of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#name)
     */
    name: string;
    /**
     * Indicates if the field can accept `null` values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#nullable)
     */
    nullable: boolean;
    /**
     * The data type of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#type)
     */
    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.
     *
     * [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 {
    /**
     * Information about each field in a layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html)
     */

    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)
     */
    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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#domain)
     */
    domain?: DomainProperties;
    /**
     * Indicates whether the field is editable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#editable)
     */
    editable?: boolean;
    /**
     * The field length.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#length)
     */
    length?: number;
    /**
     * The name of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#name)
     */
    name?: string;
    /**
     * Indicates if the field can accept `null` values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#nullable)
     */
    nullable?: boolean;
    /**
     * The data type of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#type)
     */
    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.
     *
     * [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)
     */
    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)
     */
    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)
     */
    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)
     */
    isDateField(fieldName: string): boolean;
  }

  interface FieldsIndexConstructor {
    /**
     * This class provides convenient methods that can be used to make case-insensitive lookups for a field by its name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FieldsIndex.html)
     */

    new (properties?: any): FieldsIndex;
  }

  export const FieldsIndex: FieldsIndexConstructor;

  /**
   * Convenience methods for getting field names used for feature layer [labeling](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#labelingInfo), [elevation](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#elevationInfo), [editor tracking](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#editFieldsInfo) and time span.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-fieldUtils.html)
   */
  interface fieldUtils {
    /**
     * Gets the appropriate display field name to label a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-fieldUtils.html#getDisplayFieldName)
     */
    getDisplayFieldName(
      layer: FeatureLayer | CSVLayer | GeoJSONLayer | OGCFeatureLayer | SceneLayer | StreamLayer
    ): string;
    /**
     * Returns an array of field names used in the Arcade expression for calculating the z-values of features in 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)
     */
    getElevationFields(layer: FeatureLayer): Promise<string[]>;
    /**
     * Returns an array of field names referenced in one or more Arcade expressions to be set on the given layer in either the `renderer`, `labelingInfo`, or `popupTemplate`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-fieldUtils.html#getExpressionFields)
     */
    getExpressionFields(
      layer: FeatureLayer | CSVLayer | GeoJSONLayer | SceneLayer | StreamLayer,
      expressions: string[]
    ): Promise<string[]>;
    /**
     * Returns an array of editor tracking field names for a given feature layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-fieldUtils.html#getFeatureEditFields)
     */
    getFeatureEditFields(layer: FeatureLayer): string[];
    /**
     * Returns an array of geometry field names for a given feature layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-fieldUtils.html#getFeatureGeometryFields)
     */
    getFeatureGeometryFields(layer: FeatureLayer): string[];
    /**
     * Returns an array of field names used in the Arcade expression for labeling features in 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)
     */
    getLabelingFields(layer: FeatureLayer): Promise<string[]>;
    /**
     * Returns an array of field names related to time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-fieldUtils.html#getTimeFields)
     */
    getTimeFields(layer: FeatureLayer): Promise<string[]>;
  }

  export const fieldUtils: fieldUtils;

  interface GeometryFieldsInfo extends Accessor, JSONSupport {
    /**
     * The name of the field that stores the feature's area, e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-GeometryFieldsInfo.html#shapeAreaField)
     */
    readonly shapeAreaField: string;
    /**
     * The name of the field that stores the feature's length, e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-GeometryFieldsInfo.html#shapeLengthField)
     */
    readonly shapeLengthField: string;
    /**
     * The units of measure for the area and length field values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-GeometryFieldsInfo.html#units)
     */
    readonly units: string;
  }

  interface GeometryFieldsInfoConstructor {
    /**
     * The `GeometryFieldsInfo` class returns information about the system maintained geometry information associated with a specific feature in a [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-GeometryFieldsInfo.html)
     */

    new (properties?: GeometryFieldsInfoProperties): GeometryFieldsInfo;

    fromJSON(json: any): GeometryFieldsInfo;
  }

  export const GeometryFieldsInfo: GeometryFieldsInfoConstructor;

  interface GeometryFieldsInfoProperties {}

  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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#format)
     */
    format: "png" | "png8" | "png24" | "png32" | "jpg" | "pdf" | "bmp" | "gif" | "svg";
    /**
     * 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 individual layers in the exported map image.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#layerOption)
     */
    layerOption: "show" | "hide" | "include" | "exclude";
    /**
     * 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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#toJSON)
     */
    toJSON(): any;
  }

  interface ImageParametersConstructor {
    /**
     * Represents the image parameter options used when calling [Geoprocessor.getResultImage()](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#getResultImage) and Geoprocessor.getResultImageLayer().
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html)
     */

    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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#format)
     */
    format?: "png" | "png8" | "png24" | "png32" | "jpg" | "pdf" | "bmp" | "gif" | "svg";
    /**
     * 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 individual layers in the exported map image.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-ImageParameters.html#layerOption)
     */
    layerOption?: "show" | "hide" | "include" | "exclude";
    /**
     * 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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-InheritedDomain.html#type)
     */
    readonly type: "inherited";
  }

  interface InheritedDomainConstructor {
    /**
     * This is a subclass of [Domain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Domain.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-InheritedDomain.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html#networkLink)
     */
    networkLink: any;
    /**
     * The raw KML data for this sublayer, in JSON format, as returned by the [KML utility service](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#kmlServiceUrl).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html#sourceJSON)
     */
    sourceJSON: 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 {
    /**
     * Represents a sublayer in a [KMLLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-KMLLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html#networkLink)
     */
    networkLink?: any;
    /**
     * The raw KML data for this sublayer, in JSON format, as returned by the [KML utility service](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#kmlServiceUrl).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-KMLSublayer.html#sourceJSON)
     */
    sourceJSON?: 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 how labels should be placed relative to one another.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#deconflictionStrategy)
     */
    deconflictionStrategy: "none" | "static";
    /**
     * Defines the content of label text 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-layers-support-LabelClass.html#labelExpression)
     */
    labelExpression: string;
    /**
     * Defines the content of label text for [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-LabelClass.html#labelExpressionInfo)
     */
    labelExpressionInfo: LabelClassLabelExpressionInfo;
    /**
     * The position of the label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#labelPlacement)
     */
    labelPlacement:
      | "above-center"
      | "above-left"
      | "above-right"
      | "below-center"
      | "below-left"
      | "below-right"
      | "center-center"
      | "center-left"
      | "center-right"
      | "above-after"
      | "above-along"
      | "above-before"
      | "above-start"
      | "above-end"
      | "below-after"
      | "below-along"
      | "below-before"
      | "below-start"
      | "below-end"
      | "center-after"
      | "center-along"
      | "center-before"
      | "center-start"
      | "center-end"
      | "always-horizontal";
    /**
     * The maximum scale (most zoomed in) at which labels are visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#maxScale)
     */
    maxScale: number;
    /**
     * The minimum scale (most zoomed out) at which labels are visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#minScale)
     */
    minScale: number;
    /**
     * Defines the symbol used for rendering the label.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#where)
     */
    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 {
    /**
     * Defines label expressions, symbols, scale ranges, label priorities, and label placement options for labels on a layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html)
     */

    new (properties?: LabelClassProperties): LabelClass;

    fromJSON(json: any): LabelClass;
  }

  export const LabelClass: LabelClassConstructor;

  interface LabelClassProperties {
    /**
     * Defines how labels should be placed relative to one another.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#deconflictionStrategy)
     */
    deconflictionStrategy?: "none" | "static";
    /**
     * Defines the content of label text 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-layers-support-LabelClass.html#labelExpression)
     */
    labelExpression?: string;
    /**
     * Defines the content of label text for [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-LabelClass.html#labelExpressionInfo)
     */
    labelExpressionInfo?: LabelClassLabelExpressionInfo;
    /**
     * The position of the label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#labelPlacement)
     */
    labelPlacement?:
      | "above-center"
      | "above-left"
      | "above-right"
      | "below-center"
      | "below-left"
      | "below-right"
      | "center-center"
      | "center-left"
      | "center-right"
      | "above-after"
      | "above-along"
      | "above-before"
      | "above-start"
      | "above-end"
      | "below-after"
      | "below-along"
      | "below-before"
      | "below-start"
      | "below-end"
      | "center-after"
      | "center-along"
      | "center-before"
      | "center-start"
      | "center-end"
      | "always-horizontal";
    /**
     * The maximum scale (most zoomed in) at which labels are visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#maxScale)
     */
    maxScale?: number;
    /**
     * The minimum scale (most zoomed out) at which labels are visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#minScale)
     */
    minScale?: number;
    /**
     * Defines the symbol used for rendering the label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#symbol)
     */
    symbol?: (TextSymbolProperties & { type: "text" }) | (LabelSymbol3DProperties & { type: "label-3d" });
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#where)
     */
    where?: string;
  }

  export interface LabelClassLabelExpressionInfo extends Object {
    /**
     * The SQL expression defining the content of the label text.
     *
     * [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/arcade/) expression that evaluates to a string used to label features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#labelExpressionInfo)
     */
    expression: string;
    /**
     * The title of the label expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LabelClass.html#labelExpressionInfo)
     */
    title?: string;
  }

  interface LayerFloorInfo extends Accessor, JSONSupport {
    /**
     * The field name derived from a floor-aware layer and used to filter features by floor level.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LayerFloorInfo.html#floorField)
     */
    floorField: string;
  }

  interface LayerFloorInfoConstructor {
    /**
     * LayerFloorInfo contains properties that allow a layer to be floor-aware.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LayerFloorInfo.html)
     */

    new (properties?: LayerFloorInfoProperties): LayerFloorInfo;

    fromJSON(json: any): LayerFloorInfo;
  }

  export const LayerFloorInfo: LayerFloorInfoConstructor;

  interface LayerFloorInfoProperties {
    /**
     * The field name derived from a floor-aware layer and used to filter features by floor level.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LayerFloorInfo.html#floorField)
     */
    floorField?: string;
  }

  interface LevelLayerInfo extends Accessor, JSONSupport {
    /**
     * The field name from the layer that defines the unique ID of a feature's associated facility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LevelLayerInfo.html#facilityIdField)
     */
    facilityIdField: string;
    /**
     * The id for an operational layer in the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LevelLayerInfo.html#layerId)
     */
    layerId: string;
    /**
     * The field name from the layer that defines a unique ID for the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LevelLayerInfo.html#levelIdField)
     */
    levelIdField: string;
    /**
     * The field name from the layer that defines the level floor number in a particular facility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LevelLayerInfo.html#levelNumberField)
     */
    levelNumberField: string;
    /**
     * The field name from the layer that defines the level name of a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LevelLayerInfo.html#longNameField)
     */
    longNameField: string;
    /**
     * The field name from the layer that defines the level short name of a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LevelLayerInfo.html#shortNameField)
     */
    shortNameField: string;
    /**
     * The field name from the layer that defines the order of display and reference to floors in the [Indoor Positioning System](https://doc.arcgis.com/en/indoors/android/configure-indoor-positioning.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LevelLayerInfo.html#verticalOrderField)
     */
    verticalOrderField: string;
  }

  interface LevelLayerInfoConstructor {
    /**
     * The LevelLayerInfo class describes the footprint of each occupiable floor contained in a managed facility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LevelLayerInfo.html)
     */

    new (properties?: LevelLayerInfoProperties): LevelLayerInfo;

    fromJSON(json: any): LevelLayerInfo;
  }

  export const LevelLayerInfo: LevelLayerInfoConstructor;

  interface LevelLayerInfoProperties {
    /**
     * The field name from the layer that defines the unique ID of a feature's associated facility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LevelLayerInfo.html#facilityIdField)
     */
    facilityIdField?: string;
    /**
     * The id for an operational layer in the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LevelLayerInfo.html#layerId)
     */
    layerId?: string;
    /**
     * The field name from the layer that defines a unique ID for the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LevelLayerInfo.html#levelIdField)
     */
    levelIdField?: string;
    /**
     * The field name from the layer that defines the level floor number in a particular facility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LevelLayerInfo.html#levelNumberField)
     */
    levelNumberField?: string;
    /**
     * The field name from the layer that defines the level name of a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LevelLayerInfo.html#longNameField)
     */
    longNameField?: string;
    /**
     * The field name from the layer that defines the level short name of a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LevelLayerInfo.html#shortNameField)
     */
    shortNameField?: string;
    /**
     * The field name from the layer that defines the order of display and reference to floors in the [Indoor Positioning System](https://doc.arcgis.com/en/indoors/android/configure-indoor-positioning.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LevelLayerInfo.html#verticalOrderField)
     */
    verticalOrderField?: string;
  }

  interface LOD extends Accessor, JSONSupport {
    /**
     * ID for each level.
     *
     * [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.
     *
     * [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 {
    /**
     * A [TileLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html) has a number of LODs (Levels of Detail).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-LOD.html)
     */

    new (properties?: LODProperties): LOD;

    fromJSON(json: any): LOD;
  }

  export const LOD: LODConstructor;

  interface LODProperties {
    /**
     * ID for each level.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MapImage.html#href)
     */
    href: "gif" | "jpg" | "png" | "bmp";
    /**
     * The opacity of the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MapImage.html#opacity)
     */
    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)
     */
    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 {
    /**
     * Represents the data object for the dynamically generated map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MapImage.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MapImage.html#href)
     */
    href?: "gif" | "jpg" | "png" | "bmp";
    /**
     * The opacity of the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MapImage.html#opacity)
     */
    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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#ascending)
     */
    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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#method)
     */
    method: "none" | "center" | "nadir" | "viewpoint" | "attribute" | "lock-raster" | "northwest" | "seamline";
    /**
     * A multiple dimensional service can have multiple dimensions for one or more variables.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#operation)
     */
    operation: "first" | "last" | "min" | "max" | "mean" | "blend" | "sum";
    /**
     * The name of the attribute field that is used with a constant sortValue to define the mosaicking order 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#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 the distance 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.
     *
     * [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 {
    /**
     * Specifies the mosaic rule when defining how individual images should be mosaicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html)
     */

    new (properties?: MosaicRuleProperties): MosaicRule;

    fromJSON(json: any): MosaicRule;
  }

  export const MosaicRule: MosaicRuleConstructor;

  interface MosaicRuleProperties {
    /**
     * Indicates whether the sort should be ascending.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#ascending)
     */
    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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#method)
     */
    method?: "none" | "center" | "nadir" | "viewpoint" | "attribute" | "lock-raster" | "northwest" | "seamline";
    /**
     * A multiple dimensional service can have multiple dimensions for one or more variables.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html#operation)
     */
    operation?: "first" | "last" | "min" | "max" | "mean" | "blend" | "sum";
    /**
     * The name of the attribute field that is used with a constant sortValue to define the mosaicking order 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#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 the distance 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.
     *
     * [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;
    /**
     * An array of nodata mask.
     *
     * [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.
     *
     * [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 Service displayed on the client.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#pixelType)
     */
    pixelType: "unknown" | "s8" | "s16" | "s32" | "u8" | "u16" | "u32" | "f32" | "f64";
    /**
     * An array of objects containing numeric statistical properties.
     *
     * [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)
     */
    addData(planeData: PixelBlockAddDataPlaneData): void;
    /**
     * Returns pixels and masks using a single array in bip format (e.g.
     *
     * [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.
     *
     * [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 {
    /**
     * An object representing the pixel arrays in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html)
     */

    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;
    /**
     * An array of nodata mask.
     *
     * [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.
     *
     * [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 Service displayed on the client.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-PixelBlock.html#pixelType)
     */
    pixelType?: "unknown" | "s8" | "s16" | "s32" | "u8" | "u16" | "u32" | "f32" | "f64";
    /**
     * An array of objects containing numeric statistical properties.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RangeDomain.html#type)
     */
    readonly type: "range";
  }

  interface RangeDomainConstructor {
    /**
     * Range domains specify a valid [minimum](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RangeDomain.html#minValue) and [maximum](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RangeDomain.html#maxValue) valid value that can be stored in numeric and date [fields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html#type).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RangeDomain.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterFunction.html#functionArguments)
     */
    functionArguments: any;
    /**
     * The raster function name.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterFunction.html#outputPixelType)
     */
    outputPixelType:
      | "c128"
      | "c64"
      | "f32"
      | "f64"
      | "s16"
      | "s32"
      | "s8"
      | "u1"
      | "u16"
      | "u2"
      | "u32"
      | "u4"
      | "u8"
      | "unknown";
    /**
     * 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 {
    /**
     * Raster functions specify processing to be done to the image service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterFunction.html)
     */

    new (properties?: RasterFunctionProperties): RasterFunction;

    fromJSON(json: any): RasterFunction;
  }

  export const RasterFunction: RasterFunctionConstructor;

  interface RasterFunctionProperties {
    /**
     * The arguments for the raster function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterFunction.html#functionArguments)
     */
    functionArguments?: any;
    /**
     * The raster function name.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterFunction.html#outputPixelType)
     */
    outputPixelType?:
      | "c128"
      | "c64"
      | "f32"
      | "f64"
      | "s16"
      | "s32"
      | "s8"
      | "u1"
      | "u16"
      | "u2"
      | "u32"
      | "u4"
      | "u8"
      | "unknown";
    /**
     * 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 Accessor, JSONSupport {
    /**
     * The raster attribute table associated with an imagery layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#attributeTable)
     */
    attributeTable: supportFeatureSet;
    /**
     * 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#dataType)
     */
    dataType:
      | "generic"
      | "elevation"
      | "thematic"
      | "processed"
      | "scientific"
      | "vector-uv"
      | "vector-u"
      | "vector-v"
      | "vector-magdir"
      | "vector-magnitude"
      | "vector-direction"
      | "standard-time";
    /**
     * 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 height (row count) in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#height)
     */
    height: number;
    /**
     * Raster histograms return basic name-value pairs for number of bins, min and max 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#multidimensionalInfo)
     */
    multidimensionalInfo: any;
    /**
     * The pixel value representing no available information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#noDataValue)
     */
    noDataValue: number | number[];
    /**
     * Raster pixel size.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#pixelSize)
     */
    pixelSize: RasterInfoPixelSize;
    /**
     * Pixel type for the raster data source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#pixelType)
     */
    pixelType: "unknown" | "s8" | "s16" | "s32" | "u8" | "u16" | "u32" | "f32" | "f64";
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#statistics)
     */
    statistics: RasterInfoStatistics[];
    /**
     * Raster width (column count) in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#width)
     */
    width: number;
  }

  interface RasterInfoConstructor {
    /**
     * Describes general raster data information exposed by the ArcGIS REST API for [ImageryLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html)
     */

    new (properties?: RasterInfoProperties): RasterInfo;

    fromJSON(json: any): RasterInfo;
  }

  export const RasterInfo: RasterInfoConstructor;

  interface RasterInfoProperties {
    /**
     * The raster attribute table associated with an imagery layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#attributeTable)
     */
    attributeTable?: supportFeatureSetProperties;
    /**
     * 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#dataType)
     */
    dataType?:
      | "generic"
      | "elevation"
      | "thematic"
      | "processed"
      | "scientific"
      | "vector-uv"
      | "vector-u"
      | "vector-v"
      | "vector-magdir"
      | "vector-magnitude"
      | "vector-direction"
      | "standard-time";
    /**
     * 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 height (row count) in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#height)
     */
    height?: number;
    /**
     * Raster histograms return basic name-value pairs for number of bins, min and max 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#multidimensionalInfo)
     */
    multidimensionalInfo?: any;
    /**
     * The pixel value representing no available information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#noDataValue)
     */
    noDataValue?: number | number[];
    /**
     * Raster pixel size.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#pixelSize)
     */
    pixelSize?: RasterInfoPixelSize;
    /**
     * Pixel type for the raster data source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#pixelType)
     */
    pixelType?: "unknown" | "s8" | "s16" | "s32" | "u8" | "u16" | "u32" | "f32" | "f64";
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#statistics)
     */
    statistics?: RasterInfoStatistics[];
    /**
     * Raster width (column count) in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#width)
     */
    width?: number;
  }

  export interface RasterInfoPixelSize extends Object {
    /**
     * Pixel size along the x axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#pixelSize)
     */
    x: number;
    /**
     * Pixel size along the y axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterInfo.html#pixelSize)
     */
    y: number;
  }

  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 the number of objects in the destination [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#cardinality)
     */
    cardinality: "one-to-one" | "one-to-many" | "many-to-many";
    /**
     * Indicates whether the relationship is composite.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html#composite)
     */
    composite: boolean;
    /**
     * The unique ID for the relationship.
     *
     * [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 key field in an attributed relationship class table that matches the [keyField](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html#keyField).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html#keyFieldInRelationshipTable)
     */
    keyFieldInRelationshipTable: 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;
    /**
     * The relationship table id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html#relationshipTableId)
     */
    relationshipTableId: number;
    /**
     * Indicates whether the table participating in the relationship is the `origin` or `destination` table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html#role)
     */
    role: "origin" | "destination";
  }

  interface RelationshipConstructor {
    /**
     * Describes a [layer's](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) relationship with another layer or table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html)
     */

    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 the number of objects in the destination [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#cardinality)
     */
    cardinality?: "one-to-one" | "one-to-many" | "many-to-many";
    /**
     * Indicates whether the relationship is composite.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html#composite)
     */
    composite?: boolean;
    /**
     * The unique ID for the relationship.
     *
     * [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 key field in an attributed relationship class table that matches the [keyField](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html#keyField).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html#keyFieldInRelationshipTable)
     */
    keyFieldInRelationshipTable?: 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;
    /**
     * The relationship table id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html#relationshipTableId)
     */
    relationshipTableId?: number;
    /**
     * Indicates whether the table participating in the relationship is the `origin` or `destination` table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Relationship.html#role)
     */
    role?: "origin" | "destination";
  }

  interface SceneModification extends Accessor, JSONSupport {
    /**
     * The geometry representing the location of the modification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SceneModification.html#geometry)
     */
    geometry: Polygon;
    /**
     * The type of modification to perform.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SceneModification.html#type)
     */
    type: "clip" | "mask" | "replace";

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

  interface SceneModificationConstructor {
    /**
     * The SceneModification is used to perform a client-side geometric modifications.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SceneModification.html)
     */

    new (properties?: SceneModificationProperties): SceneModification;

    fromJSON(json: any): SceneModification;
  }

  export const SceneModification: SceneModificationConstructor;

  interface SceneModificationProperties {
    /**
     * The geometry representing the location of the modification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SceneModification.html#geometry)
     */
    geometry?: PolygonProperties;
    /**
     * The type of modification to perform.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SceneModification.html#type)
     */
    type?: "clip" | "mask" | "replace";
  }

  interface SceneModifications extends Accessor, Collection<SceneModification>, JSONSupport {
    /**
     * Creates a clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SceneModifications.html#clone)
     */
    clone(): SceneModifications;
  }

  interface SceneModificationsConstructor {
    /**
     * A collection of [SceneModification](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SceneModification.html) with polygons and types to apply client-side modifications.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SceneModifications.html)
     */

    new (properties?: SceneModificationsProperties): SceneModifications;

    fromJSON(json: any): SceneModifications;
  }

  export const SceneModifications: SceneModificationsConstructor;

  interface SceneModificationsProperties extends CollectionPropertiesBase<SceneModificationProperties> {}

  interface SiteLayerInfo extends Accessor, JSONSupport {
    /**
     * The id for an operational layer in a map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SiteLayerInfo.html#layerId)
     */
    layerId: string;
    /**
     * The field name from the layer that defines the site name of a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SiteLayerInfo.html#nameField)
     */
    nameField: string;
    /**
     * The field name from the layer that defines a site unique ID for a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SiteLayerInfo.html#siteIdField)
     */
    siteIdField: string;
  }

  interface SiteLayerInfoConstructor {
    /**
     * The SiteLayerInfo class describes the boundaries of managed sites and is used for visualizing groups of facilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SiteLayerInfo.html)
     */

    new (properties?: SiteLayerInfoProperties): SiteLayerInfo;

    fromJSON(json: any): SiteLayerInfo;
  }

  export const SiteLayerInfo: SiteLayerInfoConstructor;

  interface SiteLayerInfoProperties {
    /**
     * The id for an operational layer in a map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SiteLayerInfo.html#layerId)
     */
    layerId?: string;
    /**
     * The field name from the layer that defines the site name of a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SiteLayerInfo.html#nameField)
     */
    nameField?: string;
    /**
     * The field name from the layer that defines a site unique ID for a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SiteLayerInfo.html#siteIdField)
     */
    siteIdField?: string;
  }

  interface Sublayer extends Accessor, Loadable {
    /**
     * A SQL where clause used to filter features in the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#definitionExpression)
     */
    definitionExpression: string;
    /**
     * An array of fields in the Sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#fields)
     */
    readonly fields: Field[];
    /**
     * A convenient property that can be used to make case-insensitive lookups for a [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#field) by name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#fieldsIndex)
     */
    readonly fieldsIndex: FieldsIndex;
    /**
     * The full extent of the Sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#fullExtent)
     */
    readonly fullExtent: Extent;
    /**
     * The sublayer's layer ID.
     *
     * [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.
     *
     * [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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#legendEnabled)
     */
    legendEnabled: boolean;
    /**
     * Indicates how the layer should display in the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#listMode)
     */
    listMode: "show" | "hide" | "hide-children";
    /**
     * The maximum scale (most zoomed in) at which the layer is visible in the view.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#minScale)
     */
    minScale: number;
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#fields) containing a unique value or identifier for each feature in the Sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#objectIdField)
     */
    readonly objectIdField: string;
    /**
     * The level of opacity to set on the sublayer on a scale from 0.0 - 1.0 where `0` is fully transparent and `1.0` is fully opaque.
     *
     * [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)
     */
    popupEnabled: boolean;
    /**
     * The popup template for the sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * The renderer to apply to the sublayer.
     *
     * [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 data either from the map service sublayers or data from a registered workspace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#source)
     */
    source: DynamicMapLayer | DynamicDataLayer;
    /**
     * The [map service's metadata JSON](https://developers.arcgis.com/rest/services-reference/map-service.htm) exposed by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#sourceJSON)
     */
    sourceJSON: any;
    /**
     * If a sublayer contains sublayers, this property 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#title)
     */
    title: string;
    /**
     * The name of the field holding the type ID or subtypes for the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#typeIdField)
     */
    readonly typeIdField: string;
    /**
     * An array of subtypes defined in the feature service exposed by ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#types)
     */
    readonly types: FeatureType[];
    /**
     * The URL to the REST endpoint of the sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#url)
     */
    url: string;
    /**
     * Indicates if the layer is visible in the view.
     *
     * [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) instance based on the Sublayer's configuration, including [dynamic sources](https://enterprise.arcgis.com/en/server/latest/publish-services/linux/about-dynamic-layers.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#createFeatureLayer)
     */
    createFeatureLayer(): Promise<FeatureLayer>;
    /**
     * Creates a popup template for the sublayer, populated with all the fields of the sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#createPopupTemplate)
     */
    createPopupTemplate(options?: CreatePopupTemplateOptions): PopupTemplate;
    /**
     * Creates a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) object with default values representing the layer's state, including filters (definition expression) on the layer's features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#createQuery)
     */
    createQuery(): supportQuery;
    /**
     * Returns a [FeatureType](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureType.html) describing the feature's type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#getFeatureType)
     */
    getFeatureType(feature: Graphic): FeatureType;
    /**
     * Returns the [Domain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Domain.html) associated with the given field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#getFieldDomain)
     */
    getFieldDomain(fieldName: string, options?: SublayerGetFieldDomainOptions): Domain;
    /**
     * Executes a [query](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html) against features in the sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#queryFeatures)
     */
    queryFeatures(
      query?: supportQuery | supportQueryProperties,
      options?: SublayerQueryFeaturesOptions
    ): Promise<supportFeatureSet>;
  }

  interface SublayerConstructor {
    /**
     * Represents a sublayer in a [MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html) or a [TileLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html)
     */

    new (properties?: SublayerProperties): Sublayer;
  }

  export const Sublayer: SublayerConstructor;

  interface SublayerProperties extends LoadableProperties {
    /**
     * A SQL where clause used to filter features in the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#definitionExpression)
     */
    definitionExpression?: string;
    /**
     * The sublayer's layer ID.
     *
     * [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.
     *
     * [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)
     */
    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 & { type: "map-image" }) | (TileLayerProperties & { type: "tile" });
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#legendEnabled)
     */
    legendEnabled?: boolean;
    /**
     * Indicates how the layer should display in the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#listMode)
     */
    listMode?: "show" | "hide" | "hide-children";
    /**
     * The maximum scale (most zoomed in) at which the layer is visible in the view.
     *
     * [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.
     *
     * [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 scale from 0.0 - 1.0 where `0` is fully transparent and `1.0` is fully opaque.
     *
     * [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)
     */
    popupEnabled?: boolean;
    /**
     * The popup template for the sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * The renderer to apply to the sublayer.
     *
     * [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 data either from the map service sublayers or data from a registered workspace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#source)
     */
    source?: (DynamicMapLayer & { type: "map-layer" }) | (DynamicDataLayer & { type: "data-layer" });
    /**
     * The [map service's metadata JSON](https://developers.arcgis.com/rest/services-reference/map-service.htm) exposed by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#sourceJSON)
     */
    sourceJSON?: any;
    /**
     * If a sublayer contains sublayers, this property 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#url)
     */
    url?: string;
    /**
     * Indicates if the layer is visible in the view.
     *
     * [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://enterprise.arcgis.com/en/server/latest/manage-data/windows/overview-register-data-with-arcgis-server.htm).
   *
   * [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 when the `dataSource` property is set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicDataLayer)
     */
    type: "data-layer";
    /**
     * A table, feature class, or raster that resides in a registered workspace (either a folder or geodatabase).
     *
     * [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.
     *
     * [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 has dynamic layers enabled.
   *
   * [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 when the `mapLayerId` property is set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#DynamicMapLayer)
     */
    type: "map-layer";
    /**
     * 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.
   *
   * [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 other join table properties of this object are set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#JoinTableDataSource)
     */
    type: "join-table";
    /**
     * The field name used for joining or matching records in the left table to records 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 table to 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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#JoinTableDataSource)
     */
    joinType: "left-outer-join" | "left-inner-join";
  }

  /**
   * A query table is a feature class or table defined by a SQL query on the fly.
   *
   * [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` and is 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: "query-table";
    /**
     * 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 each record in the table.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html#QueryTableDataSource)
     */
    geometryType: "point" | "multipoint" | "polyline" | "polygon" | "multipatch";
  }

  /**
   * A file-based raster that resides in a registered raster workspace.
   *
   * [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: "raster";
    /**
     * 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 SublayerGetFieldDomainOptions 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-support-Sublayer.html#getFieldDomain)
     */
    feature: Graphic;
  }

  export interface SublayerQueryFeaturesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [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).
   *
   * [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 SubtypeSublayer extends CustomParametersMixin {
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SubtypeSublayer.html#labelingInfo)
     */
    labelingInfo: LabelClass[];
    /**
     * Indicates whether to display labels for this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SubtypeSublayer.html#labelsVisible)
     */
    labelsVisible: boolean;
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SubtypeSublayer.html#legendEnabled)
     */
    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-support-SubtypeSublayer.html#popupEnabled)
     */
    popupEnabled: boolean;
    /**
     * The popup template for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SubtypeSublayer.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * The renderer assigned to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SubtypeSublayer.html#renderer)
     */
    renderer: Renderer;
    /**
     * The unique identifier representing the [SubtypeSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SubtypeSublayer.html) created from the [SubtypeGroupLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SubtypeSublayer.html#subtypeCode)
     */
    subtypeCode: number;
    /**
     * An array of feature templates defined in the feature layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SubtypeSublayer.html#templates)
     */
    templates: FeatureTemplate[];
    /**
     * 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) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SubtypeSublayer.html#title)
     */
    title: string;

    readonly type: "subtype-sublayer";

    /**
     * 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-support-SubtypeSublayer.html#createPopupTemplate)
     */
    createPopupTemplate(options?: CreatePopupTemplateOptions): PopupTemplate;
  }

  interface SubtypeSublayerConstructor {
    /**
     * Represents a sublayer in a [SubtypeGroupLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SubtypeGroupLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-SubtypeSublayer.html)
     */

    new (properties?: any): SubtypeSublayer;
  }

  export const SubtypeSublayer: SubtypeSublayerConstructor;

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#format)
     */
    format:
      | "png"
      | "png24"
      | "png32"
      | "jpg"
      | "dib"
      | "tiff"
      | "emf"
      | "ps"
      | "pdf"
      | "gif"
      | "svg"
      | "svgz"
      | "mixed"
      | "lerc";
    /**
     * 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)
     */
    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)
     */
    zoomToScale(zoom: number): number;
  }

  interface TileInfoConstructor {
    /**
     * Contains information about the tiling scheme for [TileLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html), [ElevationLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html) and [WebTileLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html)
     */

    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#create)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#format)
     */
    format?:
      | "png"
      | "png24"
      | "png32"
      | "jpg"
      | "dib"
      | "tiff"
      | "emf"
      | "ps"
      | "pdf"
      | "gif"
      | "svg"
      | "svgz"
      | "mixed"
      | "lerc";
    /**
     * 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)
     */
    size?: number;
    /**
     * Total number of LODs to create.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#create)
     */
    numLODs?: number;
    /**
     * The spatial reference for the new TileInfo instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#create)
     */
    spatialReference?: SpatialReference;
    /**
     * An array of scale values to use for the TileInfo.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileInfo.html#create)
     */
    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 {
    /**
     * Contains information about the tiling scheme for [WMTSSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TileMatrixSet.html)
     */

    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)
     */
    fullTimeExtent: TimeExtent;
    /**
     * The time interval defines the granularity of the temporal data and allows you to visualize the data at specified intervals using the [time slider widget](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html).
     *
     * [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;
    /**
     * The name of the field used to join or group discrete locations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#trackIdField)
     */
    trackIdField: 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 {
    /**
     * Time info represents the temporal data of a time-aware layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html)
     */

    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)
     */
    fullTimeExtent?: TimeExtentProperties;
    /**
     * The time interval defines the granularity of the temporal data and allows you to visualize the data at specified intervals using the [time slider widget](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html).
     *
     * [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;
    /**
     * The name of the field used to join or group discrete locations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#trackIdField)
     */
    trackIdField?: string;
  }

  interface WMSSublayer extends Accessor {
    /**
     * Description for the WMS sublayer.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#legendEnabled)
     */
    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;
    /**
     * The maximum scale (most zoomed in) at which the layer is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#maxScale)
     */
    maxScale: number;
    /**
     * The minimum scale (most zoomed out) at which the layer is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#minScale)
     */
    minScale: number;
    /**
     * Name of the WMS sublayer.
     *
     * [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)
     */
    popupEnabled: boolean;
    /**
     * Indicates if the layer can be queried, i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#queryable)
     */
    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.
     *
     * [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 {
    /**
     * Represents a sublayer in a [WMSLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html)
     */

    new (properties?: WMSSublayerProperties): WMSSublayer;
  }

  export const WMSSublayer: WMSSublayerConstructor;

  interface WMSSublayerProperties {
    /**
     * Description for the WMS sublayer.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#legendEnabled)
     */
    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;
    /**
     * The maximum scale (most zoomed in) at which the layer is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#maxScale)
     */
    maxScale?: number;
    /**
     * The minimum scale (most zoomed out) at which the layer is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#minScale)
     */
    minScale?: number;
    /**
     * Name of the WMS sublayer.
     *
     * [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)
     */
    popupEnabled?: boolean;
    /**
     * Indicates if the layer can be queried, i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMSSublayer.html#queryable)
     */
    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.
     *
     * [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.
     *
     * [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.
     *
     * [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 {
    /**
     * Contains information about the WMTS Style for [WMTSSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSStyle.html)
     */

    new (properties?: WMTSStyleProperties): WMTSStyle;

    fromJSON(json: any): WMTSStyle;
  }

  export const WMTSStyle: WMTSStyleConstructor;

  interface WMTSStyleProperties {
    /**
     * Description for the WMTS style.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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 {
    /**
     * Represents a sublayer in a [WMTSLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html)
     */

    new (properties?: WMTSSublayerProperties): WMTSSublayer;

    fromJSON(json: any): WMTSSublayer;
  }

  export const WMTSSublayer: WMTSSublayerConstructor;

  interface WMTSSublayerProperties {
    /**
     * Description for the WMTS sublayer.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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,
      BlendLayer,
      CustomParametersMixin,
      APIKeyMixin {
    /**
     * 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.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#resampling)
     */
    resampling: boolean;
    /**
     * The [tiled map service's metadata JSON](https://developers.arcgis.com/rest/services-reference/map-service.htm) exposed by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#sourceJSON)
     */
    sourceJSON: any;
    /**
     * 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.
     *
     * [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[];

    readonly type: "tile";
    /**
     * The URL of the REST endpoint of the layer.
     *
     * [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)
     */
    fetchTile(level: number, row: number, col: number, options?: TileLayerFetchTileOptions): Promise<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)
     */
    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 {
    /**
     * The TileLayer allows you work with a cached [map service](https://enterprise.arcgis.com/en/server/latest/publish-services/windows/what-is-a-map-service.htm) exposed by the ArcGIS Server REST API and add it to a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) as a tile layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html)
     */

    new (properties?: TileLayerProperties): TileLayer;

    fromJSON(json: any): TileLayer;
  }

  export const TileLayer: TileLayerConstructor;

  interface TileLayerProperties
    extends LayerProperties,
      ArcGISMapServiceProperties,
      ArcGISCachedServiceProperties,
      RefreshableLayerProperties,
      ScaleRangeLayerProperties,
      PortalLayerProperties,
      BlendLayerProperties,
      CustomParametersMixinProperties,
      APIKeyMixinProperties {
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#resampling)
     */
    resampling?: boolean;
    /**
     * The [tiled map service's metadata JSON](https://developers.arcgis.com/rest/services-reference/map-service.htm) exposed by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#sourceJSON)
     */
    sourceJSON?: any;
    /**
     * 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#fetchTile)
     */
    signal?: AbortSignal;
  }

  interface UnknownLayer extends Layer {
    readonly type: "unknown";

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

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

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

  interface UnknownLayerConstructor {
    /**
     * Represents a layer whose type could not be determined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-UnknownLayer.html)
     */

    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 {
    readonly type: "unsupported";

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

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

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

  interface UnsupportedLayerConstructor {
    /**
     * Represents an unsupported layer instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-UnsupportedLayer.html)
     */

    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, BlendLayer {
    /**
     * 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.
     *
     * [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.
     *
     * [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.
     *
     * [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;

    readonly type: "vector-tile";
    /**
     * The URL to the vector tile service, or the URL to the style resource of vector tiles that will be used to render the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#url)
     */
    url: string;

    /**
     * Deletes the specified [style layer](https://www.mapbox.com/mapbox-gl-js/style-spec/#layers) from the VectorTileLayer's [currentStyleInfo.style](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#currentStyleInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#deleteStyleLayer)
     */
    deleteStyleLayer(layerId: string): void;
    /**
     * 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)
     */
    getLayoutProperties(layerId: 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)
     */
    getPaintProperties(layerId: string): any;
    /**
     * Returns an instance of a [style layer](https://docs.mapbox.com/mapbox-gl-js/style-spec/layers/) from the VectorTileLayer's [currentStyleInfo.style](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#currentStyleInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#getStyleLayer)
     */
    getStyleLayer(layerId: string): any;
    /**
     * Returns the layer [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)
     */
    getStyleLayerId(index: number): string;
    /**
     * Returns the index of the [style layer](https://www.mapbox.com/mapbox-gl-js/style-spec/#layers) from the VectorTileLayer's [currentStyleInfo.style](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#currentStyleInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#getStyleLayerIndex)
     */
    getStyleLayerIndex(layerId: string): number;
    /**
     * Gets the visibility of the specified [style layer](https://www.mapbox.com/mapbox-gl-js/style-spec/#layers) from the VectorTileLayer's [currentStyleInfo.style](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#currentStyleInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#getStyleLayerVisibility)
     */
    getStyleLayerVisibility(layerId: string): string;
    /**
     * Loads a style to render a layer from the specified URL to a style resource or style JSON object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#loadStyle)
     */
    loadStyle(style: string | any, options?: VectorTileLayerLoadStyleOptions): Promise<any>;
    /**
     * Updates the [layout](https://www.mapbox.com/mapbox-gl-js/style-spec/#layer-layout) properties to 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#setLayoutProperties)
     */
    setLayoutProperties(layerId: string, layout: any): void;
    /**
     * Updates the [paint](https://www.mapbox.com/mapbox-gl-js/style-spec/#layer-paint) properties to 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#setPaintProperties)
     */
    setPaintProperties(layerId: string, painter: any): void;
    /**
     * Changes the layer properties of 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#setStyleLayer)
     */
    setStyleLayer(layer: any, index?: number): void;
    /**
     * Toggles the visibility of the specified [style layer](https://www.mapbox.com/mapbox-gl-js/style-spec/#layers) in the VectorTileLayer's [currentStyleInfo.style](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#currentStyleInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#setStyleLayerVisibility)
     */
    setStyleLayerVisibility(layerId: string, visibility: "none" | "visible"): 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 {
    /**
     * VectorTileLayer accesses cached tiles of data and renders it in vector format.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html)
     */

    new (properties?: VectorTileLayerProperties): VectorTileLayer;

    fromJSON(json: any): VectorTileLayer;
  }

  export const VectorTileLayer: VectorTileLayerConstructor;

  interface VectorTileLayerProperties extends LayerProperties, ScaleRangeLayerProperties, BlendLayerProperties {
    /**
     * The portal item from which the layer is loaded.
     *
     * [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.
     *
     * [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 that will be used to render the layer.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#currentStyleInfo)
     */
    glyphsUrl: string;
    /**
     * Style JSON object for vector tiles.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html#loadStyle)
     */
    signal?: AbortSignal;
  }

  interface WCSLayer extends Layer, ImageryTileMixin, PortalLayer, ScaleRangeLayer {
    /**
     * The coverage identifier for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WCSLayer.html#coverageId)
     */
    coverageId: string;
    /**
     * Use this property to append custom parameters to all WCS requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WCSLayer.html#customParameters)
     */
    customParameters: any;
    /**
     * An array of raster fields in the layer that consists of service pixel value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WCSLayer.html#fields)
     */
    fields: Field[];
    /**
     * Defines how to interpolate pixel values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WCSLayer.html#interpolation)
     */
    interpolation: "nearest" | "bilinear" | "cubic" | "majority";
    /**
     * Use this property to define a data slice to by choosing a variable with a given value for each of its dimensions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WCSLayer.html#multidimensionalDefinition)
     */
    multidimensionalDefinition: DimensionalDefinition[];
    /**
     * The renderer assigned to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WCSLayer.html#renderer)
     */
    renderer: ClassBreaksRenderer | RasterStretchRenderer;

    readonly type: "wcs";
    /**
     * The version of Web Coverage Service currently being used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WCSLayer.html#version)
     */
    version: string;

    /**
     * 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-WCSLayer.html#createPopupTemplate)
     */
    createPopupTemplate(options?: CreatePopupTemplateOptions): PopupTemplate;

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

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

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

  interface WCSLayerConstructor {
    /**
     * WCS presents raster data from a [OGC Web Coverage Service](https://www.ogc.org/standards/wcs).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WCSLayer.html)
     */

    new (properties?: WCSLayerProperties): WCSLayer;

    fromJSON(json: any): WCSLayer;
  }

  export const WCSLayer: WCSLayerConstructor;

  interface WCSLayerProperties
    extends LayerProperties,
      ImageryTileMixinProperties,
      PortalLayerProperties,
      ScaleRangeLayerProperties {
    /**
     * The coverage identifier for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WCSLayer.html#coverageId)
     */
    coverageId?: string;
    /**
     * Use this property to append custom parameters to all WCS requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WCSLayer.html#customParameters)
     */
    customParameters?: any;
    /**
     * An array of raster fields in the layer that consists of service pixel value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WCSLayer.html#fields)
     */
    fields?: FieldProperties[];
    /**
     * Defines how to interpolate pixel values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WCSLayer.html#interpolation)
     */
    interpolation?: "nearest" | "bilinear" | "cubic" | "majority";
    /**
     * Use this property to define a data slice to by choosing a variable with a given value for each of its dimensions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WCSLayer.html#multidimensionalDefinition)
     */
    multidimensionalDefinition?: DimensionalDefinitionProperties[];
    /**
     * The renderer assigned to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WCSLayer.html#renderer)
     */
    renderer?:
      | (ClassBreaksRendererProperties & { type: "class-breaks" })
      | (RasterStretchRendererProperties & { type: "raster-stretch" });
    /**
     * The version of Web Coverage Service currently being used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WCSLayer.html#version)
     */
    version?: string;
  }

  export interface WCSLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface WCSLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface WCSLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  interface WebTileLayer extends Layer, ScaleRangeLayer, RefreshableLayer, PortalLayer, BlendLayer {
    /**
     * 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)
     */
    readonly spatialReference: SpatialReference;
    /**
     * A string of subDomain names where tiles are served to speed up tile retrieval.
     *
     * [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.
     *
     * [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" | "open-street-map";
    /**
     * The url template is a string that specifies the URL of the hosted tile images to load.
     *
     * [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)
     */
    fetchTile(
      level: number,
      row: number,
      column: number,
      options?: WebTileLayerFetchTileOptions
    ): Promise<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)
     */
    getTileUrl(level: number, row: number, col: 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 {
    /**
     * WebTileLayer provides a simple way to add non-ArcGIS Server map tiles as a layer to a map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html)
     */

    new (properties?: WebTileLayerProperties): WebTileLayer;

    fromJSON(json: any): WebTileLayer;
  }

  export const WebTileLayer: WebTileLayerConstructor;

  interface WebTileLayerProperties
    extends LayerProperties,
      ScaleRangeLayerProperties,
      RefreshableLayerProperties,
      PortalLayerProperties,
      BlendLayerProperties {
    /**
     * 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.
     *
     * [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;
    /**
     * The url template is a string that specifies the URL of the hosted tile images to load.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WebTileLayer.html#fetchTile)
     */
    signal?: AbortSignal;
  }

  interface WFSLayer extends Layer, ScaleRangeLayer, BlendLayer, PortalLayer {
    /**
     * Describes the layer's supported capabilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    readonly capabilities: WFSLayerCapabilities;
    /**
     * Copyright information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#copyright)
     */
    copyright: string;
    /**
     * A list of custom parameters appended to the URL of all resources fetched by the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#customParameters)
     */
    customParameters: any;
    /**
     * The SQL where clause used to filter features on the client.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#definitionExpression)
     */
    definitionExpression: string;
    /**
     * The name of the layer's primary display field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#displayField)
     */
    displayField: string;
    /**
     * Specifies how graphics are placed on the vertical axis (z).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#elevationInfo)
     */
    elevationInfo: WFSLayerElevationInfo;
    /**
     * Configures the method for reducing the number of point features in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#featureReduction)
     */
    featureReduction: FeatureReductionCluster | FeatureReductionSelection;
    /**
     * An array of fields in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#fields)
     */
    fields: Field[];
    /**
     * A convenient property that can be used to make case-insensitive lookups for a field by name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#fieldsIndex)
     */
    readonly fieldsIndex: FieldsIndex;
    /**
     * The geometry type of features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#geometryType)
     */
    geometryType: "point" | "polygon" | "polyline" | "multipoint";
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#labelingInfo)
     */
    labelingInfo: LabelClass[];
    /**
     * Indicates whether to display labels for this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#labelsVisible)
     */
    labelsVisible: boolean;
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#legendEnabled)
     */
    legendEnabled: boolean;
    /**
     * The name of the layer in the WFS service to display, excluding the namespace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#name)
     */
    name: string;
    /**
     * The namespace URI for the layer name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#namespaceUri)
     */
    namespaceUri: string;
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#fields) containing a unique value or identifier for each feature in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#objectIdField)
     */
    objectIdField: string;
    /**
     * An array of field names from the WFS layer to include with each feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#outFields)
     */
    outFields: 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-WFSLayer.html#popupEnabled)
     */
    popupEnabled: boolean;
    /**
     * The popup template for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * The renderer assigned to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#renderer)
     */
    renderer: Renderer;
    /**
     * Apply perspective scaling to screen-size point symbols in 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-layers-WFSLayer.html#screenSizePerspectiveEnabled)
     */
    screenSizePerspectiveEnabled: boolean;
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#spatialReference)
     */
    spatialReference: SpatialReference;

    readonly type: "wfs";
    /**
     * The url to the WFS service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.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-WFSLayer.html#createPopupTemplate)
     */
    createPopupTemplate(options?: CreatePopupTemplateOptions): PopupTemplate;
    /**
     * Creates query parameter object that can be used to fetch features that satisfy the layer's configurations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#createQuery)
     */
    createQuery(): supportQuery;
    /**
     * 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-WFSLayer.html#getField)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#getFieldDomain)
     */
    getFieldDomain(fieldName: string, options?: WFSLayerGetFieldDomainOptions): Domain;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the layer and returns the [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#queryExtent)
     */
    queryExtent(query?: supportQuery | supportQueryProperties, options?: WFSLayerQueryExtentOptions): Promise<any>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the layer and returns the number of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#queryFeatureCount)
     */
    queryFeatureCount(
      query?: supportQuery | supportQueryProperties,
      options?: WFSLayerQueryFeatureCountOptions
    ): Promise<number>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the layer and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html), which can be accessed using the `.then()` method once the promise resolves.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#queryFeatures)
     */
    queryFeatures(
      query?: supportQuery | supportQueryProperties,
      options?: WFSLayerQueryFeaturesOptions
    ): Promise<supportFeatureSet>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the layer and returns an array of Object IDs for features that satisfy the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#queryObjectIds)
     */
    queryObjectIds(
      query?: supportQuery | supportQueryProperties,
      options?: WFSLayerQueryObjectIdsOptions
    ): Promise<number[]>;
    /**
     * Fetches all the data for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#refresh)
     */
    refresh(): void;

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

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

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

  interface WFSLayerConstructor {
    /**
     * The WFSLayer is used to create a layer based on an [OGC Web Feature Service](https://www.ogc.org/standards/wfs) (WFS).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html)
     */

    new (properties?: WFSLayerProperties): WFSLayer;

    /**
     * Creates a WFSLayer from an object created by [wfsUtils.getWFSLayerInfo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ogc-wfsUtils.html#getWFSLayerInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#fromWFSLayerInfo)
     */
    fromWFSLayerInfo(layerInfo: WFSLayerInfo): WFSLayer;

    fromJSON(json: any): WFSLayer;
  }

  export const WFSLayer: WFSLayerConstructor;

  interface WFSLayerProperties
    extends LayerProperties,
      ScaleRangeLayerProperties,
      BlendLayerProperties,
      PortalLayerProperties {
    /**
     * Copyright information for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#copyright)
     */
    copyright?: string;
    /**
     * A list of custom parameters appended to the URL of all resources fetched by the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#customParameters)
     */
    customParameters?: any;
    /**
     * The SQL where clause used to filter features on the client.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#definitionExpression)
     */
    definitionExpression?: string;
    /**
     * The name of the layer's primary display field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#displayField)
     */
    displayField?: string;
    /**
     * Specifies how graphics are placed on the vertical axis (z).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#elevationInfo)
     */
    elevationInfo?: WFSLayerElevationInfo;
    /**
     * Configures the method for reducing the number of point features in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#featureReduction)
     */
    featureReduction?:
      | (FeatureReductionClusterProperties & { type: "cluster" })
      | (FeatureReductionSelectionProperties & { type: "selection" });
    /**
     * An array of fields in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#fields)
     */
    fields?: FieldProperties[];
    /**
     * The geometry type of features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#geometryType)
     */
    geometryType?: "point" | "polygon" | "polyline" | "multipoint";
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#labelingInfo)
     */
    labelingInfo?: LabelClassProperties[];
    /**
     * Indicates whether to display labels for this layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#labelsVisible)
     */
    labelsVisible?: boolean;
    /**
     * Indicates whether the layer will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#legendEnabled)
     */
    legendEnabled?: boolean;
    /**
     * The name of the layer in the WFS service to display, excluding the namespace.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#name)
     */
    name?: string;
    /**
     * The namespace URI for the layer name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#namespaceUri)
     */
    namespaceUri?: string;
    /**
     * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#fields) containing a unique value or identifier for each feature in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#objectIdField)
     */
    objectIdField?: string;
    /**
     * An array of field names from the WFS layer to include with each feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#outFields)
     */
    outFields?: 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-WFSLayer.html#popupEnabled)
     */
    popupEnabled?: boolean;
    /**
     * The popup template for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * The renderer assigned to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#renderer)
     */
    renderer?: RendererProperties;
    /**
     * Apply perspective scaling to screen-size point symbols in 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-layers-WFSLayer.html#screenSizePerspectiveEnabled)
     */
    screenSizePerspectiveEnabled?: boolean;
    /**
     * The spatial reference of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#spatialReference)
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * The url to the WFS service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#url)
     */
    url?: string;
  }

  export interface WFSLayerLayerviewCreateErrorEvent {
    error: Error;

    view: View;
  }

  export interface WFSLayerLayerviewCreateEvent {
    layerView: LayerView;

    view: View;
  }

  export interface WFSLayerLayerviewDestroyEvent {
    layerView: LayerView;

    view: View;
  }

  export interface WFSLayerCapabilities extends Object {
    /**
     * Describes characteristics of the data in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    data: WFSLayerCapabilitiesData;
    /**
     * 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-WFSLayer.html#capabilities)
     */
    editing: WFSLayerCapabilitiesEditing;
    /**
     * Describes operations that can be performed on features in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    operations: WFSLayerCapabilitiesOperations;
    /**
     * Describes [query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-WFSLayer.html#capabilities)
     */
    query: WFSLayerCapabilitiesQuery;
    /**
     * 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-WFSLayer.html#capabilities)
     */
    queryRelated: WFSLayerCapabilitiesQueryRelated;
  }

  export interface WFSLayerCapabilitiesData extends Object {
    /**
     * Indicates if the attachment is enabled on the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsAttachment: boolean;
    /**
     * Indicates if the features in the layer support m-values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsM: boolean;
    /**
     * Indicates if the features in the layer support z-values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsZ: boolean;
  }

  export interface WFSLayerCapabilitiesEditing extends Object {
    /**
     * Indicates if anonymous users can delete features created by others.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.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-WFSLayer.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-WFSLayer.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-WFSLayer.html#applyEdits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.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-WFSLayer.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-WFSLayer.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-WFSLayer.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-WFSLayer.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-WFSLayer.html#capabilities)
     */
    supportsUploadWithItemId: boolean;
  }

  export interface WFSLayerCapabilitiesOperations extends Object {
    /**
     * Indicates if new features can be [added](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#applyEdits) to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsAdd: boolean;
    /**
     * Indicates if features can be [deleted](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#applyEdits) from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsDelete: boolean;
    /**
     * Indicates if features in the layer can be [updated](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#applyEdits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsUpdate: boolean;
    /**
     * Indicates if features in the layer can be [edited](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#applyEdits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsEditing: boolean;
    /**
     * Indicates if values of one or more field values in the layer can be updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsCalculate: boolean;
    /**
     * Indicates if features in the layer can be [queried](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#queryFeatures).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsQueryAttachments: boolean;
    /**
     * Indicates if the layer supports a SQL-92 expression or where clause.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsValidateSql: boolean;
    /**
     * Indicates if resized attachments are supported in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsResizeAttachments: boolean;
  }

  export interface WFSLayerCapabilitiesQuery extends Object {
    /**
     * Indicates if the geometry centroid associated with each polygon feature can be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.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-WFSLayer.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-WFSLayer.html#outFields).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsDistinct: boolean;
    /**
     * Indicates if the query operation supports `disjoint` [spatial relationship](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#spatialRelationship).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsDisjointSpatialRelationship: boolean;
    /**
     * Indicates if the layer's query response includes the extent of features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsExtent: boolean;
    /**
     * Indicates if the layer's query response contains geometry attributes, including shape area and length attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsGeometryProperties: boolean;
    /**
     * Indicates if the layer supports the [having](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#having) clause on the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsHavingClause: boolean;
    /**
     * Indicates if features returned in the query response can be ordered by one or more fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsOrderBy: boolean;
    /**
     * Indicates if the query response supports pagination.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsPagination: boolean;
    /**
     * Indicates if the layer supports [percentile statisticType](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-StatisticDefinition.html#statisticType).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsPercentileStatistics: boolean;
    /**
     * Indicates if the query response includes the [query geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html#queryGeometry).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsQueryGeometry: boolean;
    /**
     * Indicates if the query operation supports the projection of geometries onto a virtual grid.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.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-WFSLayer.html#capabilities)
     */
    supportsResultType: boolean;
    /**
     * Indicates if the query operation supports SQL expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsSqlExpression: boolean;
    /**
     * Indicates if the query operation supports using standardized queries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsStandardizedQueriesOnly: boolean;
    /**
     * Indicates if the layer supports field-based statistical functions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsStatistics: boolean;
    /**
     * Indicates if the layer supports historic moment query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsHistoricMoment: boolean;
  }

  export interface WFSLayerCapabilitiesQueryRelated 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-WFSLayer.html#capabilities)
     */
    supportsCount: boolean;
    /**
     * Indicates if the related features or records returned in the query response can be ordered by one or more fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsOrderBy: boolean;
    /**
     * Indicates if the query response supports pagination for related features or records.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#capabilities)
     */
    supportsPagination: boolean;
  }

  export interface WFSLayerElevationInfo extends Object {
    /**
     * Defines how the feature is placed with respect to the terrain surface or 3D objects in the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#elevationInfo)
     */
    mode: "on-the-ground" | "relative-to-ground" | "absolute-height" | "relative-to-scene";
    /**
     * An elevation offset, which is added to the vertical position of the graphic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.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-WFSLayer.html#elevationInfo)
     */
    featureExpressionInfo?: WFSLayerElevationInfoFeatureExpressionInfo;
    /**
     * The unit for `featureExpressionInfo` and `offset` values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#elevationInfo)
     */
    unit?: "feet" | "meters" | "kilometers" | "miles" | "us-feet" | "yards";
  }

  export interface WFSLayerElevationInfoFeatureExpressionInfo extends Object {
    /**
     * An [Arcade expression](https://developers.arcgis.com/javascript/latest/arcade/) evaluating to a number that determines the z-value of the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#elevationInfo)
     */
    expression?: string;
  }

  export interface WFSLayerGetFieldDomainOptions 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-WFSLayer.html#getFieldDomain)
     */
    feature: Graphic;
  }

  export interface WFSLayerQueryExtentOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#queryExtent)
     */
    signal?: AbortSignal;
  }

  export interface WFSLayerQueryFeatureCountOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#queryFeatureCount)
     */
    signal?: AbortSignal;
  }

  export interface WFSLayerQueryFeaturesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#queryFeatures)
     */
    signal?: AbortSignal;
  }

  export interface WFSLayerQueryObjectIdsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#queryObjectIds)
     */
    signal?: AbortSignal;
  }

  interface WMSLayer extends Layer, BlendLayer, PortalLayer, ScaleRangeLayer, RefreshableLayer {
    /**
     * A flattened collection of all module:esri/layers/support/IWMSSublayers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#allSublayers)
     */
    allSublayers: Collection<any>;
    /**
     * Copyright information for the WMS service.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#customParameters)
     */
    customParameters: any;
    /**
     * Description for the WMS layer.
     *
     * [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.
     *
     * [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)
     */
    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-WMSLayer.html#imageMaxWidth)
     */
    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)
     */
    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)
     */
    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 module:esri/layers/support/IWMSSublayers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#sublayers)
     */
    sublayers: Collection<any>;
    /**
     * The layer's time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#timeExtent)
     */
    timeExtent: TimeExtent;
    /**
     * TimeInfo 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) time for each feature and the [fullTimeExtent](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#fullTimeExtent) for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#timeInfo)
     */
    timeInfo: TimeInfo;
    /**
     * A temporary offset of the time data based on a certain [TimeInterval](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeInterval.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#timeOffset)
     */
    timeOffset: TimeInterval;

    readonly type: "wms";
    /**
     * The URL of the WMS service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#url)
     */
    url: string;
    /**
     * Determines if the layer will update its temporal data based on the view's [timeExtent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#timeExtent).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#useViewTime)
     */
    useViewTime: boolean;
    /**
     * Version of the [WMS specification](http://www.opengeospatial.org/standards/wms) to use.
     *
     * [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)
     */
    fetchImage(extent: Extent, width: number, height: number, options?: WMSLayerFetchImageOptions): Promise<any>;
    /**
     * Returns a module:esri/layers/support/IWMSSublayer based on the given sublayer id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#findSublayerById)
     */
    findSublayerById(id: number): any;
    /**
     * Returns a module:esri/layers/support/IWMSSublayer based on the given sublayer name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#findSublayerByName)
     */
    findSublayerByName(name: string): any;

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

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

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

  interface WMSLayerConstructor {
    /**
     * The WMSLayer is used to create layers based on OGC Web Map Services (WMS).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html)
     */

    new (properties?: WMSLayerProperties): WMSLayer;

    fromJSON(json: any): WMSLayer;
  }

  export const WMSLayer: WMSLayerConstructor;

  interface WMSLayerProperties
    extends LayerProperties,
      BlendLayerProperties,
      PortalLayerProperties,
      ScaleRangeLayerProperties,
      RefreshableLayerProperties {
    /**
     * A flattened collection of all module:esri/layers/support/IWMSSublayers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#allSublayers)
     */
    allSublayers?: CollectionProperties<any>;
    /**
     * Copyright information for the WMS service.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#customParameters)
     */
    customParameters?: any;
    /**
     * Description for the WMS layer.
     *
     * [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.
     *
     * [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)
     */
    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-WMSLayer.html#imageMaxWidth)
     */
    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)
     */
    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)
     */
    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 module:esri/layers/support/IWMSSublayers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#sublayers)
     */
    sublayers?: CollectionProperties<any>;
    /**
     * The layer's time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#timeExtent)
     */
    timeExtent?: TimeExtentProperties;
    /**
     * TimeInfo 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) time for each feature and the [fullTimeExtent](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#fullTimeExtent) for the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#timeInfo)
     */
    timeInfo?: TimeInfoProperties;
    /**
     * A temporary offset of the time data based on a certain [TimeInterval](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeInterval.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#timeOffset)
     */
    timeOffset?: TimeIntervalProperties;
    /**
     * The URL of the WMS service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#url)
     */
    url?: string;
    /**
     * Determines if the layer will update its temporal data based on the view's [timeExtent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#timeExtent).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#useViewTime)
     */
    useViewTime?: boolean;
    /**
     * Version of the [WMS specification](http://www.opengeospatial.org/standards/wms) to use.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMSLayer.html#fetchImage)
     */
    signal?: AbortSignal;
  }

  interface WMTSLayer extends Layer, PortalLayer, ScaleRangeLayer, RefreshableLayer, BlendLayer {
    /**
     * Currently active sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#activeLayer)
     */
    activeLayer: WMTSSublayer;
    /**
     * Copyright information for the WMTS service.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#customParameters)
     */
    customParameters: any;
    /**
     * The service mode for the WMTS layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#serviceMode)
     */
    serviceMode: "RESTful" | "KVP";
    /**
     * 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>;

    readonly type: "wmts";
    /**
     * The URL of the WMTS service.
     *
     * [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.
     *
     * [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)
     */
    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 {
    /**
     * The WMTSLayer is used to create layers based on OGC Web Map Services (WMTS).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html)
     */

    new (properties?: WMTSLayerProperties): WMTSLayer;

    fromJSON(json: any): WMTSLayer;
  }

  export const WMTSLayer: WMTSLayerConstructor;

  interface WMTSLayerProperties
    extends LayerProperties,
      PortalLayerProperties,
      ScaleRangeLayerProperties,
      RefreshableLayerProperties,
      BlendLayerProperties {
    /**
     * Currently active sublayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#activeLayer)
     */
    activeLayer?: WMTSSublayerProperties;
    /**
     * Copyright information for the WMTS service.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#customParameters)
     */
    customParameters?: any;
    /**
     * The service mode for the WMTS layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WMTSLayer.html#serviceMode)
     */
    serviceMode?: "RESTful" | "KVP";
    /**
     * 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.
     *
     * [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.
     *
     * [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, TablesMixin {
    /**
     * A flattened collection of all [layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) in the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#allLayers)
     */
    readonly allLayers: Collection<Layer>;
    /**
     * A flattened collection of tables anywhere in the map's hierarchy.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#allTables)
     */
    readonly allTables: Collection<Layer>;
    /**
     * Specifies a basemap for the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap)
     */
    basemap: Basemap;
    /**
     * A collection of editable layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#editableLayers)
     */
    readonly editableLayers: Collection<FeatureLayer | SceneLayer | SubtypeGroupLayer>;
    /**
     * Specifies the surface properties for the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#ground)
     */
    ground: Ground;

    /**
     * Destroys the map, and any associated resources, including its [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), [tables](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#tables),  and [ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#ground).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#destroy)
     */
    destroy(): void;
  }

  interface MapConstructor {
    /**
     * The Map class contains properties and methods for storing, managing, and overlaying [layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#layers) common to both 2D and 3D viewing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html)
     */

    new (properties?: MapProperties): Map;
  }

  export const Map: MapConstructor;

  interface MapProperties extends LayersMixinProperties, TablesMixinProperties {
    /**
     * Specifies a basemap for the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap)
     */
    basemap?: BasemapProperties | string;
    /**
     * Specifies the surface properties for the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#ground)
     */
    ground?: GroundProperties | string;
  }

  /**
   * A convenience module for importing [PointCloudRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html) classes when developing with [TypeScript](https://developers.arcgis.com/javascript/latest/typescript-setup/).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-pointCloudRenderers.html)
   */
  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;

  /**
   * A convenience module for importing [Content](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-Content.html) classes when developing with [TypeScript](https://developers.arcgis.com/javascript/latest/typescript-setup/).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content.html)
   */
  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
      | __esri.CustomContent;

    /**
     * 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 elements to 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 a feature.
     *
     * [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 a feature.
     *
     * [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;

    /**
     * CustomContent represents a custom content element associated with a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content.html#CustomContent)
     */
    export type CustomContent = __esri.CustomContent;
    export const CustomContent: typeof __esri.CustomContent;
  }

  interface AttachmentsContent extends Content, JSONSupport {
    /**
     * Describes the attachment's content in detail.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-AttachmentsContent.html#description)
     */
    description: string;
    /**
     * A string value indicating how to display the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-AttachmentsContent.html#displayType)
     */
    displayType: "preview" | "list";
    /**
     * A heading indicating what the attachment's content represents.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-AttachmentsContent.html#title)
     */
    title: string;
    /**
     * The type of popup element displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-AttachmentsContent.html#type)
     */
    readonly type: "attachments";
  }

  interface AttachmentsContentConstructor {
    /**
     * An `AttachmentsContent` popup element represents an attachment element associated with a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-AttachmentsContent.html)
     */

    new (properties?: AttachmentsContentProperties): AttachmentsContent;

    fromJSON(json: any): AttachmentsContent;
  }

  export const AttachmentsContent: AttachmentsContentConstructor;

  interface AttachmentsContentProperties extends ContentProperties {
    /**
     * Describes the attachment's content in detail.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-AttachmentsContent.html#description)
     */
    description?: string;
    /**
     * A string value indicating how to display the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-AttachmentsContent.html#displayType)
     */
    displayType?: "preview" | "list";
    /**
     * A heading indicating what the attachment's content represents.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-AttachmentsContent.html#title)
     */
    title?: string;
  }

  interface BarChartMediaInfo extends Accessor, JSONSupport, MediaInfo, ChartMediaInfo {
    /**
     * Indicates the type of chart.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-BarChartMediaInfo.html#type)
     */
    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 {
    /**
     * A `BarChartMediaInfo` is a type of chart media element that represents a bar chart displayed within a popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-BarChartMediaInfo.html)
     */

    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)
     */
    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 {
    /**
     * A `ColumnChartMediaInfo` is a type of chart media element that represents a column chart displayed within a popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-ColumnChartMediaInfo.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-Content.html#type)
     */
    readonly type: "text" | "fields" | "media" | "attachments" | "custom";
  }

  interface ContentConstructor {
    /**
     * Content elements define what should display within the [PopupTemplate](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-Content.html)
     */

    new (properties?: ContentProperties): Content;

    fromJSON(json: any): Content;
  }

  export const Content: ContentConstructor;

  interface ContentProperties {}

  interface CustomContent extends Content, JSONSupport {
    /**
     * The function that is called to create the custom content element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-CustomContent.html#creator)
     */
    creator: PopupTemplateContentCreator;
    /**
     * The called function to cleanup custom content when it is no longer necessary.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-CustomContent.html#destroyer)
     */
    destroyer: PopupTemplateContentDestroyer;
    /**
     * An array of field names used in the [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-CustomContent.html#outFields)
     */
    outFields: string[];
    /**
     * The type of popup element displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-CustomContent.html#type)
     */
    readonly type: "custom";

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

  interface CustomContentConstructor {
    /**
     * A `CustomContent` popup element is used to provide a way to customize the [popup's](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-CustomContent.html)
     */

    new (properties?: CustomContentProperties): CustomContent;

    fromJSON(json: any): CustomContent;
  }

  export const CustomContent: CustomContentConstructor;

  interface CustomContentProperties extends ContentProperties {
    /**
     * The function that is called to create the custom content element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-CustomContent.html#creator)
     */
    creator?: PopupTemplateContentCreator;
    /**
     * The called function to cleanup custom content when it is no longer necessary.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-CustomContent.html#destroyer)
     */
    destroyer?: PopupTemplateContentDestroyer;
    /**
     * An array of field names used in the [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-CustomContent.html#outFields)
     */
    outFields?: string[];
  }

  export type PopupTemplateContentCreator = (graphic: Graphic) => string | HTMLElement | Widget | Promise<any>;

  export type PopupTemplateContentDestroyer = (graphic: Graphic) => void;

  interface FieldsContent extends Content, JSONSupport {
    /**
     * Describes the field's content in detail.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html#description)
     */
    description: string;
    /**
     * Array of [fieldInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html#fieldInfos)
     */
    fieldInfos: FieldInfo[];
    /**
     * Heading indicating what the field's content represents.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html#title)
     */
    title: string;
    /**
     * The type of popup element displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html#type)
     */
    readonly type: "fields";

    /**
     * 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 {
    /**
     * A `FieldsContent` popup element represents the [FieldInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html) associated with a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html)
     */

    new (properties?: FieldsContentProperties): FieldsContent;

    fromJSON(json: any): FieldsContent;
  }

  export const FieldsContent: FieldsContentConstructor;

  interface FieldsContentProperties extends ContentProperties {
    /**
     * Describes the field's content in detail.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html#description)
     */
    description?: string;
    /**
     * Array of [fieldInfos](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html#fieldInfos)
     */
    fieldInfos?: FieldInfoProperties[];
    /**
     * Heading indicating what the field's content represents.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html#title)
     */
    title?: string;
  }

  interface ImageMediaInfo extends Accessor, JSONSupport, MediaInfo {
    /**
     * Refresh interval of the layer in minutes.
     *
     * [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)
     */
    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 {
    /**
     * An `ImageMediaInfo` is a type of media element that represents images to display within a popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-ImageMediaInfo.html)
     */

    new (properties?: ImageMediaInfoProperties): ImageMediaInfo;

    fromJSON(json: any): ImageMediaInfo;
  }

  export const ImageMediaInfo: ImageMediaInfoConstructor;

  interface ImageMediaInfoProperties extends MediaInfoProperties {
    /**
     * Refresh interval of the layer in minutes.
     *
     * [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 Accessor, JSONSupport, MediaInfo, ChartMediaInfo {
    /**
     * Indicates the type of chart.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-LineChartMediaInfo.html#type)
     */
    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 {
    /**
     * A `LineChartMediaInfo` is a type of chart media element that represents a line chart displayed within a popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-LineChartMediaInfo.html)
     */

    new (properties?: LineChartMediaInfoProperties): LineChartMediaInfo;

    fromJSON(json: any): LineChartMediaInfo;
  }

  export const LineChartMediaInfo: LineChartMediaInfoConstructor;

  interface LineChartMediaInfoProperties extends MediaInfoProperties, ChartMediaInfoProperties {}

  interface MediaContent extends Content, JSONSupport {
    /**
     * Index of the current active media within the popup's media content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-MediaContent.html#activeMediaInfoIndex)
     */
    activeMediaInfoIndex: string;
    /**
     * Describes the media's content in detail.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-MediaContent.html#description)
     */
    description: string;
    /**
     * Contains the media elements representing images or charts to display within the [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-MediaContent.html#mediaInfos)
     */
    mediaInfos:
      | BarChartMediaInfo
      | ColumnChartMediaInfo
      | ImageMediaInfo
      | LineChartMediaInfo
      | PieChartMediaInfo
      | any[];
    /**
     * Heading indicating what the media's content represents.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-MediaContent.html#title)
     */
    title: string;
    /**
     * The type of popup element displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-MediaContent.html#type)
     */
    readonly type: "media";

    /**
     * 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 {
    /**
     * A `MediaContent` popup element contains an individual or array of chart and/or image media elements to display within a popup's content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-MediaContent.html)
     */

    new (properties?: MediaContentProperties): MediaContent;

    fromJSON(json: any): MediaContent;
  }

  export const MediaContent: MediaContentConstructor;

  interface MediaContentProperties extends ContentProperties {
    /**
     * Index of the current active media within the popup's media content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-MediaContent.html#activeMediaInfoIndex)
     */
    activeMediaInfoIndex?: string;
    /**
     * Describes the media's content in detail.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-MediaContent.html#description)
     */
    description?: string;
    /**
     * Contains the media elements representing images or charts to display within the [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-MediaContent.html#mediaInfos)
     */
    mediaInfos?:
      | BarChartMediaInfoProperties
      | ColumnChartMediaInfoProperties
      | ImageMediaInfoProperties
      | LineChartMediaInfoProperties
      | PieChartMediaInfoProperties
      | any[];
    /**
     * Heading indicating what the media's content represents.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-MediaContent.html#title)
     */
    title?: string;
  }

  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 {
    /**
     * Provides an alternate text for an image if the image cannot be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-mixins-MediaInfo.html#altText)
     */
    altText: string;
    /**
     * 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 {
    /**
     * Provides an alternate text for an image if the image cannot be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-mixins-MediaInfo.html#altText)
     */
    altText?: string;
    /**
     * 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 Accessor, JSONSupport, MediaInfo, ChartMediaInfo {
    /**
     * Indicates the type of chart.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-PieChartMediaInfo.html#type)
     */
    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 {
    /**
     * A `PieChartMediaInfo` is a type of chart media element that represents a pie chart displayed within a popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-PieChartMediaInfo.html)
     */

    new (properties?: PieChartMediaInfoProperties): PieChartMediaInfo;

    fromJSON(json: any): PieChartMediaInfo;
  }

  export const PieChartMediaInfo: PieChartMediaInfoConstructor;

  interface PieChartMediaInfoProperties extends MediaInfoProperties, ChartMediaInfoProperties {}

  interface ChartMediaInfoValue extends Accessor, JSONSupport {
    /**
     * An array of strings, with each string containing the name of a field to display in the chart.
     *
     * [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.
     *
     * [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 provide information 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValue.html#tooltipField)
     */
    tooltipField: string;
  }

  interface ChartMediaInfoValueConstructor {
    /**
     * The `ChartMediaInfoValue` class contains information for popups regarding how charts should be constructed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValue.html)
     */

    new (properties?: ChartMediaInfoValueProperties): ChartMediaInfoValue;

    fromJSON(json: any): ChartMediaInfoValue;
  }

  export const ChartMediaInfoValue: ChartMediaInfoValueConstructor;

  interface ChartMediaInfoValueProperties {
    /**
     * An array of strings, with each string containing the name of a field to display in the chart.
     *
     * [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.
     *
     * [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 provide information 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.
     *
     * [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#tooltip)
     */
    readonly tooltip: string;
    /**
     * Numerical value for the chart series.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValueSeries.html#value)
     */
    readonly value: number;
    /**
     * 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)
     */
    readonly 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)
     */
    readonly y: string;

    /**
     * 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 {
    /**
     * The `ChartMediaInfoValueSeries` class is a read-only support class that represents information specific to how data should be plotted in a chart.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ChartMediaInfoValueSeries.html)
     */

    new (properties?: ChartMediaInfoValueSeriesProperties): ChartMediaInfoValueSeries;
  }

  export const ChartMediaInfoValueSeries: ChartMediaInfoValueSeriesConstructor;

  interface ChartMediaInfoValueSeriesProperties {}

  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 {
    /**
     * The `ImageMediaInfoValue` class contains information for popups regarding how images should be retrieved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-support-ImageMediaInfoValue.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-TextContent.html#text)
     */
    text: string;
    /**
     * The type of popup element displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-TextContent.html#type)
     */
    readonly type: "text";

    /**
     * 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 {
    /**
     * A `TextContent` popup element is used to define 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-TextContent.html)
     */

    new (properties?: TextContentProperties): TextContent;

    fromJSON(json: any): TextContent;
  }

  export const TextContent: TextContentConstructor;

  interface TextContentProperties extends ContentProperties {
    /**
     * The formatted string content to display.
     *
     * [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 a feature.
   *
   * [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 | CustomContent;

  /**
   * CustomContent represents a custom content element associated with a feature.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content.html#CustomContent)
   */
  export type contentCustomContent = CustomContent;

  /**
   * FieldsContent represents the [FieldInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html) associated with a feature.
   *
   * [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 elements to 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 popupExpressionInfo extends Accessor, JSONSupport {
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression evaluating to either a string, number, dictionary, or array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-ExpressionInfo.html#expression)
     */
    expression: string;
    /**
     * The name of the expression.
     *
     * [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 the popup.
     *
     * [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(): popupExpressionInfo;
  }

  interface popupExpressionInfoConstructor {
    /**
     * The `ExpressionInfo` class defines the [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expressions executed in a layer's [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-ExpressionInfo.html)
     */

    new (properties?: popupExpressionInfoProperties): popupExpressionInfo;

    fromJSON(json: any): popupExpressionInfo;
  }

  export const popupExpressionInfo: popupExpressionInfoConstructor;

  interface popupExpressionInfoProperties {
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression evaluating to either a string, number, dictionary, or array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-ExpressionInfo.html#expression)
     */
    expression?: string;
    /**
     * The name of the expression.
     *
     * [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 the popup.
     *
     * [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/arcade/) expression.
     *
     * [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 within a 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#isEditable)
     */
    isEditable: boolean;
    /**
     * A string containing the field alias.
     *
     * [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 statistics on the field to show in the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#statisticType)
     */
    statisticType: "count" | "sum" | "min" | "max" | "avg" | "stddev" | "var";
    /**
     * A string determining what type of input box editors see when editing the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#stringFieldOption)
     */
    stringFieldOption: "rich-text" | "text-area" | "text-box";
    /**
     * A string providing an editing hint for editors of the field.
     *
     * [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)
     */
    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 {
    /**
     * The `FieldInfo` class defines how a [Field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html) participates, or in some cases, does not participate, in a [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html)
     */

    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/arcade/) expression.
     *
     * [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 within a 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#isEditable)
     */
    isEditable?: boolean;
    /**
     * A string containing the field alias.
     *
     * [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 statistics on the field to show in the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#statisticType)
     */
    statisticType?: "count" | "sum" | "min" | "max" | "avg" | "stddev" | "var";
    /**
     * A string determining what type of input box editors see when editing the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html#stringFieldOption)
     */
    stringFieldOption?: "rich-text" | "text-area" | "text-box";
    /**
     * A string providing an editing hint for editors of the field.
     *
     * [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)
     */
    visible?: boolean;
  }

  interface LayerOptions extends Accessor, JSONSupport {
    /**
     * Applicable to [Imagery Layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-LayerOptions.html#returnTopmostRaster)
     */
    returnTopmostRaster: boolean;
    /**
     * Applicable to [Imagery Layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-LayerOptions.html#showNoDataRecords)
     */
    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 {
    /**
     * The `LayerOptions` class defines additional options that can be defined for a layer's [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-LayerOptions.html)
     */

    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-LayerOptions.html#returnTopmostRaster)
     */
    returnTopmostRaster?: boolean;
    /**
     * Applicable to [Imagery Layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-LayerOptions.html#showNoDataRecords)
     */
    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 records and 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 {
    /**
     * The `RelatedRecordsInfo` class provides additional sorting options when working with related records in a layer's [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-RelatedRecordsInfo.html)
     */

    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 records and 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-FieldInfoFormat.html#dateFormat)
     */
    dateFormat:
      | "default"
      | "short-date"
      | "short-date-short-time"
      | "short-date-long-time"
      | "short-date-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";
    /**
     * Used only with `Number` fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-FieldInfoFormat.html#digitSeparator)
     */
    digitSeparator: boolean;
    /**
     * Used only with `Number` fields to specify the number of supported decimal places that should appear in popups.
     *
     * [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 {
    /**
     * The `FieldInfoFormat` class is used with numerical or date fields to provide more detail about how the value should be displayed in a popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-FieldInfoFormat.html)
     */

    new (properties?: FieldInfoFormatProperties): FieldInfoFormat;

    fromJSON(json: any): FieldInfoFormat;
  }

  export const FieldInfoFormat: FieldInfoFormatConstructor;

  interface FieldInfoFormatProperties {
    /**
     * Used only with `Date` fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-FieldInfoFormat.html#dateFormat)
     */
    dateFormat?:
      | "default"
      | "short-date"
      | "short-date-short-time"
      | "short-date-long-time"
      | "short-date-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";
    /**
     * Used only with `Number` fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-FieldInfoFormat.html#digitSeparator)
     */
    digitSeparator?: boolean;
    /**
     * Used only with `Number` fields to specify the number of supported decimal places that should appear in popups.
     *
     * [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 drive the 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-RelatedRecordsInfoFieldOrder.html#order)
     */
    order: "asc" | "desc";

    /**
     * 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 {
    /**
     * The `RelatedRecordsInfoFieldOrder` class indicates the field display order for the related records in a layer's [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-RelatedRecordsInfoFieldOrder.html)
     */

    new (properties?: RelatedRecordsInfoFieldOrderProperties): RelatedRecordsInfoFieldOrder;

    fromJSON(json: any): RelatedRecordsInfoFieldOrder;
  }

  export const RelatedRecordsInfoFieldOrder: RelatedRecordsInfoFieldOrderConstructor;

  interface RelatedRecordsInfoFieldOrderProperties {
    /**
     * The attribute value of the field selected that will drive the 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-support-RelatedRecordsInfoFieldOrder.html#order)
     */
    order?: "asc" | "desc";
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#actions)
     */
    actions: Collection<ActionButton | ActionToggle>;
    /**
     * The template for defining and formatting a popup's content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#content)
     */
    content: Content[] | string | Function | Promise<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/arcade/) expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#expressionInfos)
     */
    expressionInfos: popupExpressionInfo[];
    /**
     * An array of [FieldInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html) that defines how fields in the dataset or values from [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expressions participate in a popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#fieldInfos)
     */
    fieldInfos: FieldInfo[];
    /**
     * Indicates whether or not editor tracking should display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#lastEditInfoEnabled)
     */
    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;
    /**
     * An array of field names used in the PopupTemplate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#outFields)
     */
    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)
     */
    overwriteActions: boolean;
    /**
     * The `RelatedRecordsInfo` class provides additional sorting options when working with related records in a popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#relatedRecordsInfo)
     */
    relatedRecordsInfo: RelatedRecordsInfo;
    /**
     * Indicates whether to include the feature's geometry for use by the template.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#returnGeometry)
     */
    returnGeometry: boolean;
    /**
     * The template for defining how to format the title used in a popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#title)
     */
    title: string | Function | Promise<any>;

    /**
     * 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 {
    /**
     * A PopupTemplate formats and defines the content of a [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) for a specific [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) or [Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#actions)
     */
    actions?: CollectionProperties<
      (ActionButtonProperties & { type: "button" }) | (ActionToggleProperties & { type: "toggle" })
    >;
    /**
     * The template for defining and formatting a popup's content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#content)
     */
    content?: ContentProperties[] | string | Function | Promise<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/arcade/) expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#expressionInfos)
     */
    expressionInfos?: popupExpressionInfoProperties[];
    /**
     * An array of [FieldInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html) that defines how fields in the dataset or values from [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expressions participate in a popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#fieldInfos)
     */
    fieldInfos?: FieldInfoProperties[];
    /**
     * Indicates whether or not editor tracking should display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#lastEditInfoEnabled)
     */
    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;
    /**
     * An array of field names used in the PopupTemplate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#outFields)
     */
    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)
     */
    overwriteActions?: boolean;
    /**
     * The `RelatedRecordsInfo` class provides additional sorting options when working with related records in a popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#relatedRecordsInfo)
     */
    relatedRecordsInfo?: RelatedRecordsInfoProperties;
    /**
     * Indicates whether to include the feature's geometry for use by the template.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#returnGeometry)
     */
    returnGeometry?: boolean;
    /**
     * The template for defining how to format the title used in a popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html#title)
     */
    title?: string | Function | Promise<any>;
  }

  interface Portal extends Accessor, Loadable {
    /**
     * The access level of the organization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#access)
     */
    access: "public" | "private";
    /**
     * 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 to access a secure resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#authMode)
     */
    authMode: "anonymous" | "auto" | "immediate";
    /**
     * Array of trusted servers to send credentials to when making Cross-Origin Resource Sharing (CORS) requests to access services secured 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canSearchPublic)
     */
    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>`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canShareBingPublic)
     */
    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)
     */
    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)
     */
    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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#commentsEnabled)
     */
    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.
     *
     * [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.
     *
     * [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.
     *
     * [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 [Esri User 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)
     */
    eueiEnabled: boolean;
    /**
     * The featured groups for the portal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#featuredGroups)
     */
    featuredGroups: PortalFeaturedGroups[];
    /**
     * The query that defines the featured group.
     *
     * [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.
     *
     * [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)
     */
    hasCategorySchema: boolean;
    /**
     * Helper services provided by the portal.
     *
     * [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.
     *
     * [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.
     *
     * [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;
    /**
     * Indicates if the portal is in read-only mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#isReadOnly)
     */
    isReadOnly: 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#loaded)
     */
    readonly loaded: boolean;
    /**
     * The maximum validity in minutes of tokens issued for users of the organization.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#portalMode)
     */
    portalMode: "multitenant" | "singletenant";
    /**
     * Properties specific to the organization, for example the "contact us" link.
     *
     * [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 Online and "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;
    /**
     * The JSON used to create the property values when the `Portal` is loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#sourceJSON)
     */
    sourceJSON: any;
    /**
     * Indicates whether hosted services are supported.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#supportsHostedServices)
     */
    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 template gallery.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#units)
     */
    units: "english" | "metric";
    /**
     * The URL to the portal instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#url)
     */
    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.
     *
     * [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) should be 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).
     *
     * [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.
     *
     * [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(): Promise<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(): Promise<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(): Promise<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(): Promise<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(): Promise<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(): Promise<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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#fetchBasemaps)
     */
    fetchBasemaps(basemapGalleryGroupQuery?: string, options?: PortalFetchBasemapsOptions): Promise<Basemap[]>;
    /**
     * If present, fetches the organization's category schema.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#fetchCategorySchema)
     */
    fetchCategorySchema(options?: PortalFetchCategorySchemaOptions): Promise<any[]>;
    /**
     * Fetches the featured groups in the Portal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#fetchFeaturedGroups)
     */
    fetchFeaturedGroups(options?: PortalFetchFeaturedGroupsOptions): Promise<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)
     */
    fetchRegions(options?: PortalFetchRegionsOptions): Promise<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)
     */
    queryGroups(
      queryParams: PortalQueryParams | PortalQueryParamsProperties,
      options?: PortalQueryGroupsOptions
    ): Promise<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)
     */
    queryItems(
      queryParams: PortalQueryParams | PortalQueryParamsProperties,
      options?: PortalQueryItemsOptions
    ): Promise<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)
     */
    queryUsers(
      queryParams: PortalQueryParams | PortalQueryParamsProperties,
      options?: PortalQueryUsersOptions
    ): Promise<PortalQueryResult>;
  }

  interface PortalConstructor {
    /**
     * The Portal class is part of the [ArcGIS Enterprise portal](https://enterprise.arcgis.com/en/portal/) that provides a way to build applications that work with content from [ArcGIS Online](https://www.arcgis.com/home/) or an [ArcGIS Enterprise portal](https://enterprise.arcgis.com/en/portal/).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html)
     */

    new (properties?: PortalProperties): Portal;

    /**
     * A new `Portal` instance is created the first time this method is called.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#access)
     */
    access?: "public" | "private";
    /**
     * 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 to access a secure resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#authMode)
     */
    authMode?: "anonymous" | "auto" | "immediate";
    /**
     * Array of trusted servers to send credentials to when making Cross-Origin Resource Sharing (CORS) requests to access services secured 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canSearchPublic)
     */
    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>`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#canShareBingPublic)
     */
    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)
     */
    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)
     */
    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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#commentsEnabled)
     */
    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.
     *
     * [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.
     *
     * [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.
     *
     * [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 [Esri User 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)
     */
    eueiEnabled?: boolean;
    /**
     * The featured groups for the portal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#featuredGroups)
     */
    featuredGroups?: PortalFeaturedGroups[];
    /**
     * The query that defines the featured group.
     *
     * [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.
     *
     * [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)
     */
    hasCategorySchema?: boolean;
    /**
     * Helper services provided by the portal.
     *
     * [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.
     *
     * [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.
     *
     * [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;
    /**
     * Indicates if the portal is in read-only mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#isReadOnly)
     */
    isReadOnly?: 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#portalMode)
     */
    portalMode?: "multitenant" | "singletenant";
    /**
     * Properties specific to the organization, for example the "contact us" link.
     *
     * [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;
    /**
     * The JSON used to create the property values when the `Portal` is loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#sourceJSON)
     */
    sourceJSON?: any;
    /**
     * Indicates whether hosted services are supported.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#supportsHostedServices)
     */
    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 template gallery.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#units)
     */
    units?: "english" | "metric";
    /**
     * The URL to the portal instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html#url)
     */
    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.
     *
     * [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) should be 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).
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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 {
    /**
     * Provides information about folders used to organize content in a portal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalFolder.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#access)
     */
    access: "private" | "org" | "public";
    /**
     * 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)
     */
    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.
     *
     * [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)
     */
    fetchCategorySchema(options?: PortalGroupFetchCategorySchemaOptions): Promise<any[]>;
    /**
     * Fetches the current members of the group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#fetchMembers)
     */
    fetchMembers(options?: PortalGroupFetchMembersOptions): Promise<any>;
    /**
     * Get the URL to the thumbnail image for the group.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#getThumbnailUrl)
     */
    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) objects that match the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#queryItems)
     */
    queryItems(
      queryParams?: PortalQueryParams | PortalQueryParamsProperties,
      options?: PortalGroupQueryItemsOptions
    ): Promise<PortalQueryResult>;
  }

  interface PortalGroupConstructor {
    /**
     * The group resource represents a group within the [Portal](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalGroup.html#access)
     */
    access?: "private" | "org" | "public";
    /**
     * 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)
     */
    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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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: "private" | "shared" | "org" | "public";
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#applicationProxies)
     */
    readonly applicationProxies: PortalItemApplicationProxies[];
    /**
     * Average rating.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#itemControl)
     */
    readonly itemControl: "admin" | "update" | "null";
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#loaded)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#ownerFolder)
     */
    ownerFolder: string;
    /**
     * The portal that contains the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#portal)
     */
    portal: Portal;
    /**
     * An array of string URLs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#screenshots)
     */
    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;
    /**
     * The JSON used to create the property values when the `PortalItem` is loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#sourceJSON)
     */
    sourceJSON: any;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#title)
     */
    title: string;
    /**
     * The GIS content type of this item.
     *
     * [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.
     *
     * [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)
     */
    addRating(rating: number | PortalRating): Promise<PortalRating>;
    /**
     * Adds a new [resource](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItemResource.html) to the portal item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#addResource)
     */
    addResource(resource: PortalItemResource, content: Blob, options?: PortalItemAddResourceOptions): Promise<any>;
    /**
     * Creates a clone of this object.
     *
     * [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(): Promise<any>;
    /**
     * Destroys the portal item, and any associated resources, including its associated [portal](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#portal).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#destroy)
     */
    destroy(): void;
    /**
     * Requests a PortalItem in the format specified in `responseType`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#fetchData)
     */
    fetchData(
      responseType?: "json" | "xml" | "text" | "blob" | "array-buffer" | "document",
      options?: PortalItemFetchDataOptions
    ): Promise<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)
     */
    fetchRating(options?: PortalItemFetchRatingOptions): Promise<PortalRating>;
    /**
     * Gets all the related items of a certain relationship type for the portal item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#fetchRelatedItems)
     */
    fetchRelatedItems(
      params: PortalItemFetchRelatedItemsParams,
      options?: PortalItemFetchRelatedItemsOptions
    ): Promise<PortalItem[]>;
    /**
     * Retrieves references to all the [portal item resources](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItemResource.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#fetchResources)
     */
    fetchResources(params?: FetchResourcesParams, options?: PortalItemFetchResourcesOptions): FetchResourcesResult;
    /**
     * Get the URL to the thumbnail image for the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#getThumbnailUrl)
     */
    getThumbnailUrl(width?: number): string;
    /**
     * Removes all the [resources](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItemResource.html) from the portal item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#removeAllResources)
     */
    removeAllResources(options?: PortalItemRemoveAllResourcesOptions): Promise<any>;
    /**
     * Removes a [resource](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItemResource.html) from the portal item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#removeResource)
     */
    removeResource(resource: PortalItemResource, options?: PortalItemRemoveResourceOptions): Promise<any>;
    /**
     * 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)
     */
    update(params?: PortalItemUpdateParams): Promise<PortalItem>;
    /**
     * Updates the item's thumbnail on the portal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#updateThumbnail)
     */
    updateThumbnail(params: PortalItemUpdateThumbnailParams): Promise<PortalItem>;
  }

  interface PortalItemConstructor {
    /**
     * An item (a unit of content) in the Portal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html)
     */

    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?: "private" | "shared" | "org" | "public";
    /**
     * 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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#ownerFolder)
     */
    ownerFolder?: string;
    /**
     * The portal that contains the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#portal)
     */
    portal?: PortalProperties;
    /**
     * An array of string URLs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#screenshots)
     */
    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;
    /**
     * The JSON used to create the property values when the `PortalItem` is loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#sourceJSON)
     */
    sourceJSON?: any;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#title)
     */
    title?: string;
    /**
     * The GIS content type of this item.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#url)
     */
    url?: string;
  }

  /**
   * A resource reference returned in the result of [fetchResources()](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#fetchResources).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#FetchResource)
   */
  export interface FetchResource extends Object {
    /**
     * The fetched resources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#FetchResource)
     */
    resource: PortalItemResource;
    /**
     * When the resource was created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#FetchResource)
     */
    created: Date;
    /**
     * The size of the resource in bytes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#FetchResource)
     */
    size: number;
  }

  /**
   * Parameters used when fetching portal item resources using [fetchResources()](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#fetchResources).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#FetchResourcesParams)
   */
  export interface FetchResourcesParams extends Object {
    /**
     * The maximum number of results to be included in the result set response.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#FetchResourcesParams)
     */
    num?: number;
    /**
     * The index of the first entry in the result set response.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#FetchResourcesParams)
     */
    start?: number;
    /**
     * The order in which to sort the results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#FetchResourcesParams)
     */
    sortOrder?: "asc" | "desc";
    /**
     * A field to sort the results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#FetchResourcesParams)
     */
    sortField?: "created" | "size" | "type";
  }

  /**
   * Object returned when [fetchResources()](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#fetchResources) promise resolves.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#FetchResourcesResult)
   */
  export interface FetchResourcesResult extends Object {
    /**
     * The fetched resources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#FetchResourcesResult)
     */
    resources: FetchResource[];
    /**
     * The next entry index if the current result set doesn't contain all results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#FetchResourcesResult)
     */
    nextStart: number;
    /**
     * The total number of results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#FetchResourcesResult)
     */
    total: number;
  }

  export interface PortalItemAddResourceOptions extends Object {
    /**
     * Indicates the level of access to the resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#addResource)
     */
    access?: "inherit" | "private";
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#addResource)
     */
    signal?: AbortSignal;
  }

  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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#fetchRelatedItems)
     */
    relationshipType: string;
    /**
     * The direction of the relationship.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#fetchRelatedItems)
     */
    direction: "forward" | "reverse";
  }

  export interface PortalItemFetchResourcesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#fetchResources)
     */
    signal?: AbortSignal;
  }

  export interface PortalItemRemoveAllResourcesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#removeAllResources)
     */
    signal?: AbortSignal;
  }

  export interface PortalItemRemoveResourceOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#removeResource)
     */
    signal?: AbortSignal;
  }

  export interface PortalItemUpdateParams extends Object {
    /**
     * **Optional**.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#updateThumbnail)
     */
    thumbnail: Blob | string;
    /**
     * The file name used for the thumbnail in [thumbnailUrl](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#thumbnailUrl).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html#updateThumbnail)
     */
    filename?: string;
  }

  interface PortalItemResource extends Accessor {
    /**
     * Path of the resource relative to `{ITEM}/resources/`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItemResource.html#path)
     */
    path: string;
    /**
     * The [portal item](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html) that owns the resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItemResource.html#portalItem)
     */
    portalItem: PortalItem;
    /**
     * The absolute url to the item resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItemResource.html#url)
     */
    readonly url: string;

    /**
     * Requests the PortalItemResource data in the format specified for the `responseType`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItemResource.html#fetch)
     */
    fetch(
      responseType?: "json" | "xml" | "text" | "blob" | "array-buffer" | "document",
      options?: PortalItemResourceFetchOptions
    ): Promise<any>;
    /**
     * Updates an existing resource with new content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItemResource.html#update)
     */
    update(content: Blob, options?: PortalItemResourceUpdateOptions): Promise<any>;
  }

  interface PortalItemResourceConstructor {
    /**
     * A reference to a portal item resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItemResource.html)
     */

    new (properties?: PortalItemResourceProperties): PortalItemResource;
  }

  export const PortalItemResource: PortalItemResourceConstructor;

  interface PortalItemResourceProperties {
    /**
     * Path of the resource relative to `{ITEM}/resources/`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItemResource.html#path)
     */
    path?: string;
    /**
     * The [portal item](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html) that owns the resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItemResource.html#portalItem)
     */
    portalItem?: PortalItemProperties;
  }

  export interface PortalItemResourceFetchOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItemResource.html#fetch)
     */
    signal?: AbortSignal;
  }

  export interface PortalItemResourceUpdateOptions extends Object {
    /**
     * Indicates the level of access to the resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItemResource.html#update)
     */
    access?: "inherit" | "private";
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItemResource.html#update)
     */
    signal?: AbortSignal;
  }

  interface PortalQueryParams extends Accessor {
    /**
     * An array of categories stored within the item.
     *
     * [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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#num)
     */
    num: number;
    /**
     * The query string used for the search.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#sortField)
     */
    sortField:
      | "title"
      | "uploaded"
      | "modified"
      | "username"
      | "created"
      | "type"
      | "owner"
      | "avg-rating"
      | "num-ratings"
      | "num-comments"
      | "num-views";
    /**
     * The order in which to sort the results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#sortOrder)
     */
    sortOrder: "asc" | "desc";
    /**
     * The index of the first entry in the result set response.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#start)
     */
    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 {
    /**
     * The parameters used to perform a query for Items, Groups, and Users within a [Portal](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html)
     */

    new (properties?: PortalQueryParamsProperties): PortalQueryParams;
  }

  export const PortalQueryParams: PortalQueryParamsConstructor;

  interface PortalQueryParamsProperties {
    /**
     * An array of categories stored within the item.
     *
     * [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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#num)
     */
    num?: number;
    /**
     * The query string used for the search.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#sortField)
     */
    sortField?:
      | "title"
      | "uploaded"
      | "modified"
      | "username"
      | "created"
      | "type"
      | "owner"
      | "avg-rating"
      | "num-ratings"
      | "num-comments"
      | "num-views";
    /**
     * The order in which to sort the results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#sortOrder)
     */
    sortOrder?: "asc" | "desc";
    /**
     * The index of the first entry in the result set response.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryParams.html#start)
     */
    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 {
    /**
     * Represents the result object returned from a portal query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalQueryResult.html)
     */

    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 {
    /**
     * PortalRating provides details about the rating associated with a [Portal item](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalRating.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#access)
     */
    access: "private" | "org" | "public";
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#role)
     */
    role: "org_admin" | "org_publisher" | "org_user";
    /**
     * The ID of the user's role.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#roleId)
     */
    roleId: string;
    /**
     * The JSON used to create the property values when the `PortalUser` is created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#sourceJSON)
     */
    sourceJSON: any;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#units)
     */
    units: "english" | "metric";
    /**
     * 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)
     */
    addItem(params: PortalUserAddItemParams): Promise<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)
     */
    deleteItem(item: PortalItem): Promise<any>;
    /**
     * Deletes items from the user's portal content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#deleteItems)
     */
    deleteItems(items: PortalItem[]): Promise<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(): Promise<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(): Promise<PortalGroup[]>;
    /**
     * Retrieves all the items in the specified folder.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#fetchItems)
     */
    fetchItems(params?: PortalUserFetchItemsParams): Promise<any>;
    /**
     * Fetches the tag objects that have been created by the portal user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#fetchTags)
     */
    fetchTags(): Promise<any[]>;
    /**
     * Get the URL to the thumbnail image for the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#getThumbnailUrl)
     */
    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)
     */
    queryFavorites(queryParams?: PortalQueryParams): Promise<PortalQueryResult>;
  }

  interface PortalUserConstructor {
    /**
     * Represents a registered user of the [Portal](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-Portal.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html)
     */

    new (properties?: PortalUserProperties): PortalUser;
  }

  export const PortalUser: PortalUserConstructor;

  interface PortalUserProperties {
    /**
     * Indicates the level of access of the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#access)
     */
    access?: "private" | "org" | "public";
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#role)
     */
    role?: "org_admin" | "org_publisher" | "org_user";
    /**
     * The ID of the user's role.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#roleId)
     */
    roleId?: string;
    /**
     * The JSON used to create the property values when the `PortalUser` is created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#sourceJSON)
     */
    sourceJSON?: any;
    /**
     * The user's personal units of measure setting.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#units)
     */
    units?: "english" | "metric";
    /**
     * 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 stream the 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 in which 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#fetchItems)
     */
    num?: number;
    /**
     * A comma-delimited list of fields to sort by.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#fetchItems)
     */
    sortField?: string;
    /**
     * The order in which to sort the results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#fetchItems)
     */
    sortOrder?: string;
    /**
     * The index of the first entry in the result set response.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalUser.html#fetchItems)
     */
    start?: number;
  }

  /**
   * A convenience module for importing renderer classes that can be used to render [ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html) when developing with [TypeScript](https://developers.arcgis.com/javascript/latest/typescript-setup/).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rasterRenderers.html)
   */
  namespace rasterRenderers {
    /**
     * ClassBreaksRenderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rasterRenderers.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-rasterRenderers.html#UniqueValueRenderer)
     */
    export type UniqueValueRenderer = __esri.UniqueValueRenderer;
    export const UniqueValueRenderer: typeof __esri.UniqueValueRenderer;

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

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

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

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

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

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

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

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

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

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

  /**
   * A convenience module for importing [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html) classes when developing with [TypeScript](https://developers.arcgis.com/javascript/latest/typescript-setup/).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers.html)
   */
  namespace renderers {
    /**
     * DictionaryRenderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers.html#DictionaryRenderer)
     */
    export type DictionaryRenderer = __esri.DictionaryRenderer;
    export const DictionaryRenderer: typeof __esri.DictionaryRenderer;

    /**
     * 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
      | __esri.DictionaryRenderer;

    /**
     * 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, VisualVariablesMixin {
    /**
     * 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.
     *
     * [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 break associated 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#defaultLabel)
     */
    defaultLabel: string;
    /**
     * The default symbol assigned to features with a value not matched to a given break.
     *
     * [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 determines the symbol of each feature based on the class breaks defined in [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 the attribute 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 property contains 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#normalizationType)
     */
    normalizationType: "field" | "log" | "percent-of-total";
    /**
     * The type of renderer.
     *
     * [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/arcade/) expression evaluating to a number.
     *
     * [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/arcade/) expression as defined in the [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#valueExpression) 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#addClassBreakInfo)
     */
    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)
     */
    getClassBreakInfo(graphic: Graphic): Promise<ClassBreakInfo>;
    /**
     * Removes a break from the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#removeClassBreakInfo)
     */
    removeClassBreakInfo(min: number, max: number): void;
  }

  interface ClassBreaksRendererConstructor {
    /**
     * ClassBreaksRenderer defines the symbol of each feature in a [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) based on the value of a numeric attribute.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html)
     */

    new (properties?: ClassBreaksRendererProperties): ClassBreaksRenderer;

    fromJSON(json: any): ClassBreaksRenderer;
  }

  export const ClassBreaksRenderer: ClassBreaksRendererConstructor;

  interface ClassBreaksRendererProperties extends RendererProperties, VisualVariablesMixinProperties {
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#backgroundFillSymbol)
     */
    backgroundFillSymbol?: FillSymbolProperties | (PolygonSymbol3DProperties & { type: "polygon-3d" });
    /**
     * Each element in the array is an object that provides information about a class break associated 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#defaultLabel)
     */
    defaultLabel?: string;
    /**
     * The default symbol assigned to features with a value not matched to a given break.
     *
     * [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 determines the symbol of each feature based on the class breaks defined in [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 the attribute 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 property contains 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#normalizationType)
     */
    normalizationType?: "field" | "log" | "percent-of-total";
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression evaluating to a number.
     *
     * [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/arcade/) expression as defined in the [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#valueExpression) 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html#legendOptions)
     */
    title: string;
  }

  interface DictionaryRenderer extends Renderer, VisualVariablesMixin {
    /**
     * This property allows you to set display options that can be configured on the dictionary symbol style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DictionaryRenderer.html#config)
     */
    config: any;
    /**
     * Defines a field mapping that maps input fields from the feature to the dictionary symbol style's expected fields for symbols and text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DictionaryRenderer.html#fieldMap)
     */
    fieldMap: HashMap<string>;
    /**
     * A scaling expression can be set to increase or decrease the size of the dictionary symbols.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DictionaryRenderer.html#scaleExpression)
     */
    scaleExpression: string;
    /**
     * The title identifying and describing the associated [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression as defined in the [scaleExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DictionaryRenderer.html#scaleExpression) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DictionaryRenderer.html#scaleExpressionTitle)
     */
    scaleExpressionTitle: string;
    /**
     * The type of renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DictionaryRenderer.html#type)
     */
    type: "dictionary";
    /**
     * The URL to the dictionary style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DictionaryRenderer.html#url)
     */
    url: string;

    /**
     * Creates a deep clone of the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DictionaryRenderer.html#clone)
     */
    clone(): DictionaryRenderer;
    /**
     * This method will return the symbol for a given graphic using the dictionary renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DictionaryRenderer.html#getSymbolAsync)
     */
    getSymbolAsync(graphic: Graphic): Promise<CIMSymbol>;
  }

  interface DictionaryRendererConstructor {
    /**
     * Dictionary Renderer is used to symbolize layers using a dictionary of [CIMSymbols](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-CIMSymbol.html) configured with multiple attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DictionaryRenderer.html)
     */

    new (properties?: DictionaryRendererProperties): DictionaryRenderer;

    fromJSON(json: any): DictionaryRenderer;
  }

  export const DictionaryRenderer: DictionaryRendererConstructor;

  interface DictionaryRendererProperties extends RendererProperties, VisualVariablesMixinProperties {
    /**
     * This property allows you to set display options that can be configured on the dictionary symbol style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DictionaryRenderer.html#config)
     */
    config?: any;
    /**
     * Defines a field mapping that maps input fields from the feature to the dictionary symbol style's expected fields for symbols and text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DictionaryRenderer.html#fieldMap)
     */
    fieldMap?: HashMap<string>;
    /**
     * A scaling expression can be set to increase or decrease the size of the dictionary symbols.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DictionaryRenderer.html#scaleExpression)
     */
    scaleExpression?: string;
    /**
     * The title identifying and describing the associated [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression as defined in the [scaleExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DictionaryRenderer.html#scaleExpression) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DictionaryRenderer.html#scaleExpressionTitle)
     */
    scaleExpressionTitle?: string;
    /**
     * The type of renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DictionaryRenderer.html#type)
     */
    type?: "dictionary";
    /**
     * The URL to the dictionary style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DictionaryRenderer.html#url)
     */
    url?: string;
  }

  interface DotDensityRenderer extends Renderer {
    /**
     * Defines the variable(s) used to visualize density.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#backgroundColor)
     */
    backgroundColor: Color;
    /**
     * Only applicable when two or more [attributes](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#attributes) are specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#dotBlendingEnabled)
     */
    dotBlendingEnabled: boolean;
    /**
     * Defines the initial dot value used for visualizing density.
     *
     * [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.
     *
     * [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 scale using the [calculateDotValue()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#calculateDotValue) method.
     *
     * [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 same scale given all parameters are the same in the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#seed)
     */
    seed: number;
    /**
     * The type of renderer.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#visualVariables)
     */
    visualVariables: VisualVariable[];

    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#calculateDotValue)
     */
    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 {
    /**
     * DotDensityRenderer allows you to create dot density visualizations for polygon layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html)
     */

    new (properties?: DotDensityRendererProperties): DotDensityRenderer;

    fromJSON(json: any): DotDensityRenderer;
  }

  export const DotDensityRenderer: DotDensityRendererConstructor;

  interface DotDensityRendererProperties extends RendererProperties {
    /**
     * Defines the variable(s) used to visualize density.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#backgroundColor)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#dotBlendingEnabled)
     */
    dotBlendingEnabled?: boolean;
    /**
     * Defines the initial dot value used for visualizing density.
     *
     * [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.
     *
     * [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 scale using the [calculateDotValue()](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#calculateDotValue) method.
     *
     * [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 same scale given all parameters are the same in the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#seed)
     */
    seed?: number;
    /**
     * An array of [Size Visual Variable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html) objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#visualVariables)
     */
    visualVariables?: VisualVariableProperties[];
  }

  export interface DotDensityRendererLegendOptions extends Object {
    /**
     * Indicates the unit of the data being visualized.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#blurRadius)
     */
    blurRadius: number;
    /**
     * An array of objects describing the renderer's color ramp.
     *
     * [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.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#maxPixelIntensity)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#minPixelIntensity)
     */
    minPixelIntensity: number;
    /**
     * The type of renderer.
     *
     * [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 {
    /**
     * The HeatmapRenderer renders point [FeatureLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html), [CSVLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html), [GeoJSONLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html) and [OGCFeatureLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html) as a raster surface, emphasizing areas with a high density of points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#blurRadius)
     */
    blurRadius?: number;
    /**
     * An array of objects describing the renderer's color ramp.
     *
     * [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.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#maxPixelIntensity)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html#minPixelIntensity)
     */
    minPixelIntensity?: number;
  }

  interface VisualVariablesMixin {
    /**
     * An array of [VisualVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html) objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-mixins-VisualVariablesMixin.html#visualVariables)
     */
    visualVariables: VisualVariable[];
  }

  interface VisualVariablesMixinConstructor {
    new (): VisualVariablesMixin;
  }

  export const VisualVariablesMixin: VisualVariablesMixinConstructor;

  interface VisualVariablesMixinProperties {
    /**
     * An array of [VisualVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html) objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-mixins-VisualVariablesMixin.html#visualVariables)
     */
    visualVariables?: VisualVariableProperties[];
  }

  interface PointCloudClassBreaksRenderer extends PointCloudRenderer {
    /**
     * Each element in the array is an object that provides information about a class break associated with the renderer.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudClassBreaksRenderer.html#fieldTransformType)
     */
    fieldTransformType: "none" | "low-four-bit" | "high-four-bit" | "absolute-value" | "modulo-ten";
    /**
     * 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.
     *
     * [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 {
    /**
     * This class defines the color of each point in a [PointCloudLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html) based on the value of a numeric attribute.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudClassBreaksRenderer.html)
     */

    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 break associated with the renderer.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudClassBreaksRenderer.html#fieldTransformType)
     */
    fieldTransformType?: "none" | "low-four-bit" | "high-four-bit" | "absolute-value" | "modulo-ten";
    /**
     * 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.
     *
     * [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`.
     *
     * [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 for rendering.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html#pointsPerInch)
     */
    pointsPerInch: number;
    /**
     * The point cloud renderer type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html#type)
     */
    readonly type: "point-cloud-class-breaks" | "point-cloud-rgb" | "point-cloud-stretch" | "point-cloud-unique-value";

    /**
     * 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 {
    /**
     * A PointCloudRenderer allows you to specify how points in a [PointCloudLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html) are rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html)
     */

    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`.
     *
     * [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 for rendering.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html#pointsPerInch)
     */
    pointsPerInch?: number;
  }

  export interface PointCloudRendererColorModulation extends Object {
    /**
     * Field to use for the color modulation.
     *
     * [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)
     */
    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)
     */
    maxValue?: number;
  }

  export interface PointCloudRendererPointSizeAlgorithm extends Object {
    /**
     * `fixed-size` or `splat`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html#pointSizeAlgorithm)
     */
    type: "fixed-size" | "splat";
    /**
     * Specifies whether `size` is in real world units or screen-space units.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRenderer.html#pointSizeAlgorithm)
     */
    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.
     *
     * [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 {
    /**
     * PointCloudRGBRenderer defines the color of each point in a [PointCloudLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html) based on the value of a color attribute.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudRGBRenderer.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html#fieldTransformType)
     */
    fieldTransformType: "none" | "low-four-bit" | "high-four-bit" | "absolute-value" | "modulo-ten";
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html#stops)
     */
    stops: ColorStop[];
    /**
     * The type of Renderer.
     *
     * [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 {
    /**
     * PointCloudStretchRenderer defines the color of each point in a [PointCloudLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html) based on the value of a numeric attribute.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html#fieldTransformType)
     */
    fieldTransformType?: "none" | "low-four-bit" | "high-four-bit" | "absolute-value" | "modulo-ten";
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html#stops)
     */
    stops?: ColorStopProperties[];
  }

  export interface PointCloudStretchRendererLegendOptions extends Object {
    /**
     * Describes the variable driving the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html#legendOptions)
     */
    title?: string;
  }

  interface PointCloudUniqueValueRenderer extends PointCloudRenderer {
    /**
     * Each element in the array is an object that matches a unique value with a specific color.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudUniqueValueRenderer.html#fieldTransformType)
     */
    fieldTransformType: "none" | "low-four-bit" | "high-four-bit" | "absolute-value" | "modulo-ten";
    /**
     * 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.
     *
     * [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 {
    /**
     * PointCloudUniqueValueRenderer allows you to colorize points in a [PointCloudLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-PointCloudLayer.html) based on an attribute value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudUniqueValueRenderer.html)
     */

    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 value with a specific color.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudUniqueValueRenderer.html#fieldTransformType)
     */
    fieldTransformType?: "none" | "low-four-bit" | "high-four-bit" | "absolute-value" | "modulo-ten";
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudUniqueValueRenderer.html#legendOptions)
     */
    title?: string;
  }

  interface RasterColormapRenderer extends Accessor, JSONSupport {
    /**
     * A colormap info array containing mappings for pixel and RGB color values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterColormapRenderer.html#colormapInfos)
     */
    colormapInfos: ColormapInfo[];
    /**
     * The type of Renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterColormapRenderer.html#type)
     */
    readonly type: "raster-colormap";

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

  interface RasterColormapRendererConstructor {
    /**
     * The RasterColormapRenderer defines the symbology to display raster data based on specific colors, aiding in visual analysis of the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterColormapRenderer.html)
     */

    new (properties?: RasterColormapRendererProperties): RasterColormapRenderer;

    /**
     * Creates a new instance [RasterColormapRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterColormapRenderer.html) from an array of color maps where pixel values with its corresponding RGB color values specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterColormapRenderer.html#createFromColormap)
     */
    createFromColormap(colormap: number[][]): RasterColormapRenderer;

    fromJSON(json: any): RasterColormapRenderer;
  }

  export const RasterColormapRenderer: RasterColormapRendererConstructor;

  interface RasterColormapRendererProperties {
    /**
     * A colormap info array containing mappings for pixel and RGB color values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterColormapRenderer.html#colormapInfos)
     */
    colormapInfos?: ColormapInfoProperties[];
  }

  interface RasterShadedReliefRenderer extends Accessor, JSONSupport {
    /**
     * The sun's angle of elevation above the horizon, ranging from 0 to 90 degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterShadedReliefRenderer.html#altitude)
     */
    altitude: number;
    /**
     * The sun's relative position along the horizon, ranging from 0 to 360 degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterShadedReliefRenderer.html#azimuth)
     */
    azimuth: number;
    /**
     * The color ramp to display the shaded relief.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterShadedReliefRenderer.html#colorRamp)
     */
    colorRamp: supportColorRamp;
    /**
     * The type of hillshading being applied on the elevation surface.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterShadedReliefRenderer.html#hillshadeType)
     */
    hillshadeType: "traditional" | "multi-directional";
    /**
     * Pixel size factor accounts for changes in scale as the viewer zooms in and out on the map display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterShadedReliefRenderer.html#pixelSizeFactor)
     */
    pixelSizeFactor: number;
    /**
     * Pixel Size Power accounts for the altitude changes (or scale) as the viewer zooms in and out on the map display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterShadedReliefRenderer.html#pixelSizePower)
     */
    pixelSizePower: number;
    /**
     * Applies a constant or adjusted z-factor based on resolution changes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterShadedReliefRenderer.html#scalingType)
     */
    scalingType: "none" | "adjusted";
    /**
     * The type of Renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterShadedReliefRenderer.html#type)
     */
    readonly type: "raster-shaded-relief";
    /**
     * A ratio of z unit / xy unit, with optional exaggeration factored in.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterShadedReliefRenderer.html#zFactor)
     */
    zFactor: number;

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

  interface RasterShadedReliefRendererConstructor {
    /**
     * RasterShadedReliefRenderer produces a grayscale or colored 3D representation of the surface on an [ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html) or [ImageryTileLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html), with the sun's relative position taken into account for shading the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterShadedReliefRenderer.html)
     */

    new (properties?: RasterShadedReliefRendererProperties): RasterShadedReliefRenderer;

    fromJSON(json: any): RasterShadedReliefRenderer;
  }

  export const RasterShadedReliefRenderer: RasterShadedReliefRendererConstructor;

  interface RasterShadedReliefRendererProperties {
    /**
     * The sun's angle of elevation above the horizon, ranging from 0 to 90 degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterShadedReliefRenderer.html#altitude)
     */
    altitude?: number;
    /**
     * The sun's relative position along the horizon, ranging from 0 to 360 degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterShadedReliefRenderer.html#azimuth)
     */
    azimuth?: number;
    /**
     * The color ramp to display the shaded relief.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterShadedReliefRenderer.html#colorRamp)
     */
    colorRamp?: supportColorRampProperties;
    /**
     * The type of hillshading being applied on the elevation surface.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterShadedReliefRenderer.html#hillshadeType)
     */
    hillshadeType?: "traditional" | "multi-directional";
    /**
     * Pixel size factor accounts for changes in scale as the viewer zooms in and out on the map display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterShadedReliefRenderer.html#pixelSizeFactor)
     */
    pixelSizeFactor?: number;
    /**
     * Pixel Size Power accounts for the altitude changes (or scale) as the viewer zooms in and out on the map display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterShadedReliefRenderer.html#pixelSizePower)
     */
    pixelSizePower?: number;
    /**
     * Applies a constant or adjusted z-factor based on resolution changes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterShadedReliefRenderer.html#scalingType)
     */
    scalingType?: "none" | "adjusted";
    /**
     * A ratio of z unit / xy unit, with optional exaggeration factored in.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterShadedReliefRenderer.html#zFactor)
     */
    zFactor?: number;
  }

  interface RasterStretchRenderer extends Accessor, JSONSupport {
    /**
     * The stretched values are mapped to this specified color ramp.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#colorRamp)
     */
    colorRamp: supportColorRamp;
    /**
     * The computeGamma automatically calculates best gamma value to render exported image based on empirical model.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#computeGamma)
     */
    computeGamma: boolean;
    /**
     * When Dynamic Range Adjustment is `true`, the statistics based on the current display extent are calculated as you zoom and pan around the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#dynamicRangeAdjustment)
     */
    dynamicRangeAdjustment: boolean;
    /**
     * The gamma values to be used if [useGamma](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#useGamma) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#gamma)
     */
    gamma: number[];
    /**
     * Applicable when [stretchType](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#stretchType) is `percent-clip`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#maxPercent)
     */
    maxPercent: number;
    /**
     * Applicable when [stretchType](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#stretchType) is `percent-clip`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#minPercent)
     */
    minPercent: number;
    /**
     * Applicable when [stretchType](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#stretchType) is `standard-deviation`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#numberOfStandardDeviations)
     */
    numberOfStandardDeviations: number;
    /**
     * The outputMax denotes the output maximum, which is the highest pixel value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#outputMax)
     */
    outputMax: number;
    /**
     * The outputMin denotes the output minimum, which is the lowest pixel value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#outputMin)
     */
    outputMin: number;
    /**
     * The sigmoid strength level determines how much of the sigmoidal function will be used in the stretch.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#sigmoidStrengthLevel)
     */
    sigmoidStrengthLevel: number;
    /**
     * The input statistics can be specified through the statistics property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#statistics)
     */
    statistics: number[][] | any[] | RasterStretchRendererStatistics;
    /**
     * The stretch type defines a histogram stretch that will be applied to the rasters to enhance their appearance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#stretchType)
     */
    stretchType: "none" | "standard-deviation" | "histogram-equalization" | "min-max" | "percent-clip" | "sigmoid";
    /**
     * The type of Renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#type)
     */
    readonly type: "raster-stretch";
    /**
     * Denotes whether the [gamma](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#gamma) value should be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#useGamma)
     */
    useGamma: boolean;

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

  interface RasterStretchRendererConstructor {
    /**
     * RasterStretchRenderer defines the symbology with a gradual ramp of colors for each pixel in a [ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html) based on the pixel value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html)
     */

    new (properties?: RasterStretchRendererProperties): RasterStretchRenderer;

    fromJSON(json: any): RasterStretchRenderer;
  }

  export const RasterStretchRenderer: RasterStretchRendererConstructor;

  interface RasterStretchRendererProperties {
    /**
     * The stretched values are mapped to this specified color ramp.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#colorRamp)
     */
    colorRamp?: supportColorRampProperties;
    /**
     * The computeGamma automatically calculates best gamma value to render exported image based on empirical model.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#computeGamma)
     */
    computeGamma?: boolean;
    /**
     * When Dynamic Range Adjustment is `true`, the statistics based on the current display extent are calculated as you zoom and pan around the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#dynamicRangeAdjustment)
     */
    dynamicRangeAdjustment?: boolean;
    /**
     * The gamma values to be used if [useGamma](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#useGamma) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#gamma)
     */
    gamma?: number[];
    /**
     * Applicable when [stretchType](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#stretchType) is `percent-clip`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#maxPercent)
     */
    maxPercent?: number;
    /**
     * Applicable when [stretchType](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#stretchType) is `percent-clip`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#minPercent)
     */
    minPercent?: number;
    /**
     * Applicable when [stretchType](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#stretchType) is `standard-deviation`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#numberOfStandardDeviations)
     */
    numberOfStandardDeviations?: number;
    /**
     * The outputMax denotes the output maximum, which is the highest pixel value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#outputMax)
     */
    outputMax?: number;
    /**
     * The outputMin denotes the output minimum, which is the lowest pixel value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#outputMin)
     */
    outputMin?: number;
    /**
     * The sigmoid strength level determines how much of the sigmoidal function will be used in the stretch.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#sigmoidStrengthLevel)
     */
    sigmoidStrengthLevel?: number;
    /**
     * The input statistics can be specified through the statistics property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#statistics)
     */
    statistics?: number[][] | any[] | RasterStretchRendererStatistics;
    /**
     * The stretch type defines a histogram stretch that will be applied to the rasters to enhance their appearance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#stretchType)
     */
    stretchType?: "none" | "standard-deviation" | "histogram-equalization" | "min-max" | "percent-clip" | "sigmoid";
    /**
     * Denotes whether the [gamma](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#gamma) value should be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#useGamma)
     */
    useGamma?: boolean;
  }

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

  interface Renderer extends Accessor, JSONSupport {
    /**
     * Authoring metadata only included in renderers generated from one of the Smart Mapping creator methods, such as [sizeRendererCreator.createContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer) or [colorRendererCreator.createContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html#authoringInfo)
     */
    authoringInfo: AuthoringInfo;
    /**
     * The renderer type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html#type)
     */
    readonly type: "class-breaks" | "dictionary" | "dot-density" | "heatmap" | "simple" | "unique-value";
  }

  interface RendererConstructor {
    /**
     * Renderers define how to visually represent each feature in one of the following layer types:
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html)
     */

    new (properties?: RendererProperties): Renderer;

    fromJSON(json: any): Renderer;
  }

  export const Renderer: RendererConstructor;

  interface RendererProperties {
    /**
     * Authoring metadata only included in renderers generated from one of the Smart Mapping creator methods, such as [sizeRendererCreator.createContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer) or [colorRendererCreator.createContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html#authoringInfo)
     */
    authoringInfo?: AuthoringInfoProperties;
  }

  interface SimpleRenderer extends Renderer, VisualVariablesMixin {
    /**
     * The label for the renderer.
     *
     * [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.
     *
     * [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 {
    /**
     * SimpleRenderer renders all features in a [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) with one [Symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-SimpleRenderer.html)
     */

    new (properties?: SimpleRendererProperties): SimpleRenderer;

    fromJSON(json: any): SimpleRenderer;
  }

  export const SimpleRenderer: SimpleRendererConstructor;

  interface SimpleRendererProperties extends RendererProperties, VisualVariablesMixinProperties {
    /**
     * The label for the renderer.
     *
     * [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 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 with the 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/arcade/) expression evaluating to a number.
     *
     * [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/arcade/) expression as defined in the [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#valueExpression) 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 {
    /**
     * Defines the symbology for a [DotDensityRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html) in the renderer's [attributes](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html#attributes) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html)
     */

    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 with the 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/arcade/) expression evaluating to a number.
     *
     * [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/arcade/) expression as defined in the [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AttributeColorInfo.html#valueExpression) 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 a classed color or classed size renderer was generated using one of the Smart Mapping functions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#classificationMethod)
     */
    classificationMethod: "equal-interval" | "manual" | "natural-breaks" | "quantile" | "standard-deviation";
    /**
     * 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: supportColorRamp;
    /**
     * A numeric field used for generating a [relationship renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html) along with [field2](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field2).
     *
     * [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-smartMapping-renderers-relationship.html) along with [field1](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field1).
     *
     * [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-smartMapping-renderers-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-smartMapping-renderers-relationship.html).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#lengthUnit)
     */
    lengthUnit:
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "decimal-degrees";
    /**
     * 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-smartMapping-renderers-relationship.html).
     *
     * [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 or classed size renderer that was generated using the `standard-deviation` classification method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#standardDeviationInterval)
     */
    standardDeviationInterval: number;
    /**
     * Only for renderers of type `univariate-color-size` with an `above-and-below` [univariateTheme](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#univariateTheme).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#statistics)
     */
    statistics: AuthoringInfoStatistics;
    /**
     * Indicates the renderer type generated from one of the Smart Mapping functions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#type)
     */
    type:
      | "class-breaks-size"
      | "class-breaks-color"
      | "classed-color"
      | "classed-size"
      | "predominance"
      | "relationship"
      | "univariate-color-size";
    /**
     * Only applicable to [univariateColorSize](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html) renderers with an `above-and-below` [univariateTheme](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#univariateTheme).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#univariateSymbolStyle)
     */
    univariateSymbolStyle:
      | "caret"
      | "circle-caret"
      | "arrow"
      | "circle-arrow"
      | "plus-minus"
      | "circle-plus-minus"
      | "square"
      | "circle"
      | "triangle"
      | "happy-sad"
      | "thumb"
      | "custom";
    /**
     * Only applicable to [univariateColorSize](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html) renderers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#univariateTheme)
     */
    univariateTheme: "high-to-low" | "above" | "below" | "above-and-below";
    /**
     * Contains authoring properties of visual variables generated from one 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 {
    /**
     * Authoring information related to generating renderers and visual variables with the Smart Mapping methods.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html)
     */

    new (properties?: AuthoringInfoProperties): AuthoringInfo;

    fromJSON(json: any): AuthoringInfo;
  }

  export const AuthoringInfo: AuthoringInfoConstructor;

  interface AuthoringInfoProperties {
    /**
     * Indicates which classification method was used if a classed color or classed size renderer was generated using one of the Smart Mapping functions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#classificationMethod)
     */
    classificationMethod?: "equal-interval" | "manual" | "natural-breaks" | "quantile" | "standard-deviation";
    /**
     * 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?: supportColorRampProperties;
    /**
     * A numeric field used for generating a [relationship renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html) along with [field2](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field2).
     *
     * [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-smartMapping-renderers-relationship.html) along with [field1](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field1).
     *
     * [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-smartMapping-renderers-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-smartMapping-renderers-relationship.html).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#lengthUnit)
     */
    lengthUnit?:
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "decimal-degrees";
    /**
     * 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-smartMapping-renderers-relationship.html).
     *
     * [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 or classed size renderer that was generated using the `standard-deviation` classification method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#standardDeviationInterval)
     */
    standardDeviationInterval?: number;
    /**
     * Only for renderers of type `univariate-color-size` with an `above-and-below` [univariateTheme](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#univariateTheme).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#statistics)
     */
    statistics?: AuthoringInfoStatistics;
    /**
     * Indicates the renderer type generated from one of the Smart Mapping functions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#type)
     */
    type?:
      | "class-breaks-size"
      | "class-breaks-color"
      | "classed-color"
      | "classed-size"
      | "predominance"
      | "relationship"
      | "univariate-color-size";
    /**
     * Only applicable to [univariateColorSize](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html) renderers with an `above-and-below` [univariateTheme](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#univariateTheme).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#univariateSymbolStyle)
     */
    univariateSymbolStyle?:
      | "caret"
      | "circle-caret"
      | "arrow"
      | "circle-arrow"
      | "plus-minus"
      | "circle-plus-minus"
      | "square"
      | "circle"
      | "triangle"
      | "happy-sad"
      | "thumb"
      | "custom";
    /**
     * Only applicable to [univariateColorSize](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html) renderers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#univariateTheme)
     */
    univariateTheme?: "high-to-low" | "above" | "below" | "above-and-below";
    /**
     * Contains authoring properties of visual variables generated from one 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`.
     *
     * [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[];
    /**
     * The label used to describe the field or variable in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field1)
     */
    label?: string;
  }

  export interface AuthoringInfoField1ClassBreakInfos extends Object {
    /**
     * The maximum bound of values to visualize in the given field.
     *
     * [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.
     *
     * [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`.
     *
     * [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[];
    /**
     * The label used to describe the field or variable in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field2)
     */
    label?: string;
  }

  export interface AuthoringInfoField2ClassBreakInfos extends Object {
    /**
     * The maximum bound of values to visualize in the given field.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#field2)
     */
    minValue?: number;
  }

  export interface AuthoringInfoStatistics extends Object {
    /**
     * The maximum data value of the attribute represented by the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#statistics)
     */
    max: number;
    /**
     * The minimum data value of the attribute represented by the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfo.html#statistics)
     */
    min: number;
  }

  interface AuthoringInfoVisualVariable extends Accessor, JSONSupport {
    /**
     * If an age or timeline renderer was generated, indicates the end time 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 start time 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 or percentage, this indicates which selection was made.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#style)
     */
    style: "percent" | "percent-of-total" | "ratio";
    /**
     * Indicates the theme selected by the user when generating a renderer or visual variable with one of the Smart Mapping functions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#theme)
     */
    theme: "above" | "below" | "above-and-below" | "centered-on" | "extremes" | "high-to-low";
    /**
     * The type of visual variable generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#type)
     */
    type: "color" | "size" | "opacity";
    /**
     * If an age or timeline renderer was generated, indicates the time units used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#units)
     */
    units: "seconds" | "minutes" | "hours" | "days" | "months" | "years";

    /**
     * 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 {
    /**
     * Contains authoring properties of visual variables generated from one of the Smart Mapping methods or sliders.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html)
     */

    new (properties?: AuthoringInfoVisualVariableProperties): AuthoringInfoVisualVariable;

    fromJSON(json: any): AuthoringInfoVisualVariable;
  }

  export const AuthoringInfoVisualVariable: AuthoringInfoVisualVariableConstructor;

  interface AuthoringInfoVisualVariableProperties {
    /**
     * If an age or timeline renderer was generated, indicates the end time 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 start time 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 or percentage, this indicates which selection was made.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#style)
     */
    style?: "percent" | "percent-of-total" | "ratio";
    /**
     * Indicates the theme selected by the user when generating a renderer or visual variable with one of the Smart Mapping functions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#theme)
     */
    theme?: "above" | "below" | "above-and-below" | "centered-on" | "extremes" | "high-to-low";
    /**
     * The type of visual variable generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#type)
     */
    type?: "color" | "size" | "opacity";
    /**
     * If an age or timeline renderer was generated, indicates the time units used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-AuthoringInfoVisualVariable.html#units)
     */
    units?: "seconds" | "minutes" | "hours" | "days" | "months" | "years";
  }

  interface ClassBreakInfo extends Accessor, JSONSupport {
    /**
     * Describes the data represented by the class break.
     *
     * [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.
     *
     * [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.
     *
     * [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 bounds defined for the class break.
     *
     * [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 {
    /**
     * Defines a class break for a [ClassBreaksRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html)
     */

    new (properties?: ClassBreakInfoProperties): ClassBreakInfo;

    fromJSON(json: any): ClassBreakInfo;
  }

  export const ClassBreakInfo: ClassBreakInfoConstructor;

  interface ClassBreakInfoProperties {
    /**
     * Describes the data represented by the class break.
     *
     * [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.
     *
     * [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.
     *
     * [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 bounds defined for the class break.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ClassBreakInfo.html#symbol)
     */
    symbol?: SymbolProperties;
  }

  interface ColormapInfo extends Accessor, JSONSupport {
    /**
     * The color of a given pixel.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ColormapInfo.html#color)
     */
    color: Color;
    /**
     * The label for a given pixel value and color mapping.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ColormapInfo.html#label)
     */
    label: string;
    /**
     * The raster pixel value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ColormapInfo.html#value)
     */
    value: number;
  }

  interface ColormapInfoConstructor {
    /**
     * The ColormapInfo describes pixel value, RGB colors and labels to color the raster.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ColormapInfo.html)
     */

    new (properties?: ColormapInfoProperties): ColormapInfo;

    fromJSON(json: any): ColormapInfo;
  }

  export const ColormapInfo: ColormapInfoConstructor;

  interface ColormapInfoProperties {
    /**
     * The color of a given pixel.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ColormapInfo.html#color)
     */
    color?: Color;
    /**
     * The label for a given pixel value and color mapping.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ColormapInfo.html#label)
     */
    label?: string;
    /**
     * The raster pixel value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-ColormapInfo.html#value)
     */
    value?: number;
  }

  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.
     *
     * [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 {
    /**
     * This class is used to define an array of objects describing the [HeatmapRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html)'s color ramp and associated intensity value ratios.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-HeatmapColorStop.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-HeatmapColorStop.html#ratio)
     */
    ratio?: number;
  }

  /**
   * Provides a utility method used to deserialize a JSON renderer object returned by the REST API.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-jsonUtils.html)
   */
  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 object generated from an ArcGIS product.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-jsonUtils.html#fromJSON)
     */
    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).
     *
     * [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 {
    /**
     * Defines the symbols to use in 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-support-UniqueValueInfo.html)
     */

    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).
     *
     * [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, VisualVariablesMixin {
    /**
     * 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.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#defaultLabel)
     */
    defaultLabel: string;
    /**
     * The default symbol used to draw a feature whose value is not matched or specified by the renderer.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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 value associated 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/arcade/) expression evaluating to either a string or a number.
     *
     * [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/arcade/) expression as defined in the [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#valueExpression) 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#addUniqueValueInfo)
     */
    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)
     */
    getUniqueValueInfo(graphic: Graphic): Promise<UniqueValueInfo>;
    /**
     * Removes a unique value from the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#removeUniqueValueInfo)
     */
    removeUniqueValueInfo(value: string | number): void;
  }

  interface UniqueValueRendererConstructor {
    /**
     * UniqueValueRenderer allows you to symbolize features in a [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) based on one or more matching string attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html)
     */

    new (properties?: UniqueValueRendererProperties): UniqueValueRenderer;

    fromJSON(json: any): UniqueValueRenderer;
  }

  export const UniqueValueRenderer: UniqueValueRendererConstructor;

  interface UniqueValueRendererProperties extends RendererProperties, VisualVariablesMixinProperties {
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#backgroundFillSymbol)
     */
    backgroundFillSymbol?: FillSymbolProperties | (PolygonSymbol3DProperties & { type: "polygon-3d" });
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#defaultLabel)
     */
    defaultLabel?: string;
    /**
     * The default symbol used to draw a feature whose value is not matched or specified by the renderer.
     *
     * [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.
     *
     * [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.
     *
     * [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 value associated 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/arcade/) expression evaluating to either a string or a number.
     *
     * [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/arcade/) expression as defined in the [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#valueExpression) 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#legendOptions)
     */
    title?: string;
  }

  interface VectorFieldRenderer extends Accessor, JSONSupport {
    /**
     * Attribute field presenting the magnitude.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-VectorFieldRenderer.html#attributeField)
     */
    attributeField: "Magnitude";
    /**
     * Defines the flow direction of the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-VectorFieldRenderer.html#flowRepresentation)
     */
    flowRepresentation: "flow-from" | "flow-to";
    /**
     * Predefined symbol styles used to represent the vector flow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-VectorFieldRenderer.html#style)
     */
    style:
      | "beaufort-ft"
      | "beaufort-km"
      | "beaufort-kn"
      | "beaufort-m"
      | "beaufort-mi"
      | "classified-arrow"
      | "ocean-current-kn"
      | "ocean-current-m"
      | "simple-scalar"
      | "single-arrow"
      | "wind-barb";
    /**
     * Determines the density of the symbols.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-VectorFieldRenderer.html#symbolTileSize)
     */
    symbolTileSize: number;
    /**
     * The type of Renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-VectorFieldRenderer.html#type)
     */
    readonly type: "vector-field";
    /**
     * An array of [VisualVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html) objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-VectorFieldRenderer.html#visualVariables)
     */
    visualVariables: VisualVariable[];

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

  interface VectorFieldRendererConstructor {
    /**
     * The VectorFieldRenderer allows you to display your raster data with vector symbols.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-VectorFieldRenderer.html)
     */

    new (properties?: VectorFieldRendererProperties): VectorFieldRenderer;

    fromJSON(json: any): VectorFieldRenderer;
  }

  export const VectorFieldRenderer: VectorFieldRendererConstructor;

  interface VectorFieldRendererProperties {
    /**
     * Attribute field presenting the magnitude.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-VectorFieldRenderer.html#attributeField)
     */
    attributeField?: "Magnitude";
    /**
     * Defines the flow direction of the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-VectorFieldRenderer.html#flowRepresentation)
     */
    flowRepresentation?: "flow-from" | "flow-to";
    /**
     * Predefined symbol styles used to represent the vector flow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-VectorFieldRenderer.html#style)
     */
    style?:
      | "beaufort-ft"
      | "beaufort-km"
      | "beaufort-kn"
      | "beaufort-m"
      | "beaufort-mi"
      | "classified-arrow"
      | "ocean-current-kn"
      | "ocean-current-m"
      | "simple-scalar"
      | "single-arrow"
      | "wind-barb";
    /**
     * Determines the density of the symbols.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-VectorFieldRenderer.html#symbolTileSize)
     */
    symbolTileSize?: number;
    /**
     * An array of [VisualVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html) objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-VectorFieldRenderer.html#visualVariables)
     */
    visualVariables?: VisualVariableProperties[];
  }

  interface ColorVariable extends VisualVariable, JSONSupport {
    /**
     * Name of the numeric attribute field by which to normalize the data.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html#stops)
     */
    stops: ColorStop[];
    /**
     * The visual variable type.
     *
     * [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 {
    /**
     * The color visual variable is used to visualize features along a continuous color ramp based on the values of a numeric attribute [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html#field) or an [expression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html#valueExpression).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html)
     */

    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 normalize the data.
     *
     * [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.
     *
     * [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 normalize the data.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html#stops)
     */
    stops: OpacityStop[];
    /**
     * The visual variable type.
     *
     * [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 {
    /**
     * The opacity visual variable defines the opacity of each feature's symbol based on a numeric [field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html#field) value or number returned from an [expression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html#valueExpression).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html)
     */

    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 normalize the data.
     *
     * [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.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-RotationVariable.html#axis)
     */
    axis: "heading" | "tilt" | "roll";
    /**
     * Defines the origin and direction of rotation depending on how the angle of rotation was measured.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-RotationVariable.html#rotationType)
     */
    rotationType: "geographic" | "arithmetic";
    /**
     * The visual variable type.
     *
     * [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 {
    /**
     * The rotation visual variable defines how features rendered with [marker symbols](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MarkerSymbol.html) or [text symbols](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html) in a MapView are rotated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-RotationVariable.html)
     */

    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-RotationVariable.html#axis)
     */
    axis?: "heading" | "tilt" | "roll";
    /**
     * Defines the origin and direction of rotation depending on how the angle of rotation was measured.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-RotationVariable.html#rotationType)
     */
    rotationType?: "geographic" | "arithmetic";
  }

  interface SizeVariable extends VisualVariable, JSONSupport {
    /**
     * Only applicable when working in 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-renderers-visualVariables-SizeVariable.html#axis)
     */
    axis: "width" | "depth" | "height" | "width-and-depth" | "all";
    /**
     * 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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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 normalize the data in the given [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#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.
     *
     * [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 widths based on the view scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#target)
     */
    target: string;
    /**
     * The visual variable type.
     *
     * [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 value defined 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) of this visual variable instead of proportionally scaling this axis' value.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueRepresentation)
     */
    valueRepresentation: "radius" | "diameter" | "area" | "width" | "distance";
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueUnit)
     */
    valueUnit:
      | "unknown"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "decimal-degrees";

    /**
     * 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;
    /**
     * Modifies the SizeVariable in place by flipping the sizes in the [stops](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-renderers-visualVariables-SizeVariable.html#flipSizes)
     */
    flipSizes(): void;
  }

  interface SizeVariableConstructor {
    /**
     * The size visual variable defines the size of individual features in a layer based on a numeric (often thematic) value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html)
     */

    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#axis)
     */
    axis?: "width" | "depth" | "height" | "width-and-depth" | "all";
    /**
     * 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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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 normalize the data in the given [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#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.
     *
     * [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 widths based on the view scale.
     *
     * [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 value defined 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) of this visual variable instead of proportionally scaling this axis' value.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueRepresentation)
     */
    valueRepresentation?: "radius" | "diameter" | "area" | "width" | "distance";
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#valueUnit)
     */
    valueUnit?:
      | "unknown"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "decimal-degrees";
  }

  /**
   * Defines a size visual variable with minimum and maximum bounds.
   *
   * [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.
     *
     * [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.
     *
     * [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 as real-world sizes based on a given unit.
   *
   * [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).
     *
     * [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).
     *
     * [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;
  }

  /**
   * Defines icon sizes in a size visual variable based on minimum and maximum bounds similar to the [BoundedMinMax](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#BoundedMinMax) case.
   *
   * [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;
    /**
     * 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;
  }

  /**
   * Defines feature sizes and outline widths in a [size visual variable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#SizeVisualVariable) based on the [MapView.scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#scale).
   *
   * [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;
    /**
     * 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.
     *
     * [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`.
     *
     * [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 a size visual variable.
   *
   * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html#ThematicStops)
     */
    stops: SizeStop[];
  }

  interface ColorSizeStop 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-ColorSizeStop.html#value).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorSizeStop.html#color)
     */
    color: Color;
    /**
     * 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-ColorSizeStop.html#label)
     */
    label: string;
    /**
     * The size value in points used to render features with the given [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorSizeStop.html#value).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorSizeStop.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-ColorSizeStop.html#size) and [color](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorSizeStop.html#color).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorSizeStop.html#value)
     */
    value: number;

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

  interface ColorSizeStopConstructor {
    /**
     * Defines how to data values should be represented in the [ColorSizeSlider](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html) with an associated color and size.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorSizeStop.html)
     */

    new (properties?: ColorSizeStopProperties): ColorSizeStop;

    fromJSON(json: any): ColorSizeStop;
  }

  export const ColorSizeStop: ColorSizeStopConstructor;

  interface ColorSizeStopProperties {
    /**
     * 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-ColorSizeStop.html#value).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorSizeStop.html#color)
     */
    color?: Color | number[] | string;
    /**
     * 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-ColorSizeStop.html#label)
     */
    label?: string;
    /**
     * The size value in points used to render features with the given [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorSizeStop.html#value).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorSizeStop.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-ColorSizeStop.html#size) and [color](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorSizeStop.html#color).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-support-ColorSizeStop.html#value)
     */
    value?: number;
  }

  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 {
    /**
     * Defines a color stop used for creating a continuous color visualization in a [color visual variable](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-renderers-visualVariables-support-ColorStop.html)
     */

    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 {
    /**
     * Defines an opacity stop used for creating a continuous opacity visualization in a [opacity visual variable](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-renderers-visualVariables-support-OpacityStop.html)
     */

    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).
     *
     * [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 {
    /**
     * Defines a size stop used for creating a continuous size visualization in a [size visual variable](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-renderers-visualVariables-support-SizeStop.html)
     */

    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).
     *
     * [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 data values 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 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-VisualVariable.html#legendOptions)
     */
    legendOptions: VisualVariableLegendOptions;
    /**
     * The visual variable type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#type)
     */
    readonly type: "color" | "opacity" | "rotation" | "size";
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression evaluating to a number.
     *
     * [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/arcade/) expression as defined in the [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#valueExpression) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#valueExpressionTitle)
     */
    valueExpressionTitle: string;
  }

  interface VisualVariableConstructor {
    /**
     * The visual variable base class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html)
     */

    new (properties?: VisualVariableProperties): VisualVariable;

    fromJSON(json: any): VisualVariable;
  }

  export const VisualVariable: VisualVariableConstructor;

  interface VisualVariableProperties {
    /**
     * The name of the numeric attribute field that contains the data values 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 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-VisualVariable.html#legendOptions)
     */
    legendOptions?: VisualVariableLegendOptions;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression evaluating to a number.
     *
     * [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/arcade/) expression as defined in the [valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-VisualVariable.html#valueExpression) 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).
     *
     * [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;

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

  /**
   * 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;

  /**
   * 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
    | DictionaryRenderer;

  /**
   * 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;

  /**
   * Retrieves data from a remote server or uploads a file.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html)
   */
  interface request {
    /**
     * Retrieves data from a remote server or uploads a file from a user's computer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest)
     */
    esriRequest(url: string, options?: RequestOptions): Promise<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 raw error object if the server returned a JSON error, or the response text if the server didn't return a 200 response code.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#EsriErrorDetails)
     */
    raw: any | 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions)
     */
    authMode?: "auto" | "anonymous" | "immediate" | "no-prompt";
    /**
     * If uploading a file, specify the form data or element used to submit the file here.
     *
     * [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 the browser's local cache.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions)
     */
    cacheBust?: boolean;
    /**
     * Headers to use for the request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions)
     */
    headers?: any;
    /**
     * Indicates if the request should be made using the HTTP DELETE, HEAD, POST, or PUT method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions)
     */
    method?: "auto" | "delete" | "head" | "post" | "put";
    /**
     * Query parameters for the request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions)
     */
    query?: any;
    /**
     * Response format.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions)
     */
    responseType?: "json" | "text" | "array-buffer" | "blob" | "image" | "native" | "document" | "xml";
    /**
     * [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions)
     */
    signal?: AbortSignal;
    /**
     * Indicates the amount of time in milliseconds to wait for a response from the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestOptions)
     */
    timeout?: number;
    /**
     * Indicates the request should use the proxy.
     *
     * [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.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#RequestResponse)
   */
  export interface RequestResponse extends Object {
    /**
     * The requested data.
     *
     * [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.
     *
     * [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;
  }

  /**
   * Helps you find closest facilities around any location (incident) on a network.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-closestFacility.html)
   */
  interface closestFacility {
    /**
     * Solves the closest facility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-closestFacility.html#solve)
     */
    solve(
      url: string,
      params: supportClosestFacilityParameters,
      requestOptions?: any
    ): Promise<supportClosestFacilitySolveResult>;
  }

  export const closestFacility: closestFacility;

  /**
   * Search a map service exposed by the ArcGIS Server REST API based on a string value.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-find.html)
   */
  interface find {
    /**
     * 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-rest-support-FindParameters.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-find.html#find)
     */
    find(
      url: string,
      params: supportFindParameters | supportFindParametersProperties,
      requestOptions?: any
    ): Promise<any>;
  }

  export const find: find;

  /**
   * A convenience module for importing [geometryService](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html) functions when developing with [TypeScript](https://developers.arcgis.com/javascript/latest/typescript-setup/).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html)
   */
  interface geometryService {
    /**
     * 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-rest-geometryService.html#areasAndLengths)
     */
    areasAndLengths(
      url: string,
      areasAndLengthsParameters: supportAreasAndLengthsParameters,
      requestOptions?: any
    ): Promise<any>;
    /**
     * The Auto Complete operation is performed on a geometry service resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#autoComplete)
     */
    autoComplete(url: string, polygons: Polygon[], polylines: Polyline[], requestOptions?: any): Promise<Polygon>;
    /**
     * Creates buffer polygons at a specified distance around the given geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#buffer)
     */
    buffer(url: string, bufferParameters: supportBufferParameters, requestOptions?: any): Promise<Polygon[]>;
    /**
     * The convexHull operation is performed on a geometry service resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#convexHull)
     */
    convexHull(url: string, geometries: Geometry[], requestOptions?: any): Promise<Geometry>;
    /**
     * The cut operation is performed on a geometry service resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#cut)
     */
    cut(url: string, geometries: Geometry[], cutter: Polyline, requestOptions?: any): Promise<any>;
    /**
     * The densify operation is performed on a geometry service resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#densify)
     */
    densify(url: string, densifyParameters: supportDensifyParameters, requestOptions?: any): Promise<Geometry[]>;
    /**
     * The difference operation is performed on a geometry service resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#difference)
     */
    difference(url: string, geometries: Geometry[], geometry: Geometry, requestOptions?: any): Promise<Geometry>;
    /**
     * Measures the planar or geodesic distance between geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#distance)
     */
    distance(url: string, distanceParameters: supportDistanceParameters, requestOptions?: any): Promise<number>;
    /**
     * Converts an array of well-known strings into xy-coordinates based on the conversion type and spatial reference supplied by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#fromGeoCoordinateString)
     */
    fromGeoCoordinateString(
      url: string,
      params: geometryServiceFromGeoCoordinateStringParams,
      requestOptions?: any
    ): Promise<any>;
    /**
     * Generalizes the input geometries using the Douglas-Peucker algorithm.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#generalize)
     */
    generalize(
      url: string,
      generalizeParameters: supportGeneralizeParameters,
      requestOptions?: any
    ): Promise<Geometry[]>;
    /**
     * The intersect operation is performed on a geometry service resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#intersect)
     */
    intersect(url: string, geometries: Geometry[], intersector: Geometry, requestOptions?: any): Promise<Geometry[]>;
    /**
     * Calculates an interior point for each polygon specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#labelPoints)
     */
    labelPoints(url: string, polygons: Polygon[], requestOptions?: any): Promise<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-rest-geometryService.html#lengths)
     */
    lengths(url: string, lengthsParameters: supportLengthsParameters, requestOptions?: any): Promise<any>;
    /**
     * Constructs the offset of the input geometries based on a planar distance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#offset)
     */
    offset(url: string, offsetParameters: supportOffsetParameters, requestOptions?: any): Promise<Geometry[]>;
    /**
     * Projects a set of geometries to a new spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#project)
     */
    project(url: string, projectParameters: supportProjectParameters, requestOptions?: any): Promise<Geometry[]>;
    /**
     * Computes the set of pairs of geometries from the input geometry arrays that belong to the specified relation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#relation)
     */
    relation(url: string, relationParameters: supportRelationParameters, requestOptions?: any): Promise<Polygon[]>;
    /**
     * The reshape operation is performed on a geometry service resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#reshape)
     */
    reshape(url: string, geometry: Geometry, reshaper: Polyline, requestOptions?: any): Promise<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-rest-geometryService.html#simplify)
     */
    simplify(geometries: Geometry[], requestOptions?: any): Promise<Geometry[]>;
    /**
     * Converts an array of XY-coordinates into well-known strings based on the conversion type and spatial reference supplied by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#toGeoCoordinateString)
     */
    toGeoCoordinateString(
      url: string,
      params: geometryServiceToGeoCoordinateStringParams,
      requestOptions?: any
    ): Promise<string[]>;
    /**
     * Trims or extends the input polylines using the user specified guide polyline.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#trimExtend)
     */
    trimExtend(
      url: string,
      trimExtendParameters: supportTrimExtendParameters,
      requestOptions?: any
    ): Promise<Polyline[]>;
    /**
     * The union operation is performed on a geometry service resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#union)
     */
    union(url: string, geometries: Geometry[], requestOptions?: any): Promise<Geometry>;
  }

  export const geometryService: geometryService;

  export interface geometryServiceFromGeoCoordinateStringParams extends Object {
    /**
     * An array of formatted strings as specified by `conversionType`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#fromGeoCoordinateString)
     */
    strings: string[];
    /**
     * The spatial reference or well-known ID to convert the input string coordinates to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#fromGeoCoordinateString)
     */
    sr: SpatialReference | string | number;
    /**
     * The conversion type of the input strings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#fromGeoCoordinateString)
     */
    conversionType?: "mrgs" | "usng" | "utm" | "geo-ref" | "gars" | "dms" | "ddm" | "dd";
    /**
     * Conversion options for mrgs, utm and gars conversion types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-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-rest-geometryService.html#toGeoCoordinateString)
     */
    coordinates: number[][];
    /**
     * The conversion type of the input strings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#toGeoCoordinateString)
     */
    conversionType: "mgrs" | "usng" | "utm" | "geo-ref" | "gars" | "dms" | "ddm" | "dd";
    /**
     * Conversion options for mgrs and utm conversion types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#toGeoCoordinateString)
     */
    conversionMode?: string;
    /**
     * The number of digits to output for each of the numerical portions in the string.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#toGeoCoordinateString)
     */
    numOfDigits?: number;
    /**
     * If `true`, then numeric portions of the string are rounded to the nearest whole magnitude as specified by `numOfDigits`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#toGeoCoordinateString)
     */
    rounding?: boolean;
    /**
     * If `true`, then spaces are added between components of the string.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geometryService.html#toGeoCoordinateString)
     */
    addSpaces?: boolean;
  }

  /**
   * Represents a GP resource exposed by the ArcGIS REST API.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geoprocessor.html)
   */
  interface geoprocessor {
    /**
     * Sends a request to the server to execute a synchronous GP task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geoprocessor.html#execute)
     */
    execute(url: string, params?: any, options?: GPOptions, requestOptions?: any): Promise<any>;
    /**
     * Submits a job to the server for asynchronous processing by the GP task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geoprocessor.html#submitJob)
     */
    submitJob(url: string, params?: any, options?: GPOptions, requestOptions?: any): Promise<supportJobInfo>;
  }

  export const geoprocessor: geoprocessor;

  /**
   * A convenience module for providing input options for the geoprocessing service return values.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geoprocessor-GPOptions.html)
   */
  interface GPOptions {
    /**
     * The spatial reference of the output geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geoprocessor-GPOptions.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference;
    /**
     * ProcessExtent, if specified, will only process features that overlap this extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geoprocessor-GPOptions.html#processExtent)
     */
    processExtent: Extent;
    /**
     * The spatial reference that the model will use to perform geometry operations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geoprocessor-GPOptions.html#processSpatialReference)
     */
    processSpatialReference: SpatialReference;
    /**
     * If `true`, m-values will be included in the results if the features have m-values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geoprocessor-GPOptions.html#returnM)
     */
    returnM: boolean;
    /**
     * If `true`, z-values will be included in the results if the features have z-values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-geoprocessor-GPOptions.html#returnZ)
     */
    returnZ: boolean;
  }

  export const GPOptions: GPOptions;

  /**
   * Performs an identify operation on the layers of a map service exposed by the ArcGIS Server REST API.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-identify.html)
   */
  interface identify {
    /**
     * 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-rest-support-IdentifyParameters.html) specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-identify.html#identify)
     */
    identify(url: string, params: supportIdentifyParameters, requestOptions?: any): Promise<any>;
  }

  export const identify: identify;

  /**
   * Performs various operations on an image service resource:
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-imageService.html)
   */
  interface imageService {
    /**
     * Computes histograms based on the provided [ImageHistogramParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageHistogramParameters.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-imageService.html#computeHistograms)
     */
    computeHistograms(
      parameters: supportImageHistogramParameters | supportImageHistogramParametersProperties,
      options?: imageServiceComputeHistogramsOptions
    ): Promise<any>;
    /**
     * Computes [statistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#RasterBandStatistics) and [histograms](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#RasterHistogram) for the provided [ImageHistogramParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageHistogramParameters.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-imageService.html#computeStatisticsHistograms)
     */
    computeStatisticsHistograms(
      parameters: supportImageHistogramParameters | supportImageHistogramParametersProperties,
      options?: imageServiceComputeStatisticsHistogramsOptions
    ): Promise<any>;
    /**
     * Get samples from an image service based on the provided [ImageSampleParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-imageService.html#getSamples)
     */
    getSamples(
      parameters: ImageSampleParameters | ImageSampleParametersProperties,
      options?: imageServiceGetSamplesOptions
    ): Promise<any>;
    /**
     * Sends a request to the ArcGIS REST image service resource to identify content based on the [ImageIdentifyParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html) specified in the `params` argument.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-imageService.html#identify)
     */
    identify(params: supportImageIdentifyParameters, requestOptions?: any): Promise<supportImageIdentifyResult>;
  }

  export const imageService: imageService;

  export interface imageServiceComputeHistogramsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-imageService.html#computeHistograms)
     */
    signal?: AbortSignal;
  }

  export interface imageServiceComputeStatisticsHistogramsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-imageService.html#computeStatisticsHistograms)
     */
    signal?: AbortSignal;
  }

  export interface imageServiceGetSamplesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-imageService.html#getSamples)
     */
    signal?: AbortSignal;
  }

  /**
   * A convenience module for importing [locator](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-locator.html) functions when developing with [TypeScript](https://developers.arcgis.com/javascript/latest/typescript-setup/).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-locator.html)
   */
  interface locator {
    /**
     * Find address candidates for multiple input addresses.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-locator.html#addressesToLocations)
     */
    addressesToLocations(
      url: string,
      params: locatorAddressesToLocationsParams,
      requestOptions?: any
    ): Promise<supportAddressCandidate[]>;
    /**
     * 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-rest-locator.html#addressToLocations)
     */
    addressToLocations(
      params: locatorAddressToLocationsParams,
      url: string,
      requestOptions?: any
    ): Promise<supportAddressCandidate[]>;
    /**
     * Locates an address based on a given point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-locator.html#locationToAddress)
     */
    locationToAddress(params: locatorLocationToAddressParams, requestOptions?: any): Promise<supportAddressCandidate>;
    /**
     * Get character by character auto complete suggestions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-locator.html#suggestLocations)
     */
    suggestLocations(
      url: string,
      params: locatorSuggestLocationsParams,
      requestOptions?: any
    ): Promise<LocatorSuggestionResult[]>;
  }

  export const locator: locator;

  export interface locatorAddressesToLocationsParams extends Object {
    /**
     * The input addresses in the format supported by the geocode service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-locator.html#addressesToLocations)
     */
    addresses: any[];
    /**
     * Limits the results to only search in the country provided.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-locator.html#addressesToLocations)
     */
    countryCode?: string;
    /**
     * Limit result to one or more categories.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-locator.html#addressesToLocations)
     */
    locationType?: string;
    /**
     * The spatial reference of the output geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-locator.html#addressesToLocations)
     */
    outSpatialReference?: SpatialReference;
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-locator.html#addressToLocations)
     */
    address: any;
    /**
     * Limit result to one or more categories.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-locator.html#addressToLocations)
     */
    categories?: string[];
    /**
     * Limit result to a specific country.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-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-rest-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-rest-locator.html#addressToLocations)
     */
    locationType?: string;
    /**
     * A `suggestLocations` result ID (magicKey).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-locator.html#addressToLocations)
     */
    magicKey?: string;
    /**
     * Maximum results to return from the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-locator.html#addressToLocations)
     */
    maxLocations?: number;
    /**
     * The list of fields included in the returned result set.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-locator.html#addressToLocations)
     */
    outFields?: string[];
    /**
     * The spatial reference of the output geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-locator.html#addressToLocations)
     */
    outSpatialReference?: SpatialReference;
    /**
     * Defines the extent within which the geocode server will search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-locator.html#addressToLocations)
     */
    searchExtent?: Extent;
  }

  export interface locatorLocationToAddressParams extends Object {
    /**
     * The point at which to search for the closest address.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-locator.html#locationToAddress)
     */
    locationType?: string;
    /**
     * The spatial reference of the output geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-locator.html#locationToAddress)
     */
    outSpatialReference?: SpatialReference;
  }

  export interface locatorSuggestLocationsParams extends Object {
    /**
     * A place or address type which can be used to filter suggest results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-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-rest-locator.html#suggestLocations)
     */
    text: string;
  }

  /**
   * This modules contains functions for working with network services.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-networkService.html)
   */
  interface networkService {
    /**
     * Retrieve a description of the network service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-networkService.html#fetchServiceDescription)
     */
    fetchServiceDescription(url: string, apiKey: string, requestOptions?: any): Promise<any>;
  }

  export const networkService: networkService;

  /**
   * Executes different types of query operations on a layer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query.html)
   */
  interface query {
    /**
     * 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 parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query.html#executeAttachmentQuery)
     */
    executeAttachmentQuery(
      url: string,
      attachmentQuery: supportAttachmentQuery | supportAttachmentQueryProperties,
      requestOptions?: any
    ): Promise<any>;
    /**
     * Gets a count of the number of features that satisfy the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query.html#executeForCount)
     */
    executeForCount(query: supportQuery | supportQueryProperties, requestOptions?: any): Promise<number>;
    /**
     * Gets the extent of the features that satisfy the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query.html#executeForExtent)
     */
    executeForExtent(params: supportQuery, requestOptions?: any): Promise<any>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the layer specified in the url parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query.html#executeForIds)
     */
    executeForIds(url: string, query: supportQuery | supportQueryProperties, requestOptions?: any): Promise<number[]>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the layer specified in the url parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query.html#executeQueryJSON)
     */
    executeQueryJSON(
      url: string,
      query: supportQuery | supportQueryProperties,
      requestOptions?: any
    ): Promise<supportFeatureSet>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against the layer specified in the url parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query.html#executeQueryPBF)
     */
    executeQueryPBF(
      url: string,
      query: supportQuery | supportQueryProperties,
      requestOptions?: any
    ): Promise<supportFeatureSet>;
    /**
     * Executes a [RelationshipQuery](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html) against the layer or table specified in the url parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query.html#executeRelationshipQuery)
     */
    executeRelationshipQuery(
      url: string,
      relationshipQuery: supportRelationshipQuery | supportRelationshipQueryProperties,
      requestOptions?: any
    ): Promise<any>;
  }

  export const query: query;

  interface supportAttachmentInfo extends Accessor, JSONSupport {
    /**
     * The content type of the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#contentType)
     */
    contentType: string;
    /**
     * An array of [ExifInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#ExifInfo) for the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#exifInfo)
     */
    exifInfo: ExifInfo[];
    /**
     * The global identifier for the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#globalId)
     */
    globalId: string;
    /**
     * The identifier for the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#id)
     */
    id: number;
    /**
     * Keywords used for the attachments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-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-rest-query-support-AttachmentInfo.html#name)
     */
    name: string;
    /**
     * The [OrientationInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#OrientationInfo) for the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#orientationInfo)
     */
    readonly orientationInfo: OrientationInfo;
    /**
     * The parent or the feature global id of the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#parentGlobalId)
     */
    parentGlobalId: number;
    /**
     * The parent or the feature object id of the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#parentObjectId)
     */
    parentObjectId: number;
    /**
     * The file size of the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#size)
     */
    size: number;
    /**
     * The URL of the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-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-rest-query-support-AttachmentInfo.html#clone)
     */
    clone(): supportAttachmentInfo;
  }

  interface supportAttachmentInfoConstructor {
    /**
     * The `AttachmentInfo` class returns information about attachments associated with a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html)
     */

    new (properties?: supportAttachmentInfoProperties): supportAttachmentInfo;

    fromJSON(json: any): supportAttachmentInfo;
  }

  export const supportAttachmentInfo: supportAttachmentInfoConstructor;

  interface supportAttachmentInfoProperties {
    /**
     * The content type of the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#contentType)
     */
    contentType?: string;
    /**
     * An array of [ExifInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#ExifInfo) for the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#exifInfo)
     */
    exifInfo?: ExifInfo[];
    /**
     * The global identifier for the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#globalId)
     */
    globalId?: string;
    /**
     * The identifier for the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#id)
     */
    id?: number;
    /**
     * Keywords used for the attachments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-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-rest-query-support-AttachmentInfo.html#name)
     */
    name?: string;
    /**
     * The parent or the feature global id of the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#parentGlobalId)
     */
    parentGlobalId?: number;
    /**
     * The parent or the feature object id of the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#parentObjectId)
     */
    parentObjectId?: number;
    /**
     * The file size of the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#size)
     */
    size?: number;
    /**
     * The URL of the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#url)
     */
    url?: string;
  }

  /**
   * An array of [Exchangeable image file format](https://en.wikipedia.org/wiki/Exif) information for the attachment.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#ExifInfo)
   */
  export interface ExifInfo extends Object {
    /**
     * The file name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-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-rest-query-support-AttachmentInfo.html#ExifInfo)
     */
    tags?: ExifInfoTags[];
  }

  /**
   * An object containing properties specific to the orientation of an image attachment.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-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-rest-query-support-AttachmentInfo.html#OrientationInfo)
     */
    id?: number;
    /**
     * The rotation value for the attached image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#OrientationInfo)
     */
    rotation?: number;
    /**
     * Indicates whether the image displays mirrored.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-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-rest-query-support-AttachmentInfo.html#ExifInfo)
     */
    name: string;
    /**
     * The tag description.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#ExifInfo)
     */
    description: string;
    /**
     * The value of the tag.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#ExifInfo)
     */
    value: any;
  }

  /**
   * Find routes between two or more locations and optionally get driving directions.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-route.html)
   */
  interface route {
    /**
     * Solves the route against the route layer with the route parameters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-route.html#solve)
     */
    solve(url: string, params: supportRouteParameters, requestOptions?: any): Promise<supportRouteResult>;
  }

  export const route: route;

  /**
   * ServiceAreaTask helps you find service areas around any location on a network.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-serviceArea.html)
   */
  interface serviceArea {
    /**
     * Determines the service area based on a set of parameters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-serviceArea.html#solve)
     */
    solve(
      url: string,
      params: supportServiceAreaParameters,
      requestOptions?: any
    ): Promise<supportServiceAreaSolveResult>;
  }

  export const serviceArea: serviceArea;

  interface supportAddressCandidate extends Accessor, JSONSupport {
    /**
     * Address of the candidate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-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-rest-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-rest-support-AddressCandidate.html#address).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AddressCandidate.html#location)
     */
    location: Point;
    /**
     * Numeric score between `0` and `100` for geocode candidates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AddressCandidate.html#score)
     */
    score: number;
  }

  interface supportAddressCandidateConstructor {
    /**
     * Represents an address and its location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AddressCandidate.html)
     */

    new (properties?: supportAddressCandidateProperties): supportAddressCandidate;

    fromJSON(json: any): supportAddressCandidate;
  }

  export const supportAddressCandidate: supportAddressCandidateConstructor;

  interface supportAddressCandidateProperties {
    /**
     * Address of the candidate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-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-rest-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-rest-support-AddressCandidate.html#address).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AddressCandidate.html#location)
     */
    location?: PointProperties;
    /**
     * Numeric score between `0` and `100` for geocode candidates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AddressCandidate.html#score)
     */
    score?: number;
  }

  interface supportAlgorithmicColorRamp extends supportColorRamp {
    /**
     * The algorithm used to generate the colors between the `fromColor` and `toColor`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-AlgorithmicColorRamp.html#fromColor)
     */
    fromColor: Color;
    /**
     * The last color in the color ramp.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AlgorithmicColorRamp.html#toColor)
     */
    toColor: Color;
    /**
     * A string value representing the color ramp type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AlgorithmicColorRamp.html#type)
     */
    readonly type: "algorithmic";

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

  interface supportAlgorithmicColorRampConstructor {
    /**
     * Create an algorithmic color ramp to define the range of colors used in the renderer generated by the GenerateRendererTask.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AlgorithmicColorRamp.html)
     */

    new (properties?: supportAlgorithmicColorRampProperties): supportAlgorithmicColorRamp;

    fromJSON(json: any): supportAlgorithmicColorRamp;
  }

  export const supportAlgorithmicColorRamp: supportAlgorithmicColorRampConstructor;

  interface supportAlgorithmicColorRampProperties extends supportColorRampProperties {
    /**
     * The algorithm used to generate the colors between the `fromColor` and `toColor`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-AlgorithmicColorRamp.html#fromColor)
     */
    fromColor?: Color;
    /**
     * The last color in the color ramp.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AlgorithmicColorRamp.html#toColor)
     */
    toColor?: Color;
  }

  interface supportAreasAndLengthsParameters extends Accessor, JSONSupport {
    /**
     * The area unit in which areas of polygons will be calculated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AreasAndLengthsParameters.html#areaUnit)
     */
    areaUnit:
      | "acres"
      | "hectares"
      | "square-miles"
      | "square-kilometers"
      | "square-meters"
      | "square-feet"
      | "square-yards";
    /**
     * Defines the type of calculation for the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AreasAndLengthsParameters.html#calculationType)
     */
    calculationType: "planar" | "geodesic" | "preserve-shape";
    /**
     * The length unit in which perimeters of polygons will be calculated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AreasAndLengthsParameters.html#lengthUnit)
     */
    lengthUnit: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
    /**
     * Polygon geometries for which to compute areas and lengths.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AreasAndLengthsParameters.html#polygons)
     */
    polygons: Polygon[];
  }

  interface supportAreasAndLengthsParametersConstructor {
    /**
     * Input parameters for the areasAndLengths() method on the GeometryService.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AreasAndLengthsParameters.html)
     */

    new (properties?: supportAreasAndLengthsParametersProperties): supportAreasAndLengthsParameters;

    fromJSON(json: any): supportAreasAndLengthsParameters;
  }

  export const supportAreasAndLengthsParameters: supportAreasAndLengthsParametersConstructor;

  interface supportAreasAndLengthsParametersProperties {
    /**
     * The area unit in which areas of polygons will be calculated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AreasAndLengthsParameters.html#areaUnit)
     */
    areaUnit?:
      | "acres"
      | "hectares"
      | "square-miles"
      | "square-kilometers"
      | "square-meters"
      | "square-feet"
      | "square-yards";
    /**
     * Defines the type of calculation for the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AreasAndLengthsParameters.html#calculationType)
     */
    calculationType?: "planar" | "geodesic" | "preserve-shape";
    /**
     * The length unit in which perimeters of polygons will be calculated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AreasAndLengthsParameters.html#lengthUnit)
     */
    lengthUnit?: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
    /**
     * Polygon geometries for which to compute areas and lengths.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AreasAndLengthsParameters.html#polygons)
     */
    polygons?: PolygonProperties[];
  }

  interface supportAttachmentQuery extends Accessor, JSONSupport {
    /**
     * The where clause to be applied to attachment queries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#attachmentsWhere)
     */
    attachmentsWhere: string;
    /**
     * The file format that is supported by query attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#attachmentTypes)
     */
    attachmentTypes: string[];
    /**
     * An array of globalIds for the features in the layer being queried.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#globalIds)
     */
    globalIds: number[];
    /**
     * Used to query for attachments that match the provided `keywords`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#keywords)
     */
    keywords: string[];
    /**
     * Used to query for attachments that match this `name`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#name)
     */
    name: string;
    /**
     * The number of features to retrieve.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#num)
     */
    num: number;
    /**
     * An array of objectIds of the features to be queried for attachments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#objectIds)
     */
    objectIds: number[];
    /**
     * If `true`, the [Exchangeable image file format](https://en.wikipedia.org/wiki/Exif) for the attachment will be included in [attachmentInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#exifInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#returnMetadata)
     */
    returnMetadata: boolean;
    /**
     * The file size of the attachment is specified in bytes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#size)
     */
    size: number[];
    /**
     * This option fetches query results by skipping a specified number of records.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#start)
     */
    start: number;
    /**
     * The `where` clause to be applied to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#where)
     */
    where: string;

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

  interface supportAttachmentQueryConstructor {
    /**
     * This class defines parameters for executing queries for feature attachments from a [feature layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html)
     */

    new (properties?: supportAttachmentQueryProperties): supportAttachmentQuery;

    fromJSON(json: any): supportAttachmentQuery;
  }

  export const supportAttachmentQuery: supportAttachmentQueryConstructor;

  interface supportAttachmentQueryProperties {
    /**
     * The where clause to be applied to attachment queries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#attachmentsWhere)
     */
    attachmentsWhere?: string;
    /**
     * The file format that is supported by query attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#attachmentTypes)
     */
    attachmentTypes?: string[];
    /**
     * An array of globalIds for the features in the layer being queried.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#globalIds)
     */
    globalIds?: number[];
    /**
     * Used to query for attachments that match the provided `keywords`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#keywords)
     */
    keywords?: string[];
    /**
     * Used to query for attachments that match this `name`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#name)
     */
    name?: string;
    /**
     * The number of features to retrieve.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#num)
     */
    num?: number;
    /**
     * An array of objectIds of the features to be queried for attachments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#objectIds)
     */
    objectIds?: number[];
    /**
     * If `true`, the [Exchangeable image file format](https://en.wikipedia.org/wiki/Exif) for the attachment will be included in [attachmentInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#exifInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#returnMetadata)
     */
    returnMetadata?: boolean;
    /**
     * The file size of the attachment is specified in bytes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#size)
     */
    size?: number[];
    /**
     * This option fetches query results by skipping a specified number of records.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#start)
     */
    start?: number;
    /**
     * The `where` clause to be applied to the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttachmentQuery.html#where)
     */
    where?: string;
  }

  interface supportBufferParameters extends Accessor {
    /**
     * The spatial reference in which the geometries are buffered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-BufferParameters.html#bufferSpatialReference)
     */
    bufferSpatialReference: SpatialReference;
    /**
     * The distances the input features are buffered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-BufferParameters.html#distances)
     */
    distances: number[];
    /**
     * If the input geometries are in a geographic coordinate system, set geodesic to `true` to generate a buffer polygon using a geodesic distance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-BufferParameters.html#geodesic)
     */
    geodesic: boolean;
    /**
     * The input geometries to buffer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-BufferParameters.html#geometries)
     */
    geometries: Geometry[];
    /**
     * The spatial reference for the returned geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-BufferParameters.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference;
    /**
     * If `true`, all geometries buffered at a given distance are unioned into a single (possibly multipart) polygon, and the unioned geometry is placed in the output array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-BufferParameters.html#unionResults)
     */
    unionResults: boolean;
    /**
     * The units for calculating each buffer distance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-BufferParameters.html#unit)
     */
    unit: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";

    /**
     * Converts an instance of  this class to its ArcGIS portal JSON representation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-BufferParameters.html#toJSON)
     */
    toJSON(): any;
  }

  interface supportBufferParametersConstructor {
    /**
     * Sets the distances, units, and other parameters for the [buffer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#buffer) method on the [GeometryService](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-BufferParameters.html)
     */

    new (properties?: supportBufferParametersProperties): supportBufferParameters;
  }

  export const supportBufferParameters: supportBufferParametersConstructor;

  interface supportBufferParametersProperties {
    /**
     * The spatial reference in which the geometries are buffered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-BufferParameters.html#bufferSpatialReference)
     */
    bufferSpatialReference?: SpatialReferenceProperties;
    /**
     * The distances the input features are buffered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-BufferParameters.html#distances)
     */
    distances?: number[];
    /**
     * If the input geometries are in a geographic coordinate system, set geodesic to `true` to generate a buffer polygon using a geodesic distance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-BufferParameters.html#geodesic)
     */
    geodesic?: boolean;
    /**
     * The input geometries to buffer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-BufferParameters.html#geometries)
     */
    geometries?: GeometryProperties[];
    /**
     * The spatial reference for the returned geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-BufferParameters.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties;
    /**
     * If `true`, all geometries buffered at a given distance are unioned into a single (possibly multipart) polygon, and the unioned geometry is placed in the output array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-BufferParameters.html#unionResults)
     */
    unionResults?: boolean;
    /**
     * The units for calculating each buffer distance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-BufferParameters.html#unit)
     */
    unit?: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
  }

  interface supportClosestFacilityParameters 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#accumulateAttributes)
     */
    accumulateAttributes: string[];
    /**
     * An array of attribute parameter values that determine which network elements can be used by a vehicle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#attributeParameterValues)
     */
    attributeParameterValues: supportClosestFacilityParametersAttributeParameterValues[];
    /**
     * The cutoff value used to determine when to stop traversing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#defaultCutoff)
     */
    defaultCutoff: number;
    /**
     * The number of facilities to find.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#defaultTargetFacilityCount)
     */
    defaultTargetFacilityCount: number;
    /**
     * The language used when generating driving directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#directionsLanguage)
     */
    directionsLanguage: string;
    /**
     * The length units used when computing driving directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#directionsOutputType)
     */
    directionsOutputType: "complete" | "complete-no-events" | "instructions-only" | "standard" | "summary-only";
    /**
     * The style to be used when returning directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#directionsStyleName)
     */
    directionsStyleName: string;
    /**
     * The name of the attribute field that contains the drive time values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-ClosestFacilityParameters.html#doNotLocateOnRestrictedElements)
     */
    doNotLocateOnRestrictedElements: boolean;
    /**
     * The set of facilities loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#facilities)
     */
    facilities: supportDataLayer | supportFeatureSet;
    /**
     * The network attribute name used as the impedance attribute in analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#impedanceAttribute)
     */
    impedanceAttribute: string;
    /**
     * The set of incidents loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#incidents)
     */
    incidents: supportDataLayer | supportFeatureSet;
    /**
     * The output geometry precision.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#outputGeometryPrecision)
     */
    outputGeometryPrecision: number;
    /**
     * The units of the output geometry precision.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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 returned with the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference | string;
    /**
     * The set of point barriers loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#pointBarriers)
     */
    pointBarriers: supportDataLayer | supportFeatureSet;
    /**
     * The set of polygon barriers loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#polygonBarriers)
     */
    polygonBarriers: supportDataLayer | supportFeatureSet;
    /**
     * The set of polyline barriers loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#polylineBarriers)
     */
    polylineBarriers: supportDataLayer | supportFeatureSet;
    /**
     * The list of network attribute names to be used as restrictions with the analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#restrictionAttributes)
     */
    restrictionAttributes: string[];
    /**
     * Specifies how U-Turns should be handled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-ClosestFacilityParameters.html#returnDirections)
     */
    returnDirections: boolean;
    /**
     * If `true`, facilities will be returned with the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#returnFacilities)
     */
    returnFacilities: boolean;
    /**
     * If `true`, incidents will be returned with the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#returnIncidents)
     */
    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-rest-support-ClosestFacilitySolveResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#returnPointBarriers)
     */
    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-rest-support-ClosestFacilitySolveResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#returnPolygonBarriers)
     */
    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-rest-support-ClosestFacilitySolveResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#returnPolylineBarriers)
     */
    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-rest-support-ClosestFacilitySolveResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#returnRoutes)
     */
    returnRoutes: boolean;
    /**
     * The arrival or departure date and time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#timeOfDay)
     */
    timeOfDay: Date;
    /**
     * Defines the way the `timeOfDay` value is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#timeOfDayUsage)
     */
    timeOfDayUsage: "start" | "end";
    /**
     * Options for traveling to or from the facility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#travelDirection)
     */
    travelDirection: "from-facility" | "to-facility";
    /**
     * A travel mode represents a means of transportation, such as driving or walking.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#travelMode)
     */
    travelMode: TravelMode;
    /**
     * If `true`, the hierarchy attribute for the network will be used in analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#useHierarchy)
     */
    useHierarchy: boolean;
  }

  interface supportClosestFacilityParametersConstructor {
    /**
     * Input parameters for [ClosestFacilityTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ClosestFacilityTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html)
     */

    new (properties?: supportClosestFacilityParametersProperties): supportClosestFacilityParameters;

    fromJSON(json: any): supportClosestFacilityParameters;
  }

  export const supportClosestFacilityParameters: supportClosestFacilityParametersConstructor;

  interface supportClosestFacilityParametersProperties {
    /**
     * The list of network attribute names to be accumulated with the analysis, i.e., which attributes should be returned as part of the response.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#accumulateAttributes)
     */
    accumulateAttributes?: string[];
    /**
     * An array of attribute parameter values that determine which network elements can be used by a vehicle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#attributeParameterValues)
     */
    attributeParameterValues?: supportClosestFacilityParametersAttributeParameterValues[];
    /**
     * The cutoff value used to determine when to stop traversing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#defaultCutoff)
     */
    defaultCutoff?: number;
    /**
     * The number of facilities to find.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#defaultTargetFacilityCount)
     */
    defaultTargetFacilityCount?: number;
    /**
     * The language used when generating driving directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#directionsLanguage)
     */
    directionsLanguage?: string;
    /**
     * The length units used when computing driving directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#directionsOutputType)
     */
    directionsOutputType?: "complete" | "complete-no-events" | "instructions-only" | "standard" | "summary-only";
    /**
     * The style to be used when returning directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#directionsStyleName)
     */
    directionsStyleName?: string;
    /**
     * The name of the attribute field that contains the drive time values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-ClosestFacilityParameters.html#doNotLocateOnRestrictedElements)
     */
    doNotLocateOnRestrictedElements?: boolean;
    /**
     * The set of facilities loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#facilities)
     */
    facilities?: (supportDataLayerProperties & { type: "layer" }) | supportFeatureSetProperties;
    /**
     * The network attribute name used as the impedance attribute in analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#impedanceAttribute)
     */
    impedanceAttribute?: string;
    /**
     * The set of incidents loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#incidents)
     */
    incidents?: (supportDataLayerProperties & { type: "layer" }) | supportFeatureSetProperties;
    /**
     * The output geometry precision.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#outputGeometryPrecision)
     */
    outputGeometryPrecision?: number;
    /**
     * The units of the output geometry precision.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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 returned with the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties | string;
    /**
     * The set of point barriers loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#pointBarriers)
     */
    pointBarriers?: (supportDataLayerProperties & { type: "layer" }) | supportFeatureSetProperties;
    /**
     * The set of polygon barriers loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#polygonBarriers)
     */
    polygonBarriers?: (supportDataLayerProperties & { type: "layer" }) | supportFeatureSetProperties;
    /**
     * The set of polyline barriers loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#polylineBarriers)
     */
    polylineBarriers?: (supportDataLayerProperties & { type: "layer" }) | supportFeatureSetProperties;
    /**
     * The list of network attribute names to be used as restrictions with the analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#restrictionAttributes)
     */
    restrictionAttributes?: string[];
    /**
     * Specifies how U-Turns should be handled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-ClosestFacilityParameters.html#returnDirections)
     */
    returnDirections?: boolean;
    /**
     * If `true`, facilities will be returned with the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#returnFacilities)
     */
    returnFacilities?: boolean;
    /**
     * If `true`, incidents will be returned with the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#returnIncidents)
     */
    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-rest-support-ClosestFacilitySolveResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#returnPointBarriers)
     */
    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-rest-support-ClosestFacilitySolveResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#returnPolygonBarriers)
     */
    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-rest-support-ClosestFacilitySolveResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#returnPolylineBarriers)
     */
    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-rest-support-ClosestFacilitySolveResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#returnRoutes)
     */
    returnRoutes?: boolean;
    /**
     * The arrival or departure date and time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#timeOfDay)
     */
    timeOfDay?: DateProperties;
    /**
     * Defines the way the `timeOfDay` value is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#timeOfDayUsage)
     */
    timeOfDayUsage?: "start" | "end";
    /**
     * Options for traveling to or from the facility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#travelDirection)
     */
    travelDirection?: "from-facility" | "to-facility";
    /**
     * A travel mode represents a means of transportation, such as driving or walking.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#travelMode)
     */
    travelMode?: TravelModeProperties;
    /**
     * If `true`, the hierarchy attribute for the network will be used in analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#useHierarchy)
     */
    useHierarchy?: boolean;
  }

  export interface supportClosestFacilityParametersAttributeParameterValues extends Object {
    /**
     * The name of the attribute.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#attributeParameterValues)
     */
    attributeName: string;
    /**
     * The parameter name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#attributeParameterValues)
     */
    parameterName: string;
    /**
     * The parameter value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html#attributeParameterValues)
     */
    value: string;
  }

  interface supportClosestFacilitySolveResult extends Accessor, JSONSupport {
    /**
     * An array of directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilitySolveResult.html#directions)
     */
    directions: supportDirectionsFeatureSet[];
    /**
     * An array of points representing facilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilitySolveResult.html#facilities)
     */
    facilities: Point[];
    /**
     * An array of points representing incidents.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilitySolveResult.html#incidents)
     */
    incidents: Point[];
    /**
     * Message received when the solve is complete.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilitySolveResult.html#messages)
     */
    messages: supportNAMessage[];
    /**
     * The point barriers are an array of points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilitySolveResult.html#pointBarriers)
     */
    pointBarriers: Point[];
    /**
     * The polygon barriers are an array of polygons.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilitySolveResult.html#polygonBarriers)
     */
    polygonBarriers: Polygon[];
    /**
     * The polyline barriers are an array of polylines.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilitySolveResult.html#polylineBarriers)
     */
    polylineBarriers: Polyline[];
    /**
     * The array of graphics representing routes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilitySolveResult.html#routes)
     */
    routes: Graphic[];
  }

  interface supportClosestFacilitySolveResultConstructor {
    /**
     * The result from module:esri/rest/ClosestFacilityTask.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilitySolveResult.html)
     */

    new (properties?: supportClosestFacilitySolveResultProperties): supportClosestFacilitySolveResult;

    fromJSON(json: any): supportClosestFacilitySolveResult;
  }

  export const supportClosestFacilitySolveResult: supportClosestFacilitySolveResultConstructor;

  interface supportClosestFacilitySolveResultProperties {
    /**
     * An array of directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilitySolveResult.html#directions)
     */
    directions?: supportDirectionsFeatureSetProperties[];
    /**
     * An array of points representing facilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilitySolveResult.html#facilities)
     */
    facilities?: PointProperties[];
    /**
     * An array of points representing incidents.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilitySolveResult.html#incidents)
     */
    incidents?: PointProperties[];
    /**
     * Message received when the solve is complete.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilitySolveResult.html#messages)
     */
    messages?: supportNAMessageProperties[];
    /**
     * The point barriers are an array of points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilitySolveResult.html#pointBarriers)
     */
    pointBarriers?: PointProperties[];
    /**
     * The polygon barriers are an array of polygons.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilitySolveResult.html#polygonBarriers)
     */
    polygonBarriers?: PolygonProperties[];
    /**
     * The polyline barriers are an array of polylines.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilitySolveResult.html#polylineBarriers)
     */
    polylineBarriers?: PolylineProperties[];
    /**
     * The array of graphics representing routes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilitySolveResult.html#routes)
     */
    routes?: GraphicProperties[];
  }

  interface supportColorRamp extends Accessor, JSONSupport {
    /**
     * A string value representing the color ramp type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ColorRamp.html#type)
     */
    readonly type: "algorithmic" | "multipart";
  }

  interface supportColorRampConstructor {
    /**
     * A ColorRamp object is used to specify a range of colors that are applied to a group of symbols or pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ColorRamp.html)
     */

    new (properties?: supportColorRampProperties): supportColorRamp;

    fromJSON(json: any): supportColorRamp;
  }

  export const supportColorRamp: supportColorRampConstructor;

  interface supportColorRampProperties {}

  interface supportDataFile extends Accessor, JSONSupport {
    /**
     * The ID of the uploaded file returned as a result of the upload operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-DataFile.html#url)
     */
    url: string;
  }

  interface supportDataFileConstructor {
    /**
     * A geoprocessing data object containing a data source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DataFile.html)
     */

    new (properties?: supportDataFileProperties): supportDataFile;

    fromJSON(json: any): supportDataFile;
  }

  export const supportDataFile: supportDataFileConstructor;

  interface supportDataFileProperties {
    /**
     * The ID of the uploaded file returned as a result of the upload operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-DataFile.html#url)
     */
    url?: string;
  }

  interface supportDataLayer extends Accessor, JSONSupport {
    /**
     * The geometry to apply to the spatial filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-DataLayer.html#name)
     */
    name: string;
    /**
     * The spatial relationship to be applied on the input geometry while performing the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DataLayer.html#spatialRelationship)
     */
    spatialRelationship:
      | "intersects"
      | "contains"
      | "crosses"
      | "envelope-intersects"
      | "index-intersects"
      | "overlaps"
      | "touches"
      | "within"
      | "relation";

    type: "layer";
    /**
     * A where clause for the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DataLayer.html#where)
     */
    where: string;
  }

  interface supportDataLayerConstructor {
    /**
     * Input for properties of ClosestFacilityParameters, RouteParameters or ServiceAreaParameters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DataLayer.html)
     */

    new (properties?: supportDataLayerProperties): supportDataLayer;

    fromJSON(json: any): supportDataLayer;
  }

  export const supportDataLayer: supportDataLayerConstructor;

  interface supportDataLayerProperties {
    /**
     * The geometry to apply to the spatial filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-DataLayer.html#name)
     */
    name?: string;
    /**
     * The spatial relationship to be applied on the input geometry while performing the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DataLayer.html#spatialRelationship)
     */
    spatialRelationship?:
      | "intersects"
      | "contains"
      | "crosses"
      | "envelope-intersects"
      | "index-intersects"
      | "overlaps"
      | "touches"
      | "within"
      | "relation";

    type?: "layer";
    /**
     * A where clause for the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DataLayer.html#where)
     */
    where?: string;
  }

  interface supportDensifyParameters extends Accessor {
    /**
     * If `true`, Geographic Coordinate System spatial references are used or densify geodesic will be performed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DensifyParameters.html#geodesic)
     */
    geodesic: boolean;
    /**
     * The array of geometries to be densified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DensifyParameters.html#geometries)
     */
    geometries: Geometry[];
    /**
     * The length unit of `maxSegmentLength`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DensifyParameters.html#lengthUnit)
     */
    lengthUnit: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
    /**
     * All segments longer than `maxSegmentLength` are replaced with sequences of lines no longer than `maxSegmentLength.`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DensifyParameters.html#maxSegmentLength)
     */
    maxSegmentLength: number;

    /**
     * Converts an instance of  this class to its ArcGIS portal JSON representation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DensifyParameters.html#toJSON)
     */
    toJSON(): any;
  }

  interface supportDensifyParametersConstructor {
    /**
     * Input parameters for the densify() method on the GeometryService.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DensifyParameters.html)
     */

    new (properties?: supportDensifyParametersProperties): supportDensifyParameters;
  }

  export const supportDensifyParameters: supportDensifyParametersConstructor;

  interface supportDensifyParametersProperties {
    /**
     * If `true`, Geographic Coordinate System spatial references are used or densify geodesic will be performed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DensifyParameters.html#geodesic)
     */
    geodesic?: boolean;
    /**
     * The array of geometries to be densified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DensifyParameters.html#geometries)
     */
    geometries?: GeometryProperties[];
    /**
     * The length unit of `maxSegmentLength`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DensifyParameters.html#lengthUnit)
     */
    lengthUnit?: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
    /**
     * All segments longer than `maxSegmentLength` are replaced with sequences of lines no longer than `maxSegmentLength.`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DensifyParameters.html#maxSegmentLength)
     */
    maxSegmentLength?: number;
  }

  interface supportDirectionsFeatureSet extends supportFeatureSet, Accessor {
    /**
     * The extent of the route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DirectionsFeatureSet.html#extent)
     */
    extent: Extent;
    /**
     * The geometry type of the FeatureSet.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DirectionsFeatureSet.html#geometryType)
     */
    geometryType: "polyline";
    /**
     * A single polyline representing the route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-DirectionsFeatureSet.html#routeId)
     */
    routeId: string;
    /**
     * Name specified in [RouteParameters.stops](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#stops).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-RouteParameters.html#directionsOutputType).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DirectionsFeatureSet.html#strings)
     */
    strings: any[];
    /**
     * Actual drive time calculated for the route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-RouteParameters.html#directionsLengthUnits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-RouteParameters.html#directionsTimeAttribute).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DirectionsFeatureSet.html#totalTime)
     */
    totalTime: number;
  }

  interface supportDirectionsFeatureSetConstructor {
    /**
     * A [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html) that has properties specific to routing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DirectionsFeatureSet.html)
     */

    new (properties?: supportDirectionsFeatureSetProperties): supportDirectionsFeatureSet;

    fromJSON(json: any): supportDirectionsFeatureSet;
  }

  export const supportDirectionsFeatureSet: supportDirectionsFeatureSetConstructor;

  interface supportDirectionsFeatureSetProperties extends supportFeatureSetProperties {
    /**
     * The extent of the route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DirectionsFeatureSet.html#extent)
     */
    extent?: ExtentProperties;
    /**
     * The geometry type of the FeatureSet.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DirectionsFeatureSet.html#geometryType)
     */
    geometryType?: "polyline";
    /**
     * A single polyline representing the route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-DirectionsFeatureSet.html#routeId)
     */
    routeId?: string;
    /**
     * Name specified in [RouteParameters.stops](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#stops).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-RouteParameters.html#directionsOutputType).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DirectionsFeatureSet.html#strings)
     */
    strings?: any[];
    /**
     * Actual drive time calculated for the route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-RouteParameters.html#directionsLengthUnits).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-RouteParameters.html#directionsTimeAttribute).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DirectionsFeatureSet.html#totalTime)
     */
    totalTime?: number;
  }

  interface supportDistanceParameters extends Accessor {
    /**
     * Specifies the units for measuring distance between [geometry1](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DistanceParameters.html#geometry1) and [geometry2](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DistanceParameters.html#geometry2).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DistanceParameters.html#distanceUnit)
     */
    distanceUnit: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
    /**
     * When `true`, the geodesic distance between [geometry1](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DistanceParameters.html#geometry1) and [geometry2](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DistanceParameters.html#geometry2) is measured.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DistanceParameters.html#geodesic)
     */
    geodesic: boolean;
    /**
     * The geometry from which the distance is to be measured.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DistanceParameters.html#geometry1)
     */
    geometry1: Geometry;
    /**
     * The geometry to which the distance is to be measured.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DistanceParameters.html#geometry2)
     */
    geometry2: Geometry;

    /**
     * Converts an instance of  this class to its ArcGIS portal JSON representation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DistanceParameters.html#toJSON)
     */
    toJSON(): any;
  }

  interface supportDistanceParametersConstructor {
    /**
     * Defines the input parameters when calling [GeometryService.distance()](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#distance).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DistanceParameters.html)
     */

    new (properties?: supportDistanceParametersProperties): supportDistanceParameters;
  }

  export const supportDistanceParameters: supportDistanceParametersConstructor;

  interface supportDistanceParametersProperties {
    /**
     * Specifies the units for measuring distance between [geometry1](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DistanceParameters.html#geometry1) and [geometry2](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DistanceParameters.html#geometry2).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DistanceParameters.html#distanceUnit)
     */
    distanceUnit?: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
    /**
     * When `true`, the geodesic distance between [geometry1](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DistanceParameters.html#geometry1) and [geometry2](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DistanceParameters.html#geometry2) is measured.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DistanceParameters.html#geodesic)
     */
    geodesic?: boolean;
    /**
     * The geometry from which the distance is to be measured.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DistanceParameters.html#geometry1)
     */
    geometry1?: GeometryProperties;
    /**
     * The geometry to which the distance is to be measured.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-DistanceParameters.html#geometry2)
     */
    geometry2?: GeometryProperties;
  }

  interface supportFeatureSet extends Accessor, JSONSupport {
    /**
     * The name of the layer's primary display field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-FeatureSet.html#features)
     */
    features: Graphic[];
    /**
     * Information about each field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html#fields)
     */
    fields: Field[];
    /**
     * The geometry type of features in the FeatureSet.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html#geometryType)
     */
    geometryType: "point" | "multipoint" | "polyline" | "polygon" | "extent" | "mesh";
    /**
     * The [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#geometry) used to query the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html#spatialReference)
     */
    spatialReference: SpatialReference;
  }

  interface supportFeatureSetConstructor {
    /**
     * A collection of features returned from ArcGIS Server or used as input to tasks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html)
     */

    new (properties?: supportFeatureSetProperties): supportFeatureSet;

    fromJSON(json: any): supportFeatureSet;
  }

  export const supportFeatureSet: supportFeatureSetConstructor;

  interface supportFeatureSetProperties {
    /**
     * The name of the layer's primary display field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-FeatureSet.html#features)
     */
    features?: GraphicProperties[];
    /**
     * Information about each field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html#fields)
     */
    fields?: FieldProperties[];
    /**
     * The geometry type of features in the FeatureSet.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html#geometryType)
     */
    geometryType?: "point" | "multipoint" | "polyline" | "polygon" | "extent" | "mesh";
    /**
     * The [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#geometry) used to query the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html#spatialReference)
     */
    spatialReference?: SpatialReferenceProperties;
  }

  interface supportFindParameters extends Accessor, JSONSupport {
    /**
     * Determines whether to look for an exact match of the search text or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FindParameters.html#contains)
     */
    contains: boolean;
    /**
     * Specify the geodatabase version to search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FindParameters.html#gdbVersion)
     */
    gdbVersion: string;
    /**
     * Specify the number of decimal places for the geometries returned by the task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FindParameters.html#geometryPrecision)
     */
    geometryPrecision: number;
    /**
     * The layers to perform the find operation on.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FindParameters.html#layerIds)
     */
    layerIds: number[];
    /**
     * The maximum allowable offset used for generalizing geometries returned by the find operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FindParameters.html#maxAllowableOffset)
     */
    maxAllowableOffset: number;
    /**
     * The spatial reference of the output geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-FindParameters.html#returnGeometry)
     */
    returnGeometry: boolean;
    /**
     * The names of the fields of a layer to search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-FindParameters.html#searchFields) properties.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FindParameters.html#searchText)
     */
    searchText: string;
  }

  interface supportFindParametersConstructor {
    /**
     * Input parameters for [find](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-find.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FindParameters.html)
     */

    new (properties?: supportFindParametersProperties): supportFindParameters;

    fromJSON(json: any): supportFindParameters;
  }

  export const supportFindParameters: supportFindParametersConstructor;

  interface supportFindParametersProperties {
    /**
     * Determines whether to look for an exact match of the search text or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FindParameters.html#contains)
     */
    contains?: boolean;
    /**
     * Specify the geodatabase version to search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FindParameters.html#gdbVersion)
     */
    gdbVersion?: string;
    /**
     * Specify the number of decimal places for the geometries returned by the task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FindParameters.html#geometryPrecision)
     */
    geometryPrecision?: number;
    /**
     * The layers to perform the find operation on.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FindParameters.html#layerIds)
     */
    layerIds?: number[];
    /**
     * The maximum allowable offset used for generalizing geometries returned by the find operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FindParameters.html#maxAllowableOffset)
     */
    maxAllowableOffset?: number;
    /**
     * The spatial reference of the output geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-FindParameters.html#returnGeometry)
     */
    returnGeometry?: boolean;
    /**
     * The names of the fields of a layer to search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-FindParameters.html#searchFields) properties.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FindParameters.html#searchText)
     */
    searchText?: string;
  }

  interface supportFindResult extends Accessor, JSONSupport {
    /**
     * The name of the layer's primary display field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FindResult.html#displayFieldName)
     */
    displayFieldName: string;
    /**
     * The found feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-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-rest-support-FindResult.html#layerId)
     */
    layerId: number;
    /**
     * The layer name that contains the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-FindResult.html#value)
     */
    value: string;
  }

  interface supportFindResultConstructor {
    /**
     * The result from [find](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-find.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FindResult.html)
     */

    new (properties?: supportFindResultProperties): supportFindResult;

    fromJSON(json: any): supportFindResult;
  }

  export const supportFindResult: supportFindResultConstructor;

  interface supportFindResultProperties {
    /**
     * The name of the layer's primary display field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FindResult.html#displayFieldName)
     */
    displayFieldName?: string;
    /**
     * The found feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-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-rest-support-FindResult.html#layerId)
     */
    layerId?: number;
    /**
     * The layer name that contains the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-FindResult.html#value)
     */
    value?: string;
  }

  interface supportGeneralizeParameters extends Accessor, JSONSupport {
    /**
     * The maximum deviation unit.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-GeneralizeParameters.html#deviationUnit)
     */
    deviationUnit: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
    /**
     * The array of input geometries to generalize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-GeneralizeParameters.html#maxDeviation)
     */
    maxDeviation: number;
  }

  interface supportGeneralizeParametersConstructor {
    /**
     * Sets the geometries, maximum deviation and units for the generalize operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-GeneralizeParameters.html)
     */

    new (properties?: supportGeneralizeParametersProperties): supportGeneralizeParameters;

    fromJSON(json: any): supportGeneralizeParameters;
  }

  export const supportGeneralizeParameters: supportGeneralizeParametersConstructor;

  interface supportGeneralizeParametersProperties {
    /**
     * The maximum deviation unit.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-GeneralizeParameters.html#deviationUnit)
     */
    deviationUnit?: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
    /**
     * The array of input geometries to generalize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-GeneralizeParameters.html#maxDeviation)
     */
    maxDeviation?: number;
  }

  interface supportGPMessage extends Accessor, JSONSupport {
    /**
     * The geoprocessing message.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-GPMessage.html#description)
     */
    description: string;
    /**
     * The geoprocessing message type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-GPMessage.html#type)
     */
    type:
      | "informative"
      | "process-definition"
      | "process-start"
      | "process-stop"
      | "warning"
      | "error"
      | "empty"
      | "abort";
  }

  interface supportGPMessageConstructor {
    /**
     * Represents a message generated during the execution of a module:esri/rest/Geoprocessor method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-GPMessage.html)
     */

    new (properties?: supportGPMessageProperties): supportGPMessage;

    fromJSON(json: any): supportGPMessage;
  }

  export const supportGPMessage: supportGPMessageConstructor;

  interface supportGPMessageProperties {
    /**
     * The geoprocessing message.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-GPMessage.html#description)
     */
    description?: string;
    /**
     * The geoprocessing message type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-GPMessage.html#type)
     */
    type?:
      | "informative"
      | "process-definition"
      | "process-start"
      | "process-stop"
      | "warning"
      | "error"
      | "empty"
      | "abort";
  }

  interface supportIdentifyParameters extends Accessor, JSONSupport {
    /**
     * Resolution of the current map view in dots per inch.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html#dpi)
     */
    dpi: number;
    /**
     * Specify the geodatabase version to search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html#gdbVersion)
     */
    gdbVersion: string;
    /**
     * The geometry used to select features during the Identify operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-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-rest-support-IdentifyParameters.html#height)
     */
    height: number;
    /**
     * The layers on which to perform the identify operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html#layerIds)
     */
    layerIds: number[];
    /**
     * Specifies which layers to use when using Identify.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html#layerOption)
     */
    layerOption: "top" | "visible" | "all";
    /**
     * The Extent or bounding box of the current map view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html#mapExtent)
     */
    mapExtent: Extent;
    /**
     * The maximum allowable offset used for generalizing geometries returned by the identify operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html#maxAllowableOffset)
     */
    maxAllowableOffset: number;
    /**
     * If `true`, field names will be returned instead of field aliases.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html#returnFieldName)
     */
    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-rest-support-IdentifyParameters.html#returnGeometry)
     */
    returnGeometry: boolean;
    /**
     * When `true`, indicates that M values will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html#returnM)
     */
    returnM: boolean;
    /**
     * If `true`, the values in the result will not be formatted i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html#returnUnformattedValues)
     */
    returnUnformattedValues: boolean;
    /**
     * When `true`, indicates that z-values will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html#returnZ)
     */
    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-rest-support-IdentifyParameters.html#mapExtent).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-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-rest-support-IdentifyParameters.html#width)
     */
    width: number;
  }

  interface supportIdentifyParametersConstructor {
    /**
     * Input parameters for the [identify](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-identify.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html)
     */

    new (properties?: supportIdentifyParametersProperties): supportIdentifyParameters;

    fromJSON(json: any): supportIdentifyParameters;
  }

  export const supportIdentifyParameters: supportIdentifyParametersConstructor;

  interface supportIdentifyParametersProperties {
    /**
     * Resolution of the current map view in dots per inch.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html#dpi)
     */
    dpi?: number;
    /**
     * Specify the geodatabase version to search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html#gdbVersion)
     */
    gdbVersion?: string;
    /**
     * The geometry used to select features during the Identify operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-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-rest-support-IdentifyParameters.html#height)
     */
    height?: number;
    /**
     * The layers on which to perform the identify operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html#layerIds)
     */
    layerIds?: number[];
    /**
     * Specifies which layers to use when using Identify.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html#layerOption)
     */
    layerOption?: "top" | "visible" | "all";
    /**
     * The Extent or bounding box of the current map view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html#mapExtent)
     */
    mapExtent?: ExtentProperties;
    /**
     * The maximum allowable offset used for generalizing geometries returned by the identify operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html#maxAllowableOffset)
     */
    maxAllowableOffset?: number;
    /**
     * If `true`, field names will be returned instead of field aliases.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html#returnFieldName)
     */
    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-rest-support-IdentifyParameters.html#returnGeometry)
     */
    returnGeometry?: boolean;
    /**
     * When `true`, indicates that M values will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html#returnM)
     */
    returnM?: boolean;
    /**
     * If `true`, the values in the result will not be formatted i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html#returnUnformattedValues)
     */
    returnUnformattedValues?: boolean;
    /**
     * When `true`, indicates that z-values will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyParameters.html#returnZ)
     */
    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-rest-support-IdentifyParameters.html#mapExtent).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-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-rest-support-IdentifyParameters.html#width)
     */
    width?: number;
  }

  interface supportIdentifyResult extends Accessor, JSONSupport {
    /**
     * The name of the layer's primary display field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyResult.html#displayFieldName)
     */
    displayFieldName: string;
    /**
     * An identified feature from the map service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-IdentifyResult.html#layerId)
     */
    layerId: number;
    /**
     * The layer name that contains the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyResult.html#layerName)
     */
    layerName: string;
  }

  interface supportIdentifyResultConstructor {
    /**
     * The result from [identify](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-identify.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyResult.html)
     */

    new (properties?: supportIdentifyResultProperties): supportIdentifyResult;

    fromJSON(json: any): supportIdentifyResult;
  }

  export const supportIdentifyResult: supportIdentifyResultConstructor;

  interface supportIdentifyResultProperties {
    /**
     * The name of the layer's primary display field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyResult.html#displayFieldName)
     */
    displayFieldName?: string;
    /**
     * An identified feature from the map service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-IdentifyResult.html#layerId)
     */
    layerId?: number;
    /**
     * The layer name that contains the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-IdentifyResult.html#layerName)
     */
    layerName?: string;
  }

  interface supportImageHistogramParameters extends Accessor, JSONSupport {
    /**
     * Input geometry that defines the area of interest for which the histograms and statistics will be computed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageHistogramParameters.html#geometry)
     */
    geometry: Extent | Polygon;
    /**
     * Specifies the [mosaic rule](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html) on how individual images should be mosaicked when the histogram is computed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageHistogramParameters.html#mosaicRule)
     */
    mosaicRule: MosaicRule;
    /**
     * Specifies the pixel size (or the resolution).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageHistogramParameters.html#pixelSize)
     */
    pixelSize: ImageIdentifyParametersPixelSize;
    /**
     * Specifies the [rendering rule](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterFunction.html) from which to compute the statistics and histogram.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageHistogramParameters.html#renderingRule)
     */
    renderingRule: RasterFunction;
    /**
     * The [time extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html) for which to compute the statistics and histogram.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageHistogramParameters.html#timeExtent)
     */
    timeExtent: TimeExtent;
  }

  interface supportImageHistogramParametersConstructor {
    /**
     * Input parameters for the [computeHistograms](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#computeHistograms) or [computeStatisticsHistograms](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#computeStatisticsHistograms) method on [ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageHistogramParameters.html)
     */

    new (properties?: supportImageHistogramParametersProperties): supportImageHistogramParameters;

    fromJSON(json: any): supportImageHistogramParameters;
  }

  export const supportImageHistogramParameters: supportImageHistogramParametersConstructor;

  interface supportImageHistogramParametersProperties {
    /**
     * Input geometry that defines the area of interest for which the histograms and statistics will be computed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageHistogramParameters.html#geometry)
     */
    geometry?: (ExtentProperties & { type: "extent" }) | (PolygonProperties & { type: "polygon" });
    /**
     * Specifies the [mosaic rule](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html) on how individual images should be mosaicked when the histogram is computed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageHistogramParameters.html#mosaicRule)
     */
    mosaicRule?: MosaicRuleProperties;
    /**
     * Specifies the pixel size (or the resolution).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageHistogramParameters.html#pixelSize)
     */
    pixelSize?: ImageIdentifyParametersPixelSize;
    /**
     * Specifies the [rendering rule](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterFunction.html) from which to compute the statistics and histogram.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageHistogramParameters.html#renderingRule)
     */
    renderingRule?: RasterFunctionProperties;
    /**
     * The [time extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html) for which to compute the statistics and histogram.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageHistogramParameters.html#timeExtent)
     */
    timeExtent?: TimeExtentProperties;
  }

  interface supportImageIdentifyParameters extends Accessor, JSONSupport {
    /**
     * Input geometry that defines the location to be identified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#geometry)
     */
    geometry: Point | Polygon;
    /**
     * Controls the maximum number of returned catalog items, set to 1 to return the top most raster only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#maxItemCount)
     */
    maxItemCount: number;
    /**
     * Specifies the mosaic rules defining the image sorting order.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#mosaicRule)
     */
    mosaicRule: MosaicRule;
    /**
     * Specifies the pixel level being identified on the x and y axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#pixelSize)
     */
    pixelSize: ImageIdentifyParametersPixelSize;
    /**
     * Specifies the rendering rule for how the requested image should be rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#renderingRule)
     */
    renderingRule: RasterFunction;
    /**
     * An array the [rendering rules](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#renderingRule) to retrieve multiple processed pixel values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#renderingRules)
     */
    renderingRules: RasterFunction;
    /**
     * If `true`, returns both geometry and attributes of the catalog items.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#returnCatalogItems)
     */
    returnCatalogItems: boolean;
    /**
     * When `true`, each feature in the catalog items includes the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#returnGeometry)
     */
    returnGeometry: boolean;
    /**
     * If `true`, the pixel values of all raster catalog items under the requested geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#timeExtent)
     */
    timeExtent: TimeExtent;
  }

  interface supportImageIdentifyParametersConstructor {
    /**
     * Input parameters for [imageService](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-imageService.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html)
     */

    new (properties?: supportImageIdentifyParametersProperties): supportImageIdentifyParameters;

    fromJSON(json: any): supportImageIdentifyParameters;
  }

  export const supportImageIdentifyParameters: supportImageIdentifyParametersConstructor;

  interface supportImageIdentifyParametersProperties {
    /**
     * Input geometry that defines the location to be identified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#geometry)
     */
    geometry?: (PointProperties & { type: "point" }) | (PolygonProperties & { type: "polygon" });
    /**
     * Controls the maximum number of returned catalog items, set to 1 to return the top most raster only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#maxItemCount)
     */
    maxItemCount?: number;
    /**
     * Specifies the mosaic rules defining the image sorting order.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#mosaicRule)
     */
    mosaicRule?: MosaicRuleProperties;
    /**
     * Specifies the pixel level being identified on the x and y axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#pixelSize)
     */
    pixelSize?: ImageIdentifyParametersPixelSize;
    /**
     * Specifies the rendering rule for how the requested image should be rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#renderingRule)
     */
    renderingRule?: RasterFunctionProperties;
    /**
     * An array the [rendering rules](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#renderingRule) to retrieve multiple processed pixel values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#renderingRules)
     */
    renderingRules?: RasterFunctionProperties;
    /**
     * If `true`, returns both geometry and attributes of the catalog items.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#returnCatalogItems)
     */
    returnCatalogItems?: boolean;
    /**
     * When `true`, each feature in the catalog items includes the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#returnGeometry)
     */
    returnGeometry?: boolean;
    /**
     * If `true`, the pixel values of all raster catalog items under the requested geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#timeExtent)
     */
    timeExtent?: TimeExtentProperties;
  }

  /**
   * Specifies the pixel size (or the resolution).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#PixelSize)
   */
  export interface ImageIdentifyParametersPixelSize extends Object {
    /**
     * Represents the size of one pixel in map units along the x axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#PixelSize)
     */
    x: number;
    /**
     * Represents the size of one pixel in map units along the y axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#PixelSize)
     */
    y: number;
    /**
     * Spatial reference to be used for the request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#PixelSize)
     */
    spatialReference?: ImageIdentifyParametersPixelSizeSpatialReference;
  }

  export interface ImageIdentifyParametersPixelSizeSpatialReference extends Object {
    /**
     * The wkid of the spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#PixelSize)
     */
    wkid?: number;
    /**
     * The Well known text or wkt of the spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyParameters.html#PixelSize)
     */
    wkt?: number;
  }

  interface supportImageIdentifyResult extends Accessor, JSONSupport {
    /**
     * The set of catalog items that overlap the input geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyResult.html#catalogItems)
     */
    catalogItems: supportFeatureSet;
    /**
     * The set of visible areas for the identified catalog items.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyResult.html#catalogItemVisibilities)
     */
    catalogItemVisibilities: number[];
    /**
     * The identified location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyResult.html#location)
     */
    location: Point;
    /**
     * The identify property name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyResult.html#name)
     */
    name: string;
    /**
     * The identify property id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyResult.html#objectId)
     */
    objectId: number;
    /**
     * The attributes of the identified object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyResult.html#properties)
     */
    properties: any;
    /**
     * The identify image service pixel value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyResult.html#value)
     */
    value: string;
  }

  interface supportImageIdentifyResultConstructor {
    /**
     * The results from [imageService](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-imageService.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyResult.html)
     */

    new (properties?: supportImageIdentifyResultProperties): supportImageIdentifyResult;

    fromJSON(json: any): supportImageIdentifyResult;
  }

  export const supportImageIdentifyResult: supportImageIdentifyResultConstructor;

  interface supportImageIdentifyResultProperties {
    /**
     * The set of catalog items that overlap the input geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyResult.html#catalogItems)
     */
    catalogItems?: supportFeatureSetProperties;
    /**
     * The set of visible areas for the identified catalog items.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyResult.html#catalogItemVisibilities)
     */
    catalogItemVisibilities?: number[];
    /**
     * The identified location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyResult.html#location)
     */
    location?: PointProperties;
    /**
     * The identify property name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyResult.html#name)
     */
    name?: string;
    /**
     * The identify property id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyResult.html#objectId)
     */
    objectId?: number;
    /**
     * The attributes of the identified object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyResult.html#properties)
     */
    properties?: any;
    /**
     * The identify image service pixel value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageIdentifyResult.html#value)
     */
    value?: string;
  }

  interface ImageSample extends Accessor, JSONSupport {
    /**
     * Name-value pairs of fields and field values associated with the [sample location](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSample.html#location).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSample.html#attributes)
     */
    attributes: any;
    /**
     * The sample location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSample.html#location)
     */
    location: Point;
    /**
     * The location id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSample.html#locationId)
     */
    locationId: number;
    /**
     * The pixel value associated with the sampled location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSample.html#pixelValue)
     */
    pixelValue: number[];
    /**
     * The raster id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSample.html#rasterId)
     */
    rasterId: number;
    /**
     * The resolution representing the average of source raster's resolutions in x and y axes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSample.html#resolution)
     */
    resolution: number;
  }

  interface ImageSampleConstructor {
    /**
     * The [getSamples](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#getSamples) method on [ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html) returns [ImageSampleResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleResult.html) containing array of this class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSample.html)
     */

    new (properties?: ImageSampleProperties): ImageSample;

    fromJSON(json: any): ImageSample;
  }

  export const ImageSample: ImageSampleConstructor;

  interface ImageSampleProperties {
    /**
     * Name-value pairs of fields and field values associated with the [sample location](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSample.html#location).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSample.html#attributes)
     */
    attributes?: any;
    /**
     * The sample location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSample.html#location)
     */
    location?: PointProperties;
    /**
     * The location id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSample.html#locationId)
     */
    locationId?: number;
    /**
     * The pixel value associated with the sampled location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSample.html#pixelValue)
     */
    pixelValue?: number[];
    /**
     * The raster id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSample.html#rasterId)
     */
    rasterId?: number;
    /**
     * The resolution representing the average of source raster's resolutions in x and y axes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSample.html#resolution)
     */
    resolution?: number;
  }

  interface ImageSampleParameters extends Accessor, JSONSupport {
    /**
     * Input geometry that defines the the locations to be sampled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#geometry)
     */
    geometry: Point | Multipoint | Polyline | Extent | Polygon;
    /**
     * Defines how to interpolate pixel values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#interpolation)
     */
    interpolation: "nearest" | "bilinear" | "cubic" | "majority";
    /**
     * When sampling multiple locations, you can use an array of [points](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) instead of providing a [multipoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html) for the [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#geometry) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#locations)
     */
    locations: Point[];
    /**
     * Specifies the [mosaic rule](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html) defining the image sort order and selection.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#mosaicRule)
     */
    mosaicRule: MosaicRule;
    /**
     * The list of fields associated with the rasters to be included in the response.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#outFields)
     */
    outFields: string[];
    /**
     * Specifies the pixel size (or the resolution) that will be used for the sampling.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#pixelSize)
     */
    pixelSize: ImageIdentifyParametersPixelSize;
    /**
     * When `true`, returns the first valid pixel value that meets specified conditions at each sampling point location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#returnFirstValueOnly)
     */
    returnFirstValueOnly: boolean;
    /**
     * Specifies the approximate number of locations to sample from the provided geometry when the input geometry is [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 [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#sampleCount)
     */
    sampleCount: number;
    /**
     * Specifies the distance interval to sample points from the provided [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#geometry) when input geometry 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-rest-support-ImageSampleParameters.html#sampleDistance)
     */
    sampleDistance: number;
    /**
     * Specifies the slice id of a multidimensional raster.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#sliceId)
     */
    sliceId: number;
    /**
     * The [time extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html) for which to perform sampling.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#timeExtent)
     */
    timeExtent: TimeExtent;
  }

  interface ImageSampleParametersConstructor {
    /**
     * Input parameters for the [getSamples()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#getSamples) method on [ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html)
     */

    new (properties?: ImageSampleParametersProperties): ImageSampleParameters;

    fromJSON(json: any): ImageSampleParameters;
  }

  export const ImageSampleParameters: ImageSampleParametersConstructor;

  interface ImageSampleParametersProperties {
    /**
     * Input geometry that defines the the locations to be sampled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#geometry)
     */
    geometry?:
      | (PointProperties & { type: "point" })
      | (MultipointProperties & { type: "multipoint" })
      | (PolylineProperties & { type: "polyline" })
      | (ExtentProperties & { type: "extent" })
      | (PolygonProperties & { type: "polygon" });
    /**
     * Defines how to interpolate pixel values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#interpolation)
     */
    interpolation?: "nearest" | "bilinear" | "cubic" | "majority";
    /**
     * When sampling multiple locations, you can use an array of [points](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) instead of providing a [multipoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html) for the [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#geometry) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#locations)
     */
    locations?: PointProperties[];
    /**
     * Specifies the [mosaic rule](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html) defining the image sort order and selection.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#mosaicRule)
     */
    mosaicRule?: MosaicRuleProperties;
    /**
     * The list of fields associated with the rasters to be included in the response.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#outFields)
     */
    outFields?: string[];
    /**
     * Specifies the pixel size (or the resolution) that will be used for the sampling.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#pixelSize)
     */
    pixelSize?: ImageIdentifyParametersPixelSize;
    /**
     * When `true`, returns the first valid pixel value that meets specified conditions at each sampling point location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#returnFirstValueOnly)
     */
    returnFirstValueOnly?: boolean;
    /**
     * Specifies the approximate number of locations to sample from the provided geometry when the input geometry is [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 [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#sampleCount)
     */
    sampleCount?: number;
    /**
     * Specifies the distance interval to sample points from the provided [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#geometry) when input geometry 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-rest-support-ImageSampleParameters.html#sampleDistance)
     */
    sampleDistance?: number;
    /**
     * Specifies the slice id of a multidimensional raster.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#sliceId)
     */
    sliceId?: number;
    /**
     * The [time extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html) for which to perform sampling.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleParameters.html#timeExtent)
     */
    timeExtent?: TimeExtentProperties;
  }

  interface ImageSampleResult extends Accessor, JSONSupport {
    /**
     * An array of image sample results returned in response to [ImageryLayer.getSamples()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#getSamples) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleResult.html#samples)
     */
    samples: ImageSample[];
  }

  interface ImageSampleResultConstructor {
    /**
     * The result from the [getSamples](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#getSamples) method on [ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html) containing array of [ImageSample](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSample.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleResult.html)
     */

    new (properties?: ImageSampleResultProperties): ImageSampleResult;

    fromJSON(json: any): ImageSampleResult;
  }

  export const ImageSampleResult: ImageSampleResultConstructor;

  interface ImageSampleResultProperties {
    /**
     * An array of image sample results returned in response to [ImageryLayer.getSamples()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#getSamples) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageSampleResult.html#samples)
     */
    samples?: ImageSampleProperties[];
  }

  interface supportJobInfo extends Accessor, JSONSupport {
    /**
     * The unique job ID assigned by ArcGIS Server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-JobInfo.html#jobId)
     */
    jobId: string;
    /**
     * The job status.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-JobInfo.html#jobStatus)
     */
    jobStatus:
      | "job-cancelled"
      | "job-cancelling"
      | "job-deleted"
      | "job-deleting"
      | "job-timed-out"
      | "job-executing"
      | "job-failed"
      | "job-new"
      | "job-submitted"
      | "job-succeeded"
      | "job-waiting";
    /**
     * An array of messages that include the message type and a description.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-JobInfo.html#messages)
     */
    messages: supportGPMessage[];
    /**
     * The [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for data requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-JobInfo.html#requestOptions)
     */
    requestOptions: any;
    /**
     * ArcGIS Server Rest API endpoint to the resource that receives the geoprocessing request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-JobInfo.html#sourceUrl)
     */
    sourceUrl: string;

    /**
     * Cancels an asynchronous geoprocessing job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-JobInfo.html#cancelJob)
     */
    cancelJob(jobId: string, requestOptions?: any): Promise<supportJobInfo>;
    /**
     * Sends a request for the current state of this job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-JobInfo.html#checkJobStatus)
     */
    checkJobStatus(requestOptions?: any): Promise<supportJobInfo>;
    /**
     * Stop monitoring this job for status updates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-JobInfo.html#destroy)
     */
    destroy(): void;
    /**
     * 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-rest-support-JobInfo.html#fetchResultData)
     */
    fetchResultData(jobId: string, resultName: string, requestOptions?: any): Promise<supportParameterValue>;
    /**
     * 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-rest-support-JobInfo.html#fetchResultImage)
     */
    fetchResultImage(
      jobId: string,
      resultName: string,
      imageParams: ImageParameters,
      requestOptions?: any
    ): Promise<supportParameterValue>;
    /**
     * Get the task result identified by `jobId` as an [MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-JobInfo.html#fetchResultMapImageLayer)
     */
    fetchResultMapImageLayer(jobId: string): Promise<MapImageLayer>;
    /**
     * Resolves when an asynchronous job has completed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-JobInfo.html#waitForJobCompletion)
     */
    waitForJobCompletion(options?: JobInfoWaitForJobCompletionOptions): Promise<supportJobInfo>;
  }

  interface supportJobInfoConstructor {
    /**
     * Represents information pertaining to the execution of an asynchronous [Geoprocessor](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html) task on the server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-JobInfo.html)
     */

    new (properties?: supportJobInfoProperties): supportJobInfo;

    fromJSON(json: any): supportJobInfo;
  }

  export const supportJobInfo: supportJobInfoConstructor;

  interface supportJobInfoProperties {
    /**
     * The unique job ID assigned by ArcGIS Server.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-JobInfo.html#jobId)
     */
    jobId?: string;
    /**
     * The job status.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-JobInfo.html#jobStatus)
     */
    jobStatus?:
      | "job-cancelled"
      | "job-cancelling"
      | "job-deleted"
      | "job-deleting"
      | "job-timed-out"
      | "job-executing"
      | "job-failed"
      | "job-new"
      | "job-submitted"
      | "job-succeeded"
      | "job-waiting";
    /**
     * An array of messages that include the message type and a description.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-JobInfo.html#messages)
     */
    messages?: supportGPMessageProperties[];
    /**
     * The [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for data requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-JobInfo.html#requestOptions)
     */
    requestOptions?: any;
    /**
     * ArcGIS Server Rest API endpoint to the resource that receives the geoprocessing request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-JobInfo.html#sourceUrl)
     */
    sourceUrl?: string;
  }

  export interface JobInfoWaitForJobCompletionOptions extends Object {
    /**
     * The time in millisecond between remote job status requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-JobInfo.html#waitForJobCompletion)
     */
    interval?: any;
    /**
     * [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) allows for cancelable asynchronous job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-JobInfo.html#waitForJobCompletion)
     */
    signal?: any;
    /**
     * Callback function that is called at the specified interval.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-JobInfo.html#waitForJobCompletion)
     */
    statusCallback?: any;
  }

  interface supportLegendLayer 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-rest-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-rest-support-LegendLayer.html#subLayerIds)
     */
    subLayerIds: string[];
    /**
     * The title of the feature layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-LegendLayer.html#title)
     */
    title: string;
  }

  interface supportLegendLayerConstructor {
    /**
     * Define layer properties for the legend layers associated with a [PrintTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-LegendLayer.html)
     */

    new (properties?: supportLegendLayerProperties): supportLegendLayer;
  }

  export const supportLegendLayer: supportLegendLayerConstructor;

  interface supportLegendLayerProperties {
    /**
     * The id of the operational layer to include in the printout's legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-LegendLayer.html#subLayerIds)
     */
    subLayerIds?: string[];
    /**
     * The title of the feature layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-LegendLayer.html#title)
     */
    title?: string;
  }

  interface supportLengthsParameters extends Accessor, JSONSupport {
    /**
     * Defines the type of calculation for the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-LengthsParameters.html#calculationType)
     */
    calculationType: "planar" | "geodesic" | "preserve-shape";
    /**
     * If polylines are in a geographic coordinate system, then geodesic needs to be set to `true` in order to calculate the ellipsoidal shortest path distance between each pair of the vertices in the polylines.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-LengthsParameters.html#geodesic)
     */
    geodesic: boolean;
    /**
     * The length unit in which perimeters of polygons will be calculated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-LengthsParameters.html#lengthUnit)
     */
    lengthUnit: number | string;
    /**
     * The array of polylines whose lengths are to be computed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-LengthsParameters.html#polylines)
     */
    polylines: Polyline[];
  }

  interface supportLengthsParametersConstructor {
    /**
     * Sets the length units and other parameters for the [GeometryService.lengths()](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#lengths) operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-LengthsParameters.html)
     */

    new (properties?: supportLengthsParametersProperties): supportLengthsParameters;

    fromJSON(json: any): supportLengthsParameters;
  }

  export const supportLengthsParameters: supportLengthsParametersConstructor;

  interface supportLengthsParametersProperties {
    /**
     * Defines the type of calculation for the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-LengthsParameters.html#calculationType)
     */
    calculationType?: "planar" | "geodesic" | "preserve-shape";
    /**
     * If polylines are in a geographic coordinate system, then geodesic needs to be set to `true` in order to calculate the ellipsoidal shortest path distance between each pair of the vertices in the polylines.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-LengthsParameters.html#geodesic)
     */
    geodesic?: boolean;
    /**
     * The length unit in which perimeters of polygons will be calculated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-LengthsParameters.html#lengthUnit)
     */
    lengthUnit?: number | string;
    /**
     * The array of polylines whose lengths are to be computed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-LengthsParameters.html#polylines)
     */
    polylines?: PolylineProperties[];
  }

  interface supportLinearUnit extends Accessor, JSONSupport {
    /**
     * Specifies the value of the linear distance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-LinearUnit.html#distance)
     */
    distance: number;
    /**
     * Specifies the unit type of the linear distance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-LinearUnit.html#units)
     */
    units: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
  }

  interface supportLinearUnitConstructor {
    /**
     * A data object containing a linear distance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-LinearUnit.html)
     */

    new (properties?: supportLinearUnitProperties): supportLinearUnit;

    fromJSON(json: any): supportLinearUnit;
  }

  export const supportLinearUnit: supportLinearUnitConstructor;

  interface supportLinearUnitProperties {
    /**
     * Specifies the value of the linear distance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-LinearUnit.html#distance)
     */
    distance?: number;
    /**
     * Specifies the unit type of the linear distance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-LinearUnit.html#units)
     */
    units?: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
  }

  interface supportMultipartColorRamp extends supportColorRamp {
    /**
     * 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-rest-support-MultipartColorRamp.html#colorRamps)
     */
    colorRamps: supportAlgorithmicColorRamp[];
    /**
     * A string value representing the color ramp type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-MultipartColorRamp.html#type)
     */
    readonly type: "multipart";

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

  interface supportMultipartColorRampConstructor {
    /**
     * Create a multipart color ramp to concatenate multiple color ramps for use in the renderer generated by the GenerateRendererTask.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-MultipartColorRamp.html)
     */

    new (properties?: supportMultipartColorRampProperties): supportMultipartColorRamp;

    fromJSON(json: any): supportMultipartColorRamp;
  }

  export const supportMultipartColorRamp: supportMultipartColorRampConstructor;

  interface supportMultipartColorRampProperties extends supportColorRampProperties {
    /**
     * 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-rest-support-MultipartColorRamp.html#colorRamps)
     */
    colorRamps?: supportAlgorithmicColorRampProperties[];
  }

  interface supportNAMessage extends Accessor, JSONSupport {
    /**
     * A description of the network analyst message.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-NAMessage.html#description)
     */
    description: string;
    /**
     * The network analyst message type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-NAMessage.html#type)
     */
    type:
      | "informative"
      | "process-definition"
      | "process-start"
      | "process-stop"
      | "warning"
      | "error"
      | "empty"
      | "abort";
  }

  interface supportNAMessageConstructor {
    /**
     * Represents a message generated during the execution of a network analyst task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-NAMessage.html)
     */

    new (properties?: supportNAMessageProperties): supportNAMessage;

    fromJSON(json: any): supportNAMessage;
  }

  export const supportNAMessage: supportNAMessageConstructor;

  interface supportNAMessageProperties {
    /**
     * A description of the network analyst message.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-NAMessage.html#description)
     */
    description?: string;
    /**
     * The network analyst message type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-NAMessage.html#type)
     */
    type?:
      | "informative"
      | "process-definition"
      | "process-start"
      | "process-stop"
      | "warning"
      | "error"
      | "empty"
      | "abort";
  }

  interface supportOffsetParameters extends Accessor, JSONSupport {
    /**
     * The `bevelRatio` is multiplied by the offset distance and the result determines how far a mitered offset intersection can be located before it is beveled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-OffsetParameters.html#bevelRatio)
     */
    bevelRatio: number;
    /**
     * The array of geometries to be offset.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-OffsetParameters.html#geometries)
     */
    geometries: Geometry[];
    /**
     * Specifies the planar distance for constructing an offset based on the input geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-OffsetParameters.html#offsetDistance)
     */
    offsetDistance: number;
    /**
     * Options that determine how the ends intersect.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-OffsetParameters.html#offsetHow)
     */
    offsetHow: "bevelled" | "mitered" | "rounded";
    /**
     * The offset distance unit.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-OffsetParameters.html#offsetUnit)
     */
    offsetUnit: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
  }

  interface supportOffsetParametersConstructor {
    /**
     * Sets the offset distance, type and other parameters for the [GeometryService.offset](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#offset) operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-OffsetParameters.html)
     */

    new (properties?: supportOffsetParametersProperties): supportOffsetParameters;

    fromJSON(json: any): supportOffsetParameters;
  }

  export const supportOffsetParameters: supportOffsetParametersConstructor;

  interface supportOffsetParametersProperties {
    /**
     * The `bevelRatio` is multiplied by the offset distance and the result determines how far a mitered offset intersection can be located before it is beveled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-OffsetParameters.html#bevelRatio)
     */
    bevelRatio?: number;
    /**
     * The array of geometries to be offset.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-OffsetParameters.html#geometries)
     */
    geometries?: GeometryProperties[];
    /**
     * Specifies the planar distance for constructing an offset based on the input geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-OffsetParameters.html#offsetDistance)
     */
    offsetDistance?: number;
    /**
     * Options that determine how the ends intersect.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-OffsetParameters.html#offsetHow)
     */
    offsetHow?: "bevelled" | "mitered" | "rounded";
    /**
     * The offset distance unit.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-OffsetParameters.html#offsetUnit)
     */
    offsetUnit?: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
  }

  interface supportParameterValue extends Accessor, JSONSupport {
    /**
     * Specifies the parameter's data type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ParameterValue.html#dataType)
     */
    dataType:
      | "boolean"
      | "data-file"
      | "date"
      | "double"
      | "feature-record-set-layer"
      | "field"
      | "linear-unit"
      | "long"
      | "raster-data"
      | "raster-data-layer"
      | "record-set"
      | "string"
      | "multi-value";
    /**
     * The value of the parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ParameterValue.html#value)
     */
    value: any;
  }

  interface supportParameterValueConstructor {
    /**
     * Represents the output parameters of a [Geoprocessor](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html) task and their properties and values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ParameterValue.html)
     */

    new (properties?: supportParameterValueProperties): supportParameterValue;

    fromJSON(json: any): supportParameterValue;
  }

  export const supportParameterValue: supportParameterValueConstructor;

  interface supportParameterValueProperties {
    /**
     * Specifies the parameter's data type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ParameterValue.html#dataType)
     */
    dataType?:
      | "boolean"
      | "data-file"
      | "date"
      | "double"
      | "feature-record-set-layer"
      | "field"
      | "linear-unit"
      | "long"
      | "raster-data"
      | "raster-data-layer"
      | "record-set"
      | "string"
      | "multi-value";
    /**
     * The value of the parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ParameterValue.html#value)
     */
    value?: any;
  }

  interface supportPrintParameters extends Accessor {
    /**
     * Additional parameters for the print service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-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-rest-support-PrintParameters.html#template)
     */
    template: supportPrintTemplate;
    /**
     * The view to print.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintParameters.html#view)
     */
    view: MapView;
  }

  interface supportPrintParametersConstructor {
    /**
     * Input parameters for [PrintTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-PrintTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintParameters.html)
     */

    new (properties?: supportPrintParametersProperties): supportPrintParameters;
  }

  export const supportPrintParameters: supportPrintParametersConstructor;

  interface supportPrintParametersProperties {
    /**
     * Additional parameters for the print service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-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-rest-support-PrintParameters.html#template)
     */
    template?: supportPrintTemplateProperties;
    /**
     * The view to print.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintParameters.html#view)
     */
    view?: MapViewProperties;
  }

  interface supportPrintTemplate extends Accessor {
    /**
     * When `false`, the attribution is not displayed on the printout.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#attributionVisible)
     */
    attributionVisible: boolean;
    /**
     * Define the map width, height and dpi.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#exportOptions)
     */
    exportOptions: supportPrintTemplateExportOptions;
    /**
     * When true, the feature's attributes are included in feature collection layers even when they are not needed for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#forceFeatureAttributes)
     */
    forceFeatureAttributes: boolean;
    /**
     * The output format for the printed map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#format)
     */
    format: "pdf" | "png32" | "png8" | "jpg" | "gif" | "eps" | "svg" | "svgz";
    /**
     * The layout used for the print output.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#layout)
     */
    layout:
      | "map-only"
      | "a3-landscape"
      | "a3-portrait"
      | "a4-landscape"
      | "a4-portrait"
      | "letter-ansi-a-landscape"
      | "letter-ansi-a-portrait"
      | "tabloid-ansi-b-landscape"
      | "tabloid-ansi-b-portrait";
    /**
     * Defines the layout elements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#layoutOptions)
     */
    layoutOptions: supportPrintTemplateLayoutOptions;
    /**
     * The optional map scale of the printed map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#outScale)
     */
    outScale: number;
    /**
     * Define whether the printed map should preserve map scale or map extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#scalePreserved)
     */
    scalePreserved: boolean;
    /**
     * When `true`, labels will be shown on the layout.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#showLabels)
     */
    showLabels: boolean;
  }

  interface supportPrintTemplateConstructor {
    /**
     * Defines the layout template options used by the [PrintTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-PrintTask.html) and [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-rest-support-PrintTemplate.html)
     */

    new (properties?: supportPrintTemplateProperties): supportPrintTemplate;
  }

  export const supportPrintTemplate: supportPrintTemplateConstructor;

  interface supportPrintTemplateProperties {
    /**
     * When `false`, the attribution is not displayed on the printout.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#attributionVisible)
     */
    attributionVisible?: boolean;
    /**
     * Define the map width, height and dpi.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#exportOptions)
     */
    exportOptions?: supportPrintTemplateExportOptions;
    /**
     * When true, the feature's attributes are included in feature collection layers even when they are not needed for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#forceFeatureAttributes)
     */
    forceFeatureAttributes?: boolean;
    /**
     * The output format for the printed map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#format)
     */
    format?: "pdf" | "png32" | "png8" | "jpg" | "gif" | "eps" | "svg" | "svgz";
    /**
     * The layout used for the print output.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#layout)
     */
    layout?:
      | "map-only"
      | "a3-landscape"
      | "a3-portrait"
      | "a4-landscape"
      | "a4-portrait"
      | "letter-ansi-a-landscape"
      | "letter-ansi-a-portrait"
      | "tabloid-ansi-b-landscape"
      | "tabloid-ansi-b-portrait";
    /**
     * Defines the layout elements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#layoutOptions)
     */
    layoutOptions?: supportPrintTemplateLayoutOptions;
    /**
     * The optional map scale of the printed map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#outScale)
     */
    outScale?: number;
    /**
     * Define whether the printed map should preserve map scale or map extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#scalePreserved)
     */
    scalePreserved?: boolean;
    /**
     * When `true`, labels will be shown on the layout.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#showLabels)
     */
    showLabels?: boolean;
  }

  export interface supportPrintTemplateExportOptions extends Object {
    /**
     * Map width.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#exportOptions)
     */
    width?: number;
    /**
     * Map height.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#exportOptions)
     */
    height?: number;
    /**
     * Resolution in dots per inch.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#exportOptions)
     */
    dpi?: number;
  }

  export interface supportPrintTemplateLayoutOptions 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-rest-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-rest-support-PrintTemplate.html#layoutOptions)
     */
    authorText?: string;
    /**
     * The text used for the copyright if the specified layout contains a copyright text element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#layoutOptions)
     */
    copyrightText?: string;
    /**
     * The unit used for the scalebar.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#layoutOptions)
     */
    scalebarUnit?: "Miles" | "Kilometers" | "Meters" | "Feet";
    /**
     * An array of [LegendLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-LegendLayer.html) containing the ids of the layers that will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#layoutOptions)
     */
    legendLayers?: supportLegendLayer[];
    /**
     * An array of name-value pair objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-PrintTemplate.html#layoutOptions)
     */
    customTextElements?: any[];
  }

  interface supportProjectParameters extends Accessor {
    /**
     * The input geometries to project.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-ProjectParameters.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference;
    /**
     * The well-known id {wkid:number} or well-known text {wkt:string} of the datum transformation to be applied to the projected geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ProjectParameters.html#transformation)
     */
    transformation: supportProjectParametersTransformation;
    /**
     * Indicates whether to transform forward or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ProjectParameters.html#transformForward)
     */
    transformForward: boolean;

    /**
     * Converts an instance of  this class to its ArcGIS portal JSON representation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ProjectParameters.html#toJSON)
     */
    toJSON(): any;
  }

  interface supportProjectParametersConstructor {
    /**
     * Defines the projection parameters used when calling the [GeometryService.project()](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#project).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ProjectParameters.html)
     */

    new (properties?: supportProjectParametersProperties): supportProjectParameters;
  }

  export const supportProjectParameters: supportProjectParametersConstructor;

  interface supportProjectParametersProperties {
    /**
     * The input geometries to project.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-ProjectParameters.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties;
    /**
     * The well-known id {wkid:number} or well-known text {wkt:string} of the datum transformation to be applied to the projected geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ProjectParameters.html#transformation)
     */
    transformation?: supportProjectParametersTransformation;
    /**
     * Indicates whether to transform forward or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ProjectParameters.html#transformForward)
     */
    transformForward?: boolean;
  }

  export interface supportProjectParametersTransformation extends Object {
    /**
     * The well-known ID of the datum transformation to apply to the projection.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ProjectParameters.html#transformation)
     */
    wkid?: number;
    /**
     * The well-known text that defines a spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ProjectParameters.html#transformation)
     */
    wkt?: string;
  }

  interface supportQuery extends Accessor, JSONSupport {
    /**
     * An array of Object IDs representing [aggregate](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#isAggregate) (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#aggregateIds)
     */
    aggregateIds: number[];
    /**
     * Indicates if the service should cache the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#cacheHint)
     */
    cacheHint: boolean;
    /**
     * Datum transformation used for projecting geometries in the query results when [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#outSpatialReference) is different than the layer's spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#datumTransformation)
     */
    datumTransformation: number;
    /**
     * Specifies a search distance from a given [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#geometry) in a spatial query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-Query.html#gdbVersion)
     */
    gdbVersion: string;
    /**
     * The geometry to apply to the spatial filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-Query.html#geometryPrecision)
     */
    geometryPrecision: number;
    /**
     * Used only in [statistical queries](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#statistic).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#groupByFieldsForStatistics)
     */
    groupByFieldsForStatistics: string[];
    /**
     * A condition used with [outStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#outStatistics) and [groupByFieldsForStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#groupByFieldsForStatistics) to limit query results to groups that satisfy the aggregation function(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#having)
     */
    having: string;
    /**
     * The historic moment to query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#historicMoment)
     */
    historicMoment: Date;
    /**
     * The maximum distance in units of [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#outSpatialReference) used for generalizing geometries returned by the query operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#maxAllowableOffset)
     */
    maxAllowableOffset: number;
    /**
     * When set, the maximum number of features returned by the query will equal the `maxRecordCount` of the service multiplied by this factor.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#maxRecordCountFactor)
     */
    maxRecordCountFactor: number;
    /**
     * Parameter dictates how the geometry of a multipatch feature will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#multipatchOption)
     */
    multipatchOption: string;
    /**
     * The number of features to retrieve.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#num)
     */
    num: number;
    /**
     * An array of ObjectIDs to be used to query for features in a layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#objectIds)
     */
    objectIds: number[];
    /**
     * One or more field names used to order the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#orderByFields)
     */
    orderByFields: string[];
    /**
     * Attribute fields to include in the [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#outFields)
     */
    outFields: string[];
    /**
     * The spatial reference for the returned geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference;
    /**
     * The definitions for one or more field-based statistics to be calculated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#outStatistics)
     */
    outStatistics: supportStatisticDefinition[];
    /**
     * Filters features from the layer based on pre-authored parameterized filters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#parameterValues)
     */
    parameterValues: supportQueryParameterValues[];
    /**
     * Specifies the pixel level to be identified on the X and Y axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#pixelSize)
     */
    pixelSize: Point;
    /**
     * Used to project the geometry onto a virtual grid, likely representing pixels on the screen.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#quantizationParameters)
     */
    quantizationParameters: supportQueryQuantizationParameters;
    /**
     * Filters features from the layer that are within the specified range values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#rangeValues)
     */
    rangeValues: supportQueryRangeValues[];
    /**
     * The Dimensionally Extended 9 Intersection Model (DE-9IM) matrix relation (encoded as a string) to query the spatial relationship of the input [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#geometry) to the layer's features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#relationParameter)
     */
    relationParameter: string;
    /**
     * If `true`, each feature in the returned [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html) will be returned with a centroid.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#returnCentroid)
     */
    returnCentroid: boolean;
    /**
     * If `true` then the query returns distinct values based on the field(s) specified in [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#outFields).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#returnDistinctValues)
     */
    returnDistinctValues: boolean;
    /**
     * If `true`, then all features are returned for each tile request, even if they exceed the maximum record limit per query indicated on the service by `maxRecordCount`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#returnExceededLimitFeatures)
     */
    returnExceededLimitFeatures: boolean;
    /**
     * If `true`, each feature in the returned [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html) includes the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#returnGeometry)
     */
    returnGeometry: boolean;
    /**
     * If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-Query.html#returnM)
     */
    returnM: boolean;
    /**
     * If `true`, the [query geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html#queryGeometry) will be returned with the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#returnQueryGeometry)
     */
    returnQueryGeometry: boolean;
    /**
     * If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-Query.html#returnZ)
     */
    returnZ: boolean;
    /**
     * For spatial queries, this parameter defines the spatial relationship to query features in the layer or layer view against the input [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#geometry).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#spatialRelationship)
     */
    spatialRelationship:
      | "intersects"
      | "contains"
      | "crosses"
      | "disjoint"
      | "envelope-intersects"
      | "index-intersects"
      | "overlaps"
      | "touches"
      | "within"
      | "relation";
    /**
     * This parameter can be either standard SQL92 `standard` or it can use the native SQL of the underlying datastore `native`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#sqlFormat)
     */
    sqlFormat: "none" | "standard" | "native";
    /**
     * The zero-based index indicating where to begin retrieving features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#start)
     */
    start: number;
    /**
     * Shorthand for a where clause using "like".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#text)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#timeExtent)
     */
    timeExtent: TimeExtent;
    /**
     * The unit for calculating the buffer distance when [distance](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#distance) is specified in spatial queries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#units)
     */
    units: "feet" | "miles" | "nautical-miles" | "us-nautical-miles" | "meters" | "kilometers";
    /**
     * A where clause for the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#where)
     */
    where: string;

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

  interface supportQueryConstructor {
    /**
     * This class defines parameters for executing queries for features from a layer or layer view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html)
     */

    new (properties?: supportQueryProperties): supportQuery;

    fromJSON(json: any): supportQuery;
  }

  export const supportQuery: supportQueryConstructor;

  interface supportQueryProperties {
    /**
     * An array of Object IDs representing [aggregate](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#isAggregate) (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#aggregateIds)
     */
    aggregateIds?: number[];
    /**
     * Indicates if the service should cache the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#cacheHint)
     */
    cacheHint?: boolean;
    /**
     * Datum transformation used for projecting geometries in the query results when [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#outSpatialReference) is different than the layer's spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#datumTransformation)
     */
    datumTransformation?: number;
    /**
     * Specifies a search distance from a given [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#geometry) in a spatial query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-Query.html#gdbVersion)
     */
    gdbVersion?: string;
    /**
     * The geometry to apply to the spatial filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-Query.html#geometryPrecision)
     */
    geometryPrecision?: number;
    /**
     * Used only in [statistical queries](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#statistic).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#groupByFieldsForStatistics)
     */
    groupByFieldsForStatistics?: string[];
    /**
     * A condition used with [outStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#outStatistics) and [groupByFieldsForStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#groupByFieldsForStatistics) to limit query results to groups that satisfy the aggregation function(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#having)
     */
    having?: string;
    /**
     * The historic moment to query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#historicMoment)
     */
    historicMoment?: DateProperties;
    /**
     * The maximum distance in units of [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#outSpatialReference) used for generalizing geometries returned by the query operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#maxAllowableOffset)
     */
    maxAllowableOffset?: number;
    /**
     * When set, the maximum number of features returned by the query will equal the `maxRecordCount` of the service multiplied by this factor.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#maxRecordCountFactor)
     */
    maxRecordCountFactor?: number;
    /**
     * Parameter dictates how the geometry of a multipatch feature will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#multipatchOption)
     */
    multipatchOption?: string;
    /**
     * The number of features to retrieve.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#num)
     */
    num?: number;
    /**
     * An array of ObjectIDs to be used to query for features in a layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#objectIds)
     */
    objectIds?: number[];
    /**
     * One or more field names used to order the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#orderByFields)
     */
    orderByFields?: string[];
    /**
     * Attribute fields to include in the [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#outFields)
     */
    outFields?: string[];
    /**
     * The spatial reference for the returned geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties;
    /**
     * The definitions for one or more field-based statistics to be calculated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#outStatistics)
     */
    outStatistics?: supportStatisticDefinitionProperties[];
    /**
     * Filters features from the layer based on pre-authored parameterized filters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#parameterValues)
     */
    parameterValues?: supportQueryParameterValues[];
    /**
     * Specifies the pixel level to be identified on the X and Y axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#pixelSize)
     */
    pixelSize?: PointProperties;
    /**
     * Used to project the geometry onto a virtual grid, likely representing pixels on the screen.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#quantizationParameters)
     */
    quantizationParameters?: supportQueryQuantizationParameters;
    /**
     * Filters features from the layer that are within the specified range values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#rangeValues)
     */
    rangeValues?: supportQueryRangeValues[];
    /**
     * The Dimensionally Extended 9 Intersection Model (DE-9IM) matrix relation (encoded as a string) to query the spatial relationship of the input [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#geometry) to the layer's features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#relationParameter)
     */
    relationParameter?: string;
    /**
     * If `true`, each feature in the returned [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html) will be returned with a centroid.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#returnCentroid)
     */
    returnCentroid?: boolean;
    /**
     * If `true` then the query returns distinct values based on the field(s) specified in [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#outFields).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#returnDistinctValues)
     */
    returnDistinctValues?: boolean;
    /**
     * If `true`, then all features are returned for each tile request, even if they exceed the maximum record limit per query indicated on the service by `maxRecordCount`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#returnExceededLimitFeatures)
     */
    returnExceededLimitFeatures?: boolean;
    /**
     * If `true`, each feature in the returned [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html) includes the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#returnGeometry)
     */
    returnGeometry?: boolean;
    /**
     * If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-Query.html#returnM)
     */
    returnM?: boolean;
    /**
     * If `true`, the [query geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html#queryGeometry) will be returned with the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#returnQueryGeometry)
     */
    returnQueryGeometry?: boolean;
    /**
     * If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-Query.html#returnZ)
     */
    returnZ?: boolean;
    /**
     * For spatial queries, this parameter defines the spatial relationship to query features in the layer or layer view against the input [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#geometry).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#spatialRelationship)
     */
    spatialRelationship?:
      | "intersects"
      | "contains"
      | "crosses"
      | "disjoint"
      | "envelope-intersects"
      | "index-intersects"
      | "overlaps"
      | "touches"
      | "within"
      | "relation";
    /**
     * This parameter can be either standard SQL92 `standard` or it can use the native SQL of the underlying datastore `native`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#sqlFormat)
     */
    sqlFormat?: "none" | "standard" | "native";
    /**
     * The zero-based index indicating where to begin retrieving features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#start)
     */
    start?: number;
    /**
     * Shorthand for a where clause using "like".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#text)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#timeExtent)
     */
    timeExtent?: TimeExtentProperties;
    /**
     * The unit for calculating the buffer distance when [distance](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#distance) is specified in spatial queries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#units)
     */
    units?: "feet" | "miles" | "nautical-miles" | "us-nautical-miles" | "meters" | "kilometers";
    /**
     * A where clause for the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#where)
     */
    where?: string;
  }

  export interface supportQueryParameterValues extends Object {
    /**
     * The parameter name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#parameterValues)
     */
    name: string;
    /**
     * Single value or array of values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#parameterValues)
     */
    value: string | string[] | number | number[] | Date | Date[];
  }

  export interface supportQueryQuantizationParameters extends Object {
    /**
     * An extent defining the quantization grid bounds.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#quantizationParameters)
     */
    extent?: Extent;
    /**
     * Geometry coordinates are optimized for viewing and displaying of data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#quantizationParameters)
     */
    mode?: "view" | "edit";
    /**
     * The integer's coordinates will be returned relative to the origin position defined by this property value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#quantizationParameters)
     */
    originPosition?: "upper-left" | "lower-left";
    /**
     * The size of one pixel in the units of the [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#outSpatialReference).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#quantizationParameters)
     */
    tolerance?: number;
  }

  export interface supportQueryRangeValues extends Object {
    /**
     * The range id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#rangeValues)
     */
    name: string;
    /**
     * Single value or value range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#rangeValues)
     */
    values: number | number[];
  }

  interface supportRasterData 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-rest-support-RasterData.html#format)
     */
    format: string;
    /**
     * The ID of the uploaded file returned as a result of the upload operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-RasterData.html#url)
     */
    url: string;
  }

  interface supportRasterDataConstructor {
    /**
     * A geoprocessing data object containing a raster data source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RasterData.html)
     */

    new (properties?: supportRasterDataProperties): supportRasterData;

    fromJSON(json: any): supportRasterData;
  }

  export const supportRasterData: supportRasterDataConstructor;

  interface supportRasterDataProperties {
    /**
     * Specifies the format of the raster data, such as "jpg", "tif", etc.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RasterData.html#format)
     */
    format?: string;
    /**
     * The ID of the uploaded file returned as a result of the upload operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-RasterData.html#url)
     */
    url?: string;
  }

  interface supportRelationParameters extends Accessor, JSONSupport {
    /**
     * The first array of geometries to compute the relation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationParameters.html#geometries1)
     */
    geometries1: Geometry[];
    /**
     * The second array of geometries to compute the relation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationParameters.html#geometries2)
     */
    geometries2: Geometry[];
    /**
     * The spatial relationship to be tested between the two input geometry arrays.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationParameters.html#relation)
     */
    relation:
      | "cross"
      | "disjoint"
      | "in"
      | "interior-intersection"
      | "intersection"
      | "line-coincidence"
      | "line-touch"
      | "overlap"
      | "point-touch"
      | "relation"
      | "touch"
      | "within";
    /**
     * The string describes the spatial relationship to be tested when `RelationParameters.relation = 'relation'`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationParameters.html#relationParameter)
     */
    relationParameter: string;
  }

  interface supportRelationParametersConstructor {
    /**
     * Sets the relation and other parameters for the [GeometryService.relation()](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#relation) operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationParameters.html)
     */

    new (properties?: supportRelationParametersProperties): supportRelationParameters;

    fromJSON(json: any): supportRelationParameters;
  }

  export const supportRelationParameters: supportRelationParametersConstructor;

  interface supportRelationParametersProperties {
    /**
     * The first array of geometries to compute the relation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationParameters.html#geometries1)
     */
    geometries1?: GeometryProperties[];
    /**
     * The second array of geometries to compute the relation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationParameters.html#geometries2)
     */
    geometries2?: GeometryProperties[];
    /**
     * The spatial relationship to be tested between the two input geometry arrays.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationParameters.html#relation)
     */
    relation?:
      | "cross"
      | "disjoint"
      | "in"
      | "interior-intersection"
      | "intersection"
      | "line-coincidence"
      | "line-touch"
      | "overlap"
      | "point-touch"
      | "relation"
      | "touch"
      | "within";
    /**
     * The string describes the spatial relationship to be tested when `RelationParameters.relation = 'relation'`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationParameters.html#relationParameter)
     */
    relationParameter?: string;
  }

  interface supportRelationshipQuery extends Accessor, JSONSupport {
    /**
     * Specify the geodatabase version to query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-RelationshipQuery.html#geometryPrecision)
     */
    geometryPrecision: number;
    /**
     * The historic moment to query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#historicMoment)
     */
    historicMoment: Date;
    /**
     * The maximum allowable offset used for generalizing geometries returned by the query operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#maxAllowableOffset)
     */
    maxAllowableOffset: number;
    /**
     * The number of features to retrieve.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#num)
     */
    num: 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-rest-support-RelationshipQuery.html#objectIds)
     */
    objectIds: number[];
    /**
     * One or more field names used to order the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#orderByFields)
     */
    orderByFields: string[];
    /**
     * Attribute fields to include in the FeatureSet.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#outFields)
     */
    outFields: string[];
    /**
     * The spatial reference for the returned geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference;
    /**
     * The ID of the relationship to be queried.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#relationshipId)
     */
    relationshipId: number;
    /**
     * If `true`, each feature in the [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html) includes the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#returnGeometry)
     */
    returnGeometry: boolean;
    /**
     * If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#returnGeometry) is `true`, then m-values are included in the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#returnM)
     */
    returnM: boolean;
    /**
     * If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#returnGeometry) is `true`, then z-values are included in the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#returnZ)
     */
    returnZ: boolean;
    /**
     * The zero-based index indicating where to begin retrieving features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#start)
     */
    start: number;
    /**
     * The definition expression to be applied to the related table or layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#where)
     */
    where: string;

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

  interface supportRelationshipQueryConstructor {
    /**
     * This class defines parameters for executing queries for related records from a layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html)
     */

    new (properties?: supportRelationshipQueryProperties): supportRelationshipQuery;

    fromJSON(json: any): supportRelationshipQuery;
  }

  export const supportRelationshipQuery: supportRelationshipQueryConstructor;

  interface supportRelationshipQueryProperties {
    /**
     * Specify the geodatabase version to query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-RelationshipQuery.html#geometryPrecision)
     */
    geometryPrecision?: number;
    /**
     * The historic moment to query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#historicMoment)
     */
    historicMoment?: DateProperties;
    /**
     * The maximum allowable offset used for generalizing geometries returned by the query operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#maxAllowableOffset)
     */
    maxAllowableOffset?: number;
    /**
     * The number of features to retrieve.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#num)
     */
    num?: 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-rest-support-RelationshipQuery.html#objectIds)
     */
    objectIds?: number[];
    /**
     * One or more field names used to order the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#orderByFields)
     */
    orderByFields?: string[];
    /**
     * Attribute fields to include in the FeatureSet.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#outFields)
     */
    outFields?: string[];
    /**
     * The spatial reference for the returned geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties;
    /**
     * The ID of the relationship to be queried.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#relationshipId)
     */
    relationshipId?: number;
    /**
     * If `true`, each feature in the [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html) includes the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#returnGeometry)
     */
    returnGeometry?: boolean;
    /**
     * If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#returnGeometry) is `true`, then m-values are included in the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#returnM)
     */
    returnM?: boolean;
    /**
     * If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#returnGeometry) is `true`, then z-values are included in the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#returnZ)
     */
    returnZ?: boolean;
    /**
     * The zero-based index indicating where to begin retrieving features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#start)
     */
    start?: number;
    /**
     * The definition expression to be applied to the related table or layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RelationshipQuery.html#where)
     */
    where?: string;
  }

  interface supportRouteParameters extends Accessor, JSONSupport {
    /**
     * The list of network attribute names to be accumulated with the analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#accumulateAttributes)
     */
    accumulateAttributes: string[];
    /**
     * An authorization string used to access a resource or service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#apiKey)
     */
    apiKey: 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-rest-support-RouteParameters.html#attributeParameterValues)
     */
    attributeParameterValues: RouteParametersAttributeParamValue[];
    /**
     * The language used when computing directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#directionsLanguage)
     */
    directionsLanguage: string;
    /**
     * The length units to use when computing directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#directionsOutputType)
     */
    directionsOutputType: "complete" | "complete-no-events" | "instructions-only" | "standard" | "summary-only";
    /**
     * The style to be used when returning directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#directionsStyleName)
     */
    directionsStyleName: string;
    /**
     * The name of network attribute to use for the drive time when computing directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#directionsTimeAttribute)
     */
    directionsTimeAttribute: string;
    /**
     * If `true`, avoids network elements restricted by barriers or restrictions specified in [restrictionAttributes](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#restrictionAttributes).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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 for visiting a given list of stops.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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 results will differ depending on the value of this property:
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#ignoreInvalidLocations)
     */
    ignoreInvalidLocations: boolean;
    /**
     * The network attribute name to be used as the impedance attribute in the analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#impedanceAttribute)
     */
    impedanceAttribute: string;
    /**
     * The precision of the output geometry after generalization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#outputGeometryPrecision)
     */
    outputGeometryPrecision: number;
    /**
     * The units of the output geometry precision.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference | string;
    /**
     * The set of point barriers loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#pointBarriers)
     */
    pointBarriers: supportDataLayer | supportFeatureSet;
    /**
     * The set of polygon barriers loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#polygonBarriers)
     */
    polygonBarriers: supportDataLayer | supportFeatureSet;
    /**
     * The set of polyline barriers loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#polylineBarriers)
     */
    polylineBarriers: supportDataLayer | supportFeatureSet;
    /**
     * If `true`, keeps the first stop fixed in the sequence even when `findBestSequence = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#preserveFirstStop)
     */
    preserveFirstStop: boolean;
    /**
     * If `true`, keeps the last stop fixed in the sequence even when `findBestSequence = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#preserveLastStop)
     */
    preserveLastStop: boolean;
    /**
     * The list of network attribute names to be used as restrictions with the analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#restrictionAttributes)
     */
    restrictionAttributes: string[];
    /**
     * Specifies how U-Turns should be handled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#returnBarriers)
     */
    returnBarriers: boolean;
    /**
     * Indicates whether the service should generate driving directions for each route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#returnDirections)
     */
    returnDirections: boolean;
    /**
     * If `true`, polygon barriers are returned in the [RouteResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#returnPolygonBarriers)
     */
    returnPolygonBarriers: boolean;
    /**
     * If `true`, polyline barriers are returned in the [RouteResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#returnPolylineBarriers)
     */
    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-rest-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#returnStops)
     */
    returnStops: boolean;
    /**
     * If `true`, `z` values are returned in the [RouteResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#returnZ)
     */
    returnZ: boolean;
    /**
     * The time the route begins.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-RouteParameters.html#startTimeIsUTC)
     */
    startTimeIsUTC: boolean;
    /**
     * The set of stops loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#stops)
     */
    stops: supportDataLayer | supportFeatureSet;
    /**
     * A travel mode represents a means of transportation, such as driving or walking.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#travelMode)
     */
    travelMode: TravelMode;
    /**
     * If `true`, the hierarchy attribute for the network should be used in analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#useHierarchy)
     */
    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 visits to certain times of day, or "time windows".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#useTimeWindows)
     */
    useTimeWindows: boolean;

    /**
     * Performs a deep clone of the RouteParameters object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#clone)
     */
    clone(): void;
  }

  interface supportRouteParametersConstructor {
    /**
     * Input parameters for [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html)
     */

    new (properties?: supportRouteParametersProperties): supportRouteParameters;

    fromJSON(json: any): supportRouteParameters;
  }

  export const supportRouteParameters: supportRouteParametersConstructor;

  interface supportRouteParametersProperties {
    /**
     * The list of network attribute names to be accumulated with the analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#accumulateAttributes)
     */
    accumulateAttributes?: string[];
    /**
     * An authorization string used to access a resource or service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#apiKey)
     */
    apiKey?: 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-rest-support-RouteParameters.html#attributeParameterValues)
     */
    attributeParameterValues?: RouteParametersAttributeParamValue[];
    /**
     * The language used when computing directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#directionsLanguage)
     */
    directionsLanguage?: string;
    /**
     * The length units to use when computing directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#directionsOutputType)
     */
    directionsOutputType?: "complete" | "complete-no-events" | "instructions-only" | "standard" | "summary-only";
    /**
     * The style to be used when returning directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#directionsStyleName)
     */
    directionsStyleName?: string;
    /**
     * The name of network attribute to use for the drive time when computing directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#directionsTimeAttribute)
     */
    directionsTimeAttribute?: string;
    /**
     * If `true`, avoids network elements restricted by barriers or restrictions specified in [restrictionAttributes](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#restrictionAttributes).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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 for visiting a given list of stops.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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 results will differ depending on the value of this property:
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#ignoreInvalidLocations)
     */
    ignoreInvalidLocations?: boolean;
    /**
     * The network attribute name to be used as the impedance attribute in the analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#impedanceAttribute)
     */
    impedanceAttribute?: string;
    /**
     * The precision of the output geometry after generalization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#outputGeometryPrecision)
     */
    outputGeometryPrecision?: number;
    /**
     * The units of the output geometry precision.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties | string;
    /**
     * The set of point barriers loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#pointBarriers)
     */
    pointBarriers?: (supportDataLayerProperties & { type: "layer" }) | supportFeatureSetProperties;
    /**
     * The set of polygon barriers loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#polygonBarriers)
     */
    polygonBarriers?: (supportDataLayerProperties & { type: "layer" }) | supportFeatureSetProperties;
    /**
     * The set of polyline barriers loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#polylineBarriers)
     */
    polylineBarriers?: (supportDataLayerProperties & { type: "layer" }) | supportFeatureSetProperties;
    /**
     * If `true`, keeps the first stop fixed in the sequence even when `findBestSequence = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#preserveFirstStop)
     */
    preserveFirstStop?: boolean;
    /**
     * If `true`, keeps the last stop fixed in the sequence even when `findBestSequence = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#preserveLastStop)
     */
    preserveLastStop?: boolean;
    /**
     * The list of network attribute names to be used as restrictions with the analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#restrictionAttributes)
     */
    restrictionAttributes?: string[];
    /**
     * Specifies how U-Turns should be handled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#returnBarriers)
     */
    returnBarriers?: boolean;
    /**
     * Indicates whether the service should generate driving directions for each route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#returnDirections)
     */
    returnDirections?: boolean;
    /**
     * If `true`, polygon barriers are returned in the [RouteResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#returnPolygonBarriers)
     */
    returnPolygonBarriers?: boolean;
    /**
     * If `true`, polyline barriers are returned in the [RouteResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#returnPolylineBarriers)
     */
    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-rest-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#returnStops)
     */
    returnStops?: boolean;
    /**
     * If `true`, `z` values are returned in the [RouteResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#returnZ)
     */
    returnZ?: boolean;
    /**
     * The time the route begins.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-RouteParameters.html#startTimeIsUTC)
     */
    startTimeIsUTC?: boolean;
    /**
     * The set of stops loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#stops)
     */
    stops?: (supportDataLayerProperties & { type: "layer" }) | supportFeatureSetProperties;
    /**
     * A travel mode represents a means of transportation, such as driving or walking.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#travelMode)
     */
    travelMode?: TravelModeProperties;
    /**
     * If `true`, the hierarchy attribute for the network should be used in analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#useHierarchy)
     */
    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 visits to certain times of day, or "time windows".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#useTimeWindows)
     */
    useTimeWindows?: boolean;
  }

  /**
   * An object describing the parameter values for the [attributeParameterValues](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#attributeParameterValues) property of [RouteParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#AttributeParamValue)
   */
  export interface RouteParametersAttributeParamValue extends Object {
    /**
     * The name of the attribute.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#AttributeParamValue)
     */
    attributeName: string;
    /**
     * The name of the parameter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#AttributeParamValue)
     */
    parameterName: string;
    /**
     * The parameter's value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteParameters.html#AttributeParamValue)
     */
    value: string;
  }

  interface supportRouteResult extends Accessor, JSONSupport {
    /**
     * Route directions are returned if `RouteParameters.returnDirections = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteResult.html#directions)
     */
    directions: supportDirectionsFeatureSet;
    /**
     * The Route graphic that is returned if `RouteParameters.returnRoutes = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteResult.html#route)
     */
    route: Graphic;
    /**
     * The name of the route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteResult.html#routeName)
     */
    routeName: string;
    /**
     * Array of stops.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteResult.html#stops)
     */
    stops: Graphic[];
  }

  interface supportRouteResultConstructor {
    /**
     * The result from [RouteTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteResult.html)
     */

    new (properties?: supportRouteResultProperties): supportRouteResult;

    fromJSON(json: any): supportRouteResult;
  }

  export const supportRouteResult: supportRouteResultConstructor;

  interface supportRouteResultProperties {
    /**
     * Route directions are returned if `RouteParameters.returnDirections = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteResult.html#directions)
     */
    directions?: supportDirectionsFeatureSetProperties;
    /**
     * The Route graphic that is returned if `RouteParameters.returnRoutes = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteResult.html#route)
     */
    route?: GraphicProperties;
    /**
     * The name of the route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteResult.html#routeName)
     */
    routeName?: string;
    /**
     * Array of stops.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-RouteResult.html#stops)
     */
    stops?: GraphicProperties[];
  }

  interface supportServiceAreaParameters extends Accessor, JSONSupport {
    /**
     * The list of network attribute names to be accumulated with the analysis (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#accumulateAttributes)
     */
    accumulateAttributes: string[];
    /**
     * A set of attribute parameter values that can be parameterized to determine which network elements can be used by a vehicle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#attributeParameterValues)
     */
    attributeParameterValues: any[];
    /**
     * An array of numbers defining the breaks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#defaultBreaks)
     */
    defaultBreaks: number[];
    /**
     * When `true`, restricted network elements should be considered when finding network locations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#doNotLocateOnRestrictedElements)
     */
    doNotLocateOnRestrictedElements: boolean;
    /**
     * An array of network source names to NOT use when generating polygons.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#excludeSourcesFromPolygons)
     */
    excludeSourcesFromPolygons: string[];
    /**
     * The set of facilities loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#facilities)
     */
    facilities: supportDataLayer | supportFeatureSet;
    /**
     * The network attribute name used as the impedance attribute in analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-ServiceAreaParameters.html#mergeSimilarPolygonRanges)
     */
    mergeSimilarPolygonRanges: boolean;
    /**
     * The precision of the output geometry after generalization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#outputGeometryPrecision)
     */
    outputGeometryPrecision: number;
    /**
     * The units of the output geometry precision.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#outputLines)
     */
    outputLines: "none" | "true-shape" | "true-shape-with-measure";
    /**
     * The type of output polygons to be generated in the result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#outputPolygons)
     */
    outputPolygons: "none" | "simplified" | "detailed";
    /**
     * The well-known ID of the spatial reference for the geometries returned with the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference;
    /**
     * Indicates if the lines should overlap from multiple facilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#overlapLines)
     */
    overlapLines: boolean;
    /**
     * Indicates if the polygons should overlap from multiple facilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#overlapPolygons)
     */
    overlapPolygons: boolean;
    /**
     * The set of point barriers loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#pointBarriers)
     */
    pointBarriers: supportDataLayer | supportFeatureSet;
    /**
     * The set of polygon barriers loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#polygonBarriers)
     */
    polygonBarriers: supportDataLayer | supportFeatureSet;
    /**
     * The set of polyline barriers loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#polylineBarriers)
     */
    polylineBarriers: supportDataLayer | supportFeatureSet;
    /**
     * The list of network attribute names to be used as restrictions with the analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#restrictionAttributes)
     */
    restrictionAttributes: string[];
    /**
     * Specifies how U-turns should be handled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-ServiceAreaParameters.html#returnFacilities)
     */
    returnFacilities: boolean;
    /**
     * If `true`, point barriers will be returned in the [pointBarriers](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html#pointBarriers) property of the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#returnPointBarriers)
     */
    returnPointBarriers: boolean;
    /**
     * If `true`, polygon barriers will be returned in the [polygonBarriers](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html#polygonBarriers) property of the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#returnPolygonBarriers)
     */
    returnPolygonBarriers: boolean;
    /**
     * If `true`, polyline barriers will be returned in the [polylineBarriers](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html#polylineBarriers) property of the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#returnPolylineBarriers)
     */
    returnPolylineBarriers: boolean;
    /**
     * If `true`, lines will be split at breaks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#splitLinesAtBreaks)
     */
    splitLinesAtBreaks: boolean;
    /**
     * If `true`, polygons will be split at breaks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#splitPolygonsAtBreaks)
     */
    splitPolygonsAtBreaks: boolean;
    /**
     * Local date and time at the facility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#timeOfDay)
     */
    timeOfDay: Date;
    /**
     * Options for traveling to or from the facility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#travelDirection)
     */
    travelDirection: "from-facility" | "to-facility";
    /**
     * A travel mode represents a means of transportation, such as driving or walking.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#travelMode)
     */
    travelMode: TravelMode;
    /**
     * If `true`, the outermost polygon (at the maximum break value) will be trimmed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#trimOuterPolygon)
     */
    trimOuterPolygon: boolean;
    /**
     * If polygons are being trimmed, provides the distance to trim.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-ServiceAreaParameters.html#trimPolygonDistance).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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 in the analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#useHierarchy)
     */
    useHierarchy: boolean;
  }

  interface supportServiceAreaParametersConstructor {
    /**
     * Input parameters for [ServiceAreaTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ServiceAreaTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html)
     */

    new (properties?: supportServiceAreaParametersProperties): supportServiceAreaParameters;

    fromJSON(json: any): supportServiceAreaParameters;
  }

  export const supportServiceAreaParameters: supportServiceAreaParametersConstructor;

  interface supportServiceAreaParametersProperties {
    /**
     * The list of network attribute names to be accumulated with the analysis (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#accumulateAttributes)
     */
    accumulateAttributes?: string[];
    /**
     * A set of attribute parameter values that can be parameterized to determine which network elements can be used by a vehicle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#attributeParameterValues)
     */
    attributeParameterValues?: any[];
    /**
     * An array of numbers defining the breaks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#defaultBreaks)
     */
    defaultBreaks?: number[];
    /**
     * When `true`, restricted network elements should be considered when finding network locations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#doNotLocateOnRestrictedElements)
     */
    doNotLocateOnRestrictedElements?: boolean;
    /**
     * An array of network source names to NOT use when generating polygons.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#excludeSourcesFromPolygons)
     */
    excludeSourcesFromPolygons?: string[];
    /**
     * The set of facilities loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#facilities)
     */
    facilities?: (supportDataLayerProperties & { type: "layer" }) | supportFeatureSetProperties;
    /**
     * The network attribute name used as the impedance attribute in analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-ServiceAreaParameters.html#mergeSimilarPolygonRanges)
     */
    mergeSimilarPolygonRanges?: boolean;
    /**
     * The precision of the output geometry after generalization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#outputGeometryPrecision)
     */
    outputGeometryPrecision?: number;
    /**
     * The units of the output geometry precision.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#outputLines)
     */
    outputLines?: "none" | "true-shape" | "true-shape-with-measure";
    /**
     * The type of output polygons to be generated in the result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#outputPolygons)
     */
    outputPolygons?: "none" | "simplified" | "detailed";
    /**
     * The well-known ID of the spatial reference for the geometries returned with the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties;
    /**
     * Indicates if the lines should overlap from multiple facilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#overlapLines)
     */
    overlapLines?: boolean;
    /**
     * Indicates if the polygons should overlap from multiple facilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#overlapPolygons)
     */
    overlapPolygons?: boolean;
    /**
     * The set of point barriers loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#pointBarriers)
     */
    pointBarriers?: (supportDataLayerProperties & { type: "layer" }) | supportFeatureSetProperties;
    /**
     * The set of polygon barriers loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#polygonBarriers)
     */
    polygonBarriers?: (supportDataLayerProperties & { type: "layer" }) | supportFeatureSetProperties;
    /**
     * The set of polyline barriers loaded as network locations during analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#polylineBarriers)
     */
    polylineBarriers?: (supportDataLayerProperties & { type: "layer" }) | supportFeatureSetProperties;
    /**
     * The list of network attribute names to be used as restrictions with the analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#restrictionAttributes)
     */
    restrictionAttributes?: string[];
    /**
     * Specifies how U-turns should be handled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-ServiceAreaParameters.html#returnFacilities)
     */
    returnFacilities?: boolean;
    /**
     * If `true`, point barriers will be returned in the [pointBarriers](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html#pointBarriers) property of the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#returnPointBarriers)
     */
    returnPointBarriers?: boolean;
    /**
     * If `true`, polygon barriers will be returned in the [polygonBarriers](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html#polygonBarriers) property of the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#returnPolygonBarriers)
     */
    returnPolygonBarriers?: boolean;
    /**
     * If `true`, polyline barriers will be returned in the [polylineBarriers](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html#polylineBarriers) property of the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#returnPolylineBarriers)
     */
    returnPolylineBarriers?: boolean;
    /**
     * If `true`, lines will be split at breaks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#splitLinesAtBreaks)
     */
    splitLinesAtBreaks?: boolean;
    /**
     * If `true`, polygons will be split at breaks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#splitPolygonsAtBreaks)
     */
    splitPolygonsAtBreaks?: boolean;
    /**
     * Local date and time at the facility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#timeOfDay)
     */
    timeOfDay?: DateProperties;
    /**
     * Options for traveling to or from the facility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#travelDirection)
     */
    travelDirection?: "from-facility" | "to-facility";
    /**
     * A travel mode represents a means of transportation, such as driving or walking.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#travelMode)
     */
    travelMode?: TravelModeProperties;
    /**
     * If `true`, the outermost polygon (at the maximum break value) will be trimmed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#trimOuterPolygon)
     */
    trimOuterPolygon?: boolean;
    /**
     * If polygons are being trimmed, provides the distance to trim.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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-rest-support-ServiceAreaParameters.html#trimPolygonDistance).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-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 in the analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#useHierarchy)
     */
    useHierarchy?: boolean;
  }

  interface supportServiceAreaSolveResult extends Accessor, JSONSupport {
    /**
     * Array of points only returned if `ServiceAreaParameters.returnFacilities = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html#facilities)
     */
    facilities: Point[];
    /**
     * Message received when solve is completed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html#messages)
     */
    messages: supportNAMessage[];
    /**
     * The point barriers are returned only if `ServiceAreaParameters.returnPointBarriers = true` (which is not the default).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html#pointBarriers)
     */
    pointBarriers: Point[];
    /**
     * The polygon barriers are returned only if `ServiceAreaParameters.returnPolygonBarriers = true` (which is not the default).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html#polygonBarriers)
     */
    polygonBarriers: Polygon[];
    /**
     * The polyline barriers are returned only if `ServiceAreaParameters.returnPolylineBarriers = true` (which is not the default).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html#polylineBarriers)
     */
    polylineBarriers: Polyline[];
    /**
     * An array of service area polygon graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html#serviceAreaPolygons)
     */
    serviceAreaPolygons: Graphic[];
    /**
     * An array of service area polyline graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html#serviceAreaPolylines)
     */
    serviceAreaPolylines: Graphic[];
  }

  interface supportServiceAreaSolveResultConstructor {
    /**
     * The result from [ServiceAreaTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ServiceAreaTask.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html)
     */

    new (properties?: supportServiceAreaSolveResultProperties): supportServiceAreaSolveResult;

    fromJSON(json: any): supportServiceAreaSolveResult;
  }

  export const supportServiceAreaSolveResult: supportServiceAreaSolveResultConstructor;

  interface supportServiceAreaSolveResultProperties {
    /**
     * Array of points only returned if `ServiceAreaParameters.returnFacilities = true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html#facilities)
     */
    facilities?: PointProperties[];
    /**
     * Message received when solve is completed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html#messages)
     */
    messages?: supportNAMessageProperties[];
    /**
     * The point barriers are returned only if `ServiceAreaParameters.returnPointBarriers = true` (which is not the default).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html#pointBarriers)
     */
    pointBarriers?: PointProperties[];
    /**
     * The polygon barriers are returned only if `ServiceAreaParameters.returnPolygonBarriers = true` (which is not the default).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html#polygonBarriers)
     */
    polygonBarriers?: PolygonProperties[];
    /**
     * The polyline barriers are returned only if `ServiceAreaParameters.returnPolylineBarriers = true` (which is not the default).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html#polylineBarriers)
     */
    polylineBarriers?: PolylineProperties[];
    /**
     * An array of service area polygon graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html#serviceAreaPolygons)
     */
    serviceAreaPolygons?: GraphicProperties[];
    /**
     * An array of service area polyline graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html#serviceAreaPolylines)
     */
    serviceAreaPolylines?: GraphicProperties[];
  }

  interface supportStatisticDefinition extends Accessor, JSONSupport {
    /**
     * Defines the field for which statistics will be calculated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-StatisticDefinition.html#onStatisticField)
     */
    onStatisticField: string;
    /**
     * Specifies the output field name for the requested statistic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-StatisticDefinition.html#outStatisticFieldName)
     */
    outStatisticFieldName: string;
    /**
     * The parameters for [percentile statistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-StatisticDefinition.html#statisticType).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-StatisticDefinition.html#statisticParameters)
     */
    statisticParameters: supportStatisticDefinitionStatisticParameters;
    /**
     * Defines the type of statistic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-StatisticDefinition.html#statisticType)
     */
    statisticType:
      | "count"
      | "sum"
      | "min"
      | "max"
      | "avg"
      | "stddev"
      | "var"
      | "percentile-continuous"
      | "percentile-discrete";

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

  interface supportStatisticDefinitionConstructor {
    /**
     * This class defines the parameters for querying a layer or layer view for statistics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-StatisticDefinition.html)
     */

    new (properties?: supportStatisticDefinitionProperties): supportStatisticDefinition;

    fromJSON(json: any): supportStatisticDefinition;
  }

  export const supportStatisticDefinition: supportStatisticDefinitionConstructor;

  interface supportStatisticDefinitionProperties {
    /**
     * Defines the field for which statistics will be calculated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-StatisticDefinition.html#onStatisticField)
     */
    onStatisticField?: string;
    /**
     * Specifies the output field name for the requested statistic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-StatisticDefinition.html#outStatisticFieldName)
     */
    outStatisticFieldName?: string;
    /**
     * The parameters for [percentile statistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-StatisticDefinition.html#statisticType).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-StatisticDefinition.html#statisticParameters)
     */
    statisticParameters?: supportStatisticDefinitionStatisticParameters;
    /**
     * Defines the type of statistic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-StatisticDefinition.html#statisticType)
     */
    statisticType?:
      | "count"
      | "sum"
      | "min"
      | "max"
      | "avg"
      | "stddev"
      | "var"
      | "percentile-continuous"
      | "percentile-discrete";
  }

  export interface supportStatisticDefinitionStatisticParameters extends Object {
    /**
     * Percentile value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-StatisticDefinition.html#statisticParameters)
     */
    value: number;
    /**
     * Specify `ASC` (ascending) or `DESC` (descending) to control the order of the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-StatisticDefinition.html#statisticParameters)
     */
    orderBy?: "ASC" | "DESC";
  }

  interface TopFeaturesQuery extends Accessor, JSONSupport {
    /**
     * Indicates if the service should cache the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#cacheHint)
     */
    cacheHint: boolean;
    /**
     * Specifies a search distance from a given [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#geometry) in a spatial query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#distance)
     */
    distance: number;
    /**
     * The geometry to apply to the spatial filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.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-rest-support-TopFeaturesQuery.html#geometryPrecision)
     */
    geometryPrecision: number;
    /**
     * The maximum distance in units of [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#outSpatialReference) used for generalizing geometries returned by the query operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#maxAllowableOffset)
     */
    maxAllowableOffset: number;
    /**
     * The number of features to retrieve.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#num)
     */
    num: number;
    /**
     * An array of ObjectIDs to be used to query for features in a layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#objectIds)
     */
    objectIds: number[];
    /**
     * One or more field names used to order the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#orderByFields)
     */
    orderByFields: string[];
    /**
     * Attribute fields to include in the [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#outFields)
     */
    outFields: string[];
    /**
     * The spatial reference for the returned geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference;
    /**
     * If `true`, each feature in the returned [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html) includes the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#returnGeometry)
     */
    returnGeometry: boolean;
    /**
     * If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#returnGeometry) is `true`, then m-values are included in the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#returnM)
     */
    returnM: boolean;
    /**
     * If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#returnGeometry) is `true`, then z-values are included in the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#returnZ)
     */
    returnZ: boolean;
    /**
     * For spatial queries, this parameter defines the spatial relationship to query features in the layer or layer view against the input [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#geometry).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#spatialRelationship)
     */
    spatialRelationship:
      | "intersects"
      | "contains"
      | "crosses"
      | "envelope-intersects"
      | "index-intersects"
      | "overlaps"
      | "touches"
      | "within"
      | "relation";
    /**
     * The zero-based index indicating where to begin retrieving features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#start)
     */
    start: number;
    /**
     * A time extent for a temporal query against [time-aware layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#timeInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#timeExtent)
     */
    timeExtent: TimeExtent;
    /**
     * The `topFilter` parameter is used to set the [groupByFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFilter.html#groupByFields), [orderByFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFilter.html#orderByFields), and [topCount](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFilter.html#topCount) criteria used in generating the result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#topFilter)
     */
    topFilter: TopFilter;
    /**
     * The unit for calculating the buffer distance when [distance](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#distance) is specified in spatial queries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#units)
     */
    units: "feet" | "miles" | "nautical-miles" | "us-nautical-miles" | "meters" | "kilometers";
    /**
     * A where clause for the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#where)
     */
    where: string;

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

  interface TopFeaturesQueryConstructor {
    /**
     * This class defines parameters for executing [top features queries](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#queryTopFeatures) from a [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html)
     */

    new (properties?: TopFeaturesQueryProperties): TopFeaturesQuery;

    fromJSON(json: any): TopFeaturesQuery;
  }

  export const TopFeaturesQuery: TopFeaturesQueryConstructor;

  interface TopFeaturesQueryProperties {
    /**
     * Indicates if the service should cache the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#cacheHint)
     */
    cacheHint?: boolean;
    /**
     * Specifies a search distance from a given [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#geometry) in a spatial query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#distance)
     */
    distance?: number;
    /**
     * The geometry to apply to the spatial filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.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-rest-support-TopFeaturesQuery.html#geometryPrecision)
     */
    geometryPrecision?: number;
    /**
     * The maximum distance in units of [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#outSpatialReference) used for generalizing geometries returned by the query operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#maxAllowableOffset)
     */
    maxAllowableOffset?: number;
    /**
     * The number of features to retrieve.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#num)
     */
    num?: number;
    /**
     * An array of ObjectIDs to be used to query for features in a layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#objectIds)
     */
    objectIds?: number[];
    /**
     * One or more field names used to order the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#orderByFields)
     */
    orderByFields?: string[];
    /**
     * Attribute fields to include in the [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#outFields)
     */
    outFields?: string[];
    /**
     * The spatial reference for the returned geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties;
    /**
     * If `true`, each feature in the returned [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html) includes the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#returnGeometry)
     */
    returnGeometry?: boolean;
    /**
     * If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#returnGeometry) is `true`, then m-values are included in the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#returnM)
     */
    returnM?: boolean;
    /**
     * If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#returnGeometry) is `true`, then z-values are included in the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#returnZ)
     */
    returnZ?: boolean;
    /**
     * For spatial queries, this parameter defines the spatial relationship to query features in the layer or layer view against the input [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#geometry).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#spatialRelationship)
     */
    spatialRelationship?:
      | "intersects"
      | "contains"
      | "crosses"
      | "envelope-intersects"
      | "index-intersects"
      | "overlaps"
      | "touches"
      | "within"
      | "relation";
    /**
     * The zero-based index indicating where to begin retrieving features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#start)
     */
    start?: number;
    /**
     * A time extent for a temporal query against [time-aware layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#timeInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#timeExtent)
     */
    timeExtent?: TimeExtentProperties;
    /**
     * The `topFilter` parameter is used to set the [groupByFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFilter.html#groupByFields), [orderByFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFilter.html#orderByFields), and [topCount](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFilter.html#topCount) criteria used in generating the result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#topFilter)
     */
    topFilter?: TopFilterProperties;
    /**
     * The unit for calculating the buffer distance when [distance](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#distance) is specified in spatial queries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#units)
     */
    units?: "feet" | "miles" | "nautical-miles" | "us-nautical-miles" | "meters" | "kilometers";
    /**
     * A where clause for the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFeaturesQuery.html#where)
     */
    where?: string;
  }

  interface TopFilter extends Accessor, JSONSupport {
    /**
     * When one or more field names are provided in this property, the output result will be grouped based on unique values from those fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFilter.html#groupByFields)
     */
    groupByFields: string[];
    /**
     * One or more field names used to order the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFilter.html#orderByFields)
     */
    orderByFields: string[];
    /**
     * Defines the number of features to be returned from the top features query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFilter.html#topCount)
     */
    topCount: number;

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

  interface TopFilterConstructor {
    /**
     * This class defines the top filter parameters for [executing top features queries](?search=queryTopF) for features from a [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFilter.html)
     */

    new (properties?: TopFilterProperties): TopFilter;

    fromJSON(json: any): TopFilter;
  }

  export const TopFilter: TopFilterConstructor;

  interface TopFilterProperties {
    /**
     * When one or more field names are provided in this property, the output result will be grouped based on unique values from those fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFilter.html#groupByFields)
     */
    groupByFields?: string[];
    /**
     * One or more field names used to order the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFilter.html#orderByFields)
     */
    orderByFields?: string[];
    /**
     * Defines the number of features to be returned from the top features query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TopFilter.html#topCount)
     */
    topCount?: number;
  }

  interface TravelMode extends Accessor, JSONSupport {
    /**
     * Lists the parameterized attributes used by the travel mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#attributeParameterValues)
     */
    attributeParameterValues: TravelModeAttributeParameterValues[];
    /**
     * A short text description of the travel mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#description)
     */
    description: string;
    /**
     * Indicates the distance-based cost attribute for reporting directions and for solving vehicle routing problems.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#distanceAttributeName)
     */
    distanceAttributeName: string;
    /**
     * The unique identifier.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#id)
     */
    id: string;
    /**
     * The network cost attribute used as impedance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#impedanceAttributeName)
     */
    impedanceAttributeName: string;
    /**
     * The unique name of the travel mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#name)
     */
    name: string;
    /**
     * The list of the restriction attributes used when solving network analysis problems with this travel mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#restrictionAttributeNames)
     */
    restrictionAttributeNames: string[];
    /**
     * Specifies whether the travel mode generalizes the geometry of analysis results and by how much.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#simplificationTolerance)
     */
    simplificationTolerance: number;
    /**
     * The linear units associated with [simplificationTolerance](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#simplificationTolerance).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#simplificationToleranceUnits)
     */
    simplificationToleranceUnits:
      | "centimeters"
      | "decimal-degrees"
      | "decimeters"
      | "feet"
      | "inches"
      | "kilometers"
      | "meters"
      | "miles"
      | "millimeters"
      | "nautical-miles"
      | "points"
      | "yards";
    /**
     * Indicates the time-based cost attribute for reporting directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#timeAttributeName)
     */
    timeAttributeName: string;
    /**
     * Indicates the category of travel or vehicle represented by this travel mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#type)
     */
    type: "automobile" | "truck" | "walk" | "other";
    /**
     * Indicates whether the travel mode uses a hierarchy attribute while performing the analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#useHierarchy)
     */
    useHierarchy: boolean;
    /**
     * Indicates how the U-turns at junctions that could occur during network traversal are handled by the solver.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#uturnAtJunctions)
     */
    uturnAtJunctions: "allow-backtrack" | "at-dead-ends-only" | "no-backtrack" | "at-dead-ends-and-intersections";

    /**
     * Returns a deep clone of the travel mode object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#clone)
     */
    clone(): TravelMode;
  }

  interface TravelModeConstructor {
    /**
     * This class defines the parameters for querying a layer or layer view for statistics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html)
     */

    new (properties?: TravelModeProperties): TravelMode;

    fromJSON(json: any): TravelMode;
  }

  export const TravelMode: TravelModeConstructor;

  interface TravelModeProperties {
    /**
     * Lists the parameterized attributes used by the travel mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#attributeParameterValues)
     */
    attributeParameterValues?: TravelModeAttributeParameterValues[];
    /**
     * A short text description of the travel mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#description)
     */
    description?: string;
    /**
     * Indicates the distance-based cost attribute for reporting directions and for solving vehicle routing problems.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#distanceAttributeName)
     */
    distanceAttributeName?: string;
    /**
     * The unique identifier.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#id)
     */
    id?: string;
    /**
     * The network cost attribute used as impedance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#impedanceAttributeName)
     */
    impedanceAttributeName?: string;
    /**
     * The unique name of the travel mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#name)
     */
    name?: string;
    /**
     * The list of the restriction attributes used when solving network analysis problems with this travel mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#restrictionAttributeNames)
     */
    restrictionAttributeNames?: string[];
    /**
     * Specifies whether the travel mode generalizes the geometry of analysis results and by how much.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#simplificationTolerance)
     */
    simplificationTolerance?: number;
    /**
     * The linear units associated with [simplificationTolerance](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#simplificationTolerance).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#simplificationToleranceUnits)
     */
    simplificationToleranceUnits?:
      | "centimeters"
      | "decimal-degrees"
      | "decimeters"
      | "feet"
      | "inches"
      | "kilometers"
      | "meters"
      | "miles"
      | "millimeters"
      | "nautical-miles"
      | "points"
      | "yards";
    /**
     * Indicates the time-based cost attribute for reporting directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#timeAttributeName)
     */
    timeAttributeName?: string;
    /**
     * Indicates the category of travel or vehicle represented by this travel mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#type)
     */
    type?: "automobile" | "truck" | "walk" | "other";
    /**
     * Indicates whether the travel mode uses a hierarchy attribute while performing the analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#useHierarchy)
     */
    useHierarchy?: boolean;
    /**
     * Indicates how the U-turns at junctions that could occur during network traversal are handled by the solver.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#uturnAtJunctions)
     */
    uturnAtJunctions?: "allow-backtrack" | "at-dead-ends-only" | "no-backtrack" | "at-dead-ends-and-intersections";
  }

  export interface TravelModeAttributeParameterValues extends Object {
    /**
     * The name of the attribute.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#attributeParameterValues)
     */
    attributeName: string;
    /**
     * The parameter name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#attributeParameterValues)
     */
    parameterName: string;
    /**
     * The parameter value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TravelMode.html#attributeParameterValues)
     */
    value: string;
  }

  interface supportTrimExtendParameters extends Accessor, JSONSupport {
    /**
     * A flag used with the `trimExtend` operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TrimExtendParameters.html#extendHow)
     */
    extendHow:
      | "default-curve-extension"
      | "relocate-ends"
      | "keep-end-attributes"
      | "no-end-attributes"
      | "no-extend-at-from"
      | "no-extend-at-to";
    /**
     * The array of polylines to trim or extend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TrimExtendParameters.html#polylines)
     */
    polylines: Polyline[];
    /**
     * A polyline used as a guide for trimming or extending input polylines.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TrimExtendParameters.html#trimExtendTo)
     */
    trimExtendTo: Polyline;
  }

  interface supportTrimExtendParametersConstructor {
    /**
     * Used to set the parameters for the [GeometryService.trimExtend](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#trimExtend) operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TrimExtendParameters.html)
     */

    new (properties?: supportTrimExtendParametersProperties): supportTrimExtendParameters;

    fromJSON(json: any): supportTrimExtendParameters;
  }

  export const supportTrimExtendParameters: supportTrimExtendParametersConstructor;

  interface supportTrimExtendParametersProperties {
    /**
     * A flag used with the `trimExtend` operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TrimExtendParameters.html#extendHow)
     */
    extendHow?:
      | "default-curve-extension"
      | "relocate-ends"
      | "keep-end-attributes"
      | "no-end-attributes"
      | "no-extend-at-from"
      | "no-extend-at-to";
    /**
     * The array of polylines to trim or extend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TrimExtendParameters.html#polylines)
     */
    polylines?: PolylineProperties[];
    /**
     * A polyline used as a guide for trimming or extending input polylines.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-TrimExtendParameters.html#trimExtendTo)
     */
    trimExtendTo?: PolylineProperties;
  }

  /**
   * Function for determining suggested [min](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#minScale) and [max](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#maxScale) scale ranges for an input layer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-heuristics-scaleRange.html)
   */
  interface scaleRange {
    /**
     * Generates a suggested scale range (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-heuristics-scaleRange.html#scaleRange)
     */
    scaleRange(params: scaleRangeScaleRangeParams): Promise<ScaleRangeResult>;
  }

  const __scaleRangeMapped: scaleRange;
  export const scaleRange: typeof __scaleRangeMapped.scaleRange;

  /**
   * Suggested `min` and `max` scales to apply to the input layer for the [scaleRange()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-heuristics-scaleRange.html#scaleRange) function.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-smartMapping-heuristics-scaleRange.html#scaleRange)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | PointCloudLayer | GeoJSONLayer | WFSLayer;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-heuristics-scaleRange.html#scaleRange)
     */
    sampleSize?: number;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-heuristics-scaleRange.html#scaleRange)
     */
    signal?: AbortSignal;
  }

  /**
   * Function for determining the suggested `minSize` and `maxSize` of a [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-smartMapping-heuristics-sizeRange.html)
   */
  interface sizeRange {
    /**
     * Generates a suggested size range (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-heuristics-sizeRange.html#sizeRange)
     */
    sizeRange(params: sizeRangeSizeRangeParams): Promise<SizeRangeResult>;
  }

  const __sizeRangeMapped: sizeRange;
  export const sizeRange: typeof __sizeRangeMapped.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-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-smartMapping-heuristics-sizeRange.html#SizeRangeResult)
   */
  export interface SizeRangeResult extends Object {
    /**
     * The suggested sizes of the smallest symbols 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-smartMapping-heuristics-sizeRange.html#SizeRangeResult)
     */
    minSize: ScaleDependentStops;
    /**
     * The suggested sizes of the largest symbols 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-smartMapping-heuristics-sizeRange.html#SizeRangeResult)
     */
    maxSize: ScaleDependentStops;
  }

  export interface sizeRangeSizeRangeParams extends Object {
    /**
     * The 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-smartMapping-heuristics-sizeRange.html#sizeRange)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | PointCloudLayer | GeoJSONLayer | WFSLayer;
    /**
     * 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;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-heuristics-sizeRange.html#sizeRange)
     */
    signal?: AbortSignal;
  }

  /**
   * This object contains a helper method for generating default labels to be set on a layer's [cluster configuration](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#labelingInfo).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-labels-clusters.html)
   */
  interface clusters {
    /**
     * Generates default [labelingInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#labelingInfo) schemes to be set on a FeatureLayer's [featureReduction](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#featureReduction) configuration.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-labels-clusters.html#getLabelSchemes)
     */
    getLabelSchemes(params: clustersGetLabelSchemesParams): Promise<Schemes>;
  }

  export const clusters: clusters;

  export interface clustersGetLabelSchemesParams extends Object {
    /**
     * The point layer that has or will have clustering enabled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-labels-clusters.html#getLabelSchemes)
     */
    layer: FeatureLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * The renderer to set on the input layer when clustering is enabled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-labels-clusters.html#getLabelSchemes)
     */
    renderer?: Renderer;
    /**
     * The view where the input layer will be rendered.
     *
     * [Read more...](global.html)
     */
    view: MapView;
  }

  /**
   * Contains a suggested labelingInfo to be set on the layer's [featureReduction.labelingInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#labelingInfo).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-labels-clusters.html#Scheme)
   */
  export interface Scheme extends Object {
    /**
     * The name of the generated cluster labeling scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-labels-clusters.html#Scheme)
     */
    name: string;
    /**
     * The name of the aggregate field the labeling scheme is based on.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-labels-clusters.html#Scheme)
     */
    fieldName: string;
    /**
     * An array of LabelClass objects to set on the layer's [featureReduction.labelingInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#labelingInfo) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-labels-clusters.html#Scheme)
     */
    labelingInfo: LabelClass[];
    /**
     * The suggested [featureReduction.clusterMinSize](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#clusterMinSize) required to fit labels within clusters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-labels-clusters.html#Scheme)
     */
    clusterMinSize: number;
  }

  /**
   * The return object of the [getLabelSchemes()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-labels-clusters.html#getLabelSchemes) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-labels-clusters.html#Schemes)
   */
  export interface Schemes extends Object {
    /**
     * Includes the primary labeling scheme suggested for the input layer's clusters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-labels-clusters.html#Schemes)
     */
    primaryScheme: Scheme;
    /**
     * Includes secondary labeling schemes suggested for the input layer's clusters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-labels-clusters.html#Schemes)
     */
    secondarySchemes: Scheme[];
  }

  /**
   * This object contains helper methods for generating popup templates to be set on a layer's [FeatureReductionCluster](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#popupTemplate).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-popup-clusters.html)
   */
  interface popupClusters {
    /**
     * Returns one or more suggested default [popupTemplates](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) for a given layer's [FeatureReductionCluster](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureReductionCluster.html#popupTemplate) configuration.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-popup-clusters.html#getTemplates)
     */
    getTemplates(params: clustersGetTemplatesParams): Promise<Templates>;
  }

  export const popupClusters: popupClusters;

  export interface clustersGetTemplatesParams extends Object {
    /**
     * The point layer that is or will be clustered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-popup-clusters.html#getTemplates)
     */
    layer: FeatureLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * Specify the renderer to be used on the layer when `featureReduction` is enabled if it will be different than the renderer already set on the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-popup-clusters.html#getTemplates)
     */
    renderer?: Renderer;
  }

  /**
   * This object contains helper methods for generating popup templates to be set on a [layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#popupTemplate).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-popup-templates.html)
   */
  interface templates {
    /**
     * Returns one or more suggested [popupTemplates](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) for a given layer based on its renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-popup-templates.html#getTemplates)
     */
    getTemplates(params: templatesGetTemplatesParams): Promise<Templates>;
  }

  export const templates: templates;

  /**
   * Defines a suggested PopupTemplate with a given name and title describing the content and purpose of the PopupTemplate.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-popup-templates.html#Template)
   */
  export interface Template extends Object {
    /**
     * The name of the auto-generated PopupTemplate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-popup-templates.html#Template)
     */
    name: string;
    /**
     * The title of the PopupTemplate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-popup-templates.html#Template)
     */
    title: string;
    /**
     * The suggested PopupTemplate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-popup-templates.html#Template)
     */
    value: PopupTemplate;
  }

  /**
   * The return object of the [getTemplates()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-popup-templates.html#getTemplates) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-popup-templates.html#Templates)
   */
  export interface Templates extends Object {
    /**
     * Includes the primary PopupTemplate suggested for the input layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-popup-templates.html#Templates)
     */
    primaryTemplate: Template;
    /**
     * Includes secondary PopupTemplates that may be applied to the input layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-popup-templates.html#Templates)
     */
    secondaryTemplates: Template[];
  }

  export interface templatesGetTemplatesParams extends Object {
    /**
     * The layer to which the suggested popup templates can be applied.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-popup-templates.html#getTemplates)
     */
    layer: FeatureLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * Specify the renderer to be used on the layer when if it will be different than the renderer already set on the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-popup-templates.html#getTemplates)
     */
    renderer?: Renderer;
  }

  /**
   * This object contains helper methods for generating class breaks visualizations for raster layers (i.e.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-classBreaks.html)
   */
  interface classBreaks {
    /**
     * Generates a [ClassBreaksRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html) used to render imagery data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-classBreaks.html#createRenderer)
     */
    createRenderer(params: classBreaksCreateRendererParams): Promise<RasterClassBreaksResult>;
  }

  export const classBreaks: classBreaks;

  export interface classBreaksCreateRendererParams extends Object {
    /**
     * The input layer for which the renderer is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-classBreaks.html#createRenderer)
     */
    layer: ImageryLayer | ImageryTileLayer | WCSLayer;
    /**
     * Specifies the rule for how the requested image should be rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-classBreaks.html#createRenderer)
     */
    renderingRule?: RasterFunction;
    /**
     * The field whose data will be used in the classification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-classBreaks.html#createRenderer)
     */
    field?: string;
    /**
     * The classification method used for generating breaks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-classBreaks.html#createRenderer)
     */
    classificationMethod?: "equal-interval" | "natural-breaks" | "quantile" | "standard-deviation" | "defined-interval";
    /**
     * Only applicable to multidimensional datasets where a raster layer can contain more than one variable (such as temperature, humidity, wind speed) with different statistics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-classBreaks.html#createRenderer)
     */
    variableName?: string;
    /**
     * The number of class breaks to generate for the classification.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-classBreaks.html#createRenderer)
     */
    numClasses?: number;
    /**
     * The color ramp to apply to the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-classBreaks.html#createRenderer)
     */
    colorRamp?: supportAlgorithmicColorRamp | supportMultipartColorRamp;
    /**
     * The colors to apply to each class break.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-classBreaks.html#createRenderer)
     */
    colors?: number[][];
    /**
     * Only applicable when `classificationMethod` is `defined-interval`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-classBreaks.html#createRenderer)
     */
    definedInterval?: number;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-classBreaks.html#createRenderer)
     */
    signal?: AbortSignal;
  }

  /**
   * The result object of the [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-classBreaks.html#createRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-classBreaks.html#RasterClassBreaksResult)
   */
  export interface RasterClassBreaksResult extends Object {
    /**
     * The renderer object configured to best match the given basemap and the spread of the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-classBreaks.html#RasterClassBreaksResult)
     */
    renderer: ClassBreaksRenderer;
    /**
     * This object describes 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-smartMapping-raster-renderers-classBreaks.html#RasterClassBreaksResult)
     */
    classBreaksResult: ClassBreaksResult;
  }

  /**
   * This object contains helper methods for generating a [RasterColormapRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterColormapRenderer.html) for raster layers (i.e.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-colormap.html)
   */
  interface colormap {
    /**
     * Generates a [RasterColormapRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterColormapRenderer.html) used to render imagery data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-colormap.html#createRenderer)
     */
    createRenderer(params: colormapCreateRendererParams): Promise<RasterColormapResult>;
  }

  export const colormap: colormap;

  export interface colormapCreateRendererParams extends Object {
    /**
     * The input layer for which the renderer is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-colormap.html#createRenderer)
     */
    layer: ImageryLayer | ImageryTileLayer;
    /**
     * Specifies the rule for how the requested image should be rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-colormap.html#createRenderer)
     */
    renderingRule?: RasterFunction;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-colormap.html#createRenderer)
     */
    signal?: AbortSignal;
  }

  /**
   * The result object of the [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-colormap.html#createRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-colormap.html#RasterColormapResult)
   */
  export interface RasterColormapResult extends Object {
    /**
     * The colormap renderer to apply to the input layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-colormap.html#RasterColormapResult)
     */
    renderer: RasterColormapRenderer;
  }

  /**
   * This object contains helper methods for generating an RGB [stretch visualization](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html) for raster layers (i.e.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-rgb.html)
   */
  interface rgb {
    /**
     * Generates an RGB [RasterStretchRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html) to render three selected bands into red, green, and blue color channels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-rgb.html#createRenderer)
     */
    createRenderer(params: rgbCreateRendererParams): Promise<RasterRGBResult>;
  }

  export const rgb: rgb;

  /**
   * The result object of the [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-rgb.html#createRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-rgb.html#RasterRGBResult)
   */
  export interface RasterRGBResult extends Object {
    /**
     * The RGB RasterStretchRenderer renderer to apply to the input layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-rgb.html#RasterRGBResult)
     */
    renderer: RasterStretchRenderer;
    /**
     * The RGB band indexes following the order of red, green, and blue channels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-rgb.html#RasterRGBResult)
     */
    rgbBandIds: number[];
  }

  export interface rgbCreateRendererParams extends Object {
    /**
     * The input layer for which the renderer is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-rgb.html#createRenderer)
     */
    layer: ImageryLayer | ImageryTileLayer | WCSLayer;
    /**
     * Specifies the rule for how the requested image should be rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-rgb.html#createRenderer)
     */
    renderingRule?: RasterFunction;
    /**
     * A preferred stretch type can be provided.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-rgb.html#createRenderer)
     */
    stretchType?: "none" | "min-max" | "standard-deviation" | "histogram-equalization" | "percent-clip" | "sigmoid";
    /**
     * The RGB band indexes following the order of red, green, and blue channels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-rgb.html#createRenderer)
     */
    rgbBandIds?: number[];
    /**
     * The gamma values to be used if `useGamma` is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-rgb.html#createRenderer)
     */
    gamma?: number[];
    /**
     * Indicates whether the `gamma` values should be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-rgb.html#createRenderer)
     */
    useGamma?: boolean;
    /**
     * When `true`, calculates the renderer's statistics based on the current display extent and recalculates them as you zoom and pan around the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-rgb.html#createRenderer)
     */
    dynamicRangeAdjustment?: boolean;
    /**
     * Useful in scenarios where an image service does not have statistics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-rgb.html#createRenderer)
     */
    estimateStatistics?: boolean;
    /**
     * When `true`, the returned stretch renderer will extract statistics from service stats by considering band information and set them in the output renderer's [statistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#statistics) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-rgb.html#createRenderer)
     */
    includeStatisticsInStretch?: boolean;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-rgb.html#createRenderer)
     */
    signal?: AbortSignal;
  }

  /**
   * This object contains helper methods for generating a [RasterShadedReliefRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterShadedReliefRenderer.html) to render elevation values in raster layers (i.e.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-shadedRelief.html)
   */
  interface shadedRelief {
    /**
     * Generates a [RasterShadedReliefRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterShadedReliefRenderer.html) to render elevation data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-shadedRelief.html#createRenderer)
     */
    createRenderer(params: shadedReliefCreateRendererParams): Promise<RasterShadedReliefResult>;
  }

  export const shadedRelief: shadedRelief;

  /**
   * The result object of the [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-shadedRelief.html#createRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-shadedRelief.html#RasterShadedReliefResult)
   */
  export interface RasterShadedReliefResult extends Object {
    /**
     * The RasterShadedReliefRenderer renderer to apply to the input layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-shadedRelief.html#RasterShadedReliefResult)
     */
    renderer: RasterShadedReliefRenderer;
  }

  export interface shadedReliefCreateRendererParams extends Object {
    /**
     * The input layer for which the renderer is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-shadedRelief.html#createRenderer)
     */
    layer: ImageryLayer | ImageryTileLayer;
    /**
     * Specifies the rule for how the requested image should be rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-shadedRelief.html#createRenderer)
     */
    renderingRule?: RasterFunction;
    /**
     * The preferred hillshade type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-shadedRelief.html#createRenderer)
     */
    hillshadeType?: "traditional" | "multi-directional";
    /**
     * Applies a constant or adjusted z-factor based on resolution changes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-shadedRelief.html#createRenderer)
     */
    scalingType?: "none" | "adjusted";
    /**
     * The color ramp to apply to the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-shadedRelief.html#createRenderer)
     */
    colorRamp?: supportAlgorithmicColorRamp | supportMultipartColorRamp;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-shadedRelief.html#createRenderer)
     */
    signal?: AbortSignal;
  }

  /**
   * This object contains helper methods for generating a single-band [stretch visualization](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html) for raster layers (i.e.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-stretch.html)
   */
  interface stretch {
    /**
     * Generates a [RasterStretchRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html) to render data from a single raster band.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-stretch.html#createRenderer)
     */
    createRenderer(params: stretchCreateRendererParams): Promise<RasterStretchColorrampResult>;
  }

  export const stretch: stretch;

  /**
   * The result object of the [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-stretch.html#createRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-stretch.html#RasterStretchColorrampResult)
   */
  export interface RasterStretchColorrampResult extends Object {
    /**
     * The RasterStretchRenderer renderer to apply to the input layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-stretch.html#RasterStretchColorrampResult)
     */
    renderer: RasterStretchRenderer;
    /**
     * The zero-based index of the band represented by the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-stretch.html#RasterStretchColorrampResult)
     */
    bandId: number;
  }

  export interface stretchCreateRendererParams extends Object {
    /**
     * The input layer for which the renderer is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-stretch.html#createRenderer)
     */
    layer: ImageryLayer | ImageryTileLayer | WCSLayer;
    /**
     * Specifies the rule for how the requested image should be rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-stretch.html#createRenderer)
     */
    renderingRule?: RasterFunction;
    /**
     * A preferred stretch type can be provided.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-stretch.html#createRenderer)
     */
    stretchType?: "none" | "min-max" | "standard-deviation" | "histogram-equalization" | "percent-clip" | "sigmoid";
    /**
     * The 0-based index of a selected band.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-stretch.html#createRenderer)
     */
    bandId?: number;
    /**
     * The color ramp to apply to the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-stretch.html#createRenderer)
     */
    colorRamp?: supportAlgorithmicColorRamp | supportMultipartColorRamp;
    /**
     * Only applicable to multidimensional datasets where a raster layer can contain more than one variable (such as temperature, humidity, wind speed) with different statistics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-stretch.html#createRenderer)
     */
    variableName?: string;
    /**
     * The gamma values to be used if `useGamma` is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-stretch.html#createRenderer)
     */
    gamma?: number[];
    /**
     * Indicates whether the `gamma` values should be used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-stretch.html#createRenderer)
     */
    useGamma?: boolean;
    /**
     * When `true`, calculates the renderer's statistics based on the current display extent and recalculates them as you zoom and pan around the image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-stretch.html#createRenderer)
     */
    dynamicRangeAdjustment?: boolean;
    /**
     * Useful in scenarios where an image service does not have statistics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-stretch.html#createRenderer)
     */
    estimateStatistics?: boolean;
    /**
     * When `true`, the returned stretch renderer will extract statistics from service stats by considering band information and set them in the output renderer's [statistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-RasterStretchRenderer.html#statistics) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-stretch.html#createRenderer)
     */
    includeStatisticsInStretch?: boolean;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-stretch.html#createRenderer)
     */
    signal?: AbortSignal;
  }

  /**
   * This object contains helper methods for generating a [UniqueValueRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html) for raster layers (i.e.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-uniqueValue.html)
   */
  interface uniqueValue {
    /**
     * Generates a [UniqueValueRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html) to render thematic imagery.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-uniqueValue.html#createRenderer)
     */
    createRenderer(params: uniqueValueCreateRendererParams): Promise<RasterUniqueValuesResult>;
  }

  export const uniqueValue: uniqueValue;

  /**
   * The result object of the [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-uniqueValue.html#createRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-uniqueValue.html#RasterUniqueValuesResult)
   */
  export interface RasterUniqueValuesResult extends Object {
    /**
     * The UniqueValueRenderer renderer to apply to the input layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-uniqueValue.html#RasterUniqueValuesResult)
     */
    renderer: UniqueValueRenderer;
    /**
     * The class field name from which the unique value infos were generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-uniqueValue.html#RasterUniqueValuesResult)
     */
    classFieldName: string;
  }

  export interface uniqueValueCreateRendererParams extends Object {
    /**
     * The input layer for which the renderer is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-uniqueValue.html#createRenderer)
     */
    layer: ImageryLayer | ImageryTileLayer;
    /**
     * Specifies the rule for how the requested image should be rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-uniqueValue.html#createRenderer)
     */
    renderingRule?: RasterFunction;
    /**
     * A preferred class field name used for calculating unique values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-uniqueValue.html#createRenderer)
     */
    classFieldName?: string;
    /**
     * The colors to apply to each unique value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-uniqueValue.html#createRenderer)
     */
    colors?: number[][];
    /**
     * The color ramp to apply to the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-uniqueValue.html#createRenderer)
     */
    colorRamp?: supportAlgorithmicColorRamp | supportMultipartColorRamp;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-uniqueValue.html#createRenderer)
     */
    signal?: AbortSignal;
  }

  /**
   * This object contains helper methods for generating a [VectorFieldRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-VectorFieldRenderer.html) for raster layers (i.e.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-vectorField.html)
   */
  interface vectorField {
    /**
     * Generates a [VectorFieldRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-VectorFieldRenderer.html) to display raster data with vector symbols.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-vectorField.html#createRenderer)
     */
    createRenderer(params: vectorFieldCreateRendererParams): Promise<VectorFieldRendererResult>;
  }

  export const vectorField: vectorField;

  export interface vectorFieldCreateRendererParams extends Object {
    /**
     * The input layer for which the renderer is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-vectorField.html#createRenderer)
     */
    layer: ImageryLayer | ImageryTileLayer | WCSLayer;
    /**
     * Specifies the rule for how the requested image should be rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-vectorField.html#createRenderer)
     */
    renderingRule?: RasterFunction;
    /**
     * Defines the flow direction of the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-vectorField.html#createRenderer)
     */
    flowRepresentation?: "flow-from" | "flow-to";
    /**
     * Defines the origin and direction of rotation depending on how the angle of rotation was measured.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-vectorField.html#createRenderer)
     */
    rotationType?: "geographic" | "arithmetic";
    /**
     * The predefined symbol styles used to represent the vector flow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-vectorField.html#createRenderer)
     */
    style?:
      | "beaufort-ft"
      | "beaufort-km"
      | "beaufort-kn"
      | "beaufort-m"
      | "beaufort-mi"
      | "classified-arrow"
      | "ocean-current-kn"
      | "ocean-current-m"
      | "simple-scalar"
      | "single-arrow"
      | "wind-barb";
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-vectorField.html#createRenderer)
     */
    signal?: AbortSignal;
  }

  /**
   * The result object of the [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-vectorField.html#createRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-vectorField.html#VectorFieldRendererResult)
   */
  export interface VectorFieldRendererResult extends Object {
    /**
     * The VectorFieldRenderer renderer to apply to the input layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-renderers-vectorField.html#VectorFieldRendererResult)
     */
    renderer: VectorFieldRenderer;
  }

  /**
   * This object contains utility methods for obtaining information about supported renderers of raster layers (i.e.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-support-utils.html)
   */
  interface utils {
    /**
     * Returns supported raster renderer information of an imagery layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-support-utils.html#getSupportedRendererInfo)
     */
    getSupportedRendererInfo(params: utilsGetSupportedRendererInfoParams): Promise<SupportedRendererInfo>;
  }

  export const utils: utils;

  /**
   * The result object of the [getSupportedRendererInfo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-support-utils.html#getSupportedRendererInfo) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-support-utils.html#SupportedRendererInfo)
   */
  export interface SupportedRendererInfo extends Object {
    /**
     * The default renderer of the input layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-support-utils.html#SupportedRendererInfo)
     */
    defaultRenderer:
      | ClassBreaksRenderer
      | RasterColormapRenderer
      | UniqueValueRenderer
      | RasterStretchRenderer
      | VectorFieldRenderer
      | RasterShadedReliefRenderer;
    /**
     * A list of supported renderer types that may be applied to the input layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-support-utils.html#SupportedRendererInfo)
     */
    supportedTypes: SupportedRendererType[];
  }

  /**
   * Supported renderer types for imagery layers.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-support-utils.html#SupportedRendererType)
   */
  export type SupportedRendererType =
    | "raster-stretch"
    | "raster-unique-value"
    | "raster-rgb"
    | "raster-class-breaks"
    | "raster-colormap"
    | "raster-shaded-relief"
    | "raster-vector-field";

  export interface utilsGetSupportedRendererInfoParams extends Object {
    /**
     * The input layer for which the renderer info is returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-support-utils.html#getSupportedRendererInfo)
     */
    layer: ImageryLayer | ImageryTileLayer | WCSLayer;
    /**
     * Specifies the rule for how the requested image should be rendered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-support-utils.html#getSupportedRendererInfo)
     */
    renderingRule?: RasterFunction;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-raster-support-utils.html#getSupportedRendererInfo)
     */
    signal?: AbortSignal;
  }

  /**
   * This object contains helper methods for generating data-driven visualizations with continuous color or class breaks based on a field value or expression from features 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-smartMapping-renderers-color.html)
   */
  interface color {
    /**
     * Generates a continuous color [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html) representing the age of features based on one or more fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createAgeRenderer)
     */
    createAgeRenderer(params: colorCreateAgeRendererParams): Promise<AgeRendererResult>;
    /**
     * Generates a [ClassBreaksRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html) that may be applied directly to the layer used to call this method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    createClassBreaksRenderer(params: colorCreateClassBreaksRendererParams): Promise<ClassBreaksRendererResult>;
    /**
     * Generates a [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html) that may be applied directly to the layer used to call this method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    createContinuousRenderer(params: colorCreateContinuousRendererParams): Promise<ContinuousRendererResult>;
    /**
     * Generates a [PointCloudStretchRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudStretchRenderer.html) with a color scheme best-suited for 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createPCContinuousRenderer)
     */
    createPCContinuousRenderer(params: colorCreatePCContinuousRendererParams): Promise<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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createPCTrueColorRenderer)
     */
    createPCTrueColorRenderer(params: colorCreatePCTrueColorRendererParams): Promise<PCTrueColorRendererResult>;
    /**
     * This method generates a color visual variable with default stops that are optimally chosen based on the statistics queried for the indicated field or expression and colors based on the input basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createVisualVariable)
     */
    createVisualVariable(params: colorCreateVisualVariableParams): Promise<VisualVariableResult>;
  }

  export const color: color;

  /**
   * The result object of the [createAgeRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createAgeRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#AgeRendererResult)
   */
  export interface AgeRendererResult extends Object {
    /**
     * The renderer object configured to best match the given basemap and the spread of the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#AgeRendererResult)
     */
    renderer: ClassBreaksRenderer;
    /**
     * A color visual variable 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-smartMapping-renderers-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-smartMapping-renderers-color.html#AgeRendererResult)
     */
    unit: string;
    /**
     * The color scheme used by the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#AgeRendererResult)
     */
    colorScheme: ColorScheme;
    /**
     * Indicates whether default values are used in the absence of sufficient data and/or statistics from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-color.html#AgeRendererResult)
     */
    basemapId: string;
    /**
     * Indicates whether the average color of the input view's basemap is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#AgeRendererResult)
     */
    basemapTheme: string;
  }

  /**
   * The result object of the [createClassBreaksRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#ClassBreaksRendererResult)
   */
  export interface ClassBreaksRendererResult extends Object {
    /**
     * The renderer object configured to best match the given basemap and the spread of the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#ClassBreaksRendererResult)
     */
    renderer: ClassBreaksRenderer;
    /**
     * This object describes 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-smartMapping-renderers-color.html#ClassBreaksRendererResult)
     */
    classBreaksResult: ClassBreaksResult;
    /**
     * The color scheme used for the class breaks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#ClassBreaksRendererResult)
     */
    colorScheme: ColorScheme;
    /**
     * Indicates whether default values are used in the absence of sufficient data and/or statistics from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-color.html#ClassBreaksRendererResult)
     */
    basemapId: string;
    /**
     * Indicates whether the average color of the input view's basemap is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#ClassBreaksRendererResult)
     */
    basemapTheme: 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-smartMapping-renderers-color.html#createAgeRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * The view where the input layer is rendered.
     *
     * [Read more...](global.html)
     */
    view: View;
    /**
     * 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-smartMapping-renderers-color.html#createAgeRenderer)
     */
    basemap?: string | Basemap;
    /**
     * The name of the field, or a date value representing the start time in the age calculation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createAgeRenderer)
     */
    startTime: Date | string | number;
    /**
     * The name of the field, or a date value representing the end time in the age calculation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createAgeRenderer)
     */
    endTime: Date | string | number;
    /**
     * The time unit used to calculate the difference between `endTime` and `startTime`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createAgeRenderer)
     */
    unit?: "years" | "months" | "days" | "hours" | "minutes" | "seconds";
    /**
     * Sets a maximum age for the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createAgeRenderer)
     */
    maxValue?: number;
    /**
     * Sets a minimum age for the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createAgeRenderer)
     */
    minValue?: number;
    /**
     * Determines which values will be emphasized in the continuous ramp and the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createAgeRenderer)
     */
    theme?: "high-to-low" | "above" | "below" | "above-and-below" | "centered-on" | "extremes";
    /**
     * For polygon layers only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createAgeRenderer)
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * For point and polyline layers only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createAgeRenderer)
     */
    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-smartMapping-renderers-color.html#createAgeRenderer)
     */
    legendOptions?: colorCreateAgeRendererParamsLegendOptions;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatistics.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createAgeRenderer)
     */
    statistics?: SummaryStatisticsResult;
    /**
     * In authoring apps, the user may select a pre-defined color scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createAgeRenderer)
     */
    colorScheme?: ColorScheme;
    /**
     * The type of symbol to generate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createAgeRenderer)
     */
    symbolType?: "2d" | "3d-flat" | "3d-volumetric" | "3d-volumetric-uniform";
    /**
     * 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-smartMapping-renderers-color.html#createAgeRenderer)
     */
    defaultSymbolEnabled?: boolean;
    /**
     * **This option only applies to generating renderers for mesh SceneLayers**.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createAgeRenderer)
     */
    colorMixMode?: string;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createAgeRenderer)
     */
    signal?: AbortSignal;
    /**
     * Indicates whether to add edges to the output renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createAgeRenderer)
     */
    edgesType?: "solid" | "none";
  }

  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-smartMapping-renderers-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-smartMapping-renderers-color.html#createAgeRenderer)
     */
    showLegend?: boolean;
  }

  export interface colorCreateClassBreaksRendererParams extends Object {
    /**
     * The layer for which the visualization is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * The view where the input layer is rendered.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * 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-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    basemap?: string | Basemap;
    /**
     * The name of the field whose data will be queried for statistics and classified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    field?: string;
    /**
     * The name of the field to normalize the values of the given `field`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    normalizationField?: string;
    /**
     * Indicates how the data is normalized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    normalizationType?: "field" | "log" | "percent-of-total";
    /**
     * 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-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    normalizationTotal?: number;
    /**
     * The classification method used for generating breaks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    classificationMethod?: "equal-interval" | "natural-breaks" | "quantile" | "standard-deviation";
    /**
     * If a `standard-deviation` classification method is used, then this indicates the interval by which to generate class breaks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    standardDeviationInterval?: number;
    /**
     * The number of class breaks to generate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    numClasses?: number;
    /**
     * In authoring apps, the user may select a pre-defined color scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    colorScheme?: ColorScheme;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    valueExpressionTitle?: string;
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    sqlWhere?: string;
    /**
     * For polygon layers only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * Provides options for setting a title to describe a field instead of using the field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    legendOptions?: colorCreateClassBreaksRendererParamsLegendOptions;
    /**
     * A minimum value set by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    minValue?: number;
    /**
     * A maximum value set by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    maxValue?: number;
    /**
     * Enables the `defaultSymbol` on the renderer and assigns it to features with no value and features that do not fall within the configured data range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    defaultSymbolEnabled?: boolean;
    /**
     * The type of symbol to generate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    symbolType?: "2d" | "3d-flat" | "3d-volumetric" | "3d-volumetric-uniform";
    /**
     * **This option only applies to generating renderers for mesh SceneLayers**.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    colorMixMode?: string;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    signal?: AbortSignal;
    /**
     * Indicates whether to add edges to the output renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    edgesType?: "solid" | "none";
  }

  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-smartMapping-renderers-color.html#createClassBreaksRenderer)
     */
    title?: string;
  }

  export interface colorCreateContinuousRendererParams extends Object {
    /**
     * The layer for which the visualization is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * The view where the input layer is rendered.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * 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-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    basemap?: string | Basemap;
    /**
     * The name of the field whose data will be queried for statistics and used for the basis of the data-driven visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    field?: string;
    /**
     * The name of the field to normalize the values of the given `field`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    normalizationField?: string;
    /**
     * Determines which values will be emphasized in the continuous ramp and the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    theme?: "high-to-low" | "above" | "below" | "above-and-below" | "centered-on" | "extremes";
    /**
     * In authoring apps, the user may select a pre-defined color scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    colorScheme?: ColorScheme;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    valueExpressionTitle?: string;
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    sqlWhere?: string;
    /**
     * For polygon layers only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * For point and polyline layers only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    sizeOptimizationEnabled?: boolean;
    /**
     * Provides options for setting a title to a field when an expression is provided instead of a field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    legendOptions?: colorCreateContinuousRendererParamsLegendOptions;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatistics.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    statistics?: SummaryStatisticsResult;
    /**
     * A custom minimum value set by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    minValue?: number;
    /**
     * A custom maximum value set by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    maxValue?: number;
    /**
     * Enables the `defaultSymbol` on the renderer and assigns it to features with no value and features that do not fall within the configured data range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    defaultSymbolEnabled?: boolean;
    /**
     * The type of symbol to generate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    symbolType?: "2d" | "3d-flat" | "3d-volumetric" | "3d-volumetric-uniform";
    /**
     * **This option only applies to generating renderers for mesh SceneLayers**.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    colorMixMode?: string;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    signal?: AbortSignal;
    /**
     * Indicates whether to add edges to the output renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer)
     */
    edgesType?: "solid" | "none";
  }

  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-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-color.html#createPCContinuousRenderer)
     */
    layer: PointCloudLayer;
    /**
     * The name of the field whose data will be queried for statistics and used for the basis of the data-driven visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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 basemap that will be paired with the output visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createPCContinuousRenderer)
     */
    basemap?: string | Basemap;
    /**
     * The size of each point expressed as a percentage.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createPCContinuousRenderer)
     */
    size?: string;
    /**
     * The number of points per inch in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createPCContinuousRenderer)
     */
    density?: number;
    /**
     * In authoring apps, the user may select a pre-defined color scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createPCContinuousRenderer)
     */
    colorScheme?: ColorScheme;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatistics.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createPCContinuousRenderer)
     */
    statistics?: SummaryStatisticsResult;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createPCContinuousRenderer)
     */
    signal?: AbortSignal;
  }

  export interface colorCreatePCTrueColorRendererParams extends Object {
    /**
     * The layer for which the visualization is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createPCTrueColorRenderer)
     */
    layer: PointCloudLayer;
    /**
     * The size of each point expressed as a percentage.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createPCTrueColorRenderer)
     */
    size?: string;
    /**
     * The number of points per inch in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createPCTrueColorRenderer)
     */
    density?: number;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createPCTrueColorRenderer)
     */
    signal?: AbortSignal;
  }

  export interface colorCreateVisualVariableParams extends Object {
    /**
     * The layer for which the visual variable is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createVisualVariable)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * The view where the input layer is rendered.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * 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-smartMapping-renderers-color.html#createVisualVariable)
     */
    basemap?: string | Basemap;
    /**
     * The name of the field whose data will be queried for statistics and used for the basis of the data-driven visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createVisualVariable)
     */
    field?: string;
    /**
     * The name of the field to normalize the values of the given `field`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createVisualVariable)
     */
    normalizationField?: string;
    /**
     * Determines which values will be emphasized in the continuous ramp and the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createVisualVariable)
     */
    theme?: "high-to-low" | "above" | "below" | "above-and-below" | "centered-on" | "extremes";
    /**
     * In authoring apps, the user may select a pre-defined color scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createVisualVariable)
     */
    colorScheme?: ColorScheme;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createVisualVariable)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createVisualVariable)
     */
    valueExpressionTitle?: string;
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createVisualVariable)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createVisualVariable)
     */
    sqlWhere?: string;
    /**
     * Provides options for setting a title to a field when an expression is provided instead of a field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createVisualVariable)
     */
    legendOptions?: colorCreateVisualVariableParamsLegendOptions;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatistics.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createVisualVariable)
     */
    statistics?: SummaryStatisticsResult;
    /**
     * A custom minimum value set by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createVisualVariable)
     */
    minValue?: number;
    /**
     * A custom maximum value set by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createVisualVariable)
     */
    maxValue?: number;
    /**
     * Indicates if the size units of the symbols will be in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createVisualVariable)
     */
    worldScale?: boolean;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createVisualVariable)
     */
    signal?: AbortSignal;
  }

  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-smartMapping-renderers-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-smartMapping-renderers-color.html#createVisualVariable)
     */
    showLegend?: boolean;
  }

  /**
   * The result object of the [createContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#ContinuousRendererResult)
   */
  export interface ContinuousRendererResult extends Object {
    /**
     * The renderer object configured to best match the given basemap and the spread of the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#ContinuousRendererResult)
     */
    renderer: ClassBreaksRenderer;
    /**
     * A color visual variable 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-smartMapping-renderers-color.html#ContinuousRendererResult)
     */
    visualVariable: ColorVariable;
    /**
     * The color scheme used by the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#ContinuousRendererResult)
     */
    colorScheme: ColorScheme;
    /**
     * Indicates whether default values are used in the absence of sufficient data and/or statistics from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-color.html#ContinuousRendererResult)
     */
    basemapId: string;
    /**
     * Indicates whether the average color of the input view's basemap is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#ContinuousRendererResult)
     */
    basemapTheme: string;
  }

  /**
   * The result object of the [createPCContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createPCContinuousRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#PCContinuousRendererResult)
   */
  export interface PCContinuousRendererResult extends Object {
    /**
     * The renderer object configured to best match the given basemap and the spread of the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#PCContinuousRendererResult)
     */
    renderer: PointCloudStretchRenderer;
    /**
     * The color scheme used by the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#PCContinuousRendererResult)
     */
    colorScheme: ColorScheme;
    /**
     * Indicates whether default values are used in the absence of sufficient data and/or statistics from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-color.html#PCContinuousRendererResult)
     */
    basemapId: string;
    /**
     * Indicates whether the average color of the input view's basemap is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#PCContinuousRendererResult)
     */
    basemapTheme: string;
  }

  /**
   * The result object of the [createPCTrueColorRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createPCTrueColorRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#PCTrueColorRendererResult)
   */
  export interface PCTrueColorRendererResult extends Object {
    /**
     * The renderer object configured to represent the true color of each point in the point cloud.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#PCTrueColorRendererResult)
     */
    renderer: PointCloudRGBRenderer;
  }

  /**
   * The result object of the [createVisualVariable()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createVisualVariable) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#VisualVariableResult)
   */
  export interface VisualVariableResult extends Object {
    /**
     * A color visual variable 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-smartMapping-renderers-color.html#VisualVariableResult)
     */
    visualVariable: ColorVariable;
    /**
     * The color scheme used by the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-color.html#VisualVariableResult)
     */
    statistics: SummaryStatisticsResult;
    /**
     * Indicates whether default values are used in the absence of sufficient data and/or statistics from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-color.html#VisualVariableResult)
     */
    basemapId: string;
    /**
     * Indicates whether the average color of the input view's basemap is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#VisualVariableResult)
     */
    basemapTheme: string;
    /**
     * Authoring information related to the creation of the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#VisualVariableResult)
     */
    authoringInfo: AuthoringInfo;
  }

  /**
   * This object contains a helper method for generating a [dot density visualization](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-dotDensity.html)
   */
  interface dotDensity {
    /**
     * Generates a [DotDensityRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-DotDensityRenderer.html) based on one or more complementary numeric fields and/or Arcade expressions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-dotDensity.html#createRenderer)
     */
    createRenderer(params: dotDensityCreateRendererParams): Promise<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-smartMapping-renderers-dotDensity.html#createRenderer)
     */
    layer: FeatureLayer | GeoJSONLayer | WFSLayer;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-dotDensity.html#createRenderer)
     */
    basemap?: string | Basemap;
    /**
     * Indicates whether to vary the value of each dot by the view's scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-dotDensity.html#createRenderer)
     */
    dotValueOptimizationEnabled?: boolean;
    /**
     * Indicates whether to enable color blending of different colored dots rendered at the same pixel.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-dotDensity.html#createRenderer)
     */
    dotBlendingEnabled?: boolean;
    /**
     * Indicates whether the polygon outline width should vary based on view scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-dotDensity.html#createRenderer)
     */
    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-smartMapping-renderers-dotDensity.html#createRenderer)
     */
    legendOptions?: dotDensityCreateRendererParamsLegendOptions;
    /**
     * In authoring apps, the user may select a pre-defined dot density scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-dotDensity.html#createRenderer)
     */
    dotDensityScheme?: DotDensityScheme;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-dotDensity.html#createRenderer)
     */
    signal?: AbortSignal;
  }

  export interface dotDensityCreateRendererParamsAttributes extends Object {
    /**
     * The name of a numeric field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-dotDensity.html#createRenderer)
     */
    field?: string;
    /**
     * The label describing the field name (or category) in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-dotDensity.html#createRenderer)
     */
    label?: string;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-dotDensity.html#createRenderer)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-dotDensity.html#createRenderer)
     */
    valueExpressionTitle?: string;
  }

  export interface dotDensityCreateRendererParamsLegendOptions extends Object {
    /**
     * Indicates the unit represented by each dot in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-dotDensity.html#createRenderer)
     */
    unit?: string;
  }

  /**
   * The result object of the [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-dotDensity.html#createRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-dotDensity.html#RendererResult)
   */
  export interface RendererResult extends Object {
    /**
     * The object representing the dot density visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-dotDensity.html#RendererResult)
     */
    basemapId: string;
    /**
     * Indicates whether the average color of the input view's basemap is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-dotDensity.html#RendererResult)
     */
    basemapTheme: string;
  }

  /**
   * This object contains a helper method for generating a [HeatmapRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html) for a 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-smartMapping-renderers-heatmap.html)
   */
  interface heatmap {
    /**
     * Generates a [HeatmapRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html) that may be applied directly to the layer used to call this method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-heatmap.html#createRenderer)
     */
    createRenderer(params: heatmapCreateRendererParams): Promise<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-smartMapping-renderers-heatmap.html#createRenderer)
     */
    layer: FeatureLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-heatmap.html#createRenderer)
     */
    basemap?: string | Basemap;
    /**
     * In authoring apps, the user may select a pre-defined heatmap scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-heatmap.html#createRenderer)
     */
    heatmapScheme?: HeatmapScheme;
    /**
     * A statistics object generated from the [heatmapStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-heatmapStatistics.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-heatmap.html#createRenderer)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-heatmap.html#createRenderer)
     */
    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-smartMapping-renderers-heatmap.html#createRenderer)
     */
    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-smartMapping-renderers-heatmap.html#createRenderer)
     */
    maxRatio?: number;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-heatmap.html#createRenderer)
     */
    signal?: AbortSignal;
  }

  /**
   * The result object of the [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-heatmap.html#createRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-heatmap.html#HeatmapRendererResult)
   */
  export interface HeatmapRendererResult extends Object {
    /**
     * The renderer object configured to best match the given basemap and the spread of the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-heatmap.html#HeatmapRendererResult)
     */
    renderer: HeatmapRenderer;
    /**
     * The color scheme used by the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-heatmap.html#HeatmapRendererResult)
     */
    scheme: HeatmapScheme;
    /**
     * Indicates whether default values are used in the absence of sufficient data and/or statistics from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-heatmap.html#HeatmapRendererResult)
     */
    basemapId: string;
    /**
     * Indicates whether the average color of the input view's basemap is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-heatmap.html#HeatmapRendererResult)
     */
    basemapTheme: string;
  }

  /**
   * This object contains helper methods for generating location-only visualizations (not data-driven) 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-smartMapping-renderers-location.html)
   */
  interface location {
    /**
     * Generates a [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html) that may be applied directly to a supported [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-location.html#createRenderer)
     */
    createRenderer(params: locationCreateRendererParams): Promise<locationRendererResult>;
  }

  export const location: location;

  export interface locationCreateRendererParams extends Object {
    /**
     * The layer for which the visualization is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-location.html#createRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * The view where the input layer is rendered.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * 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-smartMapping-renderers-location.html#createRenderer)
     */
    basemap?: string | Basemap;
    /**
     * In authoring apps, the user may select a pre-defined location scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-location.html#createRenderer)
     */
    locationScheme?: LocationScheme;
    /**
     * For point and polyline layers only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-location.html#createRenderer)
     */
    sizeOptimizationEnabled?: boolean;
    /**
     * For polygon layers only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-location.html#createRenderer)
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * The type of symbol to generate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-location.html#createRenderer)
     */
    symbolType?: "2d" | "3d-flat" | "3d-volumetric" | "3d-volumetric-uniform";
    /**
     * **This option only applies to generating renderers for mesh SceneLayers**.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-location.html#createRenderer)
     */
    colorMixMode?: string;
    /**
     * Indicates whether to add edges to the output renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-location.html#createRenderer)
     */
    edgesType?: "solid" | "none";
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-location.html#createRenderer)
     */
    signal?: AbortSignal;
  }

  /**
   * The result object of the [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-location.html#createRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-location.html#RendererResult)
   */
  export interface locationRendererResult extends Object {
    /**
     * A simple renderer configured with a single color best suited to match the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-location.html#RendererResult)
     */
    renderer: SimpleRenderer;
    /**
     * The location scheme used by the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-location.html#RendererResult)
     */
    basemapId: string;
    /**
     * Indicates whether the average color of the input view's basemap is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-location.html#RendererResult)
     */
    basemapTheme: string;
  }

  /**
   * This object contains a helper method for generating data-driven visualizations with continuous opacity based on data returned from a field value 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-smartMapping-renderers-opacity.html)
   */
  interface opacity {
    /**
     * This method generates an opacity visual variable with default alpha values optimally mapped to data values based on the statistics queried for the indicated field or expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-opacity.html#createVisualVariable)
     */
    createVisualVariable(params: opacityCreateVisualVariableParams): Promise<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-smartMapping-renderers-opacity.html#createVisualVariable)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * The name of the field whose data will be queried for statistics and used for the basis of the data-driven visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-opacity.html#createVisualVariable)
     */
    field?: string;
    /**
     * The name of the field to normalize the values of the given `field`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-opacity.html#createVisualVariable)
     */
    normalizationField?: string;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-opacity.html#createVisualVariable)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-opacity.html#createVisualVariable)
     */
    valueExpressionTitle?: string;
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-opacity.html#createVisualVariable)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-opacity.html#createVisualVariable)
     */
    sqlWhere?: string;
    /**
     * Provides options for setting a title to a field when an expression is provided instead of a field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-opacity.html#createVisualVariable)
     */
    legendOptions?: opacityCreateVisualVariableParamsLegendOptions;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatistics.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-opacity.html#createVisualVariable)
     */
    statistics?: SummaryStatisticsResult;
    /**
     * A custom minimum value set by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-opacity.html#createVisualVariable)
     */
    minValue?: number;
    /**
     * A custom maximum value set by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-opacity.html#createVisualVariable)
     */
    signal?: AbortSignal;
  }

  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-smartMapping-renderers-opacity.html#createVisualVariable)
     */
    title?: string;
  }

  /**
   * The result object of the [createVisualVariable()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-opacity.html#createVisualVariable) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-opacity.html#VisualVariableResult)
     */
    statistics: SummaryStatisticsResult;
    /**
     * Indicates whether default values are used in the absence of sufficient data and/or statistics from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-opacity.html#VisualVariableResult)
     */
    defaultValuesUsed: boolean;
    /**
     * Authoring information related to the creation of the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-opacity.html#VisualVariableResult)
     */
    authoringInfo: AuthoringInfo;
  }

  /**
   * This object contains a helper method for generating a predominance visualization.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-predominance.html)
   */
  interface predominance {
    /**
     * Generates a predominance renderer based on a set of competing numeric fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-predominance.html#createRenderer)
     */
    createRenderer(params: predominanceCreateRendererParams): Promise<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-smartMapping-renderers-predominance.html#createRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-predominance.html#createRenderer)
     */
    basemap?: string | Basemap;
    /**
     * Indicates whether to include data-driven opacity in the final renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-predominance.html#createRenderer)
     */
    includeOpacityVariable?: boolean;
    /**
     * Indicates whether to include data-driven size in the final renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-predominance.html#createRenderer)
     */
    includeSizeVariable?: boolean;
    /**
     * Only for polygon layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-predominance.html#createRenderer)
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * Indicates whether symbol sizes should vary based on view scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-predominance.html#createRenderer)
     */
    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-smartMapping-renderers-predominance.html#createRenderer)
     */
    legendOptions?: predominanceCreateRendererParamsLegendOptions;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatistics.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-predominance.html#createRenderer)
     */
    sortBy?: "count" | "value";
    /**
     * In authoring apps, the user may select a pre-defined predominance scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-predominance.html#createRenderer)
     */
    predominanceScheme?: PredominanceScheme;
    /**
     * The type of symbol to generate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-predominance.html#createRenderer)
     */
    symbolType?: "2d" | "3d-flat" | "3d-volumetric" | "3d-volumetric-uniform";
    /**
     * 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-smartMapping-renderers-predominance.html#createRenderer)
     */
    defaultSymbolEnabled?: boolean;
    /**
     * **This option only applies to generating renderers for mesh SceneLayers**.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-predominance.html#createRenderer)
     */
    colorMixMode?: string;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-predominance.html#createRenderer)
     */
    signal?: AbortSignal;
    /**
     * Indicates whether to add edges to the output renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-predominance.html#createRenderer)
     */
    edgesType?: string;
  }

  export interface predominanceCreateRendererParamsFields extends Object {
    /**
     * The name of a numeric field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-predominance.html#createRenderer)
     */
    name: string;
    /**
     * The label describing the field name (or category) in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-predominance.html#createRenderer)
     */
    showLegend?: boolean;
  }

  /**
   * The result object of the [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-predominance.html#createRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-predominance.html#RendererResult)
   */
  export interface predominanceRendererResult extends Object {
    /**
     * The unique value renderer object representing the predominance visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-predominance.html#RendererResult)
     */
    predominantCategoryInfos: typeUniqueValueInfo[];
    /**
     * An array of objects describing the values or categories excluded from consideration in visualizing data from the given fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-predominance.html#RendererResult)
     */
    excludedCategoryInfos: any[];
    /**
     * A size visual variable representing the total count of all fields included in the predominance visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-predominance.html#RendererResult)
     */
    size?: sizeVisualVariableResult;
    /**
     * An opacity visual variable representing the percentage of the total count comprised by the predominant value of all fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-predominance.html#RendererResult)
     */
    basemapId: string;
    /**
     * Indicates whether the average color of the input view's basemap is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-predominance.html#RendererResult)
     */
    basemapTheme: string;
  }

  /**
   * This object contains a helper method for creating a renderer for exploring the relationship between two numeric attributes.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html)
   */
  interface relationship {
    /**
     * Generates a relationship renderer (bivariate choropleth) based on a set of competing numeric fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    createRenderer(params: relationshipCreateRendererParams): Promise<relationshipRendererResult>;
    /**
     * Updates a relationship renderer (bivariate choropleth) generated from [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer) based on the given input parameters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#updateRenderer)
     */
    updateRenderer(params: relationshipUpdateRendererParams): Promise<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-smartMapping-renderers-relationship.html#createRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * 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`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    field1: relationshipCreateRendererParamsField1;
    /**
     * A numeric field that will be used to explore its relationship with `field1`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    field2: relationshipCreateRendererParamsField2;
    /**
     * The method for classifying each field's data values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    classificationMethod?: "quantile" | "equal-interval" | "natural-breaks";
    /**
     * Determines the orientation 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-smartMapping-renderers-relationship.html#createRenderer)
     */
    focus?: string;
    /**
     * Indicates the number of classes by which to break up the values of each field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    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-smartMapping-renderers-relationship.html#createRenderer)
     */
    basemap?: string | Basemap;
    /**
     * For polygon layers only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * For point and polyline layers only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    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-smartMapping-renderers-relationship.html#createRenderer)
     */
    legendOptions?: relationshipCreateRendererParamsLegendOptions;
    /**
     * In authoring apps, the user may select a pre-defined relationship scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    relationshipScheme?: RelationshipScheme;
    /**
     * The type of symbol to generate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    symbolType?: "2d" | "3d-flat" | "3d-volumetric" | "3d-volumetric-uniform";
    /**
     * 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-smartMapping-renderers-relationship.html#createRenderer)
     */
    defaultSymbolEnabled?: boolean;
    /**
     * **This option only applies to generating renderers for mesh SceneLayers**.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    colorMixMode?: string;
    /**
     * Indicates whether to add edges to the output renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    edgesType?: string;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    signal?: AbortSignal;
  }

  export interface relationshipCreateRendererParamsField1 extends Object {
    /**
     * The name of a numeric field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    field: string;
    /**
     * The name of a numeric field used to normalize the given `field`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    normalizationField?: string;
    /**
     * The maximum bound of values to visualize in the given field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    maxValue?: number;
    /**
     * The minimum bound of values to visualize in the given field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    minValue?: number;
    /**
     * The label used to describe the field or variable in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    label?: string;
  }

  export interface relationshipCreateRendererParamsField2 extends Object {
    /**
     * The name of a numeric field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    field: string;
    /**
     * The name of a numeric field used to normalize the given `field`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    normalizationField?: string;
    /**
     * The maximum bound of values to visualize in the given field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    maxValue?: number;
    /**
     * The minimum bound of values to visualize in the given field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    minValue?: number;
    /**
     * The label used to describe the field or variable in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)
     */
    label?: string;
  }

  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-smartMapping-renderers-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-smartMapping-renderers-relationship.html#createRenderer)
     */
    showLegend?: boolean;
  }

  export interface relationshipUpdateRendererParams extends Object {
    /**
     * A numeric field used to explore its relationship with `field2`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#updateRenderer)
     */
    field1: relationshipUpdateRendererParamsField1;
    /**
     * A numeric field used to explore its relationship with `field1`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#updateRenderer)
     */
    field2: relationshipUpdateRendererParamsField2;
    /**
     * Determines the orientation 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-smartMapping-renderers-relationship.html#updateRenderer)
     */
    focus?: string;
    /**
     * Indicates the number of classes by which to break up the values of each field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-relationship.html#updateRenderer)
     */
    colors: Color[];
    /**
     * The relationship renderer (generated from [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer)) to update with the other parameters provided in this method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-relationship.html#updateRenderer)
     */
    field: string;
    /**
     * The name of a numeric field used to normalize the given `field`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-relationship.html#updateRenderer)
     */
    classBreakInfos: ClassBreak[];
    /**
     * The label used to describe the field or variable in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#updateRenderer)
     */
    label?: string;
  }

  export interface relationshipUpdateRendererParamsField2 extends Object {
    /**
     * The name of a numeric field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#updateRenderer)
     */
    field: string;
    /**
     * The name of a numeric field used to normalize the given `field`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-relationship.html#updateRenderer)
     */
    classBreakInfos: ClassBreak[];
    /**
     * The label used to describe the field or variable in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#updateRenderer)
     */
    label?: string;
  }

  /**
   * The result object of the [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#createRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#RendererResult)
   */
  export interface relationshipRendererResult extends Object {
    /**
     * The renderer object representing the relationship visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-relationship.html#RendererResult)
     */
    classBreaks: RendererResultClassBreaks;
    /**
     * Describes each container or bin used in the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-relationship.html#RendererResult)
     */
    basemapId: string;
    /**
     * Indicates whether the average color of the input view's basemap is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html#RendererResult)
     */
    basemapTheme: 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-smartMapping-renderers-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-smartMapping-renderers-relationship.html#RendererResult)
     */
    field2: ClassBreaksResult;
  }

  /**
   * This object contains helper methods for generating data-driven visualizations with continuous size or class breaks based on a field value or expression from features 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-smartMapping-renderers-size.html)
   */
  interface size {
    /**
     * Generates a continuous size [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html) representing the age of features based on one or more fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createAgeRenderer)
     */
    createAgeRenderer(params: sizeCreateAgeRendererParams): Promise<sizeAgeRendererResult>;
    /**
     * Generates a [ClassBreaksRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html) that may be applied directly to the layer used to call this method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    createClassBreaksRenderer(params: sizeCreateClassBreaksRendererParams): Promise<sizeClassBreaksRendererResult>;
    /**
     * Generates a [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html) that may be applied directly to the layer used to call this method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    createContinuousRenderer(params: sizeCreateContinuousRendererParams): Promise<sizeContinuousRendererResult>;
    /**
     * This method generates an array of size visual variables with default stops that are optimally chosen based on the statistics queried for the indicated field or expression and mapped to appropriate sizes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createVisualVariables)
     */
    createVisualVariables(params: sizeCreateVisualVariablesParams): Promise<sizeVisualVariableResult>;
  }

  export const size: size;

  /**
   * The result object of the [createAgeRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createAgeRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#AgeRendererResult)
   */
  export interface sizeAgeRendererResult extends Object {
    /**
     * The renderer object configured to best match the given basemap and the spread of the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-size.html#AgeRendererResult)
     */
    unit: string;
    /**
     * The size scheme used by the visual variables.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#AgeRendererResult)
     */
    sizeScheme: SizeScheme;
    /**
     * Indicates whether default values are used in the absence of sufficient data and/or statistics from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-size.html#AgeRendererResult)
     */
    basemapId: string;
    /**
     * Indicates whether the average color of the input view's basemap is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#AgeRendererResult)
     */
    basemapTheme: string;
  }

  /**
   * The result object of the [createClassBreaksRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#ClassBreaksRendererResult)
   */
  export interface sizeClassBreaksRendererResult extends Object {
    /**
     * The renderer object configured to best match the given basemap and the spread of the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#ClassBreaksRendererResult)
     */
    renderer: ClassBreaksRenderer;
    /**
     * This object describes 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-smartMapping-renderers-size.html#ClassBreaksRendererResult)
     */
    classBreaksResult: ClassBreaksResult;
    /**
     * The size scheme used by the visual variables.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#ClassBreaksRendererResult)
     */
    sizeScheme: SizeScheme;
    /**
     * Indicates whether default values are used in the absence of sufficient data and/or statistics from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-size.html#ClassBreaksRendererResult)
     */
    basemapId: string;
    /**
     * Indicates whether the average color of the input view's basemap is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#ClassBreaksRendererResult)
     */
    basemapTheme: string;
  }

  /**
   * The result object of the [createContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#ContinuousRendererResult)
   */
  export interface sizeContinuousRendererResult extends Object {
    /**
     * The renderer object configured to best match the given basemap and the spread of the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#ContinuousRendererResult)
     */
    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-smartMapping-renderers-size.html#ContinuousRendererResult)
     */
    visualVariables: SizeVariable[];
    /**
     * The size scheme used by the visual variables.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#ContinuousRendererResult)
     */
    sizeScheme: SizeScheme;
    /**
     * Indicates whether default values are used in the absence of sufficient data and/or statistics from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-size.html#ContinuousRendererResult)
     */
    basemapId: string;
    /**
     * Indicates whether the average color of the input view's basemap is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#ContinuousRendererResult)
     */
    basemapTheme: 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-smartMapping-renderers-size.html#createAgeRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * The view where the input layer is rendered.
     *
     * [Read more...](global.html)
     */
    view: View;
    /**
     * The name of the field, or a date value representing the start time in the age calculation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createAgeRenderer)
     */
    startTime: Date | string | number;
    /**
     * The name of the field, or a date value representing the end time in the age calculation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createAgeRenderer)
     */
    endTime: Date | string | number;
    /**
     * The time unit used to calculate the difference between `endTime` and `startTime`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createAgeRenderer)
     */
    unit?: "years" | "months" | "days" | "hours" | "minutes" | "seconds";
    /**
     * Sets the size stops based on meaningful data values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createAgeRenderer)
     */
    theme?: "high-to-low" | "above" | "below";
    /**
     * Sets a maximum age for the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createAgeRenderer)
     */
    maxValue?: number;
    /**
     * Sets a minimum age for the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createAgeRenderer)
     */
    minValue?: 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-smartMapping-renderers-size.html#createAgeRenderer)
     */
    basemap?: string | Basemap;
    /**
     * Only for polygon layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createAgeRenderer)
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * Indicates whether symbol sizes should vary based on view scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createAgeRenderer)
     */
    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-smartMapping-renderers-size.html#createAgeRenderer)
     */
    legendOptions?: sizeCreateAgeRendererParamsLegendOptions;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatistics.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createAgeRenderer)
     */
    statistics?: SummaryStatisticsResult;
    /**
     * In authoring apps, the user may select a pre-defined size scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createAgeRenderer)
     */
    sizeScheme?: SizeScheme;
    /**
     * The type of symbol to generate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createAgeRenderer)
     */
    symbolType?: "2d" | "3d-flat" | "3d-volumetric" | "3d-volumetric-uniform";
    /**
     * 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-smartMapping-renderers-size.html#createAgeRenderer)
     */
    defaultSymbolEnabled?: boolean;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createAgeRenderer)
     */
    signal?: AbortSignal;
  }

  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-smartMapping-renderers-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-smartMapping-renderers-size.html#createAgeRenderer)
     */
    showLegend?: boolean;
  }

  export interface sizeCreateClassBreaksRendererParams extends Object {
    /**
     * The layer for which the visualization is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * The view where the input layer is rendered.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * 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-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    basemap?: string | Basemap;
    /**
     * The name of the field whose data will be queried for statistics and classified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    field: string;
    /**
     * The name of the field to normalize the values of the given `field`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    normalizationField?: string;
    /**
     * Indicates how the data is normalized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    normalizationType?: "field" | "log" | "percent-of-total";
    /**
     * 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-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    normalizationTotal?: number;
    /**
     * The classification method used for generating breaks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    classificationMethod?: "equal-interval" | "natural-breaks" | "quantile" | "standard-deviation";
    /**
     * If a `standard-deviation` classification method is used, then this indicates the interval by which to generate class breaks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    standardDeviationInterval?: number;
    /**
     * The number of class breaks to generate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    numClasses?: number;
    /**
     * In authoring apps, the user may select a pre-defined size scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    sizeScheme?: SizeScheme;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    valueExpressionTitle?: string;
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    sqlWhere?: string;
    /**
     * Only for polygon layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * Provides options for setting a title to describe a field instead of using the field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    legendOptions?: sizeCreateClassBreaksRendererParamsLegendOptions;
    /**
     * A minimum value set by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    minValue?: number;
    /**
     * A maximum value set by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    maxValue?: number;
    /**
     * Enables the `defaultSymbol` on the renderer and assigns it to features with no value and features that do not fall within the configured data range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    defaultSymbolEnabled?: boolean;
    /**
     * The type of symbol to generate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    symbolType?: "2d" | "3d-flat" | "3d-volumetric" | "3d-volumetric-uniform";
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    signal?: AbortSignal;
  }

  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-smartMapping-renderers-size.html#createClassBreaksRenderer)
     */
    title?: string;
  }

  export interface sizeCreateContinuousRendererParams extends Object {
    /**
     * The layer for which the renderer is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * The view where the input layer is rendered.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * 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-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    basemap?: string | Basemap;
    /**
     * The name of the field whose data will be queried for statistics and used for the basis of the data-driven visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    field?: string;
    /**
     * The name of the field to normalize the values of the given `field`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    normalizationField?: string;
    /**
     * In authoring apps, the user may select a pre-defined size scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    sizeScheme?: SizeScheme;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    valueExpressionTitle?: string;
    /**
     * Sets the size stops based on meaningful data values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    theme?: "high-to-low" | "above" | "below";
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    sqlWhere?: string;
    /**
     * Only for polygon layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * Indicates whether symbol sizes should vary based on view scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    sizeOptimizationEnabled?: boolean;
    /**
     * Provides options for setting a title to a field when an expression is provided instead of a field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    legendOptions?: sizeCreateContinuousRendererParamsLegendOptions;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatistics.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    statistics?: SummaryStatisticsResult;
    /**
     * A custom minimum value set by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    minValue?: number;
    /**
     * A custom maximum value set by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    maxValue?: number;
    /**
     * Enables the `defaultSymbol` on the renderer and assigns it to features with no value and features that do not fall within the configured data range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    defaultSymbolEnabled?: boolean;
    /**
     * The type of symbol to generate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    symbolType?: "2d" | "3d-flat" | "3d-volumetric" | "3d-volumetric-uniform";
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    signal?: AbortSignal;
  }

  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-smartMapping-renderers-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-smartMapping-renderers-size.html#createContinuousRenderer)
     */
    showLegend?: boolean;
  }

  export interface sizeCreateVisualVariablesParams extends Object {
    /**
     * The layer for which the visual variables are generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createVisualVariables)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * The view where the input layer is rendered.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * 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-smartMapping-renderers-size.html#createVisualVariables)
     */
    basemap?: string | Basemap;
    /**
     * The name of the field whose data will be queried for statistics and used for the basis of the data-driven visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createVisualVariables)
     */
    field: string;
    /**
     * The name of the field to normalize the values of the given `field`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createVisualVariables)
     */
    normalizationField?: string;
    /**
     * In authoring apps, the user may select a pre-defined size scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createVisualVariables)
     */
    sizeScheme?: SizeScheme;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createVisualVariables)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createVisualVariables)
     */
    valueExpressionTitle?: string;
    /**
     * Sets the size stops based on meaningful data values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createVisualVariables)
     */
    theme?: "high-to-low" | "above" | "below";
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createVisualVariables)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createVisualVariables)
     */
    sqlWhere?: string;
    /**
     * Indicates whether symbol sizes should vary based on view scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createVisualVariables)
     */
    sizeOptimizationEnabled?: boolean;
    /**
     * Provides options for setting a title to a field when an expression is provided instead of a field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createVisualVariables)
     */
    legendOptions?: sizeCreateVisualVariablesParamsLegendOptions;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatistics.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createVisualVariables)
     */
    statistics?: SummaryStatisticsResult;
    /**
     * A custom minimum value set by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createVisualVariables)
     */
    minValue?: number;
    /**
     * A custom maximum value set by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createVisualVariables)
     */
    maxValue?: number;
    /**
     * Indicates if the size units of the symbols will be in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createVisualVariables)
     */
    worldScale?: boolean;
    /**
     * When set to `all`, a single size variable that scales uniformly in all dimensions is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createVisualVariables)
     */
    axis?: "all" | "height";
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createVisualVariables)
     */
    signal?: AbortSignal;
  }

  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-smartMapping-renderers-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-smartMapping-renderers-size.html#createVisualVariables)
     */
    showLegend?: boolean;
  }

  /**
   * The result object of the [createVisualVariables()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createVisualVariables) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#VisualVariableResult)
   */
  export interface sizeVisualVariableResult extends Object {
    /**
     * An array of size visual variables configured based on the statistics of the data and the view scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-size.html#VisualVariableResult)
     */
    sizeScheme: SizeScheme;
    /**
     * Indicates whether default values were used in the absence of sufficient data and/or statistics from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-size.html#VisualVariableResult)
     */
    basemapId: string;
    /**
     * Indicates whether the average color of the input view's basemap is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#VisualVariableResult)
     */
    basemapTheme: string;
    /**
     * Authoring information related to the creation of the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#VisualVariableResult)
     */
    authoringInfo: AuthoringInfo;
  }

  /**
   * This object contains helper methods for generating data-driven visualizations with unique types (or categories) based on a field value from features 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-smartMapping-renderers-type.html)
   */
  interface type {
    /**
     * Generates a [PointCloudUniqueValueRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-PointCloudUniqueValueRenderer.html) based on a given field of 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-smartMapping-renderers-type.html#createPCClassRenderer)
     */
    createPCClassRenderer(params: typeCreatePCClassRendererParams): Promise<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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createRenderer)
     */
    createRenderer(params: typeCreateRendererParams): Promise<typeRendererResult>;
  }

  export const type: type;

  /**
   * The result object of the [createPCClassRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createPCClassRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#PCClassRendererResult)
   */
  export interface PCClassRendererResult extends Object {
    /**
     * The renderer object configured to represent the class codes in the point cloud.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#PCClassRendererResult)
     */
    renderer: PointCloudUniqueValueRenderer;
  }

  /**
   * The result object of the [createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#RendererResult)
   */
  export interface typeRendererResult extends Object {
    /**
     * The renderer object configured to best match the given basemap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.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-smartMapping-renderers-type.html#RendererResult)
     */
    uniqueValueInfos: typeUniqueValueInfo[];
    /**
     * An array of objects describing the values or categories excluded from consideration in visualizing data from the given field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#RendererResult)
     */
    excludedUniqueValueInfos: any[];
    /**
     * The scheme used to represent each category within the `uniqueValueInfos`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#RendererResult)
     */
    typeScheme: TypeScheme;
    /**
     * The ID of the basemap used to determine the optimal color scheme to represent the categorical variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#RendererResult)
     */
    basemapId: string;
    /**
     * Indicates whether the average color of the input view's basemap is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#RendererResult)
     */
    basemapTheme: 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-smartMapping-renderers-type.html#createPCClassRenderer)
     */
    layer: PointCloudLayer;
    /**
     * The name of the field containing classification data for the given layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createPCClassRenderer)
     */
    field: string;
    /**
     * The size of each point expressed as a percentage.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createPCClassRenderer)
     */
    size?: string;
    /**
     * The number of points per inch in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createPCClassRenderer)
     */
    density?: number;
    /**
     * In authoring apps, the user may select a pre-defined type scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createPCClassRenderer)
     */
    typeScheme?: TypeSchemeForPoint;
    /**
     * A statistics object generated from the [uniqueValues](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-uniqueValues.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createPCClassRenderer)
     */
    statistics?: UniqueValuesResult;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createPCClassRenderer)
     */
    signal?: AbortSignal;
  }

  export interface typeCreateRendererParams extends Object {
    /**
     * The layer for which the renderer is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * The view where the input layer is rendered.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * 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-smartMapping-renderers-type.html#createRenderer)
     */
    basemap?: string | Basemap;
    /**
     * The name of the field from which to extract unique values that will be used for the basis of the data-driven visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createRenderer)
     */
    field?: string;
    /**
     * The number of types (or categories) displayed by the renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createRenderer)
     */
    numTypes?: number;
    /**
     * Indicates how values should be sorted 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-smartMapping-renderers-type.html#createRenderer)
     */
    sortBy?: "count" | "value";
    /**
     * In authoring apps, the user may select a pre-defined type scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createRenderer)
     */
    typeScheme?: TypeScheme;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a number or a string.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createRenderer)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createRenderer)
     */
    valueExpressionTitle?: string;
    /**
     * For polygon layers only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createRenderer)
     */
    outlineOptimizationEnabled?: boolean;
    /**
     * For point and polyline layers only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createRenderer)
     */
    sizeOptimizationEnabled?: boolean;
    /**
     * Provides options for setting a title to a field that will override the field alias defined in the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createRenderer)
     */
    legendOptions?: typeCreateRendererParamsLegendOptions;
    /**
     * 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-smartMapping-renderers-type.html#createRenderer)
     */
    defaultSymbolEnabled?: boolean;
    /**
     * The type of symbol to generate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createRenderer)
     */
    symbolType?: "2d" | "3d-flat" | "3d-volumetric" | "3d-volumetric-uniform";
    /**
     * A statistics object generated from the [uniqueValues](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-uniqueValues.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createRenderer)
     */
    statistics?: UniqueValuesResult;
    /**
     * **This option only applies to generating renderers for mesh SceneLayers**.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createRenderer)
     */
    colorMixMode?: string;
    /**
     * Indicates that all domain codes should be returned if the given field has domain values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createRenderer)
     */
    returnAllCodedValues?: boolean;
    /**
     * Indicates whether to add edges to the output renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createRenderer)
     */
    edgesType?: "solid" | "none";
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-type.html#createRenderer)
     */
    signal?: AbortSignal;
  }

  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-smartMapping-renderers-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-smartMapping-renderers-type.html#createRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-type.html#UniqueValueInfo)
     */
    symbol: Symbol;
  }

  /**
   * This object contains helper methods for generating data-driven univariate visualizations using both continuous color and continuous size based on a single field value or expression from features 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-smartMapping-renderers-univariateColorSize.html)
   */
  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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    createContinuousRenderer(
      params: univariateColorSizeCreateContinuousRendererParams
    ): Promise<univariateColorSizeContinuousRendererResult>;
    /**
     * This method generates color and size visual variables, both based on the same given field or expression.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    createVisualVariables(params: univariateColorSizeCreateVisualVariablesParams): Promise<VisualVariablesResult>;
  }

  export const univariateColorSize: univariateColorSize;

  /**
   * The result object of the [createContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#ContinuousRendererResult)
   */
  export interface univariateColorSizeContinuousRendererResult extends Object {
    /**
     * The renderer object configured to best match the given basemap and the spread of the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#ContinuousRendererResult)
     */
    renderer: ClassBreaksRenderer;
    /**
     * Object containing visual variable and scheme information for the color portion of the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#ContinuousRendererResult)
     */
    color: ContinuousRendererResultColor;
    /**
     * Object containing visual variable and scheme information for the size portion of the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#ContinuousRendererResult)
     */
    size: ContinuousRendererResultSize;
    /**
     * Indicates whether default values were used in the absence of sufficient data and/or statistics from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-univariateColorSize.html#ContinuousRendererResult)
     */
    basemapId: string;
    /**
     * Indicates whether the average color of the input view's basemap is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#ContinuousRendererResult)
     */
    basemapTheme: string;
  }

  export interface univariateColorSizeCreateContinuousRendererParams extends Object {
    /**
     * The layer for which the visual variable is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * The view where the input layer is rendered.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * 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-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    basemap?: string | Basemap;
    /**
     * The name of the field whose data will be queried for statistics and used for the basis of the data-driven visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    field?: string;
    /**
     * The name of the field to normalize the values of the given `field`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    normalizationField?: string;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    valueExpressionTitle?: string;
    /**
     * Sets the size stops and colors based on meaningful data values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    theme?: "high-to-low" | "above" | "below" | "above-and-below";
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    sqlWhere?: string;
    /**
     * Indicates whether symbol sizes should vary based on view scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    sizeOptimizationEnabled?: boolean;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatistics.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    statistics?: SummaryStatisticsResult;
    /**
     * A custom minimum value set by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    minValue?: number;
    /**
     * A custom maximum value set by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    maxValue?: number;
    /**
     * Enables the `defaultSymbol` on the renderer and assigns it to features with no value and features that do not fall within the configured data range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    sizeOptions?: univariateColorSizeCreateContinuousRendererParamsSizeOptions;
    /**
     * Options for setting symbols for the `above-and-below` theme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    symbolOptions?: univariateColorSizeCreateContinuousRendererParamsSymbolOptions;
    /**
     * Provides options for configuring the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) representing the renderer generated from this method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    legendOptions?: univariateColorSizeCreateContinuousRendererParamsLegendOptions;
    /**
     * The type of symbol to generate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    symbolType?: "2d" | "3d-flat" | "3d-volumetric" | "3d-volumetric-uniform";
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    signal?: AbortSignal;
  }

  export interface univariateColorSizeCreateContinuousRendererParamsColorOptions extends Object {
    /**
     * Determines which values will be emphasized in the continuous ramp and the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    theme?: "high-to-low" | "above-and-below" | "centered-on" | "extremes";
    /**
     * In authoring apps, the user may select a pre-defined color scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    colorScheme?: ColorScheme;
    /**
     * Provides options for setting a title to a field when an expression is provided instead of a field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    legendOptions?: univariateColorSizeCreateContinuousRendererParamsColorOptionsLegendOptions;
    /**
     * Only applies to the `above-and-below` theme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    isContinuous?: boolean;
  }

  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-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    title?: string;
    /**
     * Indicates if the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget should display content describing the color variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    showLegend?: boolean;
  }

  export interface univariateColorSizeCreateContinuousRendererParamsLegendOptions extends Object {
    /**
     * The title used to represent the renderer generated from this method 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-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    title?: string;
    /**
     * Indicates if the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget should display content describing the generated renderer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    showLegend?: boolean;
  }

  export interface univariateColorSizeCreateContinuousRendererParamsSizeOptions extends Object {
    /**
     * In authoring apps, the user may select a pre-defined size scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    sizeScheme?: SizeScheme;
    /**
     * Provides options for setting a title to a field when an expression is provided instead of a field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    title?: string;
    /**
     * Indicates if the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget should display content describing the size variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    showLegend?: boolean;
  }

  export interface univariateColorSizeCreateContinuousRendererParamsSymbolOptions extends Object {
    /**
     * Sets above and below symbols based on pre-defined named symbol pairs pairs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    symbolStyle?:
      | "caret"
      | "circle-caret"
      | "arrow"
      | "circle-arrow"
      | "plus-minus"
      | "circle-plus-minus"
      | "square"
      | "circle"
      | "triangle"
      | "happy-sad"
      | "thumb";
    /**
     * Allows you to specify custom symbols in the `above-and-below` theme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    symbols?: univariateColorSizeCreateContinuousRendererParamsSymbolOptionsSymbols;
  }

  export interface univariateColorSizeCreateContinuousRendererParamsSymbolOptionsSymbols extends Object {
    /**
     * The symbol to use for the above portion of the `above-and-below` visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    above: Symbol;
    /**
     * The symbol to use for the below portion of the `above-and-below` visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer)
     */
    below: Symbol;
  }

  export interface univariateColorSizeCreateVisualVariablesParams extends Object {
    /**
     * The layer for which the visual variable is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * The view where the input layer is rendered.
     *
     * [Read more...](global.html)
     */
    view?: View;
    /**
     * 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-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    basemap?: string | Basemap;
    /**
     * The name of the field whose data will be queried for statistics and used for the basis of the data-driven visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    field?: string;
    /**
     * The name of the field to normalize the values of the given `field`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    normalizationField?: string;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    valueExpression?: string;
    /**
     * Text describing the value returned from the `valueExpression`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    valueExpressionTitle?: string;
    /**
     * Sets the size stops and colors based on meaningful data values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    theme?: "high-to-low" | "above" | "below" | "above-and-below";
    /**
     * A SQL expression evaluating to a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    sqlWhere?: string;
    /**
     * A statistics object generated from the [summaryStatistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatistics.html) function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    statistics?: SummaryStatisticsResult;
    /**
     * A custom minimum value set by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    minValue?: number;
    /**
     * A custom maximum value set by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    sizeOptions?: univariateColorSizeCreateVisualVariablesParamsSizeOptions;
    /**
     * Indicates if the size units of the symbols will be in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    worldScale?: boolean;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    signal?: AbortSignal;
  }

  export interface univariateColorSizeCreateVisualVariablesParamsColorOptions extends Object {
    /**
     * Determines which values will be emphasized in the continuous ramp and the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    theme?: "high-to-low" | "above-and-below" | "centered-on" | "extremes";
    /**
     * In authoring apps, the user may select a pre-defined color scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    colorScheme?: ColorScheme;
    /**
     * Provides options for setting a title to a field when an expression is provided instead of a field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    legendOptions?: univariateColorSizeCreateVisualVariablesParamsColorOptionsLegendOptions;
    /**
     * Only applies to the `above-and-below` theme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    isContinuous?: boolean;
  }

  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-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    title: string;
  }

  export interface univariateColorSizeCreateVisualVariablesParamsSizeOptions extends Object {
    /**
     * When set to `all`, a single size variable that scales uniformly in all dimensions is generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    axis?: "all" | "height";
    /**
     * In authoring apps, the user may select a pre-defined size scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    sizeScheme?: SizeScheme;
    /**
     * Provides options for setting a title to a field when an expression is provided instead of a field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-univariateColorSize.html#createVisualVariables)
     */
    title: string;
  }

  /**
   * The result object of the [createVisualVariables()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createVisualVariables) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#VisualVariablesResult)
   */
  export interface VisualVariablesResult extends Object {
    /**
     * Object containing visual variable and scheme information for the color portion of the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#VisualVariablesResult)
     */
    color: VisualVariablesResultColor;
    /**
     * Object containing visual variable and scheme information for the size portion of the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#VisualVariablesResult)
     */
    size: VisualVariablesResultSize;
    /**
     * Indicates whether default values were used in the absence of sufficient data and/or statistics from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-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-smartMapping-renderers-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-smartMapping-renderers-univariateColorSize.html#VisualVariablesResult)
     */
    basemapId: string;
    /**
     * Indicates whether the average color of the input view's basemap is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#VisualVariablesResult)
     */
    basemapTheme: string;
    /**
     * Authoring information related to the creation of the visual variables.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#VisualVariablesResult)
     */
    authoringInfo: AuthoringInfo;
  }

  export interface ContinuousRendererResultColor extends Object {
    /**
     * A color visual variable 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-smartMapping-renderers-univariateColorSize.html#ContinuousRendererResult)
     */
    visualVariable: ColorVariable;
    /**
     * The color scheme used by the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#ContinuousRendererResult)
     */
    colorScheme: ColorScheme;
  }

  export interface ContinuousRendererResultSize extends Object {
    /**
     * The size visual variable(s) configured based on the statistics of the data and the view scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#ContinuousRendererResult)
     */
    visualVariables: SizeVariable[];
    /**
     * The size scheme used by the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#ContinuousRendererResult)
     */
    sizeScheme: SizeScheme;
  }

  export interface VisualVariablesResultColor extends Object {
    /**
     * A color visual variable 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-smartMapping-renderers-univariateColorSize.html#VisualVariablesResult)
     */
    visualVariable: ColorVariable;
    /**
     * The color scheme used by the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#VisualVariablesResult)
     */
    colorScheme: ColorScheme;
  }

  export interface VisualVariablesResultSize extends Object {
    /**
     * The size visual variable(s) configured based on the statistics of the data and the view scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#VisualVariablesResult)
     */
    visualVariables: SizeVariable[];
    /**
     * The size scheme used by the visual variable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#VisualVariablesResult)
     */
    sizeScheme: SizeScheme;
  }

  /**
   * Function for generating class breaks for an input field in a [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) based on a given classification method and normalization type.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-classBreaks.html)
   */
  interface statisticsClassBreaks {
    /**
     * Generates class breaks for an input field (or expression) of a [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) based on a given classification method and normalization type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    classBreaks(params: classBreaksClassBreaksParams): Promise<ClassBreaksResult>;
  }

  const __statisticsClassBreaksMapped: statisticsClassBreaks;
  export const statisticsClassBreaks: typeof __statisticsClassBreaksMapped.classBreaks;

  /**
   * An object describing a single class break generated from the [classBreaks()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-classBreaks.html#classBreaks) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-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-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | PointCloudLayer | GeoJSONLayer | WFSLayer;
    /**
     * The class breaks will be generated based on values of this field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    normalizationField?: string;
    /**
     * The method for classifying the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    classificationMethod?: "equal-interval" | "natural-breaks" | "quantile" | "standard-deviation";
    /**
     * When `classificationMethod = "standard-deviation"`, this sets the interval at which each class break should be set (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    standardDeviationInterval?: number;
    /**
     * The minimum bounding value for the class breaks definition.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    minValue?: number;
    /**
     * The maximum bounding value for the class breaks definition.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    numClasses?: number;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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 is required 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-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    features?: Graphic[];
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-classBreaks.html#classBreaks)
     */
    signal?: AbortSignal;
  }

  /**
   * Object returned from the [classBreaks()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-classBreaks.html#classBreaks) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-statistics-classBreaks.html#classBreaks) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-classBreaks.html#ClassBreaksResult)
     */
    classBreakInfos: ClassBreak[];
    /**
     * The minimum value of features in the dataset.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-classBreaks.html#ClassBreaksResult)
     */
    minValue: number;
    /**
     * The maximum value of features in the dataset.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-renderers-color.html#createClassBreaksRenderer).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-classBreaks.html#ClassBreaksResult)
     */
    normalizationTotal: number;
  }

  /**
   * Function for generating statistics from a [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) for a [HeatmapRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html) visualization.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-heatmapStatistics.html)
   */
  interface heatmapStatistics {
    /**
     * Returns an object containing various statistics describing the intensity values for 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-smartMapping-statistics-heatmapStatistics.html#heatmapStatistics)
     */
    heatmapStatistics(params: heatmapStatisticsHeatmapStatisticsParams): Promise<HeatmapStatisticsResult>;
  }

  const __heatmapStatisticsMapped: heatmapStatistics;
  export const heatmapStatistics: typeof __heatmapStatisticsMapped.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-smartMapping-statistics-heatmapStatistics.html#heatmapStatistics)
     */
    layer: FeatureLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * 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-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-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-smartMapping-statistics-heatmapStatistics.html#heatmapStatistics)
     */
    features?: Graphic[];
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-heatmapStatistics.html#heatmapStatistics)
     */
    signal?: AbortSignal;
  }

  /**
   * The intensity value statistics returned from the [heatmapStatistics()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-heatmapStatistics.html#heatmapStatistics) function.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-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-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-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-smartMapping-statistics-heatmapStatistics.html#HeatmapStatisticsResult)
     */
    summaryStatistics?: SummaryStatisticsResult;
  }

  /**
   * Generates a histogram based on data in a [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) for a given field.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-histogram.html)
   */
  interface histogram {
    /**
     * Generates a histogram for data returned from a `field` in a given `layer`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-histogram.html#histogram)
     */
    histogram(params: histogramHistogramParams): Promise<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-smartMapping-statistics-histogram.html#histogram)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | PointCloudLayer | GeoJSONLayer | WFSLayer;
    /**
     * The name of the numeric field for which the histogram will be generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-histogram.html#histogram)
     */
    field?: string;
    /**
     * Determines how the provided `field` values will be normalized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-histogram.html#histogram)
     */
    normalizationType?: "field" | "log" | "percent-of-total" | "natural-log" | "square-root";
    /**
     * The field by which to normalize the values returned from the given `field`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-histogram.html#histogram)
     */
    normalizationField?: string;
    /**
     * Only applies if `normalizationType` is `percent-of-total`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-histogram.html#histogram)
     */
    normalizationTotal?: number;
    /**
     * The method for classifying the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-histogram.html#histogram)
     */
    classificationMethod?: "equal-interval" | "natural-breaks" | "quantile" | "standard-deviation";
    /**
     * When `classificationMethod = "standard-deviation"`, this sets the interval at which each class break should be set (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-histogram.html#histogram)
     */
    standardDeviationInterval?: number;
    /**
     * The minimum bounding value for the histogram.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-histogram.html#histogram)
     */
    minValue?: number;
    /**
     * The maximum bounding value for the histogram.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-statistics-histogram.html#histogram)
     */
    numBins?: number;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-statistics-histogram.html#histogram)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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 is required 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-smartMapping-statistics-histogram.html#histogram)
     */
    features?: Graphic[];
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-histogram.html#histogram)
     */
    signal?: AbortSignal;
  }

  /**
   * The result returned from the [histogram()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-histogram.html#histogram) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-smartMapping-statistics-histogram.html#HistogramResult)
     */
    maxValue: number;
    /**
     * The number used to normalize all values when `percent-of-total` is specified as the `normalizationType`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-histogram.html#HistogramResult)
     */
    normalizationTotal?: number;
  }

  /**
   * Function for generating category statistics for a [predominance](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-predominance.html) renderer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-predominantCategories.html)
   */
  interface predominantCategories {
    /**
     * Determines predominant categories for a layer based on a given set of competing numeric fields and returns the number of features belonging to each category.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-predominantCategories.html#predominantCategories)
     */
    predominantCategories(
      params: predominantCategoriesPredominantCategoriesParams
    ): Promise<PredominantCategoriesResult>;
  }

  const __predominantCategoriesMapped: predominantCategories;
  export const predominantCategories: typeof __predominantCategoriesMapped.predominantCategories;

  export interface predominantCategoriesPredominantCategoriesParams extends Object {
    /**
     * The layer from which to generate predominant categories for the given set of `fields`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-predominantCategories.html#predominantCategories)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * An array of numeric fields from which to determine predominant categories.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-predominantCategories.html#predominantCategories)
     */
    fields: string[];
    /**
     * The view in which features will be rendered.
     *
     * [Read more...](global.html)
     */
    view?: MapView | SceneView;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-predominantCategories.html#predominantCategories)
     */
    signal?: AbortSignal;
  }

  /**
   * The statistics returned from the [predominantCategories()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-predominantCategories.html#predominantCategories) function.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-predominantCategories.html#PredominantCategoriesResult)
   */
  export interface PredominantCategoriesResult extends Object {
    /**
     * An array of objects describing the count of each predominant category.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-predominantCategories.html#PredominantCategoriesResult)
     */
    predominantCategoryInfos: PredominantCategoriesResultPredominantCategoryInfos[];
  }

  export interface PredominantCategoriesResultPredominantCategoryInfos extends Object {
    /**
     * The value or category referenced in a predominance visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-predominantCategories.html#PredominantCategoriesResult)
     */
    value: string | number;
    /**
     * The number of features belonging to the predominant category.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-predominantCategories.html#PredominantCategoriesResult)
     */
    count: number;
    /**
     * The label describing the predominant category, or field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-predominantCategories.html#PredominantCategoriesResult)
     */
    label?: string;
  }

  /**
   * Function for generating attribute statistics in a [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) based on values returned from a given field.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatistics.html)
   */
  interface summaryStatistics {
    /**
     * Returns an object containing various statistics describing a set of values returned from 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-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     */
    summaryStatistics(params: summaryStatisticsSummaryStatisticsParams): Promise<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-smartMapping-statistics-summaryStatistics.html#summaryStatistics) query.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-statistics-summaryStatistics.html#SummaryStatisticsResult)
     */
    avg: number;
    /**
     * The number of features evaluated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-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-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-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-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | PointCloudLayer | GeoJSONLayer | WFSLayer;
    /**
     * The name of the numeric field for which the summary statistics will be generated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     */
    field?: string;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a number.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     */
    sqlWhere?: string;
    /**
     * Determines how the provided `field` values will be normalized.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     */
    normalizationType?: "field" | "log" | "percent-of-total" | "natural-log" | "square-root";
    /**
     * The field by which to normalize the values returned from the given `field`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     */
    normalizationField?: string;
    /**
     * Only applies if `normalizationType` is `percent-of-total`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     */
    normalizationTotal?: number;
    /**
     * The minimum bounding value for the statistics calculation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     */
    minValue?: number;
    /**
     * The maximum bounding value for the statistics calculation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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 is required 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-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     */
    features?: Graphic[];
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatistics.html#summaryStatistics)
     */
    signal?: AbortSignal;
  }

  /**
   * Function for generating statistics for the age of features in a layer based on a given start time and end time.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatisticsForAge.html)
   */
  interface summaryStatisticsForAge {
    /**
     * Returns an object containing various statistics describing an age value (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatisticsForAge.html#summaryStatisticsForAge)
     */
    summaryStatisticsForAge(
      params: summaryStatisticsForAgeSummaryStatisticsForAgeParams
    ): Promise<SummaryStatisticsResult>;
  }

  const __summaryStatisticsForAgeMapped: summaryStatisticsForAge;
  export const summaryStatisticsForAge: typeof __summaryStatisticsForAgeMapped.summaryStatisticsForAge;

  export interface summaryStatisticsForAgeSummaryStatisticsForAgeParams extends Object {
    /**
     * The layer from which to generate age statistics for the given `startTime` and `endTime`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatisticsForAge.html#summaryStatisticsForAge)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * The start time for the age calculation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatisticsForAge.html#summaryStatisticsForAge)
     */
    startTime: Date | string | number;
    /**
     * The end time for the age calculation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatisticsForAge.html#summaryStatisticsForAge)
     */
    endTime: Date | string | number;
    /**
     * The desired units of the age result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatisticsForAge.html#summaryStatisticsForAge)
     */
    unit: "years" | "months" | "days" | "hours" | "minutes" | "seconds";
    /**
     * The view in which features will be rendered.
     *
     * [Read more...](global.html)
     */
    view?: MapView | SceneView;
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-summaryStatisticsForAge.html#summaryStatisticsForAge)
     */
    signal?: AbortSignal;
  }

  /**
   * Provides utility functions for generating [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expressions intended for use in an [age renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createAgeRenderer).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-support-ageUtils.html)
   */
  interface ageUtils {
    /**
     * Returns an [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression for visualizing the age of a feature based on a given start time and end time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-support-ageUtils.html#getAgeExpressions)
     */
    getAgeExpressions(params: ageUtilsGetAgeExpressionsParams): AgeExpressionsResult;
  }

  export const ageUtils: ageUtils;

  /**
   * The result object returned from the [getAgeExpressions()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-support-ageUtils.html#getAgeExpressions) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-support-ageUtils.html#AgeExpressionsResult)
   */
  export interface AgeExpressionsResult extends Object {
    /**
     * The [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression used to calculate the age of a feature based on the difference between the end time and the start time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-support-ageUtils.html#AgeExpressionsResult)
     */
    valueExpression: string;
    /**
     * A SQL expression and where clause that matches the generated `valueExpression` used to query statistics from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-support-ageUtils.html#AgeExpressionsResult)
     */
    statisticsQuery: any;
    /**
     * A SQL expression and where clause that matches the generated `valueExpression` used to query for a histogram from the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-support-ageUtils.html#AgeExpressionsResult)
     */
    histogramQuery: any;
  }

  export interface ageUtilsGetAgeExpressionsParams extends Object {
    /**
     * The layer from which to generate age statistics for the given `startTime` and `endTime`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-support-ageUtils.html#getAgeExpressions)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer | WFSLayer;
    /**
     * The start time for the age calculation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-support-ageUtils.html#getAgeExpressions)
     */
    startTime: Date | string | number;
    /**
     * The end time for the age calculation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-support-ageUtils.html#getAgeExpressions)
     */
    endTime: Date | string | number;
    /**
     * The desired units of the age result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-support-ageUtils.html#getAgeExpressions)
     */
    unit?: "years" | "months" | "days" | "hours" | "minutes" | "seconds";
  }

  /**
   * A function that queries for unique values from a field 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-smartMapping-statistics-uniqueValues.html)
   */
  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 that belong to the given category.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-uniqueValues.html#uniqueValues)
     */
    uniqueValues(params: uniqueValuesUniqueValuesParams): Promise<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-smartMapping-statistics-uniqueValues.html#uniqueValues) query of a layer's field.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-uniqueValues.html#UniqueValuesResult)
   */
  export interface UniqueValuesResult extends Object {
    /**
     * An array of objects, each containing a unique value/type/category present in the field specified in the [uniqueValues()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-uniqueValues.html#uniqueValues) query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-statistics-uniqueValues.html#uniqueValues)
     */
    layer: FeatureLayer | SceneLayer | CSVLayer | PointCloudLayer | GeoJSONLayer | WFSLayer;
    /**
     * The name of the numeric or string field from which the unique values will be obtained.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-uniqueValues.html#uniqueValues)
     */
    field?: string;
    /**
     * An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a number or string.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-statistics-uniqueValues.html#uniqueValues)
     */
    sqlExpression?: string;
    /**
     * A SQL where clause used to filter features for the statistics query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-uniqueValues.html#uniqueValues)
     */
    sqlWhere?: string;
    /**
     * Indicates that all domain codes should be returned if the given field has domain values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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 is required 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-smartMapping-statistics-uniqueValues.html#uniqueValues)
     */
    features?: Graphic[];
    /**
     * Allows for cancelable requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-uniqueValues.html#uniqueValues)
     */
    signal?: AbortSignal;
  }

  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-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-smartMapping-statistics-uniqueValues.html#UniqueValuesResult)
     */
    count: number;
  }

  /**
   * Object containing helper methods for generating optimal symbols for data-driven color visualizations.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html)
   */
  interface symbologyColor {
    /**
     * Clones a color scheme object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#cloneScheme)
     */
    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-smartMapping-symbology-color.html#flipColors)
     */
    flipColors(scheme: ColorScheme): ColorScheme;
    /**
     * Returns all schemes matching the given color ramp.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getMatchingSchemes)
     */
    getMatchingSchemes(params: colorGetMatchingSchemesParams): ColorScheme[];
    /**
     * Returns a color scheme with the provided name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getSchemeByName)
     */
    getSchemeByName(params: colorGetSchemeByNameParams): ColorScheme;
    /**
     * Returns a primary scheme and secondary schemes defining symbol properties for data-driven color visualizations in a [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getSchemes)
     */
    getSchemes(params: colorGetSchemesParams): ColorSchemes;
    /**
     * Returns an array of color schemes with the provided tags.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getSchemesByTag)
     */
    getSchemesByTag(params: colorGetSchemesByTagParams): ColorScheme[];
    /**
     * Returns metadata for the available themes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getThemes)
     */
    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-smartMapping-symbology-color.html#getMatchingSchemes)
     */
    theme: "high-to-low" | "above-and-below" | "centered-on" | "extremes";
    /**
     * An array of colors used to match with schemes for the given theme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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.
     *
     * [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-smartMapping-symbology-color.html#getSchemeByName)
     */
    name: string;
    /**
     * The basemap to pair with the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getSchemeByName)
     */
    basemap?: string | Basemap;
    /**
     * If you have a non-Esri basemap (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getSchemeByName)
     */
    basemapTheme?: "light" | "dark";
    /**
     * The geometry type of the features to visualize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getSchemeByName)
     */
    geometryType: "point" | "multipoint" | "polyline" | "polygon" | "mesh" | "multipatch";
    /**
     * The theme determines which values will be emphasized in the continuous ramp and the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getSchemeByName)
     */
    theme: "high-to-low" | "above-and-below" | "centered-on" | "extremes";
    /**
     * The SceneView instance in which the scheme will be used.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
    /**
     * Indicates if the size units of the scheme will be in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getSchemeByName)
     */
    worldScale?: boolean;
  }

  export interface colorGetSchemesByTagParams extends Object {
    /**
     * When provided, only schemes containing all the matching tags will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getSchemesByTag)
     */
    includedTags?: string[];
    /**
     * When provided, only schemes missing all the provided tags will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getSchemesByTag)
     */
    excludedTags?: string[];
    /**
     * The basemap to pair with the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getSchemesByTag)
     */
    basemap?: string | Basemap;
    /**
     * If you have a non-Esri basemap (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getSchemesByTag)
     */
    basemapTheme?: "light" | "dark";
    /**
     * The geometry type of the features to visualize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getSchemesByTag)
     */
    geometryType: "point" | "multipoint" | "polyline" | "polygon" | "mesh" | "multipatch";
    /**
     * The theme determines which values will be emphasized in the continuous ramp and the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getSchemesByTag)
     */
    theme: "high-to-low" | "above-and-below" | "centered-on" | "extremes";
    /**
     * The SceneView instance in which the scheme will be used.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
    /**
     * Indicates if the size units of the scheme will be in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getSchemesByTag)
     */
    worldScale?: boolean;
  }

  export interface colorGetSchemesParams extends Object {
    /**
     * The Esri basemap to pair with the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getSchemes)
     */
    basemap?: string | Basemap;
    /**
     * If you have a non-Esri basemap (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getSchemes)
     */
    basemapTheme?: "light" | "dark";
    /**
     * The geometry type of the features to visualize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getSchemes)
     */
    geometryType: "point" | "multipoint" | "polyline" | "polygon" | "mesh" | "multipatch";
    /**
     * The theme determines which values will be emphasized in the continuous ramp and the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getSchemes)
     */
    theme: "high-to-low" | "above-and-below" | "centered-on" | "extremes";
    /**
     * The SceneView instance in which the scheme will be used.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
    /**
     * Indicates if the size units of the scheme will be in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-smartMapping-symbology-color.html#ColorSchemeForMesh)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#ColorSchemeForMesh)
     */
    tags: string[];
    /**
     * The unique id of the color scheme to usee in the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#ColorSchemeForMesh)
     */
    id: string;
    /**
     * Indicates which values will be emphasized in the continuous ramp and the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-symbology-color.html#ColorSchemeForMesh)
     */
    colors: Color[];
    /**
     * The color of the 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-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-smartMapping-symbology-color.html#ColorSchemeForMesh)
     */
    colorsForClassBreaks: ColorSchemeForMeshColorsForClassBreaks[];
    /**
     * The opacity of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-smartMapping-symbology-color.html#ColorSchemeForPoint)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#ColorSchemeForPoint)
     */
    tags: string[];
    /**
     * The unique id of the color scheme to usee in the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#ColorSchemeForPoint)
     */
    id: string;
    /**
     * Indicates which values will be emphasized in the continuous ramp and the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-symbology-color.html#ColorSchemeForPoint)
     */
    colors: Color[];
    /**
     * The color of the 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-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-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-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-smartMapping-symbology-color.html#ColorSchemeForPoint)
     */
    size: number;
    /**
     * The opacity of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-smartMapping-symbology-color.html#ColorSchemeForPolygon)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#ColorSchemeForPolygon)
     */
    tags: string[];
    /**
     * The unique id of the color scheme to usee in the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#ColorSchemeForPolygon)
     */
    id: string;
    /**
     * Indicates which values will be emphasized in the continuous ramp and the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-symbology-color.html#ColorSchemeForPolygon)
     */
    colors: Color[];
    /**
     * The color of the 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-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-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-smartMapping-symbology-color.html#ColorSchemeForPolygon)
     */
    outline: ColorSchemeForPolygonOutline;
    /**
     * The opacity of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-smartMapping-symbology-color.html#ColorSchemeForPolyline)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#ColorSchemeForPolyline)
     */
    tags: string[];
    /**
     * The unique id of the color scheme to usee in the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#ColorSchemeForPolyline)
     */
    id: string;
    /**
     * Indicates which values will be emphasized in the continuous ramp and the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-symbology-color.html#ColorSchemeForPolyline)
     */
    colors: Color[];
    /**
     * The color of the 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-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-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-smartMapping-symbology-color.html#ColorSchemeForPolyline)
     */
    width: number;
    /**
     * The opacity of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#ColorSchemeForPolyline)
     */
    opacity: number;
  }

  /**
   * The return object of the [getSchemes()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#getSchemes) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-smartMapping-symbology-color.html#ColorSchemes)
     */
    basemapId: string;
    /**
     * Indicates whether the average basemap color is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html#ColorSchemes)
     */
    basemapTheme: string;
  }

  /**
   * Describes a theme that pairs well with the given basemaps.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-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-smartMapping-symbology-color.html#Theme)
     */
    basemaps: string[];
  }

  export interface ColorSchemeForMeshColorsForClassBreaks extends Object {
    /**
     * An array of hex color strings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-symbology-color.html#ColorSchemeForMesh)
     */
    numClasses: number;
  }

  export interface ColorSchemeForPointColorsForClassBreaks extends Object {
    /**
     * An array of hex color strings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-smartMapping-symbology-color.html#ColorSchemeForPoint)
     */
    width: number;
  }

  export interface ColorSchemeForPolygonColorsForClassBreaks extends Object {
    /**
     * An array of hex color strings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-smartMapping-symbology-color.html#ColorSchemeForPolygon)
     */
    width: number;
  }

  export interface ColorSchemeForPolylineColorsForClassBreaks extends Object {
    /**
     * An array of hex color strings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-symbology-color.html#ColorSchemeForPolyline)
     */
    numClasses: number;
  }

  /**
   * Object containing helper methods for getting optimal symbol schemes used to create [dot density visualizations](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-dotDensity.html).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-dotDensity.html)
   */
  interface symbologyDotDensity {
    /**
     * Clones a dot density scheme object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-dotDensity.html#cloneScheme)
     */
    cloneScheme(scheme: DotDensityScheme): DotDensityScheme;
    /**
     * Returns a dot density scheme with the provided name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-dotDensity.html#getSchemeByName)
     */
    getSchemeByName(params: dotDensityGetSchemeByNameParams): DotDensityScheme;
    /**
     * Returns a primary scheme and secondary schemes defining symbol properties for dot density-based data-driven visualizations 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-smartMapping-symbology-dotDensity.html#getSchemes)
     */
    getSchemes(params: dotDensityGetSchemesParams): DotDensitySchemes;
    /**
     * Returns an array of dot density schemes with the provided tags.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-dotDensity.html#getSchemesByTag)
     */
    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-smartMapping-symbology-dotDensity.html#getSchemeByName)
     */
    name: string;
    /**
     * The basemap to pair with the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-dotDensity.html#getSchemeByName)
     */
    basemap?: string | Basemap;
    /**
     * If you have a non-Esri basemap (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-dotDensity.html#getSchemeByName)
     */
    basemapTheme?: "light" | "dark";
    /**
     * The number of colors to visualize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-dotDensity.html#getSchemeByName)
     */
    numColors: number;
  }

  export interface dotDensityGetSchemesByTagParams extends Object {
    /**
     * When provided, only schemes containing all the matching tags will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-dotDensity.html#getSchemesByTag)
     */
    includedTags?: string[];
    /**
     * When provided, only schemes missing all the provided tags will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-dotDensity.html#getSchemesByTag)
     */
    excludedTags?: string[];
    /**
     * The basemap to pair with the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-dotDensity.html#getSchemesByTag)
     */
    basemap?: string | Basemap;
    /**
     * If you have a non-Esri basemap (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-dotDensity.html#getSchemesByTag)
     */
    basemapTheme?: "light" | "dark";
    /**
     * The number of colors to visualize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-dotDensity.html#getSchemesByTag)
     */
    numColors: number;
  }

  export interface dotDensityGetSchemesParams extends Object {
    /**
     * The Esri basemap to pair with the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-dotDensity.html#getSchemes)
     */
    basemap?: string | Basemap;
    /**
     * If you have a non-Esri basemap (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-dotDensity.html#getSchemes)
     */
    basemapTheme?: "light" | "dark";
    /**
     * The number of colors to visualize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-smartMapping-symbology-dotDensity.html#DotDensityScheme)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-dotDensity.html#DotDensityScheme)
     */
    tags: string[];
    /**
     * The dot color for each attribute.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-smartMapping-symbology-dotDensity.html#DotDensityScheme)
     */
    opacity: number;
  }

  /**
   * The return object of the [getSchemes()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-dotDensity.html#getSchemes) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-smartMapping-symbology-dotDensity.html#DotDensitySchemes)
     */
    basemapId: string;
    /**
     * Indicates whether the average basemap color is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-dotDensity.html#DotDensitySchemes)
     */
    basemapTheme: string;
  }

  export interface DotDensitySchemeOutline extends Object {
    /**
     * The outline color of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-symbology-dotDensity.html#DotDensityScheme)
     */
    width: number;
  }

  /**
   * Object containing helper methods for generating optimal symbols for heatmap visualizations.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-heatmap.html)
   */
  interface symbologyHeatmap {
    /**
     * Clones a heatmap scheme object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-heatmap.html#cloneScheme)
     */
    cloneScheme(scheme: HeatmapScheme): HeatmapScheme;
    /**
     * Returns a heatmap scheme with the provided name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-heatmap.html#getSchemeByName)
     */
    getSchemeByName(params: heatmapGetSchemeByNameParams): HeatmapScheme;
    /**
     * Returns a primary scheme and secondary schemes defining properties for heatmap visualizations in a 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-smartMapping-symbology-heatmap.html#getSchemes)
     */
    getSchemes(params: heatmapGetSchemesParams): HeatmapSchemes;
    /**
     * Returns an array of heatmap schemes with the provided tags.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-heatmap.html#getSchemesByTag)
     */
    getSchemesByTag(params: heatmapGetSchemesByTagParams): HeatmapScheme[];
    /**
     * Returns metadata for the available themes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-heatmap.html#getThemes)
     */
    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-smartMapping-symbology-heatmap.html#getSchemeByName)
     */
    name: string;
    /**
     * The basemap to pair with the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-heatmap.html#getSchemeByName)
     */
    basemap?: string | Basemap;
    /**
     * If you have a non-Esri basemap (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-heatmap.html#getSchemeByName)
     */
    basemapTheme?: "light" | "dark";
  }

  export interface heatmapGetSchemesByTagParams extends Object {
    /**
     * When provided, only schemes containing all the matching tags will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-heatmap.html#getSchemesByTag)
     */
    includedTags?: string[];
    /**
     * When provided, only schemes missing all the provided tags will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-heatmap.html#getSchemesByTag)
     */
    excludedTags?: string[];
    /**
     * The basemap to pair with the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-heatmap.html#getSchemesByTag)
     */
    basemap?: string | Basemap;
    /**
     * If you have a non-Esri basemap (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-heatmap.html#getSchemesByTag)
     */
    basemapTheme?: "light" | "dark";
  }

  export interface heatmapGetSchemesParams extends Object {
    /**
     * The Esri basemap to pair with the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-heatmap.html#getSchemes)
     */
    basemap?: string | Basemap;
    /**
     * If you have a non-Esri basemap (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-heatmap.html#getSchemes)
     */
    basemapTheme?: "light" | "dark";
  }

  /**
   * Properties defining the symbology scheme used to visualize point features as a heatmap.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-symbology-heatmap.html#HeatmapScheme)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-heatmap.html#HeatmapScheme)
     */
    tags: string[];
    /**
     * The unique id of the color scheme to usee in the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-symbology-heatmap.html#HeatmapScheme)
     */
    colors: Color[];
    /**
     * The opacity of the heatmap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-heatmap.html#HeatmapScheme)
     */
    opacity: number;
  }

  /**
   * The return object of the [getSchemes()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-heatmap.html#getSchemes) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-smartMapping-symbology-heatmap.html#HeatmapSchemes)
     */
    basemapId: string;
    /**
     * Indicates whether the average basemap color is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-heatmap.html#HeatmapSchemes)
     */
    basemapTheme: string;
  }

  /**
   * Object containing helper methods for generating optimal symbols for location-only visualizations.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-location.html)
   */
  interface symbologyLocation {
    /**
     * Clones a location scheme object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-location.html#cloneScheme)
     */
    cloneScheme(scheme: LocationScheme): LocationScheme;
    /**
     * Returns a primary scheme and secondary schemes defining symbol properties for location-only visualizions in a [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-location.html#getSchemes)
     */
    getSchemes(params: locationGetSchemesParams): LocationSchemes;
    /**
     * Returns metadata for the available themes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-location.html#getThemes)
     */
    getThemes(basemap?: string | Basemap): Theme[];
  }

  export const symbologyLocation: symbologyLocation;

  export interface locationGetSchemesParams extends Object {
    /**
     * The Esri basemap to pair with the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-location.html#getSchemes)
     */
    basemap?: string | Basemap;
    /**
     * If you have a non-Esri basemap (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-location.html#getSchemes)
     */
    basemapTheme?: "light" | "dark";
    /**
     * The geometry type of the features to visualize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-location.html#getSchemes)
     */
    geometryType: "point" | "multipoint" | "polyline" | "polygon" | "mesh" | "multipatch";
    /**
     * The SceneView instance in which the scheme will be used.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
    /**
     * Indicates if the size units of the scheme will be in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-smartMapping-symbology-location.html#LocationSchemeForMesh)
     */
    color: Color;
    /**
     * The opacity of the fill symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-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-smartMapping-symbology-location.html#LocationSchemeForPoint)
     */
    size: number;
    /**
     * The opacity of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-smartMapping-symbology-location.html#LocationSchemeForPolygon)
     */
    outline: LocationSchemeForPolygonOutline;
    /**
     * The opacity of the fill symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-smartMapping-symbology-location.html#LocationSchemeForPolyline)
     */
    width: number;
    /**
     * The opacity of the line symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-location.html#LocationSchemeForPolyline)
     */
    opacity: number;
  }

  /**
   * The return object of the [getSchemes()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-location.html#getSchemes) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-smartMapping-symbology-location.html#LocationSchemes)
     */
    basemapId: string;
    /**
     * Indicates whether the average basemap color is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-location.html#LocationSchemes)
     */
    basemapTheme: string;
  }

  export interface LocationSchemeForPointOutline extends Object {
    /**
     * The outline color of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-smartMapping-symbology-location.html#LocationSchemeForPolygon)
     */
    width: number;
  }

  /**
   * Object containing helper methods for getting optimal symbol schemes used to create [predominance visualizations](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-predominance.html).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html)
   */
  interface symbologyPredominance {
    /**
     * Clones a predominance scheme object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#cloneScheme)
     */
    cloneScheme(scheme: PredominanceScheme): PredominanceScheme;
    /**
     * Returns a predominance scheme with the provided name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemeByName)
     */
    getSchemeByName(params: predominanceGetSchemeByNameParams): PredominanceScheme;
    /**
     * Returns a primary scheme and secondary schemes defining symbol properties for predominance-based data-driven visualizations 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-smartMapping-symbology-predominance.html#getSchemes)
     */
    getSchemes(params: predominanceGetSchemesParams): PredominanceSchemes;
    /**
     * Returns an array of predominance schemes with the provided tags.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemesByTag)
     */
    getSchemesByTag(params: predominanceGetSchemesByTagParams): PredominanceScheme[];
    /**
     * Returns metadata for the available themes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getThemes)
     */
    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-smartMapping-symbology-predominance.html#getSchemeByName)
     */
    name: string;
    /**
     * The basemap to pair with the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemeByName)
     */
    basemap?: string | Basemap;
    /**
     * If you have a non-Esri basemap (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemeByName)
     */
    basemapTheme?: "light" | "dark";
    /**
     * The geometry type of the features to visualize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemeByName)
     */
    geometryType: "point" | "multipoint" | "polyline" | "polygon" | "mesh" | "multipatch";
    /**
     * The number of unique values to include in the predominance visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemeByName)
     */
    numColors: number;
    /**
     * Determines which set of primary and secondary color schemes to return.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemeByName)
     */
    theme?: "default";
    /**
     * Indicates if the size units of the scheme will be in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemeByName)
     */
    worldScale?: boolean;
    /**
     * The SceneView instance in which the scheme will be used.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
  }

  export interface predominanceGetSchemesByTagParams extends Object {
    /**
     * When provided, only schemes containing all the matching tags will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemesByTag)
     */
    includedTags?: string[];
    /**
     * When provided, only schemes missing all the provided tags will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemesByTag)
     */
    excludedTags?: string[];
    /**
     * The basemap to pair with the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemesByTag)
     */
    basemap?: string | Basemap;
    /**
     * If you have a non-Esri basemap (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemesByTag)
     */
    basemapTheme?: "light" | "dark";
    /**
     * The geometry type of the features to visualize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemesByTag)
     */
    geometryType: "point" | "multipoint" | "polyline" | "polygon" | "mesh" | "multipatch";
    /**
     * The number of unique values to include in the predominance visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemesByTag)
     */
    numColors: number;
    /**
     * Determines which set of primary and secondary color schemes to return.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemesByTag)
     */
    theme?: "default";
    /**
     * Indicates if the size units of the scheme will be in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemesByTag)
     */
    worldScale?: boolean;
    /**
     * The SceneView instance in which the scheme will be used.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
  }

  export interface predominanceGetSchemesParams extends Object {
    /**
     * The Esri basemap to pair with the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemes)
     */
    basemap?: string | Basemap;
    /**
     * If you have a non-Esri basemap (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemes)
     */
    basemapTheme?: "light" | "dark";
    /**
     * The geometry type of the features to visualize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemes)
     */
    geometryType: "point" | "multipoint" | "polyline" | "polygon" | "mesh" | "multipatch";
    /**
     * The number of unique values to include in the predominance visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemes)
     */
    numColors: number;
    /**
     * Determines which set of primary and secondary color schemes to return.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemes)
     */
    theme?: "default";
    /**
     * Indicates if the size units of the scheme will be in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemes)
     */
    worldScale?: boolean;
    /**
     * The SceneView instance in which the scheme will be used.
     *
     * [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-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-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-smartMapping-symbology-predominance.html#PredominanceSchemeForMesh)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-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-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-smartMapping-symbology-predominance.html#PredominanceSchemeForPoint)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-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-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-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-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-smartMapping-symbology-predominance.html#PredominanceSchemeForPolygon)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-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-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-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-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-smartMapping-symbology-predominance.html#PredominanceSchemeForPolyline)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-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-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-smartMapping-symbology-predominance.html#PredominanceSchemeForPolyline)
     */
    sizeScheme: SizeSchemeForPolyline;
  }

  /**
   * The return object of the [getSchemes()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#getSchemes) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-smartMapping-symbology-predominance.html#PredominanceSchemes)
     */
    basemapId: string;
    /**
     * Indicates whether the average basemap color is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-predominance.html#PredominanceSchemes)
     */
    basemapTheme: string;
  }

  export interface PredominanceSchemeForPointOutline extends Object {
    /**
     * The outline color of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-smartMapping-symbology-predominance.html#PredominanceSchemeForPolygon)
     */
    width: number;
  }

  /**
   * Object containing helper methods for getting optimal symbol schemes used to create [relationship (bivariate choropleth) visualizations](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-relationship.html).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html)
   */
  interface symbologyRelationship {
    /**
     * Clones a relationship (bivariate color) scheme object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#cloneScheme)
     */
    cloneScheme(scheme: RelationshipScheme): RelationshipScheme;
    /**
     * Returns a relationship scheme with the provided name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemeByName)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemes)
     */
    getSchemes(params: relationshipGetSchemesParams): RelationshipSchemes;
    /**
     * Returns an array of relationship schemes with the provided tags.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemesByTag)
     */
    getSchemesByTag(params: relationshipGetSchemesByTagParams): RelationshipScheme[];
    /**
     * Returns metadata for the available themes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getThemes)
     */
    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-smartMapping-symbology-relationship.html#getSchemeByName)
     */
    name: string;
    /**
     * The basemap to pair with the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemeByName)
     */
    basemap?: string | Basemap;
    /**
     * If you have a non-Esri basemap (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemeByName)
     */
    basemapTheme?: "light" | "dark";
    /**
     * The geometry type of the features to visualize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemeByName)
     */
    geometryType: "point" | "multipoint" | "polyline" | "polygon" | "mesh" | "multipatch";
    /**
     * Determines which set of primary and secondary color schemes to return.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemeByName)
     */
    theme?: "default";
    /**
     * Indicates if the size units of the scheme will be in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemeByName)
     */
    worldScale?: boolean;
    /**
     * The SceneView instance in which the scheme will be used.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
  }

  export interface relationshipGetSchemesByTagParams extends Object {
    /**
     * When provided, only schemes containing all the matching tags will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemesByTag)
     */
    includedTags?: string[];
    /**
     * When provided, only schemes missing all the provided tags will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemesByTag)
     */
    excludedTags?: string[];
    /**
     * The basemap to pair with the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemesByTag)
     */
    basemap?: string | Basemap;
    /**
     * If you have a non-Esri basemap (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemesByTag)
     */
    basemapTheme?: "light" | "dark";
    /**
     * The geometry type of the features to visualize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemesByTag)
     */
    geometryType: "point" | "multipoint" | "polyline" | "polygon" | "mesh" | "multipatch";
    /**
     * Determines which set of primary and secondary color schemes to return.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemesByTag)
     */
    theme?: "default";
    /**
     * Indicates if the size units of the scheme will be in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemesByTag)
     */
    worldScale?: boolean;
    /**
     * The SceneView instance in which the scheme will be used.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
  }

  export interface relationshipGetSchemesParams extends Object {
    /**
     * The Esri basemap to pair with the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemes)
     */
    basemap?: string | Basemap;
    /**
     * If you have a non-Esri basemap (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemes)
     */
    basemapTheme?: "light" | "dark";
    /**
     * The geometry type of the features to visualize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemes)
     */
    geometryType: "point" | "multipoint" | "polyline" | "polygon" | "mesh" | "multipatch";
    /**
     * Determines which set of primary and secondary color schemes to return.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemes)
     */
    theme?: "default";
    /**
     * Indicates if the size units of the scheme will be in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemes)
     */
    worldScale?: boolean;
    /**
     * The SceneView instance in which the scheme will be used.
     *
     * [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-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-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-smartMapping-symbology-relationship.html#RelationshipSchemeForMesh)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-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-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-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-smartMapping-symbology-relationship.html#RelationshipSchemeForPoint)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-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-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-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-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-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-smartMapping-symbology-relationship.html#RelationshipSchemeForPolygon)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-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-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-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-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-smartMapping-symbology-relationship.html#RelationshipSchemeForPolyline)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-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-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-smartMapping-symbology-relationship.html#RelationshipSchemeForPolyline)
     */
    width: number;
  }

  /**
   * The return object of the [getSchemes()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#getSchemes) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-smartMapping-symbology-relationship.html#RelationshipSchemes)
     */
    basemapId: string;
    /**
     * Indicates whether the average basemap color is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-relationship.html#RelationshipSchemes)
     */
    basemapTheme: 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-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-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-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-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-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-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-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-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-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-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-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-smartMapping-symbology-relationship.html#RelationshipSchemeForPolyline)
     */
    numClasses: number;
  }

  /**
   * Object containing helper methods for generating optimal symbols for data-driven size visualizations.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-size.html)
   */
  interface symbologySize {
    /**
     * Clones a size scheme object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-size.html#cloneScheme)
     */
    cloneScheme(scheme: SizeScheme): SizeScheme;
    /**
     * Returns a primary scheme and secondary schemes defining symbol properties for size-based data-driven visualizations in a [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-size.html#getSchemes)
     */
    getSchemes(params: sizeGetSchemesParams): SizeSchemes;
    /**
     * Returns metadata for the available themes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-size.html#getThemes)
     */
    getThemes(basemap?: string | Basemap): Theme[];
  }

  export const symbologySize: symbologySize;

  export interface sizeGetSchemesParams extends Object {
    /**
     * The Esri basemap to pair with the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-size.html#getSchemes)
     */
    basemap?: string | Basemap;
    /**
     * If you have a non-Esri basemap (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-size.html#getSchemes)
     */
    basemapTheme?: "light" | "dark";
    /**
     * The geometry type of the features to visualize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-size.html#getSchemes)
     */
    geometryType: "point" | "multipoint" | "polyline" | "polygon";
    /**
     * The SceneView instance in which the scheme will be used.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
    /**
     * Indicates if the size units of the scheme will be in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-smartMapping-symbology-size.html#SizeSchemeForPoint)
     */
    color: Color;
    /**
     * The color of the marker 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-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-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-smartMapping-symbology-size.html#SizeSchemeForPoint)
     */
    size: number;
    /**
     * The size of the marker symbol (in pixels or points) 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-smartMapping-symbology-size.html#SizeSchemeForPoint)
     */
    noDataSize: number;
    /**
     * The minimum size of a marker symbol in pixels or points representing features with low data values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-size.html#SizeSchemeForPoint)
     */
    minSize: number;
    /**
     * The maximum size of a marker symbol in pixels or points representing features with high data values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-size.html#SizeSchemeForPoint)
     */
    maxSize: number;
    /**
     * The opacity of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-size.html#SizeSchemeForPoint)
     */
    opacity: number;
  }

  /**
   * Properties defining the symbology scheme used to visualize polygon features driven by attribute data.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-symbology-size.html#SizeSchemeForPolygon)
     */
    marker: SizeSchemeForPoint;
    /**
     * The schema defining the backgound symbol of the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-size.html#SizeSchemeForPolygon)
     */
    background: SizeSchemeForPolygonBackground;
    /**
     * The opacity of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-smartMapping-symbology-size.html#SizeSchemeForPolyline)
     */
    color: 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-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-smartMapping-symbology-size.html#SizeSchemeForPolyline)
     */
    width: number;
    /**
     * The width of the line symbol in pixels or points 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-smartMapping-symbology-size.html#SizeSchemeForPolyline)
     */
    noDataWidth: number;
    /**
     * The minimum width of a line symbol in pixels or points representing features with low data values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-size.html#SizeSchemeForPolyline)
     */
    minWidth: number;
    /**
     * The maximum width of a line symbol in pixels or points representing features with high data values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-size.html#SizeSchemeForPolyline)
     */
    maxWidth: number;
    /**
     * The opacity of the line symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-size.html#SizeSchemeForPolyline)
     */
    opacity: number;
  }

  /**
   * The return object of the [getSchemes()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-size.html#getSchemes) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-smartMapping-symbology-size.html#SizeSchemes)
     */
    basemapId: string;
    /**
     * Indicates whether the average basemap color is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-size.html#SizeSchemes)
     */
    basemapTheme: string;
  }

  export interface SizeSchemeForPointOutline extends Object {
    /**
     * The outline color of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-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-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-smartMapping-symbology-size.html#SizeSchemeForPolygon)
     */
    width: number;
  }

  /**
   * This module provides convenience methods for querying color ramps (arrays of colors) used in the smart mapping [color symbology](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html) module.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-support-colorRamps.html)
   */
  interface colorRamps {
    /**
     * Returns all color ramps available in smartMapping [color schemes](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-support-colorRamps.html#all)
     */
    all(): colorRampsColorRamp[];
    /**
     * Returns the color ramp available in the smartMapping [color schemes](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html) matching the given name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-support-colorRamps.html#byName)
     */
    byName(name: string): colorRampsColorRamp;
    /**
     * Returns the color ramps available in the smartMapping [color schemes](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html) matching the given tags.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-support-colorRamps.html#byTag)
     */
    byTag(params: colorRampsByTagParams): colorRampsColorRamp[];
    /**
     * Returns the names of all color ramps available in the smartMapping [color schemes](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-color.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-support-colorRamps.html#names)
     */
    names(): string[];
  }

  export const colorRamps: colorRamps;

  /**
   * Defines a ramp of colors to use for visualizing data in a chart, [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html), or [ColorVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-support-colorRamps.html#ColorRamp)
   */
  export interface colorRampsColorRamp extends Object {
    /**
     * The unique name of the color ramp.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-support-colorRamps.html#ColorRamp)
     */
    name: string;
    /**
     * Tags associated with the color ramp.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-support-colorRamps.html#ColorRamp)
     */
    tags: string[];
    /**
     * An array of five colors intended for displaying a continuous color ramp.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-support-colorRamps.html#ColorRamp)
     */
    colors: Color[];
    /**
     * Contains an array of ramps ranging in size from 1 color to 10 colors.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-support-colorRamps.html#ColorRamp)
     */
    colorsForClassBreaks: ColorRampColorsForClassBreaks[];
  }

  export interface colorRampsByTagParams extends Object {
    /**
     * When provided, only ramps containing all the matching tags will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-support-colorRamps.html#byTag)
     */
    includedTags?: string[];
    /**
     * When provided, only ramps missing all the provided tags will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-support-colorRamps.html#byTag)
     */
    excludedTags?: string[];
  }

  export interface ColorRampColorsForClassBreaks extends Object {
    /**
     * An array of 1 to 10 colors intended for displaying as a ramp with distinct or unique colors.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-support-colorRamps.html#ColorRamp)
     */
    colors: Color[];
    /**
     * The number of classes or colors used in the ramp of discrete colors.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-support-colorRamps.html#ColorRamp)
     */
    numClasses: number;
  }

  /**
   * Object containing helper methods for getting optimal symbol themes used to create data-driven visualizations of unique values or types.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html)
   */
  interface symbologyType {
    /**
     * Clones a type scheme object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#cloneScheme)
     */
    cloneScheme(scheme: TypeScheme): TypeScheme;
    /**
     * Returns a type scheme with the provided name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getSchemeByName)
     */
    getSchemeByName(params: typeGetSchemeByNameParams): TypeScheme;
    /**
     * Returns a primary scheme and secondary schemes defining symbol properties for type-based data-driven visualizations 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-smartMapping-symbology-type.html#getSchemes)
     */
    getSchemes(params: typeGetSchemesParams): TypeSchemes;
    /**
     * Returns an array of type schemes with the provided tags.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getSchemesByTag)
     */
    getSchemesByTag(params: typeGetSchemesByTagParams): TypeScheme[];
    /**
     * Returns metadata for the available themes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getThemes)
     */
    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-smartMapping-symbology-type.html#getSchemeByName)
     */
    name: string;
    /**
     * The basemap to pair with the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getSchemeByName)
     */
    basemap?: string | Basemap;
    /**
     * If you have a non-Esri basemap (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getSchemeByName)
     */
    basemapTheme?: "light" | "dark";
    /**
     * The geometry type of the features to visualize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getSchemeByName)
     */
    geometryType: "point" | "multipoint" | "polyline" | "polygon" | "mesh" | "multipatch";
    /**
     * Determines whether to return a standardized  unique value scheme for point cloud class renderers (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getSchemeByName)
     */
    theme?: "point-cloud-class" | "default";
    /**
     * Indicates if the size units of the scheme will be in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getSchemeByName)
     */
    worldScale?: boolean;
    /**
     * The SceneView instance in which the scheme will be used.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
  }

  export interface typeGetSchemesByTagParams extends Object {
    /**
     * When provided, only schemes containing all the matching tags will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getSchemesByTag)
     */
    includedTags?: string[];
    /**
     * When provided, only schemes missing all the provided tags will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getSchemesByTag)
     */
    excludedTags?: string[];
    /**
     * The basemap to pair with the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getSchemesByTag)
     */
    basemap?: string | Basemap;
    /**
     * If you have a non-Esri basemap (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getSchemesByTag)
     */
    basemapTheme?: "light" | "dark";
    /**
     * The geometry type of the features to visualize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getSchemesByTag)
     */
    geometryType: "point" | "multipoint" | "polyline" | "polygon" | "mesh" | "multipatch";
    /**
     * Determines whether to return a standardized  unique value scheme for point cloud class renderers (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getSchemesByTag)
     */
    theme?: "point-cloud-class" | "default";
    /**
     * Indicates if the size units of the scheme will be in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getSchemesByTag)
     */
    worldScale?: boolean;
    /**
     * The SceneView instance in which the scheme will be used.
     *
     * [Read more...](global.html)
     */
    view?: SceneView;
  }

  export interface typeGetSchemesParams extends Object {
    /**
     * The Esri basemap to pair with the visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getSchemes)
     */
    basemap?: string | Basemap;
    /**
     * If you have a non-Esri basemap (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getSchemes)
     */
    basemapTheme?: "light" | "dark";
    /**
     * The geometry type of the features to visualize.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getSchemes)
     */
    geometryType: "point" | "multipoint" | "polyline" | "polygon" | "mesh" | "multipatch";
    /**
     * Determines whether to return a standardized  unique value scheme for point cloud class renderers (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getSchemes)
     */
    theme?: "point-cloud-class" | "default";
    /**
     * Indicates if the size units of the scheme will be in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getSchemes)
     */
    worldScale?: boolean;
    /**
     * The SceneView instance in which the scheme will be used.
     *
     * [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-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-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-smartMapping-symbology-type.html#TypeSchemeForMesh)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-symbology-type.html#TypeSchemeForMesh)
     */
    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-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-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-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-smartMapping-symbology-type.html#TypeSchemeForPoint)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-symbology-type.html#TypeSchemeForPoint)
     */
    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-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-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-smartMapping-symbology-type.html#TypeSchemeForPoint)
     */
    size: number;
    /**
     * The opacity of the point symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-smartMapping-symbology-type.html#TypeSchemeForPolygon)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-symbology-type.html#TypeSchemeForPolygon)
     */
    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-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-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-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-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-smartMapping-symbology-type.html#TypeSchemeForPolyline)
     */
    name: string;
    /**
     * Tags associated with the scheme.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-smartMapping-symbology-type.html#TypeSchemeForPolyline)
     */
    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-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-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-smartMapping-symbology-type.html#TypeSchemeForPolyline)
     */
    opacity: number;
  }

  /**
   * The return object of the [getSchemes()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#getSchemes) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-smartMapping-symbology-type.html#TypeSchemes)
     */
    basemapId: string;
    /**
     * Indicates whether the average basemap color is `light` or `dark`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-symbology-type.html#TypeSchemes)
     */
    basemapTheme: string;
  }

  export interface TypeSchemeForPointOutline extends Object {
    /**
     * The outline color of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-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-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-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-smartMapping-symbology-type.html#TypeSchemeForPolygon)
     */
    width: number;
  }

  interface ActionBase extends Accessor {
    /**
     * Set this property to `true` to display a spinner icon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionBase.html#active)
     */
    active: boolean;
    /**
     * This adds a CSS class to the [ActionButton's](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html) node.
     *
     * [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)
     */
    disabled: boolean;
    /**
     * The name of the ID assigned to this action.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionBase.html#id)
     */
    id: string;
    /**
     * The title of the action.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionBase.html#title)
     */
    title: string;
    /**
     * Specifies the type of action.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionBase.html#type)
     */
    type: "button" | "slider" | "toggle";
    /**
     * Indicates if the action is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionBase.html#visible)
     */
    visible: boolean;

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

  interface ActionBaseConstructor {
    /**
     * Actions are customizable behavior which can be executed in certain widgets such as [Popups](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html), a [BasemapLayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html), or a [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionBase.html)
     */

    new (properties?: ActionBaseProperties): ActionBase;
  }

  export const ActionBase: ActionBaseConstructor;

  interface ActionBaseProperties {
    /**
     * Set this property to `true` to display a spinner icon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionBase.html#active)
     */
    active?: boolean;
    /**
     * This adds a CSS class to the [ActionButton's](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html) node.
     *
     * [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)
     */
    disabled?: boolean;
    /**
     * The name of the ID assigned to this action.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionBase.html#id)
     */
    id?: string;
    /**
     * The title of the action.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionBase.html#title)
     */
    title?: string;
    /**
     * Specifies the type of action.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionBase.html#type)
     */
    type?: "button" | "slider" | "toggle";
    /**
     * Indicates if the action is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionBase.html#visible)
     */
    visible?: boolean;
  }

  interface ActionButton extends ActionBase {
    /**
     * The URL to an image that will be used to represent the action.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html#image)
     */
    image: string;
    /**
     * Specifies the type of action.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html#type)
     */
    readonly type: "button";
  }

  interface ActionButtonConstructor {
    /**
     * A customizable button that performs a specific action(s) used in widgets such as the [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html), [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html), and [BasemapLayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html)
     */

    new (properties?: ActionButtonProperties): ActionButton;
  }

  export const ActionButton: ActionButtonConstructor;

  interface ActionButtonProperties extends ActionBaseProperties {
    /**
     * The URL to an image that will be used to represent the action.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html#image)
     */
    image?: string;
  }

  interface ActionToggle extends ActionBase {
    /**
     * Specifies the type of action.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionToggle.html#type)
     */
    readonly type: "toggle";
    /**
     * Indicates the value of whether the action is toggled on/off.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionToggle.html#value)
     */
    value: boolean;

    /**
     * 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 {
    /**
     * A customizable toggle used in the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widget that performs a specific action(s) which can be toggled on/off.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionToggle.html)
     */

    new (properties?: ActionToggleProperties): ActionToggle;
  }

  export const ActionToggle: ActionToggleConstructor;

  interface ActionToggleProperties extends ActionBaseProperties {
    /**
     * Indicates the value of whether the action is toggled on/off.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionToggle.html#value)
     */
    value?: boolean;
  }

  interface LayersMixin {
    /**
     * A collection of operational [layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html).
     *
     * [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)
     */
    add(layer: Layer | Promise<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)
     */
    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)
     */
    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)
     */
    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)
     */
    removeMany(layers: Layer[]): Layer[];
    /**
     * Changes the layer order.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-LayersMixin.html#reorder)
     */
    reorder(layer: Layer, index: number): Layer;
  }

  interface LayersMixinConstructor {
    new (): LayersMixin;
  }

  export const LayersMixin: LayersMixinConstructor;

  interface LayersMixinProperties {
    /**
     * A collection of operational [layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-LayersMixin.html#layers)
     */
    layers?: CollectionProperties<LayerProperties> | LayerProperties[];
  }

  interface MapFloorInfo extends Accessor, JSONSupport {
    /**
     * Contains the facility features of a floor plan, which describe the footprints of managed buildings and other structures.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-MapFloorInfo.html#facilityLayer)
     */
    facilityLayer: FacilityLayerInfo;
    /**
     * Contains the level features of a floor plan, which describe the footprint of each occupiable floor contained in a managed facility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-MapFloorInfo.html#levelLayer)
     */
    levelLayer: LevelLayerInfo;
    /**
     * Contains the site features of a floor plan, which describe the boundaries of managed sites and is used for visualization in mapmaking.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-MapFloorInfo.html#siteLayer)
     */
    siteLayer: SiteLayerInfo;
  }

  interface MapFloorInfoConstructor {
    /**
     * Floor-aware maps facilitate visualizing, editing, and analyzing indoor data and they allow for fast navigation of buildings in maps and scenes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-MapFloorInfo.html)
     */

    new (properties?: MapFloorInfoProperties): MapFloorInfo;

    fromJSON(json: any): MapFloorInfo;
  }

  export const MapFloorInfo: MapFloorInfoConstructor;

  interface MapFloorInfoProperties {
    /**
     * Contains the facility features of a floor plan, which describe the footprints of managed buildings and other structures.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-MapFloorInfo.html#facilityLayer)
     */
    facilityLayer?: FacilityLayerInfoProperties;
    /**
     * Contains the level features of a floor plan, which describe the footprint of each occupiable floor contained in a managed facility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-MapFloorInfo.html#levelLayer)
     */
    levelLayer?: LevelLayerInfoProperties;
    /**
     * Contains the site features of a floor plan, which describe the boundaries of managed sites and is used for visualization in mapmaking.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-MapFloorInfo.html#siteLayer)
     */
    siteLayer?: SiteLayerInfoProperties;
  }

  /**
   * Various utils for working with [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) widget functionality.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-popupUtils.html)
   */
  interface popupUtils {
    /**
     * Creates an array of [fieldInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-FieldInfo.html) used for populating [FieldsContent](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-popupUtils.html#createFieldInfos)
     */
    createFieldInfos(config: FieldInfosConfig, options?: CreatePopupTemplateOptions): FieldInfo[];
    /**
     * Creates [fields](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html) content used for populating a [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-popupUtils.html#createFieldsContent)
     */
    createFieldsContent(config: FieldInfosConfig, options?: CreatePopupTemplateOptions): FieldsContent;
    /**
     * Creates a popup template given the specified [config](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-popupUtils.html#Config) information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-popupUtils.html#createPopupTemplate)
     */
    createPopupTemplate(config: Config, options?: CreatePopupTemplateOptions): PopupTemplate;
  }

  export const popupUtils: popupUtils;

  /**
   * A configuration object containing properties for creating a [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-popupUtils.html#Config)
   */
  export interface Config extends Object {
    /**
     * The display field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-popupUtils.html#Config)
     */
    displayField?: string;
    /**
     * The title for the [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-popupUtils.html#Config)
     */
    title: string;
    /**
     * The fields that record who adds or edits data in the feature service and when the edit is made.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-popupUtils.html#Config)
     */
    editFieldsInfo?: EditFieldsInfo;
    /**
     * The fields displayed within the [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-popupUtils.html#Config)
     */
    fields: Field[];
    /**
     * The object id field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-popupUtils.html#Config)
     */
    objectIdField?: string;
  }

  /**
   * Options for creating the [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-popupUtils.html#CreatePopupTemplateOptions)
   */
  export interface CreatePopupTemplateOptions extends Object {
    /**
     * An array of field types to ignore when creating the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-popupUtils.html#CreatePopupTemplateOptions)
     */
    ignoreFieldTypes?: string[];
    /**
     * An array of field names set to be visible within the [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-popupUtils.html#CreatePopupTemplateOptions)
     */
    visibleFieldNames?: Set<string>;
  }

  /**
   * A configuration object containing field properties for creating [FieldsContent](https://developers.arcgis.com/javascript/latest/api-reference/esri-popup-content-FieldsContent.html) for a [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-popupUtils.html#FieldInfosConfig)
   */
  export interface FieldInfosConfig extends Object {
    /**
     * The fields that record who adds or edits data in the feature service and when the edit is made.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-popupUtils.html#FieldInfosConfig)
     */
    editFieldsInfo?: EditFieldsInfo;
    /**
     * The fields displayed within the [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-popupUtils.html#FieldInfosConfig)
     */
    fields: Field[];
    /**
     * The object id field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-popupUtils.html#FieldInfosConfig)
     */
    objectIdField?: string;
  }

  interface TablesMixin {
    /**
     * A collection of [layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) instances that are tables saved in a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) and/or a [WebMap](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-TablesMixin.html#tables)
     */
    tables: Collection<Layer>;

    /**
     * Returns a table based on the given table ID.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-TablesMixin.html#findTableById)
     */
    findTableById(tableId: string): SearchTable;
  }

  interface TablesMixinConstructor {
    new (): TablesMixin;
  }

  export const TablesMixin: TablesMixinConstructor;

  interface TablesMixinProperties {
    /**
     * A collection of [layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) instances that are tables saved in a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) and/or a [WebMap](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-TablesMixin.html#tables)
     */
    tables?: CollectionProperties<LayerProperties> | LayerProperties[];
  }

  /**
   * A convenience module for importing [Symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol.html) classes when developing with [TypeScript](https://developers.arcgis.com/javascript/latest/typescript-setup/).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html)
   */
  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
      | __esri.CIMSymbol;

    /**
     * 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
      | __esri.WaterSymbol3DLayer;

    /**
     * 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;

    /**
     * Symbol2D3D types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#Symbol2D3D)
     */
    export type Symbol2D3D = __esri.Symbol2D | __esri.symbolsSymbol3D;

    /**
     * Symbol types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#Symbol)
     */
    export type Symbol = __esri.Symbol2D3D | __esri.WebStyleSymbol;
  }

  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 {
    /**
     * When symbols have an offset from their position, it's important to still see what the real location is.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-Callout3D.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html#border)
     */
    border: LineCallout3DBorder;
    /**
     * The color of the callout line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html#color)
     */
    color: Color;
    /**
     * The width of the callout line in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html#size)
     */
    size: number;

    type: "line";

    /**
     * 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 {
    /**
     * This type of callout displays a line to connect a symbol or a label with its actual location in the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html)
     */

    new (properties?: LineCallout3DProperties): LineCallout3D;

    fromJSON(json: any): LineCallout3D;
  }

  export const LineCallout3D: LineCallout3DConstructor;

  interface LineCallout3DProperties extends Callout3DProperties {
    /**
     * The border settings of the callout line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html#border)
     */
    border?: LineCallout3DBorderProperties;
    /**
     * The color of the callout line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html#color)
     */
    color?: Color | number[] | string;
    /**
     * The width of the callout line in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html#size)
     */
    size?: number | string;

    type?: "line";
  }

  export interface LineCallout3DBorderProperties extends Object {
    /**
     * The color of the callout line border.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html#border)
     */
    color?: Color | number[] | string;
  }

  export interface LineCallout3DBorder extends AnonymousAccessor {
    /**
     * The color of the callout line border.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-LineCallout3D.html#border)
     */
    color?: Color;
  }

  interface CIMSymbol extends Symbol {
    /**
     * The JSON payload of the [CIMSymbolReference](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMRenderers.md#CIMSymbolReference).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-CIMSymbol.html#data)
     */
    data: CIM.CIMSymbolReference;
    /**
     * The symbol type.
     *
     * [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 {
    /**
     * CIMSymbols are used to display multi-layer vector symbols for features and graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-CIMSymbol.html)
     */

    new (properties?: CIMSymbolProperties): CIMSymbol;

    fromJSON(json: any): CIMSymbol;
  }

  export const CIMSymbol: CIMSymbolConstructor;

  interface CIMSymbolProperties extends SymbolProperties {
    /**
     * The JSON payload of the [CIMSymbolReference](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMRenderers.md#CIMSymbolReference).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-CIMSymbol.html#data)
     */
    data?: CIM.CIMSymbolReference;
  }

  interface Edges3D extends Accessor, JSONSupport {
    /**
     * The color of the edges.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-Edges3D.html#color)
     */
    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)
     */
    extensionLength: number;
    /**
     * The size of the edges in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-Edges3D.html#size)
     */
    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 {
    /**
     * Edges3D is the base class for symbol classes that add edge rendering visualization to existing symbols.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-Edges3D.html)
     */

    new (properties?: Edges3DProperties): Edges3D;

    fromJSON(json: any): Edges3D;
  }

  export const Edges3D: Edges3DConstructor;

  interface Edges3DProperties {
    /**
     * The color of the edges.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-Edges3D.html#color)
     */
    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)
     */
    extensionLength?: number | string;
    /**
     * The size of the edges in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-Edges3D.html#size)
     */
    size?: number | string;
  }

  interface SketchEdges3D extends Edges3D {
    /**
     * The symbol type.
     *
     * [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 {
    /**
     * SketchEdges3D is a symbol type that visualizes edges of [3D Object SceneLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html), extruded polygons or mesh geometries with a sketched line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-SketchEdges3D.html)
     */

    new (properties?: SketchEdges3DProperties): SketchEdges3D;

    fromJSON(json: any): SketchEdges3D;
  }

  export const SketchEdges3D: SketchEdges3DConstructor;

  interface SketchEdges3DProperties extends Edges3DProperties {
    /**
     * The symbol type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-SketchEdges3D.html#type)
     */
    type?: "sketch";
  }

  interface SolidEdges3D extends Edges3D {
    /**
     * The symbol type.
     *
     * [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 {
    /**
     * SolidEdges3D is a symbol type that visualizes edges of [3D Object SceneLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html), extruded polygons or mesh geometries with a solid line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-SolidEdges3D.html)
     */

    new (properties?: SolidEdges3DProperties): SolidEdges3D;

    fromJSON(json: any): SolidEdges3D;
  }

  export const SolidEdges3D: SolidEdges3DConstructor;

  interface SolidEdges3DProperties extends Edges3DProperties {
    /**
     * The symbol type.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#castShadows)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#material)
     */
    material: ExtrudeSymbol3DLayerMaterial;
    /**
     * The height of the extrusion in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#size)
     */
    size: number;
    /**
     * The symbol type.
     *
     * [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 {
    /**
     * ExtrudeSymbol3DLayer is used to render [Polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) geometries by extruding them upward from the ground, creating a 3D volumetric object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#castShadows)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#material)
     */
    material?: ExtrudeSymbol3DLayerMaterialProperties;
    /**
     * The height of the extrusion in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#size)
     */
    size?: number;
  }

  export interface ExtrudeSymbol3DLayerMaterialProperties extends Object {
    /**
     * The fill color of the extrusion.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#material)
     */
    color?: Color | number[] | string;
  }

  export interface ExtrudeSymbol3DLayerMaterial extends AnonymousAccessor {
    /**
     * The fill color of the extrusion.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#material)
     */
    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;
    /**
     * The symbol type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol.html#type)
     */
    type: "simple-fill" | "picture-fill";
  }

  interface FillSymbolConstructor {
    /**
     * Fill symbols are used to draw [Polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) graphics in a [GraphicsLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html) or a [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) in a 2D [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol.html)
     */

    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;
    /**
     * The symbol type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol.html#type)
     */
    type?: "simple-fill" | "picture-fill";
  }

  interface FillSymbol3DLayer extends Symbol3DLayer {
    /**
     * Indicates whether the symbol layer geometry casts shadows in the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#castShadows)
     */
    castShadows: boolean;
    /**
     * Sets the contour edges on 3D Objects.
     *
     * [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 the feature's geometry color/texture information.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#outline)
     */
    outline: FillSymbol3DLayerOutline;
    /**
     * The pattern used to render the polygon fill.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#pattern)
     */
    pattern: StylePattern3D;
    /**
     * The symbol type.
     *
     * [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 {
    /**
     * FillSymbol3DLayer is used to render the surfaces of flat 2D [Polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) geometries and 3D volumetric meshes in 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-symbols-FillSymbol3DLayer.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#castShadows)
     */
    castShadows?: boolean;
    /**
     * Sets the contour edges on 3D Objects.
     *
     * [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 the feature's geometry color/texture information.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#outline)
     */
    outline?: FillSymbol3DLayerOutlineProperties;
    /**
     * The pattern used to render the polygon fill.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#pattern)
     */
    pattern?: StylePattern3DProperties;
  }

  export interface FillSymbol3DLayerMaterialProperties extends Object {
    /**
     * The color of the fill.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material)
     */
    color?: Color | number[] | string;
    /**
     * Specifies how the material `color` is applied to the geometry color/texture information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material)
     */
    colorMixMode?: "tint" | "replace" | "multiply";
  }

  export interface FillSymbol3DLayerMaterial extends AnonymousAccessor {
    /**
     * The color of the fill.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material)
     */
    color?: Color;
    /**
     * Specifies how the material `color` is applied to the geometry color/texture information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#material)
     */
    colorMixMode?: "tint" | "replace" | "multiply";
  }

  export interface FillSymbol3DLayerOutlineProperties extends Object {
    /**
     * The color of the outline.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#outline)
     */
    color: Color;
    /**
     * The width of the outline in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#outline)
     */
    size: number;
  }

  interface Font extends Accessor, JSONSupport {
    /**
     * The text decoration.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#decoration)
     */
    decoration: "underline" | "line-through" | "none";
    /**
     * The font family of the text.
     *
     * The font family of the text. The possible values are dependent upon the layer type, and if you working with a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). See the [Labeling guide page](https://developers.arcgis.com/javascript/latest/labeling/) for detailed explanation, or click the `Read more` below.  >>> esri-read-more **Font families for 3D SceneViews**  The supported font families for 3D [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) are dependent upon the fonts installed on the user's computer and web browser. If an app uses a font that is not installed, the Font class implements a fallback mechanism that will use the default font family value, which is `sans-serif`.  **Font families for 2D MapImageLayer**  The supported font families for [MapImageLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html) in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) are dependent upon the fonts installed on the [ArcGIS Server](https://enterprise.arcgis.com/en/server/latest/get-started/windows/what-is-arcgis-for-server-.htm) that published the layer. If an app uses a font that is not installed, the Font class implements a fallback mechanism that will use the default font family value, which is `sans-serif`.  **Font families for 2D FeatureLayer**, CSVLayer, StreamLayer, and TextSymbol  The supported font families are based on hosted fonts files in `.pbf` format. By default, the fonts available are mostly the same ones used by the Esri Vector Basemaps. These fonts are available via `https://static.arcgis.com/fonts`. The URL can be configured to point to your own font resources by setting the [esriConfig.fontsUrl](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#fontsUrl) property. If an app uses a font that is not installed, the Font class implements a fallback mechanism that will use the default font family value, which is `sans-serif`. This uses the `Arial Unicode MS` font file.  > A preview of the fonts listed in the following table are available in the [Labeling](https://developers.arcgis.com/javascript/latest/labeling/) overview page.  List of currently supported fonts:  [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#family)
     */
    family: string;
    /**
     * The font size in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#size)
     */
    size: number;
    /**
     * The text style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#style)
     */
    style: "normal" | "italic" | "oblique";
    /**
     * The text weight.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#weight)
     */
    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 {
    /**
     * The font used to display [2D text symbols](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html) and [3D text symbols](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html)
     */

    new (properties?: FontProperties): Font;

    fromJSON(json: any): Font;
  }

  export const Font: FontConstructor;

  interface FontProperties {
    /**
     * The text decoration.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#decoration)
     */
    decoration?: "underline" | "line-through" | "none";
    /**
     * The font family of the text.
     *
     * The font family of the text. The possible values are dependent upon the layer type, and if you working with a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html). See the [Labeling guide page](https://developers.arcgis.com/javascript/latest/labeling/) for detailed explanation, or click the `Read more` below.  >>> esri-read-more **Font families for 3D SceneViews**  The supported font families for 3D [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) are dependent upon the fonts installed on the user's computer and web browser. If an app uses a font that is not installed, the Font class implements a fallback mechanism that will use the default font family value, which is `sans-serif`.  **Font families for 2D MapImageLayer**  The supported font families for [MapImageLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html) in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) are dependent upon the fonts installed on the [ArcGIS Server](https://enterprise.arcgis.com/en/server/latest/get-started/windows/what-is-arcgis-for-server-.htm) that published the layer. If an app uses a font that is not installed, the Font class implements a fallback mechanism that will use the default font family value, which is `sans-serif`.  **Font families for 2D FeatureLayer**, CSVLayer, StreamLayer, and TextSymbol  The supported font families are based on hosted fonts files in `.pbf` format. By default, the fonts available are mostly the same ones used by the Esri Vector Basemaps. These fonts are available via `https://static.arcgis.com/fonts`. The URL can be configured to point to your own font resources by setting the [esriConfig.fontsUrl](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#fontsUrl) property. If an app uses a font that is not installed, the Font class implements a fallback mechanism that will use the default font family value, which is `sans-serif`. This uses the `Arial Unicode MS` font file.  > A preview of the fonts listed in the following table are available in the [Labeling](https://developers.arcgis.com/javascript/latest/labeling/) overview page.  List of currently supported fonts:  [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#family)
     */
    family?: string;
    /**
     * The font size in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#size)
     */
    size?: number | string;
    /**
     * The text style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#style)
     */
    style?: "normal" | "italic" | "oblique";
    /**
     * The text weight.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html#weight)
     */
    weight?: "normal" | "bold" | "bolder" | "lighter";
  }

  interface IconSymbol3DLayer extends Symbol3DLayer {
    /**
     * The positioning of the icon relative to the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#anchor)
     */
    anchor:
      | "center"
      | "left"
      | "right"
      | "top"
      | "bottom"
      | "top-left"
      | "top-right"
      | "bottom-left"
      | "bottom-right"
      | "relative";
    /**
     * Defines the [anchor](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#anchor) relative to the center of the icon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#anchorPosition)
     */
    anchorPosition: IconSymbol3DLayerAnchorPosition;
    /**
     * The material used to shade the icon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#material)
     */
    material: IconSymbol3DLayerMaterial;
    /**
     * The outline of the icon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#outline)
     */
    outline: IconSymbol3DLayerOutline;
    /**
     * The shape (`primitive`) or image URL (`href`) used to visualize the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#resource)
     */
    resource: IconSymbol3DLayerResource;
    /**
     * The size of the icon in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#size)
     */
    size: number;
    /**
     * The symbol type.
     *
     * [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 {
    /**
     * IconSymbol3DLayer is used to render [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometries using a flat 2D icon (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#anchor)
     */
    anchor?:
      | "center"
      | "left"
      | "right"
      | "top"
      | "bottom"
      | "top-left"
      | "top-right"
      | "bottom-left"
      | "bottom-right"
      | "relative";
    /**
     * Defines the [anchor](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#anchor) relative to the center of the icon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#anchorPosition)
     */
    anchorPosition?: IconSymbol3DLayerAnchorPosition;
    /**
     * The material used to shade the icon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#material)
     */
    material?: IconSymbol3DLayerMaterialProperties;
    /**
     * The outline of the icon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#outline)
     */
    outline?: IconSymbol3DLayerOutlineProperties;
    /**
     * The shape (`primitive`) or image URL (`href`) used to visualize the features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#resource)
     */
    resource?: IconSymbol3DLayerResource;
    /**
     * The size of the icon in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#size)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#material)
     */
    color?: Color | number[] | string;
  }

  export interface IconSymbol3DLayerMaterial extends AnonymousAccessor {
    /**
     * The fill color of the icon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#material)
     */
    color?: Color;
  }

  export interface IconSymbol3DLayerOutlineProperties extends Object {
    /**
     * The color of the outline.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#outline)
     */
    color?: Color | number[] | string;
    /**
     * The width of the outline in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#outline)
     */
    size?: number | string;
  }

  export interface IconSymbol3DLayerOutline extends AnonymousAccessor {
    /**
     * The color of the outline.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#outline)
     */
    color?: Color;
    /**
     * The width of the outline in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html#outline)
     */
    size?: number;
  }

  export interface IconSymbol3DLayerResource extends Object {
    /**
     * Uses a built-in shape.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#callout)
     */
    callout: Callout3D;
    /**
     * A Collection of [Symbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3DLayer.html) objects used to visualize the graphic or feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#symbolLayers)
     */
    symbolLayers: Collection<TextSymbol3DLayer>;
    /**
     * The symbol type.
     *
     * [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.
     *
     * [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 {
    /**
     * LabelSymbol3D is used to render labels for features from a [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) in a 3D [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#callout)
     */
    callout?: Callout3DProperties;
    /**
     * A Collection of [Symbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3DLayer.html) objects used to visualize the graphic or feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#symbolLayers)
     */
    symbolLayers?: CollectionProperties<TextSymbol3DLayerProperties>;
    /**
     * Shifts the symbol along the vertical world axis by a given height.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LabelSymbol3D.html#verticalOffset)
     */
    maxWorldLength?: number;
  }

  interface LineSymbol extends Symbol {
    /**
     * The symbol type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol.html#type)
     */
    type: "simple-line";
    /**
     * The width of the symbol in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol.html#width)
     */
    width: number;
  }

  interface LineSymbolConstructor {
    /**
     * Line symbols are used to draw [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) features in a [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) in a 2D [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol.html)
     */

    new (properties?: LineSymbolProperties): LineSymbol;

    fromJSON(json: any): LineSymbol;
  }

  export const LineSymbol: LineSymbolConstructor;

  interface LineSymbolProperties extends SymbolProperties {
    /**
     * The symbol type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol.html#type)
     */
    type?: "simple-line";
    /**
     * The width of the symbol in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol.html#width)
     */
    width?: number | string;
  }

  interface LineSymbol3D extends Symbol3D {
    /**
     * A Collection of [Symbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3DLayer.html) objects used to visualize the graphic or feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3D.html#symbolLayers)
     */
    symbolLayers: Collection<LineSymbol3DLayer | PathSymbol3DLayer>;
    /**
     * The symbol type.
     *
     * [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 {
    /**
     * LineSymbol3D is used to render features with [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) geometry in a 3D [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3D.html)
     */

    new (properties?: LineSymbol3DProperties): LineSymbol3D;

    fromJSON(json: any): LineSymbol3D;
  }

  export const LineSymbol3D: LineSymbol3DConstructor;

  interface LineSymbol3DProperties extends Symbol3DProperties {
    /**
     * A Collection of [Symbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3DLayer.html) objects used to visualize the graphic or feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3D.html#symbolLayers)
     */
    symbolLayers?: CollectionProperties<
      (LineSymbol3DLayerProperties & { type: "line" }) | (PathSymbol3DLayerProperties & { type: "path" })
    >;
  }

  interface LineSymbol3DLayer extends Symbol3DLayer {
    /**
     * The style used to draw the endpoint of a line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#cap)
     */
    cap: "butt" | "round" | "square";
    /**
     * The style used to draw the intersection of two line segments within a line geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#join)
     */
    join: "miter" | "round" | "bevel";
    /**
     * The material used to shade the line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#material)
     */
    material: LineSymbol3DLayerMaterial;
    /**
     * The width of the line in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#size)
     */
    size: number;
    /**
     * The symbol type.
     *
     * [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 {
    /**
     * LineSymbol3DLayer renders [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) geometries using a flat 2D line with a [LineSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3D.html) in a 3D [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#cap)
     */
    cap?: "butt" | "round" | "square";
    /**
     * The style used to draw the intersection of two line segments within a line geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#join)
     */
    join?: "miter" | "round" | "bevel";
    /**
     * The material used to shade the line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#material)
     */
    material?: LineSymbol3DLayerMaterialProperties;
    /**
     * The width of the line in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#size)
     */
    size?: number | string;
  }

  export interface LineSymbol3DLayerMaterialProperties extends Object {
    /**
     * The color of the line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#material)
     */
    color?: Color | number[] | string;
  }

  export interface LineSymbol3DLayerMaterial extends AnonymousAccessor {
    /**
     * The color of the line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html#material)
     */
    color?: Color;
  }

  interface LineSymbolMarker extends Accessor {
    /**
     * The color of the marker.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbolMarker.html#color)
     */
    color: Color;
    /**
     * The placement of the marker(s) on the line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbolMarker.html#placement)
     */
    placement: "begin" | "end" | "begin-end";
    /**
     * The marker style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbolMarker.html#style)
     */
    style: "arrow" | "circle" | "square" | "diamond" | "cross" | "x";
    /**
     * The symbol type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbolMarker.html#type)
     */
    readonly type: "line-marker";
  }

  interface LineSymbolMarkerConstructor {
    /**
     * LineSymbolMarker is used for rendering a simple marker graphic on a [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbolMarker.html)
     */

    new (properties?: LineSymbolMarkerProperties): LineSymbolMarker;
  }

  export const LineSymbolMarker: LineSymbolMarkerConstructor;

  interface LineSymbolMarkerProperties {
    /**
     * The color of the marker.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbolMarker.html#color)
     */
    color?: Color | number[] | string;
    /**
     * The placement of the marker(s) on the line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbolMarker.html#placement)
     */
    placement?: "begin" | "end" | "begin-end";
    /**
     * The marker style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbolMarker.html#style)
     */
    style?: "arrow" | "circle" | "square" | "diamond" | "cross" | "x";
  }

  interface MarkerSymbol extends Symbol {
    /**
     * The angle of the marker relative to the screen in degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MarkerSymbol.html#angle)
     */
    angle: number;
    /**
     * The symbol type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MarkerSymbol.html#type)
     */
    type: "simple-marker" | "picture-marker";
    /**
     * The offset on the x-axis in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MarkerSymbol.html#xoffset)
     */
    xoffset: number;
    /**
     * The offset on the y-axis in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MarkerSymbol.html#yoffset)
     */
    yoffset: number;
  }

  interface MarkerSymbolConstructor {
    /**
     * Marker symbols are used to draw [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) graphics in a [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) or individual [graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) in a 2D [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MarkerSymbol.html)
     */

    new (properties?: MarkerSymbolProperties): MarkerSymbol;

    fromJSON(json: any): MarkerSymbol;
  }

  export const MarkerSymbol: MarkerSymbolConstructor;

  interface MarkerSymbolProperties extends SymbolProperties {
    /**
     * The angle of the marker relative to the screen in degrees.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MarkerSymbol.html#angle)
     */
    angle?: number;
    /**
     * The symbol type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MarkerSymbol.html#type)
     */
    type?: "simple-marker" | "picture-marker";
    /**
     * The offset on the x-axis in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MarkerSymbol.html#xoffset)
     */
    xoffset?: number | string;
    /**
     * The offset on the y-axis in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MarkerSymbol.html#yoffset)
     */
    yoffset?: number | string;
  }

  interface MeshSymbol3D extends Symbol3D {
    /**
     * A Collection of [Symbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3DLayer.html) objects used to visualize the graphic or feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MeshSymbol3D.html#symbolLayers)
     */
    symbolLayers: Collection<FillSymbol3DLayer>;
    /**
     * The symbol type.
     *
     * [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 {
    /**
     * MeshSymbol3D is used to render 3D mesh features in a [SceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html) in a 3D [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MeshSymbol3D.html)
     */

    new (properties?: MeshSymbol3DProperties): MeshSymbol3D;

    fromJSON(json: any): MeshSymbol3D;
  }

  export const MeshSymbol3D: MeshSymbol3DConstructor;

  interface MeshSymbol3DProperties extends Symbol3DProperties {
    /**
     * A Collection of [Symbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3DLayer.html) objects used to visualize the graphic or feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-MeshSymbol3D.html#symbolLayers)
     */
    symbolLayers?: CollectionProperties<FillSymbol3DLayerProperties>;
  }

  interface ObjectSymbol3DLayer extends Symbol3DLayer {
    /**
     * The positioning of the symbol relative to the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#anchor)
     */
    anchor: "center" | "top" | "bottom" | "origin" | "relative";
    /**
     * 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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#castShadows)
     */
    castShadows: boolean;
    /**
     * The depth, or diameter from north to south, of the object in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#depth)
     */
    depth: number;
    /**
     * The clockwise rotation of the symbol in the horizontal plane (i.e., around the z axis).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#heading)
     */
    heading: number;
    /**
     * The height of the object in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#height)
     */
    height: number;
    /**
     * The material used to shade the object.
     *
     * [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 the points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#resource)
     */
    resource: ObjectSymbol3DLayerResource;
    /**
     * 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-symbols-ObjectSymbol3DLayer.html#roll)
     */
    roll: number;
    /**
     * The rotation of the symbol in the longitudinal vertical plane (i.e., around the x axis).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#tilt)
     */
    tilt: number;
    /**
     * The object type.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#width)
     */
    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 {
    /**
     * ObjectSymbol3DLayer is used to render [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometries using a volumetric 3D shape (e.g., a sphere or cylinder) with a [PointSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html) in 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-symbols-ObjectSymbol3DLayer.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#anchor)
     */
    anchor?: "center" | "top" | "bottom" | "origin" | "relative";
    /**
     * 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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#castShadows)
     */
    castShadows?: boolean;
    /**
     * The depth, or diameter from north to south, of the object in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#depth)
     */
    depth?: number;
    /**
     * The clockwise rotation of the symbol in the horizontal plane (i.e., around the z axis).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#heading)
     */
    heading?: number;
    /**
     * The height of the object in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#height)
     */
    height?: number;
    /**
     * The material used to shade the object.
     *
     * [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 the points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#resource)
     */
    resource?: ObjectSymbol3DLayerResource;
    /**
     * 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-symbols-ObjectSymbol3DLayer.html#roll)
     */
    roll?: number;
    /**
     * The rotation of the symbol in the longitudinal vertical plane (i.e., around the x axis).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#width)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#material)
     */
    color?: Color | number[] | string;
  }

  export interface ObjectSymbol3DLayerMaterial extends AnonymousAccessor {
    /**
     * The fill color of the object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ObjectSymbol3DLayer.html#material)
     */
    color?: Color;
  }

  export interface ObjectSymbol3DLayerResource extends Object {
    /**
     * Uses a built-in shape.
     *
     * [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](https://www.khronos.org/gltf/).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#anchor)
     */
    anchor: "center" | "bottom" | "top";
    /**
     * Controls the shape at the start and end point of the path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#cap)
     */
    cap: "none" | "butt" | "square" | "round";
    /**
     * Indicates whether the symbol layer geometry casts shadows in the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#castShadows)
     */
    castShadows: boolean;
    /**
     * The vertical dimension of the cross-section of the path in meters.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#join)
     */
    join: "miter" | "bevel" | "round";
    /**
     * The material used to shade the path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#material)
     */
    material: PathSymbol3DLayerMaterial;
    /**
     * Cross-section profile of the path geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#profile)
     */
    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 along the [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#profileRotation)
     */
    profileRotation: "heading" | "all";
    /**
     * Sets the width and height of the path in meters.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#size)
     */
    size: number;
    /**
     * The symbol type.
     *
     * [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.
     *
     * [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 {
    /**
     * PathSymbol3DLayer renders [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) geometries by extruding a 2D profile along the line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#anchor)
     */
    anchor?: "center" | "bottom" | "top";
    /**
     * Controls the shape at the start and end point of the path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#cap)
     */
    cap?: "none" | "butt" | "square" | "round";
    /**
     * Indicates whether the symbol layer geometry casts shadows in the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#castShadows)
     */
    castShadows?: boolean;
    /**
     * The vertical dimension of the cross-section of the path in meters.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#join)
     */
    join?: "miter" | "bevel" | "round";
    /**
     * The material used to shade the path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#material)
     */
    material?: PathSymbol3DLayerMaterialProperties;
    /**
     * Cross-section profile of the path geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#profile)
     */
    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 along the [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#profileRotation)
     */
    profileRotation?: "heading" | "all";
    /**
     * Sets the width and height of the path in meters.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#material)
     */
    color?: Color | number[] | string;
  }

  export interface PathSymbol3DLayerMaterial extends AnonymousAccessor {
    /**
     * The color of the path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#material)
     */
    color?: Color;
  }

  interface StylePattern3D extends Accessor, JSONSupport {
    /**
     * The fill style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-patterns-StylePattern3D.html#style)
     */
    style:
      | "backward-diagonal"
      | "cross"
      | "diagonal-cross"
      | "forward-diagonal"
      | "horizontal"
      | "none"
      | "solid"
      | "vertical";
    /**
     * The pattern type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-patterns-StylePattern3D.html#type)
     */
    type: "style";

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

  interface StylePattern3DConstructor {
    /**
     * Renders polygons with predefined style pattern fills.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-patterns-StylePattern3D.html)
     */

    new (properties?: StylePattern3DProperties): StylePattern3D;

    fromJSON(json: any): StylePattern3D;
  }

  export const StylePattern3D: StylePattern3DConstructor;

  interface StylePattern3DProperties {
    /**
     * The fill style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-patterns-StylePattern3D.html#style)
     */
    style?:
      | "backward-diagonal"
      | "cross"
      | "diagonal-cross"
      | "forward-diagonal"
      | "horizontal"
      | "none"
      | "solid"
      | "vertical";
    /**
     * The pattern type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-patterns-StylePattern3D.html#type)
     */
    type?: "style";
  }

  interface PictureFillSymbol extends FillSymbol {
    /**
     * The height of the image in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#height)
     */
    height: number;
    /**
     * The symbol type.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#width)
     */
    width: number;
    /**
     * The offset on the x-axis in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#xoffset)
     */
    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)
     */
    xscale: number;
    /**
     * The offset on the y-axis in pixels or points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#yoffset)
     */
    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)
     */
    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 {
    /**
     * PictureFillSymbol uses an image in a repeating pattern to symbolize polygon features in a 2D [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html)
     */

    new (properties?: PictureFillSymbolProperties): PictureFillSymbol;

    fromJSON(json: any): PictureFillSymbol;
  }

  export const PictureFillSymbol: PictureFillSymbolConstructor;

  interface PictureFillSymbolProperties extends FillSymbolProperties {
    /**
     * The height of the image in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#height)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#width)
     */
    width?: number | string;
    /**
     * The offset on the x-axis in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#xoffset)
     */
    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)
     */
    xscale?: number;
    /**
     * The offset on the y-axis in pixels or points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureFillSymbol.html#yoffset)
     */
    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)
     */
    yscale?: number;
  }

  interface PictureMarkerSymbol extends MarkerSymbol {
    /**
     * The height of the image in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureMarkerSymbol.html#height)
     */
    height: number;
    /**
     * The symbol type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureMarkerSymbol.html#type)
     */
    readonly type: "picture-marker";
    /**
     * The URL to an image or SVG document.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureMarkerSymbol.html#url)
     */
    url: string;
    /**
     * The width of the image in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureMarkerSymbol.html#width)
     */
    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 {
    /**
     * PictureMarkerSymbol renders [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) graphics in either a 2D [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or 3D [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) using an image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureMarkerSymbol.html)
     */

    new (properties?: PictureMarkerSymbolProperties): PictureMarkerSymbol;

    fromJSON(json: any): PictureMarkerSymbol;
  }

  export const PictureMarkerSymbol: PictureMarkerSymbolConstructor;

  interface PictureMarkerSymbolProperties extends MarkerSymbolProperties {
    /**
     * The height of the image in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureMarkerSymbol.html#height)
     */
    height?: number | string;
    /**
     * The URL to an image or SVG document.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureMarkerSymbol.html#url)
     */
    url?: string;
    /**
     * The width of the image in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PictureMarkerSymbol.html#width)
     */
    width?: number | string;
  }

  interface PointSymbol3D extends Symbol3D {
    /**
     * Settings for adding a callout visualization to the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#callout)
     */
    callout: LineCallout3D;
    /**
     * A Collection of [Symbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3DLayer.html) objects used to visualize the graphic or feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#symbolLayers)
     */
    symbolLayers: Collection<IconSymbol3DLayer | ObjectSymbol3DLayer | TextSymbol3DLayer>;
    /**
     * The symbol type.
     *
     * [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.
     *
     * [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 {
    /**
     * PointSymbol3D is used to render features with [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometry in a 3D [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#callout)
     */
    callout?: LineCallout3DProperties;
    /**
     * A Collection of [Symbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3DLayer.html) objects used to visualize the graphic or feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#symbolLayers)
     */
    symbolLayers?: CollectionProperties<
      | (IconSymbol3DLayerProperties & { type: "icon" })
      | (ObjectSymbol3DLayerProperties & { type: "object" })
      | (TextSymbol3DLayerProperties & { type: "text" })
    >;
    /**
     * Shifts the symbol along the vertical world axis by a given height.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html#verticalOffset)
     */
    maxWorldLength?: number;
  }

  interface PolygonSymbol3D extends Symbol3D {
    /**
     * A Collection of [Symbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3DLayer.html) objects used to visualize the graphic or feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PolygonSymbol3D.html#symbolLayers)
     */
    symbolLayers: Collection<
      | ExtrudeSymbol3DLayer
      | FillSymbol3DLayer
      | IconSymbol3DLayer
      | LineSymbol3DLayer
      | ObjectSymbol3DLayer
      | WaterSymbol3DLayer
    >;
    /**
     * The symbol type.
     *
     * [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 {
    /**
     * PolygonSymbol3D is used to render features with [Polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) geometry in a 3D [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PolygonSymbol3D.html)
     */

    new (properties?: PolygonSymbol3DProperties): PolygonSymbol3D;

    fromJSON(json: any): PolygonSymbol3D;
  }

  export const PolygonSymbol3D: PolygonSymbol3DConstructor;

  interface PolygonSymbol3DProperties extends Symbol3DProperties {
    /**
     * A Collection of [Symbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3DLayer.html) objects used to visualize the graphic or feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PolygonSymbol3D.html#symbolLayers)
     */
    symbolLayers?: CollectionProperties<
      | (ExtrudeSymbol3DLayerProperties & { type: "extrude" })
      | (FillSymbol3DLayerProperties & { type: "fill" })
      | (IconSymbol3DLayerProperties & { type: "icon" })
      | (LineSymbol3DLayerProperties & { type: "line" })
      | (ObjectSymbol3DLayerProperties & { type: "object" })
      | (WaterSymbol3DLayerProperties & { type: "water" })
    >;
  }

  interface SimpleFillSymbol extends FillSymbol {
    /**
     * The fill style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html#style)
     */
    style:
      | "backward-diagonal"
      | "cross"
      | "diagonal-cross"
      | "forward-diagonal"
      | "horizontal"
      | "none"
      | "solid"
      | "vertical";
    /**
     * The symbol type.
     *
     * [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 {
    /**
     * SimpleFillSymbol is used for rendering 2D polygons in either a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or 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-symbols-SimpleFillSymbol.html)
     */

    new (properties?: SimpleFillSymbolProperties): SimpleFillSymbol;

    fromJSON(json: any): SimpleFillSymbol;
  }

  export const SimpleFillSymbol: SimpleFillSymbolConstructor;

  interface SimpleFillSymbolProperties extends FillSymbolProperties {
    /**
     * The fill style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html#style)
     */
    style?:
      | "backward-diagonal"
      | "cross"
      | "diagonal-cross"
      | "forward-diagonal"
      | "horizontal"
      | "none"
      | "solid"
      | "vertical";
  }

  interface SimpleLineSymbol extends LineSymbol {
    /**
     * Specifies the cap style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html#cap)
     */
    cap: "butt" | "round" | "square";
    /**
     * Specifies the join style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html#join)
     */
    join: "miter" | "round" | "bevel";
    /**
     * Specifies the color, style, and placement of a symbol marker on the line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html#marker)
     */
    marker: LineSymbolMarker;
    /**
     * Maximum allowed ratio of the width of a miter join to the line width.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html#miterLimit)
     */
    miterLimit: number;
    /**
     * Specifies the line style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html#style)
     */
    style:
      | "dash"
      | "dash-dot"
      | "dot"
      | "long-dash"
      | "long-dash-dot"
      | "long-dash-dot-dot"
      | "none"
      | "short-dash"
      | "short-dash-dot"
      | "short-dash-dot-dot"
      | "short-dot"
      | "solid";

    /**
     * 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 {
    /**
     * SimpleLineSymbol is used for rendering 2D [polyline geometries](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) in a 2D [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html)
     */

    new (properties?: SimpleLineSymbolProperties): SimpleLineSymbol;

    fromJSON(json: any): SimpleLineSymbol;
  }

  export const SimpleLineSymbol: SimpleLineSymbolConstructor;

  interface SimpleLineSymbolProperties extends LineSymbolProperties {
    /**
     * Specifies the cap style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html#cap)
     */
    cap?: "butt" | "round" | "square";
    /**
     * Specifies the join style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html#join)
     */
    join?: "miter" | "round" | "bevel";
    /**
     * Specifies the color, style, and placement of a symbol marker on the line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html#marker)
     */
    marker?: LineSymbolMarkerProperties;
    /**
     * Maximum allowed ratio of the width of a miter join to the line width.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html#miterLimit)
     */
    miterLimit?: number;
    /**
     * Specifies the line style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html#style)
     */
    style?:
      | "dash"
      | "dash-dot"
      | "dot"
      | "long-dash"
      | "long-dash-dot"
      | "long-dash-dot-dot"
      | "none"
      | "short-dash"
      | "short-dash-dot"
      | "short-dash-dot-dot"
      | "short-dot"
      | "solid";
  }

  interface SimpleMarkerSymbol extends MarkerSymbol {
    /**
     * The outline of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#outline)
     */
    outline: SimpleLineSymbol;
    /**
     * The SVG path of the icon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#path)
     */
    path: string;
    /**
     * The size of the marker in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#size)
     */
    size: number;
    /**
     * The marker style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#style)
     */
    style: "circle" | "square" | "cross" | "x" | "diamond" | "triangle" | "path";
    /**
     * The symbol type.
     *
     * [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 {
    /**
     * SimpleMarkerSymbol is used for rendering 2D [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometries with a simple shape and [color](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#color) in either a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or 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-symbols-SimpleMarkerSymbol.html)
     */

    new (properties?: SimpleMarkerSymbolProperties): SimpleMarkerSymbol;

    fromJSON(json: any): SimpleMarkerSymbol;
  }

  export const SimpleMarkerSymbol: SimpleMarkerSymbolConstructor;

  interface SimpleMarkerSymbolProperties extends MarkerSymbolProperties {
    /**
     * The outline of the marker symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#outline)
     */
    outline?: SimpleLineSymbolProperties;
    /**
     * The SVG path of the icon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#path)
     */
    path?: string;
    /**
     * The size of the marker in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#size)
     */
    size?: number | string;
    /**
     * The marker style.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html#style)
     */
    style?: "circle" | "square" | "cross" | "x" | "diamond" | "triangle" | "path";
  }

  /**
   * Provides utility functions for [CIMSymbols](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-CIMSymbol.html).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-cimSymbolUtils.html)
   */
  interface cimSymbolUtils {
    /**
     * Sets the color of the symbol layers of a CIMSymbol to a given value if the symbol layer is not color locked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-cimSymbolUtils.html#applyCIMSymbolColor)
     */
    applyCIMSymbolColor(symbol: CIMSymbol, color: Color): void;
    /**
     * Sets the rotation value of a CIMSymbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-cimSymbolUtils.html#applyCIMSymbolRotation)
     */
    applyCIMSymbolRotation(symbol: CIMSymbol, rotation: number, clockwise?: boolean): void;
    /**
     * Returns the first color of the symbol layers in a CIMSymbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-cimSymbolUtils.html#getCIMSymbolColor)
     */
    getCIMSymbolColor(symbol: CIMSymbol): Color;
    /**
     * Returns the rotation value of a CIMSymbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-cimSymbolUtils.html#getCIMSymbolRotation)
     */
    getCIMSymbolRotation(symbol: CIMSymbol, clockwise?: boolean): number;
    /**
     * Returns the size of a given CIMSymbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-cimSymbolUtils.html#getCIMSymbolSize)
     */
    getCIMSymbolSize(symbol: CIMSymbol): number;
    /**
     * Scales the largest layer of a CIMSymbol to a given size.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-cimSymbolUtils.html#scaleCIMSymbolTo)
     */
    scaleCIMSymbolTo(symbol: CIMSymbol, size: number, scaleOptions?: cimSymbolUtilsScaleCIMSymbolToScaleOptions): void;
  }

  export const cimSymbolUtils: cimSymbolUtils;

  export interface cimSymbolUtilsScaleCIMSymbolToScaleOptions extends Object {
    /**
     * When `true`, this property will preserve the outline width of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-cimSymbolUtils.html#scaleCIMSymbolTo)
     */
    preserveOutlineWidth?: boolean;
  }

  /**
   * Provides a utility method used to deserialize a JSON symbol object returned by the REST API.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-jsonUtils.html)
   */
  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 object generated from an ArcGIS product.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-jsonUtils.html#fromJSON)
     */
    fromJSON(json: any): Symbol;
  }

  export const symbolsSupportJsonUtils: symbolsSupportJsonUtils;

  /**
   * Generates small preview images of symbols.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolPreview.html)
   */
  interface symbolPreview {
    /**
     * Generates a preview image of a given symbol that can be displayed in a custom widget or other DOM element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolPreview.html#renderPreviewHTML)
     */
    renderPreviewHTML(symbol: Symbol, options?: symbolPreviewRenderPreviewHTMLOptions): Promise<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;
  }

  /**
   * Generates small preview images of symbols.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html)
   */
  interface symbolUtils {
    /**
     * Returns a color representing the input [graphic's](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#getDisplayedColor)
     */
    getDisplayedColor(graphic: Graphic, options?: symbolUtilsGetDisplayedColorOptions): Promise<Color>;
    /**
     * Returns a symbol representing the input [Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#getDisplayedSymbol)
     */
    getDisplayedSymbol(graphic: Graphic, options?: symbolUtilsGetDisplayedSymbolOptions): Promise<Symbol>;
    /**
     * Generates a preview image of a color ramp to display in a custom widget or other DOM element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#renderColorRampPreviewHTML)
     */
    renderColorRampPreviewHTML(colors: Color[], options?: symbolUtilsRenderColorRampPreviewHTMLOptions): HTMLElement;
    /**
     * Generates a preview image of a given symbol that can be displayed in a custom widget or other DOM element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#renderPreviewHTML)
     */
    renderPreviewHTML(symbol: Symbol, options?: symbolUtilsRenderPreviewHTMLOptions): Promise<HTMLElement>;
  }

  export const symbolUtils: symbolUtils;

  export interface symbolUtilsGetDisplayedColorOptions extends Object {
    /**
     * The [view scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#scale) at which the graphic is displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#getDisplayedColor)
     */
    scale?: number;
    /**
     * The [viewingMode](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewingMode) of the view, if the graphic is displayed in a SceneView.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#getDisplayedColor)
     */
    viewingMode?: string;
    /**
     * The spatial reference of the view in which the graphic is displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#getDisplayedColor)
     */
    spatialReference?: SpatialReference;
    /**
     * The renderer of the layer associated with the `graphic`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#getDisplayedColor)
     */
    renderer?: Renderer;
    /**
     * The [resolution](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#resolution) of the view at which the graphic is displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#getDisplayedColor)
     */
    resolution?: number;
  }

  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 renderer of the layer associated with the `graphic`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#getDisplayedSymbol)
     */
    renderer?: Renderer;
    /**
     * 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 symbolUtilsRenderColorRampPreviewHTMLOptions extends Object {
    /**
     * Specifies the alignment of the color ramp.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#renderColorRampPreviewHTML)
     */
    align?: "horizontal" | "vertical";
    /**
     * Indicates whether to render the color ramp with a continuous gradient.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#renderColorRampPreviewHTML)
     */
    gradient?: boolean;
    /**
     * The width of the ramp in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#renderColorRampPreviewHTML)
     */
    width?: number;
    /**
     * The height of the ramp in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#renderColorRampPreviewHTML)
     */
    height?: 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;
    /**
     * When `true` the size of the symbol preview will include the outline in the measurement of the entire symbol.
     *
     * [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;
    /**
     * Options for setting the shape of a fill symbol preview.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#renderPreviewHTML)
     */
    symbolConfig?: string | symbolUtilsRenderPreviewHTMLOptionsSymbolConfig;
    /**
     * The rotation of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#renderPreviewHTML)
     */
    rotation?: string;
  }

  export interface symbolUtilsRenderPreviewHTMLOptionsSymbolConfig extends Object {
    /**
     * Set to `true` for "tall" symbols in portrait view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#renderPreviewHTML)
     */
    isTall?: boolean;
    /**
     * Set to `true` to render the preview as a square instead of a generic polygon shape.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-symbolUtils.html#renderPreviewHTML)
     */
    isSquareFill?: boolean;
  }

  interface Symbol extends Accessor, JSONSupport {
    /**
     * The color of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol.html#color)
     */
    color: Color;
    /**
     * The symbol type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol.html#type)
     */
    readonly type:
      | "simple-marker"
      | "picture-marker"
      | "simple-line"
      | "simple-fill"
      | "picture-fill"
      | "text"
      | "shield-label-symbol"
      | "point-3d"
      | "line-3d"
      | "polygon-3d"
      | "web-style"
      | "mesh-3d"
      | "label-3d"
      | "cim";
  }

  interface SymbolConstructor {
    /**
     * Symbol is the base class for all symbols.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol.html)
     */

    new (properties?: SymbolProperties): Symbol;

    fromJSON(json: any): Symbol;
  }

  export const Symbol: SymbolConstructor;

  interface SymbolProperties {
    /**
     * The color of the symbol.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol.html#color)
     */
    color?: Color | number[] | string;
  }

  interface Symbol3D extends Symbol {
    /**
     * The origin of the style from which the symbol was originally referenced.
     *
     * [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) objects used to visualize the graphic or feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3D.html#symbolLayers)
     */
    symbolLayers: Collection<Symbol3DLayer>;
    /**
     * The symbol type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3D.html#type)
     */
    readonly type: "point-3d" | "line-3d" | "polygon-3d" | "mesh-3d" | "label-3d";
  }

  interface Symbol3DConstructor {
    /**
     * Symbol3D is the base class for all 3D symbols.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3D.html)
     */

    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.
     *
     * [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) objects used to visualize the graphic or feature.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3DLayer.html#type)
     */
    readonly type: "icon" | "object" | "line" | "path" | "fill" | "water" | "extrude" | "text";
  }

  interface Symbol3DLayerConstructor {
    /**
     * Symbol layers are used to define the visualization of [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), and mesh geometries rendered with [3D symbols](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3D.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3DLayer.html)
     */

    new (properties?: Symbol3DLayerProperties): Symbol3DLayer;

    fromJSON(json: any): Symbol3DLayer;
  }

  export const Symbol3DLayer: Symbol3DLayerConstructor;

  interface Symbol3DLayerProperties {}

  interface TextSymbol extends Symbol {
    /**
     * The angle of the text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#angle)
     */
    angle: number;
    /**
     * The background color of the label's bounding box.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#borderLineSize)
     */
    borderLineSize: number;
    /**
     * The [Font](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html) used to style the text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#font)
     */
    font: Font;
    /**
     * The color of the text symbol's halo.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#haloColor)
     */
    haloColor: Color;
    /**
     * The size in points of the text symbol's halo.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#haloSize)
     */
    haloSize: number;
    /**
     * Adjusts the horizontal alignment of the text in multi-lines.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#horizontalAlignment)
     */
    horizontalAlignment: "left" | "right" | "center" | "justify";
    /**
     * 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)
     */
    kerning: boolean;
    /**
     * The height of the space between each line of text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#lineHeight)
     */
    lineHeight: number;
    /**
     * The maximum length in points for each line of text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#lineWidth)
     */
    lineWidth: number;
    /**
     * Determines whether every character in the text string is rotated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#rotated)
     */
    rotated: boolean;
    /**
     * The text string to display in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#text)
     */
    text: string;

    readonly type: "text";
    /**
     * Adjusts the vertical alignment of the text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#verticalAlignment)
     */
    verticalAlignment: "baseline" | "top" | "middle" | "bottom";
    /**
     * The offset on the x-axis in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#xoffset)
     */
    xoffset: number;
    /**
     * The offset on the y-axis in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#yoffset)
     */
    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 {
    /**
     * Text symbols are used to define the graphic for displaying labels on a [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), [Sublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Sublayer.html), and [StreamLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html) in a 2D [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html)
     */

    new (properties?: TextSymbolProperties): TextSymbol;

    fromJSON(json: any): TextSymbol;
  }

  export const TextSymbol: TextSymbolConstructor;

  interface TextSymbolProperties extends SymbolProperties {
    /**
     * The angle of the text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#angle)
     */
    angle?: number;
    /**
     * The background color of the label's bounding box.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#borderLineSize)
     */
    borderLineSize?: number;
    /**
     * The [Font](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Font.html) used to style the text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#font)
     */
    font?: FontProperties;
    /**
     * The color of the text symbol's halo.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#haloColor)
     */
    haloColor?: Color | number[] | string;
    /**
     * The size in points of the text symbol's halo.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#haloSize)
     */
    haloSize?: number | string;
    /**
     * Adjusts the horizontal alignment of the text in multi-lines.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#horizontalAlignment)
     */
    horizontalAlignment?: "left" | "right" | "center" | "justify";
    /**
     * 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)
     */
    kerning?: boolean;
    /**
     * The height of the space between each line of text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#lineHeight)
     */
    lineHeight?: number;
    /**
     * The maximum length in points for each line of text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#lineWidth)
     */
    lineWidth?: number | string;
    /**
     * Determines whether every character in the text string is rotated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#rotated)
     */
    rotated?: boolean;
    /**
     * The text string to display in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#text)
     */
    text?: string;
    /**
     * Adjusts the vertical alignment of the text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#verticalAlignment)
     */
    verticalAlignment?: "baseline" | "top" | "middle" | "bottom";
    /**
     * The offset on the x-axis in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#xoffset)
     */
    xoffset?: number | string;
    /**
     * The offset on the y-axis in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol.html#yoffset)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#size)
     */
    size: number;
    /**
     * The text to be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#text)
     */
    text: string;
    /**
     * The symbol type.
     *
     * [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 {
    /**
     * TextSymbol3DLayer is used to draw text labels for features of any geometry type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#size)
     */
    size?: number | string;
    /**
     * The text to be displayed.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#halo)
     */
    color?: Color | number[] | string;
    /**
     * The size of the halo in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#halo)
     */
    size?: number | string;
  }

  export interface TextSymbol3DLayerHalo extends AnonymousAccessor {
    /**
     * The color of the halo.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#halo)
     */
    color?: Color;
    /**
     * The size of the halo in points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#halo)
     */
    size?: number;
  }

  export interface TextSymbol3DLayerMaterialProperties extends Object {
    /**
     * The color of the text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#material)
     */
    color?: Color | number[] | string;
  }

  export interface TextSymbol3DLayerMaterial extends AnonymousAccessor {
    /**
     * The color of the text.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html#material)
     */
    color?: Color;
  }

  interface WaterSymbol3DLayer extends Symbol3DLayer {
    /**
     * The dominant color used to shade the water.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html#color)
     */
    color: Color;
    /**
     * The symbol type.
     *
     * [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 the symbol layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html#waterbodySize)
     */
    waterbodySize: "small" | "medium" | "large";
    /**
     * Indicates the direction in which the waves travel.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html#waveDirection)
     */
    waveDirection: number;
    /**
     * Indicates the shape and intensity of the waves.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html#waveStrength)
     */
    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 {
    /**
     * WaterSymbol3DLayer is used to render [Polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) geometries as realistic, animated water surfaces, therefore it can only be used inside a [PolygonSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PolygonSymbol3D.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html)
     */

    new (properties?: WaterSymbol3DLayerProperties): WaterSymbol3DLayer;

    fromJSON(json: any): WaterSymbol3DLayer;
  }

  export const WaterSymbol3DLayer: WaterSymbol3DLayerConstructor;

  interface WaterSymbol3DLayerProperties extends Symbol3DLayerProperties {
    /**
     * The dominant color used to shade the water.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html#color)
     */
    color?: Color | number[] | string;
    /**
     * Indicates the size of the waterbody which is represented by the symbol layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html#waterbodySize)
     */
    waterbodySize?: "small" | "medium" | "large";
    /**
     * Indicates the direction in which the waves travel.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html#waveDirection)
     */
    waveDirection?: number;
    /**
     * Indicates the shape and intensity of the waves.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html#waveStrength)
     */
    waveStrength?: "calm" | "rippled" | "slight" | "moderate";
  }

  interface WebStyleSymbol extends Symbol {
    /**
     * The name of the symbol within the web style.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#portal)
     */
    portal: Portal;
    /**
     * A registered web style name.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#styleUrl)
     */
    styleUrl: string;

    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;
    /**
     * Returns the [CIMSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-CIMSymbol.html) instance the WebStyleSymbol refers to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#fetchCIMSymbol)
     */
    fetchCIMSymbol(options?: WebStyleSymbolFetchCIMSymbolOptions): Promise<CIMSymbol>;
    /**
     * Downloads and returns the [PointSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html) instance the WebStyleSymbol refers to.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#fetchSymbol)
     */
    fetchSymbol(options?: WebStyleSymbolFetchSymbolOptions): Promise<PointSymbol3D>;
  }

  interface WebStyleSymbolConstructor {
    /**
     * WebStyleSymbol is a class used to conveniently create vector 2D symbols and realistic and thematic 3D symbols.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html)
     */

    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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#portal)
     */
    portal?: PortalProperties;
    /**
     * A registered web style name.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#styleUrl)
     */
    styleUrl?: string;
  }

  export interface WebStyleSymbolFetchCIMSymbolOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WebStyleSymbol.html#fetchCIMSymbol)
     */
    signal?: AbortSignal;
  }

  export interface WebStyleSymbolFetchSymbolOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [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 = Symbol2D3D | 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
    | CIMSymbol;

  /**
   * Symbol2D3D types.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols.html#Symbol2D3D)
   */
  export type Symbol2D3D = Symbol2D | symbolsSymbol3D;

  /**
   * 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
    | WaterSymbol3DLayer;

  /**
   * 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)
     */
    solve(params: ClosestFacilityParameters, requestOptions?: any): Promise<ClosestFacilitySolveResult>;
  }

  interface ClosestFacilityTaskConstructor {
    /**
     * Helps you find closest facilities around any location (incident) on a network.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ClosestFacilityTask.html)
     */

    new (properties?: ClosestFacilityTaskProperties): ClosestFacilityTask;
  }

  export const ClosestFacilityTask: ClosestFacilityTaskConstructor;

  interface ClosestFacilityTaskProperties extends TaskProperties {}

  interface FindTask extends Task {
    /**
     * Specify the geodatabase version to search.
     *
     * [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)
     */
    execute(params: FindParameters, requestOptions?: any): Promise<any>;
  }

  interface FindTaskConstructor {
    /**
     * Search a map service exposed by the ArcGIS Server REST API based on a string value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-FindTask.html)
     */

    new (properties?: FindTaskProperties): FindTask;
  }

  export const FindTask: FindTaskConstructor;

  interface FindTaskProperties extends TaskProperties {
    /**
     * Specify the geodatabase version to search.
     *
     * [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)
     */
    areasAndLengths(areasAndLengthsParameters: AreasAndLengthsParameters, requestOptions?: any): Promise<any>;
    /**
     * The Auto Complete operation is performed on a geometry service resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#autoComplete)
     */
    autoComplete(polygons: Polygon[], polylines: Polyline[], requestOptions?: any): Promise<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)
     */
    buffer(bufferParameters: BufferParameters, requestOptions?: any): Promise<Polygon[]>;
    /**
     * The convexHull operation is performed on a geometry service resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#convexHull)
     */
    convexHull(geometries: Geometry[], requestOptions?: any): Promise<Geometry>;
    /**
     * The cut operation is performed on a geometry service resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#cut)
     */
    cut(geometries: Geometry[], cutter: Polyline, requestOptions?: any): Promise<any>;
    /**
     * The densify operation is performed on a geometry service resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#densify)
     */
    densify(densifyParameters: DensifyParameters, requestOptions?: any): Promise<Geometry[]>;
    /**
     * The difference operation is performed on a geometry service resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#difference)
     */
    difference(geometries: Geometry[], geometry: Geometry, requestOptions?: any): Promise<Geometry>;
    /**
     * Measures the planar or geodesic distance between geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#distance)
     */
    distance(params: DistanceParameters, requestOptions?: any): Promise<number>;
    /**
     * Converts an array of well-known strings into xy-coordinates based on the conversion type and spatial reference supplied by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#fromGeoCoordinateString)
     */
    fromGeoCoordinateString(params: GeometryServiceFromGeoCoordinateStringParams, requestOptions?: any): Promise<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)
     */
    generalize(params: GeneralizeParameters, requestOptions?: any): Promise<Geometry[]>;
    /**
     * The intersect operation is performed on a geometry service resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#intersect)
     */
    intersect(geometries: Geometry[], intersector: Geometry, requestOptions?: any): Promise<Geometry[]>;
    /**
     * Calculates an interior point for each polygon specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#labelPoints)
     */
    labelPoints(polygons: Polygon[], requestOptions?: any): Promise<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)
     */
    lengths(params: LengthsParameters, requestOptions?: any): Promise<any>;
    /**
     * Constructs the offset of the input geometries based on a planar distance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#offset)
     */
    offset(params: OffsetParameters, requestOptions?: any): Promise<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)
     */
    project(params: ProjectParameters, requestOptions?: any): Promise<Geometry[]>;
    /**
     * Computes the set of pairs of geometries from the input geometry arrays that belong to the specified relation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#relation)
     */
    relation(params: RelationParameters, requestOptions?: any): Promise<Polygon[]>;
    /**
     * The reshape operation is performed on a geometry service resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#reshape)
     */
    reshape(targetGeometry: Geometry, reshaper: Polyline, requestOptions?: any): Promise<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)
     */
    simplify(geometries: Geometry[], requestOptions?: any): Promise<Geometry[]>;
    /**
     * Converts an array of XY-coordinates into well-known strings based on the conversion type and spatial reference supplied by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#toGeoCoordinateString)
     */
    toGeoCoordinateString(params: GeometryServiceToGeoCoordinateStringParams, requestOptions?: any): Promise<string[]>;
    /**
     * Trims or extends the input polylines using the user specified guide polyline.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#trimExtend)
     */
    trimExtend(params: TrimExtendParameters, requestOptions?: any): Promise<Polyline[]>;
    /**
     * The union operation is performed on a geometry service resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#union)
     */
    union(geometries: Geometry[], requestOptions?: any): Promise<Geometry>;
  }

  interface GeometryServiceConstructor {
    /**
     * Represents a geometry service resource exposed by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html)
     */

    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`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#fromGeoCoordinateString)
     */
    strings: string[];
    /**
     * The spatial reference or well-known ID to convert 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#fromGeoCoordinateString)
     */
    conversionType?: "mrgs" | "usng" | "utm" | "geo-ref" | "gars" | "dms" | "ddm" | "dd";
    /**
     * Conversion options for mrgs, utm and gars conversion types.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#toGeoCoordinateString)
     */
    conversionType: "mgrs" | "usng" | "utm" | "geo-ref" | "gars" | "dms" | "ddm" | "dd";
    /**
     * Conversion options for mgrs and utm conversion types.
     *
     * [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.
     *
     * [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 magnitude as specified by `numOfDigits`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html#toGeoCoordinateString)
     */
    rounding?: boolean;
    /**
     * If `true`, then spaces are added between components of the string.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference;
    /**
     * ProcessExtent, if specified, will only process features that overlap this extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#processExtent)
     */
    processExtent: Extent;
    /**
     * The spatial reference that the model will use to perform geometry operations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#processSpatialReference)
     */
    processSpatialReference: SpatialReference;
    /**
     * If `true`, m-values will be included in the results if the features have m-values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#returnM)
     */
    returnM: boolean;
    /**
     * If `true`, z-values will be included in the results if the features have z-values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#returnZ)
     */
    returnZ: boolean;

    /**
     * Cancels an asynchronous geoprocessing job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#cancelJob)
     */
    cancelJob(jobId: string, requestOptions?: any): Promise<JobInfo>;
    /**
     * 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)
     */
    checkJobStatus(jobId: string, requestOptions?: any): Promise<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)
     */
    execute(params: any, requestOptions?: any): Promise<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)
     */
    getResultData(jobId: string, resultName: string, requestOptions?: any): Promise<ParameterValue>;
    /**
     * 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)
     */
    getResultImage(
      jobId: string,
      resultName: string,
      imageParams: ImageParameters,
      requestOptions?: any
    ): Promise<ParameterValue>;
    /**
     * Get the task result identified by `jobId` as an [MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#getResultMapImageLayer)
     */
    getResultMapImageLayer(jobId: string): Promise<MapImageLayer>;
    /**
     * Submits a job to the server for asynchronous processing by the GP task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#submitJob)
     */
    submitJob(params: any, requestOptions?: any): Promise<JobInfo>;
    /**
     * Resolves when an asynchronous job has completed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#waitForJobCompletion)
     */
    waitForJobCompletion(jobId: string, options?: GeoprocessorWaitForJobCompletionOptions): Promise<JobInfo>;
  }

  interface GeoprocessorConstructor {
    /**
     * Represents a GP Task resource exposed by the ArcGIS REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html)
     */

    new (properties?: GeoprocessorProperties): Geoprocessor;
  }

  export const Geoprocessor: GeoprocessorConstructor;

  interface GeoprocessorProperties extends TaskProperties {
    /**
     * The spatial reference of the output geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties;
    /**
     * ProcessExtent, if specified, will only process features that overlap this extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#processExtent)
     */
    processExtent?: ExtentProperties;
    /**
     * The spatial reference that the model will use to perform geometry operations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#processSpatialReference)
     */
    processSpatialReference?: SpatialReferenceProperties;
    /**
     * If `true`, m-values will be included in the results if the features have m-values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#returnM)
     */
    returnM?: boolean;
    /**
     * If `true`, z-values will be included in the results if the features have z-values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#returnZ)
     */
    returnZ?: boolean;
  }

  export interface GeoprocessorWaitForJobCompletionOptions extends Object {
    /**
     * The time in millisecond between remote job status requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#waitForJobCompletion)
     */
    interval?: any;
    /**
     * [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) allows for cancelable asynchronous job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#waitForJobCompletion)
     */
    signal?: any;
    /**
     * Callback function that is called at the specified interval.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Geoprocessor.html#waitForJobCompletion)
     */
    statusCallback?: any;
  }

  interface IdentifyTask extends Task {
    /**
     * Specify the geodatabase version to search.
     *
     * [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)
     */
    execute(params: IdentifyParameters, requestOptions?: any): Promise<any>;
  }

  interface IdentifyTaskConstructor {
    /**
     * Performs an identify operation on the layers of a map service exposed by the ArcGIS Server REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-IdentifyTask.html)
     */

    new (properties?: IdentifyTaskProperties): IdentifyTask;
  }

  export const IdentifyTask: IdentifyTaskConstructor;

  interface IdentifyTaskProperties extends TaskProperties {
    /**
     * Specify the geodatabase version to search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-IdentifyTask.html#gdbVersion)
     */
    gdbVersion?: string;
  }

  interface ImageIdentifyTask extends Task {
    /**
     * Sends a request to the ArcGIS REST image service resource to identify content based on the [ImageIdentifyParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html) specified in the `params` argument.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ImageIdentifyTask.html#execute)
     */
    execute(params: ImageIdentifyParameters, requestOptions?: any): Promise<ImageIdentifyResult>;
  }

  interface ImageIdentifyTaskConstructor {
    /**
     * Performs an identify operation on an image service resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ImageIdentifyTask.html)
     */

    new (properties?: ImageIdentifyTaskProperties): ImageIdentifyTask;
  }

  export const ImageIdentifyTask: ImageIdentifyTaskConstructor;

  interface ImageIdentifyTaskProperties extends TaskProperties {}

  interface ImageServiceIdentifyTask extends Task {}

  interface ImageServiceIdentifyTaskConstructor {
    /**
     * Performs an identify operation on an image service resource.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ImageServiceIdentifyTask.html)
     */

    new (properties?: ImageServiceIdentifyTaskProperties): ImageServiceIdentifyTask;
  }

  export const ImageServiceIdentifyTask: ImageServiceIdentifyTaskConstructor;

  interface ImageServiceIdentifyTaskProperties extends TaskProperties {}

  interface Locator extends Task {
    /**
     * The spatial reference of the output geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference;

    /**
     * Find address candidates for multiple input addresses.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressesToLocations)
     */
    addressesToLocations(params: LocatorAddressesToLocationsParams, requestOptions?: any): Promise<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)
     */
    addressToLocations(params: LocatorAddressToLocationsParams, requestOptions?: any): Promise<AddressCandidate[]>;
    /**
     * Locates an address based on a given point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#locationToAddress)
     */
    locationToAddress(params: LocatorLocationToAddressParams, requestOptions?: any): Promise<AddressCandidate>;
    /**
     * Get character by character auto complete suggestions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#suggestLocations)
     */
    suggestLocations(params: LocatorSuggestLocationsParams, requestOptions?: any): Promise<LocatorSuggestionResult[]>;
  }

  interface LocatorConstructor {
    /**
     * Represents a geocode service resource exposed by the ArcGIS Server REST API.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html)
     */

    new (properties?: LocatorProperties): Locator;
  }

  export const Locator: LocatorConstructor;

  interface LocatorProperties extends TaskProperties {
    /**
     * The spatial reference of the output geometries.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressesToLocations)
     */
    countryCode?: string;
    /**
     * Limit result to one or more categories.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressToLocations)
     */
    address: any;
    /**
     * Limit result to one or more categories.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html#addressToLocations)
     */
    categories?: string[];
    /**
     * Limit result to a specific country.
     *
     * [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).
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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;
  }

  /**
   * 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 LocatorSuggestionResult 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-PrintTask.html#mode)
     */
    readonly mode: "async" | "sync";
    /**
     * 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)
     */
    updateDelay: number;

    /**
     * Sends a request to the print service to create a printable static image of the map using the options specified in the [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)
     */
    execute(params: PrintParameters, requestOptions?: any): Promise<PrintResponse>;
  }

  interface PrintTaskConstructor {
    /**
     * The PrintTask generates a printer-ready version of the map using an [Export Web Map Task](https://developers.arcgis.com/rest/services-reference/export-web-map-task.htm) available with ArGIS Server 10.1 and later.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-PrintTask.html)
     */

    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)
     */
    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.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html#execute)
     */
    execute(query: Query, requestOptions?: any): Promise<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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html#executeAttachmentQuery)
     */
    executeAttachmentQuery(attachmentQuery: AttachmentQuery, requestOptions?: any): Promise<any>;
    /**
     * Gets a count of the number of features that satisfy the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html#executeForCount)
     */
    executeForCount(query: Query, requestOptions?: any): Promise<number>;
    /**
     * Gets the extent of the features that satisfy the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html#executeForExtent)
     */
    executeForExtent(params: Query, requestOptions?: any): Promise<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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html#executeForIds)
     */
    executeForIds(query: Query, requestOptions?: any): Promise<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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html#executeRelationshipQuery)
     */
    executeRelationshipQuery(relationshipQuery: RelationshipQuery, requestOptions?: any): Promise<any>;
  }

  interface QueryTaskConstructor {
    /**
     * Executes different types of query operations on a layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-QueryTask.html)
     */

    new (properties?: QueryTaskProperties): QueryTask;
  }

  export const QueryTask: QueryTaskConstructor;

  interface QueryTaskProperties extends TaskProperties {
    /**
     * Specify the geodatabase version to query.
     *
     * [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)
     */
    solve(params: RouteParameters, requestOptions?: any): Promise<RouteResult>;
  }

  interface RouteTaskConstructor {
    /**
     * Find routes between two or more locations and optionally get driving directions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-RouteTask.html)
     */

    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)
     */
    solve(params: ServiceAreaParameters, requestOptions?: any): Promise<ServiceAreaSolveResult>;
  }

  interface ServiceAreaTaskConstructor {
    /**
     * ServiceAreaTask helps you find service areas around any location on a network.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ServiceAreaTask.html)
     */

    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().
     *
     * [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.
     *
     * [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().
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AddressCandidate.html#score)
     */
    score?: number;
  }

  interface AlgorithmicColorRamp extends supportColorRamp {
    /**
     * The algorithm used to generate the colors between the `fromColor` and `toColor`.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AlgorithmicColorRamp.html#type)
     */
    readonly type: "algorithmic";
  }

  interface AlgorithmicColorRampConstructor {
    new (properties?: AlgorithmicColorRampProperties): AlgorithmicColorRamp;

    /**
     * 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;

    fromJSON(json: any): AlgorithmicColorRamp;
  }

  export const AlgorithmicColorRamp: AlgorithmicColorRampConstructor;

  interface AlgorithmicColorRampProperties extends supportColorRampProperties {
    /**
     * The algorithm used to generate the colors between the `fromColor` and `toColor`.
     *
     * [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, JSONSupport {
    /**
     * The area unit in which areas of polygons will be calculated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AreasAndLengthsParameters.html#areaUnit)
     */
    areaUnit:
      | "acres"
      | "hectares"
      | "square-miles"
      | "square-kilometers"
      | "square-meters"
      | "square-feet"
      | "square-yards";
    /**
     * Defines the type of calculation for the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AreasAndLengthsParameters.html#calculationType)
     */
    calculationType: "planar" | "geodesic" | "preserve-shape";
    /**
     * The length unit in which perimeters of polygons will be calculated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AreasAndLengthsParameters.html#lengthUnit)
     */
    lengthUnit: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
    /**
     * 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[];
  }

  interface AreasAndLengthsParametersConstructor {
    new (properties?: AreasAndLengthsParametersProperties): AreasAndLengthsParameters;

    fromJSON(json: any): AreasAndLengthsParameters;
  }

  export const AreasAndLengthsParameters: AreasAndLengthsParametersConstructor;

  interface AreasAndLengthsParametersProperties {
    /**
     * The area unit in which areas of polygons will be calculated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AreasAndLengthsParameters.html#areaUnit)
     */
    areaUnit?:
      | "acres"
      | "hectares"
      | "square-miles"
      | "square-kilometers"
      | "square-meters"
      | "square-feet"
      | "square-yards";
    /**
     * Defines the type of calculation for the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AreasAndLengthsParameters.html#calculationType)
     */
    calculationType?: "planar" | "geodesic" | "preserve-shape";
    /**
     * The length unit in which perimeters of polygons will be calculated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AreasAndLengthsParameters.html#lengthUnit)
     */
    lengthUnit?: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
    /**
     * 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 where clause to be applied to attachment queries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#attachmentsWhere)
     */
    attachmentsWhere: string;
    /**
     * The file format that is supported by query attachment.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#globalIds)
     */
    globalIds: number[];
    /**
     * Used to query for attachments that match the provided `keywords`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#keywords)
     */
    keywords: string[];
    /**
     * Used to query for attachments that match this `name`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#name)
     */
    name: string;
    /**
     * The number of features to retrieve.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#objectIds)
     */
    objectIds: number[];
    /**
     * If `true`, the [Exchangeable image file format](https://en.wikipedia.org/wiki/Exif) for the attachment will be included in [attachmentInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#exifInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#returnMetadata)
     */
    returnMetadata: boolean;
    /**
     * The file size of the attachment is specified in bytes.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#where)
     */
    where: string;
  }

  interface AttachmentQueryConstructor {
    new (properties?: AttachmentQueryProperties): AttachmentQuery;

    /**
     * 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;

    fromJSON(json: any): AttachmentQuery;
  }

  export const AttachmentQuery: AttachmentQueryConstructor;

  interface AttachmentQueryProperties {
    /**
     * The where clause to be applied to attachment queries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#attachmentsWhere)
     */
    attachmentsWhere?: string;
    /**
     * The file format that is supported by query attachment.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#globalIds)
     */
    globalIds?: number[];
    /**
     * Used to query for attachments that match the provided `keywords`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#keywords)
     */
    keywords?: string[];
    /**
     * Used to query for attachments that match this `name`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#name)
     */
    name?: string;
    /**
     * The number of features to retrieve.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#objectIds)
     */
    objectIds?: number[];
    /**
     * If `true`, the [Exchangeable image file format](https://en.wikipedia.org/wiki/Exif) for the attachment will be included in [attachmentInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html#exifInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-AttachmentQuery.html#returnMetadata)
     */
    returnMetadata?: boolean;
    /**
     * The file size of the attachment is specified in bytes.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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` to generate a buffer polygon using a geodesic distance.
     *
     * [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.
     *
     * [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 (possibly multipart) 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-BufferParameters.html#unit)
     */
    unit: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
  }

  interface BufferParametersConstructor {
    new (properties?: BufferParametersProperties): BufferParameters;

    /**
     * Converts an instance of  this class to its ArcGIS portal JSON representation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-BufferParameters.html#toJSON)
     */
    toJSON(): any;
  }

  export const BufferParameters: BufferParametersConstructor;

  interface BufferParametersProperties {
    /**
     * The spatial reference in which the geometries are buffered.
     *
     * [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.
     *
     * [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` to generate a buffer polygon using a geodesic distance.
     *
     * [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.
     *
     * [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 (possibly multipart) 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-BufferParameters.html#unit)
     */
    unit?: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
  }

  interface ClosestFacilityParameters 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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#incidents)
     */
    incidents: DataLayer | FeatureSet;
    /**
     * The output geometry precision.
     *
     * [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.
     *
     * [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.
     *
     * [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 returned with the analysis results.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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)
     */
    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)
     */
    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)
     */
    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-rest-support-ClosestFacilitySolveResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnPointBarriers)
     */
    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)
     */
    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-rest-support-ClosestFacilitySolveResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnPolylineBarriers)
     */
    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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#travelDirection)
     */
    travelDirection: "from-facility" | "to-facility";
    /**
     * A travel mode represents a means of transportation, such as driving or walking.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#travelMode)
     */
    travelMode: any;
    /**
     * If `true`, the hierarchy attribute for the network will be used in analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#useHierarchy)
     */
    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 attributes should 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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#incidents)
     */
    incidents?: DataLayer | FeatureSet;
    /**
     * The output geometry precision.
     *
     * [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.
     *
     * [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.
     *
     * [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 returned with the analysis results.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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)
     */
    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)
     */
    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)
     */
    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-rest-support-ClosestFacilitySolveResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnPointBarriers)
     */
    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)
     */
    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-rest-support-ClosestFacilitySolveResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#returnPolylineBarriers)
     */
    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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#travelDirection)
     */
    travelDirection?: "from-facility" | "to-facility";
    /**
     * A travel mode represents a means of transportation, such as driving or walking.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#travelMode)
     */
    travelMode?: any;
    /**
     * If `true`, the hierarchy attribute for the network will be used in analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilityParameters.html#useHierarchy)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#directions)
     */
    directions: supportDirectionsFeatureSet[];
    /**
     * An array of points representing facilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#facilities)
     */
    facilities: Point[];
    /**
     * An array of points representing incidents.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#messages)
     */
    messages: supportNAMessage[];
    /**
     * The point barriers are an array of points.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#polylineBarriers)
     */
    polylineBarriers: Polyline[];
    /**
     * The array of graphics representing routes.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#directions)
     */
    directions?: supportDirectionsFeatureSetProperties[];
    /**
     * An array of points representing facilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#facilities)
     */
    facilities?: PointProperties[];
    /**
     * An array of points representing incidents.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#messages)
     */
    messages?: supportNAMessageProperties[];
    /**
     * The point barriers are an array of points.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ClosestFacilitySolveResult.html#polylineBarriers)
     */
    polylineBarriers?: PolylineProperties[];
    /**
     * The array of graphics representing routes.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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 while performing the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html#spatialRelationship)
     */
    spatialRelationship:
      | "intersects"
      | "contains"
      | "crosses"
      | "envelope-intersects"
      | "index-intersects"
      | "overlaps"
      | "touches"
      | "within"
      | "relation";

    type: "layer";
    /**
     * A where clause for the query.
     *
     * [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.
     *
     * [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 while performing the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html#spatialRelationship)
     */
    spatialRelationship?:
      | "intersects"
      | "contains"
      | "crosses"
      | "envelope-intersects"
      | "index-intersects"
      | "overlaps"
      | "touches"
      | "within"
      | "relation";

    type?: "layer";
    /**
     * A where clause for the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DataLayer.html#where)
     */
    where?: string;
  }

  interface DensifyParameters extends Accessor {
    /**
     * If `true`, Geographic Coordinate System spatial references are used or densify 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`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DensifyParameters.html#lengthUnit)
     */
    lengthUnit: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
    /**
     * All segments longer than `maxSegmentLength` are replaced with sequences of lines no longer than `maxSegmentLength.`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DensifyParameters.html#maxSegmentLength)
     */
    maxSegmentLength: number;
  }

  interface DensifyParametersConstructor {
    new (properties?: DensifyParametersProperties): DensifyParameters;

    /**
     * Converts an instance of  this class to its ArcGIS portal JSON representation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DensifyParameters.html#toJSON)
     */
    toJSON(): any;
  }

  export const DensifyParameters: DensifyParametersConstructor;

  interface DensifyParametersProperties {
    /**
     * If `true`, Geographic Coordinate System spatial references are used or densify 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`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DensifyParameters.html#lengthUnit)
     */
    lengthUnit?: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
    /**
     * All segments longer than `maxSegmentLength` are replaced with sequences of lines no longer than `maxSegmentLength.`
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DensifyParameters.html#maxSegmentLength)
     */
    maxSegmentLength?: number;
  }

  interface DirectionsFeatureSet extends supportFeatureSet, Accessor {
    /**
     * The extent of the route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html#extent)
     */
    extent: Extent;
    /**
     * The geometry type of the FeatureSet.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html#geometryType)
     */
    geometryType: "polyline";
    /**
     * 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-rest-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-rest-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-rest-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-rest-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 supportFeatureSetProperties {
    /**
     * The extent of the route.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html#extent)
     */
    extent?: ExtentProperties;
    /**
     * The geometry type of the FeatureSet.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DirectionsFeatureSet.html#geometryType)
     */
    geometryType?: "polyline";
    /**
     * 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-rest-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-rest-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-rest-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-rest-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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#distanceUnit)
     */
    distanceUnit: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
    /**
     * 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#geometry2)
     */
    geometry2: Geometry;
  }

  interface DistanceParametersConstructor {
    new (properties?: DistanceParametersProperties): DistanceParameters;

    /**
     * Converts an instance of  this class to its ArcGIS portal JSON representation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#toJSON)
     */
    toJSON(): any;
  }

  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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-DistanceParameters.html#distanceUnit)
     */
    distanceUnit?: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
    /**
     * 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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#geometryType)
     */
    geometryType: "point" | "multipoint" | "polyline" | "polygon" | "extent" | "mesh";
    /**
     * The [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#geometry) used to query the features.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#geometryType)
     */
    geometryType?: "point" | "multipoint" | "polyline" | "polygon" | "extent" | "mesh";
    /**
     * The [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html#geometry) used to query the features.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html#spatialReference)
     */
    spatialReference?: SpatialReferenceProperties;
  }

  interface FindParameters extends Accessor, JSONSupport {
    /**
     * Determines whether to look for an exact match of the search text or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#contains)
     */
    contains: boolean;
    /**
     * Specify the geodatabase version to search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#gdbVersion)
     */
    gdbVersion: string;
    /**
     * 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.
     *
     * [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.
     *
     * [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.
     *
     * [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)
     */
    returnGeometry: boolean;
    /**
     * The names of the fields of a layer to search.
     *
     * [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 FindParametersConstructor {
    new (properties?: FindParametersProperties): FindParameters;

    fromJSON(json: any): FindParameters;
  }

  export const FindParameters: FindParametersConstructor;

  interface FindParametersProperties {
    /**
     * Determines whether to look for an exact match of the search text or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#contains)
     */
    contains?: boolean;
    /**
     * Specify the geodatabase version to search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FindParameters.html#gdbVersion)
     */
    gdbVersion?: string;
    /**
     * 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.
     *
     * [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.
     *
     * [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.
     *
     * [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)
     */
    returnGeometry?: boolean;
    /**
     * The names of the fields of a layer to search.
     *
     * [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.
     *
     * [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: string;
  }

  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.
     *
     * [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?: string;
  }

  interface GeneralizeParameters extends Accessor, JSONSupport {
    /**
     * The maximum deviation unit.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-GeneralizeParameters.html#deviationUnit)
     */
    deviationUnit: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
    /**
     * The array of input geometries to generalize.
     *
     * [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;
  }

  interface GeneralizeParametersConstructor {
    new (properties?: GeneralizeParametersProperties): GeneralizeParameters;

    fromJSON(json: any): GeneralizeParameters;
  }

  export const GeneralizeParameters: GeneralizeParametersConstructor;

  interface GeneralizeParametersProperties {
    /**
     * The maximum deviation unit.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-GeneralizeParameters.html#deviationUnit)
     */
    deviationUnit?: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
    /**
     * The array of input geometries to generalize.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-GPMessage.html#type)
     */
    type:
      | "informative"
      | "process-definition"
      | "process-start"
      | "process-stop"
      | "warning"
      | "error"
      | "empty"
      | "abort";
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-GPMessage.html#type)
     */
    type?:
      | "informative"
      | "process-definition"
      | "process-start"
      | "process-stop"
      | "warning"
      | "error"
      | "empty"
      | "abort";
  }

  interface IdentifyParameters extends Accessor, JSONSupport {
    /**
     * 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)
     */
    dpi: number;
    /**
     * Specify the geodatabase version to search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#gdbVersion)
     */
    gdbVersion: string;
    /**
     * The geometry used to select features during the Identify operation.
     *
     * [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)
     */
    height: number;
    /**
     * The layers on which to perform the identify operation.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#layerOption)
     */
    layerOption: "top" | "visible" | "all";
    /**
     * The Extent or bounding box of the current map view.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#returnFieldName)
     */
    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)
     */
    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)
     */
    returnM: boolean;
    /**
     * If `true`, the values in the result will not be formatted i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#returnUnformattedValues)
     */
    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)
     */
    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).
     *
     * [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)
     */
    width: number;
  }

  interface IdentifyParametersConstructor {
    new (properties?: IdentifyParametersProperties): IdentifyParameters;

    fromJSON(json: any): 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)
     */
    dpi?: number;
    /**
     * Specify the geodatabase version to search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#gdbVersion)
     */
    gdbVersion?: string;
    /**
     * The geometry used to select features during the Identify operation.
     *
     * [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)
     */
    height?: number;
    /**
     * The layers on which to perform the identify operation.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#layerOption)
     */
    layerOption?: "top" | "visible" | "all";
    /**
     * The Extent or bounding box of the current map view.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#returnFieldName)
     */
    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)
     */
    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)
     */
    returnM?: boolean;
    /**
     * If `true`, the values in the result will not be formatted i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-IdentifyParameters.html#returnUnformattedValues)
     */
    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)
     */
    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).
     *
     * [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)
     */
    width?: number;
  }

  interface IdentifyResult extends Accessor, JSONSupport {
    /**
     * The name of the layer's primary display field.
     *
     * [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.
     *
     * [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 ImageHistogramParameters extends Accessor, JSONSupport {
    /**
     * Input geometry that defines the area of interest for which the histograms and statistics will be computed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageHistogramParameters.html#geometry)
     */
    geometry: Extent | Polygon;
    /**
     * Specifies the [mosaic rule](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html) on how individual images should be mosaicked when the histogram is computed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageHistogramParameters.html#mosaicRule)
     */
    mosaicRule: MosaicRule;
    /**
     * Specifies the pixel size (or the resolution).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageHistogramParameters.html#pixelSize)
     */
    pixelSize: ImageIdentifyParametersPixelSize;
    /**
     * Specifies the [rendering rule](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterFunction.html) from which to compute the statistics and histogram.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageHistogramParameters.html#renderingRule)
     */
    renderingRule: RasterFunction;
    /**
     * The [time extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html) for which to compute the statistics and histogram.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageHistogramParameters.html#timeExtent)
     */
    timeExtent: TimeExtent;
  }

  interface ImageHistogramParametersConstructor {
    new (properties?: ImageHistogramParametersProperties): ImageHistogramParameters;

    fromJSON(json: any): ImageHistogramParameters;
  }

  export const ImageHistogramParameters: ImageHistogramParametersConstructor;

  interface ImageHistogramParametersProperties {
    /**
     * Input geometry that defines the area of interest for which the histograms and statistics will be computed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageHistogramParameters.html#geometry)
     */
    geometry?: (ExtentProperties & { type: "extent" }) | (PolygonProperties & { type: "polygon" });
    /**
     * Specifies the [mosaic rule](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-MosaicRule.html) on how individual images should be mosaicked when the histogram is computed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageHistogramParameters.html#mosaicRule)
     */
    mosaicRule?: MosaicRuleProperties;
    /**
     * Specifies the pixel size (or the resolution).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageHistogramParameters.html#pixelSize)
     */
    pixelSize?: ImageIdentifyParametersPixelSize;
    /**
     * Specifies the [rendering rule](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RasterFunction.html) from which to compute the statistics and histogram.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageHistogramParameters.html#renderingRule)
     */
    renderingRule?: RasterFunctionProperties;
    /**
     * The [time extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html) for which to compute the statistics and histogram.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageHistogramParameters.html#timeExtent)
     */
    timeExtent?: TimeExtentProperties;
  }

  interface ImageIdentifyParameters extends Accessor, JSONSupport {
    /**
     * Input geometry that defines the location to be identified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#geometry)
     */
    geometry: Point | Polygon;
    /**
     * Controls the maximum number of returned catalog items, set to 1 to return the top most raster only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#maxItemCount)
     */
    maxItemCount: number;
    /**
     * Specifies the mosaic rules defining the image sorting order.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#mosaicRule)
     */
    mosaicRule: MosaicRule;
    /**
     * Specifies the pixel level being identified on the x and y axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#pixelSize)
     */
    pixelSize: PixelSize;
    /**
     * 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-ImageIdentifyParameters.html#renderingRule)
     */
    renderingRule: RasterFunction;
    /**
     * An array the [rendering rules](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#renderingRule) to retrieve multiple processed pixel values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#renderingRules)
     */
    renderingRules: RasterFunction;
    /**
     * If `true`, returns both geometry and attributes of the catalog items.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#returnCatalogItems)
     */
    returnCatalogItems: boolean;
    /**
     * When `true`, each feature in the catalog items includes the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#returnGeometry)
     */
    returnGeometry: boolean;
    /**
     * If `true`, the pixel values of all raster catalog items under the requested geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#timeExtent)
     */
    timeExtent: TimeExtent;
  }

  interface ImageIdentifyParametersConstructor {
    new (properties?: ImageIdentifyParametersProperties): ImageIdentifyParameters;

    fromJSON(json: any): ImageIdentifyParameters;
  }

  export const ImageIdentifyParameters: ImageIdentifyParametersConstructor;

  interface ImageIdentifyParametersProperties {
    /**
     * Input geometry that defines the location to be identified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#geometry)
     */
    geometry?: (PointProperties & { type: "point" }) | (PolygonProperties & { type: "polygon" });
    /**
     * Controls the maximum number of returned catalog items, set to 1 to return the top most raster only.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#maxItemCount)
     */
    maxItemCount?: number;
    /**
     * Specifies the mosaic rules defining the image sorting order.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#mosaicRule)
     */
    mosaicRule?: MosaicRuleProperties;
    /**
     * Specifies the pixel level being identified on the x and y axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#pixelSize)
     */
    pixelSize?: PixelSize;
    /**
     * 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-ImageIdentifyParameters.html#renderingRule)
     */
    renderingRule?: RasterFunctionProperties;
    /**
     * An array the [rendering rules](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#renderingRule) to retrieve multiple processed pixel values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#renderingRules)
     */
    renderingRules?: RasterFunctionProperties;
    /**
     * If `true`, returns both geometry and attributes of the catalog items.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#returnCatalogItems)
     */
    returnCatalogItems?: boolean;
    /**
     * When `true`, each feature in the catalog items includes the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#returnGeometry)
     */
    returnGeometry?: boolean;
    /**
     * If `true`, the pixel values of all raster catalog items under the requested geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#timeExtent)
     */
    timeExtent?: TimeExtentProperties;
  }

  /**
   * Specifies the pixel size (or the resolution).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#PixelSize)
   */
  export interface PixelSize extends Object {
    /**
     * Represents the size of one pixel in map units along the x axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#PixelSize)
     */
    x: number;
    /**
     * Represents the size of one pixel in map units along the y axis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#PixelSize)
     */
    y: number;
    /**
     * Spatial reference to be used for the request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#PixelSize)
     */
    spatialReference?: PixelSizeSpatialReference;
  }

  export interface PixelSizeSpatialReference extends Object {
    /**
     * The wkid of the spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#PixelSize)
     */
    wkid?: number;
    /**
     * The Well known text or wkt of the spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyParameters.html#PixelSize)
     */
    wkt?: number;
  }

  interface ImageIdentifyResult extends Accessor, JSONSupport {
    /**
     * The set of catalog items that overlap the input geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyResult.html#catalogItems)
     */
    catalogItems: supportFeatureSet;
    /**
     * The set of visible areas for the identified catalog items.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyResult.html#catalogItemVisibilities)
     */
    catalogItemVisibilities: number[];
    /**
     * The identified location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyResult.html#location)
     */
    location: Point;
    /**
     * The identify property name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyResult.html#name)
     */
    name: string;
    /**
     * The identify property id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyResult.html#objectId)
     */
    objectId: number;
    /**
     * The attributes of the identified object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyResult.html#properties)
     */
    properties: any;
    /**
     * The identify image service pixel value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyResult.html#value)
     */
    value: string;
  }

  interface ImageIdentifyResultConstructor {
    new (properties?: ImageIdentifyResultProperties): ImageIdentifyResult;

    /**
     * The attributes of the identified object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyResult.html#processedValues)
     */
    processedValues: string[];

    fromJSON(json: any): ImageIdentifyResult;
  }

  export const ImageIdentifyResult: ImageIdentifyResultConstructor;

  interface ImageIdentifyResultProperties {
    /**
     * The set of catalog items that overlap the input geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyResult.html#catalogItems)
     */
    catalogItems?: supportFeatureSetProperties;
    /**
     * The set of visible areas for the identified catalog items.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyResult.html#catalogItemVisibilities)
     */
    catalogItemVisibilities?: number[];
    /**
     * The identified location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyResult.html#location)
     */
    location?: PointProperties;
    /**
     * The identify property name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyResult.html#name)
     */
    name?: string;
    /**
     * The identify property id.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyResult.html#objectId)
     */
    objectId?: number;
    /**
     * The attributes of the identified object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyResult.html#properties)
     */
    properties?: any;
    /**
     * The identify image service pixel value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageIdentifyResult.html#value)
     */
    value?: string;
  }

  interface ImageServiceIdentifyParameters extends Accessor, JSONSupport {
    /**
     * Input geometry that defines the location to be identified.
     *
     * [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 return the 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#pixelSize)
     */
    pixelSize: Point;
    /**
     * 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#returnGeometry)
     */
    returnGeometry: boolean;
    /**
     * If `true`, the pixel values of all raster catalog items under the requested geometry.
     *
     * [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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#geometry)
     */
    geometry?: (PointProperties & { type: "point" }) | (PolygonProperties & { type: "polygon" });
    /**
     * Controls the maximum number of returned catalog items, set to 1 to return the 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#pixelSize)
     */
    pixelSize?: PointProperties;
    /**
     * 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#returnGeometry)
     */
    returnGeometry?: boolean;
    /**
     * If `true`, the pixel values of all raster catalog items under the requested geometry.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyParameters.html#timeExtent)
     */
    timeExtent?: TimeExtentProperties;
  }

  /**
   * The results from [ImageServiceIdentifyTask](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ImageServiceIdentifyTask.html).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyResult.html)
   */
  interface ImageServiceIdentifyResult {
    /**
     * The set of catalog items that overlap the input geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ImageServiceIdentifyResult.html#catalogItems)
     */
    catalogItems: supportFeatureSet;
    /**
     * The set of visible areas for the identified catalog items.
     *
     * [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;
  }

  export const ImageServiceIdentifyResult: ImageServiceIdentifyResult;

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-JobInfo.html#jobStatus)
     */
    jobStatus:
      | "job-cancelled"
      | "job-cancelling"
      | "job-deleted"
      | "job-deleting"
      | "job-timed-out"
      | "job-executing"
      | "job-failed"
      | "job-new"
      | "job-submitted"
      | "job-succeeded"
      | "job-waiting";
    /**
     * 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: supportGPMessage[];
    /**
     * The [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for data requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-JobInfo.html#requestOptions)
     */
    requestOptions: any;
    /**
     * ArcGIS Server Rest API endpoint to the resource that receives the geoprocessing request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-JobInfo.html#sourceUrl)
     */
    sourceUrl: string;

    /**
     * Cancels an asynchronous geoprocessing job.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-JobInfo.html#cancelJob)
     */
    cancelJob(jobId: string, requestOptions?: any): Promise<JobInfo>;
    /**
     * 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-support-JobInfo.html#fetchResultData)
     */
    fetchResultData(jobId: string, resultName: string, requestOptions?: any): Promise<ParameterValue>;
    /**
     * 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-support-JobInfo.html#fetchResultImage)
     */
    fetchResultImage(
      jobId: string,
      resultName: string,
      imageParams: ImageParameters,
      requestOptions?: any
    ): Promise<ParameterValue>;
    /**
     * Get the task result identified by `jobId` as an [MapImageLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-JobInfo.html#fetchResultMapImageLayer)
     */
    fetchResultMapImageLayer(jobId: string): Promise<MapImageLayer>;
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-JobInfo.html#jobStatus)
     */
    jobStatus?:
      | "job-cancelled"
      | "job-cancelling"
      | "job-deleted"
      | "job-deleting"
      | "job-timed-out"
      | "job-executing"
      | "job-failed"
      | "job-new"
      | "job-submitted"
      | "job-succeeded"
      | "job-waiting";
    /**
     * 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?: supportGPMessageProperties[];
    /**
     * The [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for data requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-JobInfo.html#requestOptions)
     */
    requestOptions?: any;
    /**
     * ArcGIS Server Rest API endpoint to the resource that receives the geoprocessing request.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-JobInfo.html#sourceUrl)
     */
    sourceUrl?: string;
  }

  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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LegendLayer.html#title)
     */
    title?: string;
  }

  interface LengthsParameters extends Accessor, JSONSupport {
    /**
     * Defines the type of calculation for the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LengthsParameters.html#calculationType)
     */
    calculationType: "planar" | "geodesic" | "preserve-shape";
    /**
     * If polylines are in a geographic coordinate system, then geodesic needs to be set to `true` in order to calculate the ellipsoidal shortest path distance between each pair of the vertices in the polylines.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LengthsParameters.html#polylines)
     */
    polylines: Polyline[];
  }

  interface LengthsParametersConstructor {
    new (properties?: LengthsParametersProperties): LengthsParameters;

    fromJSON(json: any): LengthsParameters;
  }

  export const LengthsParameters: LengthsParametersConstructor;

  interface LengthsParametersProperties {
    /**
     * Defines the type of calculation for the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LengthsParameters.html#calculationType)
     */
    calculationType?: "planar" | "geodesic" | "preserve-shape";
    /**
     * If polylines are in a geographic coordinate system, then geodesic needs to be set to `true` in order to calculate the ellipsoidal shortest path distance between each pair of the vertices in the polylines.
     *
     * [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.
     *
     * [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.
     *
     * [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)
     */
    distance: number;
    /**
     * Specifies the unit type of the linear distance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LinearUnit.html#units)
     */
    units: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
  }

  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)
     */
    distance?: number;
    /**
     * Specifies the unit type of the linear distance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-LinearUnit.html#units)
     */
    units?: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
  }

  interface MultipartColorRamp extends supportColorRamp {
    /**
     * 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: supportAlgorithmicColorRamp[];
    /**
     * A string value representing the color ramp type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-MultipartColorRamp.html#type)
     */
    readonly type: "multipart";
  }

  interface MultipartColorRampConstructor {
    new (properties?: MultipartColorRampProperties): MultipartColorRamp;

    /**
     * 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;

    fromJSON(json: any): MultipartColorRamp;
  }

  export const MultipartColorRamp: MultipartColorRampConstructor;

  interface MultipartColorRampProperties extends supportColorRampProperties {
    /**
     * 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?: supportAlgorithmicColorRampProperties[];
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-NAMessage.html#type)
     */
    type:
      | "informative"
      | "process-definition"
      | "process-start"
      | "process-stop"
      | "warning"
      | "error"
      | "empty"
      | "abort";
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-NAMessage.html#type)
     */
    type?:
      | "informative"
      | "process-definition"
      | "process-start"
      | "process-stop"
      | "warning"
      | "error"
      | "empty"
      | "abort";
  }

  interface OffsetParameters extends Accessor, JSONSupport {
    /**
     * The `bevelRatio` is multiplied by the offset distance and the result determines how far a mitered offset intersection can be located before it is beveled.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-OffsetParameters.html#offsetHow)
     */
    offsetHow: "bevelled" | "mitered" | "rounded";
    /**
     * The offset distance unit.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-OffsetParameters.html#offsetUnit)
     */
    offsetUnit: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
  }

  interface OffsetParametersConstructor {
    new (properties?: OffsetParametersProperties): OffsetParameters;

    fromJSON(json: any): 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 located before it is beveled.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-OffsetParameters.html#offsetHow)
     */
    offsetHow?: "bevelled" | "mitered" | "rounded";
    /**
     * The offset distance unit.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-OffsetParameters.html#offsetUnit)
     */
    offsetUnit?: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
  }

  interface ParameterValue extends Accessor, JSONSupport {
    /**
     * Specifies the parameter's data type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ParameterValue.html#dataType)
     */
    dataType:
      | "boolean"
      | "data-file"
      | "date"
      | "double"
      | "feature-record-set-layer"
      | "field"
      | "linear-unit"
      | "long"
      | "raster-data"
      | "raster-data-layer"
      | "record-set"
      | "string"
      | "multi-value";
    /**
     * The value of the parameter.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ParameterValue.html#dataType)
     */
    dataType?:
      | "boolean"
      | "data-file"
      | "date"
      | "double"
      | "feature-record-set-layer"
      | "field"
      | "linear-unit"
      | "long"
      | "raster-data"
      | "raster-data-layer"
      | "record-set"
      | "string"
      | "multi-value";
    /**
     * The value of the parameter.
     *
     * [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.
     *
     * [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: supportPrintTemplate;
    /**
     * 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.
     *
     * [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?: supportPrintTemplateProperties;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#attributionVisible)
     */
    attributionVisible: boolean;
    /**
     * Define the map width, height and dpi.
     *
     * [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 for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#forceFeatureAttributes)
     */
    forceFeatureAttributes: boolean;
    /**
     * The output format for the printed map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#format)
     */
    format: "pdf" | "png32" | "png8" | "jpg" | "gif" | "eps" | "svg" | "svgz";
    /**
     * The layout used for the print output.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#layout)
     */
    layout:
      | "map-only"
      | "a3-landscape"
      | "a3-portrait"
      | "a4-landscape"
      | "a4-portrait"
      | "letter-ansi-a-landscape"
      | "letter-ansi-a-portrait"
      | "tabloid-ansi-b-landscape"
      | "tabloid-ansi-b-portrait";
    /**
     * Defines the layout elements.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#outScale)
     */
    outScale: number;
    /**
     * Define whether the printed map should preserve map scale or map extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#scalePreserved)
     */
    scalePreserved: 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)
     */
    showLabels: boolean;
  }

  interface PrintTemplateConstructor {
    new (properties?: PrintTemplateProperties): PrintTemplate;
  }

  export const PrintTemplate: PrintTemplateConstructor;

  interface PrintTemplateProperties {
    /**
     * When `false`, the attribution is not displayed on the printout.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#attributionVisible)
     */
    attributionVisible?: boolean;
    /**
     * Define the map width, height and dpi.
     *
     * [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 for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#forceFeatureAttributes)
     */
    forceFeatureAttributes?: boolean;
    /**
     * The output format for the printed map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#format)
     */
    format?: "pdf" | "png32" | "png8" | "jpg" | "gif" | "eps" | "svg" | "svgz";
    /**
     * The layout used for the print output.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#layout)
     */
    layout?:
      | "map-only"
      | "a3-landscape"
      | "a3-portrait"
      | "a4-landscape"
      | "a4-portrait"
      | "letter-ansi-a-landscape"
      | "letter-ansi-a-portrait"
      | "tabloid-ansi-b-landscape"
      | "tabloid-ansi-b-portrait";
    /**
     * Defines the layout elements.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#outScale)
     */
    outScale?: number;
    /**
     * Define whether the printed map should preserve map scale or map extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#scalePreserved)
     */
    scalePreserved?: 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)
     */
    showLabels?: boolean;
  }

  export interface PrintTemplateExportOptions extends Object {
    /**
     * Map width.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#exportOptions)
     */
    width?: number;
    /**
     * Map height.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#exportOptions)
     */
    height?: number;
    /**
     * Resolution in dots per inch.
     *
     * [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 a 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#layoutOptions)
     */
    scalebarUnit?: "Miles" | "Kilometers" | "Meters" | "Feet";
    /**
     * An array of [LegendLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-LegendLayer.html) containing the ids of the layers that will be included in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-PrintTemplate.html#layoutOptions)
     */
    legendLayers?: supportLegendLayer[];
    /**
     * An array of name-value pair objects.
     *
     * [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 well-known id {wkid:number} or well-known text {wkt:string} of the datum transformation to be applied to the projected geometries.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ProjectParameters.html#transformForward)
     */
    transformForward: boolean;
  }

  interface ProjectParametersConstructor {
    new (properties?: ProjectParametersProperties): ProjectParameters;

    /**
     * Converts an instance of  this class to its ArcGIS portal JSON representation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ProjectParameters.html#toJSON)
     */
    toJSON(): any;
  }

  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 well-known id {wkid:number} or well-known text {wkt:string} of the datum transformation to be applied to the projected geometries.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ProjectParameters.html#transformation)
     */
    wkt?: string;
  }

  interface Query extends Accessor, JSONSupport {
    /**
     * An array of Object IDs representing [aggregate](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#isAggregate) (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#aggregateIds)
     */
    aggregateIds: number[];
    /**
     * Indicates if the service should cache the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#cacheHint)
     */
    cacheHint: boolean;
    /**
     * 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.
     *
     * [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.
     *
     * [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;
    /**
     * The geometry to apply to the spatial filter.
     *
     * [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).
     *
     * [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 that satisfy the aggregation function(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#having)
     */
    having: string;
    /**
     * The historic moment to query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#historicMoment)
     */
    historicMoment: Date;
    /**
     * The maximum distance in units of [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outSpatialReference) used for generalizing geometries returned by the query operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#maxAllowableOffset)
     */
    maxAllowableOffset: number;
    /**
     * When set, the maximum number of features returned by the query will equal the `maxRecordCount` of the service multiplied by this factor.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#maxRecordCountFactor)
     */
    maxRecordCountFactor: number;
    /**
     * Parameter dictates how the geometry of a multipatch feature will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#multipatchOption)
     */
    multipatchOption: string;
    /**
     * The number of features to retrieve.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#num)
     */
    num: number;
    /**
     * An array of ObjectIDs to be used to query for features in a layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#objectIds)
     */
    objectIds: number[];
    /**
     * One or more field names used to order the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#orderByFields)
     */
    orderByFields: string[];
    /**
     * Attribute fields to include in the [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outSpatialReference)
     */
    outSpatialReference: SpatialReference;
    /**
     * The definitions for one or more field-based statistics to be calculated.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#pixelSize)
     */
    pixelSize: Point;
    /**
     * Used to project the geometry onto a virtual grid, likely representing pixels on the screen.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#rangeValues)
     */
    rangeValues: QueryRangeValues[];
    /**
     * The Dimensionally Extended 9 Intersection Model (DE-9IM) matrix relation (encoded as a string) to query the spatial relationship of the input [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#geometry) to the layer's features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#relationParameter)
     */
    relationParameter: string;
    /**
     * If `true`, each feature in the returned [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html) will be returned with a centroid.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnCentroid)
     */
    returnCentroid: boolean;
    /**
     * If `true` then the query returns distinct values based on the field(s) specified in [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outFields).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnDistinctValues)
     */
    returnDistinctValues: boolean;
    /**
     * If `true`, then all features are returned for each tile request, even if they exceed the maximum record limit per query indicated on the service by `maxRecordCount`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnExceededLimitFeatures)
     */
    returnExceededLimitFeatures: boolean;
    /**
     * If `true`, each feature in the returned [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html) includes the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnGeometry)
     */
    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-rest-support-FeatureSet.html#queryGeometry) will be returned with the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnQueryGeometry)
     */
    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;
    /**
     * For spatial queries, this parameter defines the spatial relationship to query features in the layer or layer view against the input [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#geometry).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#spatialRelationship)
     */
    spatialRelationship:
      | "intersects"
      | "contains"
      | "crosses"
      | "disjoint"
      | "envelope-intersects"
      | "index-intersects"
      | "overlaps"
      | "touches"
      | "within"
      | "relation";
    /**
     * This parameter can be either standard SQL92 `standard` or it can use the native SQL of the underlying datastore `native`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#sqlFormat)
     */
    sqlFormat: "none" | "standard" | "native";
    /**
     * The zero-based index indicating where to begin retrieving features.
     *
     * [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".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#text)
     */
    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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#units)
     */
    units: "feet" | "miles" | "nautical-miles" | "us-nautical-miles" | "meters" | "kilometers";
    /**
     * A where clause for the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#where)
     */
    where: string;
  }

  interface QueryConstructor {
    new (properties?: QueryProperties): Query;

    /**
     * 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;

    fromJSON(json: any): Query;
  }

  export const Query: QueryConstructor;

  interface QueryProperties {
    /**
     * An array of Object IDs representing [aggregate](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html#isAggregate) (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#aggregateIds)
     */
    aggregateIds?: number[];
    /**
     * Indicates if the service should cache the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#cacheHint)
     */
    cacheHint?: boolean;
    /**
     * 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.
     *
     * [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.
     *
     * [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;
    /**
     * The geometry to apply to the spatial filter.
     *
     * [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).
     *
     * [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 that satisfy the aggregation function(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#having)
     */
    having?: string;
    /**
     * The historic moment to query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#historicMoment)
     */
    historicMoment?: DateProperties;
    /**
     * The maximum distance in units of [outSpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outSpatialReference) used for generalizing geometries returned by the query operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#maxAllowableOffset)
     */
    maxAllowableOffset?: number;
    /**
     * When set, the maximum number of features returned by the query will equal the `maxRecordCount` of the service multiplied by this factor.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#maxRecordCountFactor)
     */
    maxRecordCountFactor?: number;
    /**
     * Parameter dictates how the geometry of a multipatch feature will be returned.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#multipatchOption)
     */
    multipatchOption?: string;
    /**
     * The number of features to retrieve.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#num)
     */
    num?: number;
    /**
     * An array of ObjectIDs to be used to query for features in a layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#objectIds)
     */
    objectIds?: number[];
    /**
     * One or more field names used to order the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#orderByFields)
     */
    orderByFields?: string[];
    /**
     * Attribute fields to include in the [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outSpatialReference)
     */
    outSpatialReference?: SpatialReferenceProperties;
    /**
     * The definitions for one or more field-based statistics to be calculated.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#pixelSize)
     */
    pixelSize?: PointProperties;
    /**
     * Used to project the geometry onto a virtual grid, likely representing pixels on the screen.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#rangeValues)
     */
    rangeValues?: QueryRangeValues[];
    /**
     * The Dimensionally Extended 9 Intersection Model (DE-9IM) matrix relation (encoded as a string) to query the spatial relationship of the input [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#geometry) to the layer's features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#relationParameter)
     */
    relationParameter?: string;
    /**
     * If `true`, each feature in the returned [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html) will be returned with a centroid.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnCentroid)
     */
    returnCentroid?: boolean;
    /**
     * If `true` then the query returns distinct values based on the field(s) specified in [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#outFields).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnDistinctValues)
     */
    returnDistinctValues?: boolean;
    /**
     * If `true`, then all features are returned for each tile request, even if they exceed the maximum record limit per query indicated on the service by `maxRecordCount`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnExceededLimitFeatures)
     */
    returnExceededLimitFeatures?: boolean;
    /**
     * If `true`, each feature in the returned [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html) includes the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnGeometry)
     */
    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-rest-support-FeatureSet.html#queryGeometry) will be returned with the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#returnQueryGeometry)
     */
    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;
    /**
     * For spatial queries, this parameter defines the spatial relationship to query features in the layer or layer view against the input [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#geometry).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#spatialRelationship)
     */
    spatialRelationship?:
      | "intersects"
      | "contains"
      | "crosses"
      | "disjoint"
      | "envelope-intersects"
      | "index-intersects"
      | "overlaps"
      | "touches"
      | "within"
      | "relation";
    /**
     * This parameter can be either standard SQL92 `standard` or it can use the native SQL of the underlying datastore `native`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#sqlFormat)
     */
    sqlFormat?: "none" | "standard" | "native";
    /**
     * The zero-based index indicating where to begin retrieving features.
     *
     * [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".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#text)
     */
    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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#units)
     */
    units?: "feet" | "miles" | "nautical-miles" | "us-nautical-miles" | "meters" | "kilometers";
    /**
     * A where clause for the query.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#quantizationParameters)
     */
    mode?: "view" | "edit";
    /**
     * The integer's coordinates will be returned relative to the origin position defined by this property value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#quantizationParameters)
     */
    originPosition?: "upper-left" | "lower-left";
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html#quantizationParameters)
     */
    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.
     *
     * [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.
     *
     * [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, JSONSupport {
    /**
     * The first array of geometries to compute the relation.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationParameters.html#relation)
     */
    relation:
      | "cross"
      | "disjoint"
      | "in"
      | "interior-intersection"
      | "intersection"
      | "line-coincidence"
      | "line-touch"
      | "overlap"
      | "point-touch"
      | "relation"
      | "touch"
      | "within";
    /**
     * The string describes the spatial relationship to be tested when `RelationParameters.relation = 'relation'`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationParameters.html#relationParameter)
     */
    relationParameter: string;
  }

  interface RelationParametersConstructor {
    new (properties?: RelationParametersProperties): RelationParameters;

    fromJSON(json: any): RelationParameters;
  }

  export const RelationParameters: RelationParametersConstructor;

  interface RelationParametersProperties {
    /**
     * The first array of geometries to compute the relation.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationParameters.html#relation)
     */
    relation?:
      | "cross"
      | "disjoint"
      | "in"
      | "interior-intersection"
      | "intersection"
      | "line-coincidence"
      | "line-touch"
      | "overlap"
      | "point-touch"
      | "relation"
      | "touch"
      | "within";
    /**
     * The string describes the spatial relationship to be tested when `RelationParameters.relation = 'relation'`.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#maxAllowableOffset)
     */
    maxAllowableOffset: number;
    /**
     * The number of features to retrieve.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#num)
     */
    num: 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[];
    /**
     * One or more field names used to order the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#orderByFields)
     */
    orderByFields: string[];
    /**
     * Attribute fields to include in the FeatureSet.
     *
     * [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.
     *
     * [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.
     *
     * [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-rest-support-FeatureSet.html) includes the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#returnGeometry)
     */
    returnGeometry: boolean;
    /**
     * If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.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-RelationshipQuery.html#returnM)
     */
    returnM: boolean;
    /**
     * If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.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-RelationshipQuery.html#returnZ)
     */
    returnZ: boolean;
    /**
     * The zero-based index indicating where to begin retrieving features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#start)
     */
    start: number;
    /**
     * The definition expression to be applied to the related table or layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#where)
     */
    where: string;
  }

  interface RelationshipQueryConstructor {
    new (properties?: RelationshipQueryProperties): RelationshipQuery;

    /**
     * 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;

    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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#maxAllowableOffset)
     */
    maxAllowableOffset?: number;
    /**
     * The number of features to retrieve.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#num)
     */
    num?: 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[];
    /**
     * One or more field names used to order the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#orderByFields)
     */
    orderByFields?: string[];
    /**
     * Attribute fields to include in the FeatureSet.
     *
     * [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.
     *
     * [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.
     *
     * [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-rest-support-FeatureSet.html) includes the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#returnGeometry)
     */
    returnGeometry?: boolean;
    /**
     * If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.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-RelationshipQuery.html#returnM)
     */
    returnM?: boolean;
    /**
     * If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.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-RelationshipQuery.html#returnZ)
     */
    returnZ?: boolean;
    /**
     * The zero-based index indicating where to begin retrieving features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RelationshipQuery.html#start)
     */
    start?: number;
    /**
     * The definition expression to be applied to the related table or layer.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#accumulateAttributes)
     */
    accumulateAttributes: string[];
    /**
     * An authorization string used to access a resource or service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#apiKey)
     */
    apiKey: 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: any[];
    /**
     * The language used when computing directions.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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 restrictions specified 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 for visiting a given list of stops.
     *
     * [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 results will differ depending on the value of this property:
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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`.
     *
     * [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`.
     *
     * [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.
     *
     * [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.
     *
     * [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)
     */
    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)
     */
    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)
     */
    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)
     */
    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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#stops)
     */
    stops: DataLayer | FeatureSet;
    /**
     * A travel mode represents a means of transportation, such as driving or walking.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#travelMode)
     */
    travelMode: TravelMode;
    /**
     * If `true`, the hierarchy attribute for the network should be used in analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#useHierarchy)
     */
    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 visits to certain times of day, or "time windows".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#useTimeWindows)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#accumulateAttributes)
     */
    accumulateAttributes?: string[];
    /**
     * An authorization string used to access a resource or service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#apiKey)
     */
    apiKey?: 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?: any[];
    /**
     * The language used when computing directions.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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 restrictions specified 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 for visiting a given list of stops.
     *
     * [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 results will differ depending on the value of this property:
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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`.
     *
     * [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`.
     *
     * [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.
     *
     * [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.
     *
     * [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)
     */
    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)
     */
    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)
     */
    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)
     */
    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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#stops)
     */
    stops?: DataLayer | FeatureSet;
    /**
     * A travel mode represents a means of transportation, such as driving or walking.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#travelMode)
     */
    travelMode?: TravelModeProperties;
    /**
     * If `true`, the hierarchy attribute for the network should be used in analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#useHierarchy)
     */
    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 visits to certain times of day, or "time windows".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-RouteParameters.html#useTimeWindows)
     */
    useTimeWindows?: boolean;
  }

  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: supportDirectionsFeatureSet;
    /**
     * 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.
     *
     * [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?: supportDirectionsFeatureSetProperties;
    /**
     * 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.
     *
     * [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.
     *
     * [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 determine which network elements can be used by a vehicle.
     *
     * [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.
     *
     * [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 considered when 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.
     *
     * [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.
     *
     * [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.
     *
     * [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)
     */
    mergeSimilarPolygonRanges: boolean;
    /**
     * The precision of the output geometry after generalization.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#outputLines)
     */
    outputLines: "none" | "true-shape" | "true-shape-with-measure";
    /**
     * The type of output polygons to be generated in the result.
     *
     * [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 geometries returned with the analysis results.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#overlapLines)
     */
    overlapLines: boolean;
    /**
     * Indicates if the polygons should overlap from multiple facilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#overlapPolygons)
     */
    overlapPolygons: boolean;
    /**
     * The set of point barriers loaded as network locations during analysis.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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)
     */
    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)
     */
    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)
     */
    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)
     */
    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)
     */
    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)
     */
    splitPolygonsAtBreaks: boolean;
    /**
     * Local date and time at the facility.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#travelDirection)
     */
    travelDirection: "from-facility" | "to-facility";
    /**
     * A travel mode represents a means of transportation, such as driving or walking.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#travelMode)
     */
    travelMode: TravelMode;
    /**
     * If `true`, the outermost polygon (at the maximum break value) will be trimmed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#trimOuterPolygon)
     */
    trimOuterPolygon: boolean;
    /**
     * If polygons are being trimmed, provides the distance to trim.
     *
     * [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).
     *
     * [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 in the analysis.
     *
     * [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.
     *
     * [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 determine which network elements can be used by a vehicle.
     *
     * [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.
     *
     * [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 considered when 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.
     *
     * [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.
     *
     * [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.
     *
     * [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)
     */
    mergeSimilarPolygonRanges?: boolean;
    /**
     * The precision of the output geometry after generalization.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#outputLines)
     */
    outputLines?: "none" | "true-shape" | "true-shape-with-measure";
    /**
     * The type of output polygons to be generated in the result.
     *
     * [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 geometries returned with the analysis results.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#overlapLines)
     */
    overlapLines?: boolean;
    /**
     * Indicates if the polygons should overlap from multiple facilities.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#overlapPolygons)
     */
    overlapPolygons?: boolean;
    /**
     * The set of point barriers loaded as network locations during analysis.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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)
     */
    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)
     */
    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)
     */
    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)
     */
    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)
     */
    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)
     */
    splitPolygonsAtBreaks?: boolean;
    /**
     * Local date and time at the facility.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#travelDirection)
     */
    travelDirection?: "from-facility" | "to-facility";
    /**
     * A travel mode represents a means of transportation, such as driving or walking.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#travelMode)
     */
    travelMode?: TravelModeProperties;
    /**
     * If `true`, the outermost polygon (at the maximum break value) will be trimmed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaParameters.html#trimOuterPolygon)
     */
    trimOuterPolygon?: boolean;
    /**
     * If polygons are being trimmed, provides the distance to trim.
     *
     * [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).
     *
     * [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 in the analysis.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#messages)
     */
    messages: supportNAMessage[];
    /**
     * The point barriers are returned only if `ServiceAreaParameters.returnPointBarriers = true` (which is not the default).
     *
     * [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).
     *
     * [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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-ServiceAreaSolveResult.html#messages)
     */
    messages?: supportNAMessageProperties[];
    /**
     * The point barriers are returned only if `ServiceAreaParameters.returnPointBarriers = true` (which is not the default).
     *
     * [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).
     *
     * [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).
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-StatisticDefinition.html#outStatisticFieldName)
     */
    outStatisticFieldName: string;
    /**
     * The parameters for [percentile statistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-StatisticDefinition.html#statisticType).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-StatisticDefinition.html#statisticParameters)
     */
    statisticParameters: StatisticDefinitionStatisticParameters;
    /**
     * Defines the type of statistic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-StatisticDefinition.html#statisticType)
     */
    statisticType:
      | "count"
      | "sum"
      | "min"
      | "max"
      | "avg"
      | "stddev"
      | "var"
      | "percentile-continuous"
      | "percentile-discrete";
  }

  interface StatisticDefinitionConstructor {
    new (properties?: StatisticDefinitionProperties): StatisticDefinition;

    /**
     * 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;

    fromJSON(json: any): StatisticDefinition;
  }

  export const StatisticDefinition: StatisticDefinitionConstructor;

  interface StatisticDefinitionProperties {
    /**
     * Defines the field for which statistics will be calculated.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-StatisticDefinition.html#outStatisticFieldName)
     */
    outStatisticFieldName?: string;
    /**
     * The parameters for [percentile statistics](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-StatisticDefinition.html#statisticType).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-StatisticDefinition.html#statisticParameters)
     */
    statisticParameters?: StatisticDefinitionStatisticParameters;
    /**
     * Defines the type of statistic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-StatisticDefinition.html#statisticType)
     */
    statisticType?:
      | "count"
      | "sum"
      | "min"
      | "max"
      | "avg"
      | "stddev"
      | "var"
      | "percentile-continuous"
      | "percentile-discrete";
  }

  export interface StatisticDefinitionStatisticParameters extends Object {
    /**
     * Percentile value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-StatisticDefinition.html#statisticParameters)
     */
    value: number;
    /**
     * Specify `ASC` (ascending) or `DESC` (descending) to control the order of the data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-StatisticDefinition.html#statisticParameters)
     */
    orderBy?: "ASC" | "DESC";
  }

  interface TrimExtendParameters extends Accessor, JSONSupport {
    /**
     * A flag used with the `trimExtend` operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-TrimExtendParameters.html#extendHow)
     */
    extendHow:
      | "default-curve-extension"
      | "relocate-ends"
      | "keep-end-attributes"
      | "no-end-attributes"
      | "no-extend-at-from"
      | "no-extend-at-to";
    /**
     * The array of polylines to trim or extend.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-TrimExtendParameters.html#trimExtendTo)
     */
    trimExtendTo: Polyline;
  }

  interface TrimExtendParametersConstructor {
    new (properties?: TrimExtendParametersProperties): TrimExtendParameters;

    fromJSON(json: any): TrimExtendParameters;
  }

  export const TrimExtendParameters: TrimExtendParametersConstructor;

  interface TrimExtendParametersProperties {
    /**
     * A flag used with the `trimExtend` operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-TrimExtendParameters.html#extendHow)
     */
    extendHow?:
      | "default-curve-extension"
      | "relocate-ends"
      | "keep-end-attributes"
      | "no-end-attributes"
      | "no-extend-at-from"
      | "no-extend-at-to";
    /**
     * The array of polylines to trim or extend.
     *
     * [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.
     *
     * [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.
     *
     * [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 {
    /**
     * The base class for tasks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Task.html)
     */

    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.
     *
     * [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 TimeExtent extends Accessor, JSONSupport {
    /**
     * The end time of the time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html#end)
     */
    end: Date;
    /**
     * The start time of the time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html#start)
     */
    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;
    /**
     * Expands the TimeExtent so that the start and end dates are rounded down and up, respectively, to the parsed time unit.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html#expandTo)
     */
    expandTo(
      unit:
        | "milliseconds"
        | "seconds"
        | "minutes"
        | "hours"
        | "days"
        | "weeks"
        | "months"
        | "years"
        | "decades"
        | "centuries"
    ): TimeExtent;
    /**
     * Returns the time extent resulting from the intersection of a given time extent and parsed time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html#intersection)
     */
    intersection(timeExtent: TimeExtent): TimeExtent;
    /**
     * Returns the time extent resulting from the union of the current time extent and a given time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html#union)
     */
    union(timeExtent: TimeExtent): TimeExtent;
  }

  interface TimeExtentConstructor {
    /**
     * A period of time with a definitive [start](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html#start) and [end](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html#end) date.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html)
     */

    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)
     */
    end?: DateProperties;
    /**
     * The start time of the time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeExtent.html#start)
     */
    start?: DateProperties;
  }

  interface TimeInterval extends Accessor, JSONSupport {
    /**
     * Temporal units.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeInterval.html#unit)
     */
    unit:
      | "milliseconds"
      | "seconds"
      | "minutes"
      | "hours"
      | "days"
      | "weeks"
      | "months"
      | "years"
      | "decades"
      | "centuries";
    /**
     * The numerical value of the time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeInterval.html#value)
     */
    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 {
    /**
     * TimeInterval is a class that describes a length of time in one of ten temporal units such as seconds, days, or years.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeInterval.html)
     */

    new (properties?: TimeIntervalProperties): TimeInterval;

    fromJSON(json: any): TimeInterval;
  }

  export const TimeInterval: TimeIntervalConstructor;

  interface TimeIntervalProperties {
    /**
     * Temporal units.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeInterval.html#unit)
     */
    unit?:
      | "milliseconds"
      | "seconds"
      | "minutes"
      | "hours"
      | "days"
      | "weeks"
      | "months"
      | "years"
      | "decades"
      | "centuries";
    /**
     * The numerical value of the time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeInterval.html#value)
     */
    value?: number;
  }

  interface Viewpoint extends Accessor, JSONSupport {
    /**
     * The viewpoint camera (3D only).
     *
     * [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)
     */
    rotation: number;
    /**
     * The scale of the viewpoint.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html#scale)
     */
    scale: number;
    /**
     * The target geometry framed by the viewpoint.
     *
     * [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 {
    /**
     * Describes a point of view for a 2D or 3D view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html)
     */

    new (properties?: ViewpointProperties): Viewpoint;

    fromJSON(json: any): Viewpoint;
  }

  export const Viewpoint: ViewpointConstructor;

  interface ViewpointProperties {
    /**
     * The viewpoint camera (3D only).
     *
     * [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)
     */
    rotation?: number;
    /**
     * The scale of the viewpoint.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html#scale)
     */
    scale?: number;
    /**
     * The target geometry framed by the viewpoint.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#hitTest)
     */
    hitTest(x: number, y: number): Promise<Graphic>;
    /**
     * The method to implement that is responsible of drawing the content of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#render)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerView2D.html#tilesChanged)
     */
    tilesChanged(added: Tile[], removed: Tile[]): void;
  }

  interface BaseLayerView2DConstructor {
    /**
     * Represents the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) of a [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) after it has been added to a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) with a [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-2d-layers-BaseLayerView2D.html)
     */

    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.
     *
     * [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.
     *
     * [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.
     *
     * [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 module:esri/views/2d/layers/BaseLayerViewGL2D#Tile objects computed to cover the MapView's visible area.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#attach)
     */
    attach(): void;
    /**
     * Bind the designated rendering output surface and restore the correct viewport.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#bindRenderTarget)
     */
    bindRenderTarget(): 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#detach)
     */
    detach(): void;
    /**
     * Get the designated rendering output surface and corresponding viewport configuration.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#getRenderTarget)
     */
    getRenderTarget(): RenderTarget;
    /**
     * Method to implement that is responsible for providing objects hit at the specified screen coordinates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#hitTest)
     */
    hitTest(x: number, y: number): Promise<Graphic>;
    /**
     * The method to implement that is responsible of drawing the content of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#render)
     */
    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;
    /**
     * Tessellate an [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) into a rectangle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#tessellateExtent)
     */
    tessellateExtent(extent: Extent): Promise<TessellatedMesh>;
    /**
     * Tessellate a [Multipoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html) into quads (markers).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#tessellateMultipoint)
     */
    tessellateMultipoint(multipoint: Multipoint, footprint: Rect): Promise<TessellatedMesh>;
    /**
     * Tessellate a [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) into a quad (marker).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#tessellatePoint)
     */
    tessellatePoint(point: Point, footprint: Rect): Promise<TessellatedMesh>;
    /**
     * Tessellate a [Polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) into triangles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#tessellatePolygon)
     */
    tessellatePolygon(polygon: Polygon): Promise<TessellatedMesh>;
    /**
     * Tessellate a [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) into triangles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#tessellatePolyline)
     */
    tessellatePolyline(polyline: Polyline, width: number): Promise<TessellatedMesh>;
    /**
     * Method to implement, which notifies of tiles being added or removed for the current view state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#tilesChanged)
     */
    tilesChanged(added: BaseLayerViewGL2DTile[], removed: BaseLayerViewGL2DTile[]): void;
  }

  interface BaseLayerViewGL2DConstructor {
    /**
     * Represents the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) of a [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html) after it has been added to a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) with a [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-2d-layers-BaseLayerViewGL2D.html)
     */

    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 module:esri/views/2d/layers/BaseLayerViewGL2D#Tile objects computed to cover the MapView's visible area.
     *
     * [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 {
    /**
     * The WebGL or WebGL 2 context.
     *
     * [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;
  }

  /**
   * A vertex of a tessellated mesh.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#MeshVertex)
   */
  export interface MeshVertex extends Object {
    /**
     * The `x`-coordinate, expressed in the same units as 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-2d-layers-BaseLayerViewGL2D.html#MeshVertex)
     */
    x: number;
    /**
     * The `y`-coordinate, expressed in the same units as 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-2d-layers-BaseLayerViewGL2D.html#MeshVertex)
     */
    y: number;
    /**
     * The `x`-offset in screen space; this is used to extrude points (into quads) and polylines, and is 0 for polygons.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#MeshVertex)
     */
    xOffset: number;
    /**
     * The `y`-offset in screen space; this is used to extrude points (into quads) and polylines, and is 0 for polygons.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#MeshVertex)
     */
    yOffset: number;
    /**
     * The `u`-coordinate for texture mapping.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#MeshVertex)
     */
    uTexcoord: number;
    /**
     * The `v`-coordinate for texture mapping.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#MeshVertex)
     */
    vTexcoord: number;
    /**
     * The distance parameter for this vertex; this only applies when tessellating polylines.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#MeshVertex)
     */
    distance: number;
  }

  /**
   * A rectangle in screen-space.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#Rect)
   */
  export interface Rect extends Object {
    /**
     * The `x`-coordinate of the upper-left corner of the rectangle, relative to the anchor of the marker.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#Rect)
     */
    x: number;
    /**
     * The `y`-coordinate of the upper-left corner of the rectangle, relative to the anchor of the marker.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#Rect)
     */
    y: number;
    /**
     * Width of the rectangle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#Rect)
     */
    width: number;
    /**
     * Height of the rectangle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#Rect)
     */
    height: number;
  }

  /**
   * The destination to which [render()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#render) should direct its output.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#RenderTarget)
   */
  export interface RenderTarget extends Object {
    /**
     * The framebuffer where the [render()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#render) method should direct its output.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#RenderTarget)
     */
    framebuffer: any;
    /**
     * A viewport that fully covers `framebuffer`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#RenderTarget)
     */
    viewport: number[];
  }

  /**
   * The triangle mesh resulting from a tessellation operation.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#TessellatedMesh)
   */
  export interface TessellatedMesh extends Object {
    /**
     * The vertices that make up the mesh.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#TessellatedMesh)
     */
    vertices: MeshVertex[];
    /**
     * The indices of the triangles that connect vertices together; each consecutive triplet of indices denotes a triangle.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-layers-BaseLayerViewGL2D.html#TessellatedMesh)
     */
    indices: number[];
  }

  /**
   * 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.
     *
     * [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.
     *
     * [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 extends Accessor, JSONSupport {
    /**
     * 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.
     *
     * [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.
     *
     * [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)
     */
    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)
     */
    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)
     */
    toScreen(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#toScreenNoRotation)
     */
    toScreenNoRotation(out: number[], x: number, y: number): number[];
  }

  interface ViewStateConstructor {
    /**
     * Object that holds information about the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-2d-ViewState.html)
     */

    new (properties?: ViewStateProperties): ViewState;

    fromJSON(json: any): ViewState;
  }

  export const ViewState: ViewStateConstructor;

  interface ViewStateProperties {}

  /**
   * map/scene on screen.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html)
   */
  interface externalRenderers {
    /**
     * Adds an external renderer to the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#add)
     */
    add(view: SceneView, renderer: ExternalRenderer): void;
    /**
     * Transforms positions from the internal rendering coordinate system to the output spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#fromRenderCoordinates)
     */
    fromRenderCoordinates(
      view: SceneView,
      srcCoordinates: number[] | Float32Array,
      srcStart: number,
      destCoordinates: number[] | Float32Array,
      destStart: number,
      destSpatialReference: SpatialReference,
      count: number
    ): number[] | Float32Array;
    /**
     * Get the render representation of the current camera of a view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#getRenderCamera)
     */
    getRenderCamera(view: SceneView): RenderCamera;
    /**
     * Removes an external renderer from the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#remove)
     */
    remove(view: SceneView, renderer: ExternalRenderer): void;
    /**
     * Computes a 4x4 affine transformation matrix that constitutes a linear coordinate transformation from a local Cartesian coordinate system to the virtual world coordinate system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#renderCoordinateTransformAt)
     */
    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)
     */
    requestRender(view: SceneView): void;
    /**
     * Transforms positions from the given spatial reference to the internal rendering coordinate system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#toRenderCoordinates)
     */
    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).
     *
     * [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.
     *
     * [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.
     *
     * [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).
   *
   * [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 render pixel ratio.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderCamera)
     */
    pixelRatio: number;
    /**
     * The viewport (x, y, width, height).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-externalRenderers.html#RenderCamera)
     */
    viewport: any;
  }

  /**
   * 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 sun lighting 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 SliceLayerView3D extends LayerView {
    /**
     * Among all the slice objects in the scene, only one is allowed to be the active slice.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-layers-SliceLayerView3D.html#active)
     */
    active: boolean;

    type: "slice-3d";
  }

  interface SliceLayerView3DConstructor {
    /**
     * The layerview for a [SliceLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SliceLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-layers-SliceLayerView3D.html)
     */

    new (properties?: SliceLayerView3DProperties): SliceLayerView3D;

    /**
     * This property holds internal state
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-layers-SliceLayerView3D.html#layerViewData)
     */
    layerViewData: void;
  }

  export const SliceLayerView3D: SliceLayerView3DConstructor;

  interface SliceLayerView3DProperties extends LayerViewProperties {
    /**
     * Among all the slice objects in the scene, only one is allowed to be the active slice.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-layers-SliceLayerView3D.html#active)
     */
    active?: boolean;

    type?: "slice-3d";
  }

  /**
   * This class contains performance information like memory usage and number of features for a specific layer.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-support-LayerPerformanceInfo.html)
   */
  interface LayerPerformanceInfo {
    /**
     * The number of features displayed in the SceneView.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-support-LayerPerformanceInfo.html#displayedNumberOfFeatures)
     */
    displayedNumberOfFeatures: number;
    /**
     * The layer corresponding to the memory usage information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-support-LayerPerformanceInfo.html#layer)
     */
    layer: Layer;
    /**
     * The maximum number of features that can be displayed in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-support-LayerPerformanceInfo.html#maximumNumberOfFeatures)
     */
    maximumNumberOfFeatures: number;
    /**
     * An estimate of the memory currently in use by the layer, in bytes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-support-LayerPerformanceInfo.html#memory)
     */
    memory: number;
    /**
     * The total number of features contained in the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-support-LayerPerformanceInfo.html#totalNumberOfFeatures)
     */
    totalNumberOfFeatures: number;
  }

  export const LayerPerformanceInfo: LayerPerformanceInfo;

  /**
   * This class contains information about performance in the scene like global memory usage and additional details for layers about memory consumption and number of features.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-support-SceneViewPerformanceInfo.html)
   */
  interface SceneViewPerformanceInfo {
    /**
     * An estimate of the memory used by the [Edges3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-edges-Edges3D.html) feature when added to 3D objects in [SceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html) or to polygons with [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html) symbols.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-support-SceneViewPerformanceInfo.html#edgesMemory)
     */
    edgesMemory: number;
    /**
     * An array representing detailed information about memory usage of most layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-support-SceneViewPerformanceInfo.html#layerPerformanceInfos)
     */
    layerPerformanceInfos: LayerPerformanceInfo[];
    /**
     * Quality level as a number between 0 and 1.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-support-SceneViewPerformanceInfo.html#quality)
     */
    quality: number;
    /**
     * An estimate of the memory currently in use by [ElevationLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html) and [tiled layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html), in bytes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-support-SceneViewPerformanceInfo.html#terrainMemory)
     */
    terrainMemory: number;
    /**
     * The total memory available to the SceneView, in bytes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-support-SceneViewPerformanceInfo.html#totalMemory)
     */
    totalMemory: number;
    /**
     * An estimate of the memory that is in use by the SceneView, in bytes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-support-SceneViewPerformanceInfo.html#usedMemory)
     */
    usedMemory: number;
  }

  export const SceneViewPerformanceInfo: SceneViewPerformanceInfo;

  interface BasemapView extends Accessor {
    /**
     * 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 base layers in the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BasemapView.html#baseLayerViews)
     */
    readonly baseLayerViews: Collection<LayerView>;
    /**
     * 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 reference layers in the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BasemapView.html#referenceLayerViews)
     */
    readonly referenceLayerViews: Collection<LayerView>;
    /**
     * Value is `true` when the basemap is updating; for example, if it is in the process of fetching data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BasemapView.html#updating)
     */
    readonly updating: boolean;
    /**
     * References 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BasemapView.html#view)
     */
    view: MapView | SceneView;
  }

  interface BasemapViewConstructor {
    /**
     * Represents the view for a single basemap after it has been added to either a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or 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-BasemapView.html)
     */

    new (properties?: BasemapViewProperties): BasemapView;
  }

  export const BasemapView: BasemapViewConstructor;

  interface BasemapViewProperties {
    /**
     * References 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BasemapView.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  interface BreakpointsOwner {
    /**
     * A convenience property used for defining the breakpoints on the [height](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#height) and [width](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#width) of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#breakpoints)
     */
    breakpoints: BreakpointsOwnerBreakpoints;
    /**
     * A convenience property indicating the general size of the view's height.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#heightBreakpoint)
     */
    heightBreakpoint: "xsmall" | "small" | "medium" | "large" | "xlarge";
    /**
     * A convenience property indicating the view's orientation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#orientation)
     */
    readonly orientation: "landscape" | "portrait";
    /**
     * A convenience property indicating the general size of the view's width.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#widthBreakpoint)
     */
    widthBreakpoint: "xsmall" | "small" | "medium" | "large" | "xlarge";
  }

  interface BreakpointsOwnerConstructor {
    new (): BreakpointsOwner;
  }

  export const BreakpointsOwner: BreakpointsOwnerConstructor;

  interface BreakpointsOwnerProperties {
    /**
     * A convenience property used for defining the breakpoints on the [height](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#height) and [width](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#width) of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#breakpoints)
     */
    breakpoints?: BreakpointsOwnerBreakpoints;
    /**
     * A convenience property indicating the general size of the view's height.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#heightBreakpoint)
     */
    heightBreakpoint?: "xsmall" | "small" | "medium" | "large" | "xlarge";
    /**
     * A convenience property indicating the general size of the view's width.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#widthBreakpoint)
     */
    widthBreakpoint?: "xsmall" | "small" | "medium" | "large" | "xlarge";
  }

  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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#breakpoints)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#breakpoints)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#breakpoints)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-BreakpointsOwner.html#breakpoints)
     */
    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).
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-DOMContainer.html#height)
     */
    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).
     *
     * [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)
     */
    readonly resizing: boolean;
    /**
     * An array containing the width and height of the view in pixels, e.g.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-DOMContainer.html#suspended)
     */
    readonly suspended: boolean;
    /**
     * Exposes the default widgets available in the view and allows you to toggle them on and off.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-DOMContainer.html#width)
     */
    readonly width: number;
  }

  interface DOMContainerConstructor {
    new (): DOMContainer;
  }

  export const DOMContainer: DOMContainerConstructor;

  interface DOMContainerProperties {
    /**
     * The `id` or node representing the DOM element containing the view.
     *
     * [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).
     *
     * [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 on and off.
     *
     * [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).
     *
     * [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).
     *
     * [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)
     */
    create(
      drawAction: "point" | "multipoint" | "polyline" | "polygon" | "rectangle" | "circle" | "ellipse",
      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 {
    /**
     * The Draw class provides advanced drawing capabilities for developers who need complete control over creating temporary graphics with different geometries.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-Draw.html)
     */

    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).
     *
     * [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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-Draw.html#create)
     */
    mode?: "hybrid" | "freehand" | "click";
  }

  interface DrawAction extends Accessor, Evented {
    /**
     * Controls whether the created geometry will have z coordinates or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#hasZ)
     */
    hasZ: boolean;
    /**
     * Two-dimensional array of numbers representing the coordinates of each vertex comprising the geometry being drawn.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#vertices)
     */
    readonly vertices: number[][];
    /**
     * 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;
    /**
     * Maps the given screen point to a map point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#getCoordsAndPointFromScreenPoint)
     */
    getCoordsAndPointFromScreenPoint(screenPoint: DrawActionScreenPoint): FromScreenPointResult | any;
    /**
     * Maps the given screen point to a map point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#getCoordsFromScreenPoint)
     */
    getCoordsFromScreenPoint(screenPoint: DrawActionScreenPoint): number[] | any;
    /**
     * Incrementally redo actions recorded in the stack.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#redo)
     */
    redo(): void;
    /**
     * Maps the given screen point to a map point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#screenToMap)
     */
    screenToMap(screenPoint: DrawActionScreenPoint): Point | any;
    /**
     * Incrementally undo actions recorded in the stack.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#undo)
     */
    undo(): void;
  }

  interface DrawActionConstructor {
    /**
     * DrawAction is the base class for all draw actions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html)
     */

    new (properties?: DrawActionProperties): DrawAction;
  }

  export const DrawAction: DrawActionConstructor;

  interface DrawActionProperties {
    /**
     * Controls whether the created geometry will have z coordinates or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#hasZ)
     */
    hasZ?: boolean;
    /**
     * 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;
  }

  /**
   * The result object of the [getCoordsAndPointFromScreenPoint()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#getCoordsAndPointFromScreenPoint) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#FromScreenPointResult)
   */
  export interface FromScreenPointResult extends Object {
    /**
     * Array of x, y, and z component (if hasZ is enabled).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#FromScreenPointResult)
     */
    vertex: number[];
    /**
     * The map point of the point associated with the given screen point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#FromScreenPointResult)
     */
    mapPoint: Point;
  }

  /**
   * An object representing a point on the screen.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#ScreenPoint)
   */
  export interface DrawActionScreenPoint extends Object {
    /**
     * The x coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#ScreenPoint)
     */
    x: number;
    /**
     * The y coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-DrawAction.html#ScreenPoint)
     */
    y: number;
  }

  interface MultipointDrawAction extends DrawAction {
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-MultipointDrawAction.html#complete)
     */
    complete(): void;

    on(name: "cursor-update", eventHandler: MultipointDrawActionCursorUpdateEventHandler): IHandle;

    on(name: "vertex-add", eventHandler: MultipointDrawActionVertexAddEventHandler): IHandle;

    on(name: "vertex-remove", eventHandler: MultipointDrawActionVertexRemoveEventHandler): IHandle;

    on(name: "draw-complete", eventHandler: MultipointDrawActionDrawCompleteEventHandler): IHandle;

    on(name: "undo", eventHandler: MultipointDrawActionUndoEventHandler): IHandle;

    on(name: "redo", eventHandler: MultipointDrawActionRedoEventHandler): IHandle;
  }

  interface MultipointDrawActionConstructor {
    /**
     * This class uses the view events to generate a set of coordinates to create a new [Multipoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html) geometry using [Draw](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-Draw.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-MultipointDrawAction.html)
     */

    new (properties?: MultipointDrawActionProperties): MultipointDrawAction;
  }

  export const MultipointDrawAction: MultipointDrawActionConstructor;

  interface MultipointDrawActionProperties extends DrawActionProperties {}

  export interface MultipointDrawActionCursorUpdateEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: "cursor-update";

    vertexIndex: number;

    vertices: number[][];
  }

  export interface MultipointDrawActionDrawCompleteEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: "draw-complete";

    vertices: number[][];
  }

  export interface MultipointDrawActionRedoEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: string;

    vertexIndex: number;

    vertices: number[][];
  }

  export interface MultipointDrawActionUndoEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: string;

    vertexIndex: number;

    vertices: number[][];
  }

  export interface MultipointDrawActionVertexAddEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: "vertex-add";

    vertexIndex: number;

    vertices: number[][];
  }

  export interface MultipointDrawActionVertexRemoveEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: "vertex-remove";

    vertexIndex: number;

    vertices: number[][];
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PointDrawAction.html#complete)
     */
    complete(): void;

    on(name: "cursor-update", eventHandler: PointDrawActionCursorUpdateEventHandler): IHandle;

    on(name: "draw-complete", eventHandler: PointDrawActionDrawCompleteEventHandler): IHandle;
  }

  interface PointDrawActionConstructor {
    /**
     * This class uses the view events to generate a set of coordinates to create a new [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) geometry using [Draw](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-Draw.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PointDrawAction.html)
     */

    new (properties?: PointDrawActionProperties): PointDrawAction;
  }

  export const PointDrawAction: PointDrawActionConstructor;

  interface PointDrawActionProperties extends DrawActionProperties {}

  export interface PointDrawActionCursorUpdateEvent {
    coordinates: number[];

    defaultPrevented: boolean;

    preventDefault: Function;

    type: "cursor-update";
  }

  export interface PointDrawActionDrawCompleteEvent {
    coordinates: number[];

    defaultPrevented: boolean;

    preventDefault: Function;

    type: "draw-complete";
  }

  interface PolygonDrawAction extends DrawAction {
    /**
     * The drawing mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolygonDrawAction.html#mode)
     */
    mode: "hybrid" | "freehand" | "click";

    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolygonDrawAction.html#complete)
     */
    complete(): void;
    /**
     * Returns the actual z value to be used when drawing geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolygonDrawAction.html#getGeometryZValue)
     */
    getGeometryZValue(): void;

    on(name: "cursor-update", eventHandler: PolygonDrawActionCursorUpdateEventHandler): IHandle;

    on(name: "vertex-add", eventHandler: PolygonDrawActionVertexAddEventHandler): IHandle;

    on(name: "vertex-remove", eventHandler: PolygonDrawActionVertexRemoveEventHandler): IHandle;

    on(name: "draw-complete", eventHandler: PolygonDrawActionDrawCompleteEventHandler): IHandle;

    on(name: "undo", eventHandler: PolygonDrawActionUndoEventHandler): IHandle;

    on(name: "redo", eventHandler: PolygonDrawActionRedoEventHandler): IHandle;
  }

  interface PolygonDrawActionConstructor {
    /**
     * This class uses different [events](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolygonDrawAction.html#events-summary) to generate a set of vertices to create a new [Polygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polygon.html) geometry using [Draw](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-Draw.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolygonDrawAction.html)
     */

    new (properties?: PolygonDrawActionProperties): PolygonDrawAction;
  }

  export const PolygonDrawAction: PolygonDrawActionConstructor;

  interface PolygonDrawActionProperties extends DrawActionProperties {
    /**
     * The drawing mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolygonDrawAction.html#mode)
     */
    mode?: "hybrid" | "freehand" | "click";
  }

  export interface PolygonDrawActionCursorUpdateEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: "cursor-update";

    vertexIndex: number;

    vertices: number[][];
  }

  export interface PolygonDrawActionDrawCompleteEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: "draw-complete";

    vertices: number[][];
  }

  export interface PolygonDrawActionRedoEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: string;

    vertexIndex: number;

    vertices: number[][];
  }

  export interface PolygonDrawActionUndoEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: string;

    vertexIndex: number;

    vertices: number[][];
  }

  export interface PolygonDrawActionVertexAddEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: "vertex-add";

    vertexIndex: number;

    vertices: number[][];
  }

  export interface PolygonDrawActionVertexRemoveEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: "vertex-remove";

    vertexIndex: number;

    vertices: number[][];
  }

  interface PolylineDrawAction extends DrawAction {
    /**
     * The drawing mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolylineDrawAction.html#mode)
     */
    mode: "hybrid" | "freehand" | "click";

    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolylineDrawAction.html#complete)
     */
    complete(): void;

    on(name: "cursor-update", eventHandler: PolylineDrawActionCursorUpdateEventHandler): IHandle;

    on(name: "vertex-add", eventHandler: PolylineDrawActionVertexAddEventHandler): IHandle;

    on(name: "vertex-remove", eventHandler: PolylineDrawActionVertexRemoveEventHandler): IHandle;

    on(name: "draw-complete", eventHandler: PolylineDrawActionDrawCompleteEventHandler): IHandle;

    on(name: "undo", eventHandler: PolylineDrawActionUndoEventHandler): IHandle;

    on(name: "redo", eventHandler: PolylineDrawActionRedoEventHandler): IHandle;
  }

  interface PolylineDrawActionConstructor {
    /**
     * This class uses different [events](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolylineDrawAction.html#events-summary) to generate a set of vertices to create a new [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html) geometry using [Draw](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-Draw.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolylineDrawAction.html)
     */

    new (properties?: PolylineDrawActionProperties): PolylineDrawAction;
  }

  export const PolylineDrawAction: PolylineDrawActionConstructor;

  interface PolylineDrawActionProperties extends DrawActionProperties {
    /**
     * The drawing mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-PolylineDrawAction.html#mode)
     */
    mode?: "hybrid" | "freehand" | "click";
  }

  export interface PolylineDrawActionCursorUpdateEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: "cursor-update";

    vertexIndex: number;

    vertices: number[][];
  }

  export interface PolylineDrawActionDrawCompleteEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: "draw-complete";

    vertices: number[][];
  }

  export interface PolylineDrawActionRedoEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: string;

    vertexIndex: number;

    vertices: number[][];
  }

  export interface PolylineDrawActionUndoEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: string;

    vertexIndex: number;

    vertices: number[][];
  }

  export interface PolylineDrawActionVertexAddEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: "vertex-add";

    vertexIndex: number;

    vertices: number[][];
  }

  export interface PolylineDrawActionVertexRemoveEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: "vertex-remove";

    vertexIndex: number;

    vertices: number[][];
  }

  interface SegmentDrawAction extends DrawAction {
    /**
     * The drawing mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-SegmentDrawAction.html#mode)
     */
    mode: "freehand" | "click";

    /**
     * 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;

    on(name: "cursor-update", eventHandler: SegmentDrawActionCursorUpdateEventHandler): IHandle;

    on(name: "draw-complete", eventHandler: SegmentDrawActionDrawCompleteEventHandler): IHandle;

    on(name: "vertex-add", eventHandler: SegmentDrawActionVertexAddEventHandler): IHandle;
  }

  interface SegmentDrawActionConstructor {
    /**
     * This class uses different [events](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-SegmentDrawAction.html#events-summary) to generate a set of vertices to create a geometry with [drag mode](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-SegmentDrawAction.html#mode) or with two clicks.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-SegmentDrawAction.html)
     */

    new (properties?: SegmentDrawActionProperties): SegmentDrawAction;
  }

  export const SegmentDrawAction: SegmentDrawActionConstructor;

  interface SegmentDrawActionProperties extends DrawActionProperties {
    /**
     * The drawing mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-draw-SegmentDrawAction.html#mode)
     */
    mode?: "freehand" | "click";
  }

  export interface SegmentDrawActionCursorUpdateEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: "cursor-update";

    vertexIndex: number;

    vertices: number[][];
  }

  export interface SegmentDrawActionDrawCompleteEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: "draw-complete";

    vertices: number[][];
  }

  export interface SegmentDrawActionVertexAddEvent {
    defaultPrevented: boolean;

    preventDefault: Function;

    type: "vertex-add";

    vertexIndex: number;

    vertices: number[][];
  }

  interface GroundView extends Accessor {
    /**
     * An elevation sampler that may be used to sample and query elevation values from the ground surface that is currently being displayed.
     *
     * [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)
     */
    readonly updating: boolean;
  }

  interface GroundViewConstructor {
    /**
     * This class represents the view for the [Ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html) of a map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-GroundView.html)
     */

    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 {
    /**
     * Properties and configuration of a gamepad.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-input-gamepad-GamepadInputDevice.html)
     */

    new (properties?: GamepadInputDeviceProperties): GamepadInputDevice;
  }

  export const GamepadInputDevice: GamepadInputDeviceConstructor;

  interface GamepadInputDeviceProperties {}

  interface GamepadSettings extends Accessor {
    /**
     * A readonly collection of all gamepads detected.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-input-gamepad-GamepadSettings.html#enabledFocusMode)
     */
    enabledFocusMode: "document" | "view" | "none";
  }

  interface GamepadSettingsConstructor {
    /**
     * Gamepad input specific configuration settings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-input-gamepad-GamepadSettings.html)
     */

    new (properties?: GamepadSettingsProperties): GamepadSettings;
  }

  export const GamepadSettings: GamepadSettingsConstructor;

  interface GamepadSettingsProperties {
    /**
     * Determines what focus is required for gamepad events to be dispatched.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-input-gamepad-GamepadSettings.html#enabledFocusMode)
     */
    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 {
    /**
     * Input device related configuration settings on the View.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-input-Input.html)
     */

    new (properties?: InputProperties): Input;
  }

  export const Input: InputConstructor;

  interface InputProperties {}

  interface FeatureSnappingLayerSource extends Accessor {
    /**
     * Indicates whether feature snapping is turned on or off.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-FeatureSnappingLayerSource.html#enabled)
     */
    enabled: boolean;
    /**
     * The source layer used for snapping.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-FeatureSnappingLayerSource.html#layer)
     */
    readonly layer: FeatureLayer | GraphicsLayer | GeoJSONLayer | CSVLayer | WFSLayer;
  }

  interface FeatureSnappingLayerSourceConstructor {
    /**
     * The FeatureSnappingLayerSource specifies which layers will be utilized for snapping in the [SnappingOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-SnappingOptions.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-FeatureSnappingLayerSource.html)
     */

    new (properties?: FeatureSnappingLayerSourceProperties): FeatureSnappingLayerSource;
  }

  export const FeatureSnappingLayerSource: FeatureSnappingLayerSourceConstructor;

  interface FeatureSnappingLayerSourceProperties {
    /**
     * Indicates whether feature snapping is turned on or off.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-FeatureSnappingLayerSource.html#enabled)
     */
    enabled?: boolean;
  }

  interface SnappingOptions extends Accessor {
    /**
     * Snapping distance for snapping in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-SnappingOptions.html#distance)
     */
    distance: number;
    /**
     * Global configuration to turn snapping on or off.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-SnappingOptions.html#enabled)
     */
    enabled: boolean;
    /**
     * Global configuration option to turn feature snapping on or off.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-SnappingOptions.html#featureEnabled)
     */
    featureEnabled: boolean;
    /**
     * List of sources for feature snapping.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-SnappingOptions.html#featureSources)
     */
    featureSources: Collection<FeatureSnappingLayerSource>;
    /**
     * Global configuration option to turn self snapping (within one feature while either drawing or reshaping) on or off.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-SnappingOptions.html#selfEnabled)
     */
    selfEnabled: boolean;
  }

  interface SnappingOptionsConstructor {
    /**
     * The `SnappingOptions` allows users to configure snapping for their editing or drawing experience in both the [Sketch](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#snappingOptions) and [Editor](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#snappingOptions) widgets.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-SnappingOptions.html)
     */

    new (properties?: SnappingOptionsProperties): SnappingOptions;
  }

  export const SnappingOptions: SnappingOptionsConstructor;

  interface SnappingOptionsProperties {
    /**
     * Snapping distance for snapping in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-SnappingOptions.html#distance)
     */
    distance?: number;
    /**
     * Global configuration to turn snapping on or off.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-SnappingOptions.html#enabled)
     */
    enabled?: boolean;
    /**
     * Global configuration option to turn feature snapping on or off.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-SnappingOptions.html#featureEnabled)
     */
    featureEnabled?: boolean;
    /**
     * List of sources for feature snapping.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-SnappingOptions.html#featureSources)
     */
    featureSources?: CollectionProperties<FeatureSnappingLayerSourceProperties>;
    /**
     * Global configuration option to turn self snapping (within one feature while either drawing or reshaping) on or off.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-SnappingOptions.html#selfEnabled)
     */
    selfEnabled?: boolean;
  }

  interface BuildingComponentSublayerView extends Accessor {
    /**
     * 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-buildingSublayers-BuildingComponentSublayer.html#renderer) and additional fields defined on the [BuildingComponentSublayer.outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#outFields) or [BuildingSceneLayer.outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html#outFields).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.html#filter)
     */
    filter: FeatureFilter;
    /**
     * The sublayer being viewed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.html#sublayer)
     */
    readonly sublayer: BuildingComponentSublayer;
    /**
     * Value is `true` if the sublayer is suspended (i.e., sublayer will not redraw or update itself when the extent changes).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.html#suspended)
     */
    readonly suspended: boolean;
    /**
     * Value is `true` when the sublayer is updating; for example, if it is in the process of fetching data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.html#updating)
     */
    readonly updating: boolean;

    /**
     * Creates a query parameter object that can be used to fetch features as they are being displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.html#createQuery)
     */
    createQuery(): supportQuery;
    /**
     * Highlights the given feature(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.html#highlight)
     */
    highlight(target?: Graphic | Graphic[] | number | number[]): Handle;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features in the layer view and returns the 3D [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of features that satisfy the query.
     *
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features in the layer view and returns the 3D [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of features that satisfy the query. If query parameters are not provided, the extent and count of all loaded features are returned.  Read more about queries in the Query section of the [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html) class description.  To query for the extent of features directly from a Scene Service rather than those loaded for the current view, you must use the [BuildingComponentSublayer.queryExtent()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#queryExtent) method.  For making attribute based queries on a BuildingComponentSublayerView you need to specify the required fields in the [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#outFields) property of the BuildingComponentSublayer to ensure that attribute values are available on the client for querying. You can use [availableFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.html#availableFields) to inspect which fields are available on the client. [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.html#queryExtent)
     */
    queryExtent(
      query?: supportQuery | supportQueryProperties,
      options?: BuildingComponentSublayerViewQueryExtentOptions
    ): Promise<any>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features in the layer view and returns the number of features that satisfy the query.
     *
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features in the layer view and returns the number of features that satisfy the query. If query parameters are not provided, the count of all loaded features is returned.  To query for the count of features directly from a Scene Service rather than those loaded for the current view, you must use the [BuildingComponentSublayer.queryFeatureCount()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#queryFeatureCount) method.  For making attribute based queries on a BuildingSceneLayerView you need to specify the required fields in the [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html#outFields) property of the BuildingComponentSublayer to ensure that attribute values are available on the client for querying. You can use [availableFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.html#availableFields) to inspect which fields are available on the client. Read more about queries in the Query section of the [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html) class description. [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.html#queryFeatureCount)
     */
    queryFeatureCount(
      query?: supportQuery | supportQueryProperties,
      options?: BuildingComponentSublayerViewQueryFeatureCountOptions
    ): Promise<number>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features in the layer view and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.html#queryFeatures)
     */
    queryFeatures(
      query?: supportQuery | supportQueryProperties,
      options?: BuildingComponentSublayerViewQueryFeaturesOptions
    ): Promise<supportFeatureSet>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features in the layer view and returns an array of the ObjectIDs of features that satisfy the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.html#queryObjectIds)
     */
    queryObjectIds(
      query?: supportQuery | supportQueryProperties,
      options?: BuildingComponentSublayerViewQueryObjectIdsOptions
    ): Promise<number[]>;
  }

  interface BuildingComponentSublayerViewConstructor {
    /**
     * Represents the sublayer view of a [BuildingComponentSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.html)
     */

    new (properties?: BuildingComponentSublayerViewProperties): BuildingComponentSublayerView;
  }

  export const BuildingComponentSublayerView: BuildingComponentSublayerViewConstructor;

  interface BuildingComponentSublayerViewProperties {
    /**
     * Applies a client-side [FeatureFilter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html) to the displayed data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.html#filter)
     */
    filter?: FeatureFilterProperties;
  }

  export interface BuildingComponentSublayerViewQueryExtentOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.html#queryExtent)
     */
    signal?: AbortSignal;
  }

  export interface BuildingComponentSublayerViewQueryFeatureCountOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.html#queryFeatureCount)
     */
    signal?: AbortSignal;
  }

  export interface BuildingComponentSublayerViewQueryFeaturesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.html#queryFeatures)
     */
    signal?: AbortSignal;
  }

  export interface BuildingComponentSublayerViewQueryObjectIdsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.html#queryObjectIds)
     */
    signal?: AbortSignal;
  }

  interface BuildingSceneLayerView extends LayerView {
    /**
     * The layer being viewed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingSceneLayerView.html#layer)
     */
    readonly layer: BuildingSceneLayer;
    /**
     * Collection of [sublayer views](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingComponentSublayerView.html) for all the component sublayers of the BuildingSceneLayer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingSceneLayerView.html#sublayerViews)
     */
    readonly sublayerViews: Collection<BuildingComponentSublayerView>;

    /**
     * Highlights the given feature(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-BuildingSceneLayerView.html#highlight)
     */
    highlight(target?: Graphic | Graphic[]): Handle;
  }

  interface BuildingSceneLayerViewConstructor {
    /**
     * Represents the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) of a [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html) after it has been added to a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) in 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-layers-BuildingSceneLayerView.html)
     */

    new (properties?: BuildingSceneLayerViewProperties): BuildingSceneLayerView;
  }

  export const BuildingSceneLayerView: BuildingSceneLayerViewConstructor;

  interface BuildingSceneLayerViewProperties extends LayerViewProperties {}

  interface CSVLayerView 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-CSVLayer.html#renderer), [labeling](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#labelingInfo), [elevation info](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#elevationInfo), and additional fields defined on the [CSVLayer.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-views-layers-CSVLayerView.html#availableFields)
     */
    readonly availableFields: string[];
    /**
     * The effect applied to the layer view.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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 being displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#createQuery)
     */
    createQuery(): supportQuery;
    /**
     * Highlights the given feature(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#highlight)
     */
    highlight(target?: Graphic | Graphic[] | number | number[]): Handle;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns the [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#queryExtent)
     */
    queryExtent(query?: supportQuery | supportQueryProperties, options?: CSVLayerViewQueryExtentOptions): Promise<any>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns the number of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#queryFeatureCount)
     */
    queryFeatureCount(
      query?: supportQuery | supportQueryProperties,
      options?: CSVLayerViewQueryFeatureCountOptions
    ): Promise<number>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#queryFeatures)
     */
    queryFeatures(
      query?: supportQuery | supportQueryProperties,
      options?: CSVLayerViewQueryFeaturesOptions
    ): Promise<supportFeatureSet>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns array of the ObjectIDs of features that satisfy the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-CSVLayerView.html#queryObjectIds)
     */
    queryObjectIds(
      query?: supportQuery | supportQueryProperties,
      options?: CSVLayerViewQueryObjectIdsOptions
    ): Promise<number[]>;
  }

  interface CSVLayerViewProperties extends LayerViewProperties {
    /**
     * The effect applied to the layer view.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#availableFields)
     */
    readonly availableFields: string[];
    /**
     * The effect applied to the layer view.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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 being displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#createQuery)
     */
    createQuery(): supportQuery;
    /**
     * Highlights the given feature(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#highlight)
     */
    highlight(target?: Graphic | Graphic[] | number | number[]): Handle;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns the [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryExtent)
     */
    queryExtent(
      query?: supportQuery | supportQueryProperties,
      options?: FeatureLayerViewQueryExtentOptions
    ): Promise<any>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns the number of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryFeatureCount)
     */
    queryFeatureCount(
      query?: supportQuery | supportQueryProperties,
      options?: FeatureLayerViewQueryFeatureCountOptions
    ): Promise<number>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryFeatures)
     */
    queryFeatures(
      query?: supportQuery | supportQueryProperties,
      options?: FeatureLayerViewQueryFeaturesOptions
    ): Promise<supportFeatureSet>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns array of the ObjectIDs of features that satisfy the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryObjectIds)
     */
    queryObjectIds(
      query?: supportQuery | supportQueryProperties,
      options?: FeatureLayerViewQueryObjectIdsOptions
    ): Promise<number[]>;
  }

  interface FeatureLayerViewConstructor {
    /**
     * Represents the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) of a [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) after it has been added to a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) in either 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html)
     */

    new (properties?: FeatureLayerViewProperties): FeatureLayerView;
  }

  export const FeatureLayerView: FeatureLayerViewConstructor;

  interface FeatureLayerViewProperties extends LayerViewProperties {
    /**
     * The effect applied to the layer view.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html#queryObjectIds)
     */
    signal?: AbortSignal;
  }

  interface GeoJSONLayerView 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-GeoJSONLayer.html#renderer), [labeling](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#labelingInfo), [elevation info](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#elevationInfo), and additional fields defined on the [GeoJSONLayer.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-views-layers-GeoJSONLayerView.html#availableFields)
     */
    readonly availableFields: string[];
    /**
     * The effect applied to the layer view.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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 being displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#createQuery)
     */
    createQuery(): supportQuery;
    /**
     * Highlights the given feature(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#highlight)
     */
    highlight(target?: Graphic | Graphic[] | number | number[]): Handle;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns the [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#queryExtent)
     */
    queryExtent(
      query?: supportQuery | supportQueryProperties,
      options?: GeoJSONLayerViewQueryExtentOptions
    ): Promise<any>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns the number of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#queryFeatureCount)
     */
    queryFeatureCount(
      query?: supportQuery | supportQueryProperties,
      options?: GeoJSONLayerViewQueryFeatureCountOptions
    ): Promise<number>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#queryFeatures)
     */
    queryFeatures(
      query?: supportQuery | supportQueryProperties,
      options?: GeoJSONLayerViewQueryFeaturesOptions
    ): Promise<supportFeatureSet>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns array of the ObjectIDs of features that satisfy the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#queryObjectIds)
     */
    queryObjectIds(
      query?: supportQuery | supportQueryProperties,
      options?: GeoJSONLayerViewQueryObjectIdsOptions
    ): Promise<number[]>;
  }

  interface GeoJSONLayerViewProperties extends LayerViewProperties {
    /**
     * The effect applied to the layer view.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoJSONLayerView.html#queryObjectIds)
     */
    signal?: AbortSignal;
  }

  interface GeoRSSLayerView extends LayerView {
    /**
     * Highlights the given feature(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-GeoRSSLayerView.html#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)
     */
    highlight(target?: Graphic | Graphic[] | number | number[]): Handle;
    /**
     * Returns all graphics available for drawing in the layer view as 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(): Promise<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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-ImageryLayerView.html#pixelData)
     */
    pixelData: PixelData;
  }

  interface ImageryLayerViewConstructor {
    /**
     * Represents the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) of an [ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html) after it has been added to a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) in either 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-ImageryLayerView.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-ImageryLayerView.html#pixelData)
     */
    pixelData?: PixelData;
  }

  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.
     *
     * [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 update itself 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, if it is in the process of fetching data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html#updating)
     */
    readonly updating: boolean;
    /**
     * When `true`, the layer is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html#visible)
     */
    visible: boolean;
  }

  interface LayerViewConstructor {
    /**
     * Represents the view for a single layer after it has been added to either a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or 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-layers-LayerView.html)
     */

    new (properties?: LayerViewProperties): LayerView;
  }

  export const LayerView: LayerViewConstructor;

  interface LayerViewProperties {
    /**
     * When `true`, the layer is visible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html#visible)
     */
    visible?: boolean;
  }

  interface OGCFeatureLayerView 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-OGCFeatureLayer.html#renderer), [labeling](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#labelingInfo), and [elevation info](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#elevationInfo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-OGCFeatureLayerView.html#availableFields)
     */
    readonly availableFields: string[];
    /**
     * The effect applied to the layer view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-OGCFeatureLayerView.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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-OGCFeatureLayerView.html#filter)
     */
    filter: FeatureFilter;

    /**
     * Creates a query parameter object that can be used to fetch features as they are being displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-OGCFeatureLayerView.html#createQuery)
     */
    createQuery(): supportQuery;
    /**
     * Highlights the given feature(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-OGCFeatureLayerView.html#highlight)
     */
    highlight(target?: Graphic | Graphic[] | number | number[]): Handle;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns the [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-OGCFeatureLayerView.html#queryExtent)
     */
    queryExtent(
      query?: supportQuery | supportQueryProperties,
      options?: OGCFeatureLayerViewQueryExtentOptions
    ): Promise<any>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns the number of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-OGCFeatureLayerView.html#queryFeatureCount)
     */
    queryFeatureCount(
      query?: supportQuery | supportQueryProperties,
      options?: OGCFeatureLayerViewQueryFeatureCountOptions
    ): Promise<number>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-OGCFeatureLayerView.html#queryFeatures)
     */
    queryFeatures(
      query?: supportQuery | supportQueryProperties,
      options?: OGCFeatureLayerViewQueryFeaturesOptions
    ): Promise<supportFeatureSet>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns array of the ObjectIDs of features that satisfy the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-OGCFeatureLayerView.html#queryObjectIds)
     */
    queryObjectIds(
      query?: supportQuery | supportQueryProperties,
      options?: OGCFeatureLayerViewQueryObjectIdsOptions
    ): Promise<number[]>;
  }

  interface OGCFeatureLayerViewConstructor {
    /**
     * Represents the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) of a [OGCFeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html) after it has been added to a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) in either 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-OGCFeatureLayerView.html)
     */

    new (properties?: OGCFeatureLayerViewProperties): OGCFeatureLayerView;
  }

  export const OGCFeatureLayerView: OGCFeatureLayerViewConstructor;

  interface OGCFeatureLayerViewProperties extends LayerViewProperties {
    /**
     * The effect applied to the layer view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-OGCFeatureLayerView.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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-OGCFeatureLayerView.html#filter)
     */
    filter?: FeatureFilterProperties;
  }

  export interface OGCFeatureLayerViewQueryExtentOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-OGCFeatureLayerView.html#queryExtent)
     */
    signal?: AbortSignal;
  }

  export interface OGCFeatureLayerViewQueryFeatureCountOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-OGCFeatureLayerView.html#queryFeatureCount)
     */
    signal?: AbortSignal;
  }

  export interface OGCFeatureLayerViewQueryFeaturesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-OGCFeatureLayerView.html#queryFeatures)
     */
    signal?: AbortSignal;
  }

  export interface OGCFeatureLayerViewQueryObjectIdsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-OGCFeatureLayerView.html#queryObjectIds)
     */
    signal?: AbortSignal;
  }

  interface PointCloudLayerView 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-PointCloudLayerView.html#availableFields)
     */
    readonly availableFields: string[];

    /**
     * Highlights the given point(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-PointCloudLayerView.html#highlight)
     */
    highlight(target?: Graphic | Graphic[]): Handle;
  }

  interface PointCloudLayerViewProperties extends LayerViewProperties {}

  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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#filter)
     */
    filter: FeatureFilter;
    /**
     * The scene layer being viewed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#layer)
     */
    readonly layer: SceneLayer;
    /**
     * The maximum number of features that can be displayed at a time.
     *
     * [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.
     *
     * [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 being displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#createQuery)
     */
    createQuery(): supportQuery;
    /**
     * Highlights the given feature(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#highlight)
     */
    highlight(target?: Graphic | Graphic[] | number | number[]): Handle;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features in the layer view and returns the 3D [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of features that satisfy the query.
     *
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features in the layer view and returns the 3D [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of features that satisfy the query. If query parameters are not provided, the extent and count of all loaded features are returned.  Read more about queries in the Query section of the [SceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html) class description.  To query for the extent of features directly from a Scene Service rather than those loaded for the current view, you must use the [SceneLayer.queryExtent()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#queryExtent) method.  For making attribute based queries on a SceneLayerView you need to specify the required fields in the [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#outFields) property of the SceneLayer to ensure that attribute values are available on the client for querying. You can use [availableFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#availableFields) to inspect which fields are available on the client. [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#queryExtent)
     */
    queryExtent(
      query?: supportQuery | supportQueryProperties,
      options?: SceneLayerViewQueryExtentOptions
    ): Promise<any>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features in the layer view and returns the number of features that satisfy the query.
     *
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features in the layer view and returns the number of features that satisfy the query. If query parameters are not provided, the count of all loaded features is returned. Read more about queries in the Query section of the [SceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html) class description.  To query for the count of features directly from a Scene Service rather than those loaded for the current view, you must use the [SceneLayer.queryFeatureCount()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#queryFeatureCount) method.  For making attribute based queries on a SceneLayerView you need to specify the required fields in the [outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#outFields) property of the SceneLayer to ensure that attribute values are available on the client for querying. You can use [availableFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#availableFields) to inspect which fields are available on the client. [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#queryFeatureCount)
     */
    queryFeatureCount(
      query?: supportQuery | supportQueryProperties,
      options?: SceneLayerViewQueryFeatureCountOptions
    ): Promise<number>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features in the layer view and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#queryFeatures)
     */
    queryFeatures(
      query?: supportQuery | supportQueryProperties,
      options?: SceneLayerViewQueryFeaturesOptions
    ): Promise<supportFeatureSet>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features in the layer view and returns an array of the ObjectIDs of features that satisfy the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-SceneLayerView.html#queryObjectIds)
     */
    queryObjectIds(
      query?: supportQuery | supportQueryProperties,
      options?: SceneLayerViewQueryObjectIdsOptions
    ): Promise<number[]>;
  }

  interface SceneLayerViewConstructor {
    /**
     * Represents the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) of a [SceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html) after it has been added to a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) in 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-layers-SceneLayerView.html)
     */

    new (properties?: SceneLayerViewProperties): SceneLayerView;
  }

  export const SceneLayerView: SceneLayerViewConstructor;

  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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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 the stream 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#connectionStatus)
     */
    readonly connectionStatus: "connected" | "disconnected";
    /**
     * The effect applied to the layer view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#filter)
     */
    filter: FeatureFilter;

    /**
     * Highlights the given feature(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#highlight)
     */
    highlight(target?: Graphic | Graphic[] | number | number[]): Handle;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns the [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#queryExtent)
     */
    queryExtent(
      query?: supportQuery | supportQueryProperties,
      options?: StreamLayerViewQueryExtentOptions
    ): Promise<any>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns the number of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#queryFeatureCount)
     */
    queryFeatureCount(
      query?: supportQuery | supportQueryProperties,
      options?: StreamLayerViewQueryFeatureCountOptions
    ): Promise<number>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#queryFeatures)
     */
    queryFeatures(
      query?: supportQuery | supportQueryProperties,
      options?: StreamLayerViewQueryFeaturesOptions
    ): Promise<supportFeatureSet>;
    /**
     * If a [trackIdField](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-TimeInfo.html#trackIdField) is specified on the stream service, this method executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FeatureSet.html) of the latest observations for each `trackId` that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#queryLatestObservations)
     */
    queryLatestObservations(
      query?: supportQuery | supportQueryProperties,
      options?: StreamLayerViewQueryLatestObservationsOptions
    ): Promise<supportFeatureSet>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-Query.html) against features available for drawing in the layer view and returns array of the ObjectIDs of features that satisfy the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#queryObjectIds)
     */
    queryObjectIds(
      query?: supportQuery | supportQueryProperties,
      options?: StreamLayerViewQueryObjectIdsOptions
    ): Promise<number[]>;

    on(name: "data-received", eventHandler: StreamLayerViewDataReceivedEventHandler): IHandle;

    on(name: "update-rate", eventHandler: StreamLayerViewUpdateRateEventHandler): IHandle;
  }

  interface StreamLayerViewConstructor {
    /**
     * Represents the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) of a [StreamLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html) after it has been added to a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) in either 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html)
     */

    new (properties?: StreamLayerViewProperties): StreamLayerView;
  }

  export const StreamLayerView: StreamLayerViewConstructor;

  interface StreamLayerViewProperties extends LayerViewProperties {
    /**
     * The effect applied to the layer view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#filter)
     */
    filter?: FeatureFilterProperties;
  }

  export interface StreamLayerViewDataReceivedEvent {
    attributes: any;

    geometry: any;
  }

  export interface StreamLayerViewQueryExtentOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#queryExtent)
     */
    signal?: AbortSignal;
  }

  export interface StreamLayerViewQueryFeatureCountOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#queryFeatureCount)
     */
    signal?: AbortSignal;
  }

  export interface StreamLayerViewQueryFeaturesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#queryFeatures)
     */
    signal?: AbortSignal;
  }

  export interface StreamLayerViewQueryLatestObservationsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#queryLatestObservations)
     */
    signal?: AbortSignal;
  }

  export interface StreamLayerViewQueryObjectIdsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-StreamLayerView.html#queryObjectIds)
     */
    signal?: AbortSignal;
  }

  export interface StreamLayerViewUpdateRateEvent {
    client: number;

    websocket: number;
  }

  interface FeatureEffect extends Accessor, JSONSupport {
    /**
     * The [effect](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#Effect) applied to features that do not meet the [filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#filter) requirements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#excludedEffect)
     */
    excludedEffect: Effect;
    /**
     * 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)
     */
    excludedLabelsVisible: boolean;
    /**
     * The filter that drives the effect.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#filter)
     */
    filter: FeatureFilter;
    /**
     * The [effect](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#Effect) applied to features that meet the [filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#filter) requirements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#includedEffect)
     */
    includedEffect: Effect;

    /**
     * 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 {
    /**
     * FeatureEffect allows you to emphasize or deemphasize features that satisfy a [filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#filter) in 2D [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-layers-support-FeatureEffect.html)
     */

    new (properties?: FeatureEffectProperties): FeatureEffect;

    fromJSON(json: any): FeatureEffect;
  }

  export const FeatureEffect: FeatureEffectConstructor;

  interface FeatureEffectProperties {
    /**
     * The [effect](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#Effect) applied to features that do not meet the [filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#filter) requirements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#excludedEffect)
     */
    excludedEffect?: any[] | 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)
     */
    excludedLabelsVisible?: boolean;
    /**
     * The filter that drives the effect.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#filter)
     */
    filter?: FeatureFilterProperties;
    /**
     * The [effect](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#Effect) applied to features that meet the [filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#filter) requirements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#includedEffect)
     */
    includedEffect?: any[] | string;
  }

  /**
   * Effect provides various filter functions that can be performed on a layer or a layer view to achieve different visual effects similar to how image filters (photo apps) work.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureEffect.html#Effect)
   */
  export type Effect = any[] | 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#distance)
     */
    distance: number;
    /**
     * The geometry to apply to the spatial filter.
     *
     * [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[];
    /**
     * For spatial filters, this parameter defines the spatial relationship to filter features in the layer view against the filter [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#geometry).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#spatialRelationship)
     */
    spatialRelationship: string;
    /**
     * A range of time with start and end date.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#timeExtent)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#units)
     */
    units: "feet" | "miles" | "nautical-miles" | "us-nautical-miles" | "meters" | "kilometers";
    /**
     * A where clause for the feature filter.
     *
     * [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-rest-support-Query.html) parameters that can be used to fetch features that satisfy 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(): supportQuery;
  }

  interface FeatureFilterConstructor {
    /**
     * This class defines parameters for setting a client-side filter on a [layer view](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-FeatureLayerView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#distance)
     */
    distance?: number;
    /**
     * The geometry to apply to the spatial filter.
     *
     * [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[];
    /**
     * For spatial filters, this parameter defines the spatial relationship to filter features in the layer view against the filter [geometry](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#geometry).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#spatialRelationship)
     */
    spatialRelationship?: string;
    /**
     * A range of time with start and end date.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#timeExtent)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#units)
     */
    units?: "feet" | "miles" | "nautical-miles" | "us-nautical-miles" | "meters" | "kilometers";
    /**
     * A where clause for the feature filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-support-FeatureFilter.html#where)
     */
    where?: string;
  }

  interface WFSLayerView 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-WFSLayer.html#renderer), [labeling](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#labelingInfo), [elevation info](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#elevationInfo), and additional fields defined on the [WFSLayer.outFields](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html#outFields).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-WFSLayerView.html#availableFields)
     */
    readonly availableFields: string[];
    /**
     * The effect applied to the layer view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-WFSLayerView.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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-WFSLayerView.html#filter)
     */
    filter: FeatureFilter;
    /**
     * The maximum number of features that can be displayed at a time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-WFSLayerView.html#maximumNumberOfFeatures)
     */
    maximumNumberOfFeatures: number;
    /**
     * Signifies whether the maximum number of features has been exceeded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-WFSLayerView.html#maximumNumberOfFeaturesExceeded)
     */
    maximumNumberOfFeaturesExceeded: boolean;

    /**
     * Creates a query parameter object that can be used to fetch features as they are being displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-WFSLayerView.html#createQuery)
     */
    createQuery(): Query;
    /**
     * Highlights the given feature(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-WFSLayerView.html#highlight)
     */
    highlight(target?: Graphic | Graphic[] | number | number[]): Handle;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html) against features available for drawing in the layer view and returns the [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-WFSLayerView.html#queryExtent)
     */
    queryExtent(query?: Query, options?: WFSLayerViewQueryExtentOptions): Promise<any>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html) against features available for drawing in the layer view and returns the number of features that satisfy the query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-WFSLayerView.html#queryFeatureCount)
     */
    queryFeatureCount(query?: Query, options?: WFSLayerViewQueryFeatureCountOptions): Promise<number>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html) against features available for drawing in the layer view and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-FeatureSet.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-WFSLayerView.html#queryFeatures)
     */
    queryFeatures(query?: Query, options?: WFSLayerViewQueryFeaturesOptions): Promise<FeatureSet>;
    /**
     * Executes a [Query](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html) against features available for drawing in the layer view and returns array of the ObjectIDs of features that satisfy the input query.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-WFSLayerView.html#queryObjectIds)
     */
    queryObjectIds(query?: Query, options?: WFSLayerViewQueryObjectIdsOptions): Promise<number[]>;
  }

  interface WFSLayerViewProperties extends LayerViewProperties {
    /**
     * The effect applied to the layer view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-WFSLayerView.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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-WFSLayerView.html#filter)
     */
    filter?: FeatureFilterProperties;
    /**
     * The maximum number of features that can be displayed at a time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-WFSLayerView.html#maximumNumberOfFeatures)
     */
    maximumNumberOfFeatures?: number;
    /**
     * Signifies whether the maximum number of features has been exceeded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-WFSLayerView.html#maximumNumberOfFeaturesExceeded)
     */
    maximumNumberOfFeaturesExceeded?: boolean;
  }

  export interface WFSLayerViewQueryExtentOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-WFSLayerView.html#queryExtent)
     */
    signal?: AbortSignal;
  }

  export interface WFSLayerViewQueryFeatureCountOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-WFSLayerView.html#queryFeatureCount)
     */
    signal?: AbortSignal;
  }

  export interface WFSLayerViewQueryFeaturesOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-WFSLayerView.html#queryFeatures)
     */
    signal?: AbortSignal;
  }

  export interface WFSLayerViewQueryObjectIdsOptions extends Object {
    /**
     * Signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-WFSLayerView.html#queryObjectIds)
     */
    signal?: AbortSignal;
  }

  interface Magnifier extends Accessor {
    /**
     * Controls the amount of magnification to display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#factor)
     */
    factor: number;
    /**
     * Indicates whether the mask image is enabled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#maskEnabled)
     */
    maskEnabled: boolean;
    /**
     * The mask url points to an image that determines the visible area of the magnified image [(alpha channel)](https://developer.mozilla.org/en-US/docs/Glossary/Alpha).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#maskUrl)
     */
    maskUrl: string;
    /**
     * The offset of the magnifier in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#offset)
     */
    offset: ScreenPoint;
    /**
     * Indicates whether the overlay image is enabled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#overlayEnabled)
     */
    overlayEnabled: boolean;
    /**
     * The overlay url points to an image that is displayed on top of the magnified image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#overlayUrl)
     */
    overlayUrl: string;
    /**
     * The position of the magnifier in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#position)
     */
    position: ScreenPoint;
    /**
     * The size of the magnifier in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#size)
     */
    size: number;
    /**
     * Indicates whether the magnifier is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#visible)
     */
    visible: boolean;
  }

  interface MagnifierConstructor {
    /**
     * The Magnifier allows end users to show a portion of the view as a magnified image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html)
     */

    new (properties?: MagnifierProperties): Magnifier;
  }

  export const Magnifier: MagnifierConstructor;

  interface MagnifierProperties {
    /**
     * Controls the amount of magnification to display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#factor)
     */
    factor?: number;
    /**
     * Indicates whether the mask image is enabled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#maskEnabled)
     */
    maskEnabled?: boolean;
    /**
     * The mask url points to an image that determines the visible area of the magnified image [(alpha channel)](https://developer.mozilla.org/en-US/docs/Glossary/Alpha).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#maskUrl)
     */
    maskUrl?: string;
    /**
     * The offset of the magnifier in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#offset)
     */
    offset?: ScreenPoint;
    /**
     * Indicates whether the overlay image is enabled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#overlayEnabled)
     */
    overlayEnabled?: boolean;
    /**
     * The overlay url points to an image that is displayed on top of the magnified image.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#overlayUrl)
     */
    overlayUrl?: string;
    /**
     * The position of the magnifier in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#position)
     */
    position?: ScreenPoint;
    /**
     * The size of the magnifier in pixels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#size)
     */
    size?: number;
    /**
     * Indicates whether the magnifier is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#visible)
     */
    visible?: boolean;
  }

  /**
   * An object representing the location on the screen.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#ScreenPoint)
   */
  export interface ScreenPoint extends Object {
    /**
     * The x coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#ScreenPoint)
     */
    x: number;
    /**
     * The y coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-Magnifier.html#ScreenPoint)
     */
    y: number;
  }

  interface MapView extends View, MapViewBase, BreakpointsOwner {
    /**
     * The background color of the MapView.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#background)
     */
    background: ColorBackground;
    /**
     * 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 representing a longitude/latitude pair (`[-100.4593, 36.9014]`).
     *
     * [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 be applied to the MapView.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#extent)
     */
    extent: Extent;
    /**
     * Applies a display filter on the view for a specific set of floor levels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#floors)
     */
    floors: Collection<string>;
    /**
     * Options for configuring the highlight.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#resizeAlign)
     */
    resizeAlign:
      | "center"
      | "left"
      | "right"
      | "top"
      | "bottom"
      | "top-left"
      | "top-right"
      | "bottom-left"
      | "bottom-right";
    /**
     * 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-MapView.html#rotation)
     */
    rotation: number;
    /**
     * Represents the map scale at the center of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#scale)
     */
    scale: number;
    /**
     * The dimension of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#type)
     */
    readonly type: "2d";
    /**
     * 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#zoom)
     */
    zoom: number;

    /**
     * Returns the topmost feature from each layer that intersects the specified screen coordinates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#hitTest)
     */
    hitTest(screenPoint: MapViewScreenPoint | MouseEvent, options?: MapViewHitTestOptions): Promise<HitTestResult>;
    /**
     * Registers an event handler on the instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#on)
     */
    on(type: string | string[], modifiersOrHandler: string[] | EventHandler, handler?: EventHandler): IHandle;
    /**
     * Create a screenshot of the current view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#takeScreenshot)
     */
    takeScreenshot(options?: MapViewTakeScreenshotOptions): Promise<Screenshot>;
    /**
     * 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-MapView.html#toMap)
     */
    toMap(screenPoint: MapViewScreenPoint | MouseEvent): Point;
    /**
     * Converts the given [map point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) to a screen point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#toScreen)
     */
    toScreen(point: Point): MapViewScreenPoint;

    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-double-click", eventHandler: MapViewImmediateDoubleClickEventHandler): IHandle;

    on(
      name: "immediate-double-click",
      modifiers: string[],
      eventHandler: MapViewImmediateDoubleClickEventHandler
    ): 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 {
    /**
     * A MapView displays a 2D view of a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html)
     */

    new (properties?: MapViewProperties): MapView;
  }

  export const MapView: MapViewConstructor;

  interface MapViewProperties extends ViewProperties, BreakpointsOwnerProperties {
    /**
     * The background color of the MapView.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#background)
     */
    background?: ColorBackgroundProperties;
    /**
     * 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 representing a longitude/latitude pair (`[-100.4593, 36.9014]`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#center)
     */
    center?: (PointProperties & { type: "point" }) | 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 be applied to the MapView.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#extent)
     */
    extent?: ExtentProperties;
    /**
     * Applies a display filter on the view for a specific set of floor levels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#floors)
     */
    floors?: CollectionProperties<string>;
    /**
     * Options for configuring the highlight.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#resizeAlign)
     */
    resizeAlign?:
      | "center"
      | "left"
      | "right"
      | "top"
      | "bottom"
      | "top-left"
      | "top-right"
      | "bottom-left"
      | "bottom-right";
    /**
     * 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-MapView.html#rotation)
     */
    rotation?: number;
    /**
     * Represents the map scale at the center of the view.
     *
     * [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.
     *
     * [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.
     *
     * [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: any | any | any;

    mapPoint: Point;

    native: any;

    screenPoint: any;

    stopPropagation: Function;

    timestamp: number;

    type: "click";

    x: number;

    y: number;
  }

  export interface MapViewDoubleClickEvent {
    button: number;

    buttons: any | any | any;

    mapPoint: Point;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: "double-click";

    x: number;

    y: number;
  }

  export interface MapViewDragEvent {
    action: "start" | "added" | "update" | "removed" | "end";

    angle: number;

    button: any | any | any;

    buttons: number;

    native: any;

    origin: MapViewDragEventOrigin;

    radius: number;

    stopPropagation: Function;

    timestamp: number;

    type: "drag";

    x: number;

    y: number;
  }

  export interface MapViewFocusEvent {
    native: any;

    target: View;
  }

  /**
   * Animation options for the [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#goTo) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#GoToOptions2D)
   */
  export interface GoToOptions2D extends Object {
    /**
     * Indicates if the transition to the new view should be animated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#GoToOptions2D)
     */
    animate?: boolean;
    /**
     * The duration of the animation in milliseconds.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#GoToOptions2D)
     */
    duration?: number;
    /**
     * The easing function used for the animation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#GoToOptions2D)
     */
    easing?: "linear" | "ease" | "ease-in" | "ease-out" | "ease-in-out" | Function;
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the animation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#GoToOptions2D)
     */
    signal?: AbortSignal;
  }

  /**
   * The target location/viewpoint to animate to in the [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#goTo) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#GoToTarget2D)
   */
  export type GoToTarget2D =
    | number[]
    | Geometry
    | Geometry[]
    | Collection<Geometry>
    | Graphic
    | Graphic[]
    | Collection<Graphic>
    | Viewpoint
    | any;

  /**
   * A layer, graphic, or collection of layers or graphics to be used in the [hitTest()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#hitTest) filter options.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#HitTestItem)
   */
  export type HitTestItem = Layer | Graphic | Collection<Layer> | Collection<Graphic> | Layer[] | Graphic[];

  /**
   * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#HitTestResult)
     */
    results: HitTestResultResults[];
  }

  export interface MapViewHoldEvent {
    button: any | any | any;

    buttons: number;

    mapPoint: Point;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: "hold";

    x: number;

    y: number;
  }

  export interface MapViewImmediateClickEvent {
    button: any | any | any;

    buttons: number;

    mapPoint: Point;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: "immediate-click";

    x: number;

    y: number;
  }

  export interface MapViewImmediateDoubleClickEvent {
    button: any | any | any;

    buttons: number;

    mapPoint: Point;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: "immediate-double-click";

    x: number;

    y: number;
  }

  export interface MapViewKeyDownEvent {
    key: string;

    native: any;

    repeat: boolean;

    stopPropagation: Function;

    timestamp: number;

    type: "key-down";
  }

  export interface MapViewKeyUpEvent {
    key: string;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: "key-up";
  }

  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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)
     */
    lods?: LOD[];
    /**
     * The area in which the user is allowed to navigate laterally.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)
     */
    geometry?: Geometry;
    /**
     * 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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#constraints)
     */
    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)
     */
    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 fill.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#highlightOptions)
     */
    color?: Color | number[] | string;
    /**
     * The color of the halo surrounding the highlight.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#highlightOptions)
     */
    haloColor?: Color | number[] | string;
    /**
     * The opacity of the highlight halo.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#highlightOptions)
     */
    haloOpacity?: number;
    /**
     * The opacity of the fill (area within the halo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#highlightOptions)
     */
    fillOpacity?: number;
  }

  export interface MapViewHighlightOptions extends AnonymousAccessor {
    /**
     * The color of the highlight fill.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#highlightOptions)
     */
    color?: Color;
    /**
     * The color of the halo surrounding the highlight.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#highlightOptions)
     */
    haloColor?: Color;
    /**
     * The opacity of the highlight halo.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#highlightOptions)
     */
    haloOpacity?: number;
    /**
     * The opacity of the fill (area within the halo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#highlightOptions)
     */
    fillOpacity?: number;
  }

  export interface MapViewHitTestOptions extends Object {
    /**
     * A list of layers and graphics to include in the hitTest.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#hitTest)
     */
    include?: HitTestItem[] | Collection<HitTestItem> | Layer | Graphic;
    /**
     * A list of layers and graphics to exclude from the hitTest.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#hitTest)
     */
    exclude?: HitTestItem[] | Collection<HitTestItem> | Layer | Graphic;
  }

  export interface MapViewTakeScreenshotOptions extends Object {
    /**
     * The format of the resulting encoded data url.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#takeScreenshot)
     */
    format?: "jpg" | "png";
    /**
     * 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)
     */
    quality?: number;
    /**
     * The width of the screenshot (defaults to the area width).
     *
     * [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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#takeScreenshot)
     */
    area?: MapViewTakeScreenshotOptionsArea;
    /**
     * Indicates whether to ignore the background color set in the [initial view properties](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#initialViewProperties) of the web map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#takeScreenshot)
     */
    ignoreBackground?: boolean;
    /**
     * Indicates whether view padding should be ignored.
     *
     * [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: "mouse-wheel";

    x: number;

    y: number;
  }

  export interface MapViewPointerDownEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: "mouse" | "touch";

    stopPropagation: Function;

    timestamp: number;

    type: "pointer-down";

    x: number;

    y: number;
  }

  export interface MapViewPointerEnterEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: "mouse" | "touch";

    stopPropagation: Function;

    timestamp: number;

    type: "pointer-enter";

    x: number;

    y: number;
  }

  export interface MapViewPointerLeaveEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: "mouse" | "touch";

    stopPropagation: Function;

    timestamp: number;

    type: "pointer-leave";

    x: number;

    y: number;
  }

  export interface MapViewPointerMoveEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: "mouse" | "touch";

    stopPropagation: Function;

    timestamp: number;

    type: "pointer-move";

    x: number;

    y: number;
  }

  export interface MapViewPointerUpEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: "mouse" | "touch";

    stopPropagation: Function;

    timestamp: number;

    type: "pointer-up";

    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 MapViewScreenPoint 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-MapView.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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapViewBase.html#goTo)
     */
    goTo(target: GoToTarget2D, options?: GoToOptions2D): Promise<any>;
  }

  interface MapViewBaseConstructor {
    new (): MapViewBase;
  }

  export const MapViewBase: MapViewBaseConstructor;

  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 input screen coordinates.
     *
     * [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 view corresponding 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-gamepad-GamepadSettings.html#device)
     */
    device: GamepadInputDevice;
    /**
     * Whether gamepad navigation is enabled on the View.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-gamepad-GamepadSettings.html#enabled)
     */
    enabled: boolean;
    /**
     * This setting controls the behavior of forward and back movement of the left stick.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-gamepad-GamepadSettings.html#mode)
     */
    mode: "pan" | "zoom";
    /**
     * Determines whether pressing the tilt axis forwards make the view tilt down (towards the nadir), or up (towards the zenith).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-gamepad-GamepadSettings.html#tiltDirection)
     */
    tiltDirection: "forward-down" | "forward-up";
  }

  interface gamepadGamepadSettingsConstructor {
    /**
     * Gamepad navigation specific configuration settings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-gamepad-GamepadSettings.html)
     */

    new (properties?: gamepadGamepadSettingsProperties): gamepadGamepadSettings;
  }

  export const gamepadGamepadSettings: gamepadGamepadSettingsConstructor;

  interface gamepadGamepadSettingsProperties {
    /**
     * Use this property to explicitly select the gamepad device for map and scene navigation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-gamepad-GamepadSettings.html#device)
     */
    device?: GamepadInputDeviceProperties;
    /**
     * Whether gamepad navigation is enabled on the View.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-gamepad-GamepadSettings.html#enabled)
     */
    enabled?: boolean;
    /**
     * This setting controls the behavior of forward and back movement of the left stick.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-gamepad-GamepadSettings.html#mode)
     */
    mode?: "pan" | "zoom";
    /**
     * Determines whether pressing the tilt axis forwards make the view tilt down (towards the nadir), or up (towards the zenith).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-gamepad-GamepadSettings.html#tiltDirection)
     */
    tiltDirection?: "forward-down" | "forward-up";
  }

  interface Navigation extends Accessor {
    /**
     * Indicates if single finger touch [drag](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#event-drag) events are enabled or disabled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-Navigation.html#browserTouchPanEnabled)
     */
    browserTouchPanEnabled: boolean;
    /**
     * Gamepad navigation specific configuration settings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-Navigation.html#gamepad)
     */
    gamepad: gamepadGamepadSettings;
    /**
     * When `true`, the view will temporarily continue to pan after the pointer (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-Navigation.html#momentumEnabled)
     */
    momentumEnabled: boolean;
    /**
     * Indicates whether the view can be zoomed in or out with the mouse wheel.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-Navigation.html#mouseWheelZoomEnabled)
     */
    mouseWheelZoomEnabled: boolean;
  }

  interface NavigationConstructor {
    /**
     * Navigation related configuration settings on the View.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-Navigation.html)
     */

    new (properties?: NavigationProperties): Navigation;
  }

  export const Navigation: NavigationConstructor;

  interface NavigationProperties {
    /**
     * Indicates if single finger touch [drag](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#event-drag) events are enabled or disabled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-Navigation.html#browserTouchPanEnabled)
     */
    browserTouchPanEnabled?: boolean;
    /**
     * Gamepad navigation specific configuration settings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-Navigation.html#gamepad)
     */
    gamepad?: gamepadGamepadSettingsProperties;
    /**
     * When `true`, the view will temporarily continue to pan after the pointer (e.g.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-Navigation.html#momentumEnabled)
     */
    momentumEnabled?: boolean;
    /**
     * Indicates whether the view can be zoomed in or out with the mouse wheel.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-navigation-Navigation.html#mouseWheelZoomEnabled)
     */
    mouseWheelZoomEnabled?: boolean;
  }

  interface SceneView extends View, BreakpointsOwner {
    /**
     * Allows the view to be partially or fully transparent when composited with the webpage elements behind it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#alphaCompositingEnabled)
     */
    alphaCompositingEnabled: boolean;
    /**
     * The observation point from which the visible portion (or perspective) of the SceneView is determined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#camera)
     */
    camera: Camera;
    /**
     * 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 representing at longitude/latitude pair (`[-100.4593, 36.9014]`).
     *
     * [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 the visible [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of a local scene.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     */
    environment: SceneViewEnvironment;
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#extent)
     */
    extent: Extent;
    /**
     * Applies a display filter on the view for a specific set of floor levels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#floors)
     */
    floors: Collection<string>;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     */
    highlightOptions: SceneViewHighlightOptions;
    /**
     * This property contains performance information in a SceneView like global memory usage and additional details for layers about memory consumption and number of features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#performanceInfo)
     */
    readonly performanceInfo: SceneViewPerformanceInfo;
    /**
     * SceneView can draw scenes in three different quality modes: `high`, `medium` and `low`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#qualityProfile)
     */
    qualityProfile: "low" | "medium" | "high";
    /**
     * Represents an approximation of the map scale at the center of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#scale)
     */
    scale: number;
    /**
     * The type of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#type)
     */
    readonly type: "3d";
    /**
     * The viewing mode (`local` or `global`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewingMode)
     */
    viewingMode: "global" | "local";
    /**
     * 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#zoom)
     */
    zoom: number;

    /**
     * Sets the view to a given target.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo)
     */
    goTo(target: GoToTarget3D, options?: GoToOptions3D): Promise<any>;
    /**
     * Returns graphics that intersect the specified screen coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#hitTest)
     */
    hitTest(
      screenPoint: SceneViewScreenPoint | MouseEvent,
      options?: SceneViewHitTestOptions
    ): Promise<SceneViewHitTestResult>;
    /**
     * Registers an event handler on the instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#on)
     */
    on(type: string | string[], modifiersOrHandler: string[] | EventHandler, handler?: EventHandler): IHandle;
    /**
     * Create a screenshot of the current view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#takeScreenshot)
     */
    takeScreenshot(options?: SceneViewTakeScreenshotOptions): Promise<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)
     */
    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 a screen point.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#toScreen)
     */
    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-double-click", eventHandler: SceneViewImmediateDoubleClickEventHandler): IHandle;

    on(
      name: "immediate-double-click",
      modifiers: string[],
      eventHandler: SceneViewImmediateDoubleClickEventHandler
    ): 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 {
    /**
     * A SceneView displays a 3D view of a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) or [WebScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html) instance using WebGL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html)
     */

    new (properties?: SceneViewProperties): SceneView;
  }

  export const SceneView: SceneViewConstructor;

  interface SceneViewProperties extends ViewProperties, BreakpointsOwnerProperties {
    /**
     * Allows the view to be partially or fully transparent when composited with the webpage elements behind it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#alphaCompositingEnabled)
     */
    alphaCompositingEnabled?: boolean;
    /**
     * The observation point from which the visible portion (or perspective) of the SceneView is determined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#camera)
     */
    camera?: CameraProperties;
    /**
     * 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 representing at longitude/latitude pair (`[-100.4593, 36.9014]`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#center)
     */
    center?: (PointProperties & { type: "point" }) | number[];
    /**
     * Represents an optional clipping area used to define the visible [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of a local scene.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     */
    environment?: SceneViewEnvironmentProperties;
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#extent)
     */
    extent?: ExtentProperties;
    /**
     * Applies a display filter on the view for a specific set of floor levels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#floors)
     */
    floors?: CollectionProperties<string>;
    /**
     * Options for configuring the highlight.
     *
     * [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`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#qualityProfile)
     */
    qualityProfile?: "low" | "medium" | "high";
    /**
     * Represents an approximation of the map scale at the center of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#scale)
     */
    scale?: number;
    /**
     * The viewing mode (`local` or `global`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#viewingMode)
     */
    viewingMode?: "global" | "local";
    /**
     * 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.
     *
     * [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.
     *
     * [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: any | any | any;

    mapPoint: Point;

    native: any;

    screenPoint: any;

    stopPropagation: Function;

    timestamp: number;

    type: "click";

    x: number;

    y: number;
  }

  export interface SceneViewDoubleClickEvent {
    button: number;

    buttons: any | any | any;

    mapPoint: Point;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: "double-click";

    x: number;

    y: number;
  }

  export interface SceneViewDragEvent {
    action: "start" | "added" | "update" | "removed" | "end";

    angle: number;

    button: any | any | any;

    buttons: number;

    native: any;

    origin: SceneViewDragEventOrigin;

    radius: number;

    stopPropagation: Function;

    timestamp: number;

    type: "drag";

    x: number;

    y: number;
  }

  export type EasingFunction = (t: number, duration: number) => number;

  export interface SceneViewFocusEvent {
    native: any;

    target: View;
  }

  /**
   * Animation options for the [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#GoToOptions3D)
   */
  export interface GoToOptions3D extends Object {
    /**
     * Indicates if the transition to the new view should be animated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#GoToOptions3D)
     */
    animate?: boolean;
    /**
     * Increases or decreases the animation speed by the specified factor.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#GoToOptions3D)
     */
    speedFactor?: number;
    /**
     * Set the exact duration (in milliseconds) of the animation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#GoToOptions3D)
     */
    duration?: number;
    /**
     * The maximum allowed duration (in milliseconds) of the animation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#GoToOptions3D)
     */
    maxDuration?: number;
    /**
     * The easing function to use for the animation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#GoToOptions3D)
     */
    easing?:
      | "linear"
      | "in-cubic"
      | "out-cubic"
      | "in-out-cubic"
      | "in-expo"
      | "out-expo"
      | "in-out-expo"
      | "in-out-coast-quadratic"
      | EasingFunction;
    /**
     * An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the animation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#GoToOptions3D)
     */
    signal?: AbortSignal;
  }

  /**
   * The target location/viewpoint to animate to in the [goTo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#goTo) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#GoToTarget3D)
   */
  export type GoToTarget3D =
    | number[]
    | Geometry
    | Geometry[]
    | Collection<Geometry>
    | Graphic
    | Graphic[]
    | Collection<Graphic>
    | Camera
    | Viewpoint
    | any;

  /**
   * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#HitTestResult)
     */
    results: SceneViewHitTestResultResults[];
    /**
     * Ground intersection result.
     *
     * [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: any | any | any;

    buttons: number;

    mapPoint: Point;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: "hold";

    x: number;

    y: number;
  }

  export interface SceneViewImmediateClickEvent {
    button: any | any | any;

    buttons: number;

    mapPoint: Point;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: "immediate-click";

    x: number;

    y: number;
  }

  export interface SceneViewImmediateDoubleClickEvent {
    button: any | any | any;

    buttons: number;

    mapPoint: Point;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: "immediate-double-click";

    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: "key-down";
  }

  export interface SceneViewKeyUpEvent {
    key: string;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: "key-up";
  }

  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: "mouse-wheel";

    x: number;

    y: number;
  }

  export interface SceneViewPointerDownEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: "mouse" | "touch";

    stopPropagation: Function;

    timestamp: number;

    type: "pointer-down";

    x: number;

    y: number;
  }

  export interface SceneViewPointerEnterEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: "mouse" | "touch";

    stopPropagation: Function;

    timestamp: number;

    type: "pointer-enter";

    x: number;

    y: number;
  }

  export interface SceneViewPointerLeaveEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: "mouse" | "touch";

    stopPropagation: Function;

    timestamp: number;

    type: "pointer-leave";

    x: number;

    y: number;
  }

  export interface SceneViewPointerMoveEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: "mouse" | "touch";

    stopPropagation: Function;

    timestamp: number;

    type: "pointer-move";

    x: number;

    y: number;
  }

  export interface SceneViewPointerUpEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: "mouse" | "touch";

    stopPropagation: Function;

    timestamp: number;

    type: "pointer-up";

    x: number;

    y: number;
  }

  export interface SceneViewResizeEvent {
    height: number;

    oldHeight: number;

    oldWidth: number;

    width: number;
  }

  export interface SceneViewConstraintsProperties extends Object {
    /**
     * Specifies a constraint on the minimum and maximum allowed camera altitude.
     *
     * [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;
    /**
     * 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 {
    /**
     * Specifies a constraint on the minimum and maximum allowed camera altitude.
     *
     * [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;
    /**
     * 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)
     */
    min?: number;
    /**
     * The maximum allowed camera altitude (in meters).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    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)
     */
    min?: number;
    /**
     * The maximum allowed camera altitude (in meters).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    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`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    mode?: "auto" | "manual";
  }

  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`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    mode?: "auto" | "manual";
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    mode?: "auto" | "manual";
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints)
     */
    mode?: "auto" | "manual";
  }

  export interface SceneViewEnvironmentProperties extends Object {
    /**
     * Specifies how the background of the scene (which lies behind sky, stars and atmosphere) should be displayed.
     *
     * [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)
     */
    starsEnabled?: boolean;
  }

  export interface SceneViewEnvironment extends AnonymousAccessor {
    /**
     * Specifies how the background of the scene (which lies behind sky, stars and atmosphere) should be displayed.
     *
     * [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)
     */
    starsEnabled?: boolean;
  }

  export interface SceneViewEnvironmentAtmosphereProperties extends Object {
    /**
     * Indicates the quality of the atmosphere visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     */
    quality?: "low" | "high";
  }

  export interface SceneViewEnvironmentAtmosphere extends AnonymousAccessor {
    /**
     * Indicates the quality of the atmosphere visualization.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     */
    quality?: "low" | "high";
  }

  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)
     */
    date?: DateProperties;
    /**
     * Indicates whether polygons that use [WaterSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html) display reflections of surrounding terrain, buildings and other 3D objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     */
    waterReflectionEnabled?: boolean;
    /**
     * Indicates whether to show shadows cast by the sun.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     */
    directShadowsEnabled?: boolean;
    /**
     * Indicates whether to show ambient occlusion shading.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     */
    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)
     */
    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)
     */
    date?: Date;
    /**
     * Indicates whether polygons that use [WaterSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html) display reflections of surrounding terrain, buildings and other 3D objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     */
    waterReflectionEnabled?: boolean;
    /**
     * Indicates whether to show shadows cast by the sun.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     */
    directShadowsEnabled?: boolean;
    /**
     * Indicates whether to show ambient occlusion shading.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#environment)
     */
    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)
     */
    cameraTrackingEnabled?: boolean;
  }

  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)
     */
    color?: Color | number[] | string;
    /**
     * An optional color for the halo of the highlight.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     */
    haloColor?: Color;
    /**
     * The opacity of the highlight halo.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     */
    haloOpacity?: number;
    /**
     * The opacity of the fill (area within the halo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     */
    fillOpacity?: number;
    /**
     * The color of the highlighted feature's shadow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     */
    shadowColor?: Color;
    /**
     * The opacity of the highlighted feature's shadow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     */
    shadowOpacity?: number;
    /**
     * Defines the intensity of the shadow area obtained by overlapping the shadow of the highlighted feature and the shadow of other objects in the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     */
    shadowDifference?: 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)
     */
    color?: Color;
    /**
     * An optional color for the halo of the highlight.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     */
    haloColor?: Color;
    /**
     * The opacity of the highlight halo.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     */
    haloOpacity?: number;
    /**
     * The opacity of the fill (area within the halo).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     */
    fillOpacity?: number;
    /**
     * The color of the highlighted feature's shadow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     */
    shadowColor?: Color;
    /**
     * The opacity of the highlighted feature's shadow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     */
    shadowOpacity?: number;
    /**
     * Defines the intensity of the shadow area obtained by overlapping the shadow of the highlighted feature and the shadow of other objects in the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#highlightOptions)
     */
    shadowDifference?: number;
  }

  export interface SceneViewHitTestOptions extends Object {
    /**
     * A list of layers and graphics to include for intersection testing.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#takeScreenshot)
     */
    format?: "jpg" | "png";
    /**
     * The quality (0 to 100) of the encoded image when format is `jpg`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#takeScreenshot)
     */
    quality?: number;
    /**
     * The width of the screenshot (defaults to the area width).
     *
     * [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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#takeScreenshot)
     */
    area?: SceneViewTakeScreenshotOptionsArea;
    /**
     * Indicates whether view padding should be ignored.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#HitTestResult)
     */
    distance: number;
  }

  /**
   * Contains utilities for working with colors 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-views-support-colorUtils.html)
   */
  interface colorUtils {
    /**
     * Returns the average color of the view's background within the view's [extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#extent).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-support-colorUtils.html#getBackgroundColor)
     */
    getBackgroundColor(view: MapView): Promise<Color>;
    /**
     * This method inspects the basemap and background of a MapView and returns either `light` or `dark` as the theme of the background depending on if the average color of the basemap and the view's background is light or dark.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-support-colorUtils.html#getBackgroundColorTheme)
     */
    getBackgroundColorTheme(view: MapView): Promise<string>;
  }

  export const colorUtils: colorUtils;

  interface DefaultUI extends UI {
    /**
     * An array of strings representing the default widgets visible when 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) is created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-DefaultUI.html#components)
     */
    components: string[];
  }

  interface DefaultUIConstructor {
    /**
     * The DefaultUI class exposes the default [widget](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html) [components](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-DefaultUI.html#components) available in either a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or 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-ui-DefaultUI.html)
     */

    new (properties?: DefaultUIProperties): DefaultUI;
  }

  export const DefaultUI: DefaultUIConstructor;

  interface DefaultUIProperties extends UIProperties {
    /**
     * An array of strings representing the default widgets visible when 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) is created.
     *
     * [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 sides of the container or [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#padding)
     */
    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)
     */
    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)
     */
    empty(
      position?:
        | "bottom-leading"
        | "bottom-left"
        | "bottom-right"
        | "bottom-trailing"
        | "top-leading"
        | "top-left"
        | "top-right"
        | "top-trailing"
        | "manual"
    ): void;
    /**
     * Find a component by widget or DOM ID.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#find)
     */
    find(id: string): HTMLElement | Widget;
    /**
     * 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)
     */
    move(component: Widget | HTMLElement | string | any[] | UIMoveComponent, position?: string | UIMovePosition): 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)
     */
    remove(component: Widget | HTMLElement | string | any[]): void;
  }

  interface UIConstructor {
    /**
     * This class provides a simple interface for [adding](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#add), [moving](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#move) and [removing](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#remove) components from a view's user interface (UI).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html)
     */

    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 sides of the container or [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#padding)
     */
    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 & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  export interface UIAddComponent extends Object {
    /**
     * The component to add to the UI.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#add)
     */
    position?:
      | "bottom-leading"
      | "bottom-left"
      | "bottom-right"
      | "bottom-trailing"
      | "top-leading"
      | "top-left"
      | "top-right"
      | "top-trailing"
      | "manual";
    /**
     * The placement index of the component.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#add)
     */
    position?:
      | "bottom-leading"
      | "bottom-left"
      | "bottom-right"
      | "bottom-trailing"
      | "top-leading"
      | "top-left"
      | "top-right"
      | "top-trailing"
      | "manual";
    /**
     * The placement index of the component(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#add)
     */
    index?: number;
  }

  export interface UIMoveComponent extends Object {
    /**
     * The component to move.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#move)
     */
    component: Widget | HTMLElement | string;
    /**
     * The destination position.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#move)
     */
    position?:
      | "bottom-leading"
      | "bottom-left"
      | "bottom-right"
      | "bottom-trailing"
      | "top-leading"
      | "top-left"
      | "top-right"
      | "top-trailing"
      | "manual";
    /**
     * The placement index of the component.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#move)
     */
    index?: number;
  }

  export interface UIMovePosition extends Object {
    /**
     * The position in the view at which to add the component.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#move)
     */
    position?:
      | "bottom-leading"
      | "bottom-left"
      | "bottom-right"
      | "bottom-trailing"
      | "top-leading"
      | "top-left"
      | "top-right"
      | "top-trailing"
      | "manual";
    /**
     * The placement index of the component(s).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ui-UI.html#move)
     */
    index?: number;
  }

  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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#animation)
     */
    animation: ViewAnimation;
    /**
     * Represents the view for a single basemap after it has been added to the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#basemapView)
     */
    basemapView: BasemapView;
    /**
     * A fatal [error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) returned when the view loses its 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 or by an interactive tool).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#interacting)
     */
    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>;
    /**
     * The magnifier allows for showing a portion of the view as a magnifier image on top of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#magnifier)
     */
    readonly magnifier: Magnifier;
    /**
     * An instance of a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) object to display in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#map)
     */
    map: Map;
    /**
     * Indication whether the view is being navigated (for example when panning).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#navigating)
     */
    readonly navigating: boolean;
    /**
     * Options to configure the navigation behavior of the View.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#navigation)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#padding)
     */
    padding: ViewPadding;
    /**
     * When `true`, this property indicates whether the view successfully satisfied all dependencies, signaling that the following conditions are met.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#ready)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#resolution)
     */
    readonly resolution: number;
    /**
     * The spatial reference of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#spatialReference)
     */
    spatialReference: SpatialReference;
    /**
     * Indication whether the view is animating, being navigated with or resizing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#stationary)
     */
    readonly stationary: boolean;
    /**
     * The view's time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#timeExtent)
     */
    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)
     */
    readonly updating: boolean;

    /**
     * Destroys the view, and any associated resources, including its [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#map), [popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#popup), and [UI](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#ui) elements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#destroy)
     */
    destroy(): void;
    /**
     * Sets the focus on the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#focus)
     */
    focus(): void;
    /**
     * Registers an event handler on the instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#on)
     */
    on(type: string | string[], modifiersOrHandler: string[] | Function, handler?: Function): any;
    /**
     * 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) created on the view for the given layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     */
    whenLayerView(layer: PointCloudLayer): Promise<PointCloudLayerView>;
    /**
     * Gets the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) created on the view for the given layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     */
    whenLayerView(layer: StreamLayer): Promise<StreamLayerView>;
    /**
     * Gets the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) created on the view for the given layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     */
    whenLayerView(layer: FeatureLayer): Promise<FeatureLayerView>;
    /**
     * Gets the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) created on the view for the given layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     */
    whenLayerView(layer: CSVLayer): Promise<CSVLayerView>;
    /**
     * Gets the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) created on the view for the given layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     */
    whenLayerView(layer: GeoJSONLayer): Promise<GeoJSONLayerView>;
    /**
     * Gets the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) created on the view for the given layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     */
    whenLayerView(layer: GeoRSSLayer): Promise<GeoRSSLayerView>;
    /**
     * Gets the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) created on the view for the given layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     */
    whenLayerView(layer: GraphicsLayer): Promise<GraphicsLayerView>;
    /**
     * Gets the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) created on the view for the given layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     */
    whenLayerView(layer: ImageryLayer): Promise<ImageryLayerView>;
    /**
     * Gets the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) created on the view for the given layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     */
    whenLayerView(layer: KMLLayer): Promise<KMLLayerView>;
    /**
     * Gets the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) created on the view for the given layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     */
    whenLayerView(layer: SceneLayer): Promise<SceneLayerView>;
    /**
     * Gets the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) created on the view for the given layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#whenLayerView)
     */
    whenLayerView(layer: Layer): Promise<LayerView>;

    on(name: "resize", eventHandler: ViewResizeEventHandler): IHandle;

    on(name: "resize", modifiers: string[], eventHandler: ViewResizeEventHandler): IHandle;

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

    on(name: "layerview-create", modifiers: string[], eventHandler: ViewLayerviewCreateEventHandler): IHandle;

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

    on(
      name: "layerview-create-error",
      modifiers: string[],
      eventHandler: ViewLayerviewCreateErrorEventHandler
    ): IHandle;

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

    on(name: "layerview-destroy", modifiers: string[], eventHandler: ViewLayerviewDestroyEventHandler): IHandle;

    on(name: "click", eventHandler: ViewClickEventHandler): IHandle;

    on(name: "click", modifiers: string[], eventHandler: ViewClickEventHandler): IHandle;

    on(name: "double-click", eventHandler: ViewDoubleClickEventHandler): IHandle;

    on(name: "double-click", modifiers: string[], eventHandler: ViewDoubleClickEventHandler): IHandle;

    on(name: "immediate-double-click", eventHandler: ViewImmediateDoubleClickEventHandler): IHandle;

    on(
      name: "immediate-double-click",
      modifiers: string[],
      eventHandler: ViewImmediateDoubleClickEventHandler
    ): IHandle;

    on(name: "immediate-click", eventHandler: ViewImmediateClickEventHandler): IHandle;

    on(name: "immediate-click", modifiers: string[], eventHandler: ViewImmediateClickEventHandler): IHandle;

    on(name: "hold", eventHandler: ViewHoldEventHandler): IHandle;

    on(name: "hold", modifiers: string[], eventHandler: ViewHoldEventHandler): IHandle;

    on(name: "drag", eventHandler: ViewDragEventHandler): IHandle;

    on(name: "drag", modifiers: string[], eventHandler: ViewDragEventHandler): IHandle;

    on(name: "mouse-wheel", eventHandler: ViewMouseWheelEventHandler): IHandle;

    on(name: "mouse-wheel", modifiers: string[], eventHandler: ViewMouseWheelEventHandler): IHandle;

    on(name: "key-down", eventHandler: ViewKeyDownEventHandler): IHandle;

    on(name: "key-down", modifiers: string[], eventHandler: ViewKeyDownEventHandler): IHandle;

    on(name: "key-up", eventHandler: ViewKeyUpEventHandler): IHandle;

    on(name: "key-up", modifiers: string[], eventHandler: ViewKeyUpEventHandler): IHandle;

    on(name: "pointer-down", eventHandler: ViewPointerDownEventHandler): IHandle;

    on(name: "pointer-down", modifiers: string[], eventHandler: ViewPointerDownEventHandler): IHandle;

    on(name: "pointer-move", eventHandler: ViewPointerMoveEventHandler): IHandle;

    on(name: "pointer-move", modifiers: string[], eventHandler: ViewPointerMoveEventHandler): IHandle;

    on(name: "pointer-up", eventHandler: ViewPointerUpEventHandler): IHandle;

    on(name: "pointer-up", modifiers: string[], eventHandler: ViewPointerUpEventHandler): IHandle;

    on(name: "pointer-enter", eventHandler: ViewPointerEnterEventHandler): IHandle;

    on(name: "pointer-enter", modifiers: string[], eventHandler: ViewPointerEnterEventHandler): IHandle;

    on(name: "pointer-leave", eventHandler: ViewPointerLeaveEventHandler): IHandle;

    on(name: "pointer-leave", modifiers: string[], eventHandler: ViewPointerLeaveEventHandler): IHandle;

    on(name: "focus", eventHandler: ViewFocusEventHandler): IHandle;

    on(name: "focus", modifiers: string[], eventHandler: ViewFocusEventHandler): IHandle;

    on(name: "blur", eventHandler: ViewBlurEventHandler): IHandle;

    on(name: "blur", modifiers: string[], eventHandler: ViewBlurEventHandler): IHandle;
  }

  interface ViewConstructor {
    /**
     * A view provides the means of viewing and interacting with the components of a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html)
     */

    new (properties?: ViewProperties): View;

    /**
     * Contains the collection of active views on the page.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#animation)
     */
    animation?: ViewAnimationProperties;
    /**
     * Represents the view for a single basemap after it has been added to the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#basemapView)
     */
    basemapView?: BasemapViewProperties;
    /**
     * A fatal [error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) returned when the view loses its 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#map)
     */
    map?: MapProperties;
    /**
     * Options to configure the navigation behavior of the View.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#navigation)
     */
    navigation?: NavigationProperties;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#padding)
     */
    padding?: ViewPadding;
    /**
     * The spatial reference of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#spatialReference)
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * The view's time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#timeExtent)
     */
    timeExtent?: TimeExtentProperties;
  }

  export interface ViewBlurEvent {
    native: any;

    target: View;
  }

  export interface ViewClickEvent {
    button: number;

    buttons: any | any | any;

    mapPoint: Point;

    native: any;

    screenPoint: any;

    stopPropagation: Function;

    timestamp: number;

    type: "click";

    x: number;

    y: number;
  }

  export interface ViewDoubleClickEvent {
    button: number;

    buttons: any | any | any;

    mapPoint: Point;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: "double-click";

    x: number;

    y: number;
  }

  export interface ViewDragEvent {
    action: "start" | "added" | "update" | "removed" | "end";

    angle: number;

    button: any | any | any;

    buttons: number;

    native: any;

    origin: ViewDragEventOrigin;

    radius: number;

    stopPropagation: Function;

    timestamp: number;

    type: "drag";

    x: number;

    y: number;
  }

  export interface ViewFocusEvent {
    native: any;

    target: View;
  }

  export interface ViewHoldEvent {
    button: any | any | any;

    buttons: number;

    mapPoint: Point;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: "hold";

    x: number;

    y: number;
  }

  export interface ViewImmediateClickEvent {
    button: any | any | any;

    buttons: number;

    mapPoint: Point;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: "immediate-click";

    x: number;

    y: number;
  }

  export interface ViewImmediateDoubleClickEvent {
    button: any | any | any;

    buttons: number;

    mapPoint: Point;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: "immediate-double-click";

    x: number;

    y: number;
  }

  export interface ViewKeyDownEvent {
    key: string;

    native: any;

    repeat: boolean;

    stopPropagation: Function;

    timestamp: number;

    type: "key-down";
  }

  export interface ViewKeyUpEvent {
    key: string;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: "key-up";
  }

  export interface ViewLayerviewCreateErrorEvent {
    error: Error;

    layer: Layer;
  }

  export interface ViewLayerviewCreateEvent {
    layer: Layer;

    layerView: LayerView;
  }

  export interface ViewLayerviewDestroyEvent {
    layer: Layer;

    layerView: LayerView;
  }

  export interface ViewMouseWheelEvent {
    deltaY: number;

    native: any;

    stopPropagation: Function;

    timestamp: number;

    type: "mouse-wheel";

    x: number;

    y: number;
  }

  export interface ViewPointerDownEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: "mouse" | "touch";

    stopPropagation: Function;

    timestamp: number;

    type: "pointer-down";

    x: number;

    y: number;
  }

  export interface ViewPointerEnterEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: "mouse" | "touch";

    stopPropagation: Function;

    timestamp: number;

    type: "pointer-enter";

    x: number;

    y: number;
  }

  export interface ViewPointerLeaveEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: "mouse" | "touch";

    stopPropagation: Function;

    timestamp: number;

    type: "pointer-leave";

    x: number;

    y: number;
  }

  export interface ViewPointerMoveEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: "mouse" | "touch";

    stopPropagation: Function;

    timestamp: number;

    type: "pointer-move";

    x: number;

    y: number;
  }

  export interface ViewPointerUpEvent {
    button: number;

    buttons: number;

    native: any;

    pointerId: number;

    pointerType: "mouse" | "touch";

    stopPropagation: Function;

    timestamp: number;

    type: "pointer-up";

    x: number;

    y: number;
  }

  export interface ViewResizeEvent {
    height: number;

    oldHeight: number;

    oldWidth: number;

    width: number;
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ViewAnimation.html#state)
     */
    readonly state: "running" | "finished" | "stopped" | "waiting-for-target";
    /**
     * 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 sets the 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 of the animation to `stopped`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ViewAnimation.html#stop)
     */
    stop(): void;
  }

  interface ViewAnimationConstructor {
    /**
     * Contains a [state](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ViewAnimation.html#state) property used for checking the state of the animation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-ViewAnimation.html)
     */

    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;
  }

  export interface ViewDragEventOrigin extends Object {
    x: number;

    y: number;
  }

  interface Search extends Accessor {
    /**
     * Indicates whether the place finder is enabled in the web scene or the web map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-Search.html#addressSearchEnabled)
     */
    addressSearchEnabled: boolean;
    /**
     * Whether search functionality is enabled in the web scene or the web map.
     *
     * [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>;
    /**
     * A collection of tables to be included in search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-Search.html#tables)
     */
    tables: Collection<SearchTable>;

    /**
     * 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 {
    /**
     * Represents the search parameters set within the web scene or the web map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-Search.html)
     */

    new (properties?: SearchProperties): Search;
  }

  export const Search: SearchConstructor;

  interface SearchProperties {
    /**
     * Indicates whether the place finder is enabled in the web scene or the web map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-Search.html#addressSearchEnabled)
     */
    addressSearchEnabled?: boolean;
    /**
     * Whether search functionality is enabled in the web scene or the web map.
     *
     * [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>;
    /**
     * A collection of tables to be included in search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-Search.html#tables)
     */
    tables?: CollectionProperties<SearchTableProperties>;
  }

  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 {
    /**
     * Represents a layer to be included in search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchLayer.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchLayerField.html#type)
     */
    type:
      | "small-integer"
      | "integer"
      | "single"
      | "double"
      | "long"
      | "string"
      | "date"
      | "oid"
      | "geometry"
      | "blob"
      | "raster"
      | "guid"
      | "global-id"
      | "xml";

    /**
     * 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 {
    /**
     * Represents the field of a layer to use for search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchLayerField.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchLayerField.html#type)
     */
    type?:
      | "small-integer"
      | "integer"
      | "single"
      | "double"
      | "long"
      | "string"
      | "date"
      | "oid"
      | "geometry"
      | "blob"
      | "raster"
      | "guid"
      | "global-id"
      | "xml";
  }

  interface SearchTable extends Accessor {
    /**
     * The field to use for search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchTable.html#field)
     */
    field: SearchTableField;
    /**
     * The id of the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchTable.html#id)
     */
    id: string;

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

  interface SearchTableConstructor {
    /**
     * Represents a table to be included in search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchTable.html)
     */

    new (properties?: SearchTableProperties): SearchTable;
  }

  export const SearchTable: SearchTableConstructor;

  interface SearchTableProperties {
    /**
     * The field to use for search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchTable.html#field)
     */
    field?: SearchTableFieldProperties;
    /**
     * The id of the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchTable.html#id)
     */
    id?: string;
  }

  interface SearchTableField extends Accessor {
    /**
     * Whether or not the field is an exact match.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchTableField.html#exactMatch)
     */
    exactMatch: boolean;
    /**
     * The name of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchTableField.html#name)
     */
    name: string;
    /**
     * The data type of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchTableField.html#type)
     */
    type:
      | "small-integer"
      | "integer"
      | "single"
      | "double"
      | "long"
      | "string"
      | "date"
      | "oid"
      | "geometry"
      | "blob"
      | "raster"
      | "guid"
      | "global-id"
      | "xml";

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

  interface SearchTableFieldConstructor {
    /**
     * Represents the field of a table to use for search.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchTableField.html)
     */

    new (properties?: SearchTableFieldProperties): SearchTableField;
  }

  export const SearchTableField: SearchTableFieldConstructor;

  interface SearchTableFieldProperties {
    /**
     * Whether or not the field is an exact match.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchTableField.html#exactMatch)
     */
    exactMatch?: boolean;
    /**
     * The name of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchTableField.html#name)
     */
    name?: string;
    /**
     * The data type of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchTableField.html#type)
     */
    type?:
      | "small-integer"
      | "integer"
      | "single"
      | "double"
      | "long"
      | "string"
      | "date"
      | "oid"
      | "geometry"
      | "blob"
      | "raster"
      | "guid"
      | "global-id"
      | "xml";
  }

  interface Viewing extends Accessor {
    /**
     * An object specifying the search parameters set within the web scene or web map.
     *
     * [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 {
    /**
     * Represents view-specific properties of application and UI elements for the web map or web scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-Viewing.html)
     */

    new (properties?: ViewingProperties): Viewing;
  }

  export const Viewing: ViewingConstructor;

  interface ViewingProperties {
    /**
     * An object specifying the search parameters set within the web scene or web map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-Viewing.html#search)
     */
    search?: SearchProperties;
  }

  interface WebMap extends Map, corePromise {
    /**
     * The applicationProperties contains the viewing properties of the WebMap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#applicationProperties)
     */
    applicationProperties: ApplicationProperties;
    /**
     * The name of the application that authored the WebMap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#authoringApp)
     */
    authoringApp: string;
    /**
     * The version of the application that authored the WebMap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#authoringAppVersion)
     */
    authoringAppVersion: string;
    /**
     * 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>;
    /**
     * When a web map is configured as floor-aware, it has a floorInfo property defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#floorInfo)
     */
    floorInfo: MapFloorInfo;
    /**
     * The initial view of the WebMap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#initialViewProperties)
     */
    initialViewProperties: InitialViewProperties;
    /**
     * Indicates whether the instance has loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#loaded)
     */
    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)
     */
    readonly loadError: Error;
    /**
     * Represents the status of a [load](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#load) operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#loadStatus)
     */
    readonly loadStatus: "not-loaded" | "loading" | "failed" | "loaded";
    /**
     * 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#sourceVersion)
     */
    readonly sourceVersion: WebMapSourceVersion;
    /**
     * The URL to the thumbnail used for the webmap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#thumbnailUrl)
     */
    thumbnailUrl: string;
    /**
     * The widgets object contains widgets that are exposed to the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#widgets)
     */
    widgets: Widgets;

    /**
     * Triggers the loading of the WebMap instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#load)
     */
    load(): Promise<any>;
    /**
     * Loads all the externally loadable resources associated with the webmap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#loadAll)
     */
    loadAll(): Promise<WebMap>;
    /**
     * Saves the webmap to its associated portal item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#save)
     */
    save(options?: WebMapSaveOptions): Promise<PortalItem>;
    /**
     * Saves the webmap to a new [portal item](https://developers.arcgis.com/javascript/latest/api-reference/esri-portal-PortalItem.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#saveAs)
     */
    saveAs(portalItem: PortalItem | PortalItemProperties, options?: WebMapSaveAsOptions): Promise<PortalItem>;
    /**
     * Update properties of the WebMap related to the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#updateFrom)
     */
    updateFrom(view: MapView, options?: WebMapUpdateFromOptions): Promise<any>;
  }

  interface WebMapConstructor {
    /**
     * Loads a [WebMap](https://doc.arcgis.com/en/arcgis-online/create-maps/make-your-first-map.htm) from [ArcGIS Online](https://www.arcgis.com/home/) or [ArcGIS Enterprise portal](https://enterprise.arcgis.com/en/portal/latest/administer/windows/what-is-portal-for-arcgis-.htm) into a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html)
     */

    new (properties?: WebMapProperties): WebMap;

    /**
     * Creates a new instance of this class and initializes it with values from a JSON object generated from an ArcGIS product.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#fromJSON)
     */
    fromJSON(json: any): any;
  }

  export const WebMap: WebMapConstructor;

  interface WebMapProperties extends MapProperties {
    /**
     * The applicationProperties contains the viewing properties of the WebMap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#applicationProperties)
     */
    applicationProperties?: ApplicationPropertiesProperties;
    /**
     * The name of the application that authored the WebMap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#authoringApp)
     */
    authoringApp?: string;
    /**
     * The version of the application that authored the WebMap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#authoringAppVersion)
     */
    authoringAppVersion?: string;
    /**
     * 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>;
    /**
     * When a web map is configured as floor-aware, it has a floorInfo property defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#floorInfo)
     */
    floorInfo?: MapFloorInfoProperties;
    /**
     * The initial view of the WebMap.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#presentation)
     */
    presentation?: any;
    /**
     * The URL to the thumbnail used for the webmap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#thumbnailUrl)
     */
    thumbnailUrl?: string;
    /**
     * The widgets object contains widgets that are exposed to the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#widgets)
     */
    widgets?: Widgets;
  }

  interface ApplicationProperties extends Accessor {
    /**
     * View-specific properties of application and UI elements for the web map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-ApplicationProperties.html#viewing)
     */
    viewing: Viewing;
  }

  interface ApplicationPropertiesConstructor {
    /**
     * Represents configuration of application and UI elements 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-ApplicationProperties.html)
     */

    new (properties?: ApplicationPropertiesProperties): ApplicationProperties;
  }

  export const ApplicationProperties: ApplicationPropertiesConstructor;

  interface ApplicationPropertiesProperties {
    /**
     * View-specific properties of application and UI elements for the web map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-ApplicationProperties.html#viewing)
     */
    viewing?: ViewingProperties;
  }

  interface ColorBackground extends Accessor, JSONSupport {
    /**
     * The color of the background.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-background-ColorBackground.html#color)
     */
    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 {
    /**
     * Represents the background color of the [WebMap](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html) when displayed in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-background-ColorBackground.html)
     */

    new (properties?: ColorBackgroundProperties): ColorBackground;

    fromJSON(json: any): ColorBackground;
  }

  export const ColorBackground: ColorBackgroundConstructor;

  interface ColorBackgroundProperties {
    /**
     * The color of the background.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-background-ColorBackground.html#color)
     */
    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.
     *
     * [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;
    /**
     * The viewpoint of the bookmark item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-Bookmark.html#viewpoint)
     */
    viewpoint: Viewpoint;
  }

  interface BookmarkConstructor {
    /**
     * A bookmark is a saved map extent that allows end users to quickly navigate to a particular area of interest using 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)
     */

    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.
     *
     * [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;
    /**
     * The viewpoint of the bookmark item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-Bookmark.html#viewpoint)
     */
    viewpoint?: ViewpointProperties;
  }

  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)
     */
    background: ColorBackground;
    /**
     * The spatial reference 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#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 {
    /**
     * Represents the initial viewing state of the [WebMap](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html) when displayed in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-InitialViewProperties.html)
     */

    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)
     */
    background?: ColorBackgroundProperties;
    /**
     * The spatial reference 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#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;
  }

  /**
   * Floor filtering is controlled by a configurable [floor filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#FloorFilter)
   */
  export interface WebMapFloorFilter extends Object {
    /**
     * Indicates whether the FloorFilter is active and filtering the displayed content according to the [FloorFilter](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html) selection.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#FloorFilter)
     */
    enabled: boolean;
    /**
     * Indicates whether the levels list is showing the long names from longNameField.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#FloorFilter)
     */
    longNames: boolean;
    /**
     * Indicates whether the floor filter has been minimized to show only the levels list.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#FloorFilter)
     */
    minimized: boolean;
    /**
     * Indicates whether the levels portion of the floor filter has been pinned to show the levels list.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#FloorFilter)
     */
    pinnedLevels: boolean;
    /**
     * Contains the site ID for the initially selected [site](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html#site) in the floor filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#FloorFilter)
     */
    site: string;
    /**
     * Contains the facility ID for the initially selected [facility](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html#facility) in the floor filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#FloorFilter)
     */
    facility: string;
    /**
     * Contains the level ID for the initially selected floor, which is used when filtering layers by their configured floor-aware properties.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#FloorFilter)
     */
    level: string;
  }

  /**
   * Time animation is controlled by a configurable [time slider](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#TimeSlider)
   */
  export interface WebMapTimeSlider extends Object {
    /**
     * The current time extent of the time slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#TimeSlider)
     */
    currentTimeExtent: TimeExtent;
    /**
     * The temporal extent for the entire slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#TimeSlider)
     */
    fullTimeExtent: TimeExtent;
    /**
     * When `true`, the time slider will play its animation in a loop.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#TimeSlider)
     */
    loop: boolean;
    /**
     * The number of stops.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#TimeSlider)
     */
    numStops: number;
    /**
     * The thumb count.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#TimeSlider)
     */
    numThumbs: number;
    /**
     * An array of dates for the time slider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#TimeSlider)
     */
    stops: Date[];
    /**
     * The time rate in milliseconds between animation steps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#TimeSlider)
     */
    stopDelay: number;
    /**
     * Defines regularly spaced stops on the time slider from a [TimeInterval](https://developers.arcgis.com/javascript/latest/api-reference/esri-TimeInterval.html) object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#TimeSlider)
     */
    stopInterval: TimeInterval;
  }

  export interface WebMapSaveAsOptions extends Object {
    /**
     * The folder in which to save the item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#saveAs)
     */
    folder?: PortalFolder;
    /**
     * Allow the webmap to be saved even in the case it contains unsupported content (layers, renderers, symbols).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#saveAs)
     */
    ignoreUnsupported?: boolean;
  }

  export interface WebMapSaveOptions extends Object {
    /**
     * When `true`, the webmap will save even if it contains unsupported content (layers, renderers, symbols).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#save)
     */
    ignoreUnsupported?: boolean;
  }

  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;
  }

  export interface WebMapUpdateFromOptions extends Object {
    /**
     * When `true`, the view's background will not be updated for the webmap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#updateFrom)
     */
    backgroundExcluded?: boolean;
    /**
     * When `true`, the initial [viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-InitialViewProperties.html#viewpoint) of the view will not be updated for the webmap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#updateFrom)
     */
    viewpointExcluded?: boolean;
    /**
     * When `true`, the view's scale will be updated for the webmap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#updateFrom)
     */
    scalePreserved?: boolean;
    /**
     * When `true`, the thumbnail will not be updated for the webmap.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#updateFrom)
     */
    thumbnailExcluded?: boolean;
    /**
     * The size of the thumbnail.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#updateFrom)
     */
    thumbnailSize?: WebMapUpdateFromOptionsThumbnailSize;
    /**
     * When `true`, the webmap's [widgets](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#widgets) property will not be updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#updateFrom)
     */
    widgetsExcluded?: boolean;
  }

  export interface WebMapUpdateFromOptionsThumbnailSize extends Object {
    /**
     * The width of the thumbnail.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#updateFrom)
     */
    width: number;
    /**
     * The height of the thumbnail.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#updateFrom)
     */
    height: number;
  }

  /**
   * The widgets object contains widgets that are exposed to the user.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#Widgets)
   */
  export interface Widgets extends Object {
    /**
     * Time animation is controlled by a configurable [time slider](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#Widgets)
     */
    timeSlider: WebMapTimeSlider;
    /**
     * Floor filtering is controlled by a configurable [floor filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#Widgets)
     */
    floorFilter: WebMapFloorFilter;
  }

  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: websceneApplicationProperties;
    /**
     * The name of the application that authored the WebScene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#authoringApp)
     */
    authoringApp: string;
    /**
     * The version of the application that authored the WebScene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#authoringAppVersion)
     */
    authoringAppVersion: string;
    /**
     * *This property only applies to local scenes.* Represents an optional clipping area used to define the bounds or [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of a local scene.
     *
     * [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) is enabled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#clippingEnabled)
     */
    clippingEnabled: boolean;
    /**
     * When a web scene is configured as floor-aware, it has a floorInfo property defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#floorInfo)
     */
    floorInfo: MapFloorInfo;
    /**
     * The height model info 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.html#heightModelInfo)
     */
    heightModelInfo: HeightModelInfo;
    /**
     * The initial view of the WebScene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#initialViewProperties)
     */
    initialViewProperties: websceneInitialViewProperties;
    /**
     * Indicates whether the instance has loaded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#loaded)
     */
    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)
     */
    readonly loadError: Error;
    /**
     * Represents the status of a [load](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#load) operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#loadStatus)
     */
    readonly loadStatus: "not-loaded" | "loading" | "failed" | "loaded";
    /**
     * 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 slides that 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#thumbnailUrl)
     */
    thumbnailUrl: string;

    /**
     * Triggers the loading of the WebScene instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#load)
     */
    load(): Promise<any>;
    /**
     * Loads all the externally loadable resources associated with the webscene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#loadAll)
     */
    loadAll(): Promise<WebScene>;
    /**
     * Saves the webscene to its associated portal item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#save)
     */
    save(options?: WebSceneSaveOptions): Promise<PortalItem>;
    /**
     * Saves the webscene to a new portal item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#saveAs)
     */
    saveAs(portalItem: PortalItem | PortalItemProperties, options?: WebSceneSaveAsOptions): Promise<PortalItem>;
    /**
     * Converts an instance of this class to its ArcGIS portal JSON representation.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#updateFrom)
     */
    updateFrom(view: SceneView, options?: WebSceneUpdateFromOptions): Promise<any>;
  }

  interface WebSceneConstructor {
    /**
     * The web scene is the core element of 3D mapping across ArcGIS.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html)
     */

    new (properties?: WebSceneProperties): WebScene;

    /**
     * Creates a new instance of this class and initializes it with values from a JSON object generated from an ArcGIS product.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#fromJSON)
     */
    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?: websceneApplicationPropertiesProperties;
    /**
     * The name of the application that authored the WebScene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#authoringApp)
     */
    authoringApp?: string;
    /**
     * The version of the application that authored the WebScene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#authoringAppVersion)
     */
    authoringAppVersion?: string;
    /**
     * *This property only applies to local scenes.* Represents an optional clipping area used to define the bounds or [Extent](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Extent.html) of a local scene.
     *
     * [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) is enabled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#clippingEnabled)
     */
    clippingEnabled?: boolean;
    /**
     * When a web scene is configured as floor-aware, it has a floorInfo property defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#floorInfo)
     */
    floorInfo?: MapFloorInfoProperties;
    /**
     * The height model info 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.html#heightModelInfo)
     */
    heightModelInfo?: HeightModelInfoProperties;
    /**
     * The initial view of the WebScene.
     *
     * [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 slides that 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#thumbnailUrl)
     */
    thumbnailUrl?: string;
  }

  interface websceneApplicationProperties 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(): websceneApplicationProperties;
  }

  interface websceneApplicationPropertiesConstructor {
    /**
     * Represents configuration of application and UI elements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-ApplicationProperties.html)
     */

    new (properties?: websceneApplicationPropertiesProperties): websceneApplicationProperties;
  }

  export const websceneApplicationProperties: websceneApplicationPropertiesConstructor;

  interface websceneApplicationPropertiesProperties {
    /**
     * 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 {
    /**
     * The background of a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) that lies behind the sky, atmosphere and stars.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-background-Background.html)
     */

    new (properties?: BackgroundProperties): Background;

    fromJSON(json: any): Background;
  }

  export const Background: BackgroundConstructor;

  interface BackgroundProperties {}

  interface backgroundColorBackground extends Background, JSONSupport {
    /**
     * The color of the background.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-background-ColorBackground.html#color)
     */
    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 {
    /**
     * This type of [Background](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-background-Background.html) allows to set a [Color](https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html) as the background of 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-background-ColorBackground.html)
     */

    new (properties?: backgroundColorBackgroundProperties): backgroundColorBackground;

    fromJSON(json: any): backgroundColorBackground;
  }

  export const backgroundColorBackground: backgroundColorBackgroundConstructor;

  interface backgroundColorBackgroundProperties extends BackgroundProperties {
    /**
     * The color of the background.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-background-ColorBackground.html#color)
     */
    color?: Color | number[] | string;
  }

  interface Environment extends Accessor {
    /**
     * Specifies whether the atmosphere should be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Environment.html#atmosphereEnabled)
     */
    atmosphereEnabled: boolean;
    /**
     * Specifies how the background of the scene (which lies behind sky, stars and atmosphere) should be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Environment.html#background)
     */
    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)
     */
    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 {
    /**
     * Represents settings that affect the environment in which the [WebScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html) is displayed (such as lighting).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Environment.html)
     */

    new (properties?: EnvironmentProperties): Environment;
  }

  export const Environment: EnvironmentConstructor;

  interface EnvironmentProperties {
    /**
     * Specifies whether the atmosphere should be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Environment.html#atmosphereEnabled)
     */
    atmosphereEnabled?: boolean;
    /**
     * Specifies how the background of the scene (which lies behind sky, stars and atmosphere) should be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Environment.html#background)
     */
    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)
     */
    starsEnabled?: boolean;
  }

  interface websceneInitialViewProperties extends Accessor {
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#spatialReference)
     */
    spatialReference: SpatialReference;
    /**
     * The viewing mode of the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#viewingMode)
     */
    viewingMode: "global" | "local";
    /**
     * 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 {
    /**
     * Represents the initial viewing state of the [WebScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html) when displayed in 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-InitialViewProperties.html)
     */

    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#spatialReference)
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * The viewing mode of the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-InitialViewProperties.html#viewingMode)
     */
    viewingMode?: "global" | "local";
    /**
     * 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)
     */
    date: Date;
    /**
     * Indicates whether to show shadows cast by the sun.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Lighting.html#directShadowsEnabled)
     */
    directShadowsEnabled: boolean;
    /**
     * The UTC time zone offset in hours that should be displayed in the UI to represent the date.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Lighting.html#displayUTCOffset)
     */
    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 {
    /**
     * The lighting object is part of the [Environment](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Environment.html) and contains information relating to how a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) is lit.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Lighting.html)
     */

    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)
     */
    date?: DateProperties;
    /**
     * Indicates whether to show shadows cast by the sun.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Lighting.html#directShadowsEnabled)
     */
    directShadowsEnabled?: boolean;
    /**
     * The UTC time zone offset in hours that should be displayed in the UI to represent the date.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Lighting.html#displayUTCOffset)
     */
    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 settings previously 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 {
    /**
     * A presentation contains a [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of [slides](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html) that allows users to quickly navigate to predefined settings of 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-Presentation.html)
     */

    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 settings previously 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.
     *
     * [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: SlideEnvironment;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#viewpoint)
     */
    viewpoint: Viewpoint;
    /**
     * The visible layers of the scene.
     *
     * [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)
     */
    applyTo(view: SceneView, options?: SlideApplyToOptions): Promise<Slide>;
    /**
     * Creates a deep clone of this object.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#updateFrom)
     */
    updateFrom(view: SceneView, options?: SlideUpdateFromOptions): Promise<Slide>;
  }

  interface SlideConstructor {
    /**
     * A slide stores a snapshot of several pre-set properties of the [WebScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html) and [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html), such as the [basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#basemap), [viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#viewpoint) and [visible layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#visibleLayers).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html)
     */

    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#createFrom)
     */
    createFrom(view: SceneView, options?: SlideCreateFromOptions): Promise<Slide>;
  }

  export const Slide: SlideConstructor;

  interface SlideProperties {
    /**
     * The basemap of the scene.
     *
     * [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?: SlideEnvironmentProperties;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#viewpoint)
     */
    viewpoint?: ViewpointProperties;
    /**
     * The visible layers of the scene.
     *
     * [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)
     */
    animate?: boolean;
    /**
     * Increases or decreases the animation speed by the specified factor.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#applyTo)
     */
    speedFactor?: number;
    /**
     * Set the exact duration (in milliseconds) of the animation.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#applyTo)
     */
    maxDuration?: number;
    /**
     * The easing function to use for the animation.
     *
     * [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.
     *
     * [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.
     *
     * [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)
     */
    format?: string;
    /**
     * The image quality (due to compression).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#createFrom)
     */
    quality?: number;
    /**
     * The image width.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#createFrom)
     */
    width?: number;
    /**
     * The image height.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#createFrom)
     */
    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 SlideEnvironmentProperties extends Object {
    /**
     * Settings for defining the lighting of the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#environment)
     */
    lighting?: LightingProperties;
  }

  export interface SlideEnvironment extends AnonymousAccessor {
    /**
     * Settings for defining the lighting of the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#environment)
     */
    lighting?: Lighting;
  }

  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 representing the 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 representing the 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.
     *
     * [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)
     */
    format?: string;
    /**
     * The image quality (due to compression).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#updateFrom)
     */
    quality?: number;
    /**
     * The image width.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#updateFrom)
     */
    width?: number;
    /**
     * The image height.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#updateFrom)
     */
    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) when the 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 the layer specified by the layer id.
     *
     * [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) when the 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 the layer specified by the layer id.
     *
     * [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).
     *
     * [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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#updateFrom)
     */
    thumbnailExcluded?: boolean;
    /**
     * The size of the thumbnail.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D.html#unit)
     */
    unit: SystemOrAreaUnit;
    /**
     * List of available units and unit systems (imperial, metric) for displaying the area values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D.html#unitOptions)
     */
    unitOptions: SystemOrAreaUnit[];
    /**
     * 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-widgets-AreaMeasurement2D.html#view)
     */
    view: MapView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D.html#viewModel)
     */
    viewModel: AreaMeasurement2DViewModel;
  }

  interface AreaMeasurement2DConstructor {
    /**
     * The AreaMeasurement2D widget calculates and displays the area and perimeter of a polygon in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D.html#unit)
     */
    unit?:
      | "imperial"
      | "metric"
      | "square-millimeters"
      | "square-centimeters"
      | "square-decimeters"
      | "square-meters"
      | "square-kilometers"
      | "square-inches"
      | "square-feet"
      | "square-yards"
      | "square-miles"
      | "square-us-feet"
      | "acres"
      | "ares"
      | "hectares";
    /**
     * List of available units and unit systems (imperial, metric) for displaying the area values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D.html#unitOptions)
     */
    unitOptions?: (
      | "imperial"
      | "metric"
      | "square-millimeters"
      | "square-centimeters"
      | "square-decimeters"
      | "square-meters"
      | "square-kilometers"
      | "square-inches"
      | "square-feet"
      | "square-yards"
      | "square-miles"
      | "square-us-feet"
      | "acres"
      | "ares"
      | "hectares"
    )[];
    /**
     * 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-widgets-AreaMeasurement2D.html#view)
     */
    view?: MapViewProperties;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D.html#viewModel)
     */
    viewModel?: AreaMeasurement2DViewModel;
  }

  interface AreaMeasurement2DViewModel {
    /**
     * When the coordinate system is projected (other than web mercator) then perimeters less than this threshold will be computed planimetrically.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#geodesicDistanceThreshold)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#measurementLabel)
     */
    readonly measurementLabel: AreaMeasurement2DViewModelMeasurementLabel;
    /**
     * The ViewModel's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#state)
     */
    readonly state: "disabled" | "ready" | "measuring" | "measured";
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the area values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#unit)
     */
    unit: SystemOrAreaUnit;
    /**
     * List of available units and unit systems (imperial, metric) for displaying the area values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#unitOptions)
     */
    unitOptions: SystemOrAreaUnit[];
    /**
     * 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#clear)
     */
    clear(): void;
    /**
     * Starts a new measurement.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html#start)
     */
    start(): void;
  }

  interface AreaMeasurement2DViewModelConstructor {
    /**
     * Provides the logic for the [AreaMeasurement2D](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement2D-AreaMeasurement2DViewModel.html)
     */

    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 {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D.html#iconClass)
     */
    iconClass: string;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the area values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D.html#unit)
     */
    unit: SystemOrAreaUnit;
    /**
     * List of available units and unit systems (imperial, metric) for displaying the area values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D.html#unitOptions)
     */
    unitOptions: SystemOrAreaUnit[];
    /**
     * A reference to 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-AreaMeasurement3D.html#view)
     */
    view: SceneView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D.html#viewModel)
     */
    viewModel: AreaMeasurement3DViewModel;
  }

  interface AreaMeasurement3DConstructor {
    /**
     * The AreaMeasurement3D widget calculates and displays the area and perimeter of a polygon.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D.html)
     */

    new (properties?: AreaMeasurement3DProperties): AreaMeasurement3D;
  }

  export const AreaMeasurement3D: AreaMeasurement3DConstructor;

  interface AreaMeasurement3DProperties extends WidgetProperties {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D.html#iconClass)
     */
    iconClass?: string;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the area values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D.html#unit)
     */
    unit?:
      | "imperial"
      | "metric"
      | "square-millimeters"
      | "square-centimeters"
      | "square-decimeters"
      | "square-meters"
      | "square-kilometers"
      | "square-inches"
      | "square-feet"
      | "square-yards"
      | "square-miles"
      | "square-us-feet"
      | "acres"
      | "ares"
      | "hectares";
    /**
     * List of available units and unit systems (imperial, metric) for displaying the area values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D.html#unitOptions)
     */
    unitOptions?: (
      | "imperial"
      | "metric"
      | "square-millimeters"
      | "square-centimeters"
      | "square-decimeters"
      | "square-meters"
      | "square-kilometers"
      | "square-inches"
      | "square-feet"
      | "square-yards"
      | "square-miles"
      | "square-us-feet"
      | "acres"
      | "ares"
      | "hectares"
    )[];
    /**
     * A reference to 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-AreaMeasurement3D.html#view)
     */
    view?: SceneViewProperties;
    /**
     * The view model for this 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#state)
     */
    readonly state: "disabled" | "ready" | "measuring" | "measured";
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the area values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#unit)
     */
    unit: SystemOrAreaUnit;
    /**
     * List of available units and unit systems (imperial, metric) for displaying the area values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#unitOptions)
     */
    unitOptions: SystemOrAreaUnit[];
    /**
     * 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#clear)
     */
    clear(): void;
    /**
     * Starts a new measurement.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#start)
     */
    start(): void;
  }

  interface AreaMeasurement3DViewModelConstructor {
    /**
     * Provides the logic for the [AreaMeasurement3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html)
     */

    new (properties?: AreaMeasurement3DViewModelProperties): AreaMeasurement3DViewModel;
  }

  export const AreaMeasurement3DViewModel: AreaMeasurement3DViewModelConstructor;

  interface AreaMeasurement3DViewModelProperties {
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the area values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#unit)
     */
    unit?:
      | "imperial"
      | "metric"
      | "square-millimeters"
      | "square-centimeters"
      | "square-decimeters"
      | "square-meters"
      | "square-kilometers"
      | "square-inches"
      | "square-feet"
      | "square-yards"
      | "square-miles"
      | "square-us-feet"
      | "acres"
      | "ares"
      | "hectares";
    /**
     * List of available units and unit systems (imperial, metric) for displaying the area values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#unitOptions)
     */
    unitOptions?: (
      | "imperial"
      | "metric"
      | "square-millimeters"
      | "square-centimeters"
      | "square-decimeters"
      | "square-meters"
      | "square-kilometers"
      | "square-inches"
      | "square-feet"
      | "square-yards"
      | "square-miles"
      | "square-us-feet"
      | "acres"
      | "ares"
      | "hectares"
    )[];
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#measurement)
     */
    measurementMode: "euclidean" | "geodesic";
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-AreaMeasurement3D-AreaMeasurement3DViewModel.html#MeasurementValue)
     */
    state: string;
  }

  interface Attachments extends Widget {
    /**
     * A string value indicating how to display the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attachments.html#displayType)
     */
    displayType: "preview" | "list";
    /**
     * The graphic for the attachments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attachments.html#graphic)
     */
    graphic: Graphic;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attachments.html#viewModel)
     */
    viewModel: AttachmentsViewModel;
  }

  interface AttachmentsConstructor {
    /**
     * This widget allows users to view and edit attachments associated with a feature and is considered a standalone experience that can be utilized in widgets such [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) and [Editor](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attachments.html)
     */

    new (properties?: AttachmentsProperties): Attachments;
  }

  export const Attachments: AttachmentsConstructor;

  interface AttachmentsProperties extends WidgetProperties {
    /**
     * A string value indicating how to display the attachment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attachments.html#displayType)
     */
    displayType?: "preview" | "list";
    /**
     * The graphic for the attachments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attachments.html#graphic)
     */
    graphic?: GraphicProperties;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attachments.html#viewModel)
     */
    viewModel?: AttachmentsViewModelProperties;
  }

  interface AttachmentsViewModel extends Accessor {
    /**
     * The current [AttachmentInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html) being edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attachments-AttachmentsViewModel.html#activeAttachmentInfo)
     */
    activeAttachmentInfo: supportAttachmentInfo;
    /**
     * A collection of [AttachmentInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html) defined on a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attachments-AttachmentsViewModel.html#attachmentInfos)
     */
    readonly attachmentInfos: supportAttachmentInfo[];
    /**
     * The graphic for the attachments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attachments-AttachmentsViewModel.html#graphic)
     */
    graphic: Graphic;
    /**
     * The current mode performed by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attachments-AttachmentsViewModel.html#mode)
     */
    mode: "view" | "add" | "edit";
    /**
     * The current state of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attachments-AttachmentsViewModel.html#state)
     */
    readonly state: "ready" | "disabled" | "loading";
    /**
     * Defines whether or not the feature supports resizing attachments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attachments-AttachmentsViewModel.html#supportsResizeAttachments)
     */
    supportsResizeAttachments: boolean;

    /**
     * Queries for the attachments on a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attachments-AttachmentsViewModel.html#getAttachments)
     */
    getAttachments(): Promise<supportAttachmentInfo[]>;
  }

  interface AttachmentsViewModelConstructor {
    /**
     * Provides the logic for the [Attachments](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attachments.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attachments-AttachmentsViewModel.html)
     */

    new (properties?: AttachmentsViewModelProperties): AttachmentsViewModel;
  }

  export const AttachmentsViewModel: AttachmentsViewModelConstructor;

  interface AttachmentsViewModelProperties {
    /**
     * The current [AttachmentInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-query-support-AttachmentInfo.html) being edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attachments-AttachmentsViewModel.html#activeAttachmentInfo)
     */
    activeAttachmentInfo?: supportAttachmentInfoProperties;
    /**
     * The graphic for the attachments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attachments-AttachmentsViewModel.html#graphic)
     */
    graphic?: GraphicProperties;
    /**
     * The current mode performed by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attachments-AttachmentsViewModel.html#mode)
     */
    mode?: "view" | "add" | "edit";
    /**
     * Defines whether or not the feature supports resizing attachments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attachments-AttachmentsViewModel.html#supportsResizeAttachments)
     */
    supportsResizeAttachments?: boolean;
  }

  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)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution.html#viewModel)
     */
    viewModel: AttributionViewModel;
  }

  interface AttributionConstructor {
    /**
     * The Attribution displays attribution text for the layers in a map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution.html)
     */

    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)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution-AttributionViewModel.html#state)
     */
    readonly state: "disabled" | "ready" | "loading";
    /**
     * 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 {
    /**
     * Provides the logic for the [Attribution](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Attribution-AttributionViewModel.html)
     */

    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 & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  /**
   * 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;
    /**
     * When `true`, sets the widget to a disabled state so the user cannot interact with it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html#disabled)
     */
    disabled: boolean;
    /**
     * Indicates the heading level to use for the message "No basemaps available" when no basemaps are available in the BasemapGallery.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html#headingLevel)
     */
    headingLevel: number;
    /**
     * 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html#viewModel)
     */
    viewModel: BasemapGalleryViewModel;
  }

  interface BasemapGalleryConstructor {
    /**
     * The BasemapGallery widget displays a collection images representing basemaps from ArcGIS.com or a user-defined set of map or image services.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html)
     */

    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;
    /**
     * When `true`, sets the widget to a disabled state so the user cannot interact with it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html#disabled)
     */
    disabled?: boolean;
    /**
     * Indicates the heading level to use for the message "No basemaps available" when no basemaps are available in the BasemapGallery.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html#headingLevel)
     */
    headingLevel?: number;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html#source)
     */
    source?:
      | LocalBasemapsSourceProperties
      | PortalBasemapsSourceProperties
      | CollectionProperties<BasemapProperties>
      | BasemapProperties[]
      | PortalProperties;
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html#source)
     */
    source: LocalBasemapsSource | PortalBasemapsSource;
    /**
     * The view model's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html#state)
     */
    readonly state: "ready" | "disabled";
    /**
     * The view from which the widget will operate.
     *
     * [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)
     */
    basemapEquals(basemap1: Basemap, basemap2: Basemap): boolean;
  }

  interface BasemapGalleryViewModelConstructor {
    /**
     * Provides the logic for the [BasemapGallery](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html#source)
     */
    source?:
      | LocalBasemapsSourceProperties
      | PortalBasemapsSourceProperties
      | CollectionProperties<BasemapProperties>
      | BasemapProperties[]
      | PortalProperties;
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-BasemapGalleryItem.html#state)
     */
    readonly state: "loading" | "ready" | "error";
    /**
     * 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 {
    /**
     * The BasemapGalleryItem class represents one of the [items](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html#items) in the [BasemapGallery](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-BasemapGalleryItem.html)
     */

    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 & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-LocalBasemapsSource.html#state)
     */
    readonly state: string;

    /**
     * Refreshes the source basemaps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-LocalBasemapsSource.html#refresh)
     */
    refresh(): void;
  }

  interface LocalBasemapsSourceConstructor {
    /**
     * The LocalBasemapsSource class is a Collection-driven [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html) [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html#source) in the [BasemapGalleryViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html) or [BasemapGallery](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-LocalBasemapsSource.html)
     */

    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: BasemapFilter;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-PortalBasemapsSource.html#query)
     */
    query: any | string;
    /**
     * The source's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-PortalBasemapsSource.html#state)
     */
    readonly state: "not-loaded" | "loading" | "ready";
    /**
     * 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: UpdateBasemapsCallback;
  }

  interface PortalBasemapsSourceConstructor {
    /**
     * The PortalBasemapsSource class is a Portal-driven [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html) [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html#source) in the [BasemapGalleryViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-BasemapGalleryViewModel.html) or [BasemapGallery](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapGallery-support-PortalBasemapsSource.html)
     */

    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?: BasemapFilter;
    /**
     * 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.
     *
     * [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?: UpdateBasemapsCallback;
  }

  export type BasemapFilter = (item: Basemap, index: number, array: Basemap[]) => boolean;

  export type UpdateBasemapsCallback = (items: Basemap[]) => Basemap[];

  interface BasemapLayerList extends Widget {
    /**
     * A collection of [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html)s representing the [baseLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#baseLayers).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#baseItems)
     */
    readonly baseItems: Collection<ListItem>;
    /**
     * Specifies a function that accesses each [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html) representing a base layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#baseListItemCreatedFunction)
     */
    baseListItemCreatedFunction: ListItemCreatedHandler;
    /**
     * The current basemap's title.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#basemapTitle)
     */
    basemapTitle: string;
    /**
     * Indicates whether the basemap’s title, layer order and layer grouping can be edited by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#editingEnabled)
     */
    editingEnabled: boolean;
    /**
     * Indicates the heading level to use for the widget title (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#headingLevel)
     */
    headingLevel: number;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#iconClass)
     */
    iconClass: string;
    /**
     * Indicates whether more than one list item may be selected by the user at a single time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#multipleSelectionEnabled)
     */
    multipleSelectionEnabled: boolean;
    /**
     * A collection of [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html)s representing the [referenceLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#referenceLayers).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#referenceItems)
     */
    readonly referenceItems: Collection<ListItem>;
    /**
     * Specifies a function that accesses each [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html) representing a reference layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#referenceListItemCreatedFunction)
     */
    referenceListItemCreatedFunction: ListItemCreatedHandler;
    /**
     * A collection of selected [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html)s representing basemap layers selected by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#selectedItems)
     */
    selectedItems: Collection<ListItem>;
    /**
     * Option for enabling status indicators, which indicate whether or not each layer is loading resources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#statusIndicatorsVisible)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#viewModel)
     */
    viewModel: BasemapLayerListViewModel;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#visibleElements)
     */
    visibleElements: VisibleElements;

    /**
     * Triggers the [trigger-action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#event-trigger-action) event and executes the 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-BasemapLayerList.html#triggerAction)
     */
    triggerAction(action: ActionButton | ActionToggle, item: ListItem): void;

    on(name: "trigger-action", eventHandler: BasemapLayerListTriggerActionEventHandler): IHandle;
  }

  interface BasemapLayerListConstructor {
    /**
     * The BasemapLayerList widget provides a way to display a list of [Basemap](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html) layers and switch on/off their visibility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html)
     */

    new (properties?: BasemapLayerListProperties): BasemapLayerList;
  }

  export const BasemapLayerList: BasemapLayerListConstructor;

  interface BasemapLayerListProperties extends WidgetProperties {
    /**
     * Specifies a function that accesses each [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html) representing a base layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#baseListItemCreatedFunction)
     */
    baseListItemCreatedFunction?: ListItemCreatedHandler;
    /**
     * The current basemap's title.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#basemapTitle)
     */
    basemapTitle?: string;
    /**
     * Indicates whether the basemap’s title, layer order and layer grouping can be edited by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#editingEnabled)
     */
    editingEnabled?: boolean;
    /**
     * Indicates the heading level to use for the widget title (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#headingLevel)
     */
    headingLevel?: number;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#iconClass)
     */
    iconClass?: string;
    /**
     * Indicates whether more than one list item may be selected by the user at a single time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#multipleSelectionEnabled)
     */
    multipleSelectionEnabled?: boolean;
    /**
     * Specifies a function that accesses each [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html) representing a reference layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#referenceListItemCreatedFunction)
     */
    referenceListItemCreatedFunction?: ListItemCreatedHandler;
    /**
     * A collection of selected [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html)s representing basemap layers selected by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#selectedItems)
     */
    selectedItems?: CollectionProperties<ListItemProperties>;
    /**
     * Option for enabling status indicators, which indicate whether or not each layer is loading resources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#statusIndicatorsVisible)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#viewModel)
     */
    viewModel?: BasemapLayerListViewModelProperties;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#visibleElements)
     */
    visibleElements?: VisibleElements;
  }

  interface BasemapLayerListViewModel extends Accessor {
    /**
     * A collection of [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html)s representing the [baseLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#baseLayers).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList-BasemapLayerListViewModel.html#baseItems)
     */
    readonly baseItems: Collection<ListItem>;
    /**
     * Specifies a function that accesses each [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList-BasemapLayerListViewModel.html#baseListItemCreatedFunction)
     */
    baseListItemCreatedFunction: ListItemCreatedHandler;
    /**
     * The current basemap's title.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList-BasemapLayerListViewModel.html#basemapTitle)
     */
    basemapTitle: string;
    /**
     * A collection of [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html)s representing the [referenceLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html#referenceLayers).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList-BasemapLayerListViewModel.html#referenceItems)
     */
    readonly referenceItems: Collection<ListItem>;
    /**
     * Specifies a function that accesses each [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html) representing reference layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList-BasemapLayerListViewModel.html#referenceListItemCreatedFunction)
     */
    referenceListItemCreatedFunction: ListItemCreatedHandler;
    /**
     * The view model's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList-BasemapLayerListViewModel.html#state)
     */
    readonly state: "ready" | "loading" | "disabled";
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList-BasemapLayerListViewModel.html#view)
     */
    view: MapView | SceneView;

    /**
     * Triggers the [trigger-action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList-BasemapLayerListViewModel.html#event-trigger-action) event and executes the 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-BasemapLayerList-BasemapLayerListViewModel.html#triggerAction)
     */
    triggerAction(action: ActionButton | ActionToggle, item: ListItem): void;
  }

  interface BasemapLayerListViewModelConstructor {
    /**
     * Provides logic for the [BasemapLayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList-BasemapLayerListViewModel.html)
     */

    new (properties?: BasemapLayerListViewModelProperties): BasemapLayerListViewModel;
  }

  export const BasemapLayerListViewModel: BasemapLayerListViewModelConstructor;

  interface BasemapLayerListViewModelProperties {
    /**
     * Specifies a function that accesses each [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList-BasemapLayerListViewModel.html#baseListItemCreatedFunction)
     */
    baseListItemCreatedFunction?: ListItemCreatedHandler;
    /**
     * The current basemap's title.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList-BasemapLayerListViewModel.html#basemapTitle)
     */
    basemapTitle?: string;
    /**
     * Specifies a function that accesses each [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html) representing reference layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList-BasemapLayerListViewModel.html#referenceListItemCreatedFunction)
     */
    referenceListItemCreatedFunction?: ListItemCreatedHandler;
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList-BasemapLayerListViewModel.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

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

  export interface BasemapLayerListTriggerActionEvent {
    action: ActionButton | ActionToggle;

    item: ListItem;
  }

  /**
   * The visible elements that are displayed within the widget.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#VisibleElements)
   */
  export interface VisibleElements extends Object {
    /**
     * Indicates whether to the status indicators will be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#VisibleElements)
     */
    statusIndicators?: boolean;
    /**
     * Indicates whether to the base layers will be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#VisibleElements)
     */
    baseLayers?: boolean;
    /**
     * Indicates whether to the reference layers will be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapLayerList.html#VisibleElements)
     */
    referenceLayers?: boolean;
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#nextBasemap)
     */
    nextBasemap: Basemap;
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#viewModel)
     */
    viewModel: BasemapToggleViewModel;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#visibleElements)
     */
    visibleElements: BasemapToggleVisibleElements;

    /**
     * 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;

    on(name: "toggle", eventHandler: BasemapToggleToggleEventHandler): IHandle;
  }

  interface BasemapToggleConstructor {
    /**
     * The BasemapToggle provides a widget which allows an end-user to switch between two basemaps.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html)
     */

    new (properties?: BasemapToggleProperties): BasemapToggle;
  }

  export const BasemapToggle: BasemapToggleConstructor;

  interface BasemapToggleProperties extends WidgetProperties {
    /**
     * The next basemap for toggling.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#nextBasemap)
     */
    nextBasemap?: BasemapProperties | 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#viewModel)
     */
    viewModel?: BasemapToggleViewModelProperties;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#visibleElements)
     */
    visibleElements?: BasemapToggleVisibleElements;
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle-BasemapToggleViewModel.html#nextBasemap)
     */
    nextBasemap: Basemap;
    /**
     * The view model's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle-BasemapToggleViewModel.html#state)
     */
    readonly state: "ready" | "disabled";
    /**
     * The view from which the widget will operate.
     *
     * [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 {
    /**
     * Provides the logic for the [BasemapToggle](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle-BasemapToggleViewModel.html)
     */

    new (properties?: BasemapToggleViewModelProperties): BasemapToggleViewModel;

    /**
     * Helper method to find a basemap's thumbnail URL.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle-BasemapToggleViewModel.html#getThumbnailUrl)
     */
    getThumbnailUrl(basemap: Basemap): string;
  }

  export const BasemapToggleViewModel: BasemapToggleViewModelConstructor;

  interface BasemapToggleViewModelProperties {
    /**
     * The next basemap for toggling.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle-BasemapToggleViewModel.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  export interface BasemapToggleToggleEvent {
    current: Basemap;

    previous: Basemap;
  }

  /**
   * The visible elements that are displayed within the widget.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#VisibleElements)
   */
  export interface BasemapToggleVisibleElements extends Object {
    /**
     * Indicates whether to the title will be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BasemapToggle.html#VisibleElements)
     */
    title?: boolean;
  }

  interface Bookmarks extends Widget, GoTo {
    /**
     * Specifies how new bookmarks will be created if [editingEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#editingEnabled) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#bookmarkCreationOptions)
     */
    bookmarkCreationOptions: BookmarkOptions;
    /**
     * 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>;
    /**
     * Specifies how new bookmarks will be created if [editingEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#editingEnabled) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#defaultCreateOptions)
     */
    defaultCreateOptions: BookmarkOptions;
    /**
     * Specifies how bookmarks will be edited, if [editingEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#editingEnabled) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#defaultEditOptions)
     */
    defaultEditOptions: BookmarkOptions;
    /**
     * When true, the widget is visually withdrawn and cannot be interacted with.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#disabled)
     */
    disabled: boolean;
    /**
     * Indicates whether the bookmarks are able to be edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#editingEnabled)
     */
    editingEnabled: boolean;
    /**
     * Indicates the heading level to use for the message "No bookmarks" when no bookmarks are available in this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#headingLevel)
     */
    headingLevel: number;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#viewModel)
     */
    viewModel: BookmarksViewModel;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#visibleElements)
     */
    visibleElements: BookmarksVisibleElements;

    /**
     * Zoom to a specific bookmark.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#goTo)
     */
    goTo(Bookmark: Bookmark): Promise<any>;

    on(name: "bookmark-select", eventHandler: BookmarksBookmarkSelectEventHandler): IHandle;

    on(name: "bookmark-edit", eventHandler: BookmarksBookmarkEditEventHandler): IHandle;
  }

  interface BookmarksConstructor {
    /**
     * The Bookmarks widget allows end users to quickly navigate to a particular area of interest.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html)
     */

    new (properties?: BookmarksProperties): Bookmarks;
  }

  export const Bookmarks: BookmarksConstructor;

  interface BookmarksProperties extends WidgetProperties, GoToProperties {
    /**
     * Specifies how new bookmarks will be created if [editingEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#editingEnabled) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#bookmarkCreationOptions)
     */
    bookmarkCreationOptions?: BookmarkOptions;
    /**
     * 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>;
    /**
     * Specifies how new bookmarks will be created if [editingEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#editingEnabled) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#defaultCreateOptions)
     */
    defaultCreateOptions?: BookmarkOptions;
    /**
     * Specifies how bookmarks will be edited, if [editingEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#editingEnabled) is set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#defaultEditOptions)
     */
    defaultEditOptions?: BookmarkOptions;
    /**
     * When true, the widget is visually withdrawn and cannot be interacted with.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#disabled)
     */
    disabled?: boolean;
    /**
     * Indicates whether the bookmarks are able to be edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#editingEnabled)
     */
    editingEnabled?: boolean;
    /**
     * Indicates the heading level to use for the message "No bookmarks" when no bookmarks are available in this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#headingLevel)
     */
    headingLevel?: number;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#viewModel)
     */
    viewModel?: BookmarksViewModelProperties;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#visibleElements)
     */
    visibleElements?: BookmarksVisibleElements;
  }

  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>;
    /**
     * Specifies how new bookmarks will be created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#defaultCreateOptions)
     */
    defaultCreateOptions: BookmarkOptions;
    /**
     * Specifies how bookmarks will be edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#defaultEditOptions)
     */
    defaultEditOptions: BookmarkOptions;
    /**
     * The view model's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#state)
     */
    readonly state: "loading" | "ready";
    /**
     * 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;

    /**
     * Creates a new bookmark from the [defaultCreateOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#defaultCreateOptions), unless otherwise specified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#createBookmark)
     */
    createBookmark(options?: BookmarkOptions): Promise<Bookmark>;
    /**
     * Edits the given bookmark.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#editBookmark)
     */
    editBookmark(bookmark: Bookmark, options?: BookmarkOptions): Promise<Bookmark>;
    /**
     * Zoom to a specific bookmark.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#goTo)
     */
    goTo(bookmark: Bookmark): Promise<any>;
  }

  interface BookmarksViewModelConstructor {
    /**
     * Provides the logic for 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-widgets-Bookmarks-BookmarksViewModel.html)
     */

    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>;
    /**
     * Specifies how new bookmarks will be created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#defaultCreateOptions)
     */
    defaultCreateOptions?: BookmarkOptions;
    /**
     * Specifies how bookmarks will be edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#defaultEditOptions)
     */
    defaultEditOptions?: BookmarkOptions;
    /**
     * 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;
  }

  /**
   * Specifies how bookmarks will be created or modified.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#BookmarkOptions)
   */
  export interface BookmarkOptions extends Object {
    /**
     * Indicates whether a screenshot is taken when a new bookmark is created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#BookmarkOptions)
     */
    takeScreenshot?: boolean;
    /**
     * _Since 4.17_ Indicates whether the viewpoint of the current view will become the [viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-Bookmark.html#viewpoint) of a newly created bookmark.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#BookmarkOptions)
     */
    captureViewpoint?: boolean;
    /**
     * _Since 4.17_ Indicates whether the rotation of the current view will be saved in the [viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-Bookmark.html#viewpoint) of a newly created bookmark.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#BookmarkOptions)
     */
    captureRotation?: boolean;
    /**
     * _Since 4.17_ Indicates whether the scale of the current view will be saved in the [viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-Bookmark.html#viewpoint) of a newly created bookmark.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#BookmarkOptions)
     */
    captureScale?: boolean;
    /**
     * An object that specifies the settings of the screenshot that will be used to create the bookmark's [thumbnail](https://developers.arcgis.com/javascript/latest/api-reference/esri-webmap-Bookmark.html#thumbnail).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#BookmarkOptions)
     */
    screenshotSettings?: BookmarkOptionsScreenshotSettings;
  }

  export interface BookmarkOptionsScreenshotSettings extends Object {
    /**
     * The width (in pixels) of the screenshot.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#BookmarkOptions)
     */
    width?: number;
    /**
     * The height (in pixels) of the screenshot.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#BookmarkOptions)
     */
    height?: number;
    /**
     * Used to take a screenshot of a subregion of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#BookmarkOptions)
     */
    area?: BookmarkOptionsScreenshotSettingsArea;
    /**
     * An optional list of layers to be included in the screenshot.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#BookmarkOptions)
     */
    layers?: Layer[];
  }

  export interface BookmarkOptionsScreenshotSettingsArea extends Object {
    /**
     * The x value of the screenshot area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#BookmarkOptions)
     */
    x?: number;
    /**
     * The y value of the screenshot area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#BookmarkOptions)
     */
    y?: number;
    /**
     * The width of the screenshot area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#BookmarkOptions)
     */
    width?: number;
    /**
     * The height of the screenshot area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks-BookmarksViewModel.html#BookmarkOptions)
     */
    height?: number;
  }

  export interface BookmarksBookmarkEditEvent {
    bookmark: Bookmark;
  }

  export interface BookmarksBookmarkSelectEvent {
    bookmark: Bookmark;
  }

  /**
   * The visible elements that are displayed within the widget.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#VisibleElements)
   */
  export interface BookmarksVisibleElements extends Object {
    /**
     * Indicates whether to button to add a new bookmark displays.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#VisibleElements)
     */
    addBookmark?: boolean;
    /**
     * Indicates whether the thumbnail associated with the bookmark displays.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Bookmarks.html#VisibleElements)
     */
    thumbnail?: boolean;
  }

  interface BuildingExplorer extends Widget {
    /**
     * Indicates the heading level to use for the headings in the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer.html#headingLevel)
     */
    headingLevel: number;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer.html#iconClass)
     */
    iconClass: string;
    /**
     * A [collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of layers of type [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html) that are added to the widget for exploration.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer.html#layers)
     */
    layers: Collection<BuildingSceneLayer>;
    /**
     * A reference to 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-BuildingExplorer.html#view)
     */
    view: SceneView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer.html#viewModel)
     */
    viewModel: BuildingExplorerViewModel;
    /**
     * This property provides the ability to display or hide the individual elements of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer.html#visibleElements)
     */
    visibleElements: BuildingExplorerVisibleElements;
  }

  interface BuildingExplorerConstructor {
    /**
     * The BuildingExplorer widget is used to filter and explore the various components of [BuildingSceneLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer.html)
     */

    new (properties?: BuildingExplorerProperties): BuildingExplorer;
  }

  export const BuildingExplorer: BuildingExplorerConstructor;

  interface BuildingExplorerProperties extends WidgetProperties {
    /**
     * Indicates the heading level to use for the headings in the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer.html#headingLevel)
     */
    headingLevel?: number;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer.html#iconClass)
     */
    iconClass?: string;
    /**
     * A [collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of layers of type [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html) that are added to the widget for exploration.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer.html#layers)
     */
    layers?: CollectionProperties<BuildingSceneLayerProperties>;
    /**
     * A reference to 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-BuildingExplorer.html#view)
     */
    view?: SceneViewProperties;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer.html#viewModel)
     */
    viewModel?: BuildingExplorerViewModelProperties;
    /**
     * This property provides the ability to display or hide the individual elements of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer.html#visibleElements)
     */
    visibleElements?: BuildingExplorerVisibleElements;
  }

  interface BuildingExplorerViewModel extends Accessor {
    /**
     * A collection of layers of type [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html) that are added to the widget for exploration.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingExplorerViewModel.html#layers)
     */
    layers: Collection<BuildingSceneLayer>;
    /**
     * Contains information about the level filter, such as the value selected by the user in the Level element or the minimum and maximum allowed values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingExplorerViewModel.html#level)
     */
    readonly level: BuildingLevel;
    /**
     * Contains information about the construction phase filter, such as the value selected by the user in the Construction phases element and the minimum and maximum allowed values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingExplorerViewModel.html#phase)
     */
    readonly phase: BuildingPhase;
    /**
     * The current state of the view model that can be used for rendering the UI of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingExplorerViewModel.html#state)
     */
    readonly state: "disabled" | "loading" | "ready" | "failed";
    /**
     * The view in which the BuildingExplorer is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingExplorerViewModel.html#view)
     */
    view: SceneView;
  }

  interface BuildingExplorerViewModelConstructor {
    /**
     * Provides the logic for the [BuildingExplorer](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingExplorerViewModel.html)
     */

    new (properties?: BuildingExplorerViewModelProperties): BuildingExplorerViewModel;
  }

  export const BuildingExplorerViewModel: BuildingExplorerViewModelConstructor;

  interface BuildingExplorerViewModelProperties {
    /**
     * A collection of layers of type [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html) that are added to the widget for exploration.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingExplorerViewModel.html#layers)
     */
    layers?: CollectionProperties<BuildingSceneLayerProperties>;
    /**
     * The view in which the BuildingExplorer is used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingExplorerViewModel.html#view)
     */
    view?: SceneViewProperties;
  }

  interface BuildingLevel extends Accessor {
    /**
     * List of all the values which are allowed for the filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingLevel.html#allowedValues)
     */
    readonly allowedValues: number[];
    /**
     * Whether the filter is enabled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingLevel.html#enabled)
     */
    readonly enabled: boolean;
    /**
     * Whether the next value can be selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingLevel.html#hasNext)
     */
    readonly hasNext: boolean;
    /**
     * Whether the previous value can be selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingLevel.html#hasPrevious)
     */
    readonly hasPrevious: boolean;
    /**
     * The maximum value allowed for the filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingLevel.html#max)
     */
    readonly max: number;
    /**
     * The minimum value allowed for the filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingLevel.html#min)
     */
    readonly min: number;
    /**
     * The value which is currently set on the filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingLevel.html#value)
     */
    readonly value: number;

    /**
     * Removes the filter by setting [enabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingLevel.html#enabled) to `false`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingLevel.html#clear)
     */
    clear(): void;
    /**
     * If the field that is used for filtering has a coded value domain, the label for the value can be used to be displayed in a tooltip or in the widget UI.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingLevel.html#getValueLabel)
     */
    getValueLabel(value: number): string | any;
    /**
     * Selects the next value, if available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingLevel.html#next)
     */
    next(): void;
    /**
     * Selects the previous value, if available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingLevel.html#previous)
     */
    previous(): void;
    /**
     * Selects the specified value for the filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingLevel.html#select)
     */
    select(value: number): void;
  }

  interface BuildingLevelConstructor {
    /**
     * Provides information for the building level filter, such as the value selected by the user or the minimum and maximum allowed values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingLevel.html)
     */

    new (properties?: BuildingLevelProperties): BuildingLevel;
  }

  export const BuildingLevel: BuildingLevelConstructor;

  interface BuildingLevelProperties {}

  interface BuildingPhase extends Accessor {
    /**
     * List of all the values which are allowed for the filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingPhase.html#allowedValues)
     */
    readonly allowedValues: number[];
    /**
     * Whether the filter is enabled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingPhase.html#enabled)
     */
    readonly enabled: boolean;
    /**
     * Whether the next value can be selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingPhase.html#hasNext)
     */
    readonly hasNext: boolean;
    /**
     * Whether the previous value can be selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingPhase.html#hasPrevious)
     */
    readonly hasPrevious: boolean;
    /**
     * The maximum value allowed for the filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingPhase.html#max)
     */
    readonly max: number;
    /**
     * The minimum value allowed for the filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingPhase.html#min)
     */
    readonly min: number;
    /**
     * The value which is currently set on the filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingPhase.html#value)
     */
    readonly value: number;

    /**
     * Removes the filter by setting [enabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingPhase.html#enabled) to `false`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingPhase.html#clear)
     */
    clear(): void;
    /**
     * If the field that is used for filtering has a coded value domain, the label for the value can be used to be displayed in a tooltip or in the widget UI.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingPhase.html#getValueLabel)
     */
    getValueLabel(value: number): string | any;
    /**
     * Selects the next value, if available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingPhase.html#next)
     */
    next(): void;
    /**
     * Selects the previous value, if available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingPhase.html#previous)
     */
    previous(): void;
    /**
     * Selects the specified value for the filter.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingPhase.html#select)
     */
    select(value: number): void;
  }

  interface BuildingPhaseConstructor {
    /**
     * BuildingPhase provides information for the construction phase filter, such as the value selected by the user or the minimum and maximum allowed values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer-BuildingPhase.html)
     */

    new (properties?: BuildingPhaseProperties): BuildingPhase;
  }

  export const BuildingPhase: BuildingPhaseConstructor;

  interface BuildingPhaseProperties {}

  /**
   * The visible elements that are displayed within the widget.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer.html#VisibleElements)
   */
  export interface BuildingExplorerVisibleElements extends Object {
    /**
     * When set to `false`, the building levels filter is not displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer.html#VisibleElements)
     */
    levels?: boolean;
    /**
     * When set to `false`, the construction phases filter is not displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer.html#VisibleElements)
     */
    phases?: boolean;
    /**
     * When set to `false`, the disciplines and categories sublayer list is not displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer.html#VisibleElements)
     */
    disciplines?: boolean;
  }

  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) or rotation (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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass.html#viewModel)
     */
    viewModel: CompassViewModel;

    /**
     * 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`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass.html#reset)
     */
    reset(): void;
  }

  interface CompassConstructor {
    /**
     * The Compass widget indicates where north is in relation to the current view [rotation](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#rotation) or [camera heading](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#heading).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass.html)
     */

    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) or rotation (MapView).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this 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)
     */
    orientation: any;
    /**
     * The view model's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass-CompassViewModel.html#state)
     */
    readonly state: "compass" | "rotation" | "disabled";
    /**
     * 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) or rotation (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`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass-CompassViewModel.html#reset)
     */
    reset(): void;
  }

  interface CompassViewModelConstructor {
    /**
     * Provides the logic for the [Compass](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass-CompassViewModel.html)
     */

    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)
     */
    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) or rotation (MapView).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass-CompassViewModel.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#formats)
     */
    formats: Collection<Format>;
    /**
     * Indicates the heading level to use for the coordinate input and coordinate settings headings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#headingLevel)
     */
    headingLevel: number;
    /**
     * This symbol is used to visualize the location currently described by the widget when `capture` mode is active.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#locationSymbol)
     */
    locationSymbol: SimpleMarkerSymbol | PictureMarkerSymbol;
    /**
     * Describes the current mode of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#mode)
     */
    mode: "live" | "capture";
    /**
     * If this property is set to `true`, multiple conversions can be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#multipleConversions)
     */
    multipleConversions: boolean;
    /**
     * Determines whether the widget should expand up or down.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#orientation)
     */
    orientation: "auto" | "expand-up" | "expand-down";
    /**
     * The number of milliseconds of delay before conversion requests will be sent to the [GeometryService](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#requestDelay)
     */
    requestDelay: number;
    /**
     * If this property is set to `true`, sessionStorage will be used to hydrate and persist the CoordinateConversion widget's state within the same session.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#storageEnabled)
     */
    storageEnabled: 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#viewModel)
     */
    viewModel: CoordinateConversionViewModel;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#visibleElements)
     */
    visibleElements: CoordinateConversionVisibleElements;

    /**
     * Attempt to convert a string into 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-widgets-CoordinateConversion.html#reverseConvert)
     */
    reverseConvert(coordinate: string, format: Format): Promise<Point>;
  }

  interface CoordinateConversionConstructor {
    /**
     * The CoordinateConversion widget provides a way to display user cursor position either as map coordinates or as any of several popular coordinate notations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html)
     */

    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<ConversionProperties>;
    /**
     * 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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#formats)
     */
    formats?: CollectionProperties<FormatProperties>;
    /**
     * Indicates the heading level to use for the coordinate input and coordinate settings headings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#headingLevel)
     */
    headingLevel?: number;
    /**
     * This symbol is used to visualize the location currently described by the widget when `capture` mode is active.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#locationSymbol)
     */
    locationSymbol?:
      | (SimpleMarkerSymbolProperties & { type: "simple-marker" })
      | (PictureMarkerSymbolProperties & { type: "picture-marker" });
    /**
     * Describes the current mode of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#mode)
     */
    mode?: "live" | "capture";
    /**
     * If this property is set to `true`, multiple conversions can be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#multipleConversions)
     */
    multipleConversions?: boolean;
    /**
     * Determines whether the widget should expand up or down.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#orientation)
     */
    orientation?: "auto" | "expand-up" | "expand-down";
    /**
     * The number of milliseconds of delay before conversion requests will be sent to the [GeometryService](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#requestDelay)
     */
    requestDelay?: number;
    /**
     * If this property is set to `true`, sessionStorage will be used to hydrate and persist the CoordinateConversion widget's state within the same session.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#storageEnabled)
     */
    storageEnabled?: 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#viewModel)
     */
    viewModel?: CoordinateConversionViewModelProperties;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#visibleElements)
     */
    visibleElements?: CoordinateConversionVisibleElements;
  }

  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).
     *
     * [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.
     *
     * [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` mode is 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#mode)
     */
    mode: "live" | "capture";
    /**
     * The number of milliseconds of delay before conversion requests will be sent to the [GeometryService](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#requestDelay)
     */
    requestDelay: number;
    /**
     * The view model's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#state)
     */
    readonly state: "ready" | "loading" | "disabled";
    /**
     * If this property is set to `true`, sessionStorage will be used to hydrate and persist the CoordinateConversion widget's state within the same session.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#storageEnabled)
     */
    storageEnabled: 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).
     *
     * [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)
     */
    convert(point: Point, format: Format): Promise<Position>;
    /**
     * Attempt to convert a string into 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-widgets-CoordinateConversion-CoordinateConversionViewModel.html#reverseConvert)
     */
    reverseConvert(coordinate: string, format: Format): Promise<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)
     */
    updateConversions(conversions: Conversion[], location: Point): Promise<Conversion[]>;
  }

  interface CoordinateConversionViewModelConstructor {
    /**
     * Provides the logic for the [CoordinateConversion](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html)
     */

    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<ConversionProperties>;
    /**
     * 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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#formats)
     */
    formats?: CollectionProperties<FormatProperties>;
    /**
     * This symbol is used to visualize the location currently described by the widget when `capture` mode is active.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#locationSymbol)
     */
    locationSymbol?:
      | (SimpleMarkerSymbolProperties & { type: "simple-marker" })
      | (PictureMarkerSymbolProperties & { type: "picture-marker" });
    /**
     * Describes the current mode of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#mode)
     */
    mode?: "live" | "capture";
    /**
     * The number of milliseconds of delay before conversion requests will be sent to the [GeometryService](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-GeometryService.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#requestDelay)
     */
    requestDelay?: number;
    /**
     * If this property is set to `true`, sessionStorage will be used to hydrate and persist the CoordinateConversion widget's state within the same session.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#storageEnabled)
     */
    storageEnabled?: 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-CoordinateConversionViewModel.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  /**
   * 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 extends Accessor {
    /**
     * 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.
     *
     * [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;
  }

  interface ConversionConstructor {
    /**
     * The Conversion class represents one of the [conversions](esri-widgets-CoordinateConversion.html#conversions) in the [Coordinate Conversion widget](esri-widgets-CoordinateConversion.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Conversion.html)
     */

    new (properties?: ConversionProperties): Conversion;
  }

  export const Conversion: ConversionConstructor;

  interface ConversionProperties {
    /**
     * The [Format](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html) for this conversion.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Conversion.html#format)
     */
    format?: FormatProperties;
    /**
     * 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;
  }

  /**
   * 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 extends Accessor {
    /**
     * Contains information that describes how this Format should be converted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#conversionInfo)
     */
    conversionInfo: ConversionInfo;
    /**
     * A array of [Coordinate Segments](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#CoordinateSegment).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#coordinateSegments)
     */
    coordinateSegments: CoordinateSegment[];
    /**
     * A string that serves as a pattern describing how this Format should be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#currentPattern)
     */
    currentPattern: string;
    /**
     * The default pattern describing how this Format should be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#defaultPattern)
     */
    defaultPattern: string;
    /**
     * The name of the coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#name)
     */
    name: string;
    /**
     * The [SpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html) for this format.
     *
     * [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;
  }

  interface FormatConstructor {
    /**
     * The Format class represents one of the [formats](esri-widgets-CoordinateConversion.html#formats) in the [Coordinate Conversion widget](esri-widgets-CoordinateConversion.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html)
     */

    new (properties?: FormatProperties): Format;
  }

  export const Format: FormatConstructor;

  interface FormatProperties {
    /**
     * Contains information that describes how this Format should be converted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#conversionInfo)
     */
    conversionInfo?: ConversionInfo;
    /**
     * A array of [Coordinate Segments](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#CoordinateSegment).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#coordinateSegments)
     */
    coordinateSegments?: CoordinateSegment[];
    /**
     * A string that serves as a pattern describing how this Format should be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#currentPattern)
     */
    currentPattern?: string;
    /**
     * The default pattern describing how this Format should be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#defaultPattern)
     */
    defaultPattern?: string;
    /**
     * The name of the coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#name)
     */
    name?: string;
    /**
     * The [SpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html) for this format.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion-support-Format.html#spatialReference)
     */
    spatialReference?: SpatialReferenceProperties;
    /**
     * 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?: CoordinateConversionViewModelProperties;
  }

  /**
   * This object describes how a Format should be projected and formatted for display.
   *
   * [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;
  }

  /**
   * A coordinate segment represents one piece of a coordinate string.
   *
   * [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;
  }

  /**
   * The visible elements that are displayed within the widget.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#VisibleElements)
   */
  export interface CoordinateConversionVisibleElements extends Object {
    /**
     * Indicates whether the settings button will be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#VisibleElements)
     */
    settingsButton?: boolean;
    /**
     * Indicates whether the input coordinate button will be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#VisibleElements)
     */
    editButton?: boolean;
    /**
     * Indicates whether the expand and retract buttons will be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#VisibleElements)
     */
    expandButton?: boolean;
    /**
     * Indicates whether the capture mode button will be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-CoordinateConversion.html#VisibleElements)
     */
    captureButton?: boolean;
  }

  interface Daylight extends Widget {
    /**
     * Controls whether the widget displays a date or a season picker.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight.html#dateOrSeason)
     */
    dateOrSeason: "season" | "date";
    /**
     * Indicates the heading level to use for the widget title.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight.html#headingLevel)
     */
    headingLevel: number;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight.html#iconClass)
     */
    iconClass: string;
    /**
     * Controls the speed of the daytime and date animation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight.html#playSpeedMultiplier)
     */
    playSpeedMultiplier: number;
    /**
     * Sets steps, or intervals, on the time slider to restrict the times of the day that can be selected when dragging the thumb.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight.html#timeSliderSteps)
     */
    timeSliderSteps: number | number[];
    /**
     * A reference to 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-Daylight.html#view)
     */
    view: SceneView;
    /**
     * The view model for the Daylight widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight.html#viewModel)
     */
    viewModel: DaylightViewModel;
    /**
     * This property provides the ability to display or hide the individual elements of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight.html#visibleElements)
     */
    visibleElements: DaylightVisibleElements;
  }

  interface DaylightConstructor {
    /**
     * The daylight widget can be used to manipulate the time and date and to toggle shadows in 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-widgets-Daylight.html)
     */

    new (properties?: DaylightProperties): Daylight;
  }

  export const Daylight: DaylightConstructor;

  interface DaylightProperties extends WidgetProperties {
    /**
     * Controls whether the widget displays a date or a season picker.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight.html#dateOrSeason)
     */
    dateOrSeason?: "season" | "date";
    /**
     * Indicates the heading level to use for the widget title.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight.html#headingLevel)
     */
    headingLevel?: number;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight.html#iconClass)
     */
    iconClass?: string;
    /**
     * Controls the speed of the daytime and date animation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight.html#playSpeedMultiplier)
     */
    playSpeedMultiplier?: number;
    /**
     * Sets steps, or intervals, on the time slider to restrict the times of the day that can be selected when dragging the thumb.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight.html#timeSliderSteps)
     */
    timeSliderSteps?: number | number[];
    /**
     * A reference to 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-Daylight.html#view)
     */
    view?: SceneViewProperties;
    /**
     * The view model for the Daylight widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight.html#viewModel)
     */
    viewModel?: DaylightViewModelProperties;
    /**
     * This property provides the ability to display or hide the individual elements of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight.html#visibleElements)
     */
    visibleElements?: DaylightVisibleElements;
  }

  interface DaylightViewModel extends Accessor {
    /**
     * A season can be set instead of a date.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html#currentSeason)
     */
    currentSeason: "spring" | "summer" | "fall" | "winter";
    /**
     * Starts or pauses the daytime animation cycling through the minutes of the day.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html#dayPlaying)
     */
    dayPlaying: boolean;
    /**
     * The calendar date in the timezone given by [utcOffset](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html#utcOffset).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html#localDate)
     */
    localDate: Date;
    /**
     * Controls the daytime and date animation speed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html#playSpeedMultiplier)
     */
    playSpeedMultiplier: number;
    /**
     * Slider position for the time of day in the timezone given by [utcOffset](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html#utcOffset).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html#timeSliderPosition)
     */
    timeSliderPosition: number;
    /**
     * The difference in hours between UTC time and the time displayed in the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html#utcOffset)
     */
    utcOffset: number;
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html#view)
     */
    view: SceneView;
    /**
     * Starts or pauses the date animation cycling through the months of the year.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html#yearPlaying)
     */
    yearPlaying: boolean;
  }

  interface DaylightViewModelConstructor {
    /**
     * Provides the logic for the [Daylight](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html)
     */

    new (properties?: DaylightViewModelProperties): DaylightViewModel;
  }

  export const DaylightViewModel: DaylightViewModelConstructor;

  interface DaylightViewModelProperties {
    /**
     * A season can be set instead of a date.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html#currentSeason)
     */
    currentSeason?: "spring" | "summer" | "fall" | "winter";
    /**
     * Starts or pauses the daytime animation cycling through the minutes of the day.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html#dayPlaying)
     */
    dayPlaying?: boolean;
    /**
     * The calendar date in the timezone given by [utcOffset](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html#utcOffset).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html#localDate)
     */
    localDate?: DateProperties;
    /**
     * Controls the daytime and date animation speed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html#playSpeedMultiplier)
     */
    playSpeedMultiplier?: number;
    /**
     * Slider position for the time of day in the timezone given by [utcOffset](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html#utcOffset).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html#timeSliderPosition)
     */
    timeSliderPosition?: number;
    /**
     * The difference in hours between UTC time and the time displayed in the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html#utcOffset)
     */
    utcOffset?: number;
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html#view)
     */
    view?: SceneViewProperties;
    /**
     * Starts or pauses the date animation cycling through the months of the year.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight-DaylightViewModel.html#yearPlaying)
     */
    yearPlaying?: boolean;
  }

  /**
   * The visible elements that are displayed within the widget.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight.html#VisibleElements)
   */
  export interface DaylightVisibleElements extends Object {
    /**
     * When set to `false`, neither of the play buttons are displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight.html#VisibleElements)
     */
    playButtons?: boolean;
    /**
     * When set to `false`, the shadow toggle button is not displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight.html#VisibleElements)
     */
    shadowsToggle?: boolean;
    /**
     * When set to `false`, neither the date nor the season picker are displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight.html#VisibleElements)
     */
    datePicker?: boolean;
    /**
     * When set to `false`, the timezone selector is not displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Daylight.html#VisibleElements)
     */
    timezone?: boolean;
  }

  interface Directions extends Widget, GoTo {
    /**
     * An authorization string used to access a resource or service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#apiKey)
     */
    apiKey: string;
    /**
     * Indicates the heading level to use for the origin and destination addresses (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#headingLevel)
     */
    headingLevel: number;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#lastRoute)
     */
    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)
     */
    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)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#searchProperties)
     */
    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.
     *
     * [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(): Promise<supportRouteResult>;
    /**
     * 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 {
    /**
     * The Directions Widget provides a way to build driving and walking directions using ArcGIS Online and custom Network Analysis Route services.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html)
     */

    new (properties?: DirectionsProperties): Directions;
  }

  export const Directions: DirectionsConstructor;

  interface DirectionsProperties extends WidgetProperties, GoToProperties {
    /**
     * An authorization string used to access a resource or service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#apiKey)
     */
    apiKey?: string;
    /**
     * Indicates the heading level to use for the origin and destination addresses (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#headingLevel)
     */
    headingLevel?: number;
    /**
     * 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)
     */
    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)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#searchProperties)
     */
    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 & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#viewModel)
     */
    viewModel?: DirectionsViewModelProperties;
  }

  interface DirectionsViewModel extends Accessor, GoTo {
    /**
     * An authorization string used to access a resource or service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#apiKey)
     */
    apiKey: string;
    /**
     * The network attribute name to be used as the impedance attribute in the analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#impedanceAttribute)
     */
    impedanceAttribute: string;
    /**
     * The most recent route result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#lastRoute)
     */
    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)
     */
    maxStops: number;
    /**
     * Route Parameters object used to call the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#routeParameters)
     */
    routeParameters: supportRouteParameters;
    /**
     * 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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#selectedTravelMode)
     */
    selectedTravelMode: TravelMode;
    /**
     * The Service Description object returned by the Route REST Endpoint.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#serviceDescription)
     */
    readonly serviceDescription: DirectionsViewModelServiceDescription;
    /**
     * The current state of the view model.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#state)
     */
    readonly state: "disabled" | "ready";
    /**
     * 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)
     */
    readonly timeAttribute: DirectionsViewModelTimeAttribute;
    /**
     * Array of objects containing properties specific to either an ArcGIS service or organization's travel modes.
     *
     * [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)
     */
    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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#getCostAttribute)
     */
    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(): Promise<supportRouteResult>;
    /**
     * Highlights the specified route segment on the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#highlightSegment)
     */
    highlightSegment(maneuver: Graphic): void;
    /**
     * This method should be called to load the view model's routing resources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#load)
     */
    load(): Promise<any>;
    /**
     * Resets the state of the ViewModel, clearing all the input stops and results in the widget and 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 {
    /**
     * Provides the communication and data manipulation logic for the [Directions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html)
     */

    new (properties?: DirectionsViewModelProperties): DirectionsViewModel;
  }

  export const DirectionsViewModel: DirectionsViewModelConstructor;

  interface DirectionsViewModelProperties extends GoToProperties {
    /**
     * An authorization string used to access a resource or service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#apiKey)
     */
    apiKey?: string;
    /**
     * The network attribute name to be used as the impedance attribute in the analysis.
     *
     * [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)
     */
    maxStops?: number;
    /**
     * Route Parameters object used to call the service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#routeParameters)
     */
    routeParameters?: supportRouteParametersProperties;
    /**
     * 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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#selectedTravelMode)
     */
    selectedTravelMode?: TravelModeProperties;
    /**
     * 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 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 & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  export interface DirectionsViewModelLastRoute extends Object {
    /**
     * Array of graphics representing the point barriers.
     *
     * [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.
     *
     * [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.
     *
     * [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-rest-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#lastRoute)
     */
    routeResults: supportRouteResult;
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#lastRoute)
     */
    type: number;
  }

  export interface DirectionsViewModelServiceDescription extends Object {
    /**
     * Server version.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#serviceDescription)
     */
    currentVersion: number;
    /**
     * Id of the default travel mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#serviceDescription)
     */
    defaultTravelMode: string;
    /**
     * Available travel modes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#serviceDescription)
     */
    supportedTravelModes: TravelMode[];
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions-DirectionsViewModel.html#timeAttribute)
     */
    units?: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards";
  }

  export interface DirectionsLastRoute extends Object {
    /**
     * Array of graphics representing the point barriers.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#lastRoute)
     */
    polygonBarriers: Graphic[];
    /**
     * Array of graphics representing the polygon barriers.
     *
     * [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-rest-support-RouteResult.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#lastRoute)
     */
    routeResults: supportRouteResult;
  }

  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.
     *
     * [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 {
    /**
     * Number index indicating the current selected source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#SearchProperties)
     */
    activeSourceIndex?: number;
    /**
     * 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;
    /**
     * 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;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Directions.html#SearchProperties)
     */
    includeDefaultSources?: boolean | Function;
    /**
     * Define the type of location, either `"street"` or `"rooftop"`.
     *
     * [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;
    /**
     * 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 sources to 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 {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D.html#iconClass)
     */
    iconClass: string;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D.html#unit)
     */
    unit: SystemOrLengthUnit;
    /**
     * List of unit systems (imperial, metric) and specific units for displaying the distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D.html#unitOptions)
     */
    unitOptions: SystemOrLengthUnit[];
    /**
     * A reference to 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-DirectLineMeasurement3D.html#view)
     */
    view: SceneView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D.html#viewModel)
     */
    viewModel: DirectLineMeasurement3DViewModel;
  }

  interface DirectLineMeasurement3DConstructor {
    /**
     * The DirectLineMeasurement3D widget calculates and displays the 3D distance between two points.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D.html)
     */

    new (properties?: DirectLineMeasurement3DProperties): DirectLineMeasurement3D;
  }

  export const DirectLineMeasurement3D: DirectLineMeasurement3DConstructor;

  interface DirectLineMeasurement3DProperties extends WidgetProperties {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D.html#iconClass)
     */
    iconClass?: string;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D.html#unit)
     */
    unit?:
      | "imperial"
      | "metric"
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet";
    /**
     * List of unit systems (imperial, metric) and specific units for displaying the distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D.html#unitOptions)
     */
    unitOptions?: (
      | "imperial"
      | "metric"
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet"
    )[];
    /**
     * A reference to 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-DirectLineMeasurement3D.html#view)
     */
    view?: SceneViewProperties;
    /**
     * The view model for this 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#state)
     */
    readonly state: "disabled" | "ready" | "measuring" | "measured";
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#unit)
     */
    unit: SystemOrLengthUnit;
    /**
     * List of unit systems (imperial, metric) and specific units for displaying the distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#unitOptions)
     */
    unitOptions: SystemOrLengthUnit[];
    /**
     * 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#clear)
     */
    clear(): void;
    /**
     * Starts a new measurement.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#start)
     */
    start(): void;
  }

  interface DirectLineMeasurement3DViewModelConstructor {
    /**
     * Provides the logic for the [DirectLineMeasurement3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html)
     */

    new (properties?: DirectLineMeasurement3DViewModelProperties): DirectLineMeasurement3DViewModel;
  }

  export const DirectLineMeasurement3DViewModel: DirectLineMeasurement3DViewModelConstructor;

  interface DirectLineMeasurement3DViewModelProperties {
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#unit)
     */
    unit?:
      | "imperial"
      | "metric"
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet";
    /**
     * List of unit systems (imperial, metric) and specific units for displaying the distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#unitOptions)
     */
    unitOptions?: (
      | "imperial"
      | "metric"
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet"
    )[];
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DirectLineMeasurement3D-DirectLineMeasurement3DViewModel.html#measurement)
     */
    measurementMode: "euclidean" | "geodesic";
    /**
     * 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D.html#unit)
     */
    unit: SystemOrLengthUnit;
    /**
     * List of available units and unit systems (imperial, metric) for displaying the distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D.html#unitOptions)
     */
    unitOptions: SystemOrLengthUnit[];
    /**
     * 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-widgets-DistanceMeasurement2D.html#view)
     */
    view: MapView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D.html#viewModel)
     */
    viewModel: DistanceMeasurement2DViewModel;
  }

  interface DistanceMeasurement2DConstructor {
    /**
     * The DistanceMeasurement2D widget calculates and displays the distance between two or more points in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D.html#unit)
     */
    unit?:
      | "imperial"
      | "metric"
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet";
    /**
     * List of available units and unit systems (imperial, metric) for displaying the distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D.html#unitOptions)
     */
    unitOptions?: (
      | "imperial"
      | "metric"
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet"
    )[];
    /**
     * 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-widgets-DistanceMeasurement2D.html#view)
     */
    view?: MapViewProperties;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D.html#viewModel)
     */
    viewModel?: DistanceMeasurement2DViewModelProperties;
  }

  interface DistanceMeasurement2DViewModel extends Accessor {
    /**
     * When the coordinate sustem is projected (other than web mercator) then distances less than this threshold will be computed planimetrically.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#geodesicDistanceThreshold)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#measurementLabel)
     */
    readonly measurementLabel: string;
    /**
     * The view model's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#state)
     */
    readonly state: "disabled" | "ready" | "measuring" | "measured";
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#unit)
     */
    unit: SystemOrLengthUnit;
    /**
     * List of available units and unit systems (imperial, metric) for displaying the distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#unitOptions)
     */
    unitOptions: SystemOrLengthUnit[];
    /**
     * 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#clear)
     */
    clear(): void;
    /**
     * Starts a new measurement.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#start)
     */
    start(): void;
  }

  interface DistanceMeasurement2DViewModelConstructor {
    /**
     * Provides the logic for the [DistanceMeasurement2D](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html)
     */

    new (properties?: DistanceMeasurement2DViewModelProperties): DistanceMeasurement2DViewModel;
  }

  export const DistanceMeasurement2DViewModel: DistanceMeasurement2DViewModelConstructor;

  interface DistanceMeasurement2DViewModelProperties {
    /**
     * When the coordinate sustem is projected (other than web mercator) then distances less than this threshold will be computed planimetrically.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#geodesicDistanceThreshold)
     */
    geodesicDistanceThreshold?: number;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#unit)
     */
    unit?:
      | "imperial"
      | "metric"
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet";
    /**
     * List of available units and unit systems (imperial, metric) for displaying the distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-DistanceMeasurement2D-DistanceMeasurement2DViewModel.html#unitOptions)
     */
    unitOptions?: (
      | "imperial"
      | "metric"
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet"
    )[];
    /**
     * 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?: MapViewProperties;
  }

  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: CreateWorkflow | UpdateWorkflow;
    /**
     * An array of string values which specifies what end users are allowed to edit.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#allowedWorkflows)
     */
    allowedWorkflows: string[];
    /**
     * Indicates the heading level to use for title of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#headingLevel)
     */
    headingLevel: number;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#layerInfos)
     */
    layerInfos: LayerInfo[];
    /**
     * The [SnappingOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-SnappingOptions.html) for editing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#snappingOptions)
     */
    snappingOptions: SnappingOptions;
    /**
     * This property allows customization of supporting Editor widgets and their default behavior.
     *
     * [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) 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-widgets-Editor.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this 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(): Promise<void>;
    /**
     * This is applicable if there is an active [UpdateWorkflow](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-UpdateWorkflow.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#deleteFeatureFromWorkflow)
     */
    deleteFeatureFromWorkflow(): Promise<void>;
    /**
     * Initiates the [CreateWorkflow](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-CreateWorkflow.html) by displaying the panel where feature creation begins.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#startCreateWorkflowAtFeatureCreation)
     */
    startCreateWorkflowAtFeatureCreation(creationInfo: CreationInfo): Promise<void>;
    /**
     * This method starts the [CreateWorkflow](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-CreateWorkflow.html) where it waits for the feature to be selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#startCreateWorkflowAtFeatureEdit)
     */
    startCreateWorkflowAtFeatureEdit(feature: Graphic): Promise<void>;
    /**
     * Initiates the [CreateWorkflow](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-CreateWorkflow.html) 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(): Promise<void>;
    /**
     * Starts the [UpdateWorkflow](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-UpdateWorkflow.html) at the feature geometry and attribute editing panel.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#startUpdateWorkflowAtFeatureEdit)
     */
    startUpdateWorkflowAtFeatureEdit(feature: Graphic): Promise<void>;
    /**
     * Starts the [UpdateWorkflow](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-UpdateWorkflow.html) using the current selected feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#startUpdateWorkflowAtFeatureSelection)
     */
    startUpdateWorkflowAtFeatureSelection(): Promise<void>;
    /**
     * This method starts the [UpdateWorkflow](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-UpdateWorkflow.html) where it waits for multiple features to be selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#startUpdateWorkflowAtMultipleFeatureSelection)
     */
    startUpdateWorkflowAtMultipleFeatureSelection(candidates: Graphic[]): Promise<void>;
  }

  interface EditorConstructor {
    /**
     * This widget provides an out-of-the-box editing experience to help streamline the editing experience within a web application.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html)
     */

    new (properties?: EditorProperties): Editor;
  }

  export const Editor: EditorConstructor;

  interface EditorProperties extends WidgetProperties {
    /**
     * An array of string values which specifies what end users are allowed to edit.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#allowedWorkflows)
     */
    allowedWorkflows?: string[];
    /**
     * Indicates the heading level to use for title of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#headingLevel)
     */
    headingLevel?: number;
    /**
     * An array of editing configurations for individual layers.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#layerInfos)
     */
    layerInfos?: LayerInfo[];
    /**
     * The [SnappingOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-SnappingOptions.html) for editing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#snappingOptions)
     */
    snappingOptions?: SnappingOptionsProperties;
    /**
     * This property allows customization of supporting Editor widgets and their default behavior.
     *
     * [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) 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-widgets-Editor.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#viewModel)
     */
    viewModel?: EditorViewModelProperties;
  }

  interface CreateWorkflow extends Workflow {
    /**
     * The type of workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-CreateWorkflow.html#type)
     */
    readonly type: "create";
  }

  interface CreateWorkflowConstructor {
    /**
     * A read-only class containing the logic used when creating features using the [Editor](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-CreateWorkflow.html)
     */

    new (properties?: CreateWorkflowProperties): CreateWorkflow;
  }

  export const CreateWorkflow: CreateWorkflowConstructor;

  interface CreateWorkflowProperties extends WorkflowProperties {}

  interface CreateWorkflowData extends Accessor {
    /**
     * This provides the feature template and layer when creating a new feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-CreateWorkflowData.html#creationInfo)
     */
    creationInfo: CreationInfo;
    /**
     * The [edits](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Edits.html) used to keep track of a feature being modified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-CreateWorkflowData.html#edits)
     */
    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-CreateWorkflowData.html#viewModel)
     */
    viewModel: EditorViewModel;
  }

  interface CreateWorkflowDataConstructor {
    /**
     * This object supports the [Editor](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-CreateWorkflowData.html)
     */

    new (properties?: CreateWorkflowDataProperties): CreateWorkflowData;
  }

  export const CreateWorkflowData: CreateWorkflowDataConstructor;

  interface CreateWorkflowDataProperties {
    /**
     * This provides the feature template and layer when creating a new feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-CreateWorkflowData.html#creationInfo)
     */
    creationInfo?: CreationInfo;
    /**
     * The [edits](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Edits.html) used to keep track of a feature being modified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-CreateWorkflowData.html#edits)
     */
    edits?: EditsProperties;
    /**
     * 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-CreateWorkflowData.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: CreateWorkflow | UpdateWorkflow;
    /**
     * An array of string values which specifies what end users are allowed to edit.
     *
     * [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.
     *
     * [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.
     *
     * [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 [SnappingOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-SnappingOptions.html) for editing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#snappingOptions)
     */
    snappingOptions: SnappingOptions;
    /**
     * The widget's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#state)
     */
    readonly state:
      | "ready"
      | "disabled"
      | "editing-new-feature"
      | "editing-existing-feature"
      | "awaiting-update-feature-candidate"
      | "awaiting-feature-creation-info"
      | "awaiting-feature-to-update"
      | "awaiting-feature-to-create"
      | "adding-attachment"
      | "editing-attachment";
    /**
     * 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) 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-widgets-Editor-EditorViewModel.html#view)
     */
    view: MapView | SceneView;

    /**
     * Cancels any active workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#cancelWorkflow)
     */
    cancelWorkflow(): Promise<void>;
    /**
     * This is applicable if there is an active update workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#deleteFeatureFromWorkflow)
     */
    deleteFeatureFromWorkflow(): Promise<void>;
    /**
     * Initiates the `create` workflow by displaying the panel where feature creation begins.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#startCreateWorkflowAtFeatureCreation)
     */
    startCreateWorkflowAtFeatureCreation(creationInfo: CreationInfo): Promise<void>;
    /**
     * This method starts the Editor workflow where it waits for the feature to be selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#startCreateWorkflowAtFeatureEdit)
     */
    startCreateWorkflowAtFeatureEdit(feature: Graphic): Promise<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(): Promise<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)
     */
    startUpdateWorkflowAtFeatureEdit(feature: Graphic): Promise<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(): Promise<void>;
    /**
     * Starts the Editor workflow where it waits for multiple features to be selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#startUpdateWorkflowAtMultipleFeatureSelection)
     */
    startUpdateWorkflowAtMultipleFeatureSelection(): Promise<void>;
  }

  interface EditorViewModelConstructor {
    /**
     * Provides the logic for the [Editor](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html)
     */

    new (properties?: EditorViewModelProperties): EditorViewModel;
  }

  export const EditorViewModel: EditorViewModelConstructor;

  interface EditorViewModelProperties {
    /**
     * An array of string values which specifies what end users are allowed to edit.
     *
     * [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.
     *
     * [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;
    /**
     * The [SnappingOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-SnappingOptions.html) for editing.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#snappingOptions)
     */
    snappingOptions?: SnappingOptionsProperties;
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-EditorViewModel.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  /**
   * 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 associated with 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.
     *
     * [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 Edits extends Accessor {
    /**
     * The feature to be edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Edits.html#feature)
     */
    readonly feature: Graphic;
    /**
     * 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-Edits.html#modified)
     */
    readonly modified: boolean;
  }

  interface EditsConstructor {
    /**
     * This class supports the [Editor](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Edits.html)
     */

    new (properties?: EditsProperties): Edits;
  }

  export const Edits: EditsConstructor;

  interface EditsProperties {}

  interface UpdateWorkflow extends Workflow {
    /**
     * The type of workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-UpdateWorkflow.html#type)
     */
    readonly type: "update";
  }

  interface UpdateWorkflowConstructor {
    /**
     * A read-only class containing the logic used when updating and/or deleting features using the [Editor](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html) widget's.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-UpdateWorkflow.html)
     */

    new (properties?: UpdateWorkflowProperties): UpdateWorkflow;
  }

  export const UpdateWorkflow: UpdateWorkflowConstructor;

  interface UpdateWorkflowProperties extends WorkflowProperties {}

  interface UpdateWorkflowData extends Accessor {
    /**
     * An array of features to be updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-UpdateWorkflowData.html#candidates)
     */
    candidates: Graphic[];
    /**
     * The object that matches the feature being updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-UpdateWorkflowData.html#editableItem)
     */
    editableItem: EditableItem;
    /**
     * The [edits](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Edits.html) used to keep track of a feature being modified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-UpdateWorkflowData.html#edits)
     */
    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-UpdateWorkflowData.html#viewModel)
     */
    viewModel: EditorViewModel;
  }

  interface UpdateWorkflowDataConstructor {
    /**
     * This object supports the [Editor](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-UpdateWorkflowData.html)
     */

    new (properties?: UpdateWorkflowDataProperties): UpdateWorkflowData;
  }

  export const UpdateWorkflowData: UpdateWorkflowDataConstructor;

  interface UpdateWorkflowDataProperties {
    /**
     * An array of features to be updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-UpdateWorkflowData.html#candidates)
     */
    candidates?: GraphicProperties[];
    /**
     * The object that matches the feature being updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-UpdateWorkflowData.html#editableItem)
     */
    editableItem?: EditableItem;
    /**
     * The [edits](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Edits.html) used to keep track of a feature being modified.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-UpdateWorkflowData.html#edits)
     */
    edits?: EditsProperties;
    /**
     * 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-UpdateWorkflowData.html#viewModel)
     */
    viewModel?: EditorViewModelProperties;
  }

  interface Workflow extends Accessor {
    /**
     * Shared workflow data.
     *
     * [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)
     */
    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;
    /**
     * Value indicating the workflow type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#type)
     */
    readonly type: "create" | "update";

    /**
     * Cancels the active workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#cancel)
     */
    cancel(): Promise<void>;
    /**
     * Call this method when the workflow is considered finished.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#commit)
     */
    commit(): Promise<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(): Promise<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(): Promise<void>;
    /**
     * Resets the workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#reset)
     */
    reset(): Promise<void>;
    /**
     * Starts the workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html#start)
     */
    start(): Promise<void>;
  }

  interface WorkflowConstructor {
    /**
     * A Workflow helps manage different stages of an [editing](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html) workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor-Workflow.html)
     */

    new (properties?: WorkflowProperties): Workflow;
  }

  export const Workflow: WorkflowConstructor;

  interface WorkflowProperties {}

  /**
   * 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 where the new feature is created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#CreationInfo)
     */
    layer: FeatureLayer;
    /**
     * The associated feature template used 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 containing the editable fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#LayerInfo)
     */
    layer: FeatureLayer;
    /**
     * The configuration options for displaying an array of fields within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#LayerInfo)
     */
    fieldConfig?: FieldConfig[];
    /**
     * Indicates whether to display the attachments widget in the Editor's UI.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#LayerInfo)
     */
    allowAttachments?: boolean;
    /**
     * Indicates whether to enable editing on the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#LayerInfo)
     */
    enabled?: boolean;
    /**
     * Indicates whether to enable `Add feature` functionality.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#LayerInfo)
     */
    addEnabled?: boolean;
    /**
     * Indicates whether to enable `Update feature` functionality.
     *
     * [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.
     *
     * [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.
   *
   * [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 customizing 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-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 {
    /**
     * An array of [FieldConfig](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html) objects to use within the [FeatureForm](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html).
     *
     * [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 managing various template items and how they display within the widget.
     *
     * [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 any point 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 any polygon 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 any line feature updates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#SupportingWidgetDefaults)
     */
    polylineSymbol?: SimpleLineSymbol;
  }

  interface ElevationProfile extends Widget {
    /**
     * When the spatial reference is projected (other than web mercator) and the path is shorter than this threshold, distances will be computed planimetrically.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#geodesicDistanceThreshold)
     */
    geodesicDistanceThreshold: number;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#iconClass)
     */
    iconClass: string;
    /**
     * The input line graphic along which elevation will be queried in order to generate an elevation profile.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#input)
     */
    input: Graphic;
    /**
     * Collection of elevation profile lines which are to be generated and displayed in the widget's chart.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#profiles)
     */
    profiles: Collection<
      ElevationProfileLineGround | ElevationProfileLineInput | ElevationProfileLineQuery | ElevationProfileLineView
    >;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the elevation and distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#unit)
     */
    unit: SystemOrLengthUnit;
    /**
     * List of available units and unit systems (imperial, metric) for displaying the elevation and distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#unitOptions)
     */
    unitOptions: SystemOrLengthUnit[];
    /**
     * A reference to the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) or 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-widgets-ElevationProfile.html#view)
     */
    view: SceneView | MapView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#viewModel)
     */
    viewModel: ElevationProfileViewModel;
    /**
     * This property provides the ability to display or hide the individual elements of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#visibleElements)
     */
    visibleElements: ElevationProfileVisibleElements;
  }

  interface ElevationProfileConstructor {
    /**
     * The ElevationProfile widget is used to generate and display an elevation profile from an [input line graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#input).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html)
     */

    new (properties?: ElevationProfileProperties): ElevationProfile;
  }

  export const ElevationProfile: ElevationProfileConstructor;

  interface ElevationProfileProperties extends WidgetProperties {
    /**
     * When the spatial reference is projected (other than web mercator) and the path is shorter than this threshold, distances will be computed planimetrically.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#geodesicDistanceThreshold)
     */
    geodesicDistanceThreshold?: number;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#iconClass)
     */
    iconClass?: string;
    /**
     * The input line graphic along which elevation will be queried in order to generate an elevation profile.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#input)
     */
    input?: GraphicProperties;
    /**
     * Collection of elevation profile lines which are to be generated and displayed in the widget's chart.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#profiles)
     */
    profiles?: CollectionProperties<
      | (ElevationProfileLineGroundProperties & { type: "ground" })
      | (ElevationProfileLineInputProperties & { type: "input" })
      | (ElevationProfileLineQueryProperties & { type: "query" })
      | (ElevationProfileLineViewProperties & { type: "view" })
    >;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the elevation and distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#unit)
     */
    unit?:
      | "imperial"
      | "metric"
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet";
    /**
     * List of available units and unit systems (imperial, metric) for displaying the elevation and distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#unitOptions)
     */
    unitOptions?: (
      | "imperial"
      | "metric"
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet"
    )[];
    /**
     * A reference to the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) or 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-widgets-ElevationProfile.html#view)
     */
    view?: (SceneViewProperties & { type: "3d" }) | (MapViewProperties & { type: "2d" });
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#viewModel)
     */
    viewModel?: ElevationProfileViewModelProperties;
    /**
     * This property provides the ability to display or hide the individual elements of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#visibleElements)
     */
    visibleElements?: ElevationProfileVisibleElements;
  }

  interface ElevationProfileLine extends Accessor {
    /**
     * Color of the line on the chart and the hovered points in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#color)
     */
    color: Color;
    /**
     * Point being hovered in the chart, in the view's spatial reference.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#hoveredPoint)
     */
    readonly hoveredPoint: Point;
    /**
     * Unique identifier for the profile line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#id)
     */
    id: string;
    /**
     * How far along the generation of this profile is.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#progress)
     */
    readonly progress: number;
    /**
     * List of samples that make up the elevation profile.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#samples)
     */
    readonly samples: ElevationProfileSample[];
    /**
     * Statistics about the generated elevation profile, if available.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#statistics)
     */
    readonly statistics: ElevationProfileStatistics;
    /**
     * Title of the line, to be displayed in the chart tooltip and in the chart legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#title)
     */
    title: string;
    /**
     * The line type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#type)
     */
    readonly type: "ground" | "input" | "query" | "view";
    /**
     * Whether a line visualization representing [elevationSamples](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#samples) should be added to 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-ElevationProfile-ElevationProfileLine.html#viewVisualizationEnabled)
     */
    viewVisualizationEnabled: boolean;
    /**
     * Whether the line should be computed and shown in the chart.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#visible)
     */
    visible: boolean;
  }

  interface ElevationProfileLineConstructor {
    /**
     * Common interface for all the elevation profile lines.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html)
     */

    new (properties?: ElevationProfileLineProperties): ElevationProfileLine;
  }

  export const ElevationProfileLine: ElevationProfileLineConstructor;

  interface ElevationProfileLineProperties {
    /**
     * Color of the line on the chart and the hovered points in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#color)
     */
    color?: Color | number[] | string;
    /**
     * Unique identifier for the profile line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#id)
     */
    id?: string;
    /**
     * Title of the line, to be displayed in the chart tooltip and in the chart legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#title)
     */
    title?: string;
    /**
     * Whether a line visualization representing [elevationSamples](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#samples) should be added to 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-ElevationProfile-ElevationProfileLine.html#viewVisualizationEnabled)
     */
    viewVisualizationEnabled?: boolean;
    /**
     * Whether the line should be computed and shown in the chart.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#visible)
     */
    visible?: boolean;
  }

  /**
   * Represents an elevation sample in the profile.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#ElevationProfileSample)
   */
  export interface ElevationProfileSample extends Object {
    /**
     * The x coordinate of the sample, in the spatial reference of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#ElevationProfileSample)
     */
    x: number;
    /**
     * The y coordinate of the sample, in the spatial reference of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#ElevationProfileSample)
     */
    y: number;
    /**
     * The z coordinate of the sample, in the spatial reference of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#ElevationProfileSample)
     */
    z?: number;
    /**
     * Distance from the beginning of the path, in the effective selected by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#ElevationProfileSample)
     */
    distance: number;
    /**
     * The elevation of the sample, in the effective units selected by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#ElevationProfileSample)
     */
    elevation?: number;
  }

  /**
   * Represents the statistics for the generated profile line.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#ElevationProfileStatistics)
   */
  export interface ElevationProfileStatistics extends Object {
    /**
     * The maximum distance or length of the path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#ElevationProfileStatistics)
     */
    maxDistance: number;
    /**
     * The minimum elevation along the path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#ElevationProfileStatistics)
     */
    minElevation: number;
    /**
     * The maximum elevation along the path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#ElevationProfileStatistics)
     */
    maxElevation: number;
    /**
     * The average elevation along the path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#ElevationProfileStatistics)
     */
    avgElevation: number;
    /**
     * The cumulative elevation gain along the path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#ElevationProfileStatistics)
     */
    elevationGain: number;
    /**
     * The cumulative elevation loss along the path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#ElevationProfileStatistics)
     */
    elevationLoss: number;
    /**
     * The maximum slope along the path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#ElevationProfileStatistics)
     */
    maxSlope: number;
    /**
     * The average slope along the path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLine.html#ElevationProfileStatistics)
     */
    avgSlope: number;
  }

  interface ElevationProfileLineGround extends ElevationProfileLine {
    /**
     * The line type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLineGround.html#type)
     */
    readonly type: "ground";
  }

  interface ElevationProfileLineGroundConstructor {
    /**
     * Profile line which samples elevation from the [Ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html) of the [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) currently set 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-widgets-ElevationProfile-ElevationProfileLineGround.html)
     */

    new (properties?: ElevationProfileLineGroundProperties): ElevationProfileLineGround;
  }

  export const ElevationProfileLineGround: ElevationProfileLineGroundConstructor;

  interface ElevationProfileLineGroundProperties extends ElevationProfileLineProperties {}

  interface ElevationProfileLineInput extends ElevationProfileLine {
    /**
     * The line type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLineInput.html#type)
     */
    readonly type: "input";
  }

  interface ElevationProfileLineInputConstructor {
    /**
     * Profile line which samples elevation from the geometry of the input [Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) itself, typically used on input lines with z values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLineInput.html)
     */

    new (properties?: ElevationProfileLineInputProperties): ElevationProfileLineInput;
  }

  export const ElevationProfileLineInput: ElevationProfileLineInputConstructor;

  interface ElevationProfileLineInputProperties extends ElevationProfileLineProperties {}

  interface ElevationProfileLineQuery extends ElevationProfileLine {
    /**
     * Elevation source used to sample elevation when generating the profile, for example an [ElevationLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLineQuery.html#source)
     */
    source: ElevationProfileLineQuerySource;
    /**
     * The line type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLineQuery.html#type)
     */
    readonly type: "query";
  }

  interface ElevationProfileLineQueryConstructor {
    /**
     * Profile line which samples elevation from a custom elevation source, for example by creating a new [ElevationLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html), or by using an elevation layer from [ground.layers](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html#layers).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLineQuery.html)
     */

    new (properties?: ElevationProfileLineQueryProperties): ElevationProfileLineQuery;
  }

  export const ElevationProfileLineQuery: ElevationProfileLineQueryConstructor;

  interface ElevationProfileLineQueryProperties extends ElevationProfileLineProperties {
    /**
     * Elevation source used to sample elevation when generating the profile, for example an [ElevationLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ElevationLayer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLineQuery.html#source)
     */
    source?: ElevationProfileLineQuerySource;
  }

  export interface ElevationProfileLineQuerySource extends Object {
    /**
     * Function used to query elevation values for a geometry ([Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html), [Multipoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Multipoint.html) or [Polyline](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Polyline.html)).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLineQuery.html#source)
     */
    queryElevation: QueryElevation;
  }

  export type QueryElevation = (
    geometry: Point | Multipoint | Polyline,
    options?: any
  ) => Promise<ElevationLayerElevationQueryResult>;

  interface ElevationProfileLineView extends ElevationProfileLine {
    /**
     * Items which are to be excluded when querying elevation from view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLineView.html#exclude)
     */
    exclude:
      | (IntersectItem | Collection<IntersectItem> | IntersectItem[] | Ground)[]
      | Collection<IntersectItem>
      | IntersectItem;
    /**
     * Items which are to be hit when querying elevation from view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLineView.html#include)
     */
    include:
      | (IntersectItem | Collection<IntersectItem> | IntersectItem[] | Ground)[]
      | Collection<IntersectItem>
      | IntersectItem;
    /**
     * The line type.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLineView.html#type)
     */
    readonly type: "view";
  }

  interface ElevationProfileLineViewConstructor {
    /**
     * Profile line which samples elevation directly from 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-ElevationProfile-ElevationProfileLineView.html)
     */

    new (properties?: ElevationProfileLineViewProperties): ElevationProfileLineView;
  }

  export const ElevationProfileLineView: ElevationProfileLineViewConstructor;

  interface ElevationProfileLineViewProperties extends ElevationProfileLineProperties {
    /**
     * Items which are to be excluded when querying elevation from view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLineView.html#exclude)
     */
    exclude?:
      | (
          | GraphicProperties
          | LayerProperties
          | BuildingSublayerProperties
          | CollectionProperties<GraphicProperties | LayerProperties | BuildingSublayerProperties>
          | (GraphicProperties | LayerProperties | BuildingSublayerProperties)[]
          | GroundProperties
        )[]
      | CollectionProperties<GraphicProperties | LayerProperties | BuildingSublayerProperties>
      | GraphicProperties
      | LayerProperties
      | BuildingSublayerProperties;
    /**
     * Items which are to be hit when querying elevation from view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileLineView.html#include)
     */
    include?:
      | (
          | GraphicProperties
          | LayerProperties
          | BuildingSublayerProperties
          | CollectionProperties<GraphicProperties | LayerProperties | BuildingSublayerProperties>
          | (GraphicProperties | LayerProperties | BuildingSublayerProperties)[]
          | GroundProperties
        )[]
      | CollectionProperties<GraphicProperties | LayerProperties | BuildingSublayerProperties>
      | GraphicProperties
      | LayerProperties
      | BuildingSublayerProperties;
  }

  interface ElevationProfileViewModel extends Accessor {
    /**
     * Units which have been selected according to the magnitude of the elevations and distances that are to be displayed in the widget, according to the selected unit or unit system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#effectiveUnits)
     */
    readonly effectiveUnits: EffectiveUnits;
    /**
     * When the spatial reference is projected (other than web mercator) and the path is shorter than this threshold, distances will be computed planimetrically.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#geodesicDistanceThreshold)
     */
    geodesicDistanceThreshold: number;
    /**
     * Whether the graphic used as [input](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#input) is highlighted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#highlightEnabled)
     */
    highlightEnabled: boolean;
    /**
     * The position, in the range [0, 1], being hovered in the graph.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#hoveredChartPosition)
     */
    hoveredChartPosition: number;
    /**
     * The input path along which elevation will be queried in order to generate an elevation profile.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#input)
     */
    input: Graphic;
    /**
     * Collection of elevation profile lines which are to be generated and displayed in the widget's chart.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#profiles)
     */
    profiles: Collection<
      ElevationProfileLineGround | ElevationProfileLineInput | ElevationProfileLineQuery | ElevationProfileLineView
    >;
    /**
     * The progress, between 0 and 1 of generating all the configured elevation profiles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#progress)
     */
    readonly progress: number;
    /**
     * The current state of the view model that can be used for rendering the UI of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#state)
     */
    readonly state: "disabled" | "ready" | "creating" | "created" | "selecting" | "selected";
    /**
     * Whether the chart should use a uniform scale for the X and Y axes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#uniformChartScaling)
     */
    uniformChartScaling: boolean;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the elevation and distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#unit)
     */
    unit: SystemOrLengthUnit;
    /**
     * List of available units and unit systems (imperial, metric) for displaying the elevation and distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#unitOptions)
     */
    unitOptions: SystemOrLengthUnit[];
    /**
     * A reference to 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-widgets-ElevationProfile-ElevationProfileViewModel.html#view)
     */
    view: SceneView | MapView;

    /**
     * Stops a creation/selection operation and restores the previously configured input path.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#cancel)
     */
    cancel(): void;
    /**
     * Clears the existing profile and stops any interaction.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#clear)
     */
    clear(): void;
    /**
     * If mode is "sketch" (the default), switches to the "creating" state in which the user can draw a new line.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#start)
     */
    start(options?: ElevationProfileViewModelStartOptions): void;
    /**
     * Stops a creation/selection operation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#stop)
     */
    stop(): void;
  }

  interface ElevationProfileViewModelConstructor {
    /**
     * Provides the logic for the [ElevationProfile](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html)
     */

    new (properties?: ElevationProfileViewModelProperties): ElevationProfileViewModel;
  }

  export const ElevationProfileViewModel: ElevationProfileViewModelConstructor;

  interface ElevationProfileViewModelProperties {
    /**
     * When the spatial reference is projected (other than web mercator) and the path is shorter than this threshold, distances will be computed planimetrically.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#geodesicDistanceThreshold)
     */
    geodesicDistanceThreshold?: number;
    /**
     * Whether the graphic used as [input](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#input) is highlighted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#highlightEnabled)
     */
    highlightEnabled?: boolean;
    /**
     * The position, in the range [0, 1], being hovered in the graph.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#hoveredChartPosition)
     */
    hoveredChartPosition?: number;
    /**
     * The input path along which elevation will be queried in order to generate an elevation profile.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#input)
     */
    input?: GraphicProperties;
    /**
     * Collection of elevation profile lines which are to be generated and displayed in the widget's chart.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#profiles)
     */
    profiles?: CollectionProperties<
      | (ElevationProfileLineGroundProperties & { type: "ground" })
      | (ElevationProfileLineInputProperties & { type: "input" })
      | (ElevationProfileLineQueryProperties & { type: "query" })
      | (ElevationProfileLineViewProperties & { type: "view" })
    >;
    /**
     * Whether the chart should use a uniform scale for the X and Y axes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#uniformChartScaling)
     */
    uniformChartScaling?: boolean;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the elevation and distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#unit)
     */
    unit?:
      | "imperial"
      | "metric"
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet";
    /**
     * List of available units and unit systems (imperial, metric) for displaying the elevation and distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#unitOptions)
     */
    unitOptions?: (
      | "imperial"
      | "metric"
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet"
    )[];
    /**
     * A reference to 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-widgets-ElevationProfile-ElevationProfileViewModel.html#view)
     */
    view?: (SceneViewProperties & { type: "3d" }) | (MapViewProperties & { type: "2d" });
  }

  /**
   * The units which have been selected according to the magnitude of the elevations and distances that are to be displayed in the widget, according to the selected unit or unit system.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#EffectiveUnits)
   */
  export interface EffectiveUnits extends Object {
    /**
     * Units used for displaying distance or length values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#EffectiveUnits)
     */
    distance: LengthUnit;
    /**
     * Units used for displaying elevation values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#EffectiveUnits)
     */
    elevation: LengthUnit;
  }

  export interface ElevationProfileViewModelStartOptions extends Object {
    /**
     * The mode that the widget will start with.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile-ElevationProfileViewModel.html#start)
     */
    mode?: "sketch" | "select";
  }

  /**
   * The visible elements that are displayed within the widget.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#VisibleElements)
   */
  export interface ElevationProfileVisibleElements extends Object {
    /**
     * When set to `false`, the legend (which includes statistics) is not displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#VisibleElements)
     */
    legend?: boolean;
    /**
     * When set to `false`, the chart is not displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#VisibleElements)
     */
    chart?: boolean;
    /**
     * When set to `false` the button used to clear the current elevation profile is not displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#VisibleElements)
     */
    clearButton?: boolean;
    /**
     * When set to `false`, the button used to open the settings popup is not displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#VisibleElements)
     */
    settingsButton?: boolean;
    /**
     * When set to `false`, the button used to start drawing/sketchinng is not displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#VisibleElements)
     */
    sketchButton?: boolean;
    /**
     * When set to `false`, the button used to select a path is not displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#VisibleElements)
     */
    selectButton?: boolean;
    /**
     * When set to `false`, the dropdown used to select the units is not displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#VisibleElements)
     */
    unitSelector?: boolean;
    /**
     * When set to `false`, the element used to toggle uniform chart scaling on or off is not displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ElevationProfile.html#VisibleElements)
     */
    uniformChartScalingToggle?: boolean;
  }

  interface Expand extends Widget {
    /**
     * Automatically collapses the expand widget instance when the view's viewpoint updates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#autoCollapse)
     */
    autoCollapse: boolean;
    /**
     * When true, the Expand widget will close after the Escape key is pressed when the keyboard focus is within its content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#closeOnEsc)
     */
    closeOnEsc: boolean | Function;
    /**
     * 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)
     */
    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)
     */
    expanded: boolean;
    /**
     * Icon font used to style the Expand button.
     *
     * [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)
     */
    expandTooltip: string;
    /**
     * This value associates two or more Expand widget instances with each other, allowing one instance to auto collapse when another instance in the same group is expanded.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#iconNumber)
     */
    iconNumber: number;
    /**
     * The mode in which the widget displays.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#mode)
     */
    mode: "auto" | "floating" | "drawer";
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this 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;
    /**
     * 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 {
    /**
     * The Expand widget acts as a clickable button for opening a widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html)
     */

    new (properties?: ExpandProperties): Expand;
  }

  export const Expand: ExpandConstructor;

  interface ExpandProperties extends WidgetProperties {
    /**
     * Automatically collapses the expand widget instance when the view's viewpoint updates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#autoCollapse)
     */
    autoCollapse?: boolean;
    /**
     * When true, the Expand widget will close after the Escape key is pressed when the keyboard focus is within its content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#closeOnEsc)
     */
    closeOnEsc?: boolean | Function;
    /**
     * 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)
     */
    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)
     */
    expanded?: boolean;
    /**
     * Icon font used to style the Expand button.
     *
     * [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)
     */
    expandTooltip?: string;
    /**
     * This value associates two or more Expand widget instances with each other, allowing one instance to auto collapse when another instance in the same group is expanded.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#iconNumber)
     */
    iconNumber?: number;
    /**
     * The mode in which the widget displays.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#mode)
     */
    mode?: "auto" | "floating" | "drawer";
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this 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's viewpoint updates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand-ExpandViewModel.html#autoCollapse)
     */
    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)
     */
    expanded: boolean;
    /**
     * This value associates two or more Expand widget instances with each other, allowing one instance to auto collapse when another instance in the same group is expanded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand-ExpandViewModel.html#group)
     */
    group: string;
    /**
     * The view model's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand-ExpandViewModel.html#state)
     */
    readonly state: "ready" | "disabled";
    /**
     * 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 {
    /**
     * Provides the logic for the [Expand](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand-ExpandViewModel.html)
     */

    new (properties?: ExpandViewModelProperties): ExpandViewModel;
  }

  export const ExpandViewModel: ExpandViewModelConstructor;

  interface ExpandViewModelProperties {
    /**
     * Automatically collapses the expand widget instance when the view's viewpoint updates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand-ExpandViewModel.html#autoCollapse)
     */
    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)
     */
    expanded?: boolean;
    /**
     * This value associates two or more Expand widget instances with each other, allowing one instance to auto collapse when another instance in the same group is expanded.
     *
     * [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 & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  interface Feature extends Widget {
    /**
     * Enables automatic creation of a popup template for layers that have popups enabled but no popupTemplate defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#defaultPopupTemplateEnabled)
     */
    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)
     */
    graphic: Graphic;
    /**
     * Indicates the heading level to use for the [title](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#title) of the feature widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#headingLevel)
     */
    headingLevel: number;
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#map)
     */
    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)
     */
    spatialReference: SpatialReference;
    /**
     * The title for the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#visibleElements)
     */
    visibleElements: FeatureVisibleElements;

    /**
     * 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)
     */
    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)
     */
    previousMedia(contentElementIndex: number): void;
    /**
     * Paginates to a specified [media](esri-popup-content-MediaContent.html) info object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#setActiveMedia)
     */
    setActiveMedia(contentElementIndex: number, mediaInfoIndex: number): void;
  }

  interface FeatureConstructor {
    /**
     * The Feature widget displays a graphic according to its [PopupTemplate](esri-PopupTemplate.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html)
     */

    new (properties?: FeatureProperties): Feature;
  }

  export const Feature: FeatureConstructor;

  interface FeatureProperties extends WidgetProperties {
    /**
     * Enables automatic creation of a popup template for layers that have popups enabled but no popupTemplate defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#defaultPopupTemplateEnabled)
     */
    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)
     */
    graphic?: GraphicProperties;
    /**
     * Indicates the heading level to use for the [title](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#title) of the feature widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#headingLevel)
     */
    headingLevel?: number;
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#map)
     */
    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)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#visibleElements)
     */
    visibleElements?: FeatureVisibleElements;
  }

  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)
     */
    readonly content: Content[] | Widget | HTMLElement | string;
    /**
     * Enables automatic creation of a popup template for layers that have popups enabled but no popupTemplate defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#defaultPopupTemplateEnabled)
     */
    defaultPopupTemplateEnabled: boolean;
    /**
     * The formatted attributes calculated from `fieldInfo` [PopupTemplate](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)
     */
    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)
     */
    graphic: Graphic;
    /**
     * A read-only property containing metadata regarding the last edit performed on a feature.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#map)
     */
    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)
     */
    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).
     *
     * [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;

    /**
     * Paginates to the next [media](esri-popup-content-MediaContent.html) info.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#nextMedia)
     */
    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-FeatureViewModel.html#previousMedia)
     */
    previousMedia(contentElementIndex: number): void;
    /**
     * Paginates to a specified [media](esri-popup-content-MediaContent.html) info object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#setActiveMedia)
     */
    setActiveMedia(contentElementIndex: number, mediaInfoIndex: number): void;
  }

  interface FeatureViewModelConstructor {
    /**
     * Provides the logic for the [Feature](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html)
     */

    new (properties?: FeatureViewModelProperties): FeatureViewModel;
  }

  export const FeatureViewModel: FeatureViewModelConstructor;

  interface FeatureViewModelProperties {
    /**
     * Enables automatic creation of a popup template for layers that have popups enabled but no popupTemplate defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#defaultPopupTemplateEnabled)
     */
    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)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#map)
     */
    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)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature-FeatureViewModel.html#lastEditInfo)
     */
    type: "edit" | "create";
  }

  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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#VisibleContentElements)
     */
    text?: boolean;
  }

  export interface FeatureVisibleElements extends Object {
    /**
     * Indicates whether the title associated with the feature displays.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#VisibleElements)
     */
    title?: boolean;
    /**
     * Indicates whether content for the Feature displays, can also indicate the specific types of content elements by setting it via [VisibleContentElements](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#VisibleContentElements).
     *
     * [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 displayed within the feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html#VisibleElements)
     */
    lastEditInfo?: boolean;
  }

  interface FeatureForm extends Widget {
    /**
     * The description of the form.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#description)
     */
    description: string;
    /**
     * The associated feature containing the editable attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#feature)
     */
    feature: Graphic;
    /**
     * Array of individual or grouped field configuration objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#fieldConfig)
     */
    fieldConfig: FieldConfig[] | FieldGroupConfig[];
    /**
     * The associated [template](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-FormTemplate.html) used for the form.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#formTemplate)
     */
    formTemplate: FormTemplate;
    /**
     * Defines how groups will be displayed to the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#groupDisplay)
     */
    groupDisplay: "all" | "sequential";
    /**
     * Indicates the heading level to use for the [title](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#title) of the form.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#headingLevel)
     */
    headingLevel: number;
    /**
     * Layer containing the editable feature attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#layer)
     */
    layer: FeatureLayer;
    /**
     * The title of the form.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#title)
     */
    title: string;
    /**
     * The view model for this 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;
    /**
     * 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;

    on(name: "value-change", eventHandler: FeatureFormValueChangeEventHandler): IHandle;

    on(name: "submit", eventHandler: FeatureFormSubmitEventHandler): IHandle;
  }

  interface FeatureFormConstructor {
    /**
     * The FeatureForm widget displays attributes of a feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html)
     */

    new (properties?: FeatureFormProperties): FeatureForm;
  }

  export const FeatureForm: FeatureFormConstructor;

  interface FeatureFormProperties extends WidgetProperties {
    /**
     * The description of the form.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#description)
     */
    description?: string;
    /**
     * The associated feature containing the editable attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#feature)
     */
    feature?: GraphicProperties;
    /**
     * Array of individual or grouped field configuration objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#fieldConfig)
     */
    fieldConfig?: FieldConfigProperties[] | FieldGroupConfigProperties[];
    /**
     * The associated [template](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-FormTemplate.html) used for the form.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#formTemplate)
     */
    formTemplate?: FormTemplateProperties;
    /**
     * Defines how groups will be displayed to the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#groupDisplay)
     */
    groupDisplay?: "all" | "sequential";
    /**
     * Indicates the heading level to use for the [title](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#title) of the form.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#headingLevel)
     */
    headingLevel?: number;
    /**
     * Layer containing the editable feature attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#layer)
     */
    layer?: FeatureLayerProperties;
    /**
     * The title of the form.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#title)
     */
    title?: string;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#viewModel)
     */
    viewModel?: FeatureFormViewModelProperties;
  }

  interface FeatureFormViewModel extends Accessor, Evented {
    /**
     * The description of the form.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#description)
     */
    description: string;
    /**
     * The associated feature containing the editable attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#feature)
     */
    feature: Graphic;
    /**
     * Array of individual or grouped field configuration objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#fieldConfig)
     */
    fieldConfig: FieldConfig[] | FieldGroupConfig[];
    /**
     * The associated [template](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-FormTemplate.html) used for the form.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#formTemplate)
     */
    formTemplate: FormTemplate;
    /**
     * 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#inputFields)
     */
    readonly inputFields: InputField[] | InputFieldGroup[];
    /**
     * Layer containing the editable feature attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#layer)
     */
    layer: FeatureLayer | SceneLayer;
    /**
     * The widget's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#state)
     */
    readonly state: "ready" | "disabled";
    /**
     * The title of the form.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#title)
     */
    title: 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)
     */
    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;

    on(name: "value-change", eventHandler: FeatureFormViewModelValueChangeEventHandler): IHandle;

    on(name: "submit", eventHandler: FeatureFormViewModelSubmitEventHandler): IHandle;
  }

  interface FeatureFormViewModelConstructor {
    /**
     * Provides the logic for 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)
     */

    new (properties?: FeatureFormViewModelProperties): FeatureFormViewModel;
  }

  export const FeatureFormViewModel: FeatureFormViewModelConstructor;

  interface FeatureFormViewModelProperties {
    /**
     * The description of the form.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#description)
     */
    description?: string;
    /**
     * The associated feature containing the editable attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#feature)
     */
    feature?: GraphicProperties;
    /**
     * Array of individual or grouped field configuration objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#fieldConfig)
     */
    fieldConfig?: FieldConfigProperties[] | FieldGroupConfigProperties[];
    /**
     * The associated [template](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-FormTemplate.html) used for the form.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#formTemplate)
     */
    formTemplate?: FormTemplateProperties;
    /**
     * Layer containing the editable feature attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#layer)
     */
    layer?: (FeatureLayerProperties & { type: "feature" }) | (SceneLayerProperties & { type: "scene" });
    /**
     * The title of the form.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FeatureFormViewModel.html#title)
     */
    title?: 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;
  }

  export interface FeatureFormViewModelSubmitEvent {
    invalid: string[];

    valid: string[];

    values: any;
  }

  export interface FeatureFormViewModelValueChangeEvent {
    feature: Graphic;

    fieldName: string;

    layer: FeatureLayer;

    valid: boolean;

    value: number | string | any;
  }

  interface FieldConfig extends Accessor {
    /**
     * The field's description.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#description)
     */
    description: string;
    /**
     * The field's domain.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#domain)
     */
    domain: CodedValueDomain | RangeDomain;
    /**
     * Indicates whether the field can be edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#editable)
     */
    editable: boolean;
    /**
     * The type of editor to use for `string` field types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#editorType)
     */
    editorType: "text-box" | "text-area";
    /**
     * This property is rendered as a tooltip in 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-FieldConfig.html#hint)
     */
    hint: string;
    /**
     * Indicates whether date fields should display input for editing time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#includeTime)
     */
    includeTime: boolean;
    /**
     * The field's label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#label)
     */
    label: string;
    /**
     * Restricts the input length.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#maxLength)
     */
    maxLength: number;
    /**
     * Restricts the input length.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#minLength)
     */
    minLength: number;
    /**
     * The field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#name)
     */
    name: string;

    noValueOptionLabel: boolean;

    offValue: number | string;

    onValue: number | string;
    /**
     * Indicates whether the field is required.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#required)
     */
    required: boolean;
    /**
     * A reference to an [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a boolean value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#requiredExpression)
     */
    requiredExpression: string;

    showNoValueOption: boolean;
    /**
     * A reference to an [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a boolean value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#visibilityExpression)
     */
    visibilityExpression: string;
  }

  interface FieldConfigConstructor {
    /**
     * Configuration options for displaying an individual field within 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-FieldConfig.html)
     */

    new (properties?: FieldConfigProperties): FieldConfig;
  }

  export const FieldConfig: FieldConfigConstructor;

  interface FieldConfigProperties {
    /**
     * The field's description.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#description)
     */
    description?: string;
    /**
     * The field's domain.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#domain)
     */
    domain?: (CodedValueDomainProperties & { type: "coded-value" }) | (RangeDomainProperties & { type: "range" });
    /**
     * Indicates whether the field can be edited.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#editable)
     */
    editable?: boolean;
    /**
     * The type of editor to use for `string` field types.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#editorType)
     */
    editorType?: "text-box" | "text-area";
    /**
     * This property is rendered as a tooltip in 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-FieldConfig.html#hint)
     */
    hint?: string;
    /**
     * Indicates whether date fields should display input for editing time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#includeTime)
     */
    includeTime?: boolean;
    /**
     * The field's label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#label)
     */
    label?: string;
    /**
     * Restricts the input length.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#maxLength)
     */
    maxLength?: number;
    /**
     * Restricts the input length.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#minLength)
     */
    minLength?: number;
    /**
     * The field name.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#name)
     */
    name?: string;

    noValueOptionLabel?: boolean;

    offValue?: number | string;

    onValue?: number | string;
    /**
     * Indicates whether the field is required.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#required)
     */
    required?: boolean;
    /**
     * A reference to an [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a boolean value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#requiredExpression)
     */
    requiredExpression?: string;

    showNoValueOption?: boolean;
    /**
     * A reference to an [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a boolean value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldConfig.html#visibilityExpression)
     */
    visibilityExpression?: string;
  }

  interface FieldGroupConfig extends Accessor {
    /**
     * The field's description.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldGroupConfig.html#fieldConfig)
     */
    fieldConfig: FieldConfig[];

    initialState: "expanded" | "collapsed";
    /**
     * The field's label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldGroupConfig.html#label)
     */
    label: string;
    /**
     * A reference to an [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a boolean value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldGroupConfig.html#visibilityExpression)
     */
    visibilityExpression: string;
  }

  interface FieldGroupConfigConstructor {
    /**
     * Configuration options for displaying a group of fields within 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-FieldGroupConfig.html)
     */

    new (properties?: FieldGroupConfigProperties): FieldGroupConfig;
  }

  export const FieldGroupConfig: FieldGroupConfigConstructor;

  interface FieldGroupConfigProperties {
    /**
     * The field's description.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldGroupConfig.html#fieldConfig)
     */
    fieldConfig?: FieldConfigProperties[];

    initialState?: "expanded" | "collapsed";
    /**
     * The field's label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldGroupConfig.html#label)
     */
    label?: string;
    /**
     * A reference to an [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression that returns a boolean value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-FieldGroupConfig.html#visibilityExpression)
     */
    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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#editorType)
     */
    readonly editorType: "text-box" | "text-area";
    /**
     * If the input field's value is invalid, this property returns validation error code.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#hint)
     */
    readonly hint: string;
    /**
     * For date inputs, this enables the time input part.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#includeTime)
     */
    readonly includeTime: 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;
    /**
     * Restricts the input length.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#minLength)
     */
    readonly minLength: 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#type)
     */
    readonly type: "number" | "text" | "date" | "unsupported";
    /**
     * When `true`, the input value is valid.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html#visible)
     */
    readonly visible: boolean;
  }

  interface InputFieldConstructor {
    /**
     * This is a read-only support class that represents an input field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputField.html)
     */

    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`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputFieldGroup.html#evaluatedVisibility)
     */
    readonly evaluatedVisibility: boolean;

    initialState: "expanded" | "collapsed";
    /**
     * 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)
     */
    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 {
    /**
     * This is a read-only support class that represents a group of input fields.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm-InputFieldGroup.html)
     */

    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;

    initialState?: "expanded" | "collapsed";
    /**
     * 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)
     */
    visibilityExpression?: string;
  }

  export interface FeatureFormSubmitEvent {
    invalid: string[];

    valid: string[];

    values: any;
  }

  export interface FeatureFormValueChangeEvent {
    feature: Graphic;

    fieldName: string;

    layer: FeatureLayer;

    valid: boolean;

    value: number | string | any;
  }

  interface FeatureTable extends Widget {
    /**
     * Indicates whether to display the `Attachments` field in the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#attachmentsEnabled)
     */
    attachmentsEnabled: boolean;
    /**
     * When `true`, columns can be reordered by dragging a column's header.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#columnReorderingEnabled)
     */
    columnReorderingEnabled: boolean;
    /**
     * A collection of [columns](module-esri-widgets-FeatureTable-Grid-Column.html) within the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#columns)
     */
    columns: Collection<FieldColumn>;
    /**
     * Indicates whether editing is enabled on the data within the feature table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#editingEnabled)
     */
    editingEnabled: boolean;
    /**
     * An array of individual field configuration objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#fieldConfigs)
     */
    fieldConfigs: FieldColumnConfig[];
    /**
     * Set this property to filter the features displayed in the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#filterGeometry)
     */
    filterGeometry: Geometry;
    /**
     * Indicates whether to highlight the associated feature when a row is selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#highlightOnRowSelectEnabled)
     */
    highlightOnRowSelectEnabled: boolean;
    /**
     * The associated [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) containing the fields and attributes to display within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#layer)
     */
    layer: FeatureLayer;
    /**
     * Reference to the FeatureTable's primary menu.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#menu)
     */
    readonly menu: ButtonMenu;
    /**
     * Set this object to customize the feature table's menu content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#menuConfig)
     */
    menuConfig: ButtonMenuConfig;
    /**
     * The default page size used when displaying features within the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#pageSize)
     */
    pageSize: number;
    /**
     * 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-widgets-FeatureTable.html#view)
     */
    view: MapView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#viewModel)
     */
    viewModel: FeatureTableViewModel;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#visibleElements)
     */
    visibleElements: FeatureTableVisibleElements;

    /**
     * This clears any highlighted features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#clearHighlights)
     */
    clearHighlights(): void;
    /**
     * Clears the current selection within the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#clearSelection)
     */
    clearSelection(): void;
    /**
     * Unselects the specified rows within the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#deselectRows)
     */
    deselectRows(params: number | Graphic | (number | Graphic)[]): void;
    /**
     * Finds the specified column within the feature table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#findColumn)
     */
    findColumn(fieldName: string): FieldColumn;
    /**
     * Hides the specified column from the feature table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#hideColumn)
     */
    hideColumn(fieldName: string): void;
    /**
     * Refreshes the table contents.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#refresh)
     */
    refresh(): void;
    /**
     * Scrolls the table to a row based on specified index.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#scrollToIndex)
     */
    scrollToIndex(): void;
    /**
     * Selects the specified rows within the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#selectRows)
     */
    selectRows(params: number | Graphic | (number | Graphic)[]): void;
    /**
     * Shows all the columns in the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#showAllColumns)
     */
    showAllColumns(): void;
    /**
     * Shows the specified column within the feature table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#showColumn)
     */
    showColumn(fieldName: string): void;
    /**
     * Sorts the column.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#sortColumn)
     */
    sortColumn(path: string, direction: "asc" | "desc"): void;

    on(name: "selection-change", eventHandler: FeatureTableSelectionChangeEventHandler): IHandle;
  }

  interface FeatureTableConstructor {
    /**
     * This widget provides an interactive tabular view of each feature's attributes in a feature layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html)
     */

    new (properties?: FeatureTableProperties): FeatureTable;
  }

  export const FeatureTable: FeatureTableConstructor;

  interface FeatureTableProperties extends WidgetProperties {
    /**
     * Indicates whether to display the `Attachments` field in the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#attachmentsEnabled)
     */
    attachmentsEnabled?: boolean;
    /**
     * When `true`, columns can be reordered by dragging a column's header.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#columnReorderingEnabled)
     */
    columnReorderingEnabled?: boolean;
    /**
     * A collection of [columns](module-esri-widgets-FeatureTable-Grid-Column.html) within the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#columns)
     */
    columns?: CollectionProperties<FieldColumnProperties>;
    /**
     * Indicates whether editing is enabled on the data within the feature table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#editingEnabled)
     */
    editingEnabled?: boolean;
    /**
     * An array of individual field configuration objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#fieldConfigs)
     */
    fieldConfigs?: FieldColumnConfigProperties[];
    /**
     * Set this property to filter the features displayed in the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#filterGeometry)
     */
    filterGeometry?: GeometryProperties;
    /**
     * Indicates whether to highlight the associated feature when a row is selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#highlightOnRowSelectEnabled)
     */
    highlightOnRowSelectEnabled?: boolean;
    /**
     * The associated [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) containing the fields and attributes to display within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#layer)
     */
    layer?: FeatureLayerProperties;
    /**
     * Set this object to customize the feature table's menu content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#menuConfig)
     */
    menuConfig?: ButtonMenuConfig;
    /**
     * The default page size used when displaying features within the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#pageSize)
     */
    pageSize?: number;
    /**
     * 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-widgets-FeatureTable.html#view)
     */
    view?: MapViewProperties;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#viewModel)
     */
    viewModel?: FeatureTableViewModelProperties;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#visibleElements)
     */
    visibleElements?: FeatureTableVisibleElements;
  }

  interface FeatureTableViewModel extends Accessor {
    /**
     * Indicates whether to display the `Attachments` field in the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#attachmentsEnabled)
     */
    attachmentsEnabled: boolean;
    /**
     * Indicates whether editing is enabled on the data within the feature table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#editingEnabled)
     */
    editingEnabled: boolean;
    /**
     * An array of individual configuration objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#fieldConfigs)
     */
    fieldConfigs: FieldColumnConfig[];
    /**
     * Set this property to filter the features displayed in the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#filterGeometry)
     */
    filterGeometry: Geometry;
    /**
     * A collection of fields to remain hidden within the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#hiddenFields)
     */
    hiddenFields: Collection<string>;
    /**
     * Indicates whether to highlight the associated feature when a row is selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#highlightOnRowSelectEnabled)
     */
    highlightOnRowSelectEnabled: boolean;
    /**
     * The associated [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) containing the fields and attributes to display within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#layer)
     */
    layer: FeatureLayer | SceneLayer;
    /**
     * The view model's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#state)
     */
    readonly state: "disabled" | "loading" | "ready";
    /**
     * 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-widgets-FeatureTable-FeatureTableViewModel.html#view)
     */
    view: MapView;

    /**
     * This clears any highlighted features.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#clearHighlights)
     */
    clearHighlights(): void;
    /**
     * Clears the current selection within the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#clearSelection)
     */
    clearSelection(): void;
    /**
     * Unselects the specified rows within the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#deselectRows)
     */
    deselectRows(params: number | Graphic | (number | Graphic)[]): void;
    /**
     * Returns current row index for the associated feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#getObjectIdIndex)
     */
    getObjectIdIndex(objectId: number): number;
    /**
     * Returns a field value given the specified feature `ObjectId` and an associated `fieldName`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#getValue)
     */
    getValue(objectId: number, fieldName: string): string | number | any;
    /**
     * Refreshes the table contents.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#refresh)
     */
    refresh(): void;
    /**
     * Scrolls the table to a row based on specified index.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#scrollToIndex)
     */
    scrollToIndex(index: number): void;
    /**
     * Selects the specified rows within the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#selectRows)
     */
    selectRows(params: number | Graphic | (number | Graphic)[]): void;
  }

  interface FeatureTableViewModelConstructor {
    /**
     * Provides the logic for the [FeatureTable](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html) widget, which allows users to view content from feature attributes in a tabular format.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html)
     */

    new (properties?: FeatureTableViewModelProperties): FeatureTableViewModel;
  }

  export const FeatureTableViewModel: FeatureTableViewModelConstructor;

  interface FeatureTableViewModelProperties {
    /**
     * Indicates whether to display the `Attachments` field in the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#attachmentsEnabled)
     */
    attachmentsEnabled?: boolean;
    /**
     * Indicates whether editing is enabled on the data within the feature table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#editingEnabled)
     */
    editingEnabled?: boolean;
    /**
     * An array of individual configuration objects.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#fieldConfigs)
     */
    fieldConfigs?: FieldColumnConfigProperties[];
    /**
     * Set this property to filter the features displayed in the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#filterGeometry)
     */
    filterGeometry?: GeometryProperties;
    /**
     * A collection of fields to remain hidden within the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#hiddenFields)
     */
    hiddenFields?: CollectionProperties<string>;
    /**
     * Indicates whether to highlight the associated feature when a row is selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#highlightOnRowSelectEnabled)
     */
    highlightOnRowSelectEnabled?: boolean;
    /**
     * The associated [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) containing the fields and attributes to display within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FeatureTableViewModel.html#layer)
     */
    layer?: (FeatureLayerProperties & { type: "feature" }) | (SceneLayerProperties & { type: "scene" });
    /**
     * 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-widgets-FeatureTable-FeatureTableViewModel.html#view)
     */
    view?: MapViewProperties;
  }

  interface FieldColumn extends Accessor, Column {
    /**
     * The display name for the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html#alias)
     */
    readonly alias: string;
    /**
     * The field configuration for the column.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html#config)
     */
    config: FieldColumnConfig;
    /**
     * The default value set for the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html#defaultValue)
     */
    readonly defaultValue: number | string | any | any;
    /**
     * Contains information describing the purpose of each field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html#description)
     */
    readonly description: string;
    /**
     * Controls the sort order of the column.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html#direction)
     */
    direction: "asc" | "desc" | any;
    /**
     * Indicates whether the field is editable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html#editable)
     */
    readonly editable: boolean;
    /**
     * The [Field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html) associated with this column.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html#field)
     */
    field: Field;
    /**
     * If applicable, the associated [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) tied to the column.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html#layer)
     */
    layer: FeatureLayer | SceneLayer;
    /**
     * Restricts the input length for the column.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html#maxLength)
     */
    readonly maxLength: number;
    /**
     * The [Object](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#ButtonMenuConfig) used to customize the column's menu content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html#menuConfig)
     */
    readonly menuConfig: ButtonMenuConfig;
    /**
     * The name of the field.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html#name)
     */
    readonly name: string;
    /**
     * Indicates if the field can accept `null` values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html#nullable)
     */
    readonly nullable: boolean;
    /**
     * Indicates whether the field is required.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html#required)
     */
    readonly required: boolean;
    /**
     * Indicates whether the field is sortable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html#sortable)
     */
    readonly sortable: boolean;
  }

  interface FieldColumnConstructor {
    /**
     * The [FieldColumn](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html) class works with the [FeatureTable](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html) and provides the underlying logic for column behavior.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html)
     */

    new (properties?: FieldColumnProperties): FieldColumn;
  }

  export const FieldColumn: FieldColumnConstructor;

  interface FieldColumnProperties extends ColumnProperties {
    /**
     * The field configuration for the column.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html#config)
     */
    config?: FieldColumnConfigProperties;
    /**
     * Controls the sort order of the column.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html#direction)
     */
    direction?: "asc" | "desc" | any;
    /**
     * The [Field](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-Field.html) associated with this column.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html#field)
     */
    field?: FieldProperties;
    /**
     * If applicable, the associated [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) tied to the column.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html#layer)
     */
    layer?: (FeatureLayerProperties & { type: "feature" }) | (SceneLayerProperties & { type: "scene" });
  }

  interface FieldColumnConfig extends FieldConfig {
    /**
     * Controls the sort order of the column.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumnConfig.html#direction)
     */
    direction: "asc" | "desc" | any;
    /**
     * Set this object to customize the field column's menu content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumnConfig.html#menuConfig)
     */
    menuConfig: ButtonMenuConfig;
    /**
     * Indicates whether the field column can be sorted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumnConfig.html#sortable)
     */
    sortable: boolean;
    /**
     * Indicates whether the field column is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumnConfig.html#visible)
     */
    visible: boolean;
  }

  interface FieldColumnConfigConstructor {
    /**
     * The configuration options for displaying an individual field within the [FeatureTable](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumnConfig.html)
     */

    new (properties?: FieldColumnConfigProperties): FieldColumnConfig;
  }

  export const FieldColumnConfig: FieldColumnConfigConstructor;

  interface FieldColumnConfigProperties extends FieldConfigProperties {
    /**
     * Controls the sort order of the column.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumnConfig.html#direction)
     */
    direction?: "asc" | "desc" | any;
    /**
     * Set this object to customize the field column's menu content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumnConfig.html#menuConfig)
     */
    menuConfig?: ButtonMenuConfig;
    /**
     * Indicates whether the field column can be sorted.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumnConfig.html#sortable)
     */
    sortable?: boolean;
    /**
     * Indicates whether the field column is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumnConfig.html#visible)
     */
    visible?: boolean;
  }

  interface Column {
    /**
     * The object to customize the feature table column's menu content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-Column.html#menu)
     */
    readonly menu: ButtonMenu;
    /**
     * Indicates whether the column is resizable.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-Column.html#resizable)
     */
    readonly resizable: boolean;

    /**
     * Returns any associated menu items on the column.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-Column.html#getMenuItems)
     */
    getMenuItems(): ButtonMenuItemConfig;
  }

  interface ColumnConstructor {
    new (): Column;
  }

  export const Column: ColumnConstructor;

  interface ColumnProperties {}

  interface ButtonMenu extends Widget {
    /**
     * Adds a CSS class to the menu button's DOM node.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenu.html#iconClass)
     */
    iconClass: string;
    /**
     * An array of individual [menu items](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenu.html#items)
     */
    items: ButtonMenuItem[];
    /**
     * Indicates if the menu content is open and visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenu.html#open)
     */
    open: boolean;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenu.html#viewModel)
     */
    viewModel: ButtonMenuViewModel;
  }

  interface ButtonMenuConstructor {
    /**
     * This widget provides the underlying menu functionality when working with the [FeatureTable](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenu.html)
     */

    new (properties?: ButtonMenuProperties): ButtonMenu;
  }

  export const ButtonMenu: ButtonMenuConstructor;

  interface ButtonMenuProperties extends WidgetProperties {
    /**
     * Adds a CSS class to the menu button's DOM node.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenu.html#iconClass)
     */
    iconClass?: string;
    /**
     * An array of individual [menu items](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenu.html#items)
     */
    items?: ButtonMenuItemProperties[];
    /**
     * Indicates if the menu content is open and visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenu.html#open)
     */
    open?: boolean;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenu.html#viewModel)
     */
    viewModel?: ButtonMenuViewModelProperties;
  }

  interface ButtonMenuItem extends Accessor {
    /**
     * Indicates whether to automatically close the menu's item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html#autoCloseMenu)
     */
    autoCloseMenu: boolean;
    /**
     * A function that executes on the ButtonMenuItem's `click` event.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html#clickFunction)
     */
    clickFunction: ButtonMenuItemClickFunction;
    /**
     * Adds a CSS class to the menu button's DOM node.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html#iconClass)
     */
    iconClass: string;
    /**
     * An array of individual [menu items](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html#items)
     */
    items: ButtonMenuItem[];
    /**
     * The label of the menu item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html#label)
     */
    label: string;
    /**
     * Indicates if the menu content is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html#open)
     */
    open: boolean;
    /**
     * Indicates whether the menu item is selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html#selected)
     */
    selected: boolean;
    /**
     * Indicates whether a toggled state should be applied to individual menu items.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html#selectionEnabled)
     */
    selectionEnabled: boolean;
  }

  interface ButtonMenuItemConstructor {
    /**
     * The `ButtonMenuItem` class provides the underlying menu functionality to create and customize new menu items within the [FeatureTable](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html) widget's [ButtonMenu](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenu.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html)
     */

    new (properties?: ButtonMenuItemProperties): ButtonMenuItem;
  }

  export const ButtonMenuItem: ButtonMenuItemConstructor;

  interface ButtonMenuItemProperties {
    /**
     * Indicates whether to automatically close the menu's item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html#autoCloseMenu)
     */
    autoCloseMenu?: boolean;
    /**
     * A function that executes on the ButtonMenuItem's `click` event.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html#clickFunction)
     */
    clickFunction?: ButtonMenuItemClickFunction;
    /**
     * Adds a CSS class to the menu button's DOM node.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html#iconClass)
     */
    iconClass?: string;
    /**
     * An array of individual [menu items](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html#items)
     */
    items?: ButtonMenuItemProperties[];
    /**
     * The label of the menu item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html#label)
     */
    label?: string;
    /**
     * Indicates if the menu content is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html#open)
     */
    open?: boolean;
    /**
     * Indicates whether the menu item is selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html#selected)
     */
    selected?: boolean;
    /**
     * Indicates whether a toggled state should be applied to individual menu items.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html#selectionEnabled)
     */
    selectionEnabled?: boolean;
  }

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

  interface ButtonMenuViewModel extends Accessor {
    /**
     * An array of individual [menu items](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuViewModel.html#items)
     */
    items: ButtonMenuItem[];
    /**
     * Indicates if the menu content is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuViewModel.html#open)
     */
    open: boolean;
  }

  interface ButtonMenuViewModelConstructor {
    /**
     * Provides the logic for the module:esri/widgets/ButtonMenuItemConfig widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuViewModel.html)
     */

    new (properties?: ButtonMenuViewModelProperties): ButtonMenuViewModel;
  }

  export const ButtonMenuViewModel: ButtonMenuViewModelConstructor;

  interface ButtonMenuViewModelProperties {
    /**
     * An array of individual [menu items](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuViewModel.html#items)
     */
    items?: ButtonMenuItemProperties[];
    /**
     * Indicates if the menu content is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuViewModel.html#open)
     */
    open?: boolean;
  }

  /**
   * The configurable options to customize either the feature table or [column](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-FieldColumn.html) menu via the [menuConfig](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#menuConfig) property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#ButtonMenuConfig)
   */
  export interface ButtonMenuConfig extends Object {
    /**
     * The DOM Element containing the menu.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#ButtonMenuConfig)
     */
    container?: HTMLElement;
    /**
     * Adds a CSS class to the menu button's DOM node.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#ButtonMenuConfig)
     */
    iconClass?: boolean;
    /**
     * An array of [ButtonMenuItems](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenuItem.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#ButtonMenuConfig)
     */
    items?: ButtonMenuItem[];
    /**
     * Indicates if the menu content is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#ButtonMenuConfig)
     */
    open?: boolean;
    /**
     * The associated viewModel for the [ButtonMenu](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable-Grid-support-ButtonMenu.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#ButtonMenuConfig)
     */
    viewModel?: ButtonMenuViewModel;
  }

  /**
   * The configurable options to customize either the feature table or column menu via the [menuConfig](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#menuConfig) item property.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#ButtonMenuItemConfig)
   */
  export interface ButtonMenuItemConfig extends Object {
    /**
     * Indicates whether to automatically close the menu's item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#ButtonMenuItemConfig)
     */
    autoCloseMenu?: boolean;
    /**
     * A function that executes on the ButtonMenuItem's `click` event.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#ButtonMenuItemConfig)
     */
    clickFunction?: ButtonMenuItemClickFunction;
    /**
     * Adds a CSS class to the menu button's DOM node.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#ButtonMenuItemConfig)
     */
    iconClass?: string;
    /**
     * An array of individual menu items.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#ButtonMenuItemConfig)
     */
    items?: ButtonMenuItem[];
    /**
     * The label of the menu item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#ButtonMenuItemConfig)
     */
    label?: string;
    /**
     * Indicates if the menu content is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#ButtonMenuItemConfig)
     */
    open?: boolean;
    /**
     * Indicates whether a toggled state should be applied to individual menu items.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#ButtonMenuItemConfig)
     */
    selectionEnabled?: boolean;
    /**
     * Indicates whether the menu item is selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#ButtonMenuItemConfig)
     */
    selected?: boolean;
  }

  export interface FeatureTableSelectionChangeEvent {
    added: FeatureTableSelectionChangeEventAdded[];

    removed: FeatureTableSelectionChangeEventRemoved[];
  }

  /**
   * The visible elements that are displayed within the widget.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#VisibleElements)
   */
  export interface FeatureTableVisibleElements extends Object {
    /**
     * Indicates whether to display the feature table's header information.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#VisibleElements)
     */
    header?: boolean;
    /**
     * Indicates whether to display the feature table's menu.Default value is `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#VisibleElements)
     */
    menu?: boolean;
    /**
     * Indicates whether to display the selection column in the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#VisibleElements)
     */
    selectionColumn?: boolean;
    /**
     * The menu items within the feature table menu.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#VisibleElements)
     */
    menuItems?: VisibleElementsMenuItems;
  }

  export interface FeatureTableSelectionChangeEventAdded extends Object {
    feature: Graphic;

    attachments: supportAttachmentInfo[];

    relatedRecords: Graphic[];
  }

  export interface FeatureTableSelectionChangeEventRemoved extends Object {
    feature: Graphic;

    attachments: supportAttachmentInfo[];

    relatedRecords: Graphic[];
  }

  export interface VisibleElementsMenuItems extends Object {
    /**
     * Indicates whether to display the `Clear selection` menu item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#VisibleElements)
     */
    clearSelection?: boolean;
    /**
     * Indicates whether to display the `Refresh data` menu item.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#VisibleElements)
     */
    refreshData?: boolean;
    /**
     * Indicates whether to enable toggling column visibility within the menu.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTable.html#VisibleElements)
     */
    toggleColumns?: any;
  }

  interface FeatureTemplates extends Widget {
    /**
     * When `true`, displays the template [filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#filterFunction).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#filterEnabled)
     */
    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.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#groupBy)
     */
    groupBy: string | GroupByFunction;
    /**
     * Indicates the heading level to use for the labels of grouped feature templates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#headingLevel)
     */
    headingLevel: number;
    /**
     * An array of [Featurelayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) to display within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#layers)
     */
    layers: FeatureLayer[];
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#viewModel)
     */
    viewModel: FeatureTemplatesViewModel;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#visibleElements)
     */
    visibleElements: FeatureTemplatesVisibleElements;

    on(name: "select", eventHandler: FeatureTemplatesSelectEventHandler): IHandle;
  }

  interface FeatureTemplatesConstructor {
    /**
     * The FeatureTemplates widget is part of the overall editing workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html)
     */

    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#filterEnabled)
     */
    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.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#groupBy)
     */
    groupBy?: string | GroupByFunction;
    /**
     * Indicates the heading level to use for the labels of grouped feature templates.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#headingLevel)
     */
    headingLevel?: number;
    /**
     * An array of [Featurelayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) to display within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#layers)
     */
    layers?: FeatureLayerProperties[];
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#viewModel)
     */
    viewModel?: FeatureTemplatesViewModelProperties;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#visibleElements)
     */
    visibleElements?: FeatureTemplatesVisibleElements;
  }

  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.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-FeatureTemplatesViewModel.html#groupBy)
     */
    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[];
    /**
     * An array of [Featurelayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) that are associated with the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-FeatureTemplatesViewModel.html#layers)
     */
    layers: FeatureLayer[];
    /**
     * The widget's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-FeatureTemplatesViewModel.html#state)
     */
    readonly state: "ready" | "loading" | "disabled";

    /**
     * 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)
     */
    select(item?: TemplateItem): void;

    on(name: "select", eventHandler: FeatureTemplatesViewModelSelectEventHandler): IHandle;
  }

  interface FeatureTemplatesViewModelConstructor {
    /**
     * Provides the logic for 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-FeatureTemplatesViewModel.html)
     */

    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.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-FeatureTemplatesViewModel.html#groupBy)
     */
    groupBy?: string | GroupByFunction;
    /**
     * An array of [Featurelayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) that are associated with the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates-FeatureTemplatesViewModel.html#layers)
     */
    layers?: FeatureLayerProperties[];
  }

  export interface FeatureTemplatesViewModelSelectEvent {
    item: TemplateItem;

    template: FeatureTemplate;
  }

  interface TemplateItem extends Accessor {
    /**
     * The description that is displayed for the template item.
     *
     * [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.
     *
     * [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.
     *
     * [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(): Promise<any>;
  }

  interface TemplateItemConstructor {
    /**
     * The item displayed within 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-TemplateItem.html)
     */

    new (properties?: TemplateItemProperties): TemplateItem;
  }

  export const TemplateItem: TemplateItemConstructor;

  interface TemplateItemProperties {
    /**
     * The description that is displayed for the template item.
     *
     * [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.
     *
     * [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) grouped to 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) widget indicating 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 {
    /**
     * This is a read-only support class that represents a group of items displayed within 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)
     */

    new (properties?: TemplateItemGroupProperties): TemplateItemGroup;
  }

  export const TemplateItemGroup: TemplateItemGroupConstructor;

  interface TemplateItemGroupProperties {}

  export type FilterFunction = (filterName: any) => boolean;

  export type GroupByFunction = (grouping: any) => string | any;

  export interface FeatureTemplatesSelectEvent {
    item: TemplateItem;

    template: FeatureTemplate;
  }

  /**
   * The visible elements that are displayed within the widget.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#VisibleElements)
   */
  export interface FeatureTemplatesVisibleElements extends Object {
    /**
     * Indicates whether to the filter will be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureTemplates.html#VisibleElements)
     */
    filter?: boolean;
  }

  interface FloorFilter extends Widget {
    /**
     * The currently selected facility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html#facility)
     */
    facility: string;
    /**
     * Indicates the heading level to use for the headings separating floors in buildings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html#headingLevel)
     */
    headingLevel: number;
    /**
     * The currently selected floor level.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html#level)
     */
    level: string;
    /**
     * Determines if the widget is expanded or collapsed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html#longNames)
     */
    longNames: boolean;
    /**
     * The currently selected site.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html#site)
     */
    site: 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html#viewModel)
     */
    viewModel: FloorFilterViewModel;

    /**
     * Updates the [floorFilter](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#FloorFilter) widget definition in the provided [WebMap](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html#updateWebDocument)
     */
    updateWebDocument(webmap: WebMap): void;
  }

  interface FloorFilterConstructor {
    /**
     * The FloorFilter widget simplifies visualization of GIS data for a specific floor of a building in your application.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html)
     */

    new (properties?: FloorFilterProperties): FloorFilter;
  }

  export const FloorFilter: FloorFilterConstructor;

  interface FloorFilterProperties extends WidgetProperties {
    /**
     * The currently selected facility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html#facility)
     */
    facility?: string;
    /**
     * Indicates the heading level to use for the headings separating floors in buildings.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html#headingLevel)
     */
    headingLevel?: number;
    /**
     * The currently selected floor level.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html#level)
     */
    level?: string;
    /**
     * Determines if the widget is expanded or collapsed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html#longNames)
     */
    longNames?: boolean;
    /**
     * The currently selected site.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html#site)
     */
    site?: 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html#viewModel)
     */
    viewModel?: FloorFilterViewModelProperties;
  }

  interface FloorFilterViewModel extends Accessor, GoTo {
    /**
     * The currently selected facility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter-FloorFilterViewModel.html#facility)
     */
    facility: string;
    /**
     * The currently selected level.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter-FloorFilterViewModel.html#level)
     */
    level: string;
    /**
     * Determines if the widget is expanded or collapsed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter-FloorFilterViewModel.html#longNames)
     */
    longNames: boolean;
    /**
     * The currently selected site.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter-FloorFilterViewModel.html#site)
     */
    site: 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter-FloorFilterViewModel.html#view)
     */
    view: MapView | SceneView;
  }

  interface FloorFilterViewModelConstructor {
    /**
     * Provides the logic for the [FloorFilter](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter-FloorFilterViewModel.html)
     */

    new (properties?: FloorFilterViewModelProperties): FloorFilterViewModel;
  }

  export const FloorFilterViewModel: FloorFilterViewModelConstructor;

  interface FloorFilterViewModelProperties extends GoToProperties {
    /**
     * The currently selected facility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter-FloorFilterViewModel.html#facility)
     */
    facility?: string;
    /**
     * The currently selected level.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter-FloorFilterViewModel.html#level)
     */
    level?: string;
    /**
     * Determines if the widget is expanded or collapsed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter-FloorFilterViewModel.html#longNames)
     */
    longNames?: boolean;
    /**
     * The currently selected site.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter-FloorFilterViewModel.html#site)
     */
    site?: 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter-FloorFilterViewModel.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen.html#viewModel)
     */
    viewModel: FullscreenViewModel;
  }

  interface FullscreenConstructor {
    /**
     * Provides a simple widget to present the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) or a user-defined [HTMLElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement) using the entire screen.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen.html)
     */

    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen-FullscreenViewModel.html#state)
     */
    readonly state: "active" | "ready" | "feature-unsupported" | "disabled";
    /**
     * 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 {
    /**
     * Provides the logic for the [Fullscreen](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Fullscreen-FullscreenViewModel.html)
     */

    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 & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  interface Histogram extends Widget {
    /**
     * The statistical average of the data in the histogram.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#average)
     */
    average: number;
    /**
     * Function for styling bars representing histogram bins.
     *
     * [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.
     *
     * [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.
     *
     * [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 or meaningful 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#labelFormatFunction)
     */
    labelFormatFunction: LabelFormatter;
    /**
     * Determines the orientation of the Histogram widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#layout)
     */
    layout: "vertical" | "horizontal";
    /**
     * The maximum value or bound of the entire histogram.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#min)
     */
    min: number;
    /**
     * The state of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#state)
     */
    readonly state: "ready" | "disabled";
    /**
     * The view model for the Histogram widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#viewModel)
     */
    viewModel: HistogramViewModel;
  }

  interface HistogramConstructor {
    /**
     * Renders a histogram to visualize the spread of a dataset based on [bins](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#bins) representing buckets, or sub-ranges, of data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html)
     */

    new (properties?: HistogramProperties): Histogram;

    /**
     * A convenience function used to create a Histogram widget instance from the result of the [histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-statistics-histogram.html) statistics function.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#fromHistogramResult)
     */
    fromHistogramResult(result: HistogramResult): Histogram;
  }

  export const Histogram: HistogramConstructor;

  interface HistogramProperties extends WidgetProperties {
    /**
     * The statistical average of the data in the histogram.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#average)
     */
    average?: number;
    /**
     * Function for styling bars representing histogram bins.
     *
     * [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.
     *
     * [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.
     *
     * [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 or meaningful 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#labelFormatFunction)
     */
    labelFormatFunction?: LabelFormatter;
    /**
     * Determines the orientation of the Histogram widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#layout)
     */
    layout?: "vertical" | "horizontal";
    /**
     * The maximum value or bound of the entire histogram.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html#min)
     */
    min?: number;
    /**
     * The view model for 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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#bins)
     */
    bins: Bin[];
    /**
     * A function used to format labels.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#state)
     */
    readonly state: "ready" | "disabled";
  }

  interface HistogramViewModelConstructor {
    /**
     * Provides the logic for the [Histogram](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html)
     */

    new (properties?: HistogramViewModelProperties): HistogramViewModel;
  }

  export const HistogramViewModel: HistogramViewModelConstructor;

  interface HistogramViewModelProperties {
    /**
     * The statistical average of the data in the histogram.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Histogram-HistogramViewModel.html#bins)
     */
    bins?: Bin[];
    /**
     * A function used to format labels.
     *
     * [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.
     *
     * [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.
     *
     * [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.
   *
   * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#average)
     */
    average: number;
    /**
     * Function for styling bars representing histogram bins.
     *
     * [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.
     *
     * [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.
     *
     * [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 or meaningful 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#excludedBarColor)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#includedBarColor)
     */
    includedBarColor: Color;
    /**
     * A function used to format labels.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#precision)
     */
    precision: number;
    /**
     * Indicates how the histogram bins should be rendered as the user slides the thumbs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#rangeType)
     */
    rangeType:
      | "equal"
      | "not-equal"
      | "less-than"
      | "greater-than"
      | "at-most"
      | "at-least"
      | "between"
      | "not-between";
    /**
     * Indicates the standard deviation of the dataset.
     *
     * [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 histogram from the [average].
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#standardDeviationCount)
     */
    standardDeviationCount: number;
    /**
     * An array of either one or two numbers representing thumb positions on the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#values)
     */
    values: number[];
    /**
     * The view model for the 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#generateWhereClause)
     */
    generateWhereClause(field: string): string;

    on(name: "max-change", eventHandler: HistogramRangeSliderMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: HistogramRangeSliderMinChangeEventHandler): IHandle;

    on(name: "segment-drag", eventHandler: HistogramRangeSliderSegmentDragEventHandler): IHandle;

    on(name: "thumb-change", eventHandler: HistogramRangeSliderThumbChangeEventHandler): IHandle;

    on(name: "thumb-drag", eventHandler: HistogramRangeSliderThumbDragEventHandler): IHandle;
  }

  interface HistogramRangeSliderConstructor {
    /**
     * A slider widget that can be used for filtering data or gathering numeric input from a user for a range of data.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html)
     */

    new (properties?: HistogramRangeSliderProperties): HistogramRangeSlider;
  }

  export const HistogramRangeSlider: HistogramRangeSliderConstructor;

  interface HistogramRangeSliderProperties extends WidgetProperties {
    /**
     * The statistical average of the data in the histogram.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#average)
     */
    average?: number;
    /**
     * Function for styling bars representing histogram bins.
     *
     * [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.
     *
     * [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.
     *
     * [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 or meaningful 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#excludedBarColor)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#includedBarColor)
     */
    includedBarColor?: Color | number[] | string;
    /**
     * A function used to format labels.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#precision)
     */
    precision?: number;
    /**
     * Indicates how the histogram bins should be rendered as the user slides the thumbs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#rangeType)
     */
    rangeType?:
      | "equal"
      | "not-equal"
      | "less-than"
      | "greater-than"
      | "at-most"
      | "at-least"
      | "between"
      | "not-between";
    /**
     * Indicates the standard deviation of the dataset.
     *
     * [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 histogram from the [average].
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#standardDeviationCount)
     */
    standardDeviationCount?: number;
    /**
     * An array of either one or two numbers representing thumb positions on the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html#values)
     */
    values?: number[];
    /**
     * The view model for the 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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#rangeType)
     */
    rangeType:
      | "equal"
      | "not-equal"
      | "less-than"
      | "greater-than"
      | "at-most"
      | "at-least"
      | "between"
      | "not-between";
    /**
     * Indicates the standard deviation of the dataset above 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#generateWhereClause)
     */
    generateWhereClause(field: string): string;

    on(name: "max-change", eventHandler: HistogramRangeSliderViewModelMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: HistogramRangeSliderViewModelMinChangeEventHandler): IHandle;
  }

  interface HistogramRangeSliderViewModelConstructor {
    /**
     * Provides the logic for the [HistogramRangeSlider](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html)
     */

    new (properties?: HistogramRangeSliderViewModelProperties): HistogramRangeSliderViewModel;
  }

  export const HistogramRangeSliderViewModel: HistogramRangeSliderViewModelConstructor;

  interface HistogramRangeSliderViewModelProperties extends SliderViewModelProperties {
    /**
     * The statistical average of the data in the histogram.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-HistogramRangeSlider-HistogramRangeSliderViewModel.html#rangeType)
     */
    rangeType?:
      | "equal"
      | "not-equal"
      | "less-than"
      | "greater-than"
      | "at-most"
      | "at-least"
      | "between"
      | "not-between";
    /**
     * Indicates the standard deviation of the dataset above 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: "max";

    value: number;
  }

  export interface HistogramRangeSliderViewModelMinChangeEvent {
    oldValue: number;

    type: "min";

    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;
  }

  export interface HistogramRangeSliderMaxChangeEvent {
    oldValue: number;

    type: "max-change";

    value: number;
  }

  export interface HistogramRangeSliderMinChangeEvent {
    oldValue: number;

    type: "min-change";

    value: number;
  }

  export interface HistogramRangeSliderSegmentDragEvent {
    index: number;

    state: "start" | "drag";

    thumbIndices: number[];

    type: "segment-drag";
  }

  export interface HistogramRangeSliderThumbChangeEvent {
    index: number;

    oldValue: number;

    type: "thumb-change";

    value: number;
  }

  export interface HistogramRangeSliderThumbDragEvent {
    index: number;

    state: "start" | "drag";

    type: "thumb-drag";

    value: 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this 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 when going home.
     *
     * [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 process of 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 the value 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;

    on(name: "go", eventHandler: HomeGoEventHandler): IHandle;
  }

  interface HomeConstructor {
    /**
     * Provides a simple widget that switches the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) to its initial [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) or a previously defined [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)
     */

    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this 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 when going home.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home-HomeViewModel.html#state)
     */
    readonly state: "disabled" | "ready" | "going-home";
    /**
     * 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 when going home.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home-HomeViewModel.html#viewpoint)
     */
    viewpoint: Viewpoint;

    /**
     * This function provides the ability to interrupt and cancel the process of 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 the value 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;

    on(name: "go", eventHandler: HomeViewModelGoEventHandler): IHandle;
  }

  interface HomeViewModelConstructor {
    /**
     * Provides the logic for the [Home](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home.html) widget that animates the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) to its initial [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html) or a previously defined [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)
     */

    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 & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The [Viewpoint](https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html), or point of view, to zoom to when going home.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Home-HomeViewModel.html#viewpoint)
     */
    viewpoint?: ViewpointProperties;
  }

  export interface HomeViewModelGoEvent {}

  export interface HomeGoEvent {}

  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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#listItemCreatedFunction)
     */
    listItemCreatedFunction: LayerListListItemCreatedHandler;
    /**
     * Indicates whether more than one list item may be selected by the user at a single time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#multipleSelectionEnabled)
     */
    multipleSelectionEnabled: boolean;
    /**
     * A collection of [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html)s representing operational layers.
     *
     * [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 layers selected by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#selectedItems)
     */
    selectedItems: Collection<ListItem>;
    /**
     * Indicates whether list items may be selected by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#selectionEnabled)
     */
    selectionEnabled: boolean;
    /**
     * Option for enabling status indicators, which indicate whether or not each layer is loading resources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#statusIndicatorsVisible)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#viewModel)
     */
    viewModel: LayerListViewModel;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#visibleElements)
     */
    visibleElements: LayerListVisibleElements;

    /**
     * Triggers the [trigger-action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#event-trigger-action) event and executes the 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)
     */
    triggerAction(action: ActionButton | ActionToggle, item: ListItem): void;

    on(name: "trigger-action", eventHandler: LayerListTriggerActionEventHandler): IHandle;
  }

  interface LayerListConstructor {
    /**
     * The LayerList widget provides a way to display a list of layers, and switch on/off their visibility.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html)
     */

    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#listItemCreatedFunction)
     */
    listItemCreatedFunction?: LayerListListItemCreatedHandler;
    /**
     * Indicates whether more than one list item may be selected by the user at a single time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#multipleSelectionEnabled)
     */
    multipleSelectionEnabled?: boolean;
    /**
     * A collection of selected [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html)s representing operational layers selected by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#selectedItems)
     */
    selectedItems?: CollectionProperties<ListItemProperties>;
    /**
     * Indicates whether list items may be selected by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#selectionEnabled)
     */
    selectionEnabled?: boolean;
    /**
     * Option for enabling status indicators, which indicate whether or not each layer is loading resources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#statusIndicatorsVisible)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#viewModel)
     */
    viewModel?: LayerListViewModelProperties;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#visibleElements)
     */
    visibleElements?: LayerListVisibleElements;
  }

  interface LayerListViewModel extends Accessor {
    /**
     * Specifies a function that accesses each [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-LayerListViewModel.html#listItemCreatedFunction)
     */
    listItemCreatedFunction: LayerListListItemCreatedHandler;
    /**
     * A collection of [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html)s representing operational layers.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-LayerListViewModel.html#state)
     */
    readonly state: "loading" | "ready" | "disabled";
    /**
     * 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;

    /**
     * Moves a list item from one position to another in the LayerList widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-LayerListViewModel.html#moveListItem)
     */
    moveListItem(targetItem: ListItem, fromParentItem: ListItem, toParentItem: ListItem, newIndex: number): void;
    /**
     * Triggers the [trigger-action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-LayerListViewModel.html#event-trigger-action) event and executes the 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)
     */
    triggerAction(action: ActionButton | ActionToggle, item: ListItem): void;

    on(name: "trigger-action", eventHandler: LayerListViewModelTriggerActionEventHandler): IHandle;
  }

  interface LayerListViewModelConstructor {
    /**
     * Provides the logic for the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-LayerListViewModel.html)
     */

    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-LayerListViewModel.html#listItemCreatedFunction)
     */
    listItemCreatedFunction?: LayerListListItemCreatedHandler;
    /**
     * 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 & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  export interface LayerListViewModelTriggerActionEvent {
    action: ActionButton | ActionToggle;

    item: ListItem;
  }

  interface ListItem extends Accessor {
    /**
     * Whether the actions panel is open in the LayerList.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#actionsOpen)
     */
    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>;
    /**
     * Indicates if the children of a list item (or sublayers in a GroupLayer) can be sorted or moved/reordered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#childrenSortable)
     */
    childrenSortable: boolean;
    /**
     * 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)
     */
    layer: Layer;
    /**
     * The [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) displaying data for the associated [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)
     */
    open: boolean;
    /**
     * Allows you to display custom content for each ListItem in the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widget.
     *
     * [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)
     */
    parent: ListItem;
    /**
     * Indicates if the list item (or layer in the map) can be sorted or moved/reordered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#sortable)
     */
    sortable: boolean;
    /**
     * 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)
     */
    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)
     */
    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)
     */
    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 {
    /**
     * The ListItem class represents one of the [operationalItems](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-LayerListViewModel.html#operationalItems) in the [LayerListViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-LayerListViewModel.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html)
     */

    new (properties?: ListItemProperties): ListItem;
  }

  export const ListItem: ListItemConstructor;

  interface ListItemProperties {
    /**
     * Whether the actions panel is open in the LayerList.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#actionsOpen)
     */
    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?:
      | CollectionProperties<
          CollectionProperties<
            (ActionButtonProperties & { type: "button" }) | (ActionToggleProperties & { type: "toggle" })
          >
        >
      | any[][];
    /**
     * 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?: CollectionProperties<ListItemProperties>;
    /**
     * Indicates if the children of a list item (or sublayers in a GroupLayer) can be sorted or moved/reordered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#childrenSortable)
     */
    childrenSortable?: boolean;
    /**
     * The layer associated with the triggered action.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#layer)
     */
    layer?: LayerProperties;
    /**
     * Whether the layer is open in the LayerList.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#open)
     */
    open?: boolean;
    /**
     * Allows you to display custom content for each ListItem in the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widget.
     *
     * [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)
     */
    parent?: ListItemProperties;
    /**
     * Indicates if the list item (or layer in the map) can be sorted or moved/reordered.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#sortable)
     */
    sortable?: boolean;
    /**
     * The title of the layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#title)
     */
    title?: string;
    /**
     * 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?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * Indicates if the ListItem is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html#visible)
     */
    visible?: boolean;
  }

  interface ListItemPanel {
    /**
     * Adds a CSS class used to style a node that represents the panel.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItemPanel.html#className)
     */
    className: string;
    /**
     * The content displayed in the ListItem panel.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItemPanel.html#open)
     */
    open: boolean;
    /**
     * The title of the panel.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItemPanel.html#visible)
     */
    visible: boolean;
  }

  interface ListItemPanelConstructor {
    /**
     * This class allows you to display custom content for each [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItem.html) in the [LayerList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList-ListItemPanel.html)
     */

    new (): ListItemPanel;
  }

  export const ListItemPanel: ListItemPanelConstructor;

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

  export interface LayerListTriggerActionEvent {
    action: ActionButton | ActionToggle;

    item: ListItem;
  }

  /**
   * The visible elements that are displayed within the widget.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#VisibleElements)
   */
  export interface LayerListVisibleElements extends Object {
    /**
     * Indicates whether the status indicators will be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LayerList.html#VisibleElements)
     */
    statusIndicators?: boolean;
  }

  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 to display data in the legend.
     *
     * [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)
     */
    basemapLegendVisible: boolean;
    /**
     * Indicates the heading level to use for the legend title.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#headingLevel)
     */
    headingLevel: number;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#layerInfos)
     */
    layerInfos: LegendLayerInfos[];
    /**
     * Determines whether to respect the properties of the layers in the map that control the legend's visibility (`minScale`, `maxScale`, `legendEnabled`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#respectLayerVisibility)
     */
    respectLayerVisibility: boolean;
    /**
     * Indicates the style of the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#style)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#viewModel)
     */
    viewModel: LegendViewModel;
  }

  interface LegendConstructor {
    /**
     * The Legend widget displays labels and symbols for layers in a map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html)
     */

    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 to display data in the legend.
     *
     * [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)
     */
    basemapLegendVisible?: boolean;
    /**
     * Indicates the heading level to use for the legend title.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#headingLevel)
     */
    headingLevel?: number;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#layerInfos)
     */
    layerInfos?: LegendLayerInfos[];
    /**
     * Determines whether to respect the properties of the layers in the map that control the legend's visibility (`minScale`, `maxScale`, `legendEnabled`).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#respectLayerVisibility)
     */
    respectLayerVisibility?: boolean;
    /**
     * Indicates the style of the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#style)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this 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 to display data in the legend.
     *
     * [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)
     */
    basemapLegendVisible: boolean;
    /**
     * Specifies a subset of the layers in the map to display in the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-LegendViewModel.html#layerInfos)
     */
    layerInfos: LegendViewModelLayerInfos[];
    /**
     * The view model's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-LegendViewModel.html#state)
     */
    readonly state: "ready" | "disabled";
    /**
     * 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 {
    /**
     * Provides the logic for the [Legend](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html) widget, which displays a label and symbol for interpreting the [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html) of each layer in a map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-LegendViewModel.html)
     */

    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 to display data in the legend.
     *
     * [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)
     */
    basemapLegendVisible?: boolean;
    /**
     * Specifies a subset of the layers in the map to display in the legend.
     *
     * [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 & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  export interface LegendViewModelLayerInfos extends Object {
    /**
     * Specify a title for the layer.
     *
     * [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.
     *
     * [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.
     *
     * [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 layerView represented by the ActiveLayerInfo object's layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#layerView)
     */
    layerView: LayerView;
    /**
     * The legendElements is constructed using the layer [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#legendElements)
     */
    legendElements: LegendElement[];
    /**
     * The opacity of the layer or parent element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#opacity)
     */
    readonly opacity: number;
    /**
     * The ActiveLayerInfo of the parent module:esri/layers/support/ISublayer 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#title)
     */
    title: string;
    /**
     * The version of the ActiveLayerInfo.
     *
     * [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 {
    /**
     * ActiveLayerInfo is added to or removed from the collection of activeLayerInfos as layers become visible or invisible in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html)
     */

    new (properties?: ActiveLayerInfoProperties): ActiveLayerInfo;
  }

  export const ActiveLayerInfo: ActiveLayerInfoConstructor;

  interface ActiveLayerInfoProperties {
    /**
     * A collection of child activeLayerInfos.
     *
     * [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.
     *
     * [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 layerView represented by the ActiveLayerInfo object's layer.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#layerView)
     */
    layerView?: LayerViewProperties;
    /**
     * The legendElements is constructed using the layer [Renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-Renderer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#legendElements)
     */
    legendElements?: (
      | SymbolTableElement
      | ColorRampElement
      | OpacityRampElement
      | SizeRampElement
      | HeatmapRampElement
      | RelationshipRampElement
    )[];
    /**
     * The ActiveLayerInfo of the parent module:esri/layers/support/ISublayer 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend-support-ActiveLayerInfo.html#title)
     */
    title?: string;
    /**
     * The version of the ActiveLayerInfo.
     *
     * [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).
   *
   * [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 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.
   *
   * [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.
     *
     * [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).
   *
   * [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.
   *
   * [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.
     *
     * [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.
     *
     * [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`.
     *
     * [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.
     *
     * [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.
   *
   * [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).
   *
   * [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 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.
   *
   * [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).
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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.
   *
   * [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`.
     *
     * [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`.
     *
     * [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`).
     *
     * [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`).
     *
     * [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).
   *
   * [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.
     *
     * [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.
     *
     * [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).
     *
     * [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.
     *
     * [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.
     *
     * [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).
   *
   * [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.
   *
   * [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).
   *
   * [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.
     *
     * [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.
     *
     * [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.
     *
     * [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;
    /**
     * List of sublayer ids that will not be displayed in the legend even if they are visible in the map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#layerInfos)
     */
    hideLayers: number[];
  }

  export interface LegendStyle extends Object {
    /**
     * Specifies the style of the legend.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#style)
     */
    type: "classic" | "card";
    /**
     * When a `card` type is specified, you can specify one of the following layout options.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Legend.html#style)
     */
    layout?: "auto" | "side-by-side" | "stack";
  }

  interface LineOfSight extends Widget {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight.html#iconClass)
     */
    iconClass: string;
    /**
     * A reference to 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-LineOfSight.html#view)
     */
    view: SceneView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight.html#viewModel)
     */
    viewModel: LineOfSightViewModel;
  }

  interface LineOfSightConstructor {
    /**
     * The LineOfSight widget is a 3D analysis tool that allows you to perform visibility analysis in 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-widgets-LineOfSight.html)
     */

    new (properties?: LineOfSightProperties): LineOfSight;
  }

  export const LineOfSight: LineOfSightConstructor;

  interface LineOfSightProperties extends WidgetProperties {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight.html#iconClass)
     */
    iconClass?: string;
    /**
     * A reference to 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-LineOfSight.html#view)
     */
    view?: SceneViewProperties;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight.html#viewModel)
     */
    viewModel?: LineOfSightViewModelProperties;
  }

  interface LineOfSightTarget extends Accessor {
    /**
     * The first [Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) intersected by the line of sight.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight-LineOfSightTarget.html#intersectedGraphic)
     */
    readonly intersectedGraphic: Graphic;
    /**
     * A [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) representing the location where the line of sight first intersects the ground or 3D objects in the scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight-LineOfSightTarget.html#intersectedLocation)
     */
    readonly intersectedLocation: Point;
    /**
     * A [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) representing the location of the target.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight-LineOfSightTarget.html#location)
     */
    location: Point;
    /**
     * Whether the target is visible from the observer or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight-LineOfSightTarget.html#visible)
     */
    readonly visible: boolean;
  }

  interface LineOfSightTargetConstructor {
    /**
     * This class represents a target point for a [LineOfSight](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight.html) analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight-LineOfSightTarget.html)
     */

    new (properties?: LineOfSightTargetProperties): LineOfSightTarget;
  }

  export const LineOfSightTarget: LineOfSightTargetConstructor;

  interface LineOfSightTargetProperties {
    /**
     * A [Point](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Point.html) representing the location of the target.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight-LineOfSightTarget.html#location)
     */
    location?: PointProperties;
  }

  interface LineOfSightViewModel extends Accessor {
    /**
     * The observer's viewpoint from which lines of sight will be drawn towards the targets.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight-LineOfSightViewModel.html#observer)
     */
    observer: Point;
    /**
     * The view model's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight-LineOfSightViewModel.html#state)
     */
    readonly state: "disabled" | "ready" | "creating" | "created";
    /**
     * A collection of [LineOfSightTarget](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight-LineOfSightTarget.html) containing the target location and the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight-LineOfSightViewModel.html#targets)
     */
    targets: Collection<LineOfSightTarget>;
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight-LineOfSightViewModel.html#view)
     */
    view: SceneView;

    /**
     * Clears the current analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight-LineOfSightViewModel.html#clear)
     */
    clear(): void;
    /**
     * If stopped, this method continues the line of sight analysis and the user can add more targets.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight-LineOfSightViewModel.html#continue)
     */
    continue(): void;
    /**
     * Starts a new line of sight analysis.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight-LineOfSightViewModel.html#start)
     */
    start(): void;
    /**
     * Stops the current line of sight analysis, keeping the results in the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight-LineOfSightViewModel.html#stop)
     */
    stop(): void;
  }

  interface LineOfSightViewModelConstructor {
    /**
     * Provides the logic for the [LineOfSight](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight-LineOfSightViewModel.html)
     */

    new (properties?: LineOfSightViewModelProperties): LineOfSightViewModel;
  }

  export const LineOfSightViewModel: LineOfSightViewModelConstructor;

  interface LineOfSightViewModelProperties {
    /**
     * The observer's viewpoint from which lines of sight will be drawn towards the targets.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight-LineOfSightViewModel.html#observer)
     */
    observer?: PointProperties;
    /**
     * A collection of [LineOfSightTarget](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight-LineOfSightTarget.html) containing the target location and the analysis results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight-LineOfSightViewModel.html#targets)
     */
    targets?: CollectionProperties<LineOfSightTargetProperties>;
    /**
     * The view from which the widget will operate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-LineOfSight-LineOfSightViewModel.html#view)
     */
    view?: SceneViewProperties;
  }

  interface Locate extends Widget, GoTo {
    /**
     * The HTML5 Geolocation Position options for locating.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#geolocationOptions)
     */
    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)
     */
    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 whether to display the [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) of the result graphic from the [locate()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate-LocateViewModel.html#locate) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#popupEnabled)
     */
    popupEnabled: boolean;
    /**
     * Indicates the scale to set on the view when navigating to the position of the geolocated result once a location is returned from the [track](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#event-track) event.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#scale)
     */
    scale: number;
    /**
     * Indicates whether the widget will automatically [rotate to user's direction](https://www.w3.org/TR/geolocation-API/#coordinates_interface).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#useHeadingEnabled)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this 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 of programmatically 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(): Promise<any>;

    on(name: "locate", eventHandler: LocateLocateEventHandler): IHandle;

    on(name: "locate-error", eventHandler: LocateLocateErrorEventHandler): IHandle;
  }

  interface LocateConstructor {
    /**
     * Provides a simple widget that animates the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) to the user's current location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html)
     */

    new (properties?: LocateProperties): Locate;
  }

  export const Locate: LocateConstructor;

  interface LocateProperties extends WidgetProperties, GoToProperties {
    /**
     * The HTML5 Geolocation Position options for locating.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#geolocationOptions)
     */
    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)
     */
    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 whether to display the [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) of the result graphic from the [locate()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate-LocateViewModel.html#locate) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#popupEnabled)
     */
    popupEnabled?: boolean;
    /**
     * Indicates the scale to set on the view when navigating to the position of the geolocated result once a location is returned from the [track](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#event-track) event.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#scale)
     */
    scale?: number;
    /**
     * Indicates whether the widget will automatically [rotate to user's direction](https://www.w3.org/TR/geolocation-API/#coordinates_interface).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#useHeadingEnabled)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this 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 {
    /**
     * Indicates whether to display the [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) of the result graphic from the [locate()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate-LocateViewModel.html#locate) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate-LocateViewModel.html#popupEnabled)
     */
    popupEnabled: boolean;
    /**
     * The current state of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate-LocateViewModel.html#state)
     */
    readonly state: "disabled" | "ready" | "locating";

    /**
     * This function provides the ability to interrupt and cancel the process of programmatically 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(): Promise<any>;

    on(name: "locate-error", eventHandler: LocateViewModelLocateErrorEventHandler): IHandle;
  }

  interface LocateViewModelConstructor {
    /**
     * Provides the logic for the [Locate](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate.html) widget, which animates the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) to the user's current location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate-LocateViewModel.html)
     */

    new (properties?: LocateViewModelProperties): LocateViewModel;
  }

  export const LocateViewModel: LocateViewModelConstructor;

  interface LocateViewModelProperties extends GeolocationPositioningProperties, GoToProperties {
    /**
     * Indicates whether to display the [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) of the result graphic from the [locate()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate-LocateViewModel.html#locate) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Locate-LocateViewModel.html#popupEnabled)
     */
    popupEnabled?: boolean;
  }

  export interface LocateViewModelLocateErrorEvent {
    error: Error;
  }

  export interface LocateLocateErrorEvent {
    error: Error;
  }

  export interface LocateLocateEvent {
    position: any;
  }

  interface Measurement extends Widget {
    /**
     * Specifies the current measurement tool to display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement.html#activeTool)
     */
    activeTool: "area" | "distance" | "direct-line";
    /**
     * The measurement widget that is currently being used.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement.html#activeWidget)
     */
    readonly activeWidget: AreaMeasurement2D | AreaMeasurement3D | DirectLineMeasurement3D | DistanceMeasurement2D;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the area values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement.html#areaUnit)
     */
    areaUnit: SystemOrAreaUnit;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement.html#iconClass)
     */
    readonly iconClass: string;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement.html#linearUnit)
     */
    linearUnit: SystemOrLengthUnit;
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement.html#viewModel)
     */
    viewModel: MeasurementViewModel;

    /**
     * Removes all measurement widgets and associated graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement.html#clear)
     */
    clear(): void;
    /**
     * Starts a new measurement for the active measurement widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement.html#startMeasurement)
     */
    startMeasurement(): void;
  }

  interface MeasurementConstructor {
    /**
     * The Measurement widget groups and manages multiple measurement tools and allows you to easily switch between them using the [activeTool](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement.html#activeTool) property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement.html)
     */

    new (properties?: MeasurementProperties): Measurement;
  }

  export const Measurement: MeasurementConstructor;

  interface MeasurementProperties extends WidgetProperties {
    /**
     * Specifies the current measurement tool to display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement.html#activeTool)
     */
    activeTool?: "area" | "distance" | "direct-line";
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the area values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement.html#areaUnit)
     */
    areaUnit?:
      | "imperial"
      | "metric"
      | "square-millimeters"
      | "square-centimeters"
      | "square-decimeters"
      | "square-meters"
      | "square-kilometers"
      | "square-inches"
      | "square-feet"
      | "square-yards"
      | "square-miles"
      | "square-us-feet"
      | "acres"
      | "ares"
      | "hectares";
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement.html#linearUnit)
     */
    linearUnit?:
      | "imperial"
      | "metric"
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet";
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement.html#viewModel)
     */
    viewModel?: MeasurementViewModelProperties;
  }

  interface MeasurementViewModel extends Accessor {
    /**
     * Specifies the current measurement tool to display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement-MeasurementViewModel.html#activeTool)
     */
    activeTool: "area" | "distance" | "direct-line";
    /**
     * View model of the active measurement widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement-MeasurementViewModel.html#activeViewModel)
     */
    activeViewModel:
      | AreaMeasurement2DViewModel
      | AreaMeasurement3DViewModel
      | DirectLineMeasurement3DViewModel
      | DistanceMeasurement2DViewModel;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the area values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement-MeasurementViewModel.html#areaUnit)
     */
    areaUnit: SystemOrAreaUnit;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement-MeasurementViewModel.html#linearUnit)
     */
    linearUnit: SystemOrLengthUnit;
    /**
     * The ViewModel's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement-MeasurementViewModel.html#state)
     */
    readonly state: "disabled" | "ready" | "measuring" | "measured";
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement-MeasurementViewModel.html#view)
     */
    view: MapView | SceneView;
  }

  interface MeasurementViewModelConstructor {
    /**
     * Provides the logic for the [Measurement](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement-MeasurementViewModel.html)
     */

    new (properties?: MeasurementViewModelProperties): MeasurementViewModel;
  }

  export const MeasurementViewModel: MeasurementViewModelConstructor;

  interface MeasurementViewModelProperties {
    /**
     * Specifies the current measurement tool to display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement-MeasurementViewModel.html#activeTool)
     */
    activeTool?: "area" | "distance" | "direct-line";
    /**
     * View model of the active measurement widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement-MeasurementViewModel.html#activeViewModel)
     */
    activeViewModel?:
      | AreaMeasurement2DViewModel
      | AreaMeasurement3DViewModelProperties
      | DirectLineMeasurement3DViewModelProperties
      | DistanceMeasurement2DViewModelProperties;
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the area values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement-MeasurementViewModel.html#areaUnit)
     */
    areaUnit?:
      | "imperial"
      | "metric"
      | "square-millimeters"
      | "square-centimeters"
      | "square-decimeters"
      | "square-meters"
      | "square-kilometers"
      | "square-inches"
      | "square-feet"
      | "square-yards"
      | "square-miles"
      | "square-us-feet"
      | "acres"
      | "ares"
      | "hectares";
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the distance values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement-MeasurementViewModel.html#linearUnit)
     */
    linearUnit?:
      | "imperial"
      | "metric"
      | "millimeters"
      | "centimeters"
      | "decimeters"
      | "meters"
      | "kilometers"
      | "inches"
      | "feet"
      | "yards"
      | "miles"
      | "nautical-miles"
      | "us-feet";
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement-MeasurementViewModel.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  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`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle.html#layout)
     */
    layout: "vertical" | "horizontal";
    /**
     * A reference to the SceneView.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle.html#view)
     */
    view: SceneView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle.html#viewModel)
     */
    viewModel: NavigationToggleViewModel;

    /**
     * Toggles the navigation mode of the [view](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle.html#view) from `pan` to `rotate` or vice versa.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle.html#toggle)
     */
    toggle(): void;
  }

  interface NavigationToggleConstructor {
    /**
     * Provides two simple buttons for toggling the [navigation mode](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle-NavigationToggleViewModel.html#navigationMode) of 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-widgets-NavigationToggle.html)
     */

    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`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle.html#layout)
     */
    layout?: "vertical" | "horizontal";
    /**
     * A reference to the SceneView.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle.html#view)
     */
    view?: SceneViewProperties;
    /**
     * The view model for this 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle-NavigationToggleViewModel.html#navigationMode)
     */
    navigationMode: "pan" | "rotate";
    /**
     * The state of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle-NavigationToggleViewModel.html#state)
     */
    readonly state: "disabled" | "ready";
    /**
     * 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` or vice versa.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle-NavigationToggleViewModel.html#toggle)
     */
    toggle(): void;
  }

  interface NavigationToggleViewModelConstructor {
    /**
     * Provides the logic for the [NavigationToggle](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle.html) widget, which provides two simple buttons for toggling the [navigation mode](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle-NavigationToggleViewModel.html#navigationMode) of 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-widgets-NavigationToggle-NavigationToggleViewModel.html)
     */

    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-NavigationToggle-NavigationToggleViewModel.html#navigationMode)
     */
    navigationMode?: "pan" | "rotate";
    /**
     * 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 icon or image symbolizing them in the popup.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#alignment)
     */
    alignment: "auto" | "top-center" | "top-right" | "bottom-left" | "bottom-center" | "bottom-right" | 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)
     */
    autoCloseEnabled: boolean;
    /**
     * This property indicates to the `Popup` that it needs to allow or disallow the click event propagation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#autoOpenEnabled)
     */
    autoOpenEnabled: boolean;
    /**
     * Indicates whether the popup displays its content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#collapsed)
     */
    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)
     */
    collapseEnabled: boolean;
    /**
     * The content of the popup.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#currentDockPosition)
     */
    readonly currentDockPosition:
      | "auto"
      | "top-center"
      | "top-right"
      | "top-left"
      | "bottom-left"
      | "bottom-center"
      | "bottom-right";
    /**
     * Enables automatic creation of a popup template for layers that have popups enabled but no popupTemplate defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled)
     */
    defaultPopupTemplateEnabled: boolean;
    /**
     * Indicates whether the placement of the popup is docked to the side of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#dockEnabled)
     */
    dockEnabled: boolean;
    /**
     * Docking the popup allows for a better user experience, particularly when opening popups in apps on mobile devices.
     *
     * [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)
     */
    readonly featureCount: number;
    /**
     * When enabled, the popup displays a list of all available [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#features) (using each feature's popup template title) rather than displaying the popup template of the first selected feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#featureMenuOpen)
     */
    featureMenuOpen: boolean;
    /**
     * Shows pagination for the popup if available.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#features)
     */
    features: Graphic[];
    /**
     * Indicates the heading level to use for 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#headingLevel)
     */
    headingLevel: number;
    /**
     * 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)
     */
    highlightEnabled: boolean;
    /**
     * Point used to position the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#location)
     */
    location: Point;
    /**
     * Defines the maximum icons displayed at one time in the action area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#maxInlineActions)
     */
    maxInlineActions: number | any;
    /**
     * An array of pending Promises that have not yet been fulfilled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#promises)
     */
    promises: Promise<any>[];
    /**
     * The selected feature accessed by the popup.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#selectedFeatureIndex)
     */
    selectedFeatureIndex: number;
    /**
     * Returns a reference to the current [Feature](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Feature.html) that the Popup is using.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#selectedFeatureWidget)
     */
    readonly selectedFeatureWidget: Feature;
    /**
     * Indicates whether to display a spinner at the popup location prior to its display 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.
     *
     * [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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#viewModel)
     */
    viewModel: PopupViewModel;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#visibleElements)
     */
    visibleElements: PopupVisibleElements;

    /**
     * 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`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#close)
     */
    close(): void;
    /**
     * Use this method to return feature(s) at a given screen location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#fetchFeatures)
     */
    fetchFeatures(
      screenPoint: PopupFetchFeaturesScreenPoint,
      options?: FetchFeaturesOptions
    ): Promise<FetchPopupFeaturesResult>;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#open)
     */
    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;
    /**
     * Positions the popup on the view.
     *
     * [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)
     */
    triggerAction(actionIndex: number): void;

    on(name: "trigger-action", eventHandler: PopupTriggerActionEventHandler): IHandle;
  }

  interface PopupConstructor {
    /**
     * The popup widget allows users to view content from feature attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html)
     */

    new (properties?: PopupProperties): Popup;
  }

  export const Popup: PopupConstructor;

  interface PopupProperties extends WidgetProperties, GoToProperties {
    /**
     * Defines actions that may be executed by clicking the icon or image symbolizing them in the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#actions)
     */
    actions?: CollectionProperties<
      (ActionButtonProperties & { type: "button" }) | (ActionToggleProperties & { type: "toggle" })
    >;
    /**
     * Position of the popup in relation to the selected feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#alignment)
     */
    alignment?: "auto" | "top-center" | "top-right" | "bottom-left" | "bottom-center" | "bottom-right" | 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)
     */
    autoCloseEnabled?: boolean;
    /**
     * This property indicates to the `Popup` that it needs to allow or disallow the click event propagation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#autoOpenEnabled)
     */
    autoOpenEnabled?: boolean;
    /**
     * Indicates whether the popup displays its content.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#collapsed)
     */
    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)
     */
    collapseEnabled?: boolean;
    /**
     * The content of the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#content)
     */
    content?: string | HTMLElement | WidgetProperties;
    /**
     * Enables automatic creation of a popup template for layers that have popups enabled but no popupTemplate defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#defaultPopupTemplateEnabled)
     */
    defaultPopupTemplateEnabled?: boolean;
    /**
     * Indicates whether the placement of the popup is docked to the side of the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#dockEnabled)
     */
    dockEnabled?: boolean;
    /**
     * Docking the popup allows for a better user experience, particularly when opening popups in apps on mobile devices.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#dockOptions)
     */
    dockOptions?: PopupDockOptions;
    /**
     * When enabled, the popup displays a list of all available [features](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#features) (using each feature's popup template title) rather than displaying the popup template of the first selected feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#featureMenuOpen)
     */
    featureMenuOpen?: boolean;
    /**
     * Shows pagination for the popup if available.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#features)
     */
    features?: GraphicProperties[];
    /**
     * Indicates the heading level to use for 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#headingLevel)
     */
    headingLevel?: number;
    /**
     * 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)
     */
    highlightEnabled?: boolean;
    /**
     * Point used to position the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#location)
     */
    location?: PointProperties;
    /**
     * Defines the maximum icons displayed at one time in the action area.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#maxInlineActions)
     */
    maxInlineActions?: number | any;
    /**
     * An array of pending Promises that have not yet been fulfilled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#promises)
     */
    promises?: Promise<any>[];
    /**
     * Index of the feature that is [selected](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#selectedFeature).
     *
     * [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 its display 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.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * This is a class that contains all the logic (properties and methods) that controls this widget's behavior.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#viewModel)
     */
    viewModel?: PopupViewModelProperties;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#visibleElements)
     */
    visibleElements?: PopupVisibleElements;
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#actions)
     */
    actions: Collection<ActionButton | ActionToggle>;
    /**
     * Indicates if the Popup is active when it is visible and is not [waiting for results](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#waitingForResult).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#active)
     */
    readonly active: boolean;
    /**
     * 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)
     */
    autoCloseEnabled: boolean;
    /**
     * This property indicates to the `Popup` that it needs to allow or disallow the click event propagation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#autoOpenEnabled)
     */
    autoOpenEnabled: boolean;
    /**
     * The content of the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#content)
     */
    content: string | HTMLElement | Widget;
    /**
     * A read-only property that specifies a [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of action [buttons](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionButton.html) and/or [toggles](https://developers.arcgis.com/javascript/latest/api-reference/esri-support-actions-ActionToggle.html) within the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#defaultActions)
     */
    readonly defaultActions: Collection<ActionButton | ActionToggle>;
    /**
     * Enables automatic creation of a popup template for layers that have popups enabled but no popupTemplate defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#defaultPopupTemplateEnabled)
     */
    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)
     */
    readonly featureCount: number;
    /**
     * An array of features associated with the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#features)
     */
    features: Graphic[];
    /**
     * The number of features to fetch at one time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#featuresPerPage)
     */
    featuresPerPage: number;
    /**
     * 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)
     */
    highlightEnabled: boolean;
    /**
     * Indicates whether or not to include [defaultActions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#defaultActions) in the Popup's UI.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#includeDefaultActions)
     */
    includeDefaultActions: boolean;
    /**
     * Geometry used to position the popup.
     *
     * [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)
     */
    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)
     */
    readonly promiseCount: number;
    /**
     * An array of pending Promises that have not yet been fulfilled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#promises)
     */
    promises: Promise<any>[];
    /**
     * The graphic used to represent the cluster extent when the `Browse features` action is active in a cluster popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#selectedClusterBoundaryFeature)
     */
    readonly selectedClusterBoundaryFeature: Graphic;
    /**
     * The selected feature accessed by the popup.
     *
     * [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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#selectedFeatureIndex)
     */
    selectedFeatureIndex: number;
    /**
     * The view model's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#state)
     */
    readonly state: "ready" | "disabled";
    /**
     * The title of the popup.
     *
     * [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;
    /**
     * Indicates whether the popup has found a feature while resolving [promises](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#promises).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#waitingForResult)
     */
    readonly waitingForResult: 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;
    /**
     * Use this method to return feature(s) at a given screen location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#fetchFeatures)
     */
    fetchFeatures(
      screenPoint: PopupViewModelFetchFeaturesScreenPoint,
      options?: FetchFeaturesOptions
    ): Promise<FetchPopupFeaturesResult>;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#open)
     */
    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)
     */
    triggerAction(actionIndex: number): void;

    on(name: "trigger-action", eventHandler: PopupViewModelTriggerActionEventHandler): IHandle;
  }

  interface PopupViewModelConstructor {
    /**
     * Provides the logic for the [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) widget, which allows users to view content from feature attributes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#actions)
     */
    actions?: CollectionProperties<
      (ActionButtonProperties & { type: "button" }) | (ActionToggleProperties & { type: "toggle" })
    >;
    /**
     * 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)
     */
    autoCloseEnabled?: boolean;
    /**
     * This property indicates to the `Popup` that it needs to allow or disallow the click event propagation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#autoOpenEnabled)
     */
    autoOpenEnabled?: boolean;
    /**
     * The content of the popup.
     *
     * [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 no popupTemplate defined.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#defaultPopupTemplateEnabled)
     */
    defaultPopupTemplateEnabled?: boolean;
    /**
     * An array of features associated with the popup.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#features)
     */
    features?: GraphicProperties[];
    /**
     * The number of features to fetch at one time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#featuresPerPage)
     */
    featuresPerPage?: number;
    /**
     * 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)
     */
    highlightEnabled?: boolean;
    /**
     * Indicates whether or not to include [defaultActions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#defaultActions) in the Popup's UI.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#includeDefaultActions)
     */
    includeDefaultActions?: boolean;
    /**
     * Geometry used to position the popup.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#promises)
     */
    promises?: Promise<any>[];
    /**
     * Index of the feature that is [selected](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#selectedFeature).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#selectedFeatureIndex)
     */
    selectedFeatureIndex?: number;
    /**
     * The title of the popup.
     *
     * [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 & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * 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 PopupViewModelFetchFeaturesScreenPoint extends Object {
    /**
     * The x coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#fetchFeatures)
     */
    x: number;
    /**
     * The y coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#fetchFeatures)
     */
    y: number;
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#open)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup-PopupViewModel.html#open)
     */
    promises?: Promise<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)
     */
    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)
     */
    collapsed?: boolean;
  }

  export interface PopupViewModelTriggerActionEvent {
    action: ActionButton | ActionToggle;
  }

  /**
   * Optional properties to use with the [fetchFeatures](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#fetchFeatures) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#FetchFeaturesOptions)
   */
  export interface FetchFeaturesOptions extends Object {
    /**
     * The `click` event for either 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#FetchFeaturesOptions)
     */
    event?: any;
    /**
     * The signal object that can be used to abort the asynchronous task.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#FetchFeaturesOptions)
     */
    signal?: AbortSignal;
  }

  /**
   * An object containing popup features for a specific location in addition to its associated [layerview](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html).
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#FetchPopupFeaturesPromisesPerLayerView)
   */
  export interface FetchPopupFeaturesPromisesPerLayerView extends Object {
    /**
     * The associated [layerview](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) in which the features are fetched.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#FetchPopupFeaturesPromisesPerLayerView)
     */
    layerView: LayerView;
    /**
     * A promise containing an array of [graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) for the selected location associated with a specific [layerview](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#FetchPopupFeaturesPromisesPerLayerView)
     */
    promise: Promise<Graphic[]>;
  }

  /**
   * The resulting features returned from the [fetchFeatures](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#fetchFeatures) method.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#FetchPopupFeaturesResult)
   */
  export interface FetchPopupFeaturesResult extends Object {
    /**
     * An array of promises containing graphics from the selected location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#FetchPopupFeaturesResult)
     */
    allGraphicsPromise?: Promise<Graphic[]>;
    /**
     * An array of [graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) that do not have any associated [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html), ie.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#FetchPopupFeaturesResult)
     */
    clientOnlyGraphics?: Graphic[];
    /**
     * The resulting location of the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#hitTest) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#hitTest)'s' `hitTest`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#FetchPopupFeaturesResult)
     */
    location?: Point;
    /**
     * An array of [FetchPopupFeaturesPromisesPerLayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#FetchPopupFeaturesPromisesPerLayerView).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#FetchPopupFeaturesResult)
     */
    promisesPerLayerView?: FetchPopupFeaturesPromisesPerLayerView[];
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#dockOptions)
     */
    breakpoint?: boolean | PopupDockOptionsBreakpoint;
    /**
     * If `true`, displays the dock button.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#dockOptions)
     */
    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)
     */
    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)
     */
    height?: number;
  }

  export interface PopupFetchFeaturesScreenPoint extends Object {
    /**
     * The x coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#fetchFeatures)
     */
    x: number;
    /**
     * The y coordinate.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#fetchFeatures)
     */
    y: 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#open)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#open)
     */
    promises?: Promise<any>[];
    /**
     * **Since:** 4.5    This property enables multiple features in a popup to display in a list rather than displaying the first selected feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#open)
     */
    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)
     */
    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)
     */
    collapsed?: boolean;
  }

  export interface PopupTriggerActionEvent {
    action: ActionButton | ActionToggle;
  }

  /**
   * The visible elements that are displayed within the widget.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#VisibleElements)
   */
  export interface PopupVisibleElements extends Object {
    /**
     * Indicates whether to the feature navigation will be displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#VisibleElements)
     */
    featureNavigation?: boolean;
    /**
     * Indicates whether to display a close button on the popup dialog.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html#VisibleElements)
     */
    closeButton?: boolean;
  }

  interface Print extends Widget {
    /**
     * Specify the print output file format(s) that the user can select based on the options available from the print service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#allowedFormats)
     */
    allowedFormats: string | string[];
    /**
     * Specify the print output layout(s) that the user can select based on the options available from the print service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#allowedLayouts)
     */
    allowedLayouts: string | string[];
    /**
     * The collection of links exported from the Print widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#exportedLinks)
     */
    readonly exportedLinks: Collection<FileLink>;
    /**
     * This option allows passing extra parameters (in addition to [templateOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#templateOptions)) to the print (export webmap) requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#extraParameters)
     */
    extraParameters: any;
    /**
     * Indicates the heading level to use for the "Exported files" text where users can access the exported map printout.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#headingLevel)
     */
    headingLevel: number;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#iconClass)
     */
    iconClass: string;
    /**
     * Indicates whether or not to include [defaultTemplates](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#defaultTemplates).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#includeDefaultTemplates)
     */
    includeDefaultTemplates: boolean;
    /**
     * It is possible to search a specified portal instance's [locator services](https://enterprise.arcgis.com/en/portal/latest/administer/windows/configure-portal-to-geocode-addresses.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#portal)
     */
    portal: Portal;
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#view)
     */
    view: MapView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#viewModel)
     */
    viewModel: PrintViewModel;

    on(name: "complete", eventHandler: PrintCompleteEventHandler): IHandle;

    on(name: "submit", eventHandler: PrintSubmitEventHandler): IHandle;
  }

  interface PrintConstructor {
    /**
     * The Print widget connects your application with a [printing service](https://server.arcgis.com/en/portal/latest/administer/windows/configure-the-portal-to-print-maps.htm) to allow the map to be printed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html)
     */

    new (properties?: PrintProperties): Print;
  }

  export const Print: PrintConstructor;

  interface PrintProperties extends WidgetProperties {
    /**
     * Specify the print output file format(s) that the user can select based on the options available from the print service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#allowedFormats)
     */
    allowedFormats?: string | string[];
    /**
     * Specify the print output layout(s) that the user can select based on the options available from the print service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#allowedLayouts)
     */
    allowedLayouts?: string | string[];
    /**
     * This option allows passing extra parameters (in addition to [templateOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#templateOptions)) to the print (export webmap) requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#extraParameters)
     */
    extraParameters?: any;
    /**
     * Indicates the heading level to use for the "Exported files" text where users can access the exported map printout.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#headingLevel)
     */
    headingLevel?: number;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#iconClass)
     */
    iconClass?: string;
    /**
     * Indicates whether or not to include [defaultTemplates](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#defaultTemplates).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#includeDefaultTemplates)
     */
    includeDefaultTemplates?: boolean;
    /**
     * It is possible to search a specified portal instance's [locator services](https://enterprise.arcgis.com/en/portal/latest/administer/windows/configure-portal-to-geocode-addresses.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#portal)
     */
    portal?: PortalProperties;
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#view)
     */
    view?: MapViewProperties;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#viewModel)
     */
    viewModel?: PrintViewModelProperties;
  }

  interface CustomTemplate extends Accessor {
    /**
     * The template's description.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-CustomTemplate.html#description)
     */
    readonly description: string;
    /**
     * The output format for the printed map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-CustomTemplate.html#format)
     */
    format: "pdf" | "png32" | "png8" | "jpg" | "gif" | "eps" | "svg" | "svgz";
    /**
     * The text that appears inside the [Print Widget's](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html) `Select template` button.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-CustomTemplate.html#label)
     */
    readonly label: string;
    /**
     * The layout used for the print output.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-CustomTemplate.html#layout)
     */
    readonly layout:
      | "map-only"
      | "a3-landscape"
      | "a3-portrait"
      | "a4-landscape"
      | "a4-portrait"
      | "letter-ansi-a-landscape"
      | "letter-ansi-a-portrait"
      | "tabloid-ansi-b-landscape"
      | "tabloid-ansi-b-portrait";
    /**
     * Defines the layout elements.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-CustomTemplate.html#layoutOptions)
     */
    readonly layoutOptions: CustomTemplateLayoutOptions;
  }

  interface CustomTemplateConstructor {
    /**
     * Defines the custom 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-CustomTemplate.html)
     */

    new (properties?: CustomTemplateProperties): CustomTemplate;
  }

  export const CustomTemplate: CustomTemplateConstructor;

  interface CustomTemplateProperties {
    /**
     * The output format for the printed map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-CustomTemplate.html#format)
     */
    format?: "pdf" | "png32" | "png8" | "jpg" | "gif" | "eps" | "svg" | "svgz";
  }

  export interface CustomTemplateLayoutOptions extends Object {
    /**
     * Indicates whether the legend will be included in the print-out.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-CustomTemplate.html#layoutOptions)
     */
    legend?: boolean;
  }

  interface PrintViewModel extends Accessor {
    /**
     * Specify the print output file format(s) that the user can select based on the options available from the print service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#allowedFormats)
     */
    allowedFormats: string | string[];
    /**
     * Specify the print output layout(s) that the user can select based on the options available from the print service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#allowedLayouts)
     */
    allowedLayouts: string | string[];
    /**
     * A collection of print templates defined on the Portal.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#defaultTemplates)
     */
    readonly defaultTemplates: Collection<CustomTemplate>;
    /**
     * The effective 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#effectivePrintServiceUrl)
     */
    readonly effectivePrintServiceUrl: string;
    /**
     * This option allows passing extra parameters to the print (export webmap) requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#extraParameters)
     */
    extraParameters: any;
    /**
     * Indicates whether or not to include [defaultTemplates](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#defaultTemplates).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#includeDefaultTemplates)
     */
    includeDefaultTemplates: boolean;
    /**
     * It is possible to search a specified portal instance's [locator services](https://enterprise.arcgis.com/en/portal/latest/administer/windows/configure-portal-to-geocode-addresses.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#portal)
     */
    portal: Portal;
    /**
     * 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)
     */
    scaleEnabled: boolean;
    /**
     * The view model's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#state)
     */
    readonly state: "disabled" | "initializing" | "ready" | "error";
    /**
     * The service metadata that contains the [format](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#format) and [layout](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#layout) 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)
     */
    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(): Promise<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)
     */
    print(printTemplate: supportPrintTemplate): Promise<any>;
  }

  interface PrintViewModelConstructor {
    /**
     * Provides the logic for the [Print](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html)
     */

    new (properties?: PrintViewModelProperties): PrintViewModel;
  }

  export const PrintViewModel: PrintViewModelConstructor;

  interface PrintViewModelProperties {
    /**
     * Specify the print output file format(s) that the user can select based on the options available from the print service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#allowedFormats)
     */
    allowedFormats?: string | string[];
    /**
     * Specify the print output layout(s) that the user can select based on the options available from the print service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#allowedLayouts)
     */
    allowedLayouts?: string | string[];
    /**
     * This option allows passing extra parameters to the print (export webmap) requests.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#extraParameters)
     */
    extraParameters?: any;
    /**
     * Indicates whether or not to include [defaultTemplates](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#defaultTemplates).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#includeDefaultTemplates)
     */
    includeDefaultTemplates?: boolean;
    /**
     * It is possible to search a specified portal instance's [locator services](https://enterprise.arcgis.com/en/portal/latest/administer/windows/configure-portal-to-geocode-addresses.htm).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-PrintViewModel.html#portal)
     */
    portal?: PortalProperties;
    /**
     * 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)
     */
    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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#attributionEnabled)
     */
    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)
     */
    dpi: string;
    /**
     * This property 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#fileName)
     */
    fileName: string;
    /**
     * When true, the feature's attributes are included in feature collection layers even when they are not needed for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#forceFeatureAttributes)
     */
    forceFeatureAttributes: boolean;
    /**
     * The output format for the printed map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#format)
     */
    format: "pdf" | "png32" | "png8" | "jpg" | "gif" | "eps" | "svg" | "svgz";
    /**
     * Map height.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#layout)
     */
    layout:
      | "map-only"
      | "a3-landscape"
      | "a3-portrait"
      | "a4-landscape"
      | "a4-portrait"
      | "letter-ansi-a-landscape"
      | "letter-ansi-a-portrait"
      | "tabloid-ansi-b-landscape"
      | "tabloid-ansi-b-portrait";
    /**
     * 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)
     */
    legendEnabled: boolean;
    /**
     * The map scale of the printed map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#scale)
     */
    scale: number;
    /**
     * When `true`, [scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#scale) is used in the printed map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#scaleEnabled)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#width)
     */
    width: number;
  }

  interface TemplateOptionsConstructor {
    /**
     * 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-TemplateOptions.html)
     */

    new (properties?: TemplateOptionsProperties): TemplateOptions;
  }

  export const TemplateOptions: TemplateOptionsConstructor;

  interface TemplateOptionsProperties {
    /**
     * When `false`, the attribution is not displayed on the printout.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#attributionEnabled)
     */
    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)
     */
    dpi?: string;
    /**
     * This property 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#fileName)
     */
    fileName?: string;
    /**
     * When true, the feature's attributes are included in feature collection layers even when they are not needed for rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#forceFeatureAttributes)
     */
    forceFeatureAttributes?: boolean;
    /**
     * The output format for the printed map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#format)
     */
    format?: "pdf" | "png32" | "png8" | "jpg" | "gif" | "eps" | "svg" | "svgz";
    /**
     * Map height.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#layout)
     */
    layout?:
      | "map-only"
      | "a3-landscape"
      | "a3-portrait"
      | "a4-landscape"
      | "a4-portrait"
      | "letter-ansi-a-landscape"
      | "letter-ansi-a-portrait"
      | "tabloid-ansi-b-landscape"
      | "tabloid-ansi-b-portrait";
    /**
     * 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)
     */
    legendEnabled?: boolean;
    /**
     * The map scale of the printed map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#scale)
     */
    scale?: number;
    /**
     * When `true`, [scale](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#scale) is used in the printed map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#scaleEnabled)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#width)
     */
    width?: number;
  }

  export interface PrintCompleteEvent {
    results: PrintCompleteEventResults;
  }

  /**
   * Represents an exported map request from the result of the Print widget.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#FileLink)
   */
  export interface FileLink extends Object {
    /**
     * The location of the FileLink element in the array.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#FileLink)
     */
    count: number;
    /**
     * The [error](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Error.html) from the Print widget, if any.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#FileLink)
     */
    error: string;
    /**
     * The [file](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#format) type of the print-out.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#FileLink)
     */
    extension: string;
    /**
     * The [fileName](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#fileName) or [title](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print-TemplateOptions.html#title) of the print-out.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#FileLink)
     */
    name: string;
    /**
     * The state of the print-out.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#FileLink)
     */
    state: string;
    /**
     * The [printServiceUrl](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#printServiceUrl) of the print-out.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html#FileLink)
     */
    url: string;
  }

  export interface PrintSubmitEvent {
    results: PrintSubmitEventResults;
  }

  export interface PrintCompleteEventResults extends Object {
    link: Collection<FileLink>;
  }

  export interface PrintSubmitEventResults extends Object {
    link: Collection<FileLink>;
  }

  interface ScaleBar extends Widget {
    /**
     * The style for the scale bar.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar.html#style)
     */
    style: "ruler" | "line";
    /**
     * Units to use for the scale bar.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar.html#unit)
     */
    unit: "non-metric" | "metric" | "dual";
    /**
     * 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-widgets-ScaleBar.html#view)
     */
    view: MapView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar.html#viewModel)
     */
    viewModel: ScaleBarViewModel;
  }

  interface ScaleBarConstructor {
    /**
     * The ScaleBar widget displays a scale bar on the map or in a specified HTML node.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar.html)
     */

    new (properties?: ScaleBarProperties): ScaleBar;
  }

  export const ScaleBar: ScaleBarConstructor;

  interface ScaleBarProperties extends WidgetProperties {
    /**
     * The style for the scale bar.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar.html#style)
     */
    style?: "ruler" | "line";
    /**
     * Units to use for the scale bar.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar.html#unit)
     */
    unit?: "non-metric" | "metric" | "dual";
    /**
     * 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-widgets-ScaleBar.html#view)
     */
    view?: MapViewProperties;
    /**
     * The view model for this 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 {
    /**
     * Provides the logic for the [ScaleBar](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleBar-ScaleBarViewModel.html)
     */

    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 ScaleRangeSlider extends Widget {
    /**
     * When `true`, sets the widget to a disabled state so the user cannot interact with it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#disabled)
     */
    disabled: boolean;
    /**
     * The widget's default label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#label)
     */
    label: string;
    /**
     * When provided, the initial [minScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#minScale) and [maxScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#maxScale) values will match the layer's.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#layer)
     */
    layer: Layer;
    /**
     * The maximum scale of the active scale range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#maxScale)
     */
    maxScale: number;
    /**
     * The lowest possible maximum scale value on the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#maxScaleLimit)
     */
    maxScaleLimit: number;
    /**
     * The minimum scale of the active scale range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#minScale)
     */
    minScale: number;
    /**
     * The highest possible minimum scale value on the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#minScaleLimit)
     */
    minScaleLimit: number;
    /**
     * The region that the scale thumbnails will focus on.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#region)
     */
    region: SupportedRegion;
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#viewModel)
     */
    viewModel: ScaleRangeSliderViewModel;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#visibleElements)
     */
    visibleElements: ScaleRangeSliderVisibleElements;
  }

  interface ScaleRangeSliderConstructor {
    /**
     * The ScaleRangeSlider widget allows the user to set a minimum and maximum scale based on named scale ranges.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html)
     */

    new (properties?: ScaleRangeSliderProperties): ScaleRangeSlider;
  }

  export const ScaleRangeSlider: ScaleRangeSliderConstructor;

  interface ScaleRangeSliderProperties extends WidgetProperties {
    /**
     * When `true`, sets the widget to a disabled state so the user cannot interact with it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#disabled)
     */
    disabled?: boolean;
    /**
     * The widget's default label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#label)
     */
    label?: string;
    /**
     * When provided, the initial [minScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#minScale) and [maxScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#maxScale) values will match the layer's.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#layer)
     */
    layer?: LayerProperties;
    /**
     * The maximum scale of the active scale range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#maxScale)
     */
    maxScale?: number;
    /**
     * The lowest possible maximum scale value on the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#maxScaleLimit)
     */
    maxScaleLimit?: number;
    /**
     * The minimum scale of the active scale range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#minScale)
     */
    minScale?: number;
    /**
     * The highest possible minimum scale value on the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#minScaleLimit)
     */
    minScaleLimit?: number;
    /**
     * The region that the scale thumbnails will focus on.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#region)
     */
    region?:
      | "AE"
      | "AR"
      | "AT"
      | "AU"
      | "BE"
      | "BG"
      | "BO"
      | "BR"
      | "CA"
      | "CH"
      | "CI"
      | "CL"
      | "CN"
      | "CO"
      | "CR"
      | "CZ"
      | "DE"
      | "DK"
      | "EE"
      | "EG"
      | "ES"
      | "FI"
      | "FR"
      | "GB"
      | "GL"
      | "GR"
      | "GT"
      | "HK"
      | "ID"
      | "IE"
      | "IL"
      | "IN"
      | "IQ"
      | "IS"
      | "IT"
      | "JP"
      | "KE"
      | "KR"
      | "KW"
      | "LI"
      | "LT"
      | "LU"
      | "LV"
      | "MA"
      | "MG"
      | "ML"
      | "MO"
      | "MX"
      | "MY"
      | "NI"
      | "NL"
      | "NO"
      | "NZ"
      | "PE"
      | "PL"
      | "PR"
      | "PT"
      | "RO"
      | "RU"
      | "RW"
      | "SE"
      | "SG"
      | "SK"
      | "SR"
      | "SV"
      | "TH"
      | "TN"
      | "TW"
      | "US"
      | "VE"
      | "VI"
      | "ZA";
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#viewModel)
     */
    viewModel?: ScaleRangeSliderViewModelProperties;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#visibleElements)
     */
    visibleElements?: ScaleRangeSliderVisibleElements;
  }

  interface ScaleRanges extends Accessor {
    /**
     * Clamps the scale to the closest minScale or maxScale on the scale range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRanges.html#clampScale)
     */
    clampScale(scale: number): number;
    /**
     * Determines whether the given scale is within the current scale range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRanges.html#contains)
     */
    contains(scale: number): boolean;
    /**
     * Finds the scale range name at a given index.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRanges.html#findScaleRangeByIndex)
     */
    findScaleRangeByIndex(index: number): NamedScaleRange;
    /**
     * Helper to create a ScaleRanges object from a minimum and maximum scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRanges.html#fromScaleRange)
     */
    fromScaleRange(minScale: number, maxScale: number): ScaleRanges;
    /**
     * Determines if the input scale value can be considered to be at the smallest scale range edge.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRanges.html#isMaxScaleEdge)
     */
    isMaxScaleEdge(scale: void): boolean;
    /**
     * Determines if the input scale value can be considered to be at the largest scale range edge.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRanges.html#isMinScaleEdge)
     */
    isMinScaleEdge(scale: void): boolean;
  }

  interface ScaleRangesConstructor {
    /**
     * The ScaleRanges class represents the ranges of scales for the the [ScaleRangeSlider](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRanges.html)
     */

    new (properties?: ScaleRangesProperties): ScaleRanges;
  }

  export const ScaleRanges: ScaleRangesConstructor;

  interface ScaleRangesProperties {}

  /**
   * The NamedScaleRange provides the minimum and maximum scale of an named scale id.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRanges.html#NamedScaleRange)
   */
  export interface NamedScaleRange extends Object {
    /**
     * The named scale range, such as "room" or "metropolitan area".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRanges.html#NamedScaleRange)
     */
    id: string;
    /**
     * The minimum scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRanges.html#NamedScaleRange)
     */
    minScale: number;
    /**
     * The maximum scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRanges.html#NamedScaleRange)
     */
    maxScale: number;
  }

  interface ScaleRangeSliderViewModel extends Accessor {
    /**
     * When provided, the initial [minScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#minScale) and [maxScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#maxScale) values will match the layer's.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#layer)
     */
    layer: Layer;
    /**
     * The maximum scale of the active scale range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#maxScale)
     */
    maxScale: number;
    /**
     * The lowest possible maximum scale value from the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#maxScaleLimit)
     */
    maxScaleLimit: number;
    /**
     * The minimum scale of the active scale range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#minScale)
     */
    minScale: number;
    /**
     * The highest possible minimum scale value from the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#minScaleLimit)
     */
    minScaleLimit: number;
    /**
     * The valid scale ranges available based on the slider position.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#scaleRanges)
     */
    readonly scaleRanges: ScaleRanges;
    /**
     * The [SliderViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html) for supporting the scale range slider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#sliderViewModel)
     */
    sliderViewModel: SliderViewModel;
    /**
     * The current state of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#state)
     */
    readonly state: "disabled" | "ready";
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#view)
     */
    view: MapView | SceneView;

    /**
     * Utility method for converting scale-to-slider values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#mapScaleToSlider)
     */
    mapScaleToSlider(scale: number): number;
    /**
     * Utility method for converting slider-to-scale values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#mapSliderToScale)
     */
    mapSliderToScale(value: number): number;
  }

  interface ScaleRangeSliderViewModelConstructor {
    /**
     * Provides the logic for the [ScaleRangeSlider](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html)
     */

    new (properties?: ScaleRangeSliderViewModelProperties): ScaleRangeSliderViewModel;
  }

  export const ScaleRangeSliderViewModel: ScaleRangeSliderViewModelConstructor;

  interface ScaleRangeSliderViewModelProperties {
    /**
     * When provided, the initial [minScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#minScale) and [maxScale](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#maxScale) values will match the layer's.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#layer)
     */
    layer?: LayerProperties;
    /**
     * The maximum scale of the active scale range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#maxScale)
     */
    maxScale?: number;
    /**
     * The lowest possible maximum scale value from the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#maxScaleLimit)
     */
    maxScaleLimit?: number;
    /**
     * The minimum scale of the active scale range.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#minScale)
     */
    minScale?: number;
    /**
     * The highest possible minimum scale value from the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#minScaleLimit)
     */
    minScaleLimit?: number;
    /**
     * The [SliderViewModel](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html) for supporting the scale range slider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#sliderViewModel)
     */
    sliderViewModel?: SliderViewModelProperties;
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider-ScaleRangeSliderViewModel.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  /**
   * The region that the scale thumbnails will focus on.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#SupportedRegion)
   */
  export type SupportedRegion =
    | "AE"
    | "AR"
    | "AT"
    | "AU"
    | "BE"
    | "BG"
    | "BO"
    | "BR"
    | "CA"
    | "CH"
    | "CI"
    | "CL"
    | "CN"
    | "CO"
    | "CR"
    | "CZ"
    | "DE"
    | "DK"
    | "EE"
    | "EG"
    | "ES"
    | "FI"
    | "FR"
    | "GB"
    | "GL"
    | "GR"
    | "GT"
    | "HK"
    | "ID"
    | "IE"
    | "IL"
    | "IN"
    | "IQ"
    | "IS"
    | "IT"
    | "JP"
    | "KE"
    | "KR"
    | "KW"
    | "LI"
    | "LT"
    | "LU"
    | "LV"
    | "MA"
    | "MG"
    | "ML"
    | "MO"
    | "MX"
    | "MY"
    | "NI"
    | "NL"
    | "NO"
    | "NZ"
    | "PE"
    | "PL"
    | "PR"
    | "PT"
    | "RO"
    | "RU"
    | "RW"
    | "SE"
    | "SG"
    | "SK"
    | "SR"
    | "SV"
    | "TH"
    | "TN"
    | "TW"
    | "US"
    | "VE"
    | "VI"
    | "ZA";

  /**
   * The visible elements that are displayed within the widget.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#VisibleElements)
   */
  export interface ScaleRangeSliderVisibleElements extends Object {
    /**
     * Indicates whether the preview thumbnail of the region is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ScaleRangeSlider.html#VisibleElements)
     */
    preview: boolean;
  }

  interface widgetsSearch extends Widget, GoTo {
    /**
     * The current active menu of the Search widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#activeMenu)
     */
    activeMenu: "none" | "suggestion" | "source" | "warning";
    /**
     * The [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#sources) object currently selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#activeSource)
     */
    readonly activeSource: LayerSearchSource | LocatorSearchSource;
    /**
     * The selected source's index.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#activeSourceIndex)
     */
    activeSourceIndex: number;
    /**
     * 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-Search.html#allPlaceholder)
     */
    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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#autoSelect)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#defaultSources)
     */
    readonly defaultSources: Collection<LayerSearchSource | LocatorSearchSource>;
    /**
     * When true, the widget is visually withdrawn and cannot be interacted with.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#disabled)
     */
    disabled: 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#includeDefaultSources)
     */
    includeDefaultSources: boolean | Function;
    /**
     * Enables location services within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#locationEnabled)
     */
    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)
     */
    maxResults: number;
    /**
     * The maximum number of suggestions returned by the widget if not specified by the source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#maxSuggestions)
     */
    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)
     */
    minSuggestCharacters: number;
    /**
     * Indicates whether to display the [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) on feature click.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#popupEnabled)
     */
    popupEnabled: boolean;
    /**
     * A customized [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) for the selected feature.
     *
     * [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;
    /**
     * The graphic used to highlight the resulting feature or location.
     *
     * [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 the location of the selected feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#resultGraphicEnabled)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#searchAllEnabled)
     */
    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;
    /**
     * The Search widget may be used to search features in a [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html)/[feature](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) service feature layer(s), [SceneLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html) with an associated feature layer, [BuildingComponentSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html) with an associated feature layer, [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 [OGCFeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html), or [table](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchTable.html), or geocode locations with a [Locator](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.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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#suggestions)
     */
    readonly suggestions: SuggestResult[];
    /**
     * Enable suggestions for the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#suggestionsEnabled)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this 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.
     *
     * [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;
    /**
     * Depending on the sources specified, search() queries the feature layer(s) and/or performs address matching using any specified [Locator(s)](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html) and returns any applicable results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#search)
     */
    search(searchTerm?: string | Geometry | SuggestResult | number[][]): Promise<SearchResponse>;
    /**
     * Performs a suggest() request on the active Locator.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#suggest)
     */
    suggest(value?: string): Promise<SuggestResponse>;

    on(name: "search-blur", eventHandler: SearchSearchBlurEventHandler): IHandle;

    on(name: "search-focus", eventHandler: SearchSearchFocusEventHandler): IHandle;

    on(name: "search-clear", eventHandler: SearchSearchClearEventHandler): IHandle;

    on(name: "search-start", eventHandler: SearchSearchStartEventHandler): IHandle;

    on(name: "suggest-start", eventHandler: SearchSuggestStartEventHandler): IHandle;

    on(name: "search-complete", eventHandler: SearchSearchCompleteEventHandler): IHandle;

    on(name: "select-result", eventHandler: SearchSelectResultEventHandler): IHandle;

    on(name: "suggest-complete", eventHandler: SearchSuggestCompleteEventHandler): IHandle;
  }

  interface widgetsSearchConstructor {
    /**
     * The Search widget provides a way to perform search operations on [locator service(s)](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html), [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html)/[feature](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) service feature layer(s), [SceneLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html) with an associated feature layer, [BuildingComponentSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html) with an associated feature layer, [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), [OGCFeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html), and/or [table(s)](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchTable.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html)
     */

    new (properties?: widgetsSearchProperties): widgetsSearch;
  }

  export const widgetsSearch: widgetsSearchConstructor;

  interface widgetsSearchProperties extends WidgetProperties, GoToProperties {
    /**
     * The current active menu of the Search widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#activeMenu)
     */
    activeMenu?: "none" | "suggestion" | "source" | "warning";
    /**
     * The selected source's index.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#activeSourceIndex)
     */
    activeSourceIndex?: number;
    /**
     * 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-Search.html#allPlaceholder)
     */
    allPlaceholder?: string;
    /**
     * Indicates whether to automatically select and zoom to the first geocoded result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#autoSelect)
     */
    autoSelect?: boolean;
    /**
     * When true, the widget is visually withdrawn and cannot be interacted with.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#disabled)
     */
    disabled?: 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#includeDefaultSources)
     */
    includeDefaultSources?: boolean | Function;
    /**
     * Enables location services within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#locationEnabled)
     */
    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)
     */
    maxResults?: number;
    /**
     * The maximum number of suggestions returned by the widget if not specified by the source.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#maxSuggestions)
     */
    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)
     */
    minSuggestCharacters?: number;
    /**
     * Indicates whether to display the [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) on feature click.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#popupEnabled)
     */
    popupEnabled?: boolean;
    /**
     * A customized [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) for the selected feature.
     *
     * [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 the location of the selected feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#resultGraphicEnabled)
     */
    resultGraphicEnabled?: boolean;
    /**
     * Indicates whether to display the option to search all sources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#searchAllEnabled)
     */
    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 Search widget may be used to search features in a [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html)/[feature](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) service feature layer(s), [SceneLayers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html) with an associated feature layer, [BuildingComponentSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-buildingSublayers-BuildingComponentSublayer.html) with an associated feature layer, [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 [OGCFeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html), or [table](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchTable.html), or geocode locations with a [Locator](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.html#sources)
     */
    sources?: CollectionProperties<SearchSourceProperties>;
    /**
     * Enable suggestions for the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#suggestionsEnabled)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this 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.
     *
     * [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 the search value exactly.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html#exactMatch)
     */
    exactMatch: boolean;
    /**
     * The layer queried in the search.
     *
     * [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;
    /**
     * One or more field names used to order the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html#orderByFields)
     */
    orderByFields: string[];
    /**
     * An array of string values representing the names 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 multiple fields 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 multiple fields in a defined order when suggestions are displayed.
     *
     * [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 {
    /**
     * The following properties define a [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html)-based [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#sources) whose features may be searched by a [Search](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html) widget instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html)
     */

    new (properties?: LayerSearchSourceProperties): LayerSearchSource;

    fromJSON(json: any): LayerSearchSource;
  }

  export const LayerSearchSource: LayerSearchSourceConstructor;

  interface LayerSearchSourceProperties extends SearchSourceProperties {
    /**
     * The results are displayed using this 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 the search value exactly.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html#exactMatch)
     */
    exactMatch?: boolean;
    /**
     * The layer queried in the search.
     *
     * [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;
    /**
     * One or more field names used to order the query results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html#orderByFields)
     */
    orderByFields?: string[];
    /**
     * An array of string values representing the names 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 multiple fields 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 multiple fields in a defined order when suggestions are displayed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LayerSearchSource.html#suggestionTemplate)
     */
    suggestionTemplate?: string;
  }

  interface LocatorSearchSource extends SearchSource, JSONSupport {
    /**
     * An authorization string used to access a resource or service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#apiKey)
     */
    apiKey: string;
    /**
     * A string array which limits the results to one or more categories.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#countryCode)
     */
    countryCode: string;
    /**
     * Sets the scale of the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#scale) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#scale) for the resulting search result, if the locator service doesn’t return an extent with a scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#defaultZoomScale)
     */
    defaultZoomScale: number;
    /**
     * Defines 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-widgets-Search-LocatorSearchSource.html#locationType)
     */
    locationType: "rooftop" | "street";
    /**
     * The locator task used to search.
     *
     * [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 multiple fields 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 Address Field in the REST services directory for the locator service.
     *
     * [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 {
    /**
     * The following properties define a [source](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#sources) pointing to a [Locator](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html) that may be used to geocode locations with a [Search](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html) widget instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html)
     */

    new (properties?: LocatorSearchSourceProperties): LocatorSearchSource;

    fromJSON(json: any): LocatorSearchSource;
  }

  export const LocatorSearchSource: LocatorSearchSourceConstructor;

  interface LocatorSearchSourceProperties extends SearchSourceProperties {
    /**
     * An authorization string used to access a resource or service.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#apiKey)
     */
    apiKey?: string;
    /**
     * A string array which limits the results to one or more categories.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#countryCode)
     */
    countryCode?: string;
    /**
     * Sets the scale of the [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#scale) or [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#scale) for the resulting search result, if the locator service doesn’t return an extent with a scale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-LocatorSearchSource.html#defaultZoomScale)
     */
    defaultZoomScale?: number;
    /**
     * Defines 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-widgets-Search-LocatorSearchSource.html#locationType)
     */
    locationType?: "rooftop" | "street";
    /**
     * The locator task used to search.
     *
     * [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 multiple fields 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 Address Field in the REST services directory for the locator service.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchResultRenderer.html#showMoreResultsOpen)
     */
    showMoreResultsOpen: boolean;
    /**
     * The view model for this Search widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchResultRenderer.html#viewModel)
     */
    viewModel: SearchViewModel;
  }

  interface SearchResultRendererConstructor {
    /**
     * The `SearchResultRenderer` renders the [Search](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html) widget results and allows expanding a DOM element to show alternative matches.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchResultRenderer.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchResultRenderer.html#showMoreResultsOpen)
     */
    showMoreResultsOpen?: boolean;
    /**
     * The view model for this Search widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchResultRenderer.html#viewModel)
     */
    viewModel?: SearchViewModelProperties;
  }

  interface SearchSource extends Accessor, JSONSupport {
    /**
     * Indicates whether to automatically navigate to the selected result once selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#autoNavigate)
     */
    autoNavigate: boolean;
    /**
     * For filtering suggests or search results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#filter)
     */
    filter: SearchSourceFilter;
    /**
     * Function used to get search results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#getResults)
     */
    getResults: GetResultsHandler;
    /**
     * Function used to get search suggestions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#getSuggestions)
     */
    getSuggestions: GetSuggestionsParameters;
    /**
     * 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)
     */
    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-Search-SearchSource.html#maxSuggestions)
     */
    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-Search-SearchSource.html#minSuggestCharacters)
     */
    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;
    /**
     * The popup template used to display search results.
     *
     * [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 the map 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 suggestions as the user enters input text in the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#suggestionsEnabled)
     */
    suggestionsEnabled: boolean;
    /**
     * Indicates whether to constrain the search results to the view's extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#withinViewEnabled)
     */
    withinViewEnabled: boolean;
    /**
     * The set zoom scale for the resulting search result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#zoomScale)
     */
    zoomScale: number;
  }

  interface SearchSourceConstructor {
    /**
     * The following properties define generic [sources](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#sources) properties for use in the [Search](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html)
     */

    new (properties?: SearchSourceProperties): SearchSource;

    fromJSON(json: any): SearchSource;
  }

  export const SearchSource: SearchSourceConstructor;

  interface SearchSourceProperties {
    /**
     * Indicates whether to automatically navigate to the selected result once selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#autoNavigate)
     */
    autoNavigate?: boolean;
    /**
     * For filtering suggests or search results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#filter)
     */
    filter?: SearchSourceFilter;
    /**
     * Function used to get search results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#getResults)
     */
    getResults?: GetResultsHandler;
    /**
     * Function used to get search suggestions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#getSuggestions)
     */
    getSuggestions?: GetSuggestionsParameters;
    /**
     * 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)
     */
    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-Search-SearchSource.html#maxSuggestions)
     */
    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-Search-SearchSource.html#minSuggestCharacters)
     */
    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;
    /**
     * The popup template used to display search results.
     *
     * [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 the map 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 suggestions as the user enters input text in the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#suggestionsEnabled)
     */
    suggestionsEnabled?: boolean;
    /**
     * Indicates whether to constrain the search results to the view's extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#withinViewEnabled)
     */
    withinViewEnabled?: boolean;
    /**
     * The set zoom scale for the resulting search result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchSource.html#zoomScale)
     */
    zoomScale?: number;
  }

  export type GetResultsHandler = (params: any) => Promise<SearchResult[]>;

  export type GetSuggestionsParameters = (params: any) => Promise<SuggestResult[]>;

  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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#activeSourceIndex)
     */
    activeSourceIndex: number;
    /**
     * 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-Search-SearchViewModel.html#allPlaceholder)
     */
    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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#autoSelect)
     */
    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).
     *
     * [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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#includeDefaultSources)
     */
    includeDefaultSources: boolean | Function;
    /**
     * Indicates whether location services are enabled within the widget.
     *
     * [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)
     */
    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)
     */
    maxResults: number;
    /**
     * The maximum number of suggestions 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#maxSuggestions)
     */
    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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#popupEnabled)
     */
    popupEnabled: boolean;
    /**
     * A customized [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) for the selected feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#popupTemplate)
     */
    popupTemplate: PopupTemplate;
    /**
     * It is possible to search a specified portal instance's [locator services](https://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)
     */
    readonly resultGraphic: Graphic;
    /**
     * Indicates if the [resultGraphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#resultGraphic) will display at the location of the selected feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#resultGraphicEnabled)
     */
    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)
     */
    readonly results: any[];
    /**
     * Indicates whether to display the option to search all sources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#searchAllEnabled)
     */
    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)
     */
    readonly selectedResult: any;
    /**
     * The selected SuggestResult.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#selectedSuggestion)
     */
    readonly selectedSuggestion: Geometry | SearchViewModelSuggestResult;
    /**
     * The Search widget may be used to search features in a [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) or [table](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchTable.html), or geocode locations with a [Locator](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#sources)
     */
    sources: Collection<LayerSearchSource | LocatorSearchSource>;
    /**
     * The current state of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#state)
     */
    readonly state: "ready" | "disabled" | "searching" | "loading";
    /**
     * 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)
     */
    suggestionDelay: number;
    /**
     * An array of results from the [suggest method](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#suggestions)
     */
    readonly suggestions: SearchViewModelSuggestResult[];
    /**
     * Enable suggestions for the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#suggestionsEnabled)
     */
    suggestionsEnabled: boolean;
    /**
     * Indicates whether the `View` or `Portal` is loading resources prior to use.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#updating)
     */
    readonly updating: 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#view)
     */
    view: MapView | SceneView;

    /**
     * Clears the current value, search results, suggest results, graphic, and graphics layer.
     *
     * [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 performs address matching using any specified [Locator(s)](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html) and returns the applicable results.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#search)
     */
    search(
      searchTerm?: string | Geometry | SearchViewModelSuggestResult | number[][]
    ): Promise<SearchViewModelSearchResponse>;
    /**
     * Returns search results near your current location.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#searchNearby)
     */
    searchNearby(): Promise<SearchViewModelSearchResponse>;
    /**
     * Performs a suggest() request on the active Locator.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#suggest)
     */
    suggest(value?: string): Promise<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 {
    /**
     * Provides the logic for the [Search](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html) widget, which performs search operations on [locator service(s)](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Locator.html), [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html)/[feature](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) service feature layer(s), and/or [table(s)](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchTable.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html)
     */

    new (properties?: SearchViewModelProperties): SearchViewModel;
  }

  export const SearchViewModel: SearchViewModelConstructor;

  interface SearchViewModelProperties extends GoToProperties {
    /**
     * The selected source's index.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#activeSourceIndex)
     */
    activeSourceIndex?: number;
    /**
     * 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-Search-SearchViewModel.html#allPlaceholder)
     */
    allPlaceholder?: string;
    /**
     * Indicates whether to automatically select and zoom to the first geocoded result.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#autoSelect)
     */
    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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#includeDefaultSources)
     */
    includeDefaultSources?: boolean | Function;
    /**
     * Indicates whether location services are enabled within the widget.
     *
     * [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)
     */
    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)
     */
    maxResults?: number;
    /**
     * The maximum number of suggestions 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#maxSuggestions)
     */
    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)
     */
    minSuggestCharacters?: number;
    /**
     * Indicates whether to display the [Popup](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Popup.html) on feature click.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#popupEnabled)
     */
    popupEnabled?: boolean;
    /**
     * A customized [PopupTemplate](https://developers.arcgis.com/javascript/latest/api-reference/esri-PopupTemplate.html) for the selected feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#popupTemplate)
     */
    popupTemplate?: PopupTemplateProperties;
    /**
     * It is possible to search a specified portal instance's [locator services](https://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;
    /**
     * Indicates if the [resultGraphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#resultGraphic) will display at the location of the selected feature.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#resultGraphicEnabled)
     */
    resultGraphicEnabled?: boolean;
    /**
     * Indicates whether to display the option to search all sources.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#searchAllEnabled)
     */
    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 [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) or [table](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-applicationProperties-SearchTable.html), or geocode locations with a [Locator](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#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)
     */
    suggestionDelay?: number;
    /**
     * Enable suggestions for the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#suggestionsEnabled)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search-SearchViewModel.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  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.
     *
     * [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.
     *
     * [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.
     *
     * [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;
  }

  export interface SearchSearchBlurEvent {}

  export interface SearchSearchClearEvent {}

  export interface SearchSearchCompleteEvent {
    activeSourceIndex: number;

    errors: Error[];

    numResults: number;

    results: SearchSearchCompleteEventResults[];

    searchTerm: string;
  }

  export interface SearchSearchFocusEvent {}

  /**
   * 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.
     *
     * [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;
    /**
     * The target of the result, which is a [Graphic](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) used for either [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) navigation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Search.html#SearchResult)
     */
    target: Graphic;
  }

  export interface SearchSearchStartEvent {}

  export interface SearchSelectResultEvent {
    result: SearchSelectResultEventResult;

    source: any;

    sourceIndex: number;
  }

  export interface SearchSuggestCompleteEvent {
    activeSourceIndex: number;

    errors: Error[];

    numResults: number;

    results: SearchSuggestCompleteEventResults[];

    searchTerm: 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.
     *
     * [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.
     *
     * [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 SearchSuggestStartEvent {}

  export interface SearchSearchCompleteEventResults extends Object {
    results: SearchResult[];

    sourceIndex: number;

    source: any;
  }

  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 SearchSelectResultEventResult extends Object {
    extent: Extent;

    feature: Graphic;

    name: string;
  }

  export interface SearchSuggestCompleteEventResults extends Object {
    results: SuggestResult[];

    sourceIndex: number;

    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 ShadowAccumulation extends Widget {
    /**
     * Indicates the heading level to use for the titles "Time range" and "Visualization".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation.html#headingLevel)
     */
    headingLevel: number;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation.html#iconClass)
     */
    iconClass: string;
    /**
     * A reference to 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-widgets-ShadowAccumulation.html#view)
     */
    view: SceneView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation.html#viewModel)
     */
    viewModel: ShadowAccumulationViewModel;
  }

  interface ShadowAccumulationConstructor {
    /**
     * The Shadow accumulation widget displays the cummulative shadows of 3D objects in 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-widgets-ShadowAccumulation.html)
     */

    new (properties?: ShadowAccumulationProperties): ShadowAccumulation;
  }

  export const ShadowAccumulation: ShadowAccumulationConstructor;

  interface ShadowAccumulationProperties extends WidgetProperties {
    /**
     * Indicates the heading level to use for the titles "Time range" and "Visualization".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation.html#headingLevel)
     */
    headingLevel?: number;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation.html#iconClass)
     */
    iconClass?: string;
    /**
     * A reference to 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-widgets-ShadowAccumulation.html#view)
     */
    view?: SceneViewProperties;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation.html#viewModel)
     */
    viewModel?: ShadowAccumulationViewModelProperties;
  }

  interface ShadowAccumulationViewModel extends Accessor {
    /**
     * The calendar date for when shadows are to be accumulated, excluding the time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#date)
     */
    date: Date;
    /**
     * The configuration used when the widget's [visualizationType](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#visualizationType) is set to "discrete".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#discreteOptions)
     */
    discreteOptions: ShadowAccumulationViewModelDiscreteOptions;
    /**
     * The configuration used when the widget's [visualizationType](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#visualizationType) is set to "duration".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#durationOptions)
     */
    durationOptions: ShadowAccumulationViewModelDurationOptions;
    /**
     * Time (in milliseconds from midnight of the date specified by [date](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#date)) when the shadows are to stop being accumulated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#endTimeOfDay)
     */
    endTimeOfDay: number;
    /**
     * Time (in milliseconds from midnight of the date specified by [date](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#date)) when the shadows are to start being accumulated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#startTimeOfDay)
     */
    startTimeOfDay: number;
    /**
     * The current state of the view model that can be used for rendering the UI of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#state)
     */
    readonly state: "disabled" | "ready";
    /**
     * The configuration used when the widget's [visualizationType](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#visualizationType) is set to "threshold".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#thresholdOptions)
     */
    thresholdOptions: ShadowAccumulationViewModelThresholdOptions;
    /**
     * The difference in hours between UTC time and the times displayed in the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#utcOffset)
     */
    utcOffset: number;
    /**
     * A reference to 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-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#view)
     */
    view: SceneView;
    /**
     * Type of visualization to use when showing shadow accumulation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#visualizationType)
     */
    visualizationType: "threshold" | "duration" | "discrete";

    /**
     * Returns the time (in milliseconds) spent in shadow for a certain point on the screen.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#getDuration)
     */
    getDuration(point: SceneViewScreenPoint): number;
    /**
     * Starts the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#start)
     */
    start(): void;
    /**
     * Stops the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#stop)
     */
    stop(): void;
  }

  interface ShadowAccumulationViewModelConstructor {
    /**
     * Provides the logic for the [ShadowAccumulation](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html)
     */

    new (properties?: ShadowAccumulationViewModelProperties): ShadowAccumulationViewModel;
  }

  export const ShadowAccumulationViewModel: ShadowAccumulationViewModelConstructor;

  interface ShadowAccumulationViewModelProperties {
    /**
     * The calendar date for when shadows are to be accumulated, excluding the time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#date)
     */
    date?: DateProperties;
    /**
     * The configuration used when the widget's [visualizationType](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#visualizationType) is set to "discrete".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#discreteOptions)
     */
    discreteOptions?: ShadowAccumulationViewModelDiscreteOptionsProperties;
    /**
     * The configuration used when the widget's [visualizationType](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#visualizationType) is set to "duration".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#durationOptions)
     */
    durationOptions?: ShadowAccumulationViewModelDurationOptionsProperties;
    /**
     * Time (in milliseconds from midnight of the date specified by [date](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#date)) when the shadows are to stop being accumulated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#endTimeOfDay)
     */
    endTimeOfDay?: number;
    /**
     * Time (in milliseconds from midnight of the date specified by [date](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#date)) when the shadows are to start being accumulated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#startTimeOfDay)
     */
    startTimeOfDay?: number;
    /**
     * The configuration used when the widget's [visualizationType](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#visualizationType) is set to "threshold".
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#thresholdOptions)
     */
    thresholdOptions?: ShadowAccumulationViewModelThresholdOptionsProperties;
    /**
     * The difference in hours between UTC time and the times displayed in the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#utcOffset)
     */
    utcOffset?: number;
    /**
     * A reference to 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-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#view)
     */
    view?: SceneViewProperties;
    /**
     * Type of visualization to use when showing shadow accumulation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#visualizationType)
     */
    visualizationType?: "threshold" | "duration" | "discrete";
  }

  export interface ShadowAccumulationViewModelDiscreteOptionsProperties extends Object {
    /**
     * Color of the shadow accumulation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#discreteOptions)
     */
    color?: Color;
    /**
     * Interval (in milliseconds) used for accumulating shadows.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#discreteOptions)
     */
    interval?: number;
    /**
     * Values (in milliseconds) selectable in the UI for the interval used to accumulate shadows.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#discreteOptions)
     */
    intervalOptions?: CollectionProperties<number>;
  }

  export interface ShadowAccumulationViewModelDiscreteOptions extends AnonymousAccessor {
    /**
     * Color of the shadow accumulation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#discreteOptions)
     */
    color?: Color;
    /**
     * Interval (in milliseconds) used for accumulating shadows.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#discreteOptions)
     */
    interval?: number;
    /**
     * Values (in milliseconds) selectable in the UI for the interval used to accumulate shadows.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#discreteOptions)
     */
    intervalOptions?: Collection<number>;
  }

  export interface ShadowAccumulationViewModelDurationOptionsProperties extends Object {
    /**
     * Color of the shadow accumulation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#durationOptions)
     */
    color?: Color;
    /**
     * Mode in which the duration should be displayed: as a continuous surface or an hourly interval.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#durationOptions)
     */
    mode?: "continuous" | "hourly";
  }

  export interface ShadowAccumulationViewModelDurationOptions extends AnonymousAccessor {
    /**
     * Color of the shadow accumulation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#durationOptions)
     */
    color?: Color;
    /**
     * Mode in which the duration should be displayed: as a continuous surface or an hourly interval.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#durationOptions)
     */
    mode?: "continuous" | "hourly";
  }

  export interface ShadowAccumulationViewModelThresholdOptionsProperties extends Object {
    /**
     * Color of the shadow accumulation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#thresholdOptions)
     */
    color?: Color;
    /**
     * Time period in milliseconds.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#thresholdOptions)
     */
    value?: number;
    /**
     * The minimum time period (in milliseconds) selectable in the UI for the threshold value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#thresholdOptions)
     */
    minValue?: number;
    /**
     * The maximum time period (in milliseconds) selectable in the UI for the threshold value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#thresholdOptions)
     */
    maxValue?: number;
  }

  export interface ShadowAccumulationViewModelThresholdOptions extends AnonymousAccessor {
    /**
     * Color of the shadow accumulation.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#thresholdOptions)
     */
    color?: Color;
    /**
     * Time period in milliseconds.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#thresholdOptions)
     */
    value?: number;
    /**
     * The minimum time period (in milliseconds) selectable in the UI for the threshold value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#thresholdOptions)
     */
    minValue?: number;
    /**
     * The maximum time period (in milliseconds) selectable in the UI for the threshold value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-ShadowAccumulation-ShadowAccumulationViewModel.html#thresholdOptions)
     */
    maxValue?: number;
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#activeTool)
     */
    readonly activeTool:
      | "point"
      | "polyline"
      | "polygon"
      | "circle"
      | "rectangle"
      | "move"
      | "transform"
      | "reshape"
      | "rectangle-selection"
      | "lasso-selection";
    /**
     * 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)
     */
    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;
    /**
     * Defines the default behavior once the [create](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#create) operation is completed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#creationMode)
     */
    creationMode: "single" | "continuous" | "update";
    /**
     * Default create options set for the Sketch widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultCreateOptions)
     */
    defaultCreateOptions: SketchDefaultCreateOptions;
    /**
     * Default update options set for the Sketch widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultUpdateOptions)
     */
    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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#layout)
     */
    layout: "vertical" | "horizontal";
    /**
     * The [SnappingOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-SnappingOptions.html) for sketching.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#snappingOptions)
     */
    snappingOptions: SnappingOptions;
    /**
     * The Sketch widget's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#state)
     */
    readonly state: "ready" | "disabled" | "active";
    /**
     * 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).
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#viewModel)
     */
    viewModel: SketchViewModel;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#visibleElements)
     */
    visibleElements: SketchVisibleElements;

    /**
     * Destroy potential default view model and remove potential view model handles
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#_cleanupViewModel)
     */
    _cleanupViewModel(): void;
    /**
     * 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) event.
     *
     * [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) event and changes the event's state to `complete`.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#create)
     */
    create(
      tool: "point" | "polyline" | "polygon" | "rectangle" | "circle",
      createOptions?: SketchCreateCreateOptions
    ): void;
    /**
     * Deletes the selected graphics used in the update workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#delete)
     */
    delete(): void;
    /**
     * Incrementally redo actions recorded in the stack.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#redo)
     */
    redo(): void;
    /**
     * Incrementally undo actions recorded in the stack.
     *
     * [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)
     */
    update(graphics: Graphic | Graphic[], updateOptions?: SketchUpdateUpdateOptions): Promise<void>;

    on(name: "delete", eventHandler: SketchDeleteEventHandler): IHandle;

    on(name: "create", eventHandler: SketchCreateEventHandler): IHandle;

    on(name: "update", eventHandler: SketchUpdateEventHandler): IHandle;

    on(name: "redo", eventHandler: SketchRedoEventHandler): IHandle;

    on(name: "undo", eventHandler: SketchUndoEventHandler): IHandle;
  }

  interface SketchConstructor {
    /**
     * Sketch widget provides a simple UI for creating and updating graphics on a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html) or 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-widgets-Sketch.html)
     */

    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)
     */
    availableCreateTools?: string[];
    /**
     * Defines the default behavior once the [create](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#create) operation is completed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#creationMode)
     */
    creationMode?: "single" | "continuous" | "update";
    /**
     * Default create options set for the Sketch widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultCreateOptions)
     */
    defaultCreateOptions?: SketchDefaultCreateOptions;
    /**
     * Default update options set for the Sketch widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultUpdateOptions)
     */
    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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#layout)
     */
    layout?: "vertical" | "horizontal";
    /**
     * The [SnappingOptions](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-interactive-snapping-SnappingOptions.html) for sketching.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#snappingOptions)
     */
    snappingOptions?: SnappingOptionsProperties;
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for the Sketch widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#viewModel)
     */
    viewModel?: SketchViewModelProperties;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#visibleElements)
     */
    visibleElements?: SketchVisibleElements;
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#activeTool)
     */
    readonly activeTool:
      | "point"
      | "multipoint"
      | "polyline"
      | "polygon"
      | "circle"
      | "rectangle"
      | "move"
      | "transform"
      | "reshape";
    /**
     * 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 create options set for the SketchViewModel.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#defaultCreateOptions)
     */
    defaultCreateOptions: SketchViewModelDefaultCreateOptions;
    /**
     * Default update options set for the SketchViewModel.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#layer)
     */
    layer: GraphicsLayer;
    /**
     * A  [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html) or [PointSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html) used for representing the point geometry that is being drawn.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#pointSymbol)
     */
    pointSymbol: SimpleMarkerSymbol | PointSymbol3D;
    /**
     * A  [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html) or [PolygonSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PolygonSymbol3D.html) used for representing the polygon geometry that is being drawn.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#polygonSymbol)
     */
    polygonSymbol: SimpleFillSymbol | PolygonSymbol3D;
    /**
     * A  [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html) or [LineSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3D.html) used for representing the polyline geometry that is being drawn.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#polylineSymbol)
     */
    polylineSymbol: SimpleLineSymbol | LineSymbol3D;
    /**
     * Options for snapping while sketching.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#snappingOptions)
     */
    snappingOptions: SnappingOptions;
    /**
     * The sketch view model's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#state)
     */
    readonly state: "ready" | "disabled" | "active";
    /**
     * 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.
     *
     * [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: any | 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) event If called in the middle of a create operation, `cancel()` discards the 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) event and changes the event's state to `complete`.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#create)
     */
    create(
      tool: "point" | "multipoint" | "polyline" | "polygon" | "rectangle" | "circle",
      createOptions?: SketchViewModelCreateCreateOptions
    ): void;
    /**
     * Deletes the selected graphics used in the update workflow.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#delete)
     */
    delete(): void;
    /**
     * Destroys the view model instance.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#destroy)
     */
    destroy(): void;
    /**
     * Incrementally redo actions recorded in the stack.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#redo)
     */
    redo(): void;
    /**
     * Incrementally undo actions recorded in the stack.
     *
     * [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)
     */
    update(graphics: Graphic | Graphic[], updateOptions?: SketchViewModelUpdateUpdateOptions): Promise<void>;

    on(name: "delete", eventHandler: SketchViewModelDeleteEventHandler): IHandle;

    on(name: "create", eventHandler: SketchViewModelCreateEventHandler): IHandle;

    on(name: "update", eventHandler: SketchViewModelUpdateEventHandler): IHandle;

    on(name: "redo", eventHandler: SketchViewModelRedoEventHandler): IHandle;

    on(name: "undo", eventHandler: SketchViewModelUndoEventHandler): IHandle;
  }

  interface SketchViewModelConstructor {
    /**
     * Provides the logic 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-Sketch-SketchViewModel.html)
     */

    new (properties?: SketchViewModelProperties): SketchViewModel;
  }

  export const SketchViewModel: SketchViewModelConstructor;

  interface SketchViewModelProperties {
    /**
     * Default create options set for the SketchViewModel.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#defaultCreateOptions)
     */
    defaultCreateOptions?: SketchViewModelDefaultCreateOptions;
    /**
     * Default update options set for the SketchViewModel.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#layer)
     */
    layer?: GraphicsLayerProperties;
    /**
     * A  [SimpleMarkerSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleMarkerSymbol.html) or [PointSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PointSymbol3D.html) used for representing the point geometry that is being drawn.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#pointSymbol)
     */
    pointSymbol?:
      | (SimpleMarkerSymbolProperties & { type: "simple-marker" })
      | (PointSymbol3DProperties & { type: "point-3d" });
    /**
     * A  [SimpleFillSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleFillSymbol.html) or [PolygonSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PolygonSymbol3D.html) used for representing the polygon geometry that is being drawn.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#polygonSymbol)
     */
    polygonSymbol?:
      | (SimpleFillSymbolProperties & { type: "simple-fill" })
      | (PolygonSymbol3DProperties & { type: "polygon-3d" });
    /**
     * A  [SimpleLineSymbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-SimpleLineSymbol.html) or [LineSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3D.html) used for representing the polyline geometry that is being drawn.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#polylineSymbol)
     */
    polylineSymbol?:
      | (SimpleLineSymbolProperties & { type: "simple-line" })
      | (LineSymbol3DProperties & { type: "line-3d" });
    /**
     * Options for snapping while sketching.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#snappingOptions)
     */
    snappingOptions?: SnappingOptionsProperties;
    /**
     * Indicates if a graphic can be selected to be updated.
     *
     * [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?: any | (SceneViewProperties & { type: "3d" });
  }

  export interface SketchViewModelCreateEvent {
    graphic: Graphic;

    state: "start" | "active" | "complete" | "cancel";

    tool: "point" | "multipoint" | "polyline" | "polygon" | "rectangle" | "circle";

    toolEventInfo: CreateToolEventInfo;

    type: "create";
  }

  export interface SketchViewModelDeleteEvent {
    graphics: Graphic[];

    tool: "move" | "reshape" | "transform";

    type: "delete";
  }

  export interface SketchViewModelRedoEvent {
    graphics: Graphic[];

    tool: "point" | "multipoint" | "polyline" | "polygon" | "rectangle" | "circle" | "move" | "transform" | "reshape";

    type: "redo";
  }

  export interface SketchViewModelCreateCreateOptions extends Object {
    /**
     * Specifies how the graphic can be created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#create)
     */
    mode?: "hybrid" | "freehand" | "click";
    /**
     * Controls whether the created geometry has z-values or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#create)
     */
    hasZ?: boolean;
    /**
     * The default z-value of the newly created geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#create)
     */
    defaultZ?: number;
  }

  export interface SketchViewModelDefaultCreateOptions extends Object {
    /**
     * Create operation mode how the graphic can be created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#defaultCreateOptions)
     */
    mode?: "hybrid" | "freehand" | "click";
    /**
     * Controls whether the created geometry has z-values or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#defaultCreateOptions)
     */
    hasZ?: boolean;
    /**
     * The default z-value of the newly created geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#defaultCreateOptions)
     */
    defaultZ?: number;
  }

  export interface SketchViewModelDefaultUpdateOptions extends Object {
    /**
     * Name of the update tool.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#defaultUpdateOptions)
     */
    enableRotation?: boolean;
    /**
     * Indicates if the `scale` operation will be enabled when updating graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#defaultUpdateOptions)
     */
    enableScaling?: boolean;
    /**
     * Indicates if z-values can be modified when updating the graphic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#defaultUpdateOptions)
     */
    enableZ?: boolean;
    /**
     * Indicates whether more than one selection can be made at once.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#defaultUpdateOptions)
     */
    multipleSelectionEnabled?: boolean;
    /**
     * Indicates if the uniform scale operation will be enabled when updating graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#defaultUpdateOptions)
     */
    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)
     */
    toggleToolOnClick?: boolean;
  }

  export interface SketchViewModelUpdateUpdateOptions extends Object {
    /**
     * Name of the update tool.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#update)
     */
    tool?: "transform" | "reshape" | "move";
    /**
     * Indicates if the `rotation` operation will be enabled when updating graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#update)
     */
    enableRotation?: boolean;
    /**
     * Indicates if the `scale` operation will be enabled when updating graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#update)
     */
    enableScaling?: boolean;
    /**
     * Indicates if z-values can be modified when updating the graphic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#update)
     */
    enableZ?: boolean;
    /**
     * Indicates whether more than one selection can be made at once.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#update)
     */
    multipleSelectionEnabled?: boolean;
    /**
     * Indicates if the uniform scale operation will be enabled when updating graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch-SketchViewModel.html#update)
     */
    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)
     */
    toggleToolOnClick?: boolean;
  }

  export interface SketchViewModelUndoEvent {
    graphics: Graphic[];

    tool: "point" | "multipoint" | "polyline" | "polygon" | "rectangle" | "circle" | "move" | "transform" | "reshape";

    type: "undo";
  }

  export interface SketchViewModelUpdateEvent {
    aborted: boolean;

    graphics: Graphic[];

    state: "start" | "active" | "complete";

    tool: "move" | "transform" | "reshape";

    toolEventInfo: UpdateToolEventInfo;

    type: "update";
  }

  export interface SketchCreateEvent {
    graphic: Graphic;

    state: "start" | "active" | "complete" | "cancel";

    tool: "point" | "polyline" | "polygon" | "rectangle" | "circle";

    toolEventInfo: CreateToolEventInfo;

    type: "create";
  }

  /**
   * 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 graphic is being created.
   *
   * [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: "cursor-update";
    /**
     * 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[];
  }

  export interface SketchDeleteEvent {
    graphics: Graphic[];

    tool: "move" | "reshape" | "transform";

    type: "delete";
  }

  /**
   * 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.
   *
   * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#MoveEventInfo)
     */
    type: "move-start" | "move" | "move-stop";
    /**
     * 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;
  }

  export interface SketchRedoEvent {
    graphics: Graphic[];

    tool: "point" | "polyline" | "polygon" | "rectangle" | "circle" | "move" | "transform" | "reshape";

    type: "redo";
  }

  /**
   * 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.
   *
   * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#ReshapeEventInfo)
     */
    type: "reshape-start" | "reshape" | "reshape-stop";
  }

  /**
   * 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.
   *
   * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#RotateEventInfo)
     */
    type: "rotate-start" | "rotate" | "rotate-stop";
    /**
     * 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.
   *
   * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#ScaleEventInfo)
     */
    type: "scale-start" | "scale" | "scale-stop";
    /**
     * 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;
  }

  /**
   * 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 selecting or deselecting graphics using `Shift+Left-click`.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#SelectionChangeEventInfo)
   */
  export interface SelectionChangeEventInfo extends Object {
    /**
     * Type is always `selection-change`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#SelectionChangeEventInfo)
     */
    type: "selection-change";
    /**
     * An array of [graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) representing the latest graphic selected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#SelectionChangeEventInfo)
     */
    added: Graphic[];
    /**
     * An array of [graphics](https://developers.arcgis.com/javascript/latest/api-reference/esri-Graphic.html) representing the latest graphic deselected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#SelectionChangeEventInfo)
     */
    removed: Graphic[];
  }

  export interface SketchCreateCreateOptions extends Object {
    /**
     * Specifies how the graphic can be created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#create)
     */
    mode?: "hybrid" | "freehand" | "click";
    /**
     * Controls whether the created geometry has z-values or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#create)
     */
    hasZ?: boolean;
    /**
     * The default z-value of the newly created geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#create)
     */
    defaultZ?: number;
  }

  export interface SketchDefaultCreateOptions extends Object {
    /**
     * Create operation mode how the graphic can be created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultCreateOptions)
     */
    mode?: "hybrid" | "freehand" | "click";
    /**
     * Controls whether the created geometry has z-values or not.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultCreateOptions)
     */
    hasZ?: boolean;
    /**
     * The default z-value of the newly created geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultCreateOptions)
     */
    defaultZ?: number;
  }

  export interface SketchDefaultUpdateOptions extends Object {
    /**
     * Name of the update tool.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultUpdateOptions)
     */
    enableRotation?: boolean;
    /**
     * Indicates if the `scale` operation will be enabled when updating graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultUpdateOptions)
     */
    enableScaling?: boolean;
    /**
     * Indicates if z-values can be modified when updating the graphic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultUpdateOptions)
     */
    enableZ?: boolean;
    /**
     * Indicates whether more than one selection can be made at once.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultUpdateOptions)
     */
    multipleSelectionEnabled?: boolean;
    /**
     * Indicates if the uniform scale operation will be enabled when updating graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#defaultUpdateOptions)
     */
    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)
     */
    toggleToolOnClick?: boolean;
  }

  export interface SketchUpdateUpdateOptions extends Object {
    /**
     * Name of the update tool.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#update)
     */
    tool?: "transform" | "reshape" | "move";
    /**
     * Indicates if the `rotation` operation will be enabled when updating graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#update)
     */
    enableRotation?: boolean;
    /**
     * Indicates if the `scale` operation will be enabled when updating graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#update)
     */
    enableScaling?: boolean;
    /**
     * Indicates if z-values can be modified when updating the graphic.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#update)
     */
    enableZ?: boolean;
    /**
     * Indicates whether more than one selection can be made at once.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#update)
     */
    multipleSelectionEnabled?: boolean;
    /**
     * Indicates if the uniform scale operation will be enabled when updating graphics.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#update)
     */
    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)
     */
    toggleToolOnClick?: boolean;
  }

  export interface SketchUndoEvent {
    graphics: Graphic[];

    tool: "point" | "polyline" | "polygon" | "rectangle" | "circle" | "move" | "transform" | "reshape";

    type: "undo";
  }

  export interface SketchUpdateEvent {
    aborted: boolean;

    graphics: Graphic[];

    state: "start" | "active" | "complete";

    tool: "move" | "transform" | "reshape";

    toolEventInfo: UpdateToolEventInfo;

    type: "update";
  }

  /**
   * 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
    | SelectionChangeEventInfo
    | 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: "vertex-add";
    /**
     * An array of x,y coordinates representing the vertices added.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VertexAddEventInfo)
     */
    added: number[];
    /**
     * Contains the details of the added vertices to track changes in topology of the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VertexAddEventInfo)
     */
    vertices: VertexAddEventInfoVertices[];
  }

  /**
   * 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 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: "vertex-remove";
    /**
     * An array of x,y coordinates representing the vertices removed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VertexRemoveEventInfo)
     */
    removed: number[];
    /**
     * Contains the details of the removed vertices to track changes in topology of the geometry.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VertexRemoveEventInfo)
     */
    vertices: VertexRemoveEventInfoVertices[];
  }

  /**
   * The visible elements that are displayed within the widget.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VisibleElements)
   */
  export interface SketchVisibleElements extends Object {
    /**
     * The available sketch tools within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VisibleElements)
     */
    createTools?: VisibleElementsCreateTools;
    /**
     * The available selection tools within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VisibleElements)
     */
    selectionTools?: VisibleElementsSelectionTools;
    /**
     * Indicates whether to display the undo/redo menu within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VisibleElements)
     */
    undoRedoMenu?: boolean;
    /**
     * Indicates whether to display the settings menu.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VisibleElements)
     */
    settingsMenu?: boolean;
  }

  export interface VertexAddEventInfoVertices extends Object {
    /**
     * An array of x,y coordinates representing the vertices added.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VertexAddEventInfo)
     */
    coordinates: number[];
    /**
     * The ring/path index of the added vertex.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VertexAddEventInfo)
     */
    componentIndex: number;
    /**
     * The index of the vertex position.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VertexAddEventInfo)
     */
    vertexIndex: number;
  }

  export interface VertexRemoveEventInfoVertices extends Object {
    /**
     * An array of x,y coordinates representing the vertices removed.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VertexRemoveEventInfo)
     */
    coordinates: number[];
    /**
     * The ring/path index of the removed vertex.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VertexRemoveEventInfo)
     */
    componentIndex: number;
    /**
     * The index of the vertex position.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VertexRemoveEventInfo)
     */
    vertexIndex: number;
  }

  export interface VisibleElementsCreateTools extends Object {
    /**
     * Indicates whether to display the point sketch tool.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VisibleElements)
     */
    point?: boolean;
    /**
     * Indicates whether to display the polyline sketch tool.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VisibleElements)
     */
    polyline?: boolean;
    /**
     * Indicates whether to display the polygon sketch tool.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VisibleElements)
     */
    polygon?: boolean;
    /**
     * Indicates whether to display the rectangle sketch tool.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VisibleElements)
     */
    rectangle?: boolean;
    /**
     * Indicates whether to display the circle sketch tool.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VisibleElements)
     */
    circle?: boolean;
  }

  export interface VisibleElementsSelectionTools extends Object {
    /**
     * Indicates whether to display the `"rectangle-selection"` tool.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VisibleElements)
     */
    "rectangle-selection"?: boolean;
    /**
     * Indicates whether to display the `"lasso-selection"` tool.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Sketch.html#VisibleElements)
     */
    "lasso-selection"?: boolean;
  }

  interface Slice extends Widget {
    /**
     * Indicates the heading level to use for the "Excluded layers" heading.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice.html#headingLevel)
     */
    headingLevel: number;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice.html#iconClass)
     */
    iconClass: string;
    /**
     * A reference to 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-Slice.html#view)
     */
    view: SceneView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice.html#viewModel)
     */
    viewModel: SliceViewModel;
  }

  interface SliceConstructor {
    /**
     * The slice widget is a 3D analysis tool that can be used to reveal occluded content in a {@link module:esri/views/SceneView}.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice.html)
     */

    new (properties?: SliceProperties): Slice;
  }

  export const Slice: SliceConstructor;

  interface SliceProperties extends WidgetProperties {
    /**
     * Indicates the heading level to use for the "Excluded layers" heading.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice.html#headingLevel)
     */
    headingLevel?: number;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice.html#iconClass)
     */
    iconClass?: string;
    /**
     * A reference to 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-Slice.html#view)
     */
    view?: SceneViewProperties;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice.html#viewModel)
     */
    viewModel?: SliceViewModelProperties;
  }

  interface SlicePlane extends Accessor, JSONSupport {
    /**
     * The heading angle (in degrees) of the slice plane.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SlicePlane.html#heading)
     */
    heading: number;
    /**
     * The height of the slice plane.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SlicePlane.html#height)
     */
    height: number;
    /**
     * A point specifying the position of the center of the plane.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SlicePlane.html#position)
     */
    position: Point;
    /**
     * The tilt angle (in degrees) of the slice plane.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SlicePlane.html#tilt)
     */
    tilt: number;
    /**
     * The string value representing the type of the slice shape.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SlicePlane.html#type)
     */
    readonly type: "plane";
    /**
     * The width of the slice plane.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SlicePlane.html#width)
     */
    width: number;

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

  interface SlicePlaneConstructor {
    /**
     * Provides the shape definition of a slice plane for the [Slice](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SlicePlane.html)
     */

    new (properties?: SlicePlaneProperties): SlicePlane;

    fromJSON(json: any): SlicePlane;
  }

  export const SlicePlane: SlicePlaneConstructor;

  interface SlicePlaneProperties {
    /**
     * The heading angle (in degrees) of the slice plane.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SlicePlane.html#heading)
     */
    heading?: number;
    /**
     * The height of the slice plane.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SlicePlane.html#height)
     */
    height?: number;
    /**
     * A point specifying the position of the center of the plane.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SlicePlane.html#position)
     */
    position?: PointProperties;
    /**
     * The tilt angle (in degrees) of the slice plane.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SlicePlane.html#tilt)
     */
    tilt?: number;
    /**
     * The width of the slice plane.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SlicePlane.html#width)
     */
    width?: number;
  }

  interface SliceViewModel extends Accessor {
    /**
     * Add layers to this collection to exclude them from the slice.
     *
     * [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 that are 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 shape used to slice elements in a 3D scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SliceViewModel.html#shape)
     */
    shape: SlicePlane;
    /**
     * The view model's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SliceViewModel.html#state)
     */
    readonly state: "disabled" | "ready" | "slicing" | "sliced";
    /**
     * Enable tilting the slice shape.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SliceViewModel.html#tiltEnabled)
     */
    tiltEnabled: boolean;

    /**
     * Clears the current slice.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SliceViewModel.html#clear)
     */
    clear(): void;
    /**
     * Starts a new slice.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SliceViewModel.html#start)
     */
    start(): void;
  }

  interface SliceViewModelConstructor {
    /**
     * Provides the logic for the [Slice](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SliceViewModel.html)
     */

    new (properties?: SliceViewModelProperties): SliceViewModel;
  }

  export const SliceViewModel: SliceViewModelConstructor;

  interface SliceViewModelProperties {
    /**
     * Add layers to this collection to exclude them from the slice.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SliceViewModel.html#excludedLayers)
     */
    excludedLayers?: CollectionProperties<
      LayerProperties | (BuildingComponentSublayerProperties & { type: "building-component" })
    >;
    /**
     * Indicates whether the [Ground](https://developers.arcgis.com/javascript/latest/api-reference/esri-Ground.html) and layers that are 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 shape used to slice elements in a 3D scene.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SliceViewModel.html#shape)
     */
    shape?: SlicePlaneProperties;
    /**
     * Enable tilting the slice shape.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slice-SliceViewModel.html#tiltEnabled)
     */
    tiltEnabled?: boolean;
  }

  interface Slider extends Widget {
    /**
     * When `true`, sets the slider to a disabled state so the user cannot interact with it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#disabled)
     */
    disabled: boolean;
    /**
     * Indicates if the user can drag the segment between thumbs to update thumb positions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#draggableSegmentsEnabled)
     */
    draggableSegmentsEnabled: boolean;
    /**
     * A function that provides the developer with access to the input elements when [rangeLabelInputsEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#rangeLabelInputsEnabled) and/or [labelInputsEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelInputsEnabled) are set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#inputCreatedFunction)
     */
    inputCreatedFunction: InputCreatedFunction;
    /**
     * A function used to format user inputs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#inputFormatFunction)
     */
    inputFormatFunction: SliderLabelFormatter;
    /**
     * Function used to parse slider inputs formatted by the [inputFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#inputFormatFunction).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#inputParseFunction)
     */
    inputParseFunction: InputParser;
    /**
     * The HTML Element nodes representing [labels](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labels) attached to slider thumbs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelElements)
     */
    readonly labelElements: Collection<HTMLElement>;
    /**
     * A function used to format labels.
     *
     * [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 input when the user clicks a label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelInputsEnabled)
     */
    labelInputsEnabled: boolean;
    /**
     * An array of strings associated with 'values' generated using an internal label formatter or the 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelsVisible)
     */
    labelsVisible: boolean;
    /**
     * Determines the layout/orientation of the Slider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#layout)
     */
    layout: "horizontal" | "horizontal-reversed" | "vertical" | "vertical-reversed";
    /**
     * The maximum possible data/thumb value of the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#max)
     */
    max: number;
    /**
     * The HTML Element node representing the [max](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#max) value label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#maxLabelElement)
     */
    readonly maxLabelElement: HTMLElement;
    /**
     * The minimum possible data/thumb value of the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#min)
     */
    min: number;
    /**
     * The HTML Element node representing the [min](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#min) value label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#minLabelElement)
     */
    readonly minLabelElement: HTMLElement;
    /**
     * Defines how slider thumb values should be rounded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#precision)
     */
    precision: number;
    /**
     * Indicates whether to enable editing range values via keyboard input when 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#rangeLabelInputsEnabled)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#rangeLabelsVisible)
     */
    rangeLabelsVisible: boolean;
    /**
     * The HTML Element nodes representing interactive slider segments.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#segmentElements)
     */
    readonly segmentElements: Collection<HTMLElement>;
    /**
     * 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)
     */
    snapOnClickEnabled: boolean;
    /**
     * The current state of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#state)
     */
    readonly state: "ready" | "disabled" | "editing" | "dragging";
    /**
     * Sets steps, or intervals, on the slider that restrict user input to specific values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#steps)
     */
    steps: number | number[];
    /**
     * When `true`, all segments will sync together in updating thumb values when the user drags any segment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#syncedSegmentsEnabled)
     */
    syncedSegmentsEnabled: boolean;
    /**
     * Function that executes each time a thumb is created on the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#thumbCreatedFunction)
     */
    thumbCreatedFunction: ThumbCreatedFunction;
    /**
     * The HTML Element nodes representing slider thumbs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#thumbElements)
     */
    readonly thumbElements: Collection<HTMLElement>;
    /**
     * When `false`, the user can freely move any slider thumb to any position along the track.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#thumbsConstrained)
     */
    thumbsConstrained: boolean;
    /**
     * When set, renders ticks along the slider track.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#tickConfigs)
     */
    tickConfigs: TickConfig[];
    /**
     * The HTML Element nodes representing slider ticks and their associated labels.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#tickElements)
     */
    readonly tickElements: Collection<Collection<TickElementGroup>>;
    /**
     * The HTML Element node representing the slider track.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#viewModel)
     */
    viewModel: SliderViewModel;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#visibleElements)
     */
    visibleElements: SliderVisibleElements;

    on(name: "max-change", eventHandler: SliderMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: SliderMinChangeEventHandler): IHandle;

    on(name: "segment-click", eventHandler: SliderSegmentClickEventHandler): IHandle;

    on(name: "segment-drag", eventHandler: SliderSegmentDragEventHandler): IHandle;

    on(name: "thumb-change", eventHandler: SliderThumbChangeEventHandler): IHandle;

    on(name: "thumb-click", eventHandler: SliderThumbClickEventHandler): IHandle;

    on(name: "thumb-drag", eventHandler: SliderThumbDragEventHandler): IHandle;

    on(name: "track-click", eventHandler: SliderTrackClickEventHandler): IHandle;

    on(name: "max-click", eventHandler: SliderMaxClickEventHandler): IHandle;

    on(name: "min-click", eventHandler: SliderMinClickEventHandler): IHandle;

    on(name: "tick-click", eventHandler: SliderTickClickEventHandler): IHandle;
  }

  interface SliderConstructor {
    /**
     * A slider widget that can be used for filtering data, or gathering numeric input from a user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html)
     */

    new (properties?: SliderProperties): Slider;
  }

  export const Slider: SliderConstructor;

  interface SliderProperties extends WidgetProperties {
    /**
     * When `true`, sets the slider to a disabled state so the user cannot interact with it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#disabled)
     */
    disabled?: boolean;
    /**
     * Indicates if the user can drag the segment between thumbs to update thumb positions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#draggableSegmentsEnabled)
     */
    draggableSegmentsEnabled?: boolean;
    /**
     * A function that provides the developer with access to the input elements when [rangeLabelInputsEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#rangeLabelInputsEnabled) and/or [labelInputsEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelInputsEnabled) are set to `true`.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#inputCreatedFunction)
     */
    inputCreatedFunction?: InputCreatedFunction;
    /**
     * A function used to format user inputs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#inputFormatFunction)
     */
    inputFormatFunction?: SliderLabelFormatter;
    /**
     * Function used to parse slider inputs formatted by the [inputFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#inputFormatFunction).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#inputParseFunction)
     */
    inputParseFunction?: InputParser;
    /**
     * A function used to format labels.
     *
     * [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 input when the user clicks a label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelInputsEnabled)
     */
    labelInputsEnabled?: boolean;
    /**
     * Indicates whether to display labels alongside slider thumbs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#labelsVisible)
     */
    labelsVisible?: boolean;
    /**
     * Determines the layout/orientation of the Slider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#layout)
     */
    layout?: "horizontal" | "horizontal-reversed" | "vertical" | "vertical-reversed";
    /**
     * The maximum possible data/thumb value of the slider.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#precision)
     */
    precision?: number;
    /**
     * Indicates whether to enable editing range values via keyboard input when 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#rangeLabelInputsEnabled)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#rangeLabelsVisible)
     */
    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)
     */
    snapOnClickEnabled?: boolean;
    /**
     * Sets steps, or intervals, on the slider that restrict user input to specific values.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#steps)
     */
    steps?: number | number[];
    /**
     * When `true`, all segments will sync together in updating thumb values when the user drags any segment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#syncedSegmentsEnabled)
     */
    syncedSegmentsEnabled?: boolean;
    /**
     * Function that executes each time a thumb is created on the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#thumbCreatedFunction)
     */
    thumbCreatedFunction?: ThumbCreatedFunction;
    /**
     * When `false`, the user can freely move any slider thumb to any position along the track.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#thumbsConstrained)
     */
    thumbsConstrained?: boolean;
    /**
     * When set, renders ticks along the slider track.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#viewModel)
     */
    viewModel?: SliderViewModelProperties;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#visibleElements)
     */
    visibleElements?: SliderVisibleElements;
  }

  interface SliderViewModel extends Accessor, Evented {
    /**
     * A function used to format user inputs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#inputFormatFunction)
     */
    inputFormatFunction: SliderLabelFormatter;
    /**
     * Function used to parse slider inputs formatted by the [inputFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#inputFormatFunction).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#inputParseFunction)
     */
    inputParseFunction: InputParser;
    /**
     * A function used to format labels.
     *
     * [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 or the 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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#precision)
     */
    precision: number;
    /**
     * The state of the view model.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#state)
     */
    readonly state: "ready" | "disabled";
    /**
     * When `false`, the user can freely move any slider thumb to any position along the track.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#thumbsConstrained)
     */
    thumbsConstrained: boolean;
    /**
     * 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 input 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#defaultInputFormatFunction)
     */
    defaultInputFormatFunction(value: number): string;
    /**
     * The default input parsing function available for use as a fallback in custom parsing implementations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#defaultInputParseFunction)
     */
    defaultInputParseFunction(value: string): 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)
     */
    defaultLabelFormatFunction(value: number): string;
    /**
     * Returns the min and max bounds for a 'value' at the provided index.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#getBoundsForValueAtIndex)
     */
    getBoundsForValueAtIndex(index: number): any;
    /**
     * Returns the formatted label for a provided value.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#getLabelForValue)
     */
    getLabelForValue(value: number, type?: "min" | "max" | "tick" | "values", 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#setValue)
     */
    setValue(index: number, value: number): void;
    /**
     * Rounds the given value to the number of decimal places specified in the [precision](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#precision) property set on the view model.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#toPrecision)
     */
    toPrecision(value: number): string;

    on(name: "max-change", eventHandler: SliderViewModelMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: SliderViewModelMinChangeEventHandler): IHandle;
  }

  interface SliderViewModelConstructor {
    /**
     * Provides the logic for the [Slider](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html)
     */

    new (properties?: SliderViewModelProperties): SliderViewModel;
  }

  export const SliderViewModel: SliderViewModelConstructor;

  interface SliderViewModelProperties {
    /**
     * A function used to format user inputs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#inputFormatFunction)
     */
    inputFormatFunction?: SliderLabelFormatter;
    /**
     * Function used to parse slider inputs formatted by the [inputFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#inputFormatFunction).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#inputParseFunction)
     */
    inputParseFunction?: InputParser;
    /**
     * A function used to format labels.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#precision)
     */
    precision?: number;
    /**
     * When `false`, the user can freely move any slider thumb to any position along the track.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider-SliderViewModel.html#thumbsConstrained)
     */
    thumbsConstrained?: boolean;
    /**
     * 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 interface SliderViewModelMaxChangeEvent {
    oldValue: number;

    type: "max";

    value: number;
  }

  export interface SliderViewModelMinChangeEvent {
    oldValue: number;

    type: "min";

    value: number;
  }

  export type InputCreatedFunction = (inputElement: any, type: "max" | "min" | "thumb", thumbIndex?: number) => void;

  export type InputParser = (
    value: string,
    type?: "average" | "min" | "max" | "tick" | "value",
    index?: number
  ) => number;

  export type SliderLabelFormatter = (
    value: number,
    type?: "average" | "min" | "max" | "tick" | "value",
    index?: number
  ) => string;

  export interface SliderMaxChangeEvent {
    oldValue: number;

    type: "max-change";

    value: number;
  }

  export interface SliderMaxClickEvent {
    type: "max-click";

    value: number;
  }

  export interface SliderMinChangeEvent {
    oldValue: number;

    type: "min-change";

    value: number;
  }

  export interface SliderMinClickEvent {
    type: "min-click";

    value: number;
  }

  export interface SliderSegmentClickEvent {
    index: number;

    thumbIndices: number[];

    type: "segment-click";

    value: number;
  }

  export interface SliderSegmentDragEvent {
    index: number;

    state: "start" | "drag";

    thumbIndices: number[];

    type: "segment-drag";
  }

  export interface SliderThumbChangeEvent {
    index: number;

    oldValue: number;

    type: "thumb-change";

    value: number;
  }

  export interface SliderThumbClickEvent {
    index: number;

    type: "thumb-click";

    value: number;
  }

  export type ThumbCreatedFunction = (
    index: number,
    value: number,
    thumbElement: HTMLElement,
    labelElement?: HTMLElement
  ) => void;

  export interface SliderThumbDragEvent {
    index: number;

    state: "drag" | "start" | "stop";

    type: "thumb-drag";

    value: number;
  }

  export interface SliderTickClickEvent {
    configIndex: number;

    groupIndex: number;

    type: "tick-click";

    value: number;
  }

  /**
   * Object specification for configuring ticks on the slider.
   *
   * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#TickConfig)
     */
    mode: "count" | "percent" | "position";
    /**
     * Indicates where ticks will be rendered below the track.
     *
     * [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.
     *
     * [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;

  /**
   * The HTML Element nodes representing a single slider tick and its associated label.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#TickElementGroup)
   */
  export interface TickElementGroup extends Object {
    /**
     * The HTMLElement representing a tick.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#TickElementGroup)
     */
    tickElement?: HTMLElement;
    /**
     * The HTMLElement representing the label associated with the tick element.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#TickElementGroup)
     */
    labelElement?: HTMLElement;
  }

  export interface SliderTrackClickEvent {
    type: "track-click";

    value: number;
  }

  /**
   * The visible elements that are displayed within the widget.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#VisibleElements)
   */
  export interface SliderVisibleElements extends Object {
    /**
     * Indicates whether to display labels for slider thumbs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#VisibleElements)
     */
    labels?: 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Slider.html#VisibleElements)
     */
    rangeLabels?: boolean;
  }

  interface ClassedColorSlider extends SmartMappingSliderBase {
    /**
     * An array of class breaks with associated colors.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider.html#updateClassBreakInfos)
     */
    updateClassBreakInfos(breakInfos: ClassBreakInfo[]): ClassBreakInfo[];
    /**
     * A convenience function used to update the properties a ClassedColorSlider from the result of the [createClassBreaksRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider.html#updateFromRendererResult)
     */
    updateFromRendererResult(rendererResult: ClassBreaksRendererResult, histogramResult?: HistogramResult): void;

    on(name: "max-change", eventHandler: ClassedColorSliderMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: ClassedColorSliderMinChangeEventHandler): IHandle;

    on(name: "segment-drag", eventHandler: ClassedColorSliderSegmentDragEventHandler): IHandle;

    on(name: "thumb-change", eventHandler: ClassedColorSliderThumbChangeEventHandler): IHandle;

    on(name: "thumb-drag", eventHandler: ClassedColorSliderThumbDragEventHandler): IHandle;
  }

  interface ClassedColorSliderConstructor {
    /**
     * The ClassedColorSlider widget is designed for authoring and exploring data-driven visualizations in any layer that can be rendered with color in a [ClassBreaksRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider.html)
     */

    new (properties?: ClassedColorSliderProperties): ClassedColorSlider;

    /**
     * A convenience function used to create a ClassedColorSlider widget from the result of the [createClassBreaksRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createClassBreaksRenderer) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider.html#fromRendererResult)
     */
    fromRendererResult(
      rendererResult: ClassBreaksRendererResult,
      histogramResult?: HistogramResult
    ): ClassedColorSlider;
  }

  export const ClassedColorSlider: ClassedColorSliderConstructor;

  interface ClassedColorSliderProperties extends SmartMappingSliderBaseProperties {
    /**
     * An array of class breaks with associated colors.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider.html#viewModel)
     */
    viewModel?: ClassedColorSliderViewModelProperties;
  }

  interface ClassedColorSliderViewModel extends SmartMappingSliderViewModel {
    /**
     * An array of class breaks with associated colors.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider-ClassedColorSliderViewModel.html#breaks)
     */
    breaks: ClassedColorSliderViewModelBreaks[];

    /**
     * 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;
  }

  interface ClassedColorSliderViewModelConstructor {
    /**
     * Provides the logic for the [ClassedColorSlider](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider-ClassedColorSliderViewModel.html)
     */

    new (properties?: ClassedColorSliderViewModelProperties): ClassedColorSliderViewModel;
  }

  export const ClassedColorSliderViewModel: ClassedColorSliderViewModelConstructor;

  interface ClassedColorSliderViewModelProperties extends SmartMappingSliderViewModelProperties {
    /**
     * An array of class breaks with associated colors.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider-ClassedColorSliderViewModel.html#breaks)
     */
    breaks?: ClassedColorSliderViewModelBreaks[];
  }

  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.
     *
     * [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.
     *
     * [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: "max";

    value: number;
  }

  export interface ClassedColorSliderViewModelMinChangeEvent {
    oldValue: number;

    type: "min";

    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 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider.html#breaks)
     */
    max: number;
    /**
     * The min value of the break.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedColorSlider.html#breaks)
     */
    min: number;
  }

  export interface ClassedColorSliderMaxChangeEvent {
    oldValue: number;

    type: "max-change";

    value: number;
  }

  export interface ClassedColorSliderMinChangeEvent {
    oldValue: number;

    type: "min-change";

    value: number;
  }

  export interface ClassedColorSliderSegmentDragEvent {
    index: number;

    state: "start" | "drag";

    thumbIndices: number[];

    type: "segment-drag";
  }

  export interface ClassedColorSliderThumbChangeEvent {
    index: number;

    oldValue: number;

    type: "thumb-change";

    value: number;
  }

  export interface ClassedColorSliderThumbDragEvent {
    index: number;

    state: "start" | "drag";

    type: "thumb-drag";

    value: number;
  }

  interface ClassedSizeSlider extends SmartMappingSliderBase {
    /**
     * An array of class breaks with associated sizes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#breaks)
     */
    breaks: ClassedSizeSliderBreaks[];
    /**
     * Exposes various properties of the widget that can be styled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#style)
     */
    style: ClassedSizeSliderStyle;
    /**
     * The view model for 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#updateClassBreakInfos)
     */
    updateClassBreakInfos(breakInfos: ClassBreakInfo[]): ClassBreakInfo[];
    /**
     * A convenience function used to update the properties a ClassedSizeSlider from the result of the [createClassBreaksRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#updateClassBreakInfos)
     */
    updateClassBreakInfos(rendererResult: sizeClassBreaksRendererResult, histogramResult?: HistogramResult): void;

    on(name: "max-change", eventHandler: ClassedSizeSliderMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: ClassedSizeSliderMinChangeEventHandler): IHandle;

    on(name: "segment-drag", eventHandler: ClassedSizeSliderSegmentDragEventHandler): IHandle;

    on(name: "thumb-change", eventHandler: ClassedSizeSliderThumbChangeEventHandler): IHandle;

    on(name: "thumb-drag", eventHandler: ClassedSizeSliderThumbDragEventHandler): IHandle;
  }

  interface ClassedSizeSliderConstructor {
    /**
     * The ClassedSizeSlider widget is designed for authoring and exploring data-driven visualizations in any layer that can be rendered with size in a [ClassBreaksRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-ClassBreaksRenderer.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html)
     */

    new (properties?: ClassedSizeSliderProperties): ClassedSizeSlider;

    /**
     * A convenience function used to create a ClassedSizeSlider widget from the result of the [createClassBreaksRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createClassBreaksRenderer) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#fromRendererResult)
     */
    fromRendererResult(
      rendererResult: sizeClassBreaksRendererResult,
      histogramResult?: HistogramResult
    ): ClassedSizeSlider;
  }

  export const ClassedSizeSlider: ClassedSizeSliderConstructor;

  interface ClassedSizeSliderProperties extends SmartMappingSliderBaseProperties {
    /**
     * An array of class breaks with associated sizes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#breaks)
     */
    breaks?: ClassedSizeSliderBreaks[];
    /**
     * Exposes various properties of the widget that can be styled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#style)
     */
    style?: ClassedSizeSliderStyleProperties;
    /**
     * The view model for the ClassedSizeSlider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#viewModel)
     */
    viewModel?: ClassedSizeSliderViewModelProperties;
  }

  interface ClassedSizeSliderViewModel extends SmartMappingSliderViewModel {
    /**
     * An array of class breaks with associated sizes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider-ClassedSizeSliderViewModel.html#breaks)
     */
    breaks: ClassedSizeSliderViewModelBreaks[];

    on(name: "max-change", eventHandler: ClassedSizeSliderViewModelMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: ClassedSizeSliderViewModelMinChangeEventHandler): IHandle;
  }

  interface ClassedSizeSliderViewModelConstructor {
    /**
     * Provides the logic for the [ClassedSizeSlider](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider-ClassedSizeSliderViewModel.html)
     */

    new (properties?: ClassedSizeSliderViewModelProperties): ClassedSizeSliderViewModel;
  }

  export const ClassedSizeSliderViewModel: ClassedSizeSliderViewModelConstructor;

  interface ClassedSizeSliderViewModelProperties extends SmartMappingSliderViewModelProperties {
    /**
     * An array of class breaks with associated sizes.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider-ClassedSizeSliderViewModel.html#breaks)
     */
    breaks?: ClassedSizeSliderViewModelBreaks[];
  }

  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.
     *
     * [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.
     *
     * [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: "max";

    value: number;
  }

  export interface ClassedSizeSliderViewModelMinChangeEvent {
    oldValue: number;

    type: "min";

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#breaks)
     */
    max: number;
    /**
     * The min value of the break.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#breaks)
     */
    min: number;
  }

  export interface ClassedSizeSliderStyleProperties extends Object {
    /**
     * The color of the slider's track.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#style)
     */
    trackFillColor?: Color | number[] | string;
    /**
     * The background color of the slider's track.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#style)
     */
    trackBackgroundColor?: Color | number[] | string;
  }

  export interface ClassedSizeSliderStyle extends AnonymousAccessor {
    /**
     * The color of the slider's track.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#style)
     */
    trackFillColor?: Color;
    /**
     * The background color of the slider's track.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ClassedSizeSlider.html#style)
     */
    trackBackgroundColor?: Color;
  }

  export interface ClassedSizeSliderMaxChangeEvent {
    oldValue: number;

    type: "max-change";

    value: number;
  }

  export interface ClassedSizeSliderMinChangeEvent {
    oldValue: number;

    type: "min-change";

    value: number;
  }

  export interface ClassedSizeSliderSegmentDragEvent {
    index: number;

    state: "start" | "drag";

    thumbIndices: number[];

    type: "segment-drag";
  }

  export interface ClassedSizeSliderThumbChangeEvent {
    index: number;

    oldValue: number;

    type: "thumb-change";

    value: number;
  }

  export interface ClassedSizeSliderThumbDragEvent {
    index: number;

    state: "start" | "drag";

    type: "thumb-drag";

    value: number;
  }

  interface ColorSizeSlider extends SmartMappingSliderBase {
    /**
     * Only applicable when three thumbs (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#handlesSyncedToPrimary)
     */
    handlesSyncedToPrimary: boolean;
    /**
     * Only applicable when three thumbs (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#persistSizeRangeEnabled)
     */
    persistSizeRangeEnabled: boolean;
    /**
     * When `true`, the slider will render a third handle between the two handles already provided by default.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#primaryHandleEnabled)
     */
    primaryHandleEnabled: boolean;
    /**
     * 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 renderer associated with the slider.
     *
     * [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.
     *
     * [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-smartMapping-renderers-univariateColorSize.html#ContinuousRendererResult) of the [univariateColorSize.createContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#updateFromRendererResult)
     */
    updateFromRendererResult(
      rendererResult: univariateColorSizeContinuousRendererResult,
      histogramResult?: HistogramResult
    ): void;
    /**
     * A convenience function used to update a renderer generated with the [univariateColorSize.createContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer) method with the values obtained from the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#updateRenderer)
     */
    updateRenderer(renderer: ClassBreaksRenderer): ClassBreaksRenderer;
    /**
     * 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-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer) method with the values obtained from the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#updateVisualVariables)
     */
    updateVisualVariables(variables: (ColorVariable | SizeVariable)[]): (ColorVariable | SizeVariable)[];

    on(name: "max-change", eventHandler: ColorSizeSliderMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: ColorSizeSliderMinChangeEventHandler): IHandle;

    on(name: "segment-drag", eventHandler: ColorSizeSliderSegmentDragEventHandler): IHandle;

    on(name: "thumb-change", eventHandler: ColorSizeSliderThumbChangeEventHandler): IHandle;

    on(name: "thumb-drag", eventHandler: ColorSizeSliderThumbDragEventHandler): IHandle;
  }

  interface ColorSizeSliderConstructor {
    /**
     * The ColorSizeSlider widget is intended for authoring and exploring data-driven visualizations in any layer that can be rendered with a [ColorVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html) and a [SizeVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html)
     */

    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-smartMapping-renderers-univariateColorSize.html#ContinuousRendererResult) of the [univariateColorSize.createContinuousRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-univariateColorSize.html#createContinuousRenderer) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#fromRendererResult)
     */
    fromRendererResult(
      rendererResult: univariateColorSizeContinuousRendererResult,
      histogramResult?: HistogramResult
    ): ColorSizeSlider;
  }

  export const ColorSizeSlider: ColorSizeSliderConstructor;

  interface ColorSizeSliderProperties extends SmartMappingSliderBaseProperties {
    /**
     * Only applicable when three thumbs (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#handlesSyncedToPrimary)
     */
    handlesSyncedToPrimary?: boolean;
    /**
     * Only applicable when three thumbs (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#persistSizeRangeEnabled)
     */
    persistSizeRangeEnabled?: boolean;
    /**
     * When `true`, the slider will render a third handle between the two handles already provided by default.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#primaryHandleEnabled)
     */
    primaryHandleEnabled?: boolean;
    /**
     * 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 renderer associated with the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#stops)
     */
    stops?: ColorSizeStopProperties[];
    /**
     * The view model for the ColorSizeSlider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html#viewModel)
     */
    viewModel?: ColorSizeSliderViewModelProperties;
  }

  interface ColorSizeSliderViewModel extends SizeSliderViewModel {
    /**
     * 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 renderer associated with the slider.
     *
     * [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;
  }

  interface ColorSizeSliderViewModelConstructor {
    /**
     * Provides the logic for the [ColorSizeSlider](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider-ColorSizeSliderViewModel.html)
     */

    new (properties?: ColorSizeSliderViewModelProperties): ColorSizeSliderViewModel;
  }

  export const ColorSizeSliderViewModel: ColorSizeSliderViewModelConstructor;

  interface ColorSizeSliderViewModelProperties extends SizeSliderViewModelProperties {
    /**
     * 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 renderer associated with the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider-ColorSizeSliderViewModel.html#stops)
     */
    stops?: ColorSizeStopProperties[];
  }

  export interface ColorSizeSliderViewModelMaxChangeEvent {
    oldValue: number;

    type: "max";

    value: number;
  }

  export interface ColorSizeSliderViewModelMinChangeEvent {
    oldValue: number;

    type: "min";

    value: number;
  }

  /**
   * The return object of the [getStopInfo()](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSizeSlider-ColorSizeSliderViewModel.html#getStopInfo) 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 ColorSizeSliderMaxChangeEvent {
    oldValue: number;

    type: "max-change";

    value: number;
  }

  export interface ColorSizeSliderMinChangeEvent {
    oldValue: number;

    type: "min-change";

    value: number;
  }

  export interface ColorSizeSliderSegmentDragEvent {
    index: number;

    state: "start" | "drag";

    thumbIndices: number[];

    type: "segment-drag";
  }

  export interface ColorSizeSliderThumbChangeEvent {
    index: number;

    oldValue: number;

    type: "thumb-change";

    value: number;
  }

  export interface ColorSizeSliderThumbDragEvent {
    index: number;

    state: "start" | "drag";

    type: "thumb-drag";

    value: number;
  }

  interface ColorSlider extends SmartMappingSliderBase {
    /**
     * Only applicable when three thumbs (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#handlesSyncedToPrimary)
     */
    handlesSyncedToPrimary: boolean;
    /**
     * When `true`, the slider will render a third handle between the two handles already provided by default.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#primaryHandleEnabled)
     */
    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.
     *
     * [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.
     *
     * [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-smartMapping-renderers-color.html#ContinuousRendererResult) of the [createContinuousRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#updateFromRendererResult)
     */
    updateFromRendererResult(rendererResult: ContinuousRendererResult, histogramResult?: HistogramResult): void;

    on(name: "max-change", eventHandler: ColorSliderMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: ColorSliderMinChangeEventHandler): IHandle;

    on(name: "segment-drag", eventHandler: ColorSliderSegmentDragEventHandler): IHandle;

    on(name: "thumb-change", eventHandler: ColorSliderThumbChangeEventHandler): IHandle;

    on(name: "thumb-drag", eventHandler: ColorSliderThumbDragEventHandler): IHandle;
  }

  interface ColorSliderConstructor {
    /**
     * The ColorSlider widget is intended for authoring and exploring data-driven visualizations in any layer that can be rendered with a [ColorVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html)
     */

    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-smartMapping-renderers-color.html#ContinuousRendererResult) of the [createContinuousRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-color.html#createContinuousRenderer) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#fromRendererResult)
     */
    fromRendererResult(rendererResult: ContinuousRendererResult, histogramResult?: HistogramResult): ColorSlider;
  }

  export const ColorSlider: ColorSliderConstructor;

  interface ColorSliderProperties extends SmartMappingSliderBaseProperties {
    /**
     * Only applicable when three thumbs (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#handlesSyncedToPrimary)
     */
    handlesSyncedToPrimary?: boolean;
    /**
     * When `true`, the slider will render a third handle between the two handles already provided by default.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#primaryHandleEnabled)
     */
    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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html#viewModel)
     */
    viewModel?: ColorSliderViewModelProperties;
  }

  interface ColorSliderViewModel extends SmartMappingPrimaryHandleSliderViewModel {
    /**
     * The color stops from the [ColorVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html) to link to the slider.
     *
     * [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;
  }

  interface ColorSliderViewModelConstructor {
    /**
     * Provides the logic for the [ColorSlider](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-ColorSlider-ColorSliderViewModel.html)
     */

    new (properties?: ColorSliderViewModelProperties): ColorSliderViewModel;
  }

  export const ColorSliderViewModel: ColorSliderViewModelConstructor;

  interface ColorSliderViewModelProperties extends SmartMappingPrimaryHandleSliderViewModelProperties {
    /**
     * The color stops from the [ColorVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-ColorVariable.html) to link to the slider.
     *
     * [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: "max";

    value: number;
  }

  export interface ColorSliderViewModelMinChangeEvent {
    oldValue: number;

    type: "min";

    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 ColorSliderMaxChangeEvent {
    oldValue: number;

    type: "max-change";

    value: number;
  }

  export interface ColorSliderMinChangeEvent {
    oldValue: number;

    type: "min-change";

    value: number;
  }

  export interface ColorSliderSegmentDragEvent {
    index: number;

    state: "start" | "drag";

    thumbIndices: number[];

    type: "segment-drag";
  }

  export interface ColorSliderThumbChangeEvent {
    index: number;

    oldValue: number;

    type: "thumb-change";

    value: number;
  }

  export interface ColorSliderThumbDragEvent {
    index: number;

    state: "start" | "drag";

    type: "thumb-drag";

    value: number;
  }

  interface HeatmapSlider extends Widget {
    /**
     * The colorStops of the [HeatmapRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html) to associate with the slider.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-HeatmapSlider.html#viewModel)
     */
    viewModel: HeatmapSliderViewModel;

    on(name: "thumb-change", eventHandler: HeatmapSliderThumbChangeEventHandler): IHandle;

    on(name: "thumb-drag", eventHandler: HeatmapSliderThumbDragEventHandler): IHandle;
  }

  interface HeatmapSliderConstructor {
    /**
     * The HeatmapSlider widget is intended for authoring and exploring data-driven visualizations in any 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-widgets-smartMapping-HeatmapSlider.html)
     */

    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-smartMapping-renderers-heatmap.html#HeatmapRendererResult) of the [heatmapRendererCreator.createRenderer()](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-heatmap.html#createRenderer) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-HeatmapSlider.html#fromHeatmapRendererResult)
     */
    fromHeatmapRendererResult(rendererResult: HeatmapRendererResult): HeatmapSlider;
  }

  export const HeatmapSlider: HeatmapSliderConstructor;

  interface HeatmapSliderProperties extends WidgetProperties {
    /**
     * The colorStops of the [HeatmapRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html) to associate with the slider.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-HeatmapSlider.html#viewModel)
     */
    viewModel?: HeatmapSliderViewModelProperties;
  }

  interface HeatmapSliderViewModel extends SmartMappingSliderViewModel {
    /**
     * The colorStops of the [HeatmapRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html) to associate with the slider.
     *
     * [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;
  }

  interface HeatmapSliderViewModelConstructor {
    /**
     * Provides the logic for the [HeatmapSlider](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-HeatmapSlider.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-HeatmapSlider-HeatmapSliderViewModel.html)
     */

    new (properties?: HeatmapSliderViewModelProperties): HeatmapSliderViewModel;
  }

  export const HeatmapSliderViewModel: HeatmapSliderViewModelConstructor;

  interface HeatmapSliderViewModelProperties extends SmartMappingSliderViewModelProperties {
    /**
     * The colorStops of the [HeatmapRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-HeatmapRenderer.html) to associate with the slider.
     *
     * [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: "max";

    value: number;
  }

  export interface HeatmapSliderViewModelMinChangeEvent {
    oldValue: number;

    type: "min";

    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 HeatmapSliderThumbChangeEvent {
    index: number;

    oldValue: number;

    type: "thumb-change";

    value: number;
  }

  export interface HeatmapSliderThumbDragEvent {
    index: number;

    state: "start" | "drag";

    type: "thumb-drag";

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html#stops)
     */
    stops: OpacityStop[];
    /**
     * Exposes various properties of the widget that can be styled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html#style)
     */
    style: OpacitySliderStyle;
    /**
     * The view model for 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-smartMapping-renderers-opacity.html#VisualVariableResult) of the [createVisualVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-opacity.html#createVisualVariable) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html#updateFromVisualVariableResult)
     */
    updateFromVisualVariableResult(
      visualVariableResult: opacityVisualVariableResult,
      histogramResult?: HistogramResult
    ): void;

    on(name: "max-change", eventHandler: OpacitySliderMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: OpacitySliderMinChangeEventHandler): IHandle;

    on(name: "segment-drag", eventHandler: OpacitySliderSegmentDragEventHandler): IHandle;

    on(name: "thumb-change", eventHandler: OpacitySliderThumbChangeEventHandler): IHandle;

    on(name: "thumb-drag", eventHandler: OpacitySliderThumbDragEventHandler): IHandle;
  }

  interface OpacitySliderConstructor {
    /**
     * The OpacitySlider widget is intended for authoring and exploring data-driven visualizations in any layer that can be rendered with an [OpacityVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html)
     */

    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-smartMapping-renderers-opacity.html#VisualVariableResult) of the [createVisualVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-opacity.html#createVisualVariable) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html#fromVisualVariableResult)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html#stops)
     */
    stops?: OpacityStopProperties[];
    /**
     * Exposes various properties of the widget that can be styled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html#style)
     */
    style?: OpacitySliderStyleProperties;
    /**
     * The view model for the OpacitySlider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html#viewModel)
     */
    viewModel?: OpacitySliderViewModelProperties;
  }

  interface OpacitySliderViewModel extends SmartMappingSliderViewModel {
    /**
     * The opacity stops from the [OpacityVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html) to link to the slider.
     *
     * [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;
  }

  interface OpacitySliderViewModelConstructor {
    /**
     * Provides the logic for the [OpacitySlider](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider-OpacitySliderViewModel.html)
     */

    new (properties?: OpacitySliderViewModelProperties): OpacitySliderViewModel;
  }

  export const OpacitySliderViewModel: OpacitySliderViewModelConstructor;

  interface OpacitySliderViewModelProperties extends SmartMappingSliderViewModelProperties {
    /**
     * The opacity stops from the [OpacityVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-OpacityVariable.html) to link to the slider.
     *
     * [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: "max";

    value: number;
  }

  export interface OpacitySliderViewModelMinChangeEvent {
    oldValue: number;

    type: "min";

    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 OpacitySliderMaxChangeEvent {
    oldValue: number;

    type: "max-change";

    value: number;
  }

  export interface OpacitySliderMinChangeEvent {
    oldValue: number;

    type: "min-change";

    value: number;
  }

  export interface OpacitySliderStyleProperties extends Object {
    /**
     * The color of the slider's track.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html#style)
     */
    trackFillColor?: Color | number[] | string;
  }

  export interface OpacitySliderStyle extends AnonymousAccessor {
    /**
     * The color of the slider's track.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-OpacitySlider.html#style)
     */
    trackFillColor?: Color;
  }

  export interface OpacitySliderSegmentDragEvent {
    index: number;

    state: "start" | "drag";

    thumbIndices: number[];

    type: "segment-drag";
  }

  export interface OpacitySliderThumbChangeEvent {
    index: number;

    oldValue: number;

    type: "thumb-change";

    value: number;
  }

  export interface OpacitySliderThumbDragEvent {
    index: number;

    state: "start" | "drag";

    type: "thumb-drag";

    value: number;
  }

  interface SizeSlider extends SmartMappingSliderBase {
    /**
     * Only applicable when three thumbs (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#handlesSyncedToPrimary)
     */
    handlesSyncedToPrimary: boolean;
    /**
     * Only applicable when three thumbs (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#persistSizeRangeEnabled)
     */
    persistSizeRangeEnabled: boolean;
    /**
     * When `true`, the slider will render a third handle between the two handles already provided by default.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#primaryHandleEnabled)
     */
    primaryHandleEnabled: boolean;
    /**
     * 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[];
    /**
     * Exposes various properties of the widget that can be styled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#style)
     */
    style: SizeSliderStyle;
    /**
     * The view model for 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-smartMapping-renderers-size.html#ContinuousRendererResult) of the [createContinuousRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#updateFromRendererResult)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#updateVisualVariable)
     */
    updateVisualVariable(sizeVariable: SizeVariable): SizeVariable;

    on(name: "max-change", eventHandler: SizeSliderMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: SizeSliderMinChangeEventHandler): IHandle;

    on(name: "segment-drag", eventHandler: SizeSliderSegmentDragEventHandler): IHandle;

    on(name: "thumb-change", eventHandler: SizeSliderThumbChangeEventHandler): IHandle;

    on(name: "thumb-drag", eventHandler: SizeSliderThumbDragEventHandler): IHandle;
  }

  interface SizeSliderConstructor {
    /**
     * The SizeSlider widget is intended for authoring and exploring data-driven visualizations in any layer that can be rendered with a [SizeVariable](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-visualVariables-SizeVariable.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html)
     */

    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-smartMapping-renderers-size.html#ContinuousRendererResult) of the [createContinuousRenderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-smartMapping-renderers-size.html#createContinuousRenderer) method.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#fromRendererResult)
     */
    fromRendererResult(rendererResult: sizeContinuousRendererResult, histogramResult?: HistogramResult): SizeSlider;
  }

  export const SizeSlider: SizeSliderConstructor;

  interface SizeSliderProperties extends SmartMappingSliderBaseProperties {
    /**
     * Only applicable when three thumbs (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#handlesSyncedToPrimary)
     */
    handlesSyncedToPrimary?: boolean;
    /**
     * Only applicable when three thumbs (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#persistSizeRangeEnabled)
     */
    persistSizeRangeEnabled?: boolean;
    /**
     * When `true`, the slider will render a third handle between the two handles already provided by default.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#primaryHandleEnabled)
     */
    primaryHandleEnabled?: boolean;
    /**
     * 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[];
    /**
     * Exposes various properties of the widget that can be styled.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#style)
     */
    style?: SizeSliderStyleProperties;
    /**
     * The view model for the SizeSlider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#viewModel)
     */
    viewModel?: SizeSliderViewModelProperties;
  }

  interface SizeSliderViewModel extends SmartMappingPrimaryHandleSliderViewModel {
    /**
     * This property is typically used in diverging, or `above-and-below` renderer configurations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider-SizeSliderViewModel.html#persistSizeRangeEnabled)
     */
    persistSizeRangeEnabled: boolean;
    /**
     * 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;
  }

  interface SizeSliderViewModelConstructor {
    /**
     * Provides the logic for the [SizeSlider](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider-SizeSliderViewModel.html)
     */

    new (properties?: SizeSliderViewModelProperties): SizeSliderViewModel;
  }

  export const SizeSliderViewModel: SizeSliderViewModelConstructor;

  interface SizeSliderViewModelProperties extends SmartMappingPrimaryHandleSliderViewModelProperties {
    /**
     * This property is typically used in diverging, or `above-and-below` renderer configurations.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider-SizeSliderViewModel.html#persistSizeRangeEnabled)
     */
    persistSizeRangeEnabled?: boolean;
    /**
     * 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: "max";

    value: number;
  }

  export interface SizeSliderViewModelMinChangeEvent {
    oldValue: number;

    type: "min";

    value: number;
  }

  export interface SizeSliderMaxChangeEvent {
    oldValue: number;

    type: "max-change";

    value: number;
  }

  export interface SizeSliderMinChangeEvent {
    oldValue: number;

    type: "min-change";

    value: number;
  }

  export interface SizeSliderSegmentDragEvent {
    index: number;

    state: "start" | "drag";

    thumbIndices: number[];

    type: "segment-drag";
  }

  export interface SizeSliderStyleProperties extends Object {
    /**
     * The color of the slider's track.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#style)
     */
    trackFillColor?: Color | number[] | string;
    /**
     * The background color of the slider's track.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#style)
     */
    trackBackgroundColor?: Color | number[] | string;
  }

  export interface SizeSliderStyle extends AnonymousAccessor {
    /**
     * The color of the slider's track.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#style)
     */
    trackFillColor?: Color;
    /**
     * The background color of the slider's track.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SizeSlider.html#style)
     */
    trackBackgroundColor?: Color;
  }

  export interface SizeSliderThumbChangeEvent {
    index: number;

    oldValue: number;

    type: "thumb-change";

    value: number;
  }

  export interface SizeSliderThumbDragEvent {
    index: number;

    state: "start" | "drag";

    type: "thumb-drag";

    value: number;
  }

  interface SmartMappingPrimaryHandleSliderViewModel extends SmartMappingSliderViewModel {
    /**
     * Only applicable when three thumbs (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingPrimaryHandleSliderViewModel.html#handlesSyncedToPrimary)
     */
    handlesSyncedToPrimary: boolean;
    /**
     * When `true`, the slider will render a third handle between the two handles already provided by default.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingPrimaryHandleSliderViewModel.html#primaryHandleEnabled)
     */
    primaryHandleEnabled: boolean;

    on(name: "max-change", eventHandler: SmartMappingPrimaryHandleSliderViewModelMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: SmartMappingPrimaryHandleSliderViewModelMinChangeEventHandler): IHandle;
  }

  interface SmartMappingPrimaryHandleSliderViewModelConstructor {
    /**
     * Shared properties for sliders that have a [primaryHandle](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingPrimaryHandleSliderViewModel.html#primaryHandleEnabled) option.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingPrimaryHandleSliderViewModel.html)
     */

    new (properties?: SmartMappingPrimaryHandleSliderViewModelProperties): SmartMappingPrimaryHandleSliderViewModel;
  }

  export const SmartMappingPrimaryHandleSliderViewModel: SmartMappingPrimaryHandleSliderViewModelConstructor;

  interface SmartMappingPrimaryHandleSliderViewModelProperties extends SmartMappingSliderViewModelProperties {
    /**
     * Only applicable when three thumbs (i.e.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingPrimaryHandleSliderViewModel.html#handlesSyncedToPrimary)
     */
    handlesSyncedToPrimary?: boolean;
    /**
     * When `true`, the slider will render a third handle between the two handles already provided by default.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingPrimaryHandleSliderViewModel.html#primaryHandleEnabled)
     */
    primaryHandleEnabled?: boolean;
  }

  export interface SmartMappingPrimaryHandleSliderViewModelMaxChangeEvent {
    oldValue: number;

    type: "max";

    value: number;
  }

  export interface SmartMappingPrimaryHandleSliderViewModelMinChangeEvent {
    oldValue: number;

    type: "min";

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#histogramConfig)
     */
    histogramConfig: HistogramConfig;
    /**
     * A function used to format user inputs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#inputFormatFunction)
     */
    inputFormatFunction: SmartMappingSliderBaseLabelFormatter;
    /**
     * Function used to parse slider inputs formatted by the [inputFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#inputFormatFunction).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#inputParseFunction)
     */
    inputParseFunction: InputParser;
    /**
     * 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 average values.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#min)
     */
    min: number;
    /**
     * Defines how slider thumb values should be rounded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#precision)
     */
    precision: number;
    /**
     * The state of the view model.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#state)
     */
    readonly state: "ready" | "disabled";
    /**
     * When `true`, all segments will sync together in updating thumb values when the user drags any segment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#syncedSegmentsEnabled)
     */
    syncedSegmentsEnabled: boolean;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#visibleElements)
     */
    visibleElements: SmartMappingSliderBaseVisibleElements;
    /**
     * Zooms the slider track to the bounds provided in this property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#zoomOptions)
     */
    zoomOptions: SmartMappingSliderBaseZoomOptions;

    on(name: "max-change", eventHandler: SmartMappingSliderBaseMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: SmartMappingSliderBaseMinChangeEventHandler): IHandle;

    on(name: "segment-drag", eventHandler: SmartMappingSliderBaseSegmentDragEventHandler): IHandle;

    on(name: "thumb-change", eventHandler: SmartMappingSliderBaseThumbChangeEventHandler): IHandle;

    on(name: "thumb-drag", eventHandler: SmartMappingSliderBaseThumbDragEventHandler): IHandle;
  }

  interface SmartMappingSliderBaseConstructor {
    /**
     * The base class for all Smart Mapping slider widgets.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#histogramConfig)
     */
    histogramConfig?: HistogramConfig;
    /**
     * A function used to format user inputs.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#inputFormatFunction)
     */
    inputFormatFunction?: SmartMappingSliderBaseLabelFormatter;
    /**
     * Function used to parse slider inputs formatted by the [inputFormatFunction](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#inputFormatFunction).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#inputParseFunction)
     */
    inputParseFunction?: InputParser;
    /**
     * 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 average values.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#min)
     */
    min?: number;
    /**
     * Defines how slider thumb values should be rounded.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#precision)
     */
    precision?: number;
    /**
     * When `true`, all segments will sync together in updating thumb values when the user drags any segment.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#syncedSegmentsEnabled)
     */
    syncedSegmentsEnabled?: boolean;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#visibleElements)
     */
    visibleElements?: SmartMappingSliderBaseVisibleElements;
    /**
     * Zooms the slider track to the bounds provided in this property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#zoomOptions)
     */
    zoomOptions?: SmartMappingSliderBaseZoomOptions;
  }

  /**
   * 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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#HistogramConfig)
     */
    barCreatedFunction?: BarCreatedFunction;
    /**
     * The bins of the histogram.
     *
     * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#HistogramConfig)
     */
    standardDeviationCount?: number;
  }

  export type SmartMappingSliderBaseLabelFormatter = (
    value: number,
    type?: "average" | "min" | "max" | "value",
    index?: number
  ) => string;

  export interface SmartMappingSliderBaseMaxChangeEvent {
    oldValue: number;

    type: "max-change";

    value: number;
  }

  export interface SmartMappingSliderBaseMinChangeEvent {
    oldValue: number;

    type: "min-change";

    value: number;
  }

  export interface SmartMappingSliderBaseSegmentDragEvent {
    index: number;

    state: "start" | "drag";

    thumbIndices: number[];

    type: "segment-drag";
  }

  export interface SmartMappingSliderBaseVisibleElements extends Object {
    /**
     * When `true`, displays interactive segments on the track that maintain the interval between two slider thumbs/handles.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#visibleElements)
     */
    interactiveTrack?: boolean;
  }

  export interface SmartMappingSliderBaseZoomOptions extends Object {
    /**
     * The lower bound of the zoom.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#zoomOptions)
     */
    min?: number;
    /**
     * The upper bound of the zoom.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderBase.html#zoomOptions)
     */
    max?: number;
  }

  export interface SmartMappingSliderBaseThumbChangeEvent {
    index: number;

    oldValue: number;

    type: "thumb-change";

    value: number;
  }

  export interface SmartMappingSliderBaseThumbDragEvent {
    index: number;

    state: "start" | "drag";

    type: "thumb-drag";

    value: number;
  }

  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 SmartMappingSliderViewModel extends SliderViewModel {
    /**
     * Enables zooming on the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderViewModel.html#zoomingEnabled)
     */
    zoomingEnabled: boolean;
    /**
     * Zooms the slider track to the bounds provided in this property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderViewModel.html#zoomOptions)
     */
    zoomOptions: SmartMappingSliderViewModelZoomOptions;

    /**
     * Gets the [max](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderViewModel.html#max) value of the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderViewModel.html#getUnzoomedMax)
     */
    getUnzoomedMax(): void;
    /**
     * Gets the [min](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderViewModel.html#min) value of the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderViewModel.html#getUnzoomedMin)
     */
    getUnzoomedMin(): void;

    on(name: "max-change", eventHandler: SmartMappingSliderViewModelMaxChangeEventHandler): IHandle;

    on(name: "min-change", eventHandler: SmartMappingSliderViewModelMinChangeEventHandler): IHandle;
  }

  interface SmartMappingSliderViewModelConstructor {
    /**
     * Provides the shared base logic for the smart mapping slider view models.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderViewModel.html)
     */

    new (properties?: SmartMappingSliderViewModelProperties): SmartMappingSliderViewModel;
  }

  export const SmartMappingSliderViewModel: SmartMappingSliderViewModelConstructor;

  interface SmartMappingSliderViewModelProperties extends SliderViewModelProperties {
    /**
     * Enables zooming on the slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderViewModel.html#zoomingEnabled)
     */
    zoomingEnabled?: boolean;
    /**
     * Zooms the slider track to the bounds provided in this property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderViewModel.html#zoomOptions)
     */
    zoomOptions?: SmartMappingSliderViewModelZoomOptions;
  }

  export interface SmartMappingSliderViewModelMaxChangeEvent {
    oldValue: number;

    type: "max";

    value: number;
  }

  export interface SmartMappingSliderViewModelMinChangeEvent {
    oldValue: number;

    type: "min";

    value: number;
  }

  export interface SmartMappingSliderViewModelZoomOptions extends Object {
    /**
     * The lower bound of the zoom.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderViewModel.html#zoomOptions)
     */
    min?: number;
    /**
     * The upper bound of the zoom.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-SmartMappingSliderViewModel.html#zoomOptions)
     */
    max?: number;
  }

  /**
   * Various utils for tying Smart Mapping renderers to the Smart Mapping slider widgets.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-support-utils.html)
   */
  interface supportUtils {
    /**
     * Formats a UNIX timestamp to a basic date string.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-support-utils.html#formatDateLabel)
     */
    formatDateLabel(value: number): string;
    /**
     * Formats a numeric value for display as a label based on the current locale.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-smartMapping-support-utils.html#formatNumberLabel)
     */
    formatNumberLabel(value: number): string;
    /**
     * 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)
     */
    getDeviationValues(standardDeviation: number, average: number, count: number): number[];
  }

  export const supportUtils: supportUtils;

  interface SpinnerViewModel extends Accessor {}

  interface SpinnerViewModelConstructor {
    new (properties?: SpinnerViewModelProperties): SpinnerViewModel;
  }

  export const SpinnerViewModel: SpinnerViewModelConstructor;

  interface SpinnerViewModelProperties {}

  interface DatePicker extends Widget {
    /**
     * Indicates whether the date gets updated when the user changes the month in the drop-down.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-DatePicker.html#commitOnMonthChange)
     */
    commitOnMonthChange: boolean;
    /**
     * The input value for the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-DatePicker.html#value)
     */
    value: Date;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-DatePicker.html#viewModel)
     */
    viewModel: DatePickerViewModel;
  }

  interface DatePickerConstructor {
    /**
     * The `DatePicker` class provides functionality to easily choose an input date.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-DatePicker.html)
     */

    new (properties?: DatePickerProperties): DatePicker;
  }

  export const DatePicker: DatePickerConstructor;

  interface DatePickerProperties extends WidgetProperties {
    /**
     * Indicates whether the date gets updated when the user changes the month in the drop-down.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-DatePicker.html#commitOnMonthChange)
     */
    commitOnMonthChange?: boolean;
    /**
     * The input value for the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-DatePicker.html#value)
     */
    value?: DateProperties;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-DatePicker.html#viewModel)
     */
    viewModel?: DatePickerViewModelProperties;
  }

  interface DatePickerViewModel extends Accessor, MomentElementViewModel {}

  interface DatePickerViewModelConstructor {
    /**
     * Provides the logic for the [DatePicker](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-DatePicker.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-DatePickerViewModel.html)
     */

    new (properties?: DatePickerViewModelProperties): DatePickerViewModel;
  }

  export const DatePickerViewModel: DatePickerViewModelConstructor;

  interface DatePickerViewModelProperties extends MomentElementViewModelProperties {}

  interface GeolocationPositioning {
    /**
     * The HTML5 Geolocation Position options for locating.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-GeolocationPositioning.html#geolocationOptions)
     */
    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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-GeolocationPositioning.html#scale)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-GeolocationPositioning.html#geolocationOptions)
     */
    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)
     */
    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-GeolocationPositioning.html#scale)
     */
    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 & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  interface GoTo {
    /**
     * This function provides the ability to override either the IMapView 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 IMapView 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 MomentElementViewModel {
    /**
     * The current state of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-MomentElementViewModel.html#state)
     */
    state: "ready";
    /**
     * The selected date.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-MomentElementViewModel.html#value)
     */
    value: Date;
  }

  interface MomentElementViewModelConstructor {
    new (): MomentElementViewModel;
  }

  export const MomentElementViewModel: MomentElementViewModelConstructor;

  interface MomentElementViewModelProperties {
    /**
     * The current state of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-MomentElementViewModel.html#state)
     */
    state?: "ready";
    /**
     * The selected date.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-MomentElementViewModel.html#value)
     */
    value?: DateProperties;
  }

  interface TimePicker extends Widget {
    /**
     * The input value for the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-TimePicker.html#value)
     */
    value: Date;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-TimePicker.html#viewModel)
     */
    viewModel: TimePickerViewModel;
  }

  interface TimePickerConstructor {
    /**
     * The `TimePicker` class provides functionality to easily choose an input date.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-TimePicker.html)
     */

    new (properties?: TimePickerProperties): TimePicker;
  }

  export const TimePicker: TimePickerConstructor;

  interface TimePickerProperties extends WidgetProperties {
    /**
     * The input value for the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-TimePicker.html#value)
     */
    value?: DateProperties;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-TimePicker.html#viewModel)
     */
    viewModel?: TimePickerViewModelProperties;
  }

  interface TimePickerViewModel extends Accessor, MomentElementViewModel {}

  interface TimePickerViewModelConstructor {
    /**
     * Provides the logic for the [TimePicker](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-TimePicker.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-TimePickerViewModel.html)
     */

    new (properties?: TimePickerViewModelProperties): TimePickerViewModel;
  }

  export const TimePickerViewModel: TimePickerViewModelConstructor;

  interface TimePickerViewModelProperties extends MomentElementViewModelProperties {}

  namespace widget {
    /**
     * This convenience decorator is used to help simplify accessibility within the widget keyboard events.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-widget.html#accessibleHandler)
     */
    function 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)
     */
    function cssTransition(type: "enter" | "exit", className: string): Function;
    /**
     * Utility method used to determine if a pressed key should activate button behavior.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-widget.html#isActivationKey)
     */
    function isActivationKey(key: string): boolean;
    /**
     * Utility method used to determine if the directionality of 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)
     */
    function isRTL(): boolean;
    /**
     * This convenience decorator is used to help simplify localization of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-widget.html#messageBundle)
     */
    function messageBundle(bundleId?: string): Function;
    /**
     * This convenience decorator marks a property for automatic rendering.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-widget.html#renderable)
     */
    function 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-widget.html#storeNode)
     */
    function storeNode(node: HTMLElement): void;
    /**
     * 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)
     */
    function vmEvent(eventNames: string | string[]): Function;

    namespace tsx {
      /**
       * 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.
       *
       * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-support-widget.html#tsx)
       */
      function tsx(selector: string, properties?: any, children?: any): any;

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

        interface Element {}
      }
    }
  }

  export type GoToOverride = (view: any | SceneView, goToParameters: any) => void;

  interface Swipe extends Widget {
    /**
     * The direction the Swipe widget moves across the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#direction)
     */
    direction: "horizontal" | "vertical";
    /**
     * When `true`, sets the widget to a disabled state so the user cannot interact with it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#disabled)
     */
    disabled: boolean;
    /**
     * The text that shows in a tooltip when hovering over the handle of the Swipe widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#dragLabel)
     */
    dragLabel: string;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#iconClass)
     */
    iconClass: string;
    /**
     * A collection of [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html)s that will show on the left or top side of the Swipe widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#leadingLayers)
     */
    leadingLayers: Collection<Layer>;
    /**
     * The position of the Swipe widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#position)
     */
    position: number;
    /**
     * A collection of [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html)s that will show on the right or bottom side of the Swipe widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#trailingLayers)
     */
    trailingLayers: Collection<Layer>;
    /**
     * 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-widgets-Swipe.html#view)
     */
    view: MapView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#viewModel)
     */
    viewModel: SwipeViewModel;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#visibleElements)
     */
    visibleElements: widgetsSwipeVisibleElements;
  }

  interface SwipeConstructor {
    /**
     * The Swipe widget provides a tool to show a portion of a layer or layers on top of a map.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html)
     */

    new (properties?: SwipeProperties): Swipe;
  }

  export const Swipe: SwipeConstructor;

  interface SwipeProperties extends WidgetProperties {
    /**
     * The direction the Swipe widget moves across the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#direction)
     */
    direction?: "horizontal" | "vertical";
    /**
     * When `true`, sets the widget to a disabled state so the user cannot interact with it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#disabled)
     */
    disabled?: boolean;
    /**
     * The text that shows in a tooltip when hovering over the handle of the Swipe widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#dragLabel)
     */
    dragLabel?: string;
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#iconClass)
     */
    iconClass?: string;
    /**
     * A collection of [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html)s that will show on the left or top side of the Swipe widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#leadingLayers)
     */
    leadingLayers?: CollectionProperties<LayerProperties>;
    /**
     * The position of the Swipe widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#position)
     */
    position?: number;
    /**
     * A collection of [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html)s that will show on the right or bottom side of the Swipe widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#trailingLayers)
     */
    trailingLayers?: CollectionProperties<LayerProperties>;
    /**
     * 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-widgets-Swipe.html#view)
     */
    view?: MapViewProperties;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#viewModel)
     */
    viewModel?: SwipeViewModelProperties;
    /**
     * The visible elements that are displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#visibleElements)
     */
    visibleElements?: widgetsSwipeVisibleElements;
  }

  interface SwipeViewModel extends Accessor {
    /**
     * The direction the Swipe widget moves across the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe-SwipeViewModel.html#direction)
     */
    direction: "horizontal" | "vertical";
    /**
     * A collection of [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html)s that will show on the left or top side of Swipe widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe-SwipeViewModel.html#leadingLayers)
     */
    leadingLayers: Collection<Layer>;
    /**
     * The position of the Swipe widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe-SwipeViewModel.html#position)
     */
    position: number;
    /**
     * The current state of the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe-SwipeViewModel.html#state)
     */
    readonly state: "disabled" | "ready";
    /**
     * A collection of [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html)s that will show on the right or bottom side of Swipe widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe-SwipeViewModel.html#trailingLayers)
     */
    trailingLayers: Collection<Layer>;
    /**
     * 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-widgets-Swipe-SwipeViewModel.html#view)
     */
    view: MapView;
  }

  interface SwipeViewModelConstructor {
    /**
     * Provides the logic for the [Swipe](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe-SwipeViewModel.html)
     */

    new (properties?: SwipeViewModelProperties): SwipeViewModel;
  }

  export const SwipeViewModel: SwipeViewModelConstructor;

  interface SwipeViewModelProperties {
    /**
     * The direction the Swipe widget moves across the view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe-SwipeViewModel.html#direction)
     */
    direction?: "horizontal" | "vertical";
    /**
     * A collection of [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html)s that will show on the left or top side of Swipe widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe-SwipeViewModel.html#leadingLayers)
     */
    leadingLayers?: CollectionProperties<LayerProperties>;
    /**
     * The position of the Swipe widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe-SwipeViewModel.html#position)
     */
    position?: number;
    /**
     * A collection of [Layer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-Layer.html)s that will show on the right or bottom side of Swipe widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe-SwipeViewModel.html#trailingLayers)
     */
    trailingLayers?: CollectionProperties<LayerProperties>;
    /**
     * 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-widgets-Swipe-SwipeViewModel.html#view)
     */
    view?: MapViewProperties;
  }

  export interface widgetsSwipeVisibleElements extends SwipeVisibleElements {
    /**
     * Indicates whether the handle from which you drag the widget is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#visibleElements)
     */
    handle: boolean;
    /**
     * Indicates whether the divider between the leading and trailing layers is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#visibleElements)
     */
    divider: boolean;
  }

  /**
   * The visible elements that are displayed within the widget.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#VisibleElements)
   */
  export interface SwipeVisibleElements extends Object {
    /**
     * Indicates whether the handle from which you drag the widget is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#VisibleElements)
     */
    handle: boolean;
    /**
     * Indicates whether the divider between the leading and trailing layers is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Swipe.html#VisibleElements)
     */
    divider: boolean;
  }

  interface TableList extends Widget {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList.html#iconClass)
     */
    iconClass: string;
    /**
     * Specifies a function that accesses each [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-ListItem.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList.html#listItemCreatedFunction)
     */
    listItemCreatedFunction: TableListListItemCreatedHandler;
    /**
     * A reference to a [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) containing the tables.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList.html#map)
     */
    map: Map | WebMap;
    /**
     * Indicates whether more than one [list item](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-ListItem.html) can be selected by a user at a single time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList.html#multipleSelectionEnabled)
     */
    multipleSelectionEnabled: boolean;
    /**
     * A collection of selected [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-ListItem.html)s representing table list items selected by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList.html#selectedItems)
     */
    selectedItems: Collection<TableListListItem>;
    /**
     * Indicates whether [list items](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-ListItem.html) may be selected by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList.html#selectionEnabled)
     */
    selectionEnabled: boolean;
    /**
     * The collection of table [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-ListItem.html)s displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList.html#tableItems)
     */
    readonly tableItems: Collection<TableListListItem>;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList.html#viewModel)
     */
    viewModel: TableListViewModel;

    /**
     * Triggers the [trigger-action](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList.html#event-trigger-action) event and executes the 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-TableList.html#triggerAction)
     */
    triggerAction(action: ActionButton | ActionToggle, item: TableListListItem): void;

    on(name: "trigger-action", eventHandler: TableListTriggerActionEventHandler): IHandle;
  }

  interface TableListConstructor {
    /**
     * The TableList widget provides a way to display a list of tables associated with a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList.html)
     */

    new (properties?: TableListProperties): TableList;
  }

  export const TableList: TableListConstructor;

  interface TableListProperties extends WidgetProperties {
    /**
     * The widget's default CSS icon class.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList.html#iconClass)
     */
    iconClass?: string;
    /**
     * Specifies a function that accesses each [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-ListItem.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList.html#listItemCreatedFunction)
     */
    listItemCreatedFunction?: TableListListItemCreatedHandler;
    /**
     * A reference to a [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) containing the tables.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList.html#map)
     */
    map?: MapProperties | WebMapProperties;
    /**
     * Indicates whether more than one [list item](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-ListItem.html) can be selected by a user at a single time.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList.html#multipleSelectionEnabled)
     */
    multipleSelectionEnabled?: boolean;
    /**
     * A collection of selected [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-ListItem.html)s representing table list items selected by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList.html#selectedItems)
     */
    selectedItems?: CollectionProperties<TableListListItem>;
    /**
     * Indicates whether [list items](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-ListItem.html) may be selected by the user.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList.html#selectionEnabled)
     */
    selectionEnabled?: boolean;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList.html#viewModel)
     */
    viewModel?: TableListViewModel;
  }

  interface TableListListItem {
    /**
     * Indicates whether the actions panel is open in the TableList.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-ListItem.html#actionsOpen)
     */
    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-TableList-ListItem.html#actionsSections)
     */
    actionsSections: Collection<Collection<ActionButton | ActionToggle>>;
    /**
     * The Error object returned if an error occurred.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-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-TableList-ListItem.html#layer)
     */
    layer: Layer;
    /**
     * The title of the table.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-ListItem.html#title)
     */
    title: string;

    /**
     * Creates a deep clone of this object.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-ListItem.html#clone)
     */
    clone(): TableListListItem;
  }

  interface TableListListItemConstructor {
    /**
     * In the [TableList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList.html) widget UI, the ListItem represents a layer's table added to the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-ListItem.html)
     */

    new (): TableListListItem;
  }

  export const TableListListItem: TableListListItemConstructor;

  /**
   * Provides the logic for the [TableList](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList.html) widget.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-TableListViewModel.html)
   */
  interface TableListViewModel {
    /**
     * Specifies a function that accesses each [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-ListItem.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-TableListViewModel.html#listItemCreatedFunction)
     */
    listItemCreatedFunction: TableListViewModelListItemCreatedHandler;
    /**
     * A reference to the [map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) containing the tables.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-TableListViewModel.html#map)
     */
    map: Map | WebMap;
    /**
     * The view model's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-TableListViewModel.html#state)
     */
    readonly state: "loading" | "ready" | "disabled";
    /**
     * The collection of table [ListItem](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-ListItem.html)s displayed within the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TableList-TableListViewModel.html#tableItems)
     */
    readonly tableItems: Collection<TableListListItem>;
  }

  export const TableListViewModel: TableListViewModel;

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

  export interface TableListViewModelTriggerActionEvent {
    action: ActionButton | ActionToggle;

    item: TableListListItem;
  }

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

  export interface TableListTriggerActionEvent {
    action: ActionButton | ActionToggle;

    item: TableListListItem;
  }

  interface TimeSlider extends Widget {
    /**
     * When `true`, sets the widget to a disabled state so the user cannot interact with it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#disabled)
     */
    disabled: boolean;
    /**
     * 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)
     */
    readonly effectiveStops: Date[];
    /**
     * The temporal extent of the entire slider.
     *
     * [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;
    /**
     * A function used to specify custom formatting and styling of the min, max, and extent labels of the TimeSlider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#labelFormatFunction)
     */
    labelFormatFunction: DateLabelFormatter;
    /**
     * Determines the layout used by the TimeSlider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#layout)
     */
    layout: "auto" | "compact" | "wide";
    /**
     * 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)
     */
    loop: boolean;
    /**
     * The time slider mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#mode)
     */
    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)
     */
    playRate: number;
    /**
     * Defines specific locations on the time slider where thumbs will snap to when manipulated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#stops)
     */
    stops: StopsByDates | StopsByCount | StopsByInterval;
    /**
     * When set, overrides the default TimeSlider ticks labelling system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#tickConfigs)
     */
    tickConfigs: TickConfig[];
    /**
     * The current time extent of the time slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#timeExtent)
     */
    timeExtent: TimeExtent;
    /**
     * Shows/hides time in the display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#timeVisible)
     */
    timeVisible: boolean;
    /**
     * The user defined time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#values)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this 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;
    /**
     * Stops the time slider's temporal playback.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#stop)
     */
    stop(): void;
    /**
     * Updates the [time slider](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#TimeSlider) widget definition in the provided [WebMap](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#updateWebDocument)
     */
    updateWebDocument(webmap: WebMap): void;
  }

  interface TimeSliderConstructor {
    /**
     * The TimeSlider widget simplifies visualization of temporal data in your application.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html)
     */

    new (properties?: TimeSliderProperties): TimeSlider;
  }

  export const TimeSlider: TimeSliderConstructor;

  interface TimeSliderProperties extends WidgetProperties {
    /**
     * When `true`, sets the widget to a disabled state so the user cannot interact with it.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#disabled)
     */
    disabled?: boolean;
    /**
     * The temporal extent of the entire slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#fullTimeExtent)
     */
    fullTimeExtent?: TimeExtentProperties;
    /**
     * A function used to specify custom formatting and styling of the min, max, and extent labels of the TimeSlider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#labelFormatFunction)
     */
    labelFormatFunction?: DateLabelFormatter;
    /**
     * Determines the layout used by the TimeSlider widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#layout)
     */
    layout?: "auto" | "compact" | "wide";
    /**
     * 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)
     */
    loop?: boolean;
    /**
     * The time slider mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#mode)
     */
    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)
     */
    playRate?: number;
    /**
     * Defines specific locations on the time slider where thumbs will snap to when manipulated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#stops)
     */
    stops?: StopsByDates | StopsByCount | StopsByInterval;
    /**
     * When set, overrides the default TimeSlider ticks labelling system.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#tickConfigs)
     */
    tickConfigs?: TickConfig[];
    /**
     * The current time extent of the time slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#timeExtent)
     */
    timeExtent?: TimeExtentProperties;
    /**
     * Shows/hides time in the display.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#timeVisible)
     */
    timeVisible?: boolean;
    /**
     * The user defined time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#values)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this 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)
     */
    readonly effectiveStops: Date[];
    /**
     * The temporal extent of the entire slider.
     *
     * [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)
     */
    loop: boolean;
    /**
     * The time slider mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#mode)
     */
    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-TimeSliderViewModel.html#playRate)
     */
    playRate: number;
    /**
     * The view model's state.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#state)
     */
    readonly state: "disabled" | "ready" | "playing";
    /**
     * Defines specific locations on the time slider where thumbs will snap to when manipulated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#stops)
     */
    stops: StopsByDates | StopsByCount | StopsByInterval;
    /**
     * The current time extent of the time slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#timeExtent)
     */
    timeExtent: TimeExtent;
    /**
     * The user defined time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#values)
     */
    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).
     *
     * [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;
    /**
     * Updates the [time slider](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html#TimeSlider) widget definition in the provided [WebMap](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#updateWebDocument)
     */
    updateWebDocument(webmap: WebMap): void;
  }

  interface TimeSliderViewModelConstructor {
    /**
     * Provides the logic for the [TimeSlider](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html)
     */

    new (properties?: TimeSliderViewModelProperties): TimeSliderViewModel;
  }

  export const TimeSliderViewModel: TimeSliderViewModelConstructor;

  interface TimeSliderViewModelProperties {
    /**
     * The temporal extent of the entire slider.
     *
     * [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)
     */
    loop?: boolean;
    /**
     * The time slider mode.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#mode)
     */
    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-TimeSliderViewModel.html#playRate)
     */
    playRate?: number;
    /**
     * Defines specific locations on the time slider where thumbs will snap to when manipulated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#stops)
     */
    stops?: StopsByDates | StopsByCount | StopsByInterval;
    /**
     * The current time extent of the time slider.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#timeExtent)
     */
    timeExtent?: TimeExtentProperties;
    /**
     * The user defined time extent.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#values)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider-TimeSliderViewModel.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  export type DateLabelFormatter = (
    value: Date | Date[],
    type?: "min" | "max" | "extent",
    element?: HTMLElement,
    layout?: "compact" | "wide"
  ) => void;

  /**
   * Divides the time slider's [fullTimeExtent](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#fullTimeExtent) into equal parts.
   *
   * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#StopsByCount)
   */
  export interface StopsByCount extends Object {
    /**
     * Number of evenly spaced divisions.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html#StopsByCount)
     */
    count: number;
    /**
     * The time period to divide.
     *
     * [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.
   *
   * [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).
   *
   * [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.
     *
     * [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.
     *
     * [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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#geolocationOptions)
     */
    geolocationOptions: any;
    /**
     * Indicates whether the widget will automatically navigate the view to the user's position when a geolocation result is found.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#goToLocationEnabled)
     */
    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 geolocated result once a location is returned from the [track](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#event-track) event.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#scale)
     */
    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)
     */
    readonly tracking: boolean;
    /**
     * Indicates whether the widget will automatically [rotate to user's direction](https://www.w3.org/TR/geolocation-API/#coordinates_interface).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#useHeadingEnabled)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#viewModel)
     */
    viewModel: TrackViewModel;

    /**
     * When executed, the widget will start [tracking](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#tracking) the user'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;

    on(name: "track", eventHandler: TrackTrackEventHandler): IHandle;

    on(name: "track-error", eventHandler: TrackTrackErrorEventHandler): IHandle;
  }

  interface TrackConstructor {
    /**
     * Provides a simple button that animates the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) to the user's location when clicked.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html)
     */

    new (properties?: TrackProperties): Track;
  }

  export const Track: TrackConstructor;

  interface TrackProperties extends WidgetProperties, GoToProperties {
    /**
     * The HTML5 Geolocation Position options for locating.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#geolocationOptions)
     */
    geolocationOptions?: any;
    /**
     * Indicates whether the widget will automatically navigate the view to the user's position when a geolocation result is found.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#goToLocationEnabled)
     */
    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 geolocated result once a location is returned from the [track](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#event-track) event.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#scale)
     */
    scale?: number;
    /**
     * Indicates whether the widget will automatically [rotate to user's direction](https://www.w3.org/TR/geolocation-API/#coordinates_interface).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#useHeadingEnabled)
     */
    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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track-TrackViewModel.html#state)
     */
    readonly state: "disabled" | "ready" | "tracking" | "waiting";
    /**
     * Indicates whether new positions are being watched.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track-TrackViewModel.html#tracking)
     */
    readonly tracking: boolean;

    /**
     * When executed, [tracking](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track-TrackViewModel.html#tracking) starts at the user'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;

    on(name: "track", eventHandler: TrackViewModelTrackEventHandler): IHandle;

    on(name: "track-error", eventHandler: TrackViewModelTrackErrorEventHandler): IHandle;
  }

  interface TrackViewModelConstructor {
    /**
     * Provides the logic for the [Track](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track.html) widget, which animates the [View](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html) to the user's location when clicked and tracks it as the location is updated.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Track-TrackViewModel.html)
     */

    new (properties?: TrackViewModelProperties): TrackViewModel;
  }

  export const TrackViewModel: TrackViewModelConstructor;

  interface TrackViewModelProperties extends GeolocationPositioningProperties, GoToProperties {}

  export interface TrackViewModelTrackErrorEvent {
    error: Error;
  }

  export interface TrackViewModelTrackEvent {
    position: any;
  }

  export interface TrackTrackErrorEvent {
    error: Error;
  }

  export interface TrackTrackEvent {
    position: any;
  }

  interface Widget extends Accessor, Evented {
    /**
     * The ID or node representing the DOM element containing the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#container)
     */
    container: string | HTMLElement;
    /**
     * The unique ID assigned to the widget when the widget is created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#id)
     */
    id: string;
    /**
     * The widget's label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#label)
     */
    label: string;
    /**
     * Indicates whether the widget is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#visible)
     */
    visible: boolean;

    /**
     * A utility method used for building the value for a widget's `class` property.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#classes)
     */
    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;
    /**
     * `isFulfilled()` may be used to verify if creating an instance of the class is fulfilled (either resolved or rejected).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#isFulfilled)
     */
    isFulfilled(): boolean;
    /**
     * `isRejected()` may be used to verify if creating an instance of the class is rejected.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#isRejected)
     */
    isRejected(): boolean;
    /**
     * `isResolved()` may be used to verify if creating an instance of the class is resolved.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#isResolved)
     */
    isResolved(): boolean;
    /**
     * Widget teardown helper.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#own)
     */
    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;
    /**
     * *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-Widget.html#render)
     */
    render(): any;
    /**
     * 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#scheduleRender)
     */
    scheduleRender(): void;
    /**
     * `when()` may be leveraged once an instance of the class is created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#when)
     */
    when(callback?: Function, errback?: Function): Promise<any>;
  }

  interface WidgetConstructor {
    /**
     * The base class for widgets.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html)
     */

    new (properties?: WidgetProperties): Widget;
  }

  export const Widget: WidgetConstructor;

  interface WidgetProperties {
    /**
     * The ID or node representing the DOM element containing the widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#container)
     */
    container?: string | HTMLElement;
    /**
     * The unique ID assigned to the widget when the widget is created.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#id)
     */
    id?: string;
    /**
     * The widget's label.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#label)
     */
    label?: string;
    /**
     * Indicates whether the widget is visible.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Widget.html#visible)
     */
    visible?: boolean;
  }

  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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom.html#layout)
     */
    layout: "vertical" | "horizontal";
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom.html#view)
     */
    view: MapView | SceneView;
    /**
     * The view model for this widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom.html#viewModel)
     */
    viewModel: ZoomViewModel;

    /**
     * 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 {
    /**
     * The Zoom widget allows users to zoom in/out within a view.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom.html)
     */

    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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom.html#layout)
     */
    layout?: "vertical" | "horizontal";
    /**
     * 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).
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom.html#view)
     */
    view?: (MapViewProperties & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
    /**
     * The view model for this 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.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom-ZoomViewModel.html#state)
     */
    readonly state: "disabled" | "ready";
    /**
     * 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 {
    /**
     * Provides the logic for the [Zoom](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom.html) widget.
     *
     * [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom-ZoomViewModel.html)
     */

    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 & { type: "2d" }) | (SceneViewProperties & { type: "3d" });
  }

  export type MultipointDrawActionCursorUpdateEventHandler = (event: MultipointDrawActionCursorUpdateEvent) => void;

  export type MultipointDrawActionDrawCompleteEventHandler = (event: MultipointDrawActionDrawCompleteEvent) => void;

  export type MultipointDrawActionRedoEventHandler = (event: MultipointDrawActionRedoEvent) => void;

  export type MultipointDrawActionUndoEventHandler = (event: MultipointDrawActionUndoEvent) => void;

  export type MultipointDrawActionVertexAddEventHandler = (event: MultipointDrawActionVertexAddEvent) => void;

  export type MultipointDrawActionVertexRemoveEventHandler = (event: MultipointDrawActionVertexRemoveEvent) => void;

  export type OGCFeatureLayerLayerviewCreateErrorEventHandler = (
    event: OGCFeatureLayerLayerviewCreateErrorEvent
  ) => void;

  export type OGCFeatureLayerLayerviewCreateEventHandler = (event: OGCFeatureLayerLayerviewCreateEvent) => void;

  export type OGCFeatureLayerLayerviewDestroyEventHandler = (event: OGCFeatureLayerLayerviewDestroyEvent) => void;

  export type OpacitySliderMaxChangeEventHandler = (event: OpacitySliderMaxChangeEvent) => void;

  export type OpacitySliderMinChangeEventHandler = (event: OpacitySliderMinChangeEvent) => void;

  export type OpacitySliderSegmentDragEventHandler = (event: OpacitySliderSegmentDragEvent) => 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 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 PointDrawActionCursorUpdateEventHandler = (event: PointDrawActionCursorUpdateEvent) => void;

  export type PointDrawActionDrawCompleteEventHandler = (event: PointDrawActionDrawCompleteEvent) => void;

  export type PolygonDrawActionCursorUpdateEventHandler = (event: PolygonDrawActionCursorUpdateEvent) => void;

  export type PolygonDrawActionDrawCompleteEventHandler = (event: PolygonDrawActionDrawCompleteEvent) => void;

  export type PolygonDrawActionRedoEventHandler = (event: PolygonDrawActionRedoEvent) => void;

  export type PolygonDrawActionUndoEventHandler = (event: PolygonDrawActionUndoEvent) => void;

  export type PolygonDrawActionVertexAddEventHandler = (event: PolygonDrawActionVertexAddEvent) => void;

  export type PolygonDrawActionVertexRemoveEventHandler = (event: PolygonDrawActionVertexRemoveEvent) => void;

  export type PolylineDrawActionCursorUpdateEventHandler = (event: PolylineDrawActionCursorUpdateEvent) => void;

  export type PolylineDrawActionDrawCompleteEventHandler = (event: PolylineDrawActionDrawCompleteEvent) => void;

  export type PolylineDrawActionRedoEventHandler = (event: PolylineDrawActionRedoEvent) => void;

  export type PolylineDrawActionUndoEventHandler = (event: PolylineDrawActionUndoEvent) => void;

  export type PolylineDrawActionVertexAddEventHandler = (event: PolylineDrawActionVertexAddEvent) => void;

  export type PolylineDrawActionVertexRemoveEventHandler = (event: PolylineDrawActionVertexRemoveEvent) => void;

  export type PopupTriggerActionEventHandler = (event: PopupTriggerActionEvent) => void;

  export type PopupViewModelTriggerActionEventHandler = (event: PopupViewModelTriggerActionEvent) => void;

  export type PrintCompleteEventHandler = (event: PrintCompleteEvent) => void;

  export type PrintSubmitEventHandler = (event: PrintSubmitEvent) => 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 SceneViewImmediateDoubleClickEventHandler = (event: SceneViewImmediateDoubleClickEvent) => 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 SearchSearchBlurEventHandler = (event: SearchSearchBlurEvent) => void;

  export type SearchSearchClearEventHandler = (event: SearchSearchClearEvent) => void;

  export type SearchSearchCompleteEventHandler = (event: SearchSearchCompleteEvent) => void;

  export type SearchSearchFocusEventHandler = (event: SearchSearchFocusEvent) => void;

  export type SearchSearchStartEventHandler = (event: SearchSearchStartEvent) => void;

  export type SearchSelectResultEventHandler = (event: SearchSelectResultEvent) => void;

  export type SearchSuggestCompleteEventHandler = (event: SearchSuggestCompleteEvent) => void;

  export type SearchSuggestStartEventHandler = (event: SearchSuggestStartEvent) => 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 SegmentDrawActionCursorUpdateEventHandler = (event: SegmentDrawActionCursorUpdateEvent) => void;

  export type SegmentDrawActionDrawCompleteEventHandler = (event: SegmentDrawActionDrawCompleteEvent) => void;

  export type SegmentDrawActionVertexAddEventHandler = (event: SegmentDrawActionVertexAddEvent) => void;

  export type SizeSliderMaxChangeEventHandler = (event: SizeSliderMaxChangeEvent) => void;

  export type SizeSliderMinChangeEventHandler = (event: SizeSliderMinChangeEvent) => void;

  export type SizeSliderSegmentDragEventHandler = (event: SizeSliderSegmentDragEvent) => 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 SketchCreateEventHandler = (event: SketchCreateEvent) => void;

  export type SketchDeleteEventHandler = (event: SketchDeleteEvent) => void;

  export type SketchRedoEventHandler = (event: SketchRedoEvent) => void;

  export type SketchUndoEventHandler = (event: SketchUndoEvent) => void;

  export type SketchUpdateEventHandler = (event: SketchUpdateEvent) => void;

  export type SketchViewModelCreateEventHandler = (event: SketchViewModelCreateEvent) => void;

  export type SketchViewModelDeleteEventHandler = (event: SketchViewModelDeleteEvent) => void;

  export type SketchViewModelRedoEventHandler = (event: SketchViewModelRedoEvent) => void;

  export type SketchViewModelUndoEventHandler = (event: SketchViewModelUndoEvent) => void;

  export type SketchViewModelUpdateEventHandler = (event: SketchViewModelUpdateEvent) => void;

  export type SliceLayerLayerviewCreateErrorEventHandler = (event: SliceLayerLayerviewCreateErrorEvent) => void;

  export type SliceLayerLayerviewCreateEventHandler = (event: SliceLayerLayerviewCreateEvent) => void;

  export type SliceLayerLayerviewDestroyEventHandler = (event: SliceLayerLayerviewDestroyEvent) => void;

  export type SliderMaxChangeEventHandler = (event: SliderMaxChangeEvent) => void;

  export type SliderMaxClickEventHandler = (event: SliderMaxClickEvent) => void;

  export type SliderMinChangeEventHandler = (event: SliderMinChangeEvent) => void;

  export type SliderMinClickEventHandler = (event: SliderMinClickEvent) => void;

  export type SliderSegmentClickEventHandler = (event: SliderSegmentClickEvent) => void;

  export type SliderSegmentDragEventHandler = (event: SliderSegmentDragEvent) => void;

  export type SliderThumbChangeEventHandler = (event: SliderThumbChangeEvent) => void;

  export type SliderThumbClickEventHandler = (event: SliderThumbClickEvent) => void;

  export type SliderThumbDragEventHandler = (event: SliderThumbDragEvent) => void;

  export type SliderTickClickEventHandler = (event: SliderTickClickEvent) => void;

  export type SliderTrackClickEventHandler = (event: SliderTrackClickEvent) => void;

  export type SliderViewModelMaxChangeEventHandler = (event: SliderViewModelMaxChangeEvent) => void;

  export type SliderViewModelMinChangeEventHandler = (event: SliderViewModelMinChangeEvent) => void;

  export type SmartMappingPrimaryHandleSliderViewModelMaxChangeEventHandler = (
    event: SmartMappingPrimaryHandleSliderViewModelMaxChangeEvent
  ) => void;

  export type SmartMappingPrimaryHandleSliderViewModelMinChangeEventHandler = (
    event: SmartMappingPrimaryHandleSliderViewModelMinChangeEvent
  ) => void;

  export type SmartMappingSliderBaseMaxChangeEventHandler = (event: SmartMappingSliderBaseMaxChangeEvent) => void;

  export type SmartMappingSliderBaseMinChangeEventHandler = (event: SmartMappingSliderBaseMinChangeEvent) => void;

  export type SmartMappingSliderBaseSegmentDragEventHandler = (event: SmartMappingSliderBaseSegmentDragEvent) => void;

  export type SmartMappingSliderBaseThumbChangeEventHandler = (event: SmartMappingSliderBaseThumbChangeEvent) => void;

  export type SmartMappingSliderBaseThumbDragEventHandler = (event: SmartMappingSliderBaseThumbDragEvent) => void;

  export type SmartMappingSliderViewModelMaxChangeEventHandler = (
    event: SmartMappingSliderViewModelMaxChangeEvent
  ) => void;

  export type SmartMappingSliderViewModelMinChangeEventHandler = (
    event: SmartMappingSliderViewModelMinChangeEvent
  ) => 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 StreamLayerViewUpdateRateEventHandler = (event: StreamLayerViewUpdateRateEvent) => void;

  export type SubtypeGroupLayerEditsEventHandler = (event: SubtypeGroupLayerEditsEvent) => void;

  export type SubtypeGroupLayerLayerviewCreateErrorEventHandler = (
    event: SubtypeGroupLayerLayerviewCreateErrorEvent
  ) => void;

  export type SubtypeGroupLayerLayerviewCreateEventHandler = (event: SubtypeGroupLayerLayerviewCreateEvent) => void;

  export type SubtypeGroupLayerLayerviewDestroyEventHandler = (event: SubtypeGroupLayerLayerviewDestroyEvent) => void;

  export type TableListTriggerActionEventHandler = (event: TableListTriggerActionEvent) => void;

  export type TableListViewModelTriggerActionEventHandler = (event: TableListViewModelTriggerActionEvent) => void;

  export type TileLayerLayerviewCreateErrorEventHandler = (event: TileLayerLayerviewCreateErrorEvent) => void;

  export type TileLayerLayerviewCreateEventHandler = (event: TileLayerLayerviewCreateEvent) => void;

  export type TileLayerLayerviewDestroyEventHandler = (event: TileLayerLayerviewDestroyEvent) => void;

  export type TrackTrackErrorEventHandler = (event: TrackTrackErrorEvent) => void;

  export type TrackTrackEventHandler = (event: TrackTrackEvent) => void;

  export type TrackViewModelTrackErrorEventHandler = (event: TrackViewModelTrackErrorEvent) => void;

  export type TrackViewModelTrackEventHandler = (event: TrackViewModelTrackEvent) => 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 ViewBlurEventHandler = (event: ViewBlurEvent) => void;

  export type ViewClickEventHandler = (event: ViewClickEvent) => void;

  export type ViewDoubleClickEventHandler = (event: ViewDoubleClickEvent) => void;

  export type ViewDragEventHandler = (event: ViewDragEvent) => void;

  export type ViewFocusEventHandler = (event: ViewFocusEvent) => void;

  export type ViewHoldEventHandler = (event: ViewHoldEvent) => void;

  export type ViewImmediateClickEventHandler = (event: ViewImmediateClickEvent) => void;

  export type ViewImmediateDoubleClickEventHandler = (event: ViewImmediateDoubleClickEvent) => void;

  export type ViewKeyDownEventHandler = (event: ViewKeyDownEvent) => void;

  export type ViewKeyUpEventHandler = (event: ViewKeyUpEvent) => void;

  export type ViewLayerviewCreateErrorEventHandler = (event: ViewLayerviewCreateErrorEvent) => void;

  export type ViewLayerviewCreateEventHandler = (event: ViewLayerviewCreateEvent) => void;

  export type ViewLayerviewDestroyEventHandler = (event: ViewLayerviewDestroyEvent) => void;

  export type ViewMouseWheelEventHandler = (event: ViewMouseWheelEvent) => void;

  export type ViewPointerDownEventHandler = (event: ViewPointerDownEvent) => void;

  export type ViewPointerEnterEventHandler = (event: ViewPointerEnterEvent) => void;

  export type ViewPointerLeaveEventHandler = (event: ViewPointerLeaveEvent) => void;

  export type ViewPointerMoveEventHandler = (event: ViewPointerMoveEvent) => void;

  export type ViewPointerUpEventHandler = (event: ViewPointerUpEvent) => void;

  export type ViewResizeEventHandler = (event: ViewResizeEvent) => void;

  export type WCSLayerLayerviewCreateErrorEventHandler = (event: WCSLayerLayerviewCreateErrorEvent) => void;

  export type WCSLayerLayerviewCreateEventHandler = (event: WCSLayerLayerviewCreateEvent) => void;

  export type WCSLayerLayerviewDestroyEventHandler = (event: WCSLayerLayerviewDestroyEvent) => void;

  export type WebTileLayerLayerviewCreateErrorEventHandler = (event: WebTileLayerLayerviewCreateErrorEvent) => void;

  export type WebTileLayerLayerviewCreateEventHandler = (event: WebTileLayerLayerviewCreateEvent) => void;

  export type WebTileLayerLayerviewDestroyEventHandler = (event: WebTileLayerLayerviewDestroyEvent) => void;

  export type WFSLayerLayerviewCreateErrorEventHandler = (event: WFSLayerLayerviewCreateErrorEvent) => void;

  export type WFSLayerLayerviewCreateEventHandler = (event: WFSLayerLayerviewCreateEvent) => void;

  export type WFSLayerLayerviewDestroyEventHandler = (event: WFSLayerLayerviewDestroyEvent) => 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;

  export namespace CIM {
    /**
     * Represents the properties required for authoring an Arcade expression.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMRenderers.md#enumberation-ExpressionReturnType)
     */
    export enum ExpressionReturnType {
      /**
       * The return type of the expression is determined by the consumer using the expression.
       */
      Default = "Default",
      /**
       * The return type of the expression is treated as a string by all consumers.
       */
      String = "String",
      /**
       * The return type of the expression is treated as a numeric value by all consumers.
       */
      Numeric = "Numeric"
    }

    /**
     * Represents 3D symbol properties, a collection of symbol properties that apply when the symbol is used in a 3D context.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-AngleAlignment)
     */
    export enum AngleAlignment {
      /**
       * Points remain aligned to the display when the map is rotated.
       */
      Display = "Display",
      /**
       * Points are rotated with the map.
       */
      Map = "Map"
    }

    /**
     * Represents a balloon callout. Balloon callouts are a filled background that is placed behind text. They may or may not have a leader line connecting the callout to an anchor point.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-BalloonCalloutStyle)
     */
    export enum BalloonCalloutStyle {
      /**
       * Rectangle style.
       */
      Rectangle = "Rectangle",
      /**
       * Rounded rectangle style.
       */
      RoundedRectangle = "RoundedRectangle",
      /**
       * Oval style.
       */
      Oval = "Oval"
    }

    /**
     * Represents a bar chart marker, a chart made of vertical bars displaying values.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-BlendingMode)
     */
    export enum BlendingMode {
      /**
       * No blending.
       */
      None = "None",
      /**
       * Alpha blending.
       */
      Alpha = "Alpha",
      /**
       * Screen.
       */
      Screen = "Screen",
      /**
       * Multiply.
       */
      Multiply = "Multiply",
      /**
       * Add.
       */
      Add = "Add"
    }

    /**
     * Represents a bar chart marker, a chart made of vertical bars displaying values.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-BlockProgression)
     */
    export enum BlockProgression {
      /**
       * Top To Bottom.
       */
      TTB = "TTB",
      /**
       * Right To Left (vertical text).
       */
      RTL = "RTL",
      /**
       * Bottom To Top.
       */
      BTT = "BTT"
    }

    /**
     * Represents a CGA attribute, the symbol attribute as specified by the CGA code in the rule package.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-CGAAttributeType)
     */
    export enum CGAAttributeType {
      /**
       * Float - Attribute is a numeric attribute that is a float value
       */
      Float = "Float",
      /**
       * String - Attribute is a string
       */
      String = "String",
      /**
       * Boolean - Attribute is a boolean
       */
      Boolean = "Boolean"
    }

    /**
     * Represents a vector marker clipping path.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-ClippingType)
     */
    export enum ClippingType {
      /**
       * Intersect.
       */
      Intersect = "Intersect",
      /**
       * Subtract.
       */
      Subtract = "Subtract"
    }

    /**
     * Represents the text part position properties on a callout part.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-ExternalColorMixMode)
     */
    export enum ExternalColorMixMode {
      /**
       * Tint using external color.
       */
      Tint = "Tint",
      /**
       * Ignore external color.
       */
      Ignore = "Ignore",
      /**
       * Multiply components by components of external color.
       */
      Multiply = "Multiply"
    }

    /**
     * Represents the text part position properties on a callout part.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-ExtremityPlacement)
     */
    export enum ExtremityPlacement {
      /**
       * Both - marker is placed at the beginning and end of the line.
       */
      Both = "Both",
      /**
       * JustBegin - marker is placed at the beginning of the line, determined by the direction that the line was digitized.
       */
      JustBegin = "JustBegin",
      /**
       * JustEnd - marker is placed at the end of the line, determined by the direction that the line was digitized.
       */
      JustEnd = "JustEnd",
      /**
       * None - no marker is placed at either end of the marker.
       */
      None = "None"
    }

    /**
     * Represents the text part position properties on a callout part.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-FillMode)
     */
    export enum FillMode {
      /**
       * Mosaic fill.
       */
      Mosaic = "Mosaic",
      /**
       * Centered fill.
       */
      Centered = "Centered"
    }

    /**
     * Represents the text part position properties on a callout part.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-FontEffects)
     */
    export enum FontEffects {
      /**
       * Normal text.
       */
      Normal = "Normal",
      /**
       * Superscript text.
       */
      Superscript = "Superscript",
      /**
       * Subscript text
       */
      Subscript = "Subscript"
    }

    /**
     * Represents the text part position properties on a callout part.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-FontEncoding)
     */
    export enum FontEncoding {
      /**
       * Symbol encoding.
       */
      MSSymbol = "MSSymbol",
      /**
       * Unicode.
       */
      Unicode = "Unicode"
    }

    /**
     * Represents the text part position properties on a callout part.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-FontType)
     */
    export enum FontType {
      /**
       * Unspecified.
       */
      Unspecified = "Unspecified",
      /**
       * TrueType.
       */
      TrueType = "TrueType",
      /**
       * OpenType with CFF outlines.
       */
      PSOpenType = "PSOpenType",
      /**
       * OpenType with TrueType outlines.
       */
      TTOpenType = "TTOpenType",
      /**
       * Adobe Type 1.
       */
      Type1 = "Type1"
    }

    /**
     * Represents the arrow geometric effect which creates a dynamic line along a line feature with an arrow of a specified arrow type and width.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-GeometricEffectArrowType)
     */
    export enum GeometricEffectArrowType {
      /**
       * An open ended arrow.
       */
      OpenEnded = "OpenEnded",
      /**
       * A block arrow.
       */
      Block = "Block",
      /**
       * A crossed arrow.
       */
      Crossed = "Crossed"
    }

    /**
     * Represents the donut geometric effect which creates a dynamic polygon ring of a specified width in relation to the outline of polygon features.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-GeometricEffectDonutMethod)
     */
    export enum GeometricEffectDonutMethod {
      /**
       * Mitered - matches the exact shape around a convex corner of the polygon.
       */
      Mitered = "Mitered",
      /**
       * Bevelled - follows the shortest straight path across a convex corner of the polygon.
       */
      Bevelled = "Bevelled",
      /**
       * Rounded - follows a path of equal distance around a convex corner of the polygon.
       */
      Rounded = "Rounded",
      /**
       * Square - follows a straight path across the corner of a line or polygon.
       */
      Square = "Square",
      /**
       * TrueBuffer - uses the buffer algorithm to follow a path around convex corners.
       */
      TrueBuffer = "TrueBuffer"
    }

    /**
     * Represents the enclosing polygon geometric effect which creates a dynamic polygon from the spatial extent of a line or polygon feature.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-GeometricEffectEnclosingPolygonMethod)
     */
    export enum GeometricEffectEnclosingPolygonMethod {
      /**
       * ClosePath - for polygon input, it generates a polygon that matches the geometry of a polygon feature. For line input, it generates a polygon that connects both ends of the line to each other.
       */
      ClosePath = "ClosePath",
      /**
       * ConvexHull - for polygon input, it generates a polygon with a minimum number of sides to surround the feature. For line input, it generates a polygon that approximates the shape of the line.
       */
      ConvexHull = "ConvexHull",
      /**
       * RectangularBox - generates a polygon equal to the spatial envelope of the feature.
       */
      RectangularBox = "RectangularBox"
    }

    /**
     * Represents the extension geometric effect which creates a dynamic line that is extended from either the beginning or the end of the line feature at a specified deflection angle and length.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-GeometricEffectExtensionOrigin)
     */
    export enum GeometricEffectExtensionOrigin {
      /**
       * BeginningOfLine - extension is added to the end of the line.
       */
      BeginningOfLine = "BeginningOfLine",
      /**
       * EndOfLine - extension is added to the end of the line.
       */
      EndOfLine = "EndOfLine"
    }

    /**
     * Represents a geometric effect which creates a localizer feather for aeronautical charts.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-GeometricEffectLocalizerFeatherStyle)
     */
    export enum GeometricEffectLocalizerFeatherStyle {
      /**
       * Displays a complete localizer feather.
       */
      Complete = "Complete",
      /**
       * Displays the left side of a localizer feather.
       */
      Left = "Left",
      /**
       * Displays the right side of a localizer feather.
       */
      Right = "Right"
    }

    /**
     * Represents a geometric effect which creates a hatch pattern to depict special use airspace for aeronautical charts.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-GeometricEffectOffsetMethod)
     */
    export enum GeometricEffectOffsetMethod {
      /**
       * Mitered - matches the exact shape around a corner of the line or polygon.
       */
      Mitered = "Mitered",
      /**
       * Bevelled - follows the shortest straight path across a corner of the line or polygon.
       */
      Bevelled = "Bevelled",
      /**
       * Rounded - follows a path of equal distance around a corner of the line or polygon.
       */
      Rounded = "Rounded",
      /**
       * Square - follows a straight path across the corner of a line or polygon.
       */
      Square = "Square"
    }

    /**
     * Represents a geometric effect which creates a hatch pattern to depict special use airspace for aeronautical charts.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-GeometricEffectOffsetOption)
     */
    export enum GeometricEffectOffsetOption {
      /**
       * Fast - ignores complex geometries and applies a best fit to the symbol.
       */
      Fast = "Fast",
      /**
       * Accurate - accommodates complex geometries and applied a true fit to the symbol.
       */
      Accurate = "Accurate"
    }

    /**
     * Represents the offset tangent geometric effect which creates a dynamic line along a line feature offset in the direction defined by either the beginning or the end of the line.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-GeometricEffectOffsetTangentMethod)
     */
    export enum GeometricEffectOffsetTangentMethod {
      /**
       * BeginningOfLine - the tangent offset is applied from the beginning of the line.
       */
      BeginningOfLine = "BeginningOfLine",
      /**
       * EndOfLine - the tangent offset is applied from the end of the line.
       */
      EndOfLine = "EndOfLine"
    }

    /**
     * Represents the wave geometric effect which creates a dynamic line or polygon along a feature with a repeating wave pattern.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-GeometricEffectWaveform)
     */
    export enum GeometricEffectWaveform {
      /**
       * Sinus - displays a sinusoidal curve.
       */
      Sinus = "Sinus",
      /**
       * Square - displays a three-sided rectangular shape.
       */
      Square = "Square",
      /**
       * Triangle - displays a two-sided triangular shape.
       */
      Triangle = "Triangle",
      /**
       * Random - displays a sine curve with random variations in the period and amplitude
       */
      Random = "Random"
    }

    /**
     * Represents the wave geometric effect which creates a dynamic line or polygon along a feature with a repeating wave pattern.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-GlyphHinting)
     */
    export enum GlyphHinting {
      /**
       * No glyph hinting.
       */
      None = "None",
      /**
       * Default glyph hinting according to the font's settings.
       */
      Default = "Default",
      /**
       * Force glyph hinting.
       */
      Force = "Force"
    }

    /**
     * Represents the wave geometric effect which creates a dynamic line or polygon along a feature with a repeating wave pattern.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-GradientAlignment)
     */
    export enum GradientAlignment {
      /**
       * Buffered - Distributes the color ramp along the line's geometry from the outside in (similar to the effect of creating a buffer of the line, then using the "buffer" fill type).
       */
      Buffered = "Buffered",
      /**
       * Left - Progresses the color ramp from the line's centerline to the outside edge on the left. The gradient will follow any curvature in the line's geometry.
       */
      Left = "Left",
      /**
       * Right - Progresses the color ramp from the line's centerline to the outside edge on the right. The gradient will follow any curvature in the line's geometry.
       */
      Right = "Right",
      /**
       * Along line - Distributes the color ramp linearly along the line, following the curvature of the line.
       */
      AlongLine = "AlongLine"
    }

    /**
     * Represents a gradient fill which fills polygonal geometry with a specified color scheme.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-GradientFillMethod)
     */
    export enum GradientFillMethod {
      /**
       * Linear - Change from one color to the next is linear across the geometry.
       */
      Linear = "Linear",
      /**
       * Rectangular - Change from one color to the next is rectangular, from the extent of the geometry.
       */
      Rectangular = "Rectangular",
      /**
       * Circular - Change from one color to the next is circular, from the extent of the geometry
       */
      Circular = "Circular",
      /**
       * Buffered - Color changes based on an internal buffering of the geometry outline
       */
      Buffered = "Buffered"
    }

    /**
     * Represents a gradient stroke which draws linear geometry with a specified color scheme.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-GradientStrokeType)
     */
    export enum GradientStrokeType {
      /**
       * Discrete gradient types have distinct lines of separation between each color.
       */
      Discrete = "Discrete",
      /**
       * Continuous gradients vary continuously along the color change with no distinct boundary between the colors.
       */
      Continuous = "Continuous"
    }

    /**
     * Represents a hatch fill which fills polygonal geometry with a uniform series of parallel line symbols.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-HorizontalAlignment)
     */
    export enum HorizontalAlignment {
      /**
       * Left aligned.
       */
      Left = "Left",
      /**
       * Right aligned.
       */
      Right = "Right",
      /**
       * Centered.
       */
      Center = "Center",
      /**
       * Justified alignment.
       */
      Justify = "Justify"
    }

    /**
     * Represents a hatch fill which fills polygonal geometry with a uniform series of parallel line symbols.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-LeaderLineStyle)
     */
    export enum LeaderLineStyle {
      /**
       * The line callout leader is a single line originating from the closest corner of the text box with the gap applied. If the callout has an accent bar it is connected to the closest point at the either top or bottom of the accent bar.
       */
      Base = "Base",
      /**
       * The line callout leader is a single line originating from the midpoint of the left or right side of the text box with the gap applied or from the midpoint of the accent bar if the callout has one.
       */
      MidPoint = "MidPoint",
      /**
       * The line callout leader is a 3-point line originating from the midpoint of the left or right side of the text box with the gap applied or the midpoint of the accent bar if the callout has one.
       */
      ThreePoint = "ThreePoint",
      /**
       * The line callout leader is a 4-point line originating from the midpoint of the left or right side of the text box with the gap applied or the midpoint of the accent bar if the callout has one.
       */
      FourPoint = "FourPoint",
      /**
       * The line callout draws a line that connects to the closest of the four corners of the text with the gap applied. If the callout has an accent bar it is connected to the closest point at either the top or bottom of the accent bar. Additionally, either and underline or an "overline" is drawn along the closest side (bottom or top) of the text.
       */
      Underline = "Underline",
      /**
       * The line callout leader is curved (clockwise) from the anchor point to the closest corner of the text box with the gap applied. If the callout has an accent bar it is connected to the closest point at the either top or bottom of the accent bar.
       */
      CircularCW = "CircularCW",
      /**
       * The line callout leader is curved (counter-clockwise) from the anchor point to the closest corner of the text box with the gap applied. If the callout has an accent bar it is connected to the closest point at the either top or bottom of the accent bar.
       */
      CircularCCW = "CircularCCW"
    }

    /**
     * Represents a hatch fill which fills polygonal geometry with a uniform series of parallel line symbols.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-LineCapStyle)
     */
    export enum LineCapStyle {
      /**
       * Stroke ends in butt caps.
       */
      Butt = "Butt",
      /**
       * Stroke ends in round caps.
       */
      Round = "Round",
      /**
       * Stroke ends in square caps.
       */
      Square = "Square"
    }

    /**
     * Represents a hatch fill which fills polygonal geometry with a uniform series of parallel line symbols.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-LineDashEnding)
     */
    export enum LineDashEnding {
      /**
       * No Constraint - no constraint is applied to how the dash is placed.
       */
      NoConstraint = "NoConstraint",
      /**
       * Half Pattern - a half dash will be placed on either side of control points.
       */
      HalfPattern = "HalfPattern",
      /**
       * Half Gap - a space equal to the half the gap value will be placed on either side of control points.
       */
      HalfGap = "HalfGap",
      /**
       * Full Pattern - a full dash will be placed on either side of control points.
       */
      FullPattern = "FullPattern",
      /**
       * Full Gap - a space equal to the gap value will be placed on either side of control points.
       */
      FullGap = "FullGap",
      /**
       * Custom - the pattern is fit to the length of the feature by adjusting the gaps slightly.
       */
      Custom = "Custom"
    }

    /**
     * Represents a hatch fill which fills polygonal geometry with a uniform series of parallel line symbols.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-LineDecorationStyle)
     */
    export enum LineDecorationStyle {
      /**
       * No decoration.
       */
      None = "None",
      /**
       * The decoration is defined in the Layers property as a set of SymbolReferences.
       */
      Custom = "Custom",
      /**
       * A circle is added at the end of the line.
       */
      Circle = "Circle",
      /**
       * An open arrow is added to the end of the line.
       */
      OpenArrow = "OpenArrow",
      /**
       * A closed arrow is added to the end of the line.
       */
      ClosedArrow = "ClosedArrow",
      /**
       * A diamond is added at the end of the line.
       */
      Diamond = "Diamond"
    }

    /**
     * Represents a hatch fill which fills polygonal geometry with a uniform series of parallel line symbols.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-LineGapType)
     */
    export enum LineGapType {
      /**
       * Extra Leading - Adds the specified value to the line spacing that accommodates the largest font in the line
       */
      ExtraLeading = "ExtraLeading",
      /**
       * Multiple - Sets the line spacing based on a multiple of the line.
       */
      Multiple = "Multiple",
      /**
       * Exact - Sets a fixed line spacing
       */
      Exact = "Exact"
    }

    /**
     * Represents a hatch fill which fills polygonal geometry with a uniform series of parallel line symbols.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-LineJoinStyle)
     */
    export enum LineJoinStyle {
      /**
       * The stroke join is beveled.
       */
      Bevel = "Bevel",
      /**
       * The line join is round.
       */
      Round = "Round",
      /**
       * The line join is mitered.
       */
      Miter = "Miter"
    }

    /**
     * Represents marker placement polygon center which defines how a single marker will be placed within the polygon.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-MarkerPlacementType)
     */
    export enum MarkerPlacementType {
      /**
       * Place inside the polygon.
       */
      InsidePolygon = "InsidePolygon",
      /**
       * Place inside the polygon at the center.
       */
      PolygonCenter = "PolygonCenter",
      /**
       * Place randomly inside the polygon.
       */
      RandomlyInsidePolygon = "RandomlyInsidePolygon"
    }

    /**
     * Represents marker placement polygon center which defines how a single marker will be placed within the polygon.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-MaterialMode)
     */
    export enum MaterialMode {
      /**
       * Tint materials and textures with color property.
       */
      Tint = "Tint",
      /**
       * Replace materials and textures with color property.
       */
      Replace = "Replace",
      /**
       * Multiply materials and textures with color property.
       */
      Multiply = "Multiply"
    }

    /**
     * Represents a pie chart marker which is a marker that draws numeric values arranged in a circle.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-PlacementClip)
     */
    export enum PlacementClip {
      /**
       * Markers are clipped at the boundary of the polygon.
       */
      ClipAtBoundary = "ClipAtBoundary",
      /**
       * Markers are not drawn if their center falls outside of the polygon.
       */
      RemoveIfCenterOutsideBoundary = "RemoveIfCenterOutsideBoundary",
      /**
       * Markers are not drawn if they touch the boundary of the polygon.
       */
      DoNotTouchBoundary = "DoNotTouchBoundary",
      /**
       * Markers are not clipped and may extend past the boundary of the polygon.
       */
      DoNotClip = "DoNotClip"
    }

    /**
     * Represents a pie chart marker which is a marker that draws numeric values arranged in a circle.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-PlacementEndings)
     */
    export enum PlacementEndings {
      /**
       * No constraint on how the markers are placed.
       */
      NoConstraint = "NoConstraint",
      /**
       * A marker is placed at the control point.
       */
      WithMarkers = "WithMarkers",
      /**
       * A space equal to the placement template will be placed at the control point.
       */
      WithFullGap = "WithFullGap",
      /**
       * A space equal to half the placement template will be placed at the control point.
       */
      WithHalfGap = "WithHalfGap",
      /**
       * Will fit the pattern to the length of the features by adjusting the gaps slightly.
       */
      Custom = "Custom"
    }

    /**
     * Represents a pie chart marker which is a marker that draws numeric values arranged in a circle.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-PlacementGridType)
     */
    export enum PlacementGridType {
      /**
       * Markers are placed on a uniform grid.
       */
      Fixed = "Fixed",
      /**
       * Markers are placed randomly in the polygon.
       */
      Random = "Random",
      /**
       * Markers are placed randomly with a fixed quantity (dot density).
       */
      RandomFixedQuantity = "RandomFixedQuantity"
    }

    /**
     * Represents a pie chart marker which is a marker that draws numeric values arranged in a circle.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-PlacementOnLineRelativeTo)
     */
    export enum PlacementOnLineRelativeTo {
      /**
       * Marker is placed in the middle of the line.
       */
      LineMiddle = "LineMiddle",
      /**
       * Marker is placed at the beginning of the line.
       */
      LineBeginning = "LineBeginning",
      /**
       * Marker is placed at the end of the line.
       */
      LineEnd = "LineEnd",
      /**
       * Marker is at the midpoint of each segment in a line feature.
       */
      SegmentMidpoint = "SegmentMidpoint"
    }

    /**
     * Represents a pie chart marker which is a marker that draws numeric values arranged in a circle.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-PlacementPolygonCenterMethod)
     */
    export enum PlacementPolygonCenterMethod {
      /**
       * Place on the polygon.
       */
      OnPolygon = "OnPolygon",
      /**
       * The centroid of the polygon is used.
       */
      CenterOfMass = "CenterOfMass",
      /**
       * The bounding box of the polygon is used.
       */
      BoundingBoxCenter = "BoundingBoxCenter"
    }

    /**
     * Represents a pie chart marker which is a marker that draws numeric values arranged in a circle.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-PlacementRandomlyAlongLineRandomization)
     */
    export enum PlacementRandomlyAlongLineRandomization {
      /**
       * A low amount of randomness is applied
       */
      Low = "Low",
      /**
       * A medium amount of randomness is applied
       */
      Medium = "Medium",
      /**
       * A high amount of randomness is applied
       */
      High = "High"
    }

    /**
     * Represents a pie chart marker which is a marker that draws numeric values arranged in a circle.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-PlacementStepPosition)
     */
    export enum PlacementStepPosition {
      /**
       * The marker center.
       */
      MarkerCenter = "MarkerCenter",
      /**
       * The marker bounds.
       */
      MarkerBounds = "MarkerBounds"
    }

    /**
     * Represents a point symbol callout which draws a point symbol as the background and a line symbol for leaders. Often used for highway shields.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-PointSymbolCalloutScale)
     */
    export enum PointSymbolCalloutScale {
      /**
       * No scaling.
       */
      None = "None",
      /**
       * Uniform scaling.
       */
      PropUniform = "PropUniform",
      /**
       * Non-uniform scaling.
       */
      PropNonuniform = "PropNonuniform",
      /**
       * Uniform scaling.
       */
      DifUniform = "DifUniform",
      /**
       * Non-uniform scaling.
       */
      DifNonuniform = "DifNonuniform"
    }

    /**
     * Represents shape vertices.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-Simple3DLineStyle)
     */
    export enum Simple3DLineStyle {
      /**
       * Stroke draws as a tube where the width determines the diameter of the tube.
       */
      Tube = "Tube",
      /**
       * Stroke draws flat upon the surface.
       */
      Strip = "Strip",
      /**
       * Stroke is vertically oriented where Width determines the height of the wall.
       */
      Wall = "Wall"
    }

    /**
     * Represents a simple line callout for drawing basic leader lines.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-SizeVariationMethod)
     */
    export enum SizeVariationMethod {
      /**
       * Change in size is applied randomly.
       */
      Random = "Random",
      /**
       * Markers are drawn with a pattern where the markers increase in size.
       */
      Increasing = "Increasing",
      /**
       * Markers are drawn in a pattern where the markers decrease in size.
       */
      Decreasing = "Decreasing",
      /**
       * Markers are drawn in a pattern where the size increase and then decrease.
       */
      IncreasingThenDecreasing = "IncreasingThenDecreasing"
    }

    /**
     * Represents a stacked bar chart marker which is a chart made of vertical stacked bars displaying values.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-SymbolUnits)
     */
    export enum SymbolUnits {
      /**
       * Relative units.
       */
      Relative = "Relative",
      /**
       * Absolute units.
       */
      Absolute = "Absolute"
    }

    /**
     * Represents a stacked bar chart marker which is a chart made of vertical stacked bars displaying values.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-TextCase)
     */
    export enum TextCase {
      /**
       * Text is proper/mixed case.
       */
      Normal = "Normal",
      /**
       * Text is all lower case.
       */
      LowerCase = "LowerCase",
      /**
       * Text is all upper case.
       */
      Allcaps = "Allcaps"
    }

    /**
     * Represents a text margin which defines the margin to apply around text.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-TextReadingDirection)
     */
    export enum TextReadingDirection {
      /**
       * Text is drawn from left-to-right.
       */
      LTR = "LTR",
      /**
       * Text is drawn from right-to-left.
       */
      RTL = "RTL"
    }

    /**
     * Represents a text symbol which is used to draw text graphics, bleeds, and annotation. Text symbols do not contain any symbol layers but can have callouts.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-TextureFilter)
     */
    export enum TextureFilter {
      /**
       * Low draft quality.
       */
      Draft = "Draft",
      /**
       * Higher quality, recommended for pictures.
       */
      Picture = "Picture",
      /**
       * Higher quality, recommended when it is important to preserve edges for zoomed in images.
       */
      Text = "Text"
    }

    /**
     * Represents a vector marker which can represent vector graphics. It's constructed from MarkerGraphics which are geometries and symbols used as building blocks for the marker.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-VerticalAlignment)
     */
    export enum VerticalAlignment {
      /**
       * Top of the highest ascender in the text symbol is used to align the text.
       */
      Top = "Top",
      /**
       * Text is centered on the geometry.
       */
      Center = "Center",
      /**
       * Text is aligned so that the geometry lines up with the baseline of the text symbol. Descenders will go past the baseline.
       */
      Baseline = "Baseline",
      /**
       * Bottom of the lowest descender is used to align the text.
       */
      Bottom = "Bottom"
    }

    /**
     * Represents a vector marker which can represent vector graphics. It's constructed from MarkerGraphics which are geometries and symbols used as building blocks for the marker.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-VerticalGlyphOrientation)
     */
    export enum VerticalGlyphOrientation {
      /**
       * Align right.
       */
      Right = "Right",
      /**
       * Align upright.
       */
      Upright = "Upright"
    }

    /**
     * Represents a water fill which fills polygonal geometry with animated water.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-WaterbodySize)
     */
    export enum WaterbodySize {
      /**
       * Small water body.
       */
      Small = "Small",
      /**
       * Medium water body.
       */
      Medium = "Medium",
      /**
       * Large water body.
       */
      Large = "Large"
    }

    /**
     * Represents a water fill which fills polygonal geometry with animated water.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#enumberation-WaveStrength)
     */
    export enum WaveStrength {
      /**
       * Calm glassy water with no waves.
       */
      Calm = "Calm",
      /**
       * Rippled water.
       */
      Rippled = "Rippled",
      /**
       * Slightly wavy water.
       */
      Slight = "Slight",
      /**
       * Moderately wavy water.
       */
      Moderate = "Moderate"
    }

    /**
     * Relative to the ground.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMEnumerations.md#enumberation-BillboardMode)
     */
    export enum BillboardMode {
      /**
       * Not billboarded.
       */
      None = "None",
      /**
       * The symbol always faces toward the viewer as though spinning on a vertical signpost. Viewed from above, the symbol does not face you; you see the top of the symbol.
       */
      SignPost = "SignPost",
      /**
       * The symbol always faces the viewer directly, regardless of view angle.
       */
      FaceNearPlane = "FaceNearPlane"
    }

    /**
     * Relative to the ground.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMEnumerations.md#enumberation-DominantSizeAxis)
     */
    export enum DominantSizeAxis {
      /**
       * Dominant on the Z axis.
       */
      Z = "Z",
      /**
       * Dominant on the X axis.
       */
      X = "X",
      /**
       * Dominant on the Y axis.
       */
      Y = "Y"
    }

    /**
     * Relative to the ground.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMEnumerations.md#enumberation-GradientStrokeMethod)
     */
    export enum GradientStrokeMethod {
      /**
       * A gradient across the line.
       */
      AcrossLine = "AcrossLine",
      /**
       * A gradient along the line.
       */
      AlongLine = "AlongLine"
    }

    /**
     * Relative to the ground.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMEnumerations.md#enumberation-RotationOrder)
     */
    export enum RotationOrder {
      /**
       * Rotate in XYZ order.
       */
      XYZ = "XYZ",
      /**
       * Rotate in ZYX order.
       */
      ZXY = "ZXY",
      /**
       * Rotate in YXZ order.
       */
      YXZ = "YXZ"
    }

    /**
     * Represents the properties required for authoring an Arcade expression.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMRenderers.md#CIMExpressionInfo)
     */
    export interface CIMExpressionInfo {
      type: "CIMExpressionInfo";
      /**
       * The human readable text that describes the expression.
       */
      title?: string;
      /**
       * The Arcade expression used to evaluate and return the value that a property expects.
       */
      expression?: string;
      /**
       * The Name of the expression.
       */
      name?: string;
      /**
       * The ReturnType of the expression.
       */
      returnType?: keyof typeof ExpressionReturnType;
    }

    /**
     * Represents a primitive override.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMRenderers.md#CIMPrimitiveOverride)
     */
    export interface CIMPrimitiveOverride {
      type: "CIMPrimitiveOverride";
      /**
       * The primitive name this override applies to.
       */
      primitiveName?: string;
      /**
       * The property name in the primitive this override applies to.
       */
      propertyName?: string;
      /**
       * The expression.
       */
      expression?: string;
      /**
       * ExpressionInfo that contains the Arcade expression that returns value as a number or a string depending on the PropertyName.
       */
      valueExpressionInfo?: CIMExpressionInfo;
    }

    /**
     * Represents the scale dependent size variations for a symbol reference. Applies to point symbols, line symbols and the outline of polygon symbols. When the symbol reference is rendered at an intermediate scale a linearly scaled size is used.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMRenderers.md#CIMScaleDependentSizeVariation)
     */
    export interface CIMScaleDependentSizeVariation {
      type: "CIMScaleDependentSizeVariation";
      /**
       * The scale the size is associated with.
       */
      scale?: number;
      /**
       * The size for the associated scale.
       */
      size?: number;
    }

    /**
     * Represents a symbol reference. Symbol references currently store the symbol in-line in the symbol property. Overrides here are used primarily by renderers to pass overrides through the drawing pipeline.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMRenderers.md#CIMSymbolReference)
     */
    export interface CIMSymbolReference {
      type: "CIMSymbolReference";
      /**
       * The primitive overrides. Typically set by renderers at draw time.
       */
      primitiveOverrides?: CIMPrimitiveOverride[];
      /**
       * The style path. Reserved for future use.
       */
      stylePath?: string;
      /**
       * The symbol.
       */
      symbol?: CIMSymbolType;
      /**
       * The symbol name.
       */
      symbolName?: string;
      /**
       * The minimum scale range the symbol reference should be displayed at.
       */
      minScale?: number;
      /**
       * The maximum scale range the symbol reference should be displayed at.
       */
      maxScale?: number;
      /**
       * An array of scale dependent sizes.
       */
      scaleDependentSizeVariation?: CIMScaleDependentSizeVariation[];
      /**
       * The minimum distance at which symbols are visible. Objects closer than this don't get rendered.
       */
      minDistance?: number;
      /**
       * The maximum distance at which symbols are visible. Objects beyond this point don't get rendered.
       */
      maxDistance?: number;
    }

    /**
     * Represents 3D symbol properties, a collection of symbol properties that apply when the symbol is used in a 3D context.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIM3DSymbolProperties)
     */
    export interface CIM3DSymbolProperties {
      type: "CIM3DSymbolProperties";
      /**
       * The dominant size axis.
       */
      dominantSizeAxis3D?: keyof typeof DominantSizeAxis;
      /**
       * The rotation order 3D.
       */
      rotationOrder3D?: keyof typeof RotationOrder;
      /**
       * The scale Z.
       */
      scaleZ?: number;
      /**
       * The scale Y.
       */
      scaleY?: number;
    }

    /**
     * CIMCalloutBase
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMCallout)
     */
    export interface CIMCalloutBase {
      type: string;
      /**
       * The leader tolerance which is the closest distance (in points) to the text the anchor point can be for the callout to draw.
       */
      leaderTolerance?: number;
      /**
       * The leader offset which is an offset value defining the distance (in points) between the anchor point and the beginning of the drawn leader.
       */
      leaderOffset?: number;
    }

    /**
     * CIMLineCallout
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMLineCallout)
     */
    export interface CIMLineCallout extends CIMCalloutBase {
      /**
       * The line symbol to draw leaders with.
       */
      leaderLineSymbol?: CIMLineSymbol;
      /**
       * The gap (in points) between the point symbol and the beginning of the leader line.
       */
      gap?: number;
      /**
       * The style of line to generate when a Point leader is drawn defined by an enumeration value. Line leaders will always be drawn with their own geometry.
       */
      lineStyle?: keyof typeof LeaderLineStyle;
    }

    /**
     * CIMSymbolLayerBase
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMSymbolLayer)
     */
    export interface CIMSymbolLayerBase {
      type: string;
      /**
       * Whether the geometric effects that are applied to the symbol layer. Effects dynamically alter the feature geometry when the symbology is applied. Multiple effects applied to a symbol layer are rendered sequentially.
       */
      effects?: CIMGeometricEffectType[];
      /**
       * A value indicating whether the symbol layer is visible. The symbol layer draws only when enabled. Currently, an invisible layer is not considered in any transformations when in a 3D context.
       */
      enable?: boolean;
      /**
       * The internal name of the symbol layer used for symbol level drawing.
       */
      name?: string;
      /**
       * A value indicating whether the color set at the basic properties level is applied to the symbol layer. If the symbol layer is color locked then changes made to the color in the basic properties will not be applied to the symbol layer.
       */
      colorLocked?: boolean;
      /**
       * The primitive name.
       */
      primitiveName?: string;
      /**
       * A value indicating whether or not the symbol layer should overprint in press printing.
       */
      overprint?: boolean;
    }

    /**
     * CIMMarker
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMMarker)
     */
    export interface CIMMarker extends CIMSymbolLayerBase {
      /**
       * The specified location where all transformation property operations originate.
       */
      anchorPoint?: ExternalReferencePoint;
      /**
       * A value which specifies if the anchor point location is considered a percentage of the size or as an absolute distance.
       */
      anchorPointUnits?: keyof typeof SymbolUnits;
      /**
       * The angle the marker is rotated around the X axis. This type of rotation is also referred to as tilt and is only applied in 3D. The order of how this is applied with respect to other rotations depends on the RotationOrder3D. The name in the user interface is Tilt.
       */
      angleX?: number;
      /**
       * The angle the marker is rotated around the Y axis. This type of rotation is also referred to as roll and is only applied in 3D. The order of how this is applied with respect to other rotations depends on the RotationOrder3D. The name in the user interface is Roll.
       */
      angleY?: number;
      /**
       * Which axis is considered as the Size in 3D. Only applicable when the marker layer is a 3DShapeMarker.
       */
      dominantSizeAxis3D?: keyof typeof DominantSizeAxis;
      /**
       * The value the marker is moved along the X axis from the anchor point. This is applied after all rotation, as opposed to anchor point which is applied before the rotation.
       */
      offsetX?: number;
      /**
       * The value the marker is moved along the Y axis from the anchor point. This is applied after all rotation, as opposed to anchor point which is applied before the rotation.
       */
      offsetY?: number;
      /**
       * The value the marker is moved along the Z axis from the anchor point. This is applied after all rotation, as opposed to anchor point which is applied before the rotation.
       */
      offsetZ?: number;
      /**
       * A value indicating whether the rotation is applied clockwise or counterclockwise to the marker layer.
       */
      rotateClockwise?: boolean;
      /**
       * The angle that the marker is rotated around the anchor point, in degrees.
       */
      rotation?: number;
      /**
       * The height of the marker. Modifying Size changes the marker's height to the specified size and the width is updated proportionally.
       */
      size?: number;
      /**
       * The billboard mode of the marker.
       */
      billboardMode3D?: keyof typeof BillboardMode;
      /**
       * Marker placements which determine how markers are placed along a line or within a polygon.
       */
      markerPlacement?: CIMMarkerPlacementType;
    }

    /**
     * Represents a CGA attribute, the symbol attribute as specified by the CGA code in the rule package.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMCGAAttribute)
     */
    export interface CIMCGAAttribute {
      type: "CIMCGAAttribute";
      /**
       * The name.
       */
      name?: string;
      /**
       * The CGA attribute type.
       */
      CGAAttributeType?: keyof typeof CGAAttributeType;
      /**
       * The value.
       */
      value?: any;
    }

    /**
     * Represents a character marker. The shape of a marker is defined by a glyph in a font. The marker is drawn using the specified size and color. Each marker has a defined frame around the glyph that is considered when the size is applied. As a result, character markers of the same size may appear different sizes if the glyphs frames are different sizes.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMCharacterMarker)
     */
    export interface CIMCharacterMarker extends CIMMarker {
      type: "CIMCharacterMarker";
      /**
       * The Unicode decimal value for the individual glyph of the font that defines the shape of the marker.
       */
      characterIndex?: number;
      /**
       * The depth of the marker when drawn in 3D.
       */
      depth3D?: number;
      /**
       * The font family name of the font. e.g. Comic Sans.
       */
      fontFamilyName?: string;
      /**
       * The style name for the font family. e.g. Regular, Bold, or Italic.
       */
      fontStyleName?: string;
      /**
       * The font type.
       */
      fontType?: keyof typeof FontType;
      /**
       * The width of the symbol without changing the height (or depth in 3D), as a ratio.
       */
      scaleX?: number;
      /**
       * The polygon symbol that is used to renderer the marker.
       */
      symbol?: CIMPolygonSymbol;
      /**
       * A value indicating whether the marker stands a marker upright as though locked in place. The marker can be viewed from all angles.
       */
      verticalOrientation3D?: boolean;
      /**
       * A value indicating whether the strokes and/or fills of a marker are scaled proportionally when the symbol size is changed. When enabled, the strokes for the outline or fill of the polygon symbol used to draw the marker will be scaled proportionally with changes to the symbol size. If this property is not enabled, the stroke will draw with the specified width regardless of the marker size.
       */
      scaleSymbolsProportionally?: boolean;
      /**
       * A value indicating whether the frame of the character marker should be honored when transforming the marker.
       */
      respectFrame?: boolean;
    }

    /**
     * Represents a vector marker clipping path.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMClippingPath)
     */
    export interface CIMClippingPath {
      type: "CIMClippingPath";
      /**
       * The clipping type.
       */
      clippingType?: keyof typeof ClippingType;
      /**
       * The clipping path.
       */
      path?: ExternalReferencePolygon;
    }

    /**
     * Represents color substitution, an ordered list of color substitutes.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMColorSubstitution)
     */
    export interface CIMColorSubstitution {
      type: "CIMColorSubstitution";
      /**
       * The old color (the color that will be substituted).
       */
      oldColor?: number[];
      /**
       * The new color that will replace the old color.
       */
      newColor?: number[];
    }

    /**
     * CIMGeometricEffectBase
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffect)
     */
    export interface CIMGeometricEffectBase {
      type: string;
      /**
       * The primitive name.
       */
      primitiveName?: string;
    }

    /**
     * Represents the add control points geometric effect. Dynamically adds geometry control points to a feature to dictate the placement of markers or other effect properties that leverage control points. Control points are placed at angles or deflection based on the AngleTolerance value.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectAddControlPoints)
     */
    export interface CIMGeometricEffectAddControlPoints extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectAddControlPoints";
      /**
       * The value below which a control point will be placed. The maximum amount of deflection from one segment to another at a vertex. Angle values between 180 and 360 are interpreted the same as values between 0 and 180. Angle values of 180 and 360 are the same as 0.
       */
      angleTolerance?: number;
    }

    /**
     * Represents the arrow geometric effect which creates a dynamic line along a line feature with an arrow of a specified arrow type and width.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectArrow)
     */
    export interface CIMGeometricEffectArrow extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectArrow";
      /**
       * The type of arrow to be displayed.
       */
      geometricEffectArrowType?: keyof typeof GeometricEffectArrowType;
      /**
       * The distance between the lines that construct the body of the arrow.
       */
      width?: number;
    }

    /**
     * Represents the buffer geometric effect which creates a dynamic polygon with a specified distance around features.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectBuffer)
     */
    export interface CIMGeometricEffectBuffer extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectBuffer";
      /**
       * The distance from the feature. This distance is either from the edge of the marker, the edge of the stroke or the edge of the polygon outline.
       */
      size?: number;
    }

    /**
     * Represents the cut geometric effect which creates a dynamic line that is shorter on one or both ends than the line feature or polygon outline.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectCut)
     */
    export interface CIMGeometricEffectCut extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectCut";
      /**
       * The distance from the beginning of a line that the display of the stroke starts. The beginning of the line is determined by the direction in which the line was digitized.
       */
      beginCut?: number;
      /**
       * The distance from the end of a line that the display of the stroke ends. The end of the line is determined by the direction in which the line was digitized.
       */
      endCut?: number;
      /**
       * The distance around the middle of a line that the display of the stroke is interrupted.
       */
      middleCut?: number;
      /**
       * A value indicating whether the effect should be applied in the opposite manner. This displays the stroke symbol only at the ends of the line and leaves the rest of the line unsymbolized.
       */
      invert?: boolean;
    }

    /**
     * Represents the dashes geometric effect which creates a dynamic multipart line geometry from a line feature or the outline of a polygon based on a template.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectDashes)
     */
    export interface CIMGeometricEffectDashes extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectDashes";
      /**
       * Where the pattern should end relative to the ending point of the geometry. Negative numbers indicate a shift to the left and positive numbers a shift to the right. This property is only applied if the LineDashEnding is set to Custom.
       */
      customEndingOffset?: number;
      /**
       * The distance for each dash and gap. There can be multiple dash and gap values to form a complex pattern.
       */
      dashTemplate?: number[];
      /**
       * The setting which determines how the strokes with dash patterns and other patterns (pictures, placement effects) are handled at the end points of the line geometry's segments.
       */
      lineDashEnding?: keyof typeof LineDashEnding;
      /**
       * The position where the pattern should begin relative to the starting point of the geometry. It shifts the entire pattern along the line the specified distance. Negative values indicate a shift to the left and positive numbers a shift to the right. This property is only applied if LineDashEnding is set to NoConstraint or Custom.
       */
      offsetAlongLine?: number;
      /**
       * The line dash ending position.
       */
      controlPointEnding?: keyof typeof LineDashEnding;
    }

    /**
     * Represents the donut geometric effect which creates a dynamic polygon ring of a specified width in relation to the outline of polygon features.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectDonut)
     */
    export interface CIMGeometricEffectDonut extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectDonut";
      /**
       * The method which specifies the way the strokes are displayed at convex corners of the polygon.
       */
      method?: keyof typeof GeometricEffectDonutMethod;
      /**
       * The option for the way the symbol handles complex geometries.
       */
      option?: keyof typeof GeometricEffectOffsetOption;
      /**
       * The distance from the edge of the polygon that the fill symbol is to be displayed.
       */
      width?: number;
    }

    /**
     * Represents the enclosing polygon geometric effect which creates a dynamic polygon from the spatial extent of a line or polygon feature.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectEnclosingPolygon)
     */
    export interface CIMGeometricEffectEnclosingPolygon extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectEnclosingPolygon";
      /**
       * The method which specifies the way in which the polygon geometry is generated around the feature geometry.
       */
      method?: keyof typeof GeometricEffectEnclosingPolygonMethod;
    }

    /**
     * Represents the extension geometric effect which creates a dynamic line that is extended from either the beginning or the end of the line feature at a specified deflection angle and length.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectExtension)
     */
    export interface CIMGeometricEffectExtension extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectExtension";
      /**
       * The deflection angle used for the extension. A value of 0 indicates no deflection.
       */
      deflection?: number;
      /**
       * The origin of the extension to add to the line. The beginning and end of the line is defined by the direction the line was digitized.
       */
      origin?: keyof typeof GeometricEffectExtensionOrigin;
      /**
       * The length of the extension that is dynamically created.
       */
      length?: number;
    }

    /**
     * Represents the jog geometric effect which creates a dynamic line with a jog of a specified angle, position, and width in the line.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectJog)
     */
    export interface CIMGeometricEffectJog extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectJog";
      /**
       * The angle of the jog in the line which is measured in degrees.
       */
      angle?: number;
      /**
       * The length of the segment that forms the jog in the line.
       */
      length?: number;
      /**
       * The location of the center of the jog, as a percentage measured from the start of the input geometry.
       */
      position?: number;
    }

    /**
     * Represents a geometric effect which creates a localizer feather for aeronautical charts.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectLocalizerFeather)
     */
    export interface CIMGeometricEffectLocalizerFeather extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectLocalizerFeather";
      /**
       * The localizer feather style.
       */
      style?: keyof typeof GeometricEffectLocalizerFeatherStyle;
      /**
       * The length of the localizer feather.
       */
      length?: number;
      /**
       * The width of the localizer feather.
       */
      width?: number;
      /**
       * The angle of the localizer feather.
       */
      angle?: number;
    }

    /**
     * Represents the move geometric effect which creates a point, line or polygon that is offset a specified distance in X and Y.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectMove)
     */
    export interface CIMGeometricEffectMove extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectMove";
      /**
       * The distance to move the symbol along the X-axis of the feature geometry.
       */
      offsetX?: number;
      /**
       * The distance to move the symbol along the Y-axis of the feature geometry.
       */
      offsetY?: number;
    }

    /**
     * Represents the offset geometric effect which creates a dynamic line or polygon offset at a specified distance perpendicularly from a feature.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectOffset)
     */
    export interface CIMGeometricEffectOffset extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectOffset";
      /**
       * The way the strokes or fills are displayed at corners.
       */
      method?: keyof typeof GeometricEffectOffsetMethod;
      /**
       * The distance of the symbol perpendicular to the feature geometry.
       */
      offset?: number;
      /**
       * The way the symbol handles complex geometries.
       */
      option?: keyof typeof GeometricEffectOffsetOption;
    }

    /**
     * Represents a geometric effect which creates a hatch pattern to depict special use airspace for aeronautical charts.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectOffsetHatch)
     */
    export interface CIMGeometricEffectOffsetHatch extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectOffsetHatch";
      /**
       * The length of the offset hatch.
       */
      length?: number;
      /**
       * The spacing of the offset hatch.
       */
      spacing?: number;
    }

    /**
     * Represents the offset tangent geometric effect which creates a dynamic line along a line feature offset in the direction defined by either the beginning or the end of the line.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectOffsetTangent)
     */
    export interface CIMGeometricEffectOffsetTangent extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectOffsetTangent";
      /**
       * The origin of the tangent offset for the line. The beginning and end of the lines are defined by how the line was digitized.
       */
      method?: keyof typeof GeometricEffectOffsetTangentMethod;
      /**
       * The distance the geometry is moved tangent.
       */
      offset?: number;
    }

    /**
     * Represents the radial geometric effect which creates a dynamic line of a specified length and angle originating from a point feature.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectRadial)
     */
    export interface CIMGeometricEffectRadial extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectRadial";
      /**
       * The orientation of the line from the marker. The angle is calculated in a counterclockwise manner with 0 degrees equal to due east.
       */
      angle?: number;
      /**
       * The distance of the line from end to end.
       */
      length?: number;
    }

    /**
     * Represents the regular polygon geometric effect which creates a dynamic polygon around a point feature with a specified number of edges. All edges are equal in length and all angles are equal.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectRegularPolygon)
     */
    export interface CIMGeometricEffectRegularPolygon extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectRegularPolygon";
      /**
       * The amount of rotation for the polygon.
       */
      angle?: number;
      /**
       * The number of sides for the polygon. Specifying a value less than 3 produces a circle.
       */
      edges?: number;
      /**
       * The distance from the center of the polygon.
       */
      radius?: number;
    }

    /**
     * Represents the reverse geometric effect which creates a dynamic polygon around a point feature with a specified number of edges. All edges are equal in length and all angles are equal.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectReverse)
     */
    export interface CIMGeometricEffectReverse extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectReverse";
      /**
       * A value indicating whether the dynamic output of a previous geometric effect is to be flipped or not.
       */
      reverse?: boolean;
    }

    /**
     * Represents the rotate geometric effect which creates a dynamic line or polygon rotated a specified angle from the feature.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectRotate)
     */
    export interface CIMGeometricEffectRotate extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectRotate";
      /**
       * The amount of rotation for the symbol.
       */
      angle?: number;
    }

    /**
     * Represents the rotate geometric effect which creates a dynamic line or polygon scaled by a specified factor. Vertices are moved in relation to the center point of a feature envelope. Values greater than 1 move vertices away from the center point. Values between 0 and 1 move vertices toward the center point. Values less than 0 draw an inverse dynamic line or polygon where the vertices have crossed to the other side of the center point.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectScale)
     */
    export interface CIMGeometricEffectScale extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectScale";
      /**
       * The amount of change in size of a symbol in the x-axis. The value is expressed in terms of a ratio/percentage.
       */
      XScaleFactor?: number;
      /**
       * The amount of change in size of a symbol in the y-axis. The value is expressed in terms of a ratio/percentage.
       */
      YScaleFactor?: number;
    }

    /**
     * Represents the suppress geometric effect which creates a dynamic line that hides sections of a stroke between pairs control points.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectSuppress)
     */
    export interface CIMGeometricEffectSuppress extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectSuppress";
      /**
       * A value indicating whether the portion of the stroke symbol between control points should be suppressed. Sections that are suppressed draw with no symbol.
       */
      suppress?: boolean;
      /**
       * A value indicating whether to invert the suppression process. If this value is true, portions of the stroke symbol between control points are kept and all other portions are suppressed.
       */
      invert?: boolean;
    }

    /**
     * Represents the tapered polygon geometric effect which creates a dynamic polygon along a line feature, whose width varies by two specified amounts along its length, as defined by a percentage of the line feature's length.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectTaperedPolygon)
     */
    export interface CIMGeometricEffectTaperedPolygon extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectTaperedPolygon";
      /**
       * The width at the start of the line to be used to generate a polygon.
       */
      fromWidth?: number;
      /**
       * The distance along the line to be used to generate the polygon.
       */
      length?: number;
      /**
       * The width at the end of the line to be used to generate the polygon.
       */
      toWidth?: number;
    }

    /**
     * Represents the wave geometric effect which creates a dynamic line or polygon along a feature with a repeating wave pattern.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGeometricEffectWave)
     */
    export interface CIMGeometricEffectWave extends CIMGeometricEffectBase {
      type: "CIMGeometricEffectWave";
      /**
       * The distance perpendicular to a feature to display the curves for the symbol.
       */
      amplitude?: number;
      /**
       * The distance along the line or polygon to display the curves for the symbol.
       */
      period?: number;
      /**
       * The staring value for generating a random number. This is only used when the Waveform is set to Random.
       */
      seed?: number;
      /**
       * The shape of the curves to be displayed along the symbol.
       */
      waveform?: keyof typeof GeometricEffectWaveform;
    }

    /**
     * CIMFill
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMFill)
     */
    export interface CIMFill extends CIMSymbolLayerBase {}

    /**
     * Represents a gradient fill which fills polygonal geometry with a specified color scheme.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGradientFill)
     */
    export interface CIMGradientFill extends CIMFill {
      type: "CIMGradientFill";
      /**
       * The angle of the gradient when the GradientMethod is set to Linear or Rectangular.
       */
      angle?: number;
      /**
       * The color scheme that is applied to the fill.
       */
      colorRamp?: any;
      /**
       * A value which specifies how the gradient is applied within the fill.
       */
      gradientMethod?: keyof typeof GradientFillMethod;
      /**
       * A value which determines how much of the feature is covered by the color scheme. This is either a percentage of the total area which the color scheme spans or the number of page units from the starting point at which the gradient displays.
       */
      gradientSize?: number;
      /**
       * A value which specifies whether GradientSize is applied with an absolute distance or a relative percentage.
       */
      gradientSizeUnits?: keyof typeof SymbolUnits;
      /**
       * A value which specifies if the gradient is applied with discrete intervals or if it is continuous.
       */
      gradientType?: keyof typeof GradientStrokeType;
      /**
       * How many bands draw when the GradientType is set to Discrete.
       */
      interval?: number;
    }

    /**
     * CIMStroke
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMStroke)
     */
    export interface CIMStroke extends CIMSymbolLayerBase {
      /**
       * How the stroke should draw at the ends of the geometries.
       */
      capStyle?: keyof typeof LineCapStyle;
      /**
       * How the symbol is drawn at the stroke segment connections.
       */
      joinStyle?: keyof typeof LineJoinStyle;
      /**
       * How strokes will be rendered in 3D.
       */
      lineStyle3D?: keyof typeof Simple3DLineStyle;
      /**
       * The maximum 'sharpness' that is allowed for Miter joins. If the spike created by the miter join exceeds the miter limit times the width of the stroke, the sharp angle will be clipped and rendered with a bevel join. This property is only applied to the symbol layer when the JoinType is set to Miter.
       */
      miterLimit?: number;
      /**
       * The width of the stroke.
       */
      width?: number;
      /**
       * A value indicating whether to close caps when drawing them in 3D. When set to false, the caps are hollow.
       */
      closeCaps3D?: boolean;
    }

    /**
     * Represents a gradient stroke which draws linear geometry with a specified color scheme.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMGradientStroke)
     */
    export interface CIMGradientStroke extends CIMStroke {
      type: "CIMGradientStroke";
      /**
       * The color scheme that is applied to the stroke.
       */
      colorRamp?: any;
      /**
       * How the gradient is applied along the stroke.
       */
      gradientMethod?: keyof typeof GradientStrokeMethod;
      /**
       * How much of the feature is covered by the color scheme. This is either a percentage of the total area which the color scheme spans or the number of page units from the starting point at which the gradient displays.
       */
      gradientSize?: number;
      /**
       * Whether GradientSize is applied with an absolute distance or a relative percentage.
       */
      gradientSizeUnits?: keyof typeof SymbolUnits;
      /**
       * Whether the gradient is applied with discrete or continuous intervals.
       */
      gradientType?: keyof typeof GradientStrokeType;
      /**
       * How many bands draw when the GradientType is set to Discrete.
       */
      interval?: number;
    }

    /**
     * Represents a hatch fill which fills polygonal geometry with a uniform series of parallel line symbols.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMHatchFill)
     */
    export interface CIMHatchFill extends CIMFill {
      type: "CIMHatchFill";
      /**
       * The line symbol that is used to draw the hatch lines in the fill.
       */
      lineSymbol?: CIMLineSymbol;
      /**
       * How much to move the stroke to a new X-position.
       */
      offsetX?: number;
      /**
       * The angle of rotation for all the strokes, in degrees.
       */
      rotation?: number;
      /**
       * The distance between the line symbols in the hatch pattern.
       */
      separation?: number;
      /**
       * How much to move the stroke to a new Y-position.
       */
      offsetY?: number;
    }

    /**
     * CIMSymbolBase
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMSymbol)
     */
    export interface CIMSymbolBase {
      type: string;
    }

    /**
     * CIMMultiLayerSymbol
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMMultiLayerSymbol)
     */
    export interface CIMMultiLayerSymbol extends CIMSymbolBase {
      /**
       * The geometric effects that are applied to the symbol.
       */
      effects?: CIMGeometricEffectType[];
      /**
       * The symbol layers. Symbol layers are the components that make up a symbol. A symbol layer is represented by a stroke, fill, marker, or procedural symbol layer.
       */
      symbolLayers?: CIMSymbolLayerType[];
      /**
       * The representative image of the symbol.
       */
      thumbnailURI?: string;
      /**
       * A value indicating whether the symbol size properties are rendered using real world units or page units. When set to true the symbol will draw using real world units (e.g. meters).
       */
      useRealWorldSymbolSizes?: boolean;
    }

    /**
     * Represents a line symbol which is used to draw polyline features or graphics.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMLineSymbol)
     */
    export interface CIMLineSymbol extends CIMMultiLayerSymbol {
      type: "CIMLineSymbol";
    }

    /**
     * Represents a marker graphic which is used to define vector graphics in a vector marker.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMMarkerGraphic)
     */
    export interface CIMMarkerGraphic {
      type: "CIMMarkerGraphic";
      /**
       * The geometry of the marker.
       */
      geometry?: ExternalReferenceGeometry;
      /**
       * The symbol used to draw the marker graphic, can be a point, line, polygon, or text symbol.
       */
      symbol?: CIMSymbolType;
      /**
       * The text that is defined within the marker if drawn with a text symbol.
       */
      textString?: string;
      /**
       * The primitive name.
       */
      primitiveName?: string;
    }

    /**
     * CIMMarkerPlacementBase
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMMarkerPlacement)
     */
    export interface CIMMarkerPlacementBase {
      type: string;
      /**
       * The primitive name.
       */
      primitiveName?: string;
    }

    /**
     * CIMMarkerStrokePlacement
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMMarkerStrokePlacement)
     */
    export interface CIMMarkerStrokePlacement extends CIMMarkerPlacementBase {
      /**
       * A value indicating whether to angle the marker to the line.
       */
      angleToLine?: boolean;
      /**
       * The offset.
       */
      offset?: number;
    }

    /**
     * CIMMarkerPlacementAlongLine
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMMarkerPlacementAlongLine)
     */
    export interface CIMMarkerPlacementAlongLine extends CIMMarkerStrokePlacement {
      /**
       * How markers are placed at control points.
       */
      controlPointPlacement?: keyof typeof PlacementEndings;
      /**
       * Where the pattern should end relative to the ending point of the geometry. The entire pattern is shifted along the line for the specified distance. Negative numbers shift to the left and positive numbers shift to the right. This is only applied if the Endings property is set to Custom.
       */
      customEndingOffset?: number;
      /**
       * How markers are placed at the end points of a line.
       */
      endings?: keyof typeof PlacementEndings;
      /**
       * Where the pattern should begin relative to the starting point of the geometry. The entire pattern is shifted along the line for the specified distance. Negative numbers shift to the left and positive numbers shift to the right. This is only applied if the Endings property is set to No Constraint or Custom.
       */
      offsetAlongLine?: number;
      /**
       * The numeric pattern that defines the sequence of placed markers and the length of space between them.
       */
      placementTemplate?: number[];
    }

    /**
     * Represents marker placement along the line which places randomly sized markers evenly along a line or polygon outline.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMMarkerPlacementAlongLineRandomSize)
     */
    export interface CIMMarkerPlacementAlongLineRandomSize extends CIMMarkerPlacementAlongLine {
      type: "CIMMarkerPlacementAlongLineRandomSize";
      /**
       * The amount of randomness to be used for the size and rotation of the markers on the line. The size and rotation of the marker will vary for individual markers.
       */
      randomization?: keyof typeof PlacementRandomlyAlongLineRandomization;
      /**
       * The starting value for generating a random number. This random number is used by the Randomization property to determine the marker shape.
       */
      seed?: number;
    }

    /**
     * Represents marker placement along the line which places markers that are the same size evenly along a line or polygon outline.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMMarkerPlacementAlongLineSameSize)
     */
    export interface CIMMarkerPlacementAlongLineSameSize extends CIMMarkerPlacementAlongLine {
      type: "CIMMarkerPlacementAlongLineSameSize";
    }

    /**
     * Represents marker placement along the line which places markers in either increasing, decreasing or alternating gradations along a line or polygon outline.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMMarkerPlacementAlongLineVariableSize)
     */
    export interface CIMMarkerPlacementAlongLineVariableSize extends CIMMarkerPlacementAlongLine {
      type: "CIMMarkerPlacementAlongLineVariableSize";
      /**
       * The maximum random offset.
       */
      maxRandomOffset?: number;
      /**
       * The largest size of the marker to be placed on the line. The value is expressed as a ratio.
       */
      maxZoom?: number;
      /**
       * The smallest size of the marker to be placed on the line. The value is expressed as a ratio.
       */
      minZoom?: number;
      /**
       * The number of different sizes of markers to be placed on the line.
       */
      numberOfSizes?: number;
      /**
       * The starting value for generating a random number. This random number is used by the Randomization property to determine which size a marker will receive. This is only used if the VariationMethod is set to Random.
       */
      seed?: number;
      /**
       * The order in which the change of size in the markers should occur.
       */
      variationMethod?: keyof typeof SizeVariationMethod;
    }

    /**
     * Represents marker placement at extremities which places markers at only one or both endpoints of a line.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMMarkerPlacementAtExtremities)
     */
    export interface CIMMarkerPlacementAtExtremities extends CIMMarkerStrokePlacement {
      type: "CIMMarkerPlacementAtExtremities";
      /**
       * Which ends of the line a marker will be placed.
       */
      extremityPlacement?: keyof typeof ExtremityPlacement;
      /**
       * The distance from the ends of a line that the marker will be placed.
       */
      offsetAlongLine?: number;
    }

    /**
     * Represents marker placement at geometry M values.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMMarkerPlacementAtMeasuredUnits)
     */
    export interface CIMMarkerPlacementAtMeasuredUnits extends CIMMarkerStrokePlacement {
      type: "CIMMarkerPlacementAtMeasuredUnits";
      /**
       * The interval of measured units used to place markers.
       */
      interval?: number;
      /**
       * The rate of markers to skip.
       */
      skipMarkerRate?: number;
      /**
       * A value indicating whether markers should be placed at extremities.
       */
      placeAtExtremities?: boolean;
    }

    /**
     * Represents marker placement at ratio positions which places a set number of markers along the line or the outline of a polygon.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMMarkerPlacementAtRatioPositions)
     */
    export interface CIMMarkerPlacementAtRatioPositions extends CIMMarkerStrokePlacement {
      type: "CIMMarkerPlacementAtRatioPositions";
      /**
       * The distance from the beginning of a line that the marker will be placed.
       */
      beginPosition?: number;
      /**
       * The distance from the end of a line that the marker will be placed. The ending of a line is determined by the direction in which the line was digitized.
       */
      endPosition?: number;
      /**
       * A value indicating whether only the first marker will be rotated 180 degrees.
       */
      flipFirst?: boolean;
      /**
       * The array of positions.
       */
      positionArray?: number[];
    }

    /**
     * CIMMarkerFillPlacement
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMMarkerFillPlacement)
     */
    export interface CIMMarkerFillPlacement extends CIMMarkerPlacementBase {}

    /**
     * Represents marker placement inside a polygon which defines how a polygon is filled with a pattern of markers.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMMarkerPlacementInsidePolygon)
     */
    export interface CIMMarkerPlacementInsidePolygon extends CIMMarkerFillPlacement {
      type: "CIMMarkerPlacementInsidePolygon";
      /**
       * The orientation angle that the markers are placed on within the polygon.
       */
      gridAngle?: number;
      /**
       * The grid type which defines how markers are placed.
       */
      gridType?: keyof typeof PlacementGridType;
      /**
       * The marker row offset horizontally.
       */
      offsetX?: number;
      /**
       * The randomness of the pattern when markers are placed randomly in a polygon.
       */
      randomness?: number;
      /**
       * The starting value for generating a random pattern.
       */
      seed?: number;
      /**
       * A value indicating whether every other row of markers should be shifted to create an offset grid.
       */
      shiftOddRows?: boolean;
      /**
       * The distance between each marker on the X-axis of the grid.
       */
      stepX?: number;
      /**
       * The distance between each marker on the Y-axis of the grid.
       */
      stepY?: number;
      /**
       * The marker row offset vertically.
       */
      offsetY?: number;
      /**
       * The clipping option which specifies how markers should be clipped at the polygon boundary.
       */
      clipping?: keyof typeof PlacementClip;
    }

    /**
     * Represents a marker placement on the line.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMMarkerPlacementOnLine)
     */
    export interface CIMMarkerPlacementOnLine extends CIMMarkerStrokePlacement {
      type: "CIMMarkerPlacementOnLine";
      /**
       * The location on a line where a marker will be placed. The direction of the line is determined by the direction in which the line was digitized.
       */
      relativeTo?: keyof typeof PlacementOnLineRelativeTo;
      /**
       * The distances from a specified location on a line that a marker will be placed.
       */
      startPointOffset?: number;
    }

    /**
     * Represents a marker placement on vertices which places a single marker on a line or polygon outline at a set distance from the middle or one of the endpoints.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMMarkerPlacementOnVertices)
     */
    export interface CIMMarkerPlacementOnVertices extends CIMMarkerStrokePlacement {
      type: "CIMMarkerPlacementOnVertices";
      /**
       * A value indicating whether a marker will be placed on the control points of the line.
       */
      placeOnControlPoints?: boolean;
      /**
       * A value indicating whether a marker will be placed on the endpoints of the line.
       */
      placeOnEndPoints?: boolean;
      /**
       * A value indicating whether a marker will be placed on the vertices of the line.
       */
      placeOnRegularVertices?: boolean;
    }

    /**
     * Represents marker placement polygon center which defines how a single marker will be placed within the polygon.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMMarkerPlacementPolygonCenter)
     */
    export interface CIMMarkerPlacementPolygonCenter extends CIMMarkerFillPlacement {
      type: "CIMMarkerPlacementPolygonCenter";
      /**
       * The method used to determine the polygon center.
       */
      method?: keyof typeof PlacementPolygonCenterMethod;
      /**
       * The value which offsets the marker horizontally from the center.
       */
      offsetX?: number;
      /**
       * The value which offsets the marker vertically from the center.
       */
      offsetY?: number;
      /**
       * A value indicating whether the marker should be clipped if it extends pasts the boundary of the polygon.
       */
      clipAtBoundary?: boolean;
    }

    /**
     * Represents material properties.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMMaterialProperties)
     */
    export interface CIMMaterialProperties {
      type: "CIMMaterialProperties";
      /**
       * The specular color.
       */
      specularColor?: number[];
      /**
       * The shininess.
       */
      shininess?: number;
      /**
       * How this material combines with externally defined colors.
       */
      externalColorMixMode?: keyof typeof ExternalColorMixMode;
    }

    /**
     * Represents a material which defines how the multipatch or mesh is drawn.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMMaterialSymbolLayer)
     */
    export interface CIMMaterialSymbolLayer extends CIMSymbolLayerBase {
      type: "CIMMaterialSymbolLayer";
      /**
       * The material color.
       */
      color?: number[];
      /**
       * The mode in which the material is applied.
       */
      materialMode?: keyof typeof MaterialMode;
    }

    /**
     * Represents a marker symbol for 3D objects.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMObjectMarker3D)
     */
    export interface CIMObjectMarker3D extends CIMMarker {
      type: "CIMObjectMarker3D";
      /**
       * The URI of the binary reference containing the "web resource".
       */
      modelURI?: string;
      /**
       * The marker width.
       */
      width?: number;
      /**
       * The marker depth.
       */
      depth?: number;
      /**
       * The color which defines the color that is applied to the marker.
       */
      tintColor?: number[];
      /**
       * A value indicating whether the model can be exported.
       */
      isRestricted?: boolean;
      /**
       * The representative image of the marker.
       */
      thumbnail?: string;
      /**
       * A value indicating whether or not to ignore the marker anchor point and insert the model directly at the data point.
       */
      useAnchorPoint?: boolean;
      /**
       * The array of levels of detail.
       */
      LODs?: CIMObjectMarker3DLOD[];
    }

    /**
     * Represents a level of detail of an object marker 3D.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMObjectMarker3DLOD)
     */
    export interface CIMObjectMarker3DLOD {
      type: "CIMObjectMarker3DLOD";
      /**
       * The total number of triangles in the geometry of this level of detail.
       */
      faceCount?: number;
      /**
       * The URI of the binary reference containing the "web resource" for this level of detail.
       */
      modelURI?: string;
    }

    /**
     * Represents a picture fill which fills polygonal geometry with a picture. Supported file types are .bmp, .jpg, .png, and .gif.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMPictureFill)
     */
    export interface CIMPictureFill extends CIMFill {
      type: "CIMPictureFill";
      /**
       * The URL of the image. Typically a base64 encoded image.
       */
      url?: string;
      /**
       * The distance that the image is offset in the horizontal direction.
       */
      offsetX?: number;
      /**
       * The distance that the image is offset in the vertical direction.
       */
      offsetY?: number;
      /**
       * Angle of the image within the fill.
       */
      rotation?: number;
      /**
       * The width of the symbol without changing the height (or depth in 3D), as a ratio.
       */
      scaleX?: number;
      /**
       * The height of the image.
       */
      height?: number;
      /**
       * How the image is resampled.
       */
      textureFilter?: keyof typeof TextureFilter;
      /**
       * The color substitutions which allows colors in the image to be substituted with a different color.
       */
      colorSubstitutions?: CIMColorSubstitution[];
      /**
       * The color that is applied as a tint to the image. The color is applied to the whole image. When the tint is set to white the image appears with its native colors.
       */
      tintColor?: number[];
    }

    /**
     * Represents a picture marker created from a raster (bitmapped) image file. The image can have color substitutions to replace one or more colors in the image or it can have a tint applied to the whole image depending on the picture type. Supported formats are .bmp, .jpg, .png, and .gif.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMPictureMarker)
     */
    export interface CIMPictureMarker extends CIMMarker {
      type: "CIMPictureMarker";
      /**
       * The color substitutions for the picture.
       */
      colorSubstitutions?: CIMColorSubstitution[];
      /**
       * The depth of the image when drawn in 3D.
       */
      depth3D?: number;
      /**
       * A value indicating whether the image is right-reading when viewed from behind.
       */
      invertBackfaceTexture?: boolean;
      /**
       * The scale X which changes the width of the symbol without changing the height (or depth in 3D), as a ratio.
       */
      scaleX?: number;
      /**
       * How the image is resampled.
       */
      textureFilter?: keyof typeof TextureFilter;
      /**
       * The color that is applied as a tint to the image. The color is applied to the whole image. When the tint is set to white the image appears with its native colors.
       */
      tintColor?: number[];
      /**
       * The image that is used in the symbol layer. Typically a base64 encoded image.
       */
      url?: string;
      /**
       * A value indicating whether the marker stands upright as though locked in place. The marker can be viewed from all angles.
       */
      verticalOrientation3D?: boolean;
    }

    /**
     * Represents a picture stroke which draws linear geometry with a repeating image file. Supported file types are .bmp, .jpg, .png, and .gif.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMPictureStroke)
     */
    export interface CIMPictureStroke extends CIMStroke {
      type: "CIMPictureStroke";
      /**
       * The color substitutions for the picture.
       */
      colorSubstitutions?: CIMColorSubstitution[];
      /**
       * How the image is resampled.
       */
      textureFilter?: keyof typeof TextureFilter;
      /**
       * The image that is used in the symbol layer. Typically a base64 encoded image.
       */
      url?: string;
      /**
       * The color that is applied as a tint to the image. The color is applied to the whole image. When the tint is set to white the image appears with its native colors.
       */
      tintColor?: number[];
    }

    /**
     * Represents a point symbol used to draw point features and point graphics.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMPointSymbol)
     */
    export interface CIMPointSymbol extends CIMMultiLayerSymbol {
      type: "CIMPointSymbol";
      /**
       * The callout of the point symbol.
       */
      callout?: CIMCalloutType;
      /**
       * The size of the halo that extends beyond the symbol shape.
       */
      haloSize?: number;
      /**
       * The polygon symbol that is used to draw the halo for a point symbol.
       */
      haloSymbol?: CIMPolygonSymbol;
      /**
       * The primitive name.
       */
      primitiveName?: string;
      /**
       * The X scale which changes the width of the symbol without changing the height (or depth in 3D), as a ratio.
       */
      scaleX?: number;
      /**
       * The collection of symbol properties that apply when the symbol is used in a 3D context.
       */
      symbol3DProperties?: CIM3DSymbolProperties;
      /**
       * The amount of variation applied to the symbol, measured in degrees, propagated cumulatively to all marker symbols.
       */
      angle?: number;
      /**
       * Whether point symbols align to the map or to the display when a rotation is applied to the map.
       */
      angleAlignment?: keyof typeof AngleAlignment;
    }

    /**
     * Represents a polygon symbol which is used to draw polygon features or polygon graphics.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMPolygonSymbol)
     */
    export interface CIMPolygonSymbol extends CIMMultiLayerSymbol {
      type: "CIMPolygonSymbol";
    }

    /**
     * Represents shape vertices.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMShapeVertices)
     */
    export interface CIMShapeVertices {
      type: "CIMShapeVertices";
      /**
       * The indices.
       */
      indices?: number;
      /**
       * The shape.
       */
      shapes?: string;
    }

    /**
     * Represents a solid fill which fills polygonal geometry with a single solid color.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMSolidFill)
     */
    export interface CIMSolidFill extends CIMFill {
      type: "CIMSolidFill";
      /**
       * The color that is applied to the fill.
       */
      color?: number[];
    }

    /**
     * Represents a solid stroke which draws linear geometry with a single solid color.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMSolidStroke)
     */
    export interface CIMSolidStroke extends CIMStroke {
      type: "CIMSolidStroke";
      /**
       * The color that is applied to the stroke.
       */
      color?: number[];
    }

    /**
     * Represents a text margin which defines the margin to apply around text.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMTextMargin)
     */
    export interface CIMTextMargin {
      type: "CIMTextMargin";
      /**
       * The left margin.
       */
      left?: number;
      /**
       * The right margin.
       */
      right?: number;
      /**
       * The top margin.
       */
      top?: number;
      /**
       * The bottom margin.
       */
      bottom?: number;
    }

    /**
     * Represents a text symbol which is used to draw text graphics, bleeds, and annotation. Text symbols do not contain any symbol layers but can have callouts.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMTextSymbol)
     */
    export interface CIMTextSymbol extends CIMSymbolBase {
      type: "CIMTextSymbol";
      /**
       * The amount of rotation applied to the text symbol, measured in degrees, around the geometry.
       */
      angle?: number;
      /**
       * The amount of rotation of the text symbol around the X axis, measured in degrees, around the geometry. This type of rotation is also referred to as tilt. It is applied in 3D.
       */
      angleX?: number;
      /**
       * The amount of rotation of the text symbol around the Y axis, measured in degrees, around the geometry. This type of rotation is also referred to as roll. It is applied in 3D.
       */
      angleY?: number;
      /**
       * The direction in which multi-line text is stacked.
       */
      blockProgression?: keyof typeof BlockProgression;
      /**
       * The callout or background of the text with optional leader lines.
       */
      callout?: CIMCalloutType;
      /**
       * A value indicating whether to draw the text in a fashion compatible with ArcMap.
       */
      compatibilityMode?: boolean;
      /**
       * The ISO code for the base country of the text.
       */
      countryISO?: string;
      /**
       * The depth of the glyph when drawn in 3D. This is an extrusion of the characters of the text in the Z axis.
       */
      depth3D?: number;
      /**
       * A value indicating whether fonts that are drawn as rasters at some scales to draw as vectors instead.
       */
      drawGlyphsAsGeometry?: boolean;
      /**
       * A value indicating whether soft hyphens should be drawn. Soft hyphens are invisible markers that indicate where a hyphenated break is allowed within the text. They are only drawn if there is word wrapping at the end of a line.
       */
      drawSoftHyphen?: boolean;
      /**
       * A value indicating whether the baseline of the text geometry should be expanded in the same manner as the existing geometry if the text extends beyond the baseline.
       */
      extrapolateBaselines?: boolean;
      /**
       * The angle (in degrees from vertical) at which point rotated text is flipped (mirrored) in place.
       */
      flipAngle?: number;
      /**
       * Whether the text is drawn as subscript or superscript.
       */
      fontEffects?: keyof typeof FontEffects;
      /**
       * The font encoding.
       */
      fontEncoding?: keyof typeof FontEncoding;
      /**
       * The font family name of the font. e.g. Comic Sans.
       */
      fontFamilyName?: string;
      /**
       * The style name for the font family. e.g. Regular, Bold, or Italic.
       */
      fontStyleName?: string;
      /**
       * The type of font that the font family/style name reference.
       */
      fontType?: keyof typeof FontType;
      /**
       * An additional rotation that is applied to the individual glyphs contained in the text. This is applied to the individual glyphs whereas Angle, AngleX and AngleY are affect how the entire text string is oriented.
       */
      glyphRotation?: number;
      /**
       * The size of the halo that extends beyond the symbol shape.
       */
      haloSize?: number;
      /**
       * The polygon symbol that is used to draw the halo for a text symbol.
       */
      haloSymbol?: CIMPolygonSymbol;
      /**
       * The size of the text in points.
       */
      height?: number;
      /**
       * If hinting from the font is used for text rendering. Hinting is information included with most fonts to effectively fit the vector glyphs of the font into the raster grid onto which they are displayed.
       */
      hinting?: keyof typeof GlyphHinting;
      /**
       * The alignment type used to align the text to the geometry horizontally. Affects which side of a point geometry the point text is drawn or which end of a line it is drawn close to. Commonly used to define how stacked text appears.
       */
      horizontalAlignment?: keyof typeof HorizontalAlignment;
      /**
       * How many points to indent the text back from the end of the baseline.
       */
      indentAfter?: number;
      /**
       * How many points to indent the text from the beginning of the baseline.
       */
      indentBefore?: number;
      /**
       * How many points to indent the text from the beginning of the baseline for the first line only.
       */
      indentFirstLine?: number;
      /**
       * A value indicating whether the text is drawn with metric kerning, which adjusts the spacing between individual letter forms.
       */
      kerning?: boolean;
      /**
       * Whether the ISO code for the base language of the text.
       */
      languageISO?: string;
      /**
       * The additional spacing that is added to each glyph beyond what is defined by its character box in the font. Value indicates the percentage of a glyph's width. Also known as tracking.
       */
      letterSpacing?: number;
      /**
       * The width that is added to each glyph beyond what is defined by its character box in its font. This is a percentage of the original glyph.
       */
      letterWidth?: number;
      /**
       * A value indicating whether text is to be drawn with ligatures, which occur when two or more letters or portions of letters are joined to form a single glyph.
       */
      ligatures?: boolean;
      /**
       * The spacing between lines of text. This is also known as leading or line spacing.
       */
      lineGap?: number;
      /**
       * The type of line gap that is applied.
       */
      lineGapType?: keyof typeof LineGapType;
      /**
       * The X offset.
       */
      offsetX?: number;
      /**
       * The Y offset.
       */
      offsetY?: number;
      /**
       * The Z offset.
       */
      offsetZ?: number;
      /**
       * The color of the shadow that is defined for the text symbol. The shadow is drawn as an offset copy of the text.
       */
      shadowColor?: number[];
      /**
       * The shadow offset from the text symbol in the horizontal direction. If X and Y are zero, no shadow is drawn.
       */
      shadowOffsetX?: number;
      /**
       * The shadow offset from the text symbol in the vertical direction. If X and Y are zero, no shadow is drawn.
       */
      shadowOffsetY?: number;
      /**
       * A value indicating whether the text should be drawn as Small Capitals, where lower case text is converted to small caps and upper case text is left as upper case.
       */
      smallCaps?: boolean;
      /**
       * A value indicating whether to draw the text with a strike through it.
       */
      strikethrough?: boolean;
      /**
       * The polygon symbol that is used to draw the glyphs of the text.
       */
      symbol?: CIMPolygonSymbol;
      /**
       * The collection of properties that are applied to the text symbol only in a 3D context.
       */
      symbol3DProperties?: CIM3DSymbolProperties;
      /**
       * The letter case used to draw the text.
       */
      textCase?: keyof typeof TextCase;
      /**
       * The base text direction to draw the text.
       */
      textDirection?: keyof typeof TextReadingDirection;
      /**
       * A value indicating whether to draw the text with an underline.
       */
      underline?: boolean;
      /**
       * The vertical alignment of the text.
       */
      verticalAlignment?: keyof typeof VerticalAlignment;
      /**
       * The orientation for the non-vertical text in a vertical layout. For example, an English fragment in a Japanese text.
       */
      verticalGlyphOrientation?: keyof typeof VerticalGlyphOrientation;
      /**
       * The additional spacing that is added to between the words of the text string. 100% indicates that regular spacing is used.
       */
      wordSpacing?: number;
      /**
       * The billboard mode of the text symbol.
       */
      billboardMode3D?: keyof typeof BillboardMode;
      /**
       * A value indicating whether or not the symbol should overprint in press printing.
       */
      overprint?: boolean;
    }

    /**
     * Represents a vector marker which can represent vector graphics. It's constructed from MarkerGraphics which are geometries and symbols used as building blocks for the marker.
     *
     * [Read more...](https://github.com/Esri/cim-spec/blob/master/docs/v2/CIMSymbols.md#CIMVectorMarker)
     */
    export interface CIMVectorMarker extends CIMMarker {
      type: "CIMVectorMarker";
      /**
       * The depth of the marker when drawn in 3D.
       */
      depth3D?: number;
      /**
       * The outer boundary of the entire vector marker.
       */
      frame?: ExternalReferenceEnvelope;
      /**
       * The vector graphics that define the shape of the marker.
       */
      markerGraphics?: CIMMarkerGraphic[];
      /**
       * A value indicating whether the marker stands upright as though locked in place. The marker can be viewed from all angles.
       */
      verticalOrientation3D?: boolean;
      /**
       * A value indicating whether the strokes and or fills of a marker are scaled proportionally when the symbol size is changed. When enabled, the strokes for the outline or fill of the polygon symbol used to draw the marker will be scaled proportionally with changes to the symbol size. If this property is not enabled, then the stroke will draw with the specified width regardless of the marker size.
       */
      scaleSymbolsProportionally?: boolean;
      /**
       * A value indicating whether the frame of the vector marker should be honored when drawing the marker.
       */
      respectFrame?: boolean;
      /**
       * A clipping path for the vector marker graphics.
       */
      clippingPath?: CIMClippingPath;
    }

    export type CIMMarkerPlacementType =
      | CIMMarkerPlacementAlongLineRandomSize
      | CIMMarkerPlacementAlongLineSameSize
      | CIMMarkerPlacementAlongLineVariableSize
      | CIMMarkerPlacementAtExtremities
      | CIMMarkerPlacementAtMeasuredUnits
      | CIMMarkerPlacementAtRatioPositions
      | CIMMarkerPlacementOnLine
      | CIMMarkerPlacementOnVertices
      | CIMMarkerPlacementInsidePolygon
      | CIMMarkerPlacementPolygonCenter;
    export type CIMSymbolType = CIMLineSymbol | CIMPointSymbol | CIMPolygonSymbol | CIMTextSymbol;
    export type CIMGeometricEffectType =
      | CIMGeometricEffectAddControlPoints
      | CIMGeometricEffectArrow
      | CIMGeometricEffectBuffer
      | CIMGeometricEffectCut
      | CIMGeometricEffectDashes
      | CIMGeometricEffectDonut
      | CIMGeometricEffectEnclosingPolygon
      | CIMGeometricEffectExtension
      | CIMGeometricEffectJog
      | CIMGeometricEffectLocalizerFeather
      | CIMGeometricEffectMove
      | CIMGeometricEffectOffset
      | CIMGeometricEffectOffsetHatch
      | CIMGeometricEffectOffsetTangent
      | CIMGeometricEffectRadial
      | CIMGeometricEffectRegularPolygon
      | CIMGeometricEffectReverse
      | CIMGeometricEffectRotate
      | CIMGeometricEffectScale
      | CIMGeometricEffectSuppress
      | CIMGeometricEffectTaperedPolygon
      | CIMGeometricEffectWave;
    export type CIMSymbolLayerType =
      | CIMCharacterMarker
      | CIMObjectMarker3D
      | CIMPictureMarker
      | CIMVectorMarker
      | CIMGradientFill
      | CIMHatchFill
      | CIMPictureFill
      | CIMSolidFill
      | CIMGradientStroke
      | CIMPictureStroke
      | CIMSolidStroke
      | CIMMaterialSymbolLayer;
    export type CIMCalloutType = CIMLineCallout;

    export interface ExternalReferencePoint {
      x?: number;
      y?: number;
      z?: number;
      m?: number;
      spatialReference?: ExternalReferenceSpatialReference;
    }

    export interface ExternalReferencePolyline {
      hasM?: boolean;
      hasZ?: boolean;
      paths?: number[][][];
      curvePath?: number[][][];
      spatialReference?: ExternalReferenceSpatialReference;
    }

    export interface ExternalReferencePolygon {
      hasM?: boolean;
      hasZ?: boolean;
      rings?: number[][][];
      curveRings?: number[][][];
      spatialReference?: ExternalReferenceSpatialReference;
    }

    export interface ExternalReferenceEnvelope {
      mmax?: number;
      mmin?: number;
      xmax?: number;
      xmin?: number;
      ymax?: number;
      ymin?: number;
      zmax?: number;
      zmin?: number;
      spatialReference?: ExternalReferenceSpatialReference;
    }

    export interface ExternalReferenceSpatialReference {
      wkid?: number;
      latestWkid?: number;
      vcsWkid?: number;
      latestVcsWkid?: number;
    }

    export type ExternalReferenceGeometry =
      | ExternalReferencePoint
      | ExternalReferencePolyline
      | ExternalReferencePolygon
      | ExternalReferenceEnvelope;
  }
}

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/form/FormTemplate" {
  import FormTemplate = __esri.FormTemplate;
  export = FormTemplate;
}

declare module "esri/form/ExpressionInfo" {
  import ExpressionInfo = __esri.ExpressionInfo;
  export = ExpressionInfo;
}

declare module "esri/form/elements/Element" {
  import Element = __esri.Element;
  export = Element;
}

declare module "esri/form/elements/FieldElement" {
  import FieldElement = __esri.FieldElement;
  export = FieldElement;
}

declare module "esri/form/elements/GroupElement" {
  import GroupElement = __esri.GroupElement;
  export = GroupElement;
}

declare module "esri/form/elements/inputs/BarcodeScannerInput" {
  import BarcodeScannerInput = __esri.BarcodeScannerInput;
  export = BarcodeScannerInput;
}

declare module "esri/form/elements/inputs/ComboBoxInput" {
  import ComboBoxInput = __esri.ComboBoxInput;
  export = ComboBoxInput;
}

declare module "esri/form/elements/inputs/DateTimePickerInput" {
  import DateTimePickerInput = __esri.DateTimePickerInput;
  export = DateTimePickerInput;
}

declare module "esri/form/elements/inputs/RadioButtonsInput" {
  import RadioButtonsInput = __esri.RadioButtonsInput;
  export = RadioButtonsInput;
}

declare module "esri/form/elements/inputs/TextAreaInput" {
  import TextAreaInput = __esri.TextAreaInput;
  export = TextAreaInput;
}

declare module "esri/form/elements/inputs/TextBoxInput" {
  import TextBoxInput = __esri.TextBoxInput;
  export = TextBoxInput;
}

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/MeshMaterialMetallicRoughness" {
  import MeshMaterialMetallicRoughness = __esri.MeshMaterialMetallicRoughness;
  export = MeshMaterialMetallicRoughness;
}

declare module "esri/geometry/support/MeshTexture" {
  import MeshTexture = __esri.MeshTexture;
  export = MeshTexture;
}

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/AreaMeasurementLayer" {
  import AreaMeasurementLayer = __esri.AreaMeasurementLayer;
  export = AreaMeasurementLayer;
}

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/DirectLineMeasurementLayer" {
  import DirectLineMeasurementLayer = __esri.DirectLineMeasurementLayer;
  export = DirectLineMeasurementLayer;
}

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/ImageryTileLayer" {
  import ImageryTileLayer = __esri.ImageryTileLayer;
  export = ImageryTileLayer;
}

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/OGCFeatureLayer" {
  import OGCFeatureLayer = __esri.OGCFeatureLayer;
  export = OGCFeatureLayer;
}

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/SliceLayer" {
  import SliceLayer = __esri.SliceLayer;
  export = SliceLayer;
}

declare module "esri/layers/StreamLayer" {
  import StreamLayer = __esri.StreamLayer;
  export = StreamLayer;
}

declare module "esri/layers/SubtypeGroupLayer" {
  import SubtypeGroupLayer = __esri.SubtypeGroupLayer;
  export = SubtypeGroupLayer;
}

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/WCSLayer" {
  import WCSLayer = __esri.WCSLayer;
  export = WCSLayer;
}

declare module "esri/layers/WebTileLayer" {
  import WebTileLayer = __esri.WebTileLayer;
  export = WebTileLayer;
}

declare module "esri/layers/WFSLayer" {
  import WFSLayer = __esri.WFSLayer;
  export = WFSLayer;
}

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/BuildingFilter" {
  import BuildingFilter = __esri.BuildingFilter;
  export = BuildingFilter;
}

declare module "esri/layers/support/BuildingSummaryStatistics" {
  import BuildingSummaryStatistics = __esri.BuildingSummaryStatistics;
  export = BuildingSummaryStatistics;
}

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/FacilityLayerInfo" {
  import FacilityLayerInfo = __esri.FacilityLayerInfo;
  export = FacilityLayerInfo;
}

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/FeatureReductionCluster" {
  import FeatureReductionCluster = __esri.FeatureReductionCluster;
  export = FeatureReductionCluster;
}

declare module "esri/layers/support/FeatureReductionSelection" {
  import FeatureReductionSelection = __esri.FeatureReductionSelection;
  export = FeatureReductionSelection;
}

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/GeometryFieldsInfo" {
  import GeometryFieldsInfo = __esri.GeometryFieldsInfo;
  export = GeometryFieldsInfo;
}

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/LayerFloorInfo" {
  import LayerFloorInfo = __esri.LayerFloorInfo;
  export = LayerFloorInfo;
}

declare module "esri/layers/support/LevelLayerInfo" {
  import LevelLayerInfo = __esri.LevelLayerInfo;
  export = LevelLayerInfo;
}

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/SceneModifications" {
  import SceneModifications = __esri.SceneModifications;
  export = SceneModifications;
}

declare module "esri/layers/support/SceneModification" {
  import SceneModification = __esri.SceneModification;
  export = SceneModification;
}

declare module "esri/layers/support/SiteLayerInfo" {
  import SiteLayerInfo = __esri.SiteLayerInfo;
  export = SiteLayerInfo;
}

declare module "esri/layers/support/Sublayer" {
  import Sublayer = __esri.Sublayer;
  export = Sublayer;
}

declare module "esri/layers/support/SubtypeSublayer" {
  import SubtypeSublayer = __esri.SubtypeSublayer;
  export = SubtypeSublayer;
}

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/PortalItemResource" {
  import PortalItemResource = __esri.PortalItemResource;
  export = PortalItemResource;
}

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/DictionaryRenderer" {
  import DictionaryRenderer = __esri.DictionaryRenderer;
  export = DictionaryRenderer;
}

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/VectorFieldRenderer" {
  import VectorFieldRenderer = __esri.VectorFieldRenderer;
  export = VectorFieldRenderer;
}

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/RasterColormapRenderer" {
  import RasterColormapRenderer = __esri.RasterColormapRenderer;
  export = RasterColormapRenderer;
}

declare module "esri/renderers/RasterShadedReliefRenderer" {
  import RasterShadedReliefRenderer = __esri.RasterShadedReliefRenderer;
  export = RasterShadedReliefRenderer;
}

declare module "esri/renderers/RasterStretchRenderer" {
  import RasterStretchRenderer = __esri.RasterStretchRenderer;
  export = RasterStretchRenderer;
}

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/ColormapInfo" {
  import ColormapInfo = __esri.ColormapInfo;
  export = ColormapInfo;
}

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/ColorSizeStop" {
  import ColorSizeStop = __esri.ColorSizeStop;
  export = ColorSizeStop;
}

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/MapFloorInfo" {
  import MapFloorInfo = __esri.MapFloorInfo;
  export = MapFloorInfo;
}

declare module "esri/support/actions/ActionBase" {
  import ActionBase = __esri.ActionBase;
  export = ActionBase;
}

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 popupExpressionInfo = __esri.popupExpressionInfo;
  export = popupExpressionInfo;
}

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/CustomContent" {
  import CustomContent = __esri.CustomContent;
  export = CustomContent;
}

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/LineSymbolMarker" {
  import LineSymbolMarker = __esri.LineSymbolMarker;
  export = LineSymbolMarker;
}

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/symbols/patterns/StylePattern3D" {
  import StylePattern3D = __esri.StylePattern3D;
  export = StylePattern3D;
}

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/ImageIdentifyTask" {
  import ImageIdentifyTask = __esri.ImageIdentifyTask;
  export = ImageIdentifyTask;
}

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/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/ImageIdentifyParameters" {
  import ImageIdentifyParameters = __esri.ImageIdentifyParameters;
  export = ImageIdentifyParameters;
}

declare module "esri/tasks/support/ImageIdentifyResult" {
  import ImageIdentifyResult = __esri.ImageIdentifyResult;
  export = ImageIdentifyResult;
}

declare module "esri/tasks/support/ImageHistogramParameters" {
  import ImageHistogramParameters = __esri.ImageHistogramParameters;
  export = ImageHistogramParameters;
}

declare module "esri/tasks/support/ImageServiceIdentifyParameters" {
  import ImageServiceIdentifyParameters = __esri.ImageServiceIdentifyParameters;
  export = ImageServiceIdentifyParameters;
}

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/rest/query/support/AttachmentInfo" {
  import supportAttachmentInfo = __esri.supportAttachmentInfo;
  export = supportAttachmentInfo;
}

declare module "esri/rest/support/AddressCandidate" {
  import supportAddressCandidate = __esri.supportAddressCandidate;
  export = supportAddressCandidate;
}

declare module "esri/rest/support/AlgorithmicColorRamp" {
  import supportAlgorithmicColorRamp = __esri.supportAlgorithmicColorRamp;
  export = supportAlgorithmicColorRamp;
}

declare module "esri/rest/support/AreasAndLengthsParameters" {
  import supportAreasAndLengthsParameters = __esri.supportAreasAndLengthsParameters;
  export = supportAreasAndLengthsParameters;
}

declare module "esri/rest/support/AttachmentQuery" {
  import supportAttachmentQuery = __esri.supportAttachmentQuery;
  export = supportAttachmentQuery;
}

declare module "esri/rest/support/BufferParameters" {
  import supportBufferParameters = __esri.supportBufferParameters;
  export = supportBufferParameters;
}

declare module "esri/rest/support/ClosestFacilityParameters" {
  import supportClosestFacilityParameters = __esri.supportClosestFacilityParameters;
  export = supportClosestFacilityParameters;
}

declare module "esri/rest/support/ClosestFacilitySolveResult" {
  import supportClosestFacilitySolveResult = __esri.supportClosestFacilitySolveResult;
  export = supportClosestFacilitySolveResult;
}

declare module "esri/rest/support/ColorRamp" {
  import supportColorRamp = __esri.supportColorRamp;
  export = supportColorRamp;
}

declare module "esri/rest/support/DataFile" {
  import supportDataFile = __esri.supportDataFile;
  export = supportDataFile;
}

declare module "esri/rest/support/DataLayer" {
  import supportDataLayer = __esri.supportDataLayer;
  export = supportDataLayer;
}

declare module "esri/rest/support/DensifyParameters" {
  import supportDensifyParameters = __esri.supportDensifyParameters;
  export = supportDensifyParameters;
}

declare module "esri/rest/support/DirectionsFeatureSet" {
  import supportDirectionsFeatureSet = __esri.supportDirectionsFeatureSet;
  export = supportDirectionsFeatureSet;
}

declare module "esri/rest/support/DistanceParameters" {
  import supportDistanceParameters = __esri.supportDistanceParameters;
  export = supportDistanceParameters;
}

declare module "esri/rest/support/FeatureSet" {
  import supportFeatureSet = __esri.supportFeatureSet;
  export = supportFeatureSet;
}

declare module "esri/rest/support/FindParameters" {
  import supportFindParameters = __esri.supportFindParameters;
  export = supportFindParameters;
}

declare module "esri/rest/support/FindResult" {
  import supportFindResult = __esri.supportFindResult;
  export = supportFindResult;
}

declare module "esri/rest/support/GeneralizeParameters" {
  import supportGeneralizeParameters = __esri.supportGeneralizeParameters;
  export = supportGeneralizeParameters;
}

declare module "esri/rest/support/GPMessage" {
  import supportGPMessage = __esri.supportGPMessage;
  export = supportGPMessage;
}

declare module "esri/rest/support/IdentifyParameters" {
  import supportIdentifyParameters = __esri.supportIdentifyParameters;
  export = supportIdentifyParameters;
}

declare module "esri/rest/support/IdentifyResult" {
  import supportIdentifyResult = __esri.supportIdentifyResult;
  export = supportIdentifyResult;
}

declare module "esri/rest/support/ImageIdentifyParameters" {
  import supportImageIdentifyParameters = __esri.supportImageIdentifyParameters;
  export = supportImageIdentifyParameters;
}

declare module "esri/rest/support/ImageIdentifyResult" {
  import supportImageIdentifyResult = __esri.supportImageIdentifyResult;
  export = supportImageIdentifyResult;
}

declare module "esri/rest/support/ImageHistogramParameters" {
  import supportImageHistogramParameters = __esri.supportImageHistogramParameters;
  export = supportImageHistogramParameters;
}

declare module "esri/rest/support/ImageSample" {
  import ImageSample = __esri.ImageSample;
  export = ImageSample;
}

declare module "esri/rest/support/ImageSampleParameters" {
  import ImageSampleParameters = __esri.ImageSampleParameters;
  export = ImageSampleParameters;
}

declare module "esri/rest/support/ImageSampleResult" {
  import ImageSampleResult = __esri.ImageSampleResult;
  export = ImageSampleResult;
}

declare module "esri/rest/support/JobInfo" {
  import supportJobInfo = __esri.supportJobInfo;
  export = supportJobInfo;
}

declare module "esri/rest/support/LegendLayer" {
  import supportLegendLayer = __esri.supportLegendLayer;
  export = supportLegendLayer;
}

declare module "esri/rest/support/LengthsParameters" {
  import supportLengthsParameters = __esri.supportLengthsParameters;
  export = supportLengthsParameters;
}

declare module "esri/rest/support/LinearUnit" {
  import supportLinearUnit = __esri.supportLinearUnit;
  export = supportLinearUnit;
}

declare module "esri/rest/support/MultipartColorRamp" {
  import supportMultipartColorRamp = __esri.supportMultipartColorRamp;
  export = supportMultipartColorRamp;
}

declare module "esri/rest/support/NAMessage" {
  import supportNAMessage = __esri.supportNAMessage;
  export = supportNAMessage;
}

declare module "esri/rest/support/OffsetParameters" {
  import supportOffsetParameters = __esri.supportOffsetParameters;
  export = supportOffsetParameters;
}

declare module "esri/rest/support/ParameterValue" {
  import supportParameterValue = __esri.supportParameterValue;
  export = supportParameterValue;
}

declare module "esri/rest/support/PrintParameters" {
  import supportPrintParameters = __esri.supportPrintParameters;
  export = supportPrintParameters;
}

declare module "esri/rest/support/PrintTemplate" {
  import supportPrintTemplate = __esri.supportPrintTemplate;
  export = supportPrintTemplate;
}

declare module "esri/rest/support/ProjectParameters" {
  import supportProjectParameters = __esri.supportProjectParameters;
  export = supportProjectParameters;
}

declare module "esri/rest/support/Query" {
  import supportQuery = __esri.supportQuery;
  export = supportQuery;
}

declare module "esri/rest/support/RasterData" {
  import supportRasterData = __esri.supportRasterData;
  export = supportRasterData;
}

declare module "esri/rest/support/RelationParameters" {
  import supportRelationParameters = __esri.supportRelationParameters;
  export = supportRelationParameters;
}

declare module "esri/rest/support/RelationshipQuery" {
  import supportRelationshipQuery = __esri.supportRelationshipQuery;
  export = supportRelationshipQuery;
}

declare module "esri/rest/support/RouteParameters" {
  import supportRouteParameters = __esri.supportRouteParameters;
  export = supportRouteParameters;
}

declare module "esri/rest/support/RouteResult" {
  import supportRouteResult = __esri.supportRouteResult;
  export = supportRouteResult;
}

declare module "esri/rest/support/ServiceAreaParameters" {
  import supportServiceAreaParameters = __esri.supportServiceAreaParameters;
  export = supportServiceAreaParameters;
}

declare module "esri/rest/support/ServiceAreaSolveResult" {
  import supportServiceAreaSolveResult = __esri.supportServiceAreaSolveResult;
  export = supportServiceAreaSolveResult;
}

declare module "esri/rest/support/StatisticDefinition" {
  import supportStatisticDefinition = __esri.supportStatisticDefinition;
  export = supportStatisticDefinition;
}

declare module "esri/rest/support/TopFilter" {
  import TopFilter = __esri.TopFilter;
  export = TopFilter;
}

declare module "esri/rest/support/TopFeaturesQuery" {
  import TopFeaturesQuery = __esri.TopFeaturesQuery;
  export = TopFeaturesQuery;
}

declare module "esri/rest/support/TravelMode" {
  import TravelMode = __esri.TravelMode;
  export = TravelMode;
}

declare module "esri/rest/support/TrimExtendParameters" {
  import supportTrimExtendParameters = __esri.supportTrimExtendParameters;
  export = supportTrimExtendParameters;
}

declare module "esri/views/BasemapView" {
  import BasemapView = __esri.BasemapView;
  export = BasemapView;
}

declare module "esri/views/GroundView" {
  import GroundView = __esri.GroundView;
  export = GroundView;
}

declare module "esri/views/Magnifier" {
  import Magnifier = __esri.Magnifier;
  export = Magnifier;
}

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/interactive/snapping/FeatureSnappingLayerSource" {
  import FeatureSnappingLayerSource = __esri.FeatureSnappingLayerSource;
  export = FeatureSnappingLayerSource;
}

declare module "esri/views/interactive/snapping/SnappingOptions" {
  import SnappingOptions = __esri.SnappingOptions;
  export = SnappingOptions;
}

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/BuildingComponentSublayerView" {
  import BuildingComponentSublayerView = __esri.BuildingComponentSublayerView;
  export = BuildingComponentSublayerView;
}

declare module "esri/views/layers/BuildingSceneLayerView" {
  import BuildingSceneLayerView = __esri.BuildingSceneLayerView;
  export = BuildingSceneLayerView;
}

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/OGCFeatureLayerView" {
  import OGCFeatureLayerView = __esri.OGCFeatureLayerView;
  export = OGCFeatureLayerView;
}

declare module "esri/views/layers/SceneLayerView" {
  import SceneLayerView = __esri.SceneLayerView;
  export = SceneLayerView;
}

declare module "esri/views/layers/StreamLayerView" {
  import StreamLayerView = __esri.StreamLayerView;
  export = StreamLayerView;
}

declare module "esri/views/layers/PointCloudLayerView" {
  type PointCloudLayerView = __esri.PointCloudLayerView;
  export = PointCloudLayerView;
}

declare module "esri/views/layers/WFSLayerView" {
  type WFSLayerView = __esri.WFSLayerView;
  export = WFSLayerView;
}

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/views/3d/layers/SliceLayerView3D" {
  import SliceLayerView3D = __esri.SliceLayerView3D;
  export = SliceLayerView3D;
}

declare module "esri/webmap/ApplicationProperties" {
  import ApplicationProperties = __esri.ApplicationProperties;
  export = ApplicationProperties;
}

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 websceneApplicationProperties = __esri.websceneApplicationProperties;
  export = websceneApplicationProperties;
}

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/SearchTable" {
  import SearchTable = __esri.SearchTable;
  export = SearchTable;
}

declare module "esri/webdoc/applicationProperties/SearchTableField" {
  import SearchTableField = __esri.SearchTableField;
  export = SearchTableField;
}

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/Attachments" {
  import Attachments = __esri.Attachments;
  export = Attachments;
}

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/BasemapLayerList" {
  import BasemapLayerList = __esri.BasemapLayerList;
  export = BasemapLayerList;
}

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/BuildingExplorer" {
  import BuildingExplorer = __esri.BuildingExplorer;
  export = BuildingExplorer;
}

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/Daylight" {
  import Daylight = __esri.Daylight;
  export = Daylight;
}

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/ElevationProfile" {
  import ElevationProfile = __esri.ElevationProfile;
  export = ElevationProfile;
}

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/FeatureTable" {
  import FeatureTable = __esri.FeatureTable;
  export = FeatureTable;
}

declare module "esri/widgets/FeatureTemplates" {
  import FeatureTemplates = __esri.FeatureTemplates;
  export = FeatureTemplates;
}

declare module "esri/widgets/FloorFilter" {
  import FloorFilter = __esri.FloorFilter;
  export = FloorFilter;
}

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/LineOfSight" {
  import LineOfSight = __esri.LineOfSight;
  export = LineOfSight;
}

declare module "esri/widgets/Locate" {
  import Locate = __esri.Locate;
  export = Locate;
}

declare module "esri/widgets/Measurement" {
  import Measurement = __esri.Measurement;
  export = Measurement;
}

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/ScaleRangeSlider" {
  import ScaleRangeSlider = __esri.ScaleRangeSlider;
  export = ScaleRangeSlider;
}

declare module "esri/widgets/Search" {
  import widgetsSearch = __esri.widgetsSearch;
  export = widgetsSearch;
}

declare module "esri/widgets/ShadowAccumulation" {
  import ShadowAccumulation = __esri.ShadowAccumulation;
  export = ShadowAccumulation;
}

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/Swipe" {
  import Swipe = __esri.Swipe;
  export = Swipe;
}

declare module "esri/widgets/TableList" {
  import TableList = __esri.TableList;
  export = TableList;
}

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/SmartMappingPrimaryHandleSliderViewModel" {
  import SmartMappingPrimaryHandleSliderViewModel = __esri.SmartMappingPrimaryHandleSliderViewModel;
  export = SmartMappingPrimaryHandleSliderViewModel;
}

declare module "esri/widgets/smartMapping/SmartMappingSliderBase" {
  import SmartMappingSliderBase = __esri.SmartMappingSliderBase;
  export = SmartMappingSliderBase;
}

declare module "esri/widgets/smartMapping/SmartMappingSliderViewModel" {
  import SmartMappingSliderViewModel = __esri.SmartMappingSliderViewModel;
  export = SmartMappingSliderViewModel;
}

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/Attachments/AttachmentsViewModel" {
  import AttachmentsViewModel = __esri.AttachmentsViewModel;
  export = AttachmentsViewModel;
}

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/BasemapLayerList/BasemapLayerListViewModel" {
  import BasemapLayerListViewModel = __esri.BasemapLayerListViewModel;
  export = BasemapLayerListViewModel;
}

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/BuildingExplorer/BuildingExplorerViewModel" {
  import BuildingExplorerViewModel = __esri.BuildingExplorerViewModel;
  export = BuildingExplorerViewModel;
}

declare module "esri/widgets/BuildingExplorer/BuildingLevel" {
  import BuildingLevel = __esri.BuildingLevel;
  export = BuildingLevel;
}

declare module "esri/widgets/BuildingExplorer/BuildingPhase" {
  import BuildingPhase = __esri.BuildingPhase;
  export = BuildingPhase;
}

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/CoordinateConversion/support/Format" {
  import Format = __esri.Format;
  export = Format;
}

declare module "esri/widgets/CoordinateConversion/support/Conversion" {
  import Conversion = __esri.Conversion;
  export = Conversion;
}

declare module "esri/widgets/Daylight/DaylightViewModel" {
  import DaylightViewModel = __esri.DaylightViewModel;
  export = DaylightViewModel;
}

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/CreateWorkflow" {
  import CreateWorkflow = __esri.CreateWorkflow;
  export = CreateWorkflow;
}

declare module "esri/widgets/Editor/CreateWorkflowData" {
  import CreateWorkflowData = __esri.CreateWorkflowData;
  export = CreateWorkflowData;
}

declare module "esri/widgets/Editor/UpdateWorkflow" {
  import UpdateWorkflow = __esri.UpdateWorkflow;
  export = UpdateWorkflow;
}

declare module "esri/widgets/Editor/UpdateWorkflowData" {
  import UpdateWorkflowData = __esri.UpdateWorkflowData;
  export = UpdateWorkflowData;
}

declare module "esri/widgets/Editor/EditorViewModel" {
  import EditorViewModel = __esri.EditorViewModel;
  export = EditorViewModel;
}

declare module "esri/widgets/Editor/Edits" {
  import Edits = __esri.Edits;
  export = Edits;
}

declare module "esri/widgets/Editor/Workflow" {
  import Workflow = __esri.Workflow;
  export = Workflow;
}

declare module "esri/widgets/ElevationProfile/ElevationProfileLine" {
  import ElevationProfileLine = __esri.ElevationProfileLine;
  export = ElevationProfileLine;
}

declare module "esri/widgets/ElevationProfile/ElevationProfileLineGround" {
  import ElevationProfileLineGround = __esri.ElevationProfileLineGround;
  export = ElevationProfileLineGround;
}

declare module "esri/widgets/ElevationProfile/ElevationProfileLineInput" {
  import ElevationProfileLineInput = __esri.ElevationProfileLineInput;
  export = ElevationProfileLineInput;
}

declare module "esri/widgets/ElevationProfile/ElevationProfileLineQuery" {
  import ElevationProfileLineQuery = __esri.ElevationProfileLineQuery;
  export = ElevationProfileLineQuery;
}

declare module "esri/widgets/ElevationProfile/ElevationProfileLineView" {
  import ElevationProfileLineView = __esri.ElevationProfileLineView;
  export = ElevationProfileLineView;
}

declare module "esri/widgets/ElevationProfile/ElevationProfileViewModel" {
  import ElevationProfileViewModel = __esri.ElevationProfileViewModel;
  export = ElevationProfileViewModel;
}

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/FeatureTable/FeatureTableViewModel" {
  import FeatureTableViewModel = __esri.FeatureTableViewModel;
  export = FeatureTableViewModel;
}

declare module "esri/widgets/FeatureTable/FieldColumn" {
  import FieldColumn = __esri.FieldColumn;
  export = FieldColumn;
}

declare module "esri/widgets/FeatureTable/FieldColumnConfig" {
  import FieldColumnConfig = __esri.FieldColumnConfig;
  export = FieldColumnConfig;
}

declare module "esri/widgets/FeatureTable/Grid/support/ButtonMenu" {
  import ButtonMenu = __esri.ButtonMenu;
  export = ButtonMenu;
}

declare module "esri/widgets/FeatureTable/Grid/support/ButtonMenuItem" {
  import ButtonMenuItem = __esri.ButtonMenuItem;
  export = ButtonMenuItem;
}

declare module "esri/widgets/FeatureTable/Grid/support/ButtonMenuViewModel" {
  import ButtonMenuViewModel = __esri.ButtonMenuViewModel;
  export = ButtonMenuViewModel;
}

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/FloorFilter/FloorFilterViewModel" {
  import FloorFilterViewModel = __esri.FloorFilterViewModel;
  export = FloorFilterViewModel;
}

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/LineOfSight/LineOfSightViewModel" {
  import LineOfSightViewModel = __esri.LineOfSightViewModel;
  export = LineOfSightViewModel;
}

declare module "esri/widgets/LineOfSight/LineOfSightTarget" {
  import LineOfSightTarget = __esri.LineOfSightTarget;
  export = LineOfSightTarget;
}

declare module "esri/widgets/Locate/LocateViewModel" {
  import LocateViewModel = __esri.LocateViewModel;
  export = LocateViewModel;
}

declare module "esri/widgets/Measurement/MeasurementViewModel" {
  import MeasurementViewModel = __esri.MeasurementViewModel;
  export = MeasurementViewModel;
}

declare module "esri/widgets/NavigationToggle/NavigationToggleViewModel" {
  import NavigationToggleViewModel = __esri.NavigationToggleViewModel;
  export = NavigationToggleViewModel;
}

declare module "esri/widgets/Print/CustomTemplate" {
  import CustomTemplate = __esri.CustomTemplate;
  export = CustomTemplate;
}

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/ScaleRangeSlider/ScaleRanges" {
  import ScaleRanges = __esri.ScaleRanges;
  export = ScaleRanges;
}

declare module "esri/widgets/ScaleRangeSlider/ScaleRangeSliderViewModel" {
  import ScaleRangeSliderViewModel = __esri.ScaleRangeSliderViewModel;
  export = ScaleRangeSliderViewModel;
}

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/ShadowAccumulation/ShadowAccumulationViewModel" {
  import ShadowAccumulationViewModel = __esri.ShadowAccumulationViewModel;
  export = ShadowAccumulationViewModel;
}

declare module "esri/widgets/Slice/SliceViewModel" {
  import SliceViewModel = __esri.SliceViewModel;
  export = SliceViewModel;
}

declare module "esri/widgets/Slice/SlicePlane" {
  import SlicePlane = __esri.SlicePlane;
  export = SlicePlane;
}

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/Swipe/SwipeViewModel" {
  import SwipeViewModel = __esri.SwipeViewModel;
  export = SwipeViewModel;
}

declare module "esri/widgets/support/DatePicker" {
  import DatePicker = __esri.DatePicker;
  export = DatePicker;
}

declare module "esri/widgets/support/DatePickerViewModel" {
  import DatePickerViewModel = __esri.DatePickerViewModel;
  export = DatePickerViewModel;
}

declare module "esri/widgets/support/TimePicker" {
  import TimePicker = __esri.TimePicker;
  export = TimePicker;
}

declare module "esri/widgets/support/TimePickerViewModel" {
  import TimePickerViewModel = __esri.TimePickerViewModel;
  export = TimePickerViewModel;
}

declare module "esri/widgets/TableList/ListItem" {
  import TableListListItem = __esri.TableListListItem;
  export = TableListListItem;
}

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/form/elements/ElementMixin" {
  type ElementMixin = __esri.ElementMixin;
  export = ElementMixin;
}

declare module "esri/form/elements/inputs/TextInput" {
  import TextInput = __esri.TextInput;
  export = TextInput;
}

declare module "esri/layers/mixins/APIKeyMixin" {
  import APIKeyMixin = __esri.APIKeyMixin;
  export = APIKeyMixin;
}

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/CustomParametersMixin" {
  import CustomParametersMixin = __esri.CustomParametersMixin;
  export = CustomParametersMixin;
}

declare module "esri/layers/mixins/BlendLayer" {
  import BlendLayer = __esri.BlendLayer;
  export = BlendLayer;
}

declare module "esri/layers/mixins/ImageryTileMixin" {
  import ImageryTileMixin = __esri.ImageryTileMixin;
  export = ImageryTileMixin;
}

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/VisualVariablesMixin" {
  import VisualVariablesMixin = __esri.VisualVariablesMixin;
  export = VisualVariablesMixin;
}

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/support/TablesMixin" {
  import TablesMixin = __esri.TablesMixin;
  export = TablesMixin;
}

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/support/GeolocationPositioning" {
  import GeolocationPositioning = __esri.GeolocationPositioning;
  export = GeolocationPositioning;
}

declare module "esri/widgets/support/GoTo" {
  import GoTo = __esri.GoTo;
  export = GoTo;
}

declare module "esri/widgets/support/MomentElementViewModel" {
  import MomentElementViewModel = __esri.MomentElementViewModel;
  export = MomentElementViewModel;
}

declare module "esri/widgets/FeatureTable/Grid/Column" {
  import Column = __esri.Column;
  export = Column;
}

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/rasterRenderers" {
  import rasterRenderers = __esri.rasterRenderers;
  export = rasterRenderers;
}

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/scheduling" {
  import scheduling = __esri.scheduling;
  export = scheduling;
}

declare module "esri/core/sql" {
  import sql = __esri.sql;
  export = sql;
}

declare module "esri/core/sql/WhereClause" {
  import WhereClause = __esri.WhereClause;
  export = WhereClause;
}

declare module "esri/core/units" {
  import units = __esri.units;
  export = units;
}

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/form/support/elements" {
  import elements = __esri.elements;
  export = elements;
}

declare module "esri/form/elements/support/inputs" {
  import inputs = __esri.inputs;
  export = inputs;
}

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/ogc/wfsUtils" {
  import wfsUtils = __esri.wfsUtils;
  export = wfsUtils;
}

declare module "esri/layers/support/AttachmentInfo" {
  import AttachmentInfo = __esri.AttachmentInfo;
  export = AttachmentInfo;
}

declare module "esri/layers/support/fieldUtils" {
  import fieldUtils = __esri.fieldUtils;
  export = fieldUtils;
}

declare module "esri/renderers/support/jsonUtils" {
  import supportJsonUtils = __esri.supportJsonUtils;
  export = supportJsonUtils;
}

declare module "esri/smartMapping/heuristics/scaleRange" {
  import scaleRange = __esri.scaleRange;
  export = scaleRange;
}

declare module "esri/smartMapping/heuristics/sizeRange" {
  import sizeRange = __esri.sizeRange;
  export = sizeRange;
}

declare module "esri/smartMapping/labels/clusters" {
  import clusters = __esri.clusters;
  export = clusters;
}

declare module "esri/smartMapping/popup/clusters" {
  import popupClusters = __esri.popupClusters;
  export = popupClusters;
}

declare module "esri/smartMapping/popup/templates" {
  import templates = __esri.templates;
  export = templates;
}

declare module "esri/smartMapping/raster/renderers/classBreaks" {
  import classBreaks = __esri.classBreaks;
  export = classBreaks;
}

declare module "esri/smartMapping/raster/renderers/colormap" {
  import colormap = __esri.colormap;
  export = colormap;
}

declare module "esri/smartMapping/raster/renderers/rgb" {
  import rgb = __esri.rgb;
  export = rgb;
}

declare module "esri/smartMapping/raster/renderers/shadedRelief" {
  import shadedRelief = __esri.shadedRelief;
  export = shadedRelief;
}

declare module "esri/smartMapping/raster/renderers/stretch" {
  import stretch = __esri.stretch;
  export = stretch;
}

declare module "esri/smartMapping/raster/renderers/uniqueValue" {
  import uniqueValue = __esri.uniqueValue;
  export = uniqueValue;
}

declare module "esri/smartMapping/raster/renderers/vectorField" {
  import vectorField = __esri.vectorField;
  export = vectorField;
}

declare module "esri/smartMapping/raster/support/utils" {
  import utils = __esri.utils;
  export = utils;
}

declare module "esri/smartMapping/renderers/color" {
  import color = __esri.color;
  export = color;
}

declare module "esri/smartMapping/renderers/dotDensity" {
  import dotDensity = __esri.dotDensity;
  export = dotDensity;
}

declare module "esri/smartMapping/renderers/heatmap" {
  import heatmap = __esri.heatmap;
  export = heatmap;
}

declare module "esri/smartMapping/renderers/location" {
  import location = __esri.location;
  export = location;
}

declare module "esri/smartMapping/renderers/opacity" {
  import opacity = __esri.opacity;
  export = opacity;
}

declare module "esri/smartMapping/renderers/predominance" {
  import predominance = __esri.predominance;
  export = predominance;
}

declare module "esri/smartMapping/renderers/relationship" {
  import relationship = __esri.relationship;
  export = relationship;
}

declare module "esri/smartMapping/renderers/size" {
  import size = __esri.size;
  export = size;
}

declare module "esri/smartMapping/renderers/type" {
  import type = __esri.type;
  export = type;
}

declare module "esri/smartMapping/renderers/univariateColorSize" {
  import univariateColorSize = __esri.univariateColorSize;
  export = univariateColorSize;
}

declare module "esri/smartMapping/statistics/classBreaks" {
  import statisticsClassBreaks = __esri.statisticsClassBreaks;
  export = statisticsClassBreaks;
}

declare module "esri/smartMapping/statistics/heatmapStatistics" {
  import heatmapStatistics = __esri.heatmapStatistics;
  export = heatmapStatistics;
}

declare module "esri/smartMapping/statistics/histogram" {
  import histogram = __esri.histogram;
  export = histogram;
}

declare module "esri/smartMapping/statistics/predominantCategories" {
  import predominantCategories = __esri.predominantCategories;
  export = predominantCategories;
}

declare module "esri/smartMapping/statistics/summaryStatistics" {
  import summaryStatistics = __esri.summaryStatistics;
  export = summaryStatistics;
}

declare module "esri/smartMapping/statistics/summaryStatisticsForAge" {
  import summaryStatisticsForAge = __esri.summaryStatisticsForAge;
  export = summaryStatisticsForAge;
}

declare module "esri/smartMapping/statistics/uniqueValues" {
  import uniqueValues = __esri.uniqueValues;
  export = uniqueValues;
}

declare module "esri/smartMapping/statistics/support/ageUtils" {
  import ageUtils = __esri.ageUtils;
  export = ageUtils;
}

declare module "esri/smartMapping/symbology/color" {
  import symbologyColor = __esri.symbologyColor;
  export = symbologyColor;
}

declare module "esri/smartMapping/symbology/dotDensity" {
  import symbologyDotDensity = __esri.symbologyDotDensity;
  export = symbologyDotDensity;
}

declare module "esri/smartMapping/symbology/heatmap" {
  import symbologyHeatmap = __esri.symbologyHeatmap;
  export = symbologyHeatmap;
}

declare module "esri/smartMapping/symbology/location" {
  import symbologyLocation = __esri.symbologyLocation;
  export = symbologyLocation;
}

declare module "esri/smartMapping/symbology/predominance" {
  import symbologyPredominance = __esri.symbologyPredominance;
  export = symbologyPredominance;
}

declare module "esri/smartMapping/symbology/relationship" {
  import symbologyRelationship = __esri.symbologyRelationship;
  export = symbologyRelationship;
}

declare module "esri/smartMapping/symbology/size" {
  import symbologySize = __esri.symbologySize;
  export = symbologySize;
}

declare module "esri/smartMapping/symbology/type" {
  import symbologyType = __esri.symbologyType;
  export = symbologyType;
}

declare module "esri/smartMapping/symbology/support/colorRamps" {
  import colorRamps = __esri.colorRamps;
  export = colorRamps;
}

declare module "esri/support/popupUtils" {
  import popupUtils = __esri.popupUtils;
  export = popupUtils;
}

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/symbols/support/cimSymbolUtils" {
  import cimSymbolUtils = __esri.cimSymbolUtils;
  export = cimSymbolUtils;
}

declare module "esri/tasks/support/ImageServiceIdentifyResult" {
  import ImageServiceIdentifyResult = __esri.ImageServiceIdentifyResult;
  export = ImageServiceIdentifyResult;
}

declare module "esri/rest/closestFacility" {
  import closestFacility = __esri.closestFacility;
  export = closestFacility;
}

declare module "esri/rest/find" {
  import find = __esri.find;
  export = find;
}

declare module "esri/rest/geometryService" {
  import geometryService = __esri.geometryService;
  export = geometryService;
}

declare module "esri/rest/geoprocessor" {
  import geoprocessor = __esri.geoprocessor;
  export = geoprocessor;
}

declare module "esri/rest/geoprocessor/GPOptions" {
  import GPOptions = __esri.GPOptions;
  export = GPOptions;
}

declare module "esri/rest/identify" {
  import identify = __esri.identify;
  export = identify;
}

declare module "esri/rest/imageService" {
  import imageService = __esri.imageService;
  export = imageService;
}

declare module "esri/rest/locator" {
  import locator = __esri.locator;
  export = locator;
}

declare module "esri/rest/networkService" {
  import networkService = __esri.networkService;
  export = networkService;
}

declare module "esri/rest/serviceArea" {
  import serviceArea = __esri.serviceArea;
  export = serviceArea;
}

declare module "esri/rest/query" {
  import query = __esri.query;
  export = query;
}

declare module "esri/rest/route" {
  import route = __esri.route;
  export = route;
}

declare module "esri/views/support/colorUtils" {
  import colorUtils = __esri.colorUtils;
  export = colorUtils;
}

declare module "esri/views/3d/externalRenderers" {
  import externalRenderers = __esri.externalRenderers;
  export = externalRenderers;
}

declare module "esri/views/3d/support/SceneViewPerformanceInfo" {
  import SceneViewPerformanceInfo = __esri.SceneViewPerformanceInfo;
  export = SceneViewPerformanceInfo;
}

declare module "esri/views/3d/support/LayerPerformanceInfo" {
  import LayerPerformanceInfo = __esri.LayerPerformanceInfo;
  export = LayerPerformanceInfo;
}

declare module "esri/widgets/smartMapping/support/utils" {
  import supportUtils = __esri.supportUtils;
  export = supportUtils;
}

declare module "esri/widgets/support/widget" {
  import widget = __esri.widget;
  export = widget;
}

declare module "esri/widgets/TableList/TableListViewModel" {
  import TableListViewModel = __esri.TableListViewModel;
  export = TableListViewModel;
}

declare module "esri/applications/SceneViewer/sceneViewerUtils" {
  import sceneViewerUtils = __esri.sceneViewerUtils;
  export = sceneViewerUtils;
}
