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

export interface UniqueValueProperties extends Partial<Pick<UniqueValue, "value" | "value2" | "value3">> {}

/**
 * Defines combinations of values to expect from up to three fields of categorical data
 * in a [UniqueValueRenderer](https://developers.arcgis.com/javascript/latest/references/core/renderers/UniqueValueRenderer/). This value (or combination of values) is used to
 * define the underlying data for a [UniqueValueClass](https://developers.arcgis.com/javascript/latest/references/core/renderers/support/UniqueValueClass/) (i.e. a category)
 * within a [UniqueValueRenderer](https://developers.arcgis.com/javascript/latest/references/core/renderers/UniqueValueRenderer/).
 *
 * @since 4.25
 * @see [UniqueValueClass.values](https://developers.arcgis.com/javascript/latest/references/core/renderers/support/UniqueValueClass/#values)
 * @see [UniqueValueRenderer.field](https://developers.arcgis.com/javascript/latest/references/core/renderers/UniqueValueRenderer/#field)
 * @see [UniqueValueRenderer.field2](https://developers.arcgis.com/javascript/latest/references/core/renderers/UniqueValueRenderer/#field2)
 * @see [UniqueValueRenderer.field3](https://developers.arcgis.com/javascript/latest/references/core/renderers/UniqueValueRenderer/#field3)
 * @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: 10,
 *   value2: "Republican",
 *   value3: "18-25"
 * };
 */
export default class UniqueValue extends UniqueValueSuperclass {
  constructor(properties?: UniqueValueProperties);
  /**
   * Defines a value (possibly in combination with [value2](https://developers.arcgis.com/javascript/latest/references/core/renderers/support/UniqueValue/#value2) and [value3](https://developers.arcgis.com/javascript/latest/references/core/renderers/support/UniqueValue/#value3)) returned from the field
   * referenced in [UniqueValueRenderer.field](https://developers.arcgis.com/javascript/latest/references/core/renderers/UniqueValueRenderer/#field)
   * or returned from an Arcade expression defined in
   * [UniqueValueRenderer.valueExpression](https://developers.arcgis.com/javascript/latest/references/core/renderers/UniqueValueRenderer/#valueExpression) to be categorized
   * in a [UniqueValueClass](https://developers.arcgis.com/javascript/latest/references/core/renderers/support/UniqueValueClass/).
   */
  accessor value: string | number | null | undefined;
  /**
   * Defines a value returned from the field referenced in [UniqueValueRenderer.field2](https://developers.arcgis.com/javascript/latest/references/core/renderers/UniqueValueRenderer/#field2)
   * to be categorized in combination with [value](https://developers.arcgis.com/javascript/latest/references/core/renderers/support/UniqueValue/#value) (and possibly [value3](https://developers.arcgis.com/javascript/latest/references/core/renderers/support/UniqueValue/#value3)) in a [UniqueValueClass](https://developers.arcgis.com/javascript/latest/references/core/renderers/support/UniqueValueClass/).
   */
  accessor value2: string | number | null | undefined;
  /**
   * Defines a value returned from the field referenced in [UniqueValueRenderer.field3](https://developers.arcgis.com/javascript/latest/references/core/renderers/UniqueValueRenderer/#field3)
   * to be categorized in combination with [value](https://developers.arcgis.com/javascript/latest/references/core/renderers/support/UniqueValue/#value) and [value2](https://developers.arcgis.com/javascript/latest/references/core/renderers/support/UniqueValue/#value2) in a [UniqueValueClass](https://developers.arcgis.com/javascript/latest/references/core/renderers/support/UniqueValueClass/).
   */
  accessor value3: string | number | null | undefined;
}
declare const UniqueValueSuperclass: typeof JSONSupport & typeof ClonableMixin