import type { TaskSettingsProperties } from "@vertigis/arcgis-extensions/data/TaskSettings.js";
import type { LabelingInfoJson } from "@vertigis/arcgis-extensions/json/DrawingInfoJson.js";
import type { PopupInfoJson } from "@vertigis/arcgis-extensions/json/PopupInfoJson.js";
import type { Command } from "../Command.js";
import { CommandRegistry } from "../CommandRegistry.js";
import type { Event } from "../Event.js";
import { EventRegistry } from "../EventRegistry.js";
import type { Operation } from "../Operation.js";
import { OperationRegistry } from "../OperationRegistry.js";
import type { HasLayers, HasMaps, HasSymbol, HasSymbols, LayersLike } from "../common.js";
/**
 * Arguments for the "layer.visibility-changed" event.
 */
export interface LayerEventArgs {
    /**
     * The layer whose visibility was changed. Web only.
     *
     * @webOnly
     */
    layers?: LayersLike;
    /**
     * The layer whose visibility was changed. Mobile only.
     *
     * @mobileOnly
     */
    layerContent: ILayerContent;
}
/**
 * An instance of @Esri.ArcGISRuntime.Mapping.ILayerContent.
 */
export interface ILayerContent {
}
/**
 * Arguments for the "layers.show-labels" and "layers.hide-labels" commands. If
 * no 'maps' are specified, all active maps in the layout will be targeted. If
 * no 'layers' are specified, all viable layers and sublayers within the 'maps'
 * will be affected. If the 'layers' property includes (Sub)Layer references or
 * ESRI (Sub)Layers, they must exist within one of the 'maps'.
 */
export interface SetLabelVisibilityArgs extends HasLayers, HasMaps {
}
/**
 * Arguments for the layer.set-symbol command.
 */
export type SetSymbolArgs = HasSymbol & HasSymbols & HasLayers & HasMaps;
/**
 * Arguments for the layer.set-visibility command. If no 'maps' are specified,
 * all active maps in the layout will be targeted. If no 'layers' are specified,
 * all viable layers and sublayers within the 'maps' will be affected. If the
 * 'layers' property includes (Sub)Layer references or ESRI (Sub)Layers, they
 * must exist within one of the 'maps'.
 */
export interface SetVisibilityArgs extends HasLayers, HasMaps {
    /**
     * The visibility of the provided layers.
     */
    visible: boolean;
}
/**
 * Common settings for a layer.
 */
export interface HasLayerSettings {
    /**
     * The definitionExpression of the layer.
     */
    definitionExpression?: string;
    /**
     * Settings relevant to layer tasks.
     */
    taskSettings?: TaskSettingsProperties | TaskSettingsProperties[];
    /**
     * Configuration for a popup template to be used by features in the layer.
     */
    popupTemplate?: PopupInfoJson | PopupInfoJson[];
    /**
     * The title of the layer.
     */
    title?: string | string[];
    /**
     * The labeling class of the layer.
     */
    labelingInfo?: LabelingInfoJson[] | LabelingInfoJson[][];
}
/**
 * Arguments for a `layers.edit-settings` operation.
 */
export interface LayerSettingsArgs extends HasLayerSettings, HasLayers, HasSymbols, HasMaps {
}
export declare class LayersCommands extends CommandRegistry {
    protected readonly _prefix = "layers";
    /**
     * Guard command for enabling the layers.set-symbol command. Web only.
     *
     * @webOnly
     */
    get ensureCanSetSymbol(): Command<SetSymbolArgs>;
    /**
     * Sets a definition expression on a layer to filter its features. Web only.
     *
     * @webOnly
     */
    get setDefinitionExpression(): Command<LayerSettingsArgs>;
    /**
     * Updates the label classes of the provided layer(s). Web only.
     *
     * @webOnly
     */
    get setLabelClasses(): Command<LayerSettingsArgs>;
    /**
     * Updates the provided layer(s) with new popup template configuration. Web
     * only.
     *
     * @webOnly
     */
    get setPopupTemplate(): Command<LayerSettingsArgs>;
    /**
     * Updates the symbol for the provided layer(s). Web only.
     *
     * @webOnly
     */
    get setSymbol(): Command<SetSymbolArgs>;
    /**
     * Updates the provided layer(s) with new task settings. Web only.
     *
     * @webOnly
     */
    get setTaskSettings(): Command<LayerSettingsArgs>;
    /**
     * Changes the title of the provided layer(s). Web only.
     *
     * @webOnly
     */
    get setTitle(): Command<LayerSettingsArgs>;
    /**
     * Updates the visibility of the provided layer(s). Web only.
     *
     * **Example:** Toggle a layer's visibility off by id.
     *
     * ```
     * {
     *     "layers": "Victoria_Fire_Hydrants_8780",
     *     "visible": false
     * }
     * ```
     *
     * @webOnly
     */
    get setVisibility(): Command<SetVisibilityArgs>;
    /**
     * Turns on the layer's labels on the map. Web only.
     *
     * @webOnly
     */
    get showLabels(): Command<SetLabelVisibilityArgs>;
    /**
     * Turns off the layer's labels on the map. Web only.
     *
     * @webOnly
     */
    get hideLabels(): Command<SetLabelVisibilityArgs>;
}
export declare class LayersOperations extends OperationRegistry {
    protected readonly _prefix = "layers";
    /**
     * Retrieves the popup configuration applied to the supplied layer(s). Web
     * only.
     *
     * @webOnly
     */
    get getPopupTemplate(): Operation<HasLayers, LayerSettingsArgs>;
    /**
     * Retrieves the label classes for supplied layer(s). Web only.
     *
     * @webOnly
     */
    get getLabelClasses(): Operation<HasLayers, LayerSettingsArgs>;
    /**
     * Retrieves the values for the 'taskSettings' applied to the supplied
     * layer(s). Web only.
     *
     * @webOnly
     */
    get getTaskSettings(): Operation<HasLayers, LayerSettingsArgs>;
    /**
     * Retrieves the titles of the supplied layer(s). Web only.
     *
     * @webOnly
     */
    get getTitle(): Operation<HasLayers, LayerSettingsArgs>;
    /**
     * Shows a UI for editing the settings on an existing layer or layers. Note
     * that changes will not be applied to the supplied layers by this
     * operation. Use `layers.set-*` for this. Web only.
     *
     * @webOnly
     */
    get editSettings(): Operation<LayerSettingsArgs, LayerSettingsArgs>;
    /**
     * Shows a UI for editing the label classes on an existing layer or layers.
     * Note that changes will not be applied to the supplied layers by this
     * operation. Use `layers.set-label-classes` for this. Web only.
     *
     * @webOnly
     */
    get editLabelSettings(): Operation<LayerSettingsArgs, LayerSettingsArgs>;
    /**
     * Edit the symbol from an existing layer or layers. Note that changes to
     * these symbols will not be applied to the layers by this operation. Use
     * `layers.set-symbol` for this. Web only.
     *
     * @webOnly
     */
    get editSymbols(): Operation<SetSymbolArgs, HasLayers & HasMaps & HasSymbols>;
}
export declare class LayersEvents extends EventRegistry {
    protected readonly _prefix = "layers";
    /**
     * Raised when a layer's visibility changes.
     */
    get visibilityChanged(): Event<LayerEventArgs>;
}
