import type LayoutSettings from "./LayoutSettings.js";
import type NonspatialDataDisplay from "./NonspatialDataDisplay.js";
import type { ClonableMixin, ClonableMixinProperties } from "../core/Clonable.js";
import type { MultiOriginJSONSupport, MultiOriginJSONMixinProperties } from "../core/MultiOriginJSONSupport.js";
import type { LayoutType as LayoutTypeJSON } from "../portal/jsonTypes.js";

export interface LinkChartPropertiesProperties extends MultiOriginJSONMixinProperties, ClonableMixinProperties {}

/**
 * Properties that contain source information, layout configurations and other settings for a Link chart.
 *
 * @since 4.31
 * @see [Web Map Specification | Link chart Properties](https://developers.arcgis.com/web-map-specification/objects/linkChartProperties/)
 */
export default class LinkChartProperties extends LinkChartPropertiesSuperclass {
  constructor(properties?: LinkChartPropertiesProperties);
  /** Additional settings for chronological and organic link chart layouts. */
  get layoutSettings(): LayoutSettings | null | undefined;
  /**
   * The link chart layout algorithm used to position entities and relationships on the link chart.
   * Link chart layouts fall into different categories depending on how they organize entities and relationships in the link chart.
   *
   * - **Chronological** layouts arrange entities and relationships using time. Entities with time properties, called event entities,
   * and relationships with time properties, called event relationships, will be arranged on one or multiple timelines in the order
   * that they occurred. The entity type or relationship type must have a time property and the layer must be time enabled for an entity
   * or relationship to be considered an event.
   * - **Organic** layouts consider the link chart as if it were a mechanical system. The entities repel each other like two magnets
   * aligned with the same poles facing each other, while they are attracted to each other by the relationships that join entities together.
   * The algorithm iteratively reviews and places entities and evaluates the forces until equilibrium is reached.
   * [Settings](https://developers.arcgis.com/javascript/latest/api-reference/esri-linkChart-LayoutSettings.html) allow you to customize how entities are placed. These layouts allow you to visualize
   * entities in clusters that emphasize how they are connected.
   * - **Hierarchical** layouts attempt to orient the majority of the relationships from the bottom to the top in which
   *  the origins for the relationship are positioned at the bottom and destination entities are positioned at the top.
   * The algorithm attempts to limit the number of places in which the lines representing relationships cross each other.
   * Relationships are not allowed between entities at the same level in the link chart.
   * - **Tree** layouts arrange entities and their relationships as in nature, where the tree starts from the trunk and all branches
   *  move out from that point. In the link chart, the root entity is the starting point, the entities related to the root entity are then lined up
   * in a row next to the root entity, from left to right in this example. Radial layouts are a particular form of tree layout where the root of the
   * tree is placed in the center of a circle and the entities to which it is related are positioned in a circle around the root.The algorithm
   * identifies the entity associated with the smallest network topology index and uses it as the root entity.
   *
   * Layout Type                   | Layout Category | Description|
   * ------------------------------|---------------- |------------|
   * basic-grid                    | Basic           | This layout arranges entities in a regularly spaced lattice pattern, where the size of the grid depends of the number of entities |
   * chronological-mono-timeline   | Chronological   | This layout arranges all events in a single time line. By default, the direction of time is left to right and events that overlap in time are arranged vertically.
   * chronological-multi-timeline  | Chronological   | This layout creates individual time lines for each entity related to an event. Event entities are placed between the time lines. Relationships are drawn between a time line and the connected event entity. Relationships connecting events that have both a start and end time, also called durative events, will have a right angle. The portion along the time line represents the duration of the event. The layout will arrange entities and relationships depending on the type of event.
   * geographic-organic-standard   | Organic         | This layout arranges spatial entities geographically using their geometry. Spatial entities in which the entity has a null geometry and nonspatial entities are displayed on the link chart, but their placement and arrangement are determined using the `organic-standard` layout. The basemap defined in the [WebLinkChart](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebLinkChart.html) is used by default as a backdrop to provide spatial context.
   * hierarchical-bottom-to-top    | Hierarchical    | This layout is arranged similarly to tree layouts. However, an attempt is made to orient the majority of the relationships from the bottom to the top in which the origins for the relationship are positioned at the bottom and destination entities are positioned at the top. The algorithm attempts to limit the number of places in which the lines representing relationships cross each other. In contrast with the tree layouts, relationships are not allowed between entities at the same level in the link chart with this layout.
   * organic-community             | Organic         | This layout finds communities, which are groups of entities that are closely related to each other. An `organic-standard` layout is then used to arrange the communities. The attraction forces along relationships between entities of different communities are relaxed so that different communities are more spread out.
   * organic-standard              | Organic         | This layout considers the link chart as if it were a mechanical system. The entities repel each other like two magnets aligned with the same poles facing each other, while they are attracted to each other by the relationships that join entities together. The algorithm iteratively reviews and places entities and evaluates the forces until equilibrium is reached. This layout allows you to visualize entities in clusters that emphasize how they are connected.
   * radial-node-centric           | Tree            | This layout arranges entities and their relationships as in nature, where the tree starts from the trunk and all branches move out from that point. In the link chart, the root entity is the starting point, positioned at the left. The entities related to the root entity are lined up in a row to the right of the root entity, from top to bottom in this example. Any entities related to those items that aren't present in the link chart are added as another row closer to the bottom, and so on. The algorithm identifies the entity associated with the smallest network topology index and uses it as the root entity.
   * tree-right-to-left            | Tree            | This layout places the root entity for the tree in the center of a circle. All leaf entities for the tree are positioned around the outer edge of the circle. Entities at each level of hierarchy in the tree are arranged in concentric circles between the root entity and the outer circle.
   *
   * > [!WARNING]
   * >
   * > **Known Limitation**
   * >
   * > The layouts that are currently supported are those listed in the table above.
   *
   * @default "organic-standard"
   */
  get layoutType(): LayoutTypeJSON;
  /**
   * Object that defines instructions on the visualization of nonspatial link chart data.
   * Link charts can contain both spatial and nonspatial records. Spatial records are entities with geometry and relationships that
   * connect two spatial entities (both the relationship origin and destination entities have geometry). Nonspatial records are entities without
   * geometry (even if they are a member of a spatially enabled entity type) and relationships that have at least one endpoint with no geometry.
   */
  get nonspatialDataDisplay(): NonspatialDataDisplay | null | undefined;
  /** Url pointing to a resource containing featureSet as PBF reference containing a serialized representation of the internal entity table. */
  get relationshipsUrl(): string | null | undefined;
}
declare const LinkChartPropertiesSuperclass: typeof MultiOriginJSONSupport & typeof ClonableMixin