import type LinePattern3D from "./LinePattern3D.js";
import type { LineStyle } from "../types.js";
import type { LinePattern3DProperties } from "./LinePattern3D.js";

export interface LineStylePattern3DProperties extends LinePattern3DProperties, Partial<Pick<LineStylePattern3D, "style">> {}

/**
 * Renders lines with predefined style patterns.
 *
 * @since 4.22
 * @see [Sample - 3D hiking map with line patterns](https://developers.arcgis.com/javascript/latest/sample-code/visualization-line-patterns/)
 * @see [Sample - Line markers and label placement](https://developers.arcgis.com/javascript/latest/sample-code/visualization-line-markers/)
 * @see [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html)
 * @see [FillSymbol3DLayer#outline](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#outline)
 * @example
 * const symbol = {
 *   type: "line-3d",  // autocasts as new LineSymbol3D()
 *   symbolLayers: [{
 *     type: "line",  // autocasts as new LineSymbol3DLayer()
 *     material: { color: "red" },
 *     pattern: {  // autocasts as new LineStylePattern3D()
 *       type: "style",
 *       style: "dash"
 *     }
 *   }]
 * };
 */
export default class LineStylePattern3D extends LinePattern3D {
  constructor(properties?: LineStylePattern3DProperties);
  /**
   * The pattern style. Note that the pattern segments' appearance depends on which `cap` style is applied to a [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-LineSymbol3DLayer.html) or which `patternCap` to a [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html) outline.
   *
   * Possible values are listed in the table below:
   *
   * Value | Description
   * ------|-------------
   * dash | ![sls-dash](https://developers.arcgis.com/javascript/latest/assets/img/apiref/symbols/symbols-sls-dash.png)
   * dash-dot | ![sls-dash-dot](https://developers.arcgis.com/javascript/latest/assets/img/apiref/symbols/symbols-sls-dash-dot.png)
   * dot | ![sls-dot](https://developers.arcgis.com/javascript/latest/assets/img/apiref/symbols/symbols-sls-dot.png)
   * long-dash | ![sls-long-dash](https://developers.arcgis.com/javascript/latest/assets/img/apiref/symbols/symbols-sls-long-dash.png)
   * long-dash-dot | ![sls-long-dash-dot](https://developers.arcgis.com/javascript/latest/assets/img/apiref/symbols/symbols-sls-long-dash-dot.png)
   * long-dash-dot-dot | ![sls-dash-dot-dot](https://developers.arcgis.com/javascript/latest/assets/img/apiref/symbols/symbols-sls-dash-dot-dot.png)
   * none | The line has no symbol.
   * short-dash | ![sls-short-dash](https://developers.arcgis.com/javascript/latest/assets/img/apiref/symbols/symbols-sls-short-dash.png)
   * short-dash-dot | ![sls-short-dash-dot](https://developers.arcgis.com/javascript/latest/assets/img/apiref/symbols/symbols-sls-short-dash-dot.png)
   * short-dash-dot-dot | ![sls-short-dash-dot-dot](https://developers.arcgis.com/javascript/latest/assets/img/apiref/symbols/symbols-sls-short-dash-dot-dot.png)
   * short-dot | ![sls-short-dot](https://developers.arcgis.com/javascript/latest/assets/img/apiref/symbols/symbols-sls-short-dot.png)
   * solid | ![sls-solid](https://developers.arcgis.com/javascript/latest/assets/img/apiref/symbols/symbols-sls-solid.png)
   *
   * @default "solid"
   */
  accessor style: LineStyle;
  /** The pattern type. */
  get type(): "style";
  /**
   * Creates a deep clone of the pattern.
   *
   * @returns A deep clone of the object that
   *   invoked this method.
   */
  clone(): LineStylePattern3D;
}