import EsriGround from "@arcgis/core/Ground";
import type Collection from "@arcgis/core/core/Collection";
import type { EntityBaseProperties } from "../Entity.js";
import { EntityBase } from "../Entity.js";
import type { TaskSettingsProperties } from "../data/TaskSettings.js";
import { TaskSettings } from "../data/TaskSettings.js";
import { type GroundJson } from "../json/GroundJson.js";
import type { InitializableBase } from "../support/InitializableBase.js";
import type { PropertyDefs } from "../support/Serializable.js";
import type { MapExtension } from "./MapExtension.js";
import type { LayerExtension, LayerExtensionProperties } from "./_LayerExtension.js";
import type { GroundExtensionFactory } from "./support/GroundExtensionFactory.js";
import type { LayerExtensionCollection } from "./support/_LayerExtensionCollection.js";
/**
 * The default GroundExtension factory that will be used whenever a
 * GroundExtension needs to be created.
 */
export declare const defaultGroundExtensionFactory: GroundExtensionFactory;
/**
 * Types that can represent a Ground.
 */
export type GroundLike = EsriGround | GroundProperties | "world-elevation";
/**
 * Properties that can be passed into the constructor for
 * {@link mapping/GroundExtension!GroundExtension}.
 */
export interface GroundExtensionProperties extends EntityBaseProperties {
    /**
     * The Esri Ground object being extended. This property can also be
     * "world-elevation", in which case a default instance of Ground with the
     * world elevation service will be used.
     */
    ground?: GroundLike;
    /**
     * See {@link mapping/GroundExtension!GroundExtension.layerExtensions}.
     */
    layerExtensions?: (LayerExtension | LayerExtensionProperties)[];
    /**
     * See {@link data/FeatureSource!FeatureSource.taskSettings}.
     */
    taskSettings?: TaskSettingsProperties;
}
/**
 * Properties that can be specified for the
 * {@link mapping/GroundExtension!GroundExtensionProperties.ground} property.
 */
export interface GroundProperties extends GroundJson {
    /**
     * A reference to an existing Ground on the parent map extension. Note: This
     * can only be "map.ground".
     */
    $ref?: "map.ground";
}
/**
 * Extends the capabilities of an Esri Ground object.
 */
export declare class GroundExtension extends EntityBase<GroundExtensionProperties> {
    /**
     * The Esri Ground object being extended.
     */
    get ground(): EsriGround;
    /**
     * The parent map extension.
     */
    get mapExtension(): MapExtension;
    /**
     * The layer extensions associated with each layer of the Ground object.
     */
    get layerExtensions(): LayerExtensionCollection;
    /**
     * The factory that will be used whenever a GroundExtension needs to be
     * created. Applications can supply their own factory to customize
     * GroundExtension creation.
     */
    static factory: GroundExtensionFactory;
    /**
     * @inheritDoc
     */
    readonly taskSettings: TaskSettings;
    /**
     * @inheritDoc
     */
    protected readonly _itemType: string;
    private _mapExtension;
    private _ground;
    private readonly _layerExtensions;
    private _deferredGroundProperties;
    /**
     * Creates a new instance of {@link mapping/GroundExtension!GroundExtension}.
     *
     * @param properties An object containing initial property values to set.
     */
    constructor(properties?: GroundExtensionProperties);
    /**
     * Checks if the Ground object is the one created by default when the
     * EsriAPI parses a ground.
     *
     * @param ground The Ground object to check.
     */
    static isDefaultGround(ground: EsriGround): boolean;
    /**
     * Creates the {@link mapping/GroundExtension!GroundExtension} based on the
     * supplied properties. Applications can customize the default creation
     * behavior by supplying a custom factory object (see
     * {@link mapping/GroundExtension!GroundExtension.factory}).
     *
     * @param properties The GroundExtension item properties.
     */
    static create(properties?: GroundExtensionProperties): GroundExtension;
    /**
     * Called to create the {@link data/TaskSettings!TaskSettings}.
     */
    protected _createTaskSettings(): TaskSettings;
    protected _getSerializableProperties(): PropertyDefs<GroundExtensionProperties>;
    protected _onInitialize(): Promise<void>;
    protected _postInitialize(): Promise<void>;
    /**
     * A callback executed when a layer is added as a child of the
     * GroundExtension, after the GroundExtension has been initialized.
     *
     * @param layerX The layer that was added.
     */
    protected _onLayerAddedPostInitialize: (layerX: LayerExtension) => Promise<void>;
    protected _onDestroy(): Promise<void>;
    protected _initializableChildCollections(): IterableIterator<Collection<InitializableBase>>;
    private _setGround;
}
