import type Color from "../Color.js";
import type { ColorLike } from "../Color.js";
import type { ClonableMixin, ClonableMixinProperties } from "../core/Clonable.js";
import type { JSONSupport, JSONSupportMixinProperties } from "../core/JSONSupport.js";
import type { LineMarkerPlacement, LineMarkerStyle } from "./types.js";

export interface LineStyleMarker3DProperties extends JSONSupportMixinProperties, ClonableMixinProperties, Partial<Pick<LineStyleMarker3D, "placement" | "style">> {
  /** The color of the marker. If not specified, the marker will match the color of the line. */
  color?: ColorLike | null;
}

/**
 * LineStyleMarker3D is used for rendering a simple marker graphic on
 * a [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html).
 *
 * Markers can enhance the cartographic information of a line by
 * providing additional visual cues about the associated feature.
 *
 * ![symbols-3d-line-markers](https://developers.arcgis.com/javascript/latest/assets/img/apiref/symbols/symbols-3d-line-markers.png)
 *
 * @since 4.23
 * @see [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html)
 * @see [Sample - Line markers and label placement](https://developers.arcgis.com/javascript/latest/sample-code/visualization-line-markers/)
 * @see [Sample - Query Elevation (points)](https://developers.arcgis.com/javascript/latest/sample-code/elevation-query-points/)
 * @example
 * const symbol = {
 *   type: "line-3d",  // autocasts as new LineSymbol3D()
 *   symbolLayers: [{
 *     type: "line",  // autocasts as new LineSymbol3DLayer()
 *     marker: {  // autocasts as new LineStyleMarker3D()
 *       type: "style",
 *       style: "x",
 *       color: "blue",
 *       placement: "begin"
 *     })
 *   }]
 * };
 */
export default class LineStyleMarker3D extends LineStyleMarker3DSuperclass {
  /**
   * @example
   * const marker = new LineStyleMarker3D({
   *   color: new Color("red"),
   *   placement: "begin-end",
   *   style: "cross"
   * })
   */
  constructor(properties?: LineStyleMarker3DProperties);
  /** The color of the marker. If not specified, the marker will match the color of the line. */
  get color(): Color | null | undefined;
  set color(value: ColorLike | null | undefined);
  /**
   * Indicates where the marker is placed. Possible values are listed in the table below.
   *
   * Value  | Description
   * -------|---------------
   * begin  | Single marker at the start of the line
   * end    | Single marker at the end of the line
   * begin-end | Two markers, one at the start and one at the end of the line
   *
   * @default "begin-end"
   */
  accessor placement: LineMarkerPlacement;
  /**
   * Style of the marker. Possible values are listed in the table below.
   *
   * Value  | Example
   * -------|--------
   * arrow  | ![lsm-arrow](https://developers.arcgis.com/javascript/latest/assets/img/apiref/symbols/symbols-lsm-arrow.png)
   * circle | ![lsm-circle](https://developers.arcgis.com/javascript/latest/assets/img/apiref/symbols/symbols-lsm-circle.png)
   * square | ![lsm-square](https://developers.arcgis.com/javascript/latest/assets/img/apiref/symbols/symbols-lsm-square.png)
   * diamond| ![lsm-diamond](https://developers.arcgis.com/javascript/latest/assets/img/apiref/symbols/symbols-lsm-diamond.png)
   * cross  | ![lsm-cross](https://developers.arcgis.com/javascript/latest/assets/img/apiref/symbols/symbols-lsm-cross.png)
   * x      | ![lsm-x](https://developers.arcgis.com/javascript/latest/assets/img/apiref/symbols/symbols-lsm-x.png)
   *
   * @default "arrow"
   */
  accessor style: LineMarkerStyle;
  /** The type of marker applied to a line. */
  get type(): "style";
}
declare const LineStyleMarker3DSuperclass: typeof JSONSupport & typeof ClonableMixin