import type { JSONSupport } from "../../core/JSONSupport.js";
import type { TableElementType } from "../../portal/jsonTypes.js";

export interface AttributeTableElementProperties extends Partial<Pick<AttributeTableElement, "description" | "label">> {}

/**
 * Attribute table elements define what should display within the [AttributeTableTemplate](https://developers.arcgis.com/javascript/latest/references/core/tables/AttributeTableTemplate/) elements. These elements can be fields, groups, relationships, or attachments and are used to configure how the data is presented in a [FeatureTable](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/).
 *
 * There are four specific table element types:
 *
 * * [AttributeTableFieldElement](https://developers.arcgis.com/javascript/latest/references/core/tables/elements/AttributeTableFieldElement/)
 * * [AttributeTableGroupElement](https://developers.arcgis.com/javascript/latest/references/core/tables/elements/AttributeTableGroupElement/)
 * * [AttributeTableRelationshipElement](https://developers.arcgis.com/javascript/latest/references/core/tables/elements/AttributeTableRelationshipElement/)
 * * [AttributeTableAttachmentElement](https://developers.arcgis.com/javascript/latest/references/core/tables/elements/AttributeTableAttachmentElement/)
 *
 * The `AttributeTableElement` class is a read-only base class which has no constructor.
 *
 * @since 4.31
 * @see [FeatureTable](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/)
 * @see [AttributeTableTemplate](https://developers.arcgis.com/javascript/latest/references/core/tables/AttributeTableTemplate/)
 */
export default class AttributeTableElement extends JSONSupport {
  constructor(properties?: AttributeTableElementProperties);
  /** The table element's description which provides the purpose behind it. */
  accessor description: string | null | undefined;
  /** A string value containing the field alias. */
  accessor label: string | null | undefined;
  /**
   * The type of table element to display.
   *
   * Possible Value | Description
   * ---------------|-------------
   * attachment | An individual [attachment](https://developers.arcgis.com/javascript/latest/references/core/tables/elements/AttributeTableAttachmentElement/) element that defines an input for attachments in a [AttributeTableTemplate](https://developers.arcgis.com/javascript/latest/references/core/tables/AttributeTableTemplate/).
   * field | An individual [field](https://developers.arcgis.com/javascript/latest/references/core/tables/elements/AttributeTableFieldElement/) element that defines the field within the [table template](https://developers.arcgis.com/javascript/latest/references/core/tables/AttributeTableTemplate/).
   * group | Contains a [grouping](https://developers.arcgis.com/javascript/latest/references/core/tables/elements/AttributeTableGroupElement/) of [field](https://developers.arcgis.com/javascript/latest/references/core/tables/elements/AttributeTableFieldElement/) elements.
   * relationship | A [relationship](https://developers.arcgis.com/javascript/latest/references/core/tables/elements/AttributeTableRelationshipElement/) element defines a relationship between [Map.layers](https://developers.arcgis.com/javascript/latest/references/core/Map/#layers) and [Map.tables](https://developers.arcgis.com/javascript/latest/references/core/Map/#tables) and how they participate in the [FeatureTable](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/).
   */
  get type(): TableElementType;
}