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

export interface VisibleElementsProperties extends Partial<Pick<VisibleElements, "maxAllowableAssociationsSlider">> {
  /** The connectivity associations' line symbol settings that can be further configured. */
  connectivityAssociationsSettings?: VisibleElementsSettingsPaneProperties;
  /** The structural attachment associations' line symbol settings that can be further configured. */
  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.
 *
 * @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 abstract class VisibleElements extends Accessor {
  /** The connectivity associations' line symbol settings that can be further configured. */
  get connectivityAssociationsSettings(): VisibleElementsSettingsPane;
  set connectivityAssociationsSettings(value: VisibleElementsSettingsPaneProperties);
  /**
   * Indicates whether to display a slider that adjusts the [UtilityNetworkAssociations#maxAllowableAssociations](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-UtilityNetworkAssociations.html#maxAllowableAssociations). Default is `false`.
   *
   * @default false
   */
  accessor maxAllowableAssociationsSlider: boolean;
  /** The structural attachment associations' line symbol settings that can be further configured. */
  get structuralAttachmentAssociationsSettings(): VisibleElementsSettingsPane;
  set structuralAttachmentAssociationsSettings(value: VisibleElementsSettingsPaneProperties);
}