import type { JSONSupport } from "../core/JSONSupport.js";
import type { Symbol3DLayerType } from "./types.js";

export interface Symbol3DLayerProperties {}

/**
 * Symbol layers are used to define the visualization of [Point](https://developers.arcgis.com/javascript/latest/references/core/geometry/Point/), [Polyline](https://developers.arcgis.com/javascript/latest/references/core/geometry/Polyline/),
 * [Polygon](https://developers.arcgis.com/javascript/latest/references/core/geometry/Polygon/), and mesh geometries rendered with [3D symbols](https://developers.arcgis.com/javascript/latest/references/core/symbols/Symbol3D/).
 * [3D symbols](https://developers.arcgis.com/javascript/latest/references/core/symbols/Symbol3D/) may only be used to render features in a [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/),
 * [SceneLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/), [GraphicsLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/GraphicsLayer/), or standalone [graphics](https://developers.arcgis.com/javascript/latest/references/core/Graphic/) in a 3D
 * [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/). There is no support for 3D symbols in 2D [MapViews](https://developers.arcgis.com/javascript/latest/references/core/views/MapView/).
 *
 * All 3D symbols have a [Symbol3D.symbolLayers](https://developers.arcgis.com/javascript/latest/references/core/symbols/Symbol3D/#symbolLayers) property, which is an array of Symbol3DLayer objects.
 * All symbols must have at least one symbol layer added to the `symbolLayers` property. Think of the
 * [symbol object](https://developers.arcgis.com/javascript/latest/references/core/symbols/Symbol3D/) as a container that holds multiple symbol layers which define the appearance
 * of the symbol. One layer may be an outline, another the fill, etc. The relationship of symbol layers to symbol is
 * similar to the relationship of [operational layers](https://developers.arcgis.com/javascript/latest/references/core/Map/#layers) to a [Map](https://developers.arcgis.com/javascript/latest/references/core/Map/).
 *
 * Each symbol layer type may only be applied to certain [Symbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/Symbol3D/) and [Geometry](https://developers.arcgis.com/javascript/latest/references/core/geometry/Geometry/) types.
 * See the table below to learn more about when to use each type of symbol layer.
 *
 * [Symbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/Symbol3DLayer/) Type | [Symbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/Symbol3D/) Type | Flat/Volumetric | Size Units | Example
 * ------------|-----------|------------|-------------|-----------
 * [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/IconSymbol3DLayer/) | [PointSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/PointSymbol3D/), [PolygonSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/PolygonSymbol3D/) | flat | points | ![s3d-icon-circle](https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbols3d-icon-circle.avif)
 * [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/ObjectSymbol3DLayer/) | [PointSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/PointSymbol3D/), [PolygonSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/PolygonSymbol3D/) | volumetric | meters | ![s3d-object](https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbols3d-object-sphere.avif)
 * [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/LineSymbol3DLayer/) | [LineSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/LineSymbol3D/), [PolygonSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/PolygonSymbol3D/) | flat | points | ![s3d-line](https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbols3d-line-line.avif)
 * [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/PathSymbol3DLayer/) | [LineSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/LineSymbol3D/) | volumetric | meters | ![s3d-path](https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbols3d-path-tube.avif)
 * [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/FillSymbol3DLayer/) | [PolygonSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/PolygonSymbol3D/), [MeshSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/MeshSymbol3D/) | flat | - | ![s3d-fill](https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbols3d-fill-solid.avif)
 * [WaterSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/WaterSymbol3DLayer/) | [PolygonSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/PolygonSymbol3D/) | flat | - | ![s3d-water](https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbols3d-water-solid.avif)
 * [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/ExtrudeSymbol3DLayer/) | [PolygonSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/PolygonSymbol3D/) | volumetric | meters | ![s3d-extrusion](https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbols3d-extrude-solid.avif)
 * [TextSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/TextSymbol3DLayer/) | [PointSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/PointSymbol3D/), [PolygonSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/PolygonSymbol3D/), [LabelSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/LabelSymbol3D/) | flat | points | ![s3d-text](https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbols3d-label-text.avif)
 *
 * The size of flat symbol layers is usually defined in either points or pixels (screen space) whereas the
 * size of volumetric symbol layers is defined in meters (real-world space).
 *
 * @since 4.0
 * @see [Symbol Builder](https://developers.arcgis.com/javascript/latest/symbol-builder/)
 * @see [Symbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/Symbol3D/)
 * @see [Renderer](https://developers.arcgis.com/javascript/latest/references/core/renderers/Renderer/)
 * @see [Graphic](https://developers.arcgis.com/javascript/latest/references/core/Graphic/)
 * @see [ArcGIS blog - Working with icons, lines, and fill symbols](https://blogs.esri.com/esri/arcgis/2016/01/19/3d-visualization-working-with-icons-lines-and-fill-symbols/)
 * @see [ArcGIS blog - Working with objects, paths, and extrusion](https://blogs.esri.com/esri/arcgis/2016/01/25/3d-visualization-working-with-objects-paths-and-extrusion/)
 * @see [ArcGIS blog - Using attributes to represent real-world sizes of features](https://blogs.esri.com/esri/arcgis/2016/02/01/3d-visualization-using-attributes-to-represent-real-world-sizes-of-features/)
 */
export default class Symbol3DLayer extends JSONSupport {
  constructor(properties?: Symbol3DLayerProperties);
  /**
   * The 3D symbol layer type. See the table below for a list of possible values.
   *
   * Value | Description
   * ------|------------
   * icon | ![s3d-icon](https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbols3d-icon-circle.avif)
   * object | ![s3d-object](https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbols3d-object-sphere.avif)
   * line | ![s3d-line](https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbols3d-line-line.avif)
   * path | ![s3d-path](https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbols3d-path-tube.avif)
   * fill | ![s3d-fill](https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbols3d-fill-solid.avif)
   * water | ![s3d-water](https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbols3d-water-solid.avif)
   * extrude | ![s3d-extrusion](https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbols3d-extrude-solid.avif)
   * text | ![s3d-text](https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbols3d-label-text.avif)
   */
  get type(): Symbol3DLayerType | null | undefined;
}