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

export interface GlowProperties extends Partial<Pick<Glow, "intensity">> {}

/**
 * [Glow](https://developers.arcgis.com/javascript/latest/references/core/webscene/Glow/) is a global stylized effect that enhances the appearance of light-emitting elements and applies
 * to all emitters in the scene. If a scene contains no emissive elements, enabling glow has no visible effect.
 *
 * When [Glow](https://developers.arcgis.com/javascript/latest/references/core/webscene/Glow/) is set to null, emissive elements render naturally, simulating atmospheric light scattering
 * with a bright but realistic appearance. The intensity controls the strength of the effect: a value of 0 produces a
 * subtle glow, while 1 creates a pronounced, exaggerated glow for strong visual emphasis.
 *
 * Add light emitters to the scene by configuring [Symbol3DEmissive](https://developers.arcgis.com/javascript/latest/references/core/symbols/support/Symbol3DEmissive/) property in [Symbol3DMaterial](https://developers.arcgis.com/javascript/latest/references/core/symbols/support/Symbol3DMaterial/)
 * on volumetric symbol layers, or by including 3D models with emission defined (for example, via emissive maps or
 * materials with an emissive color or factor). See the [Visualization with light-emitting symbols](https://developers.arcgis.com/javascript/latest/sample-code/light-emitting-symbols/) sample to learn how
 * to use emissive materials and glow to highlight features and build nighttime scenes.
 *
 * |<img src="https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbol3Dmaterial/emissiveStrength1.png" style="width:250px;"/>|<img src="https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbol3Dmaterial/glow0.png" style="width:250px;"/>|<img src="https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbol3Dmaterial/glow1.png" style="width:250px;"/>|
 * | ---------- | ----------- | ----------- |
 * | `glow: null`|`glow: { intensity: 0 }`|`glow: { intensity: 1 }`|
 * | Without glow, emissive elements display with a bright, natural appearance. | Glow enables a more stylized look of emissive elements across the scene. `intensity:0` adds a subtle glow only. | `intensity:1` adds an exaggerated glow, helpful for strong emphasis of emissive elements.
 *
 * > [!WARNING]
 * >
 * > **Known Limitations**
 * > [Symbol3DEmissive](https://developers.arcgis.com/javascript/latest/references/core/symbols/support/Symbol3DEmissive/) and  [Glow](https://developers.arcgis.com/javascript/latest/references/core/webscene/Glow/) require support for the WebGL2 extension `EXT_float_blend`.
 *
 * Example:
 * ```js
 * let view = new SceneView({
 *   map: new Map({
 *     basemap: "satellite",
 *     ground: "world-elevation"
 *   }),
 *   environment: {
 *     lighting: {
 *       type: "sun",
 *       glow: { intensity: 0.2 },
 *     }
 *   }
 * });
 * ```
 * The visualization updates as soon as the property changes:
 * ```js
 * view.environment.lighting.glow = new Glow({
 *    intensity: 0.8
 * });
 * ```
 *
 * @see [Sample - Visualization with light-emitting symbols](https://developers.arcgis.com/javascript/latest/sample-code/light-emitting-symbols/)
 * @since 5.0
 */
export default class Glow extends GlowSuperclass {
  constructor(properties?: GlowProperties);
  /**
   * Amount of stylized glow on emissive elements in the scene. The range spans from 0 to 1, going from subtle to strong
   * stylized glow for emphasis.
   *
   * @default 0.5
   */
  accessor intensity: number;
}
declare const GlowSuperclass: typeof JSONSupport & typeof ClonableMixin