import type Geometry from "@arcgis/core/geometry/Geometry.js";
import type LineSymbol3D from "@arcgis/core/symbols/LineSymbol3D";
import type PictureFillSymbol from "@arcgis/core/symbols/PictureFillSymbol";
import type PictureMarkerSymbol from "@arcgis/core/symbols/PictureMarkerSymbol";
import type PointSymbol3D from "@arcgis/core/symbols/PointSymbol3D";
import type PolygonSymbol3D from "@arcgis/core/symbols/PolygonSymbol3D";
import type SimpleFillSymbol from "@arcgis/core/symbols/SimpleFillSymbol";
import type SimpleLineSymbol from "@arcgis/core/symbols/SimpleLineSymbol";
import type SimpleMarkerSymbol from "@arcgis/core/symbols/SimpleMarkerSymbol";
import type { SymbolUnion } from "@arcgis/core/unionTypes.js";
import type { LineSymbol3DJson, PictureFillSymbolJson, PictureMarkerSymbolJson, PointSymbol3DJson, PolygonSymbol3DJson, SimpleFillSymbolJson, SimpleLineSymbolJson, SimpleMarkerSymbolJson } from "@vertigis/arcgis-extensions/json/SymbolJson.js";
import type { GeometryType } from "@vertigis/arcgis-extensions/support/esri";
import type { SymbolPresetProperties } from "../../app-config/web/DrawModelProperties.js";
import type { Command } from "../Command.js";
import { CommandRegistry } from "../CommandRegistry.js";
import type { Operation } from "../Operation.js";
import { OperationRegistry } from "../OperationRegistry.js";
import type { CreateGraphicsResult, FeaturesLike, GeometryLike, HasFeatures, HasGraphics, HasLayers, HasMaps, HasRenderers, HasSymbols, HasUITarget, SymbolLike } from "../common.js";
import type { CaptureGeometryArgs } from "./sketching.js";
/**
 * Symbols supported for drawing.
 */
export type DrawingSymbolConfig = SimpleMarkerSymbol | SimpleMarkerSymbolJson | PictureMarkerSymbol | PictureMarkerSymbolJson | SimpleLineSymbol | SimpleLineSymbolJson | SimpleFillSymbol | SimpleFillSymbolJson | PictureFillSymbol | PictureFillSymbolJson | PointSymbol3D | PointSymbol3DJson | LineSymbol3D | LineSymbol3DJson | PolygonSymbol3D | PolygonSymbol3DJson;
/**
 * Arguments for the drawing.get-symbol operation. Only available in VertiGIS
 * Studio Web.
 */
export interface GetDefaultSymbolArgs {
    /**
     * The geometry type for the default symbol to retrieve.
     */
    geometryType?: GeometryType;
}
/**
 * Arguments for the drawing.edit-symbol operation. Only available in VertiGIS
 * Studio Web.
 */
export interface EditSymbolArgs extends HasSymbols, HasMaps, HasLayers, HasGraphics, HasFeatures, HasUITarget {
    /**
     * The geometry type for the symbol to create.
     */
    geometryType?: GeometryType;
    /**
     * Symbol presets that can be assigned to a graphic. If defined, these
     * presets will override any that are configured in the DrawService.
     */
    symbolPresets?: SymbolPresetProperties[];
    /**
     * If the fine-grain controls should be hidden and only the symbol presets
     * should be shown. If no valid symbol presets are configured, this property
     * will be ignored. If defined, this will override the value of the
     * DrawService's 'showOnlySymbolPresets' property. Default is false.
     */
    showOnlySymbolPresets?: boolean;
}
/**
 * Arguments for the drawing.edit-symbol operation. Only available in VertiGIS
 * Studio Web.
 */
export interface EditSymbolResult extends HasMaps, HasLayers, HasGraphics, HasFeatures, HasSymbols, HasRenderers {
}
/**
 * Arguments for the "drawing.create-graphics" operation. `GeometryLike`,
 * `FeaturesLike` and `SymbolLike` are only available in Web.
 */
export interface CreateGraphicsArgs extends HasMaps {
    /**
     * The geometry that was captured.
     */
    geometry: Geometry | GeometryLike;
    /**
     * Features containing geometry to create graphics from. Web only.
     */
    features?: FeaturesLike;
    /**
     * The symbol that should be used to create the graphic. If null, a default
     * is provided.
     */
    symbol?: SymbolUnion | SymbolLike;
}
export declare class DrawingCommands extends CommandRegistry {
    protected readonly _prefix = "drawing";
    /**
     * Allows the user to draw on the map by capturing geometry, creating a
     * graphic, and persisting the graphic on the map. This is a shortcut for
     * the command chain ["sketching.capture-geometry",
     * "drawing.create-graphics", "map.add-markup"]. Some default
     * geometryEditorSettings are also applied. Mobile only.
     *
     * @mobileOnly
     */
    get draw(): Command<CaptureGeometryArgs>;
    /**
     * Sets a value that determines whether drawings will be synced
     * automatically across maps.
     */
    get setSync(): Command<boolean>;
    /**
     * Sets the value of the default point, line, or polygon symbol. The symbol
     * can be configured with an instance of the Esri symbol or with the Esri
     * WebMap JSON. Web only.
     *
     * **Example:** Set the default point symbol to a square.
     *
     * ```
     * {
     *     "type": "esriSMS",
     *     "color": [251, 43, 17, 85],
     *     "size": 12,
     *     "style": "esriSMSSquare",
     *     "outline": {
     *         "type": "esriSLS",
     *         "color": [251, 43, 17, 255],
     *         "width": 1.5,
     *         "style": "esriSLSSolid"
     *     }
     * }
     * ```
     *
     * @webOnly
     */
    get setDefaultSymbol(): Command<SymbolLike | HasSymbols>;
    /**
     * Sets the symbol on a collection of Graphics. The symbol can be configured
     * with an instance of the Esri symbol or with the Esri WebMap JSON. Web
     * only.
     *
     * @webOnly
     */
    get setSymbol(): Command<HasSymbols & HasGraphics>;
}
export declare class DrawingOperations extends OperationRegistry {
    protected readonly _prefix = "drawing";
    /**
     * Creates graphics.
     *
     * In Web, creates graphics out of GeometryLike or CreateGraphicsArgs, with
     * the current symbols that are set on the DrawManager.
     *
     * In Mobile, creates graphics from the given CreateGraphicsArgs or
     * CreateGraphicsArgs[] (or some GeometryLike args). Any provided symbol
     * parameter is used, otherwise a default symbol is used.
     */
    get createGraphics(): Operation<CreateGraphicsArgs | CreateGraphicsArgs[] | GeometryLike, CreateGraphicsResult>;
    /**
     * Gets the value of the default point, line, or polygon symbol for the
     * provided geometry type. Web only.
     *
     * @webOnly
     */
    get getDefaultSymbol(): Operation<GetDefaultSymbolArgs | GeometryType, DrawingSymbolConfig>;
    /**
     * Gets the value of the default 3D point, line, or polygon symbol for the
     * provided geometry type. Web only.
     *
     * @webOnly
     */
    get getDefaultSymbol3D(): Operation<GetDefaultSymbolArgs | GeometryType, DrawingSymbolConfig>;
    /**
     * Opens the symbol editor toolbox for the specified geometry or type. Web
     * only.
     *
     * @webOnly
     */
    get editSymbol(): Operation<EditSymbolArgs | Symbol, EditSymbolResult>;
}
