/// <reference path="../../index.d.ts" />
import type Polygon from "@arcgis/core/geometry/Polygon.js";
import type Geometry from "@arcgis/core/geometry/Geometry.js";
import type { DistanceUnit, IValueChange } from "../../utils/interfaces.js";
import type { PublicLitElement as LitElement } from "@arcgis/lumina";
import type { T9nMeta } from "@arcgis/lumina/controllers";

export abstract class BufferTools extends LitElement {
  /**
   * Contains the translations for this component.
   * All UI strings should be defined here.
   *
   * @internal
   */
  protected _translations: {
      feet: string;
      meters: string;
      miles: string;
      kilometers: string;
      unit: string;
  } & T9nMeta<{
      feet: string;
      meters: string;
      miles: string;
      kilometers: string;
      unit: string;
  }>;
  /**
   * string: The appearance of display. Can be a 'slider' or 'text' inputs for distance/value
   *
   * @default 'text'
   */
  accessor appearance: "slider" | "text";
  /**
   * boolean: When `true`, interaction is prevented and the component is displayed with lower opacity.
   *
   * @default false
   */
  accessor disabled: boolean;
  /**
   * number: The distance used for buffer
   *
   * @default 0
   */
  accessor distance: number;
  /** esri/geometry/Geometry: https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Geometry.html */
  accessor geometries: Geometry[];
  /**
   * number: The component's maximum selectable value.
   *
   * @default 0
   */
  accessor max: number;
  /**
   * number: The component's minimum selectable value.
   *
   * @default 0
   */
  accessor min: number;
  /**
   * number: Displays tick marks on the number line at a specified interval.
   *
   * @default 10
   */
  accessor sliderTicks: number;
  /**
   * boolean: option to control if buffer results should be unioned
   *
   * @default true
   */
  accessor unionResults: boolean;
  /**
   * DistanceUnit: 'feet'|'meters'|'miles'|'kilometers'
   *
   * @default 'meters'
   */
  accessor unit: DistanceUnit;
  /**
   * Get the translated unit for display
   *
   * @param unit
   * @returns Promise resolving with the translated unit
   */
  getTranslatedUnit(unit: string): Promise<string>;
  /** Emitted on demand when a buffer is generated. */
  readonly bufferComplete: import("@arcgis/lumina").TargetedEvent<this, Polygon | Polygon[] | undefined>;
  /** Emitted on demand when the distance value changes */
  readonly distanceChanged: import("@arcgis/lumina").TargetedEvent<this, IValueChange>;
  /** Emitted on demand when the unit changes */
  readonly unitChanged: import("@arcgis/lumina").TargetedEvent<this, IValueChange>;
  readonly "@eventTypes": {
    bufferComplete: BufferTools["bufferComplete"]["detail"];
    distanceChanged: BufferTools["distanceChanged"]["detail"];
    unitChanged: BufferTools["unitChanged"]["detail"];
  };
}