import type { CIMLineSymbol, CIMPointSymbol, CIMPolygonSymbol } from "../support/esri";
/**
 * A symbol representing a feature on the map.
 *
 * Part of the Esri ArcGIS REST API (see
 * http://resources.arcgis.com/en/help/rest/apiref/symbol.html). See
 * {@link https://developers.arcgis.com/web-map-specification/objects/symbol/}.
 */
export type SymbolJson = Symbol2DJson | Symbol3DJson;
/**
 * Symbol types used in web maps.
 */
export type Symbol2DJson = CIMSymbolJson | CIMSymbolReferenceJson | PictureFillSymbolJson | PictureMarkerSymbolJson | SimpleFillSymbolJson | SimpleLineSymbolJson | SimpleMarkerSymbolJson | TextSymbolJson;
/**
 * Symbol types used in web scenes.
 */
export type Symbol3DJson = CIMSymbolJson | CIMSymbolReferenceJson | LabelSymbol3DJson | LineSymbol3DJson | MeshSymbol3DJson | PointSymbol3DJson | PolygonSymbol3DJson | StyleSymbolReferenceJson;
/**
 * Color is represented as a four-element array. The four elements represent
 * values for red, green, blue, and alpha in that order. Values range from 0
 * through 255. If color is undefined for a symbol, the color value is null. See
 * {@link https://developers.arcgis.com/web-map-specification/objects/color/}
 * {@link https://developers.arcgis.com/web-scene-specification/objects/color/}.
 */
export type ColorJson = [number, number, number, number] | [number, number, number];
/**
 * Font used for text symbols.
 *
 * See {@link https://developers.arcgis.com/web-map-specification/objects/font/}
 * {@link https://developers.arcgis.com/web-scene-specification/objects/font/}.
 */
export interface FontJson {
    /**
     * The text decoration.
     */
    decoration?: "line-through" | "underline" | "none" | null;
    /**
     * The font family.
     */
    family?: string | null;
    /**
     * The font size.
     */
    size?: number | null;
    /**
     * The text style.
     */
    style?: "italic" | "normal" | "oblique" | null;
    /**
     * The text weight.
     */
    weight?: "bold" | "bolder" | "lighter" | "normal" | null;
}
/**
 * Shifts the symbol along the vertical world axis by a given length. The length
 * is set in screen space units. See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/verticalOffset/}.
 */
export interface VerticalOffsetJson {
    /**
     * The maximum vertical symbol lift in world units. It acts as an upper
     * bound to avoid lift becoming too big.
     */
    maxWorldLength?: number | null;
    /**
     * The minimum vertical symbol lift in world units. It acts as a lower bound
     * to avoid lift becoming too small.
     */
    minWorldLength?: number | null;
    /**
     * Maximal screen length of lift in points.
     */
    screenLength: number;
}
/**
 * Base class for all symbols.
 */
export interface SymbolJsonBase {
    /**
     * The type of symbol. See {@link SymbolJsonType}.
     */
    type: SymbolJsonType;
}
/**
 * Base class for 3D symbols.
 */
export interface Symbol3DJsonBase extends SymbolJsonBase {
    /**
     * A Collection of Symbol3DLayer objects used to visualize the graphic or
     * feature.
     */
    symbolLayers: Symbol3DLayerJson[];
}
/**
 * Represents a symbol reference that contains a CIM symbol. In addition to type
 * listed below, a symbol reference will contain additional properties. More
 * details on CIM symbol reference and CIM symbols are available on github:
 * https://github.com/Esri/cim-spec/blob/master/docs/v2/Overview-Symbols.md.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/polygonSymbol3D/}.
 *
 * @deprecated Use CIMSymbolReferenceJson instead.
 */
export interface CIMSymbolJson extends SymbolJsonBase {
    /**
     * Specifies the type of symbol used.
     */
    type: "CIMSymbolReference";
}
/**
 * Represents a symbol reference that contains a CIM symbol. More properties and
 * details on CIM symbol reference and CIM symbols are available on github:
 * https://github.com/Esri/cim-spec/blob/main/docs/v3/Overview-Symbols.md,
 * https://github.com/Esri/cim-spec/blob/main/docs/v3/CIMRenderers.md#CIMSymbolReference.
 *
 * See
 * {@link https://developers.arcgis.com/web-map-specification/objects/cimSymbolReference/}.
 */
export interface CIMSymbolReferenceJson extends SymbolJsonBase {
    /**
     * Specifies the type of symbol used.
     */
    type: "CIMSymbolReference";
    /**
     * The symbol. Supported values are CIMPointSymbol, CIMLineSymbol, and
     * CIMPolygonSymbol.
     */
    symbol?: CIMPointSymbol | CIMLineSymbol | CIMPolygonSymbol;
}
/**
 * Picture fill symbols can be used to symbolize polygon geometries.
 *
 * See
 * {@link https://developers.arcgis.com/web-map-specification/objects/esriPFS_symbol/}.
 */
export interface PictureFillSymbolJson extends SymbolJsonBase {
    /**
     * Numeric value that defines the number of degrees ranging from 0-360, that
     * a marker symbol is rotated. The rotation is from East in a
     * counter-clockwise direction where East is the 0° axis.
     */
    angle?: number | null;
    /**
     * String value indicating the content type for the image.
     */
    contentType?: string | null;
    /**
     * Numeric value used if needing to resize the symbol. Specify a value in
     * points. If images are to be displayed in their original size, leave this
     * blank.
     */
    height?: number | null;
    /**
     * String value indicating the base64 encoded data.
     */
    imageData?: string | null;
    /**
     * Sets the outline of the symbol.
     */
    outline?: SimpleLineSymbolJson | null;
    /**
     * Relative URL for static layers and full URL for dynamic layers. Access
     * relative URL using
     * http://<mapservice-url>/<layerId1>/images/<imageUrl11>.
     */
    url?: string | null;
    /**
     * Numeric value used if needing to resize the symbol. If images are to be
     * displayed in their original size, leave this blank.
     */
    width?: number | null;
    /**
     * Numeric value indicating the offset on the x-axis in pixels.
     */
    xoffset?: number | null;
    /**
     * Numeric value indicating the scale factor in x direction.
     */
    xscale?: number | null;
    /**
     * Numeric value indicating the offset on the y-axis in pixels.
     */
    yoffset?: number | null;
    /**
     * Numeric value indicating the scale factor in y direction.
     */
    yscale?: number | null;
    /**
     * @inheritDoc
     */
    type: "esriPFS";
}
/**
 * Picture marker symbols can be used to symbolize point geometries.
 *
 * See
 * {@link https://developers.arcgis.com/web-map-specification/objects/esriPMS_symbol/}.
 */
export interface PictureMarkerSymbolJson extends SymbolJsonBase {
    /**
     * Numeric value that defines the number of degrees ranging from 0-360, that
     * a marker symbol is rotated. The rotation is from East in a
     * counter-clockwise direction where East is the 0° axis.
     */
    angle?: number | null;
    /**
     * String value indicating the content type for the image.
     */
    contentType?: string | null;
    /**
     * Numeric value used if needing to resize the symbol. If images are to be
     * displayed in their original size, leave this blank.
     */
    height?: number | null;
    /**
     * String value indicating the base64 encoded data.
     */
    imageData?: string | null;
    /**
     * String value indicating the URL of the image. The URL should be relative
     * if working with static layers. A full URL should be used for map service
     * dynamic layers. A relative URL can be dereferenced by accessing the map
     * layer image resource or the feature layer image resource.
     */
    url?: string | null;
    /**
     * Numeric value used if needing to resize the symbol. If images are to be
     * displayed in their original size, leave this blank.
     */
    width?: number | null;
    /**
     * Numeric value indicating the offset on the x-axis in pixels.
     */
    xoffset?: number | null;
    /**
     * Numeric value indicating the offset on the y-axis in pixels.
     */
    yoffset?: number | null;
    /**
     * @inheritDoc
     */
    type: "esriPMS";
}
/**
 * Simple fill symbols can be used to symbolize polygon geometries.
 *
 * See
 * {@link https://developers.arcgis.com/web-map-specification/objects/esriSFS_symbol/}.
 */
export interface SimpleFillSymbolJson extends SymbolJsonBase {
    /**
     * Color is represented as a four-element array. The four elements represent
     * values for red, green, blue, and alpha in that order. Values range from 0
     * through 255. If color is undefined for a symbol, the color value is
     * null.
     */
    color?: ColorJson | null;
    /**
     * Sets the outline of the fill symbol.
     */
    outline?: SimpleLineSymbolJson | null;
    /**
     * The fill style.
     */
    style?: "esriSFSBackwardDiagonal" | "esriSFSCross" | "esriSFSDiagonalCross" | "esriSFSForwardDiagonal" | "esriSFSHorizontal" | "esriSFSNull" | "esriSFSSolid" | "esriSFSVertical" | null;
    /**
     * @inheritDoc
     */
    type: "esriSFS";
}
/**
 * Simple line symbols can be used to symbolize polyline geometries or outlines
 * for polygon fills.
 *
 * See
 * {@link https://developers.arcgis.com/web-map-specification/objects/esriSLS_symbol/}.
 */
export interface SimpleLineSymbolJson extends SymbolJsonBase {
    /**
     * Color is represented as a four-element array. The four elements represent
     * values for red, green, blue, and alpha in that order. Values range from 0
     * through 255. If color is undefined for a symbol, the color value is
     * null.
     */
    color?: ColorJson | null;
    /**
     * The line style.
     */
    style?: "esriSLSDash" | "esriSLSDashDot" | "esriSLSDashDotDot" | "esriSLSDot" | "esriSLSNull" | "esriSLSSolid" | null;
    /**
     * Numeric value indicating the width of the line in pixels.
     */
    width?: number | null;
    /**
     * @inheritDoc
     */
    type: "esriSLS";
}
/**
 * Simple marker symbols can be used to symbolize point geometries.
 *
 * See
 * {@link https://developers.arcgis.com/web-map-specification/objects/esriSMS_symbol/}.
 */
export interface SimpleMarkerSymbolJson extends SymbolJsonBase {
    /**
     * Numeric value used to rotate the symbol. The symbol is rotated
     * counter-clockwise. For example, The following, angle=-30, in will create
     * a symbol rotated -30 degrees counter-clockwise; that is, 30 degrees
     * clockwise.
     */
    angle?: number | null;
    /**
     * Color is represented as a four-element array. The four elements represent
     * values for red, green, blue, and alpha in that order. Values range from 0
     * through 255. If color is undefined for a symbol, the color value is
     * null.
     */
    color?: ColorJson | null;
    /**
     * Sets the outline of the marker symbol.
     */
    outline?: SimpleLineSymbolJson | null;
    /**
     * Numeric size of the symbol given in pixels.
     */
    size?: number | null;
    /**
     * The marker style.
     */
    style?: "esriSMSCircle" | "esriSMSCross" | "esriSMSDiamond" | "esriSMSSquare" | "esriSMSX" | "esriSMSTriangle" | "esriSMSPath" | null;
    /**
     * Numeric value indicating the offset on the x-axis in pixels.
     */
    xoffset?: number | null;
    /**
     * Numeric value indicating the offset on the y-axis in pixels.
     */
    yoffset?: number | null;
    /**
     * @inheritDoc
     */
    type: "esriSMS";
}
/**
 * Text symbols are used to add text to a feature (labeling).
 *
 * See
 * {@link https://developers.arcgis.com/web-map-specification/objects/esriTS_symbol/}.
 */
export interface TextSymbolJson extends SymbolJsonBase {
    /**
     * A numeric value that defines the number of degrees (0 to 360) that a text
     * symbol is rotated. The rotation is from East in a counter-clockwise
     * direction where East is the 0° axis.
     */
    angle?: number | null;
    /**
     * Background color of the text.
     */
    backgroundColor?: ColorJson | null;
    /**
     * Value indicating the the color of the border line.
     */
    borderLineColor?: ColorJson | null;
    /**
     * Numeric value indicating the the size of the border line in points.
     */
    borderLineSize?: number | null;
    /**
     * Color is represented as a four-element array. The four elements represent
     * values for red, green, blue, and alpha in that order. Values range from 0
     * through 255. If color is undefined for a symbol, the color value is
     * null.
     */
    color?: ColorJson | null;
    /**
     * Font used for text symbols.
     */
    font?: FontJson | null;
    /**
     * Color of the halo around the text.
     */
    haloColor?: ColorJson | null;
    /**
     * Numeric value indicating the point size of a halo around the text symbol.
     */
    haloSize?: number | null;
    /**
     * The horizontal alignment of the text.
     */
    horizontalAlignment?: "left" | "right" | "center" | "justify" | null;
    /**
     * Boolean value indicating whether to adjust the spacing between characters
     * in the text string.
     */
    kerning?: boolean | null;
    /**
     * Boolean value, set to true if using Hebrew or Arabic fonts.
     */
    rightToLeft?: boolean | null;
    /**
     * Boolean value indicating whether every character in the text string is
     * rotated.
     */
    rotated?: boolean | null;
    /**
     * Only applicable when specified as a client-side graphic.
     */
    text?: string | null;
    /**
     * The vertical alignment of the text.
     */
    verticalAlignment?: "baseline" | "top" | "middle" | "bottom" | null;
    /**
     * Numeric value indicating the offset on the x-axis in pixels.
     */
    xoffset?: number | null;
    /**
     * Numeric value indicating the offset on the y-axis in pixels.
     */
    yoffset?: number | null;
    /**
     * @inheritDoc
     */
    type: "esriTS";
}
/**
 * The material used to shade the geometry.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/material/}.
 */
export interface MaterialJson {
    /**
     * Color is represented as a three or four-element array.
     */
    color?: ColorJson | null;
    /**
     * Controls how symbolLayer or visualVariable color is applied onto the
     * underlying geometry color/texture. This property only applies to
     * FillSymbol3DLayer within MeshSymbol3D.
     *
     * - Tint: the feature's appearance (in terms of color) should be altered to
     *   match the symbol / visual variable color.
     * - Replace: the feature's color is replaced with the symbol / visual
     *   variable color.
     * - Multiply: the feature's color is multiplied with the symbol color.
     */
    colorMixMode?: "tint" | "replace" | "multiply" | null;
    /**
     * Number value ranging between 0 (no transparency) to 100 (completely
     * transparent).
     */
    transparency?: number | null;
}
interface EdgesJsonBase {
    /**
     * Color is represented as a three or four-element array.
     */
    color?: number[] | null;
    /**
     * A size in points by which to extend edges beyond their original end
     * points.
     */
    extensionLength?: number | null;
    /**
     * Edge size in points, positive only.
     */
    size?: number | null;
    /**
     * The value has to lie between 100 (full transparency) and 0 (full
     * opacity).
     */
    transparency?: number | null;
}
/**
 * The sketch edge rendering configuration of a symbol layer. Edges of type
 * sketch are rendered with a hand-drawn look in mind.
 */
export interface SketchEdgesJson extends EdgesJsonBase {
    /**
     * The type of edge visualization. Value of this property must be sketch.
     */
    type: "sketch";
}
/**
 * The solid edge rendering configuration of a symbol layer. Edges of type solid
 * are rendered in a single color, unaffected by scene lighting.
 */
export interface SolidEdgesJson extends EdgesJsonBase {
    /**
     * The type of edge visualization. Value of this property must be solid.
     */
    type: "solid";
}
/**
 * Edges describe additional styles applied to visually important edges of 3D
 * objects.
 */
export type EdgesJson = SolidEdgesJson | SketchEdgesJson;
/**
 * The outline of the point, line or polygon.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/outline/}.
 */
export interface OutlineJson {
    /**
     * Color is represented as a three or four-element array.
     */
    color?: ColorJson | null;
    /**
     * Outline size in points, positive only.
     */
    size?: number | null;
    /**
     * Number value ranging between 0 (no transparency) to 100 (completely
     * transparent).
     */
    transparency?: number | null;
}
/**
 * The shape (primitive) or image URL (href) used to visualize the features.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/iconSymbol3DLayer_resource/}.
 */
export interface ResourceIconSymbolJson {
    /**
     * An image encoded as base64 string, starting with data:image.
     */
    dataURI?: string | null;
    /**
     * URL to the returned image. Must be an absolute URL or a relative path
     * starting with "./".
     */
    href?: string | null;
    /**
     * Specifies the type of symbol used. Must be one of the following values:
     * circle, square, cross, x, kite.
     */
    primitive?: string | null;
}
/**
 * The primitive shape (primitive) or external 3D model (href) used to visualize
 * the points.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/objectSymbol3DLayer_resource/}.
 */
export interface ResourceObjectSymbolJson {
    /**
     * Must be an absolute URL or a relative path starting with "./".
     */
    href?: string | null;
    /**
     * Must be one of the following values: sphere, cylinder, cube, cone,
     * invertedCone, diamond, tetrahedron.
     */
    primitive?: string | null;
}
/**
 * The type of the Symbol3DLayer.
 */
export type Symbol3DLayerJsonType = "Extrude" | "Fill" | "Icon" | "Line" | "Path" | "Text" | "Object";
/**
 * Base class for symbol 3D Layer.
 */
export interface Symbol3DLayerJsonBase {
    /**
     * The type of the Symbol3DLayer. See {@link Symbol3DLayerJsonType}.
     */
    type: Symbol3DLayerJsonType;
}
/**
 * ExtrudeSymbol3DLayer is used to render Polygon geometries by extruding them
 * upward from the ground, creating a 3D volumetric object.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/extrudeSymbol3DLayer/}.
 */
export interface ExtrudeSymbol3DLayerJson extends Symbol3DLayerJsonBase {
    /**
     * Type: Boolean.
     */
    enable?: boolean | null;
    /**
     * The material used to shade the geometry.
     */
    material?: MaterialJson | null;
    /**
     * Extrusion height in meters, positive only.
     */
    size?: number | null;
    /**
     * @inheritDoc
     */
    type: "Extrude";
}
/**
 * FillSymbol3DLayer is used to render the surfaces of flat 2D Polygon
 * geometries and 3D volumetric meshes in a SceneView.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/fillSymbol3DLayer/}.
 */
export interface FillSymbol3DLayerJson extends Symbol3DLayerJsonBase {
    /**
     * Boolean to control the shadow casting behavior of the rendered
     * geometries.
     */
    castShadows?: boolean | null;
    /**
     * Specifies an edge visualization style. Only affects MeshSymbol3D.
     */
    edges?: EdgesJson | null;
    /**
     * Type: Boolean.
     */
    enable?: boolean | null;
    /**
     * The material used to shade the geometry.
     */
    material?: MaterialJson | null;
    /**
     * The outline of the point, line or polygon.
     */
    outline?: OutlineJson | null;
    /**
     * @inheritDoc
     */
    type: "Fill";
}
/**
 * IconSymbol3DLayer is used to render Point geometries using a flat 2D icon
 * (e.g. a circle) with a PointSymbol3D in a SceneView.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/iconSymbol3DLayer/}.
 */
export interface IconSymbol3DLayerJson extends Symbol3DLayerJsonBase {
    /**
     * Must be one of the following values: center, left, right, top, bottom,
     * topLeft, topRight, bottomLeft, bottomRight.
     */
    anchor?: "center" | "left" | "right" | "top" | "bottom" | "topLeft" | "topRight" | "bottomLeft" | "bottomRight" | null;
    /**
     * Type: Boolean.
     */
    enable?: boolean | null;
    /**
     * The material used to shade the geometry.
     */
    material?: MaterialJson | null;
    /**
     * The outline of the point, line or polygon.
     */
    outline?: OutlineJson | null;
    /**
     * The shape (primitive) or image URL (href) used to visualize the features.
     */
    resource?: ResourceIconSymbolJson | null;
    /**
     * Icon size in points, positive only.
     */
    size?: number | null;
    /**
     * @inheritDoc
     */
    type: "Icon";
}
/**
 * ObjectSymbol3DLayer is used to render Point geometries using a volumetric 3D
 * shape (e.g., a sphere or cylinder) with a PointSymbol3D in a SceneView.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/objectSymbol3DLayer/}.
 */
export interface ObjectSymbol3DLayerJson extends Symbol3DLayerJsonBase {
    /**
     * The positioning of the object relative to the geometry. Must be one of
     * the following values: center, bottom, origin.
     */
    anchor?: "bottom" | "center" | "origin" | "relative" | "top" | null;
    /**
     * When anchor equals "relative", this property specifies the positioning of
     * the object relative to the geometry as a fraction of the symbol layer's
     * bounding box. Otherwise it is ignored.
     */
    anchorPosition?: number[] | null;
    /**
     * Boolean to control the shadow casting behavior of the rendered
     * geometries.
     */
    castShadows?: boolean | null;
    /**
     * Object depth in meters, positive only.
     */
    depth?: number | null;
    /**
     * Type: Boolean.
     */
    enable?: boolean | null;
    /**
     * Angle in degrees, relative to y-axis of SR (typically but not necessarily
     * north).
     */
    heading?: number | null;
    /**
     * Object height in meters, positive only.
     */
    height?: number | null;
    /**
     * The material used to shade the geometry.
     */
    material?: MaterialJson | null;
    /**
     * The outline of the point, line or polygon.
     */
    outline?: OutlineJson | null;
    /**
     * The shape (primitive) or image URL (href) used to visualize the features.
     */
    resource?: ResourceObjectSymbolJson | null;
    /**
     * @inheritDoc
     */
    type: "Object";
    /**
     * Object width in meters, positive only.
     */
    width?: number | null;
}
/**
 * PathSymbol3DLayer renders Polyline geometries using a volumetric 3D tube with
 * a LineSymbol3D in a SceneView.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/pathSymbol3DLayer/}.
 */
export interface PathSymbol3DLayerJson extends Symbol3DLayerJsonBase {
    /**
     * The material used to shade the geometry.
     */
    material?: MaterialJson | null;
    /**
     * Path size (diameter) in meters, positive only.
     */
    size?: number | null;
    /**
     * @inheritDoc
     */
    type: "Path";
    /**
     * Path width in meters.
     */
    width?: number | null;
}
/**
 * LineSymbol3DLayer renders Polyline geometries using a flat 2D line with a
 * LineSymbol3D in a 3D SceneView.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/lineSymbol3DLayer/}.
 */
export interface LineSymbol3DLayerJson extends Symbol3DLayerJsonBase {
    /**
     * Type: Boolean.
     */
    enable?: boolean | null;
    /**
     * The material used to shade the geometry.
     */
    material?: MaterialJson | null;
    /**
     * Line width in points, positive only.
     */
    size?: number | null;
    /**
     * @inheritDoc
     */
    type: "Line";
}
/**
 * TextSymbol3DLayer is used to draw text labels for features of any geometry
 * type.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/textSymbol3DLayer/}.
 */
export interface TextSymbol3DLayerJson extends Symbol3DLayerJsonBase {
    /**
     * Font used for text symbols.
     */
    font?: FontJson | null;
    /**
     * The material used to shade the geometry.
     */
    material?: MaterialJson | null;
    /**
     * Font size in points, positive only.
     */
    size?: number | null;
    /**
     * Type:String.
     */
    text?: string | null;
    /**
     * @inheritDoc
     */
    type: "Text";
}
/**
 * 3D symbol layer types.
 */
export type Symbol3DLayerJson = ExtrudeSymbol3DLayerJson | FillSymbol3DLayerJson | IconSymbol3DLayerJson | LineSymbol3DLayerJson | PathSymbol3DLayerJson | TextSymbol3DLayerJson | ObjectSymbol3DLayerJson;
/**
 * Callout configuration for a symbol.
 */
export interface CalloutJson {
    /**
     * Optional border on the line that is used to improve the contrast of the
     * line color against various background colors.
     */
    border?: BorderJson | null;
    /**
     * The color of the line.
     */
    color?: ColorJson | null;
    /**
     * The width of the line in points.
     */
    size?: number | null;
    /**
     * A value between 100 (full transparency) and 0 (full opacity).
     */
    transparency?: number | null;
    /**
     * The type of the callout. A callout of type line connects an offset symbol
     * or label with its location.
     */
    type: "line";
}
/**
 * Optional border on the line that is used to improve the contrast of the line
 * color against various background colors.
 */
export interface BorderJson {
    /**
     * The color of the border.
     */
    color?: ColorJson | null;
    /**
     * A value between 100 (full transparency) and 0 (full opacity).
     */
    transparency?: number | null;
}
/**
 * LabelSymbol3D is used to render labels for features from a FeatureLayer in a
 * 3D SceneView.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/labelSymbol3D/}.
 */
export interface LabelSymbol3DJson extends Symbol3DJsonBase {
    /**
     * Callout configuration for a symbol.
     */
    callout?: CalloutJson | null;
    /**
     * @inheritDoc
     */
    symbolLayers: TextSymbol3DLayerJson[];
    /**
     * @inheritDoc
     */
    type: "LabelSymbol3D";
    /**
     * Shifts the symbol along the vertical world axis by a given length.
     */
    verticalOffset?: VerticalOffsetJson | null;
}
/**
 * LineSymbol3D is used to render features with Polyline geometry in a 3D
 * SceneView.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/lineSymbol3D/}.
 */
export interface LineSymbol3DJson extends Symbol3DJsonBase {
    /**
     * A Collection of Symbol3DLayer objects used to visualize the graphic or
     * feature.
     */
    symbolLayers: (LineSymbol3DLayerJson | PathSymbol3DLayerJson)[];
    /**
     * @inheritDoc
     */
    type: "LineSymbol3D";
}
/**
 * MeshSymbol3D is used to render 3D mesh features in a SceneLayer in a 3D
 * SceneView.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/meshSymbol3D/}.
 */
export interface MeshSymbol3DJson extends Symbol3DJsonBase {
    /**
     * A Collection of Symbol3DLayer objects used to visualize the graphic or
     * feature.
     */
    symbolLayers: FillSymbol3DLayerJson[];
    /**
     * @inheritDoc
     */
    type: "MeshSymbol3D";
}
/**
 * PointSymbol3D is used to render features with Point geometry in a 3D
 * SceneView.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/pointSymbol3D/}.
 */
export interface PointSymbol3DJson extends Symbol3DJsonBase {
    /**
     * Callout configuration for a symbol.
     */
    callout?: CalloutJson | null;
    /**
     * The origin of the style from which the symbol was originally referenced.
     * A reference to the style origin can be either by styleName or by styleUrl
     * (but not both). It may be used to understand where a symbol was
     * originally sourced from, but does not affect actual appearance or
     * rendering of the symbol. See
     * {@link https://developers.arcgis.com/web-scene-specification/objects/styleOrigin/}.
     */
    styleOrigin?: {
        /**
         * Name of the symbol in the style referenced by styleName or styleUrl.
         */
        name?: string | null;
        /**
         * A well-known esri-provided style, such as EsriThematicShapesStyle.
         */
        styleName?: string | null;
        /**
         * URL to a style definition Must be one of the following values: String
         * An absolute URL String A relative path starting with "./".
         */
        styleUrl?: string | null;
    } | null;
    /**
     * A Collection of Symbol3DLayer objects used to visualize the graphic or
     * feature.
     */
    symbolLayers: (IconSymbol3DLayerJson | ObjectSymbol3DLayerJson)[];
    /**
     * @inheritDoc
     */
    type: "PointSymbol3D";
    /**
     * Shifts the symbol along the vertical world axis by a given length.
     */
    verticalOffset?: VerticalOffsetJson | null;
}
/**
 * PolygonSymbol3D is used to render features with Polygon geometry in a 3D
 * SceneView. Polygon features may also be rendered as points with icons or
 * objects at the centroid of each polygon.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/polygonSymbol3D/}.
 */
export interface PolygonSymbol3DJson extends Symbol3DJsonBase {
    /**
     * A Collection of Symbol3DLayer objects used to visualize the graphic or
     * feature.
     */
    symbolLayers: (FillSymbol3DLayerJson | ExtrudeSymbol3DLayerJson | LineSymbol3DLayerJson)[];
    /**
     * @inheritDoc
     */
    type: "PolygonSymbol3D";
}
/**
 * The StyleSymbolReference is used to reference a symbol from a portal
 * styleItem.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/styleSymbolReference/}.
 */
export interface StyleSymbolReferenceJson {
    /**
     * Identifies a symbol in the style by name.
     */
    name?: string | null;
    /**
     * A registered web style name.
     */
    styleName?: string | null;
    /**
     * URL that points to the web style definition.
     */
    styleUrl?: string | null;
    /**
     * @inheritDoc
     */
    type: "styleSymbolReference";
}
/**
 * The type of the Symbol.
 */
export type SymbolJsonType = "esriSMS" | "esriSLS" | "esriSFS" | "esriPMS" | "esriPFS" | "esriTS" | "LineSymbol3D" | "MeshSymbol3D" | "PointSymbol3D" | "PolygonSymbol3D" | "LabelSymbol3D" | "styleSymbolReference" | "CIMSymbolReference";
export {};
