import type UniqueValue from "./UniqueValue.js";
import type { ClonableMixin } from "../../core/Clonable.js";
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { UniqueValueProperties } from "./UniqueValue.js";
import type { SymbolUnion } from "../../symbols/types.js";
import type { WebStyleSymbolProperties } from "../../symbols/WebStyleSymbol.js";
import type { PolygonSymbol3DProperties } from "../../symbols/PolygonSymbol3D.js";
import type { PointSymbol3DProperties } from "../../symbols/PointSymbol3D.js";
import type { MeshSymbol3DProperties } from "../../symbols/MeshSymbol3D.js";
import type { LineSymbol3DProperties } from "../../symbols/LineSymbol3D.js";
import type { LabelSymbol3DProperties } from "../../symbols/LabelSymbol3D.js";
import type { CIMSymbolProperties } from "../../symbols/CIMSymbol.js";
import type { TextSymbolProperties } from "../../symbols/TextSymbol.js";
import type { SimpleMarkerSymbolProperties } from "../../symbols/SimpleMarkerSymbol.js";
import type { SimpleLineSymbolProperties } from "../../symbols/SimpleLineSymbol.js";
import type { SimpleFillSymbolProperties } from "../../symbols/SimpleFillSymbol.js";
import type { PictureMarkerSymbolProperties } from "../../symbols/PictureMarkerSymbol.js";
import type { PictureFillSymbolProperties } from "../../symbols/PictureFillSymbol.js";

export interface UniqueValueClassProperties extends Partial<Pick<UniqueValueClass, "label">> {
  /**
   * Defines the symbol used to represent features containing the given [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueClass.html#values).
   *
   * @example
   * lowDensityCommercialClass.symbol = {
   *   type: "simple-fill",
   *   color: [255,179,219]
   * };
   */
  symbol?: (((PictureFillSymbolProperties & { type: "picture-fill" }) | (PictureMarkerSymbolProperties & { type: "picture-marker" }) | (SimpleFillSymbolProperties & { type: "simple-fill" }) | (SimpleLineSymbolProperties & { type: "simple-line" }) | (SimpleMarkerSymbolProperties & { type: "simple-marker" }) | (TextSymbolProperties & { type: "text" }) | (CIMSymbolProperties & { type: "cim" })) | ((LabelSymbol3DProperties & { type: "label-3d" }) | (LineSymbol3DProperties & { type: "line-3d" }) | (MeshSymbol3DProperties & { type: "mesh-3d" }) | (PointSymbol3DProperties & { type: "point-3d" }) | (PolygonSymbol3DProperties & { type: "polygon-3d" })) | (WebStyleSymbolProperties & { type: "web-style" })) | null;
  /**
   * An array of unique values that should be rendered with the same symbol.
   * This can be autocast from a single value (or an array of raw data values) if the
   * values come only from a [UniqueValueRenderer.field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#field) or
   * [UniqueValueRenderer.valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#valueExpression). If values
   * originate from [UniqueValueRenderer.field2](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#field2) or
   * [UniqueValueRenderer.field3](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#field3), then this
   * may be autocast from an object or an array of objects specifying the combinations of valid values from each field.
   *
   * @example
   * // Features with the value of "High" in the renderer's field
   * // will be represented with the symbol defined in the class.
   * uniqueValueClass.values = "High";
   * @example
   * // Features with any of the values below in the renderer's field
   * // will be represented with the symbol defined in the class.
   * uniqueValueClass.values = ["R-1", "R-2", "R-3", "R-4", "R-5"];
   * @example
   * // Features with only the combination values below from
   * // field, field2, and field3 in the renderer
   * // will be represented with the symbol defined in the class.
   * uniqueValueClass.values = {
   *   value: "50,000-75,000",
   *   value2: "Republican",
   *   value3: "18-25"
   * };
   * @example
   * // Features with any the combinations of values below from
   * // field and field2 in the renderer
   * // will be represented with the symbol defined in the class.
   * uniqueValueClass.values = [{
   *   value: "Low",
   *   value2: "Low"
   * }, {
   *   value: "Low",
   *   value2: "High"
   * }, {
   *   value: "High",
   *   value2: "Low"
   * }, {
   *   value: "High",
   *   value2: "High"
   * }];
   */
  values?: string | number | UniqueValueProperties | string[] | number[] | UniqueValueProperties[] | null;
}

/**
 * Defines a category within a [UniqueValueGroup](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueGroup.html). This
 * includes the symbol and label used to represent one or more values of a field or set of fields.
 * A UniqueValueClass instance should be
 * provided to the [UniqueValueGroup.classes](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueGroup.html#classes)
 * property.
 *
 * @since 4.25
 * @see [UniqueValueGroup.classes](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueGroup.html#classes)
 * @example
 * const lowDensityCommercialClass = new UniqueValueClass({
 *   label: "C-2 | Community Commercial",
 *   symbol: {
 *     type: "simple-fill",
 *     color: [255,179,219]
 *   },
 *   values: ["C-1", "C-2"]
 * });
 */
export default class UniqueValueClass extends UniqueValueClassSuperclass {
  constructor(properties?: UniqueValueClassProperties);
  /**
   * Describes the [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueClass.html#values) represented by the [symbol](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueClass.html#symbol) in the
   * [Legend](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-legend/).
   * If no label is provided, then a list of each [value](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueClass.html#values) is displayed in the legend.
   *
   * @example lowDensityCommercialClass.label = "C-2 | Community Commercial";
   */
  accessor label: string | null | undefined;
  /**
   * Defines the symbol used to represent features containing the given [values](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-UniqueValueClass.html#values).
   *
   * @example
   * lowDensityCommercialClass.symbol = {
   *   type: "simple-fill",
   *   color: [255,179,219]
   * };
   */
  get symbol(): SymbolUnion | null | undefined;
  set symbol(value: (((PictureFillSymbolProperties & { type: "picture-fill" }) | (PictureMarkerSymbolProperties & { type: "picture-marker" }) | (SimpleFillSymbolProperties & { type: "simple-fill" }) | (SimpleLineSymbolProperties & { type: "simple-line" }) | (SimpleMarkerSymbolProperties & { type: "simple-marker" }) | (TextSymbolProperties & { type: "text" }) | (CIMSymbolProperties & { type: "cim" })) | ((LabelSymbol3DProperties & { type: "label-3d" }) | (LineSymbol3DProperties & { type: "line-3d" }) | (MeshSymbol3DProperties & { type: "mesh-3d" }) | (PointSymbol3DProperties & { type: "point-3d" }) | (PolygonSymbol3DProperties & { type: "polygon-3d" })) | (WebStyleSymbolProperties & { type: "web-style" })) | null | undefined);
  /**
   * An array of unique values that should be rendered with the same symbol.
   * This can be autocast from a single value (or an array of raw data values) if the
   * values come only from a [UniqueValueRenderer.field](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#field) or
   * [UniqueValueRenderer.valueExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#valueExpression). If values
   * originate from [UniqueValueRenderer.field2](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#field2) or
   * [UniqueValueRenderer.field3](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-UniqueValueRenderer.html#field3), then this
   * may be autocast from an object or an array of objects specifying the combinations of valid values from each field.
   *
   * @example
   * // Features with the value of "High" in the renderer's field
   * // will be represented with the symbol defined in the class.
   * uniqueValueClass.values = "High";
   * @example
   * // Features with any of the values below in the renderer's field
   * // will be represented with the symbol defined in the class.
   * uniqueValueClass.values = ["R-1", "R-2", "R-3", "R-4", "R-5"];
   * @example
   * // Features with only the combination values below from
   * // field, field2, and field3 in the renderer
   * // will be represented with the symbol defined in the class.
   * uniqueValueClass.values = {
   *   value: "50,000-75,000",
   *   value2: "Republican",
   *   value3: "18-25"
   * };
   * @example
   * // Features with any the combinations of values below from
   * // field and field2 in the renderer
   * // will be represented with the symbol defined in the class.
   * uniqueValueClass.values = [{
   *   value: "Low",
   *   value2: "Low"
   * }, {
   *   value: "Low",
   *   value2: "High"
   * }, {
   *   value: "High",
   *   value2: "Low"
   * }, {
   *   value: "High",
   *   value2: "High"
   * }];
   */
  get values(): UniqueValue[] | null | undefined;
  set values(value: string | number | UniqueValueProperties | string[] | number[] | UniqueValueProperties[] | null | undefined);
}
declare const UniqueValueClassSuperclass: typeof JSONSupport & typeof ClonableMixin