import type RelationshipElement from "../../form/elements/RelationshipElement.js";
import type RelatedRecordsInfoFieldOrder from "../../popup/support/RelatedRecordsInfoFieldOrder.js";
import type EditableInput from "./EditableInput.js";
import type GroupInput from "./GroupInput.js";
import type { EditableInputProperties } from "./EditableInput.js";

export interface RelationshipInputProperties extends EditableInputProperties {}

/**
 * This is a read-only support class that represents a relationship input field.
 * It is used by the [FeatureForm](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureForm/) widget.
 * The values are computed internally by the
 * [FeatureFormViewModel](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureForm/FeatureFormViewModel/).
 *
 * @since 4.27
 * @see [FeatureForm](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureForm/)
 * @see [FeatureFormViewModel](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureForm/FeatureFormViewModel/)
 * @see [FieldInput](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureForm/FieldInput/)
 */
export default class RelationshipInput extends EditableInput<RelationshipElement> {
  constructor(properties?: RelationshipInputProperties);
  /**
   * A numeric value indicating the maximum number of related features to display in the list of related records.
   * If no value is specified, the `Show all` button will be available to display all related records and the associated [displayCount](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureForm/RelationshipInput/#displayCount) defaults to 3. If the total amount of features is greater than the `displayCount`, a `Show all` button displays.
   *
   * @default 3
   */
  get displayCount(): number;
  /**
   * A string value indicating how to display related records within the relationship content. Currently, `list` is the only supported value.
   *
   * | Value    | Description |
   * | ------ | ----------- |
   * | list   | Shows a list of related records from the specified relationship. |
   *
   * @default "list"
   */
  get displayType(): "list";
  /** Indicates whether the input is editable. */
  get editable(): boolean;
  /** The group containing the relationship input. */
  get group(): GroupInput | null | undefined;
  /**
   * An array of [RelatedRecordsInfoFieldOrder](https://developers.arcgis.com/javascript/latest/references/core/popup/support/RelatedRecordsInfoFieldOrder/)
   * objects indicating the field display order for the related records
   * and whether they should be sorted in ascending `asc` or descending `desc` order.
   */
  get orderByFields(): RelatedRecordsInfoFieldOrder[] | null | undefined;
  /** The type of input. */
  get type(): "relationship";
  /** Indicates whether the form is currently updating. */
  get updating(): boolean;
}