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

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

/**
 * VoxelIsosurface describes an isosurface value and how to render it. Isosurfaces draw when
 * the [VoxelLayer#renderMode](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VoxelLayer.html#renderMode) is set to surfaces.
 */
export default abstract class VoxelIsosurface extends VoxelIsosurfaceSuperclass {
  /** The color to render this isosurface with. */
  get color(): EsriColor;
  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
   */
  accessor colorLocked: boolean;
  /**
   * Whether or not to render this isosurface.
   *
   * @default true
   */
  accessor enabled: boolean;
  /**
   * The label string for this isosurface.
   *
   * @default ""
   */
  accessor label: string;
  /**
   * The data value for this isosurface.
   *
   * @default 0.0
   */
  accessor value: number;
}
declare const VoxelIsosurfaceSuperclass: typeof JSONSupport & typeof ClonableMixin