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

/** @since 5.0 */
export interface VoxelIsosurfaceProperties extends Partial<Pick<VoxelIsosurface, "colorLocked" | "enabled" | "label" | "value">> {
  /**
   * The color to render this isosurface with.
   *
   * @since 5.0
   */
  color?: ColorLike;
}

/**
 * VoxelIsosurface describes an isosurface value and how to render it. Isosurfaces draw when
 * the [renderMode](https://developers.arcgis.com/javascript/latest/references/core/layers/VoxelLayer/#renderMode) is set to `surfaces`. The maximum number of isosurfaces that can be drawn is 4.
 * Isosurfaces are for continuous variables only.
 *
 * @since 5.0
 * @see [Sample - Explore a VoxelLayer using isosurface](https://developers.arcgis.com/javascript/latest/sample-code/layers-voxel-isosurface/)
 */
export default class VoxelIsosurface extends VoxelIsosurfaceSuperclass {
  /**
   * @example
   * // Typical usage
   * let voxelIsosurface = new VoxelIsosurface({
   *  value: 21,
   *  enabled: true,
   *  color: [102, 136, 248],
   *  colorLocked: true
   * });
   */
  constructor(properties?: VoxelIsosurfaceProperties);
  /**
   * The color to render this isosurface with.
   *
   * @since 5.0
   */
  get color(): Color;
  set color(value: ColorLike);
  /**
   * Whether or not the isosurface color is automatically updated when the variable's transfer function's color stops change.
   *
   * @default true
   * @since 5.0
   */
  accessor colorLocked: boolean;
  /**
   * Whether or not to render this isosurface.
   *
   * @default true
   * @since 5.0
   */
  accessor enabled: boolean;
  /**
   * The label string for this isosurface.
   *
   * @default ""
   * @since 5.0
   */
  accessor label: string;
  /**
   * The data value for this isosurface.
   *
   * @default 0.0
   * @since 5.0
   */
  accessor value: number;
}
declare const VoxelIsosurfaceSuperclass: typeof JSONSupport & typeof ClonableMixin