import type SmartMappingSliderViewModel from "./SmartMappingSliderViewModel.js";
import type { SupportedBreaks, SmartMappingSupportedStop } from "./types.js";
import type { SmartMappingSliderViewModelProperties } from "./SmartMappingSliderViewModel.js";

export interface SmartMappingPrimaryHandleSliderViewModelProperties<StopType extends SmartMappingSupportedStop = SmartMappingSupportedStop> extends SmartMappingSliderViewModelProperties, Partial<Pick<SmartMappingPrimaryHandleSliderViewModel<StopType>, "handlesSyncedToPrimary" | "primaryHandleEnabled">> {}

/**
 * Shared properties for sliders that have a [primaryHandle](https://developers.arcgis.com/javascript/latest/references/core/widgets/smartMapping/SmartMappingPrimaryHandleSliderViewModel/#primaryHandleEnabled) option.
 *
 * @since 4.18
 * @see [SmartMappingSliderBase](https://developers.arcgis.com/javascript/latest/references/core/widgets/smartMapping/SmartMappingSliderBase/)
 * @see [Programming patterns: Widget viewModel pattern](https://developers.arcgis.com/javascript/latest/programming-patterns/#widget-viewmodel-pattern)
 */
export default class SmartMappingPrimaryHandleSliderViewModel<StopType extends SmartMappingSupportedStop = SmartMappingSupportedStop> extends SmartMappingSliderViewModel<StopType, SupportedBreaks> {
  constructor(properties?: SmartMappingPrimaryHandleSliderViewModelProperties);
  /**
   * Only applicable when three thumbs (i.e. handles) are set on the
   * slider (i.e. when [primaryHandleEnabled](https://developers.arcgis.com/javascript/latest/references/core/widgets/smartMapping/SmartMappingPrimaryHandleSliderViewModel/#primaryHandleEnabled) is `true`). This property
   * indicates whether the position of the outside handles are synced with the middle, or primary,
   * handle. When enabled, if the primary handle is moved then the outside handle positions are updated
   * while maintaining a fixed distance from the primary handle.
   *
   * Only applicable when [primaryHandleEnabled](https://developers.arcgis.com/javascript/latest/references/core/widgets/smartMapping/SmartMappingPrimaryHandleSliderViewModel/#primaryHandleEnabled) is `true`.
   *
   * @default true
   * @see [primaryHandleEnabled](https://developers.arcgis.com/javascript/latest/references/core/widgets/smartMapping/SmartMappingPrimaryHandleSliderViewModel/#primaryHandleEnabled)
   * @example
   * // enables the primary handles and syncs it with the others
   * slider.viewModel.primaryHandleEnabled = true;
   * slider.viewModel.handlesSyncedToPrimary = true;
   */
  accessor handlesSyncedToPrimary: boolean;
  /**
   * When `true`, the slider will render a third handle between the
   * two handles already provided by default. This is the primary handle.
   * Three or five [values](https://developers.arcgis.com/javascript/latest/references/core/widgets/smartMapping/SmartMappingPrimaryHandleSliderViewModel/#values) must be defined for the primary handle to render.
   * The primary handle represents the middle stop.
   *
   * When [handlesSyncedToPrimary](https://developers.arcgis.com/javascript/latest/references/core/widgets/smartMapping/SmartMappingPrimaryHandleSliderViewModel/#handlesSyncedToPrimary) is `true`, then
   * this handle will control the position of the others when moved.
   *
   * @default false
   * @see [handlesSyncedToPrimary](https://developers.arcgis.com/javascript/latest/references/core/widgets/smartMapping/SmartMappingPrimaryHandleSliderViewModel/#handlesSyncedToPrimary)
   * @example
   * // enables the primary handles and syncs it with the others
   * slider.viewModel.primaryHandleEnabled = true;
   * slider.viewModel.handlesSyncedToPrimary = true;
   */
  accessor primaryHandleEnabled: boolean;
}