import type { ClonableMixin } from "../../core/Clonable.js";
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { Symbol3DEmissiveSource } from "./types.js";

/** @since 5.0 */
export interface Symbol3DEmissiveProperties extends Partial<Pick<Symbol3DEmissive, "source" | "strength">> {}

/**
 * [Symbol3DEmissive](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-Symbol3DEmissive.html) is used to define an object as light emitter. It can be set as part of a
 * [Symbol3DMaterial](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-Symbol3DMaterial.html) on a volumetric [Symbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-Symbol3DLayer.html).
 *
 * > [!WARNING]
 * >
 * > **Known Limitations**
 * >
 * > [Symbol3DEmissive](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-support-Symbol3DEmissive.html) is not supported on [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html),[LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html),
 * > [WaterSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-WaterSymbol3DLayer.html), [TextSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html) and [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html) on
 * > [PolygonSymbol3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PolygonSymbol3D.html).
 *
 * Example:
 * ```js
 * let symbol = {
 *    type: "polygon-3d",  // autocasts as new PolygonSymbol3D()
 *    symbolLayers: [{
 *       type: "extrude",  // autocasts as new ExtrudeSymbol3DLayer()
 *       size: 100000,
 *       material: {  // autocasts as new Symbol3DMaterial()
 *          color: "red"
 *          emissive: {  // autocasts as new Symbol3DEmissive()
 *             source: "color",
 *             strength: 2
 *          }
 *       }
 *    }]
 * };
 * ```
 *
 * @since 5.0
 */
export class Symbol3DEmissive extends Symbol3DEmissiveSuperclass {
  /** @since 5.0 */
  constructor(properties?: Symbol3DEmissiveProperties);
  /**
   * The emissive source defines whether the emissive values are derived from an underlying model or the combined color
   * information of the symbology.
   *
   * Value | Description
   * ------|------------
   * emissive | Applies emissive texture and/or emissive factor from underlying models.
   * color | Applies the symbol material combined color as emissive color.
   *
   * @default "emissive"
   * @since 5.0
   */
  accessor source: Symbol3DEmissiveSource;
  /**
   * The emissive strength of this material.
   *
   * @default 1
   * @since 5.0
   */
  accessor strength: number;
}
declare const Symbol3DEmissiveSuperclass: typeof JSONSupport & typeof ClonableMixin