import type { Color } from "./Symbol.js";
/**
 * Base interface for VisualVariables.
 *
 * @deprecated Use "json/*" modules instead.
 */
export interface VisualVariableBase {
    /**
     * A string value indicating the name of the feature attribute field that
     * contains the data value to render.
     */
    field: string;
    /**
     * Options available for the legend. See
     * {@link https://developers.arcgis.com/web-map-specification/objects/legendOptions/}
     * {@link https://developers.arcgis.com/web-scene-specification/objects/legendOptions/}.
     */
    legendOptions?: {
        /**
         * The title of the legend.
         */
        title?: string;
    };
    /**
     * String value indicating the name of the attribute field used to normalize
     * the data.
     */
    normalizationField?: string;
    /**
     * The type of the VisualVariable. See {@link VisualVariableType}.
     */
    type: VisualVariableType;
}
/**
 * The type of the VisualVariable.
 *
 * @deprecated Use "json/*" modules instead.
 */
export type VisualVariableType = "colorInfo" | "sizeInfo" | "transparencyInfo" | "rotationInfo";
/**
 * A visualVariable is an object containing the type of drawing property, the
 * axis the variable is applied to, and additional properties for the variable.
 * There are three types of visual variables, 'colorInfo', 'sizeInfo', and
 * 'transparencyInfo'.
 *
 * See
 * {@link https://developers.arcgis.com/web-map-specification/objects/visualVariable/}
 * {@link https://developers.arcgis.com/web-scene-specification/objects/visualVariable/}.
 *
 * @deprecated Use "json/*" modules instead.
 */
export type VisualVariable = ColorInfo | SizeInfo | TransparencyInfo | RotationInfo;
/**
 * The colorInfo visual variable defines how a continuous color ramp is applied
 * to features based on the values of a numeric field attribute. The minimum and
 * maximum values of the data should be indicated along with their respective
 * color values. You must specify either colors or stops to construct the color
 * ramp.
 *
 * See
 * {@link https://developers.arcgis.com/web-map-specification/objects/colorInfo_visualVariable/}
 * {@link https://developers.arcgis.com/web-scene-specification/objects/colorInfo_visualVariable/}.
 *
 * @deprecated Use "json/*" modules instead.
 */
export interface ColorInfo extends VisualVariableBase {
    /**
     * An array of colors that define the color ramp. Either colors or stops
     * must be specified to construct the color ramp.
     */
    colors?: Color[];
    /**
     * The maximum data value.
     */
    maxDataValue?: number;
    /**
     * The minimum data value.
     */
    minDataValue?: number;
    /**
     * String value indicating the name of the attribute field used to normalize
     * the data.
     */
    normalizationField?: string;
    /**
     * An array of stop objects.
     */
    stops?: ColorStop[];
    /**
     * @inheritDoc
     */
    type: "colorInfo";
}
/**
 * The rotation visual variable defines how features rendered with marker
 * symbols are rotated. The rotation value is determined by mapping the values
 * to data in a field, or by other arithmetic means with a function.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/rotationInfo_visualVariable/}
 * {@link https://developers.arcgis.com/web-map-specification/objects/rotationInfo_visualVariable/}.
 *
 * @deprecated Use "json/*" modules instead.
 */
export interface RotationInfo extends VisualVariableBase {
    /**
     * Defines the origin and direction of rotation depending on how the angle
     * of rotation was measured. Possible values are geographic which rotates
     * the symbol from the north in a clockwise direction and arithmetic which
     * rotates the symbol from the east in a counter-clockwise direction.
     *
     * Must be one of the following values: geographic, arithmetic.
     */
    rotationType?: RotationType;
    /**
     * An Arcade expression that computes a value in lieu of a value provided by
     * an attribute field.
     */
    valueExpression?: string;
    /**
     * @inheritDoc
     */
    type: "rotationInfo";
}
/**
 * The type of rotation for RotationVisualVariable.
 *
 * @deprecated Use "json/*" modules instead.
 */
export type RotationType = "arithmetic" | "geographic";
/**
 * The sizeInfo visual variable defines how a continuous color ramp is applied
 * to features based on the values of a numeric field attribute. The minimum and
 * maximum values of the data should be indicated along with their respective
 * color values. You must specify either colors or stops to construct the color
 * ramp.
 *
 * See
 * {@link https://developers.arcgis.com/web-map-specification/objects/sizeInfo_visualVariable/}
 * {@link https://developers.arcgis.com/web-scene-specification/objects/sizeInfo_visualVariable/}.
 *
 * @deprecated Use "json/*" modules instead.
 */
export interface SizeInfo extends VisualVariableBase {
    /**
     * Defines the axis the size visual variable should be applied to when
     * rendering features with an ObjectSymbol3DLayer.
     */
    axis?: "width" | "height" | "depth" | "widthAndDepth" | "all";
    /**
     * Specifies the largest marker size to use at any given map scale. This is
     * required if valueUnit is set to unknown. In addition to this property
     * taking an object, it also accepts a number value.
     */
    maxSize?: Size;
    /**
     * The maximum data value.
     */
    maxDataValue?: number;
    /**
     * The minimum data value.
     */
    minDataValue?: number;
    /**
     * Specifies the smallest marker size to use at any given map scale. This is
     * required if valueUnit is set to 'unknown'. In addition to this property
     * taking an object, it also accepts a number value.
     */
    minSize?: number | Size;
    /**
     * String value indicating that the sizeInfo should be applied to the
     * outline of polygons.
     */
    target?: "outline";
    /**
     * @inheritDoc
     */
    type: "sizeInfo";
    /**
     * When setting a size visual variable on a renderer using an
     * ObjectSymbol3DLayer, this property indicates whether to apply the value
     * defined by the height, width, or depth properties to the corresponding
     * axis of this visual variable instead of proportionally scaling this axis'
     * value after other axes.
     */
    useSymbolValue?: boolean;
    /**
     * Specifies how to apply the data value when mapping real-world sizes. See
     * table below for supported values.
     */
    valueRepresentation?: "radius" | "diameter" | "area" | "width" | "distance";
    /**
     * A string value indicating the required unit of measurement if the data
     * represents a real world distance quantity. If the data value represents a
     * non-distance quantity, e.g. traffic count, census data, etc., valueUnits
     * should be set to 'unknown'.
     */
    valueUnit?: "unknown" | "inches" | "feet" | "yards" | "miles" | "nautical-miles" | "millimeters" | "centimeters" | "decimeters" | "meters" | "kilometer" | "decimal-degrees";
}
/**
 * TransparencyInfo is supported by opacityInfo in the JavaScript API. Except
 * type and axis, all properties follow the syntax of the JavaScript API's
 * opacityInfo property. It applies transparency to each feature based on the
 * attribute values in a field. The exception is that the webmap JSON uses
 * transparency (range 0 - 100, with 100 as completely transparent) instead of
 * opacity (range 0 - 1, with 0 as completely transparent).
 *
 * See
 * {@link https://developers.arcgis.com/web-map-specification/objects/transparencyInfo_visualVariable/}
 * {@link https://developers.arcgis.com/web-scene-specification/objects/transparencyInfo_visualVariable/}.
 *
 * @deprecated Use "json/*" modules instead.
 */
export interface TransparencyInfo extends VisualVariableBase {
    /**
     * Options available for the legend.
     */
    legendOptions?: {
        /**
         * The title of the legend.
         */
        title?: string;
    };
    /**
     * An array of transparencyStop objects.
     */
    stops?: TransparencyStop[];
    /**
     * @inheritDoc
     */
    type: "transparencyInfo";
}
/**
 * Specifies the largest marker size to use at any given map scale. This is
 * required if valueUnit is set to unknown.
 *
 * See
 * {@link https://developers.arcgis.com/web-map-specification/objects/maxSize/}
 * {@link https://developers.arcgis.com/web-map-specification/objects/minSize/}
 * {@link https://developers.arcgis.com/web-scene-specification/objects/maxSize/}
 * {@link https://developers.arcgis.com/web-scene-specification/objects/minSize/}.
 *
 * @deprecated Use "json/*" modules instead.
 */
export interface Size {
    /**
     * The value which allows a size to be defined based on the map scale.
     * Currently, the only supported expression is, view.scale.
     */
    expression?: string;
    /**
     * An array of objects that define the maximum size of the symbol at various
     * values of the expression. Each object in the array has a numeric size
     * property and a numeric value property. If the value calculated from the
     * expression matches the value of a stop, than the size corresponding to
     * that stop is selected. For example, if expression is set to view.scale,
     * the value corresponds to the map's scale. The size represents the maximum
     * symbol size (in pixels) that corresponds to this scale. If the map scale
     * matches the scale value of a stop, the size corresponding to that stop
     * value is used as the maximum symbol size for the features. If the map
     * scale value falls between two stops, the maximum symbol size is
     * interpolated between the sizes of the two stops. The minSize and maxSize
     * stop values are usually the same, although it is possible to have
     * different values depending on how minSize is calculated versus the
     * maxSize.
     */
    stops?: SizeStop[];
    /**
     * Value indicating that sizeInfo should be applied to the outline of
     * polygons. This value can be outline or null.
     */
    target?: string;
    /**
     * Value indicating the type of rendering, e.g. 'sizeInfo'.
     */
    type?: string;
}
/**
 * A sizeStop object describes the size of the symbol at various values of the
 * expression.
 *
 * @deprecated Use "json/*" modules instead.
 */
export interface SizeStop {
    /**
     * Value if a label is needed on the legend for a stop.
     */
    label?: string;
    /**
     * Specifies the marker size to use for the specified value.
     */
    size?: number;
    /**
     * The value to be mapped to a size.
     */
    value?: number;
}
/**
 * A sizeStop object describes the size of the symbol at various values of the
 * expression.
 *
 * @deprecated Use "json/*" modules instead.
 */
export interface ColorStop {
    /**
     * A CSS color string or an array of rbga values. The color to place at the
     * stop indicated by either a ratio or value.
     */
    color?: string | Color;
    /**
     * Value if a label is needed on the legend for a stop.
     */
    label?: string;
    /**
     * The pixel intensity value. Describes the pixel intensity value that the
     * color should be associated with. Just like in colorInfo, using value will
     * ignore maxPixelIntensity and minPixelIntensity properties. It will
     * actually set those properties to maximum and minimum values you set in
     * the colorStops array. The hard values are converted to ratios to create
     * the color gradient that is used in the heatmap calculations. Setting
     * minPixelIntensity or maxPixelIntensity, after setting colorStops with
     * values, removes the hard link between the color ramp and the pixel
     * intensity values that were used to create it.
     */
    value?: number;
}
/**
 * The transparencyStop object defines the thematic opacity ramp in a sequence
 * of stops. At least two stops are required. The stops must be listed in
 * ascending order based on the value of the value property in each stop.
 *
 * @deprecated Use "json/*" modules instead.
 */
export interface TransparencyStop {
    /**
     * A string value used to label the stop in the legend.
     */
    label: string;
    /**
     * A numeric transparency value for a stop ranging from 0-100, where 0 is
     * opaque and 100 is 100% transparent.
     */
    transparency: number;
    /**
     * The pixel intensity value. Describes the pixel intensity value that the
     * color should be associated with.
     */
    value: number;
}
