import type Accessor from "../../core/Accessor.js";
import type VisibleElementsSettingsPane from "./VisibleElementsSettingsPane.js";
import type { VisibleElementsSettingsPaneProperties } from "./VisibleElementsSettingsPane.js";

/** @since 5.0 */
export interface VisibleElementsProperties extends Partial<Pick<VisibleElements, "maxAllowableAssociationsSlider">> {
  /**
   * The connectivity associations' line symbol settings that can be further configured.
   *
   * @since 5.0
   */
  connectivityAssociationsSettings?: VisibleElementsSettingsPaneProperties;
  /**
   * The structural attachment associations' line symbol settings that can be further configured.
   *
   * @since 5.0
   */
  structuralAttachmentAssociationsSettings?: VisibleElementsSettingsPaneProperties;
}

/**
 * The visible elements that are displayed within the widget. This provides the ability to turn individual elements of the widget's display on/off.
 *
 * @since 5.0
 * @example
 * // Display the max allowable associations slider using visible elements
 * const unAssociations = new UtilityNetworkAssociations({
 *   view: view,
 *   utilityNetwork: utilityNetwork,
 *   autoRefreshEnabled: true,
 *   visibleElements: {
 *     connectivityAssociationsSettings: {
 *       arrowsToggle: false,
 *       capSelect: false,
 *       colorPicker: true,
 *       stylePicker: true,
 *       widthInput: true
 *     },
 *     maxAllowableAssociationsSlider: false,
 *     structuralAttachmentAssociationsSettings: {
 *       arrowsToggle: false,
 *       capSelect: false,
 *       colorPicker: true,
 *       stylePicker: true,
 *       widthInput: true
 *     }
 *   }
 * });
 */
export default class VisibleElements extends Accessor {
  constructor(properties?: VisibleElementsProperties);
  /**
   * The connectivity associations' line symbol settings that can be further configured.
   *
   * @since 5.0
   */
  get connectivityAssociationsSettings(): VisibleElementsSettingsPane;
  set connectivityAssociationsSettings(value: VisibleElementsSettingsPaneProperties);
  /**
   * Indicates whether to display a slider that adjusts the [UtilityNetworkAssociations.maxAllowableAssociations](https://developers.arcgis.com/javascript/latest/references/core/widgets/UtilityNetworkAssociations/#maxAllowableAssociations). Default is `false`.
   *
   * @default false
   * @since 5.0
   */
  accessor maxAllowableAssociationsSlider: boolean;
  /**
   * The structural attachment associations' line symbol settings that can be further configured.
   *
   * @since 5.0
   */
  get structuralAttachmentAssociationsSettings(): VisibleElementsSettingsPane;
  set structuralAttachmentAssociationsSettings(value: VisibleElementsSettingsPaneProperties);
}