import type LayerView from "./LayerView.js";
import type { DimensionLayerViewMixin, DimensionLayerViewMixinProperties } from "./DimensionLayerViewMixin.js";
import type { LayerViewProperties } from "./LayerView.js";

export interface DimensionLayerViewProperties extends LayerViewProperties, DimensionLayerViewMixinProperties {}

/**
 * Represents the [LayerView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-LayerView.html) of a [DimensionLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-DimensionLayer.html)
 * after it has been added to a [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html) in a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
 *
 * The dimension layer view controls whether the dimensions in its associated
 * [DimensionLayer#source](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-DimensionLayer.html#source) can be created or edited interactively.
 *
 * It allows to create new dimensions interactively using the [place()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-DimensionLayerView.html#place) method, query measured [results](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-DimensionLayerView.html#results),
 * or to make existing dimensions selectable and editable by enabling the [interactive](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-layers-DimensionLayerView.html#interactive) property.
 * To select a dimension, hover and click on its offset manipulator.
 *
 * The view for the layer can be retrieved using [SceneView#whenLayerView()](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#whenLayerView).
 *
 * ```js
 * // create new layer and add it to the map
 * const dimensionLayer = new DimensionLayer();
 * view.map.add(dimensionLayer);
 *
 * // retrieve layer view for the layer
 * const dimensionLayerView = await view.whenLayerView(dimensionLayer);
 * ```
 *
 * > [!WARNING]
 * >
 * > **Things to consider:**
 * > Snapping is enabled by default. This can be temporarily disabled by holding the `CTRL` key.
 * > Layer types currently supported for snapping are: [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html), [GraphicsLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GraphicsLayer.html) (except Mesh geometries),
 * > [GeoJSONLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html), [WFSLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-WFSLayer.html), [CSVLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html),
 * > [3D Object SceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html), and [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html).
 *
 * @since 4.25
 * @see [DimensionLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-DimensionLayer.html)
 * @see [DimensionAnalysis](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-DimensionAnalysis.html)
 * @see [LengthDimension](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-LengthDimension.html)
 * @see [DimensionSimpleStyle](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-DimensionSimpleStyle.html)
 * @see [DimensionAnalysisView3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-analysis-DimensionAnalysisView3D.html)
 * @see [Sample - Length dimensioning](https://developers.arcgis.com/javascript/latest/sample-code/layers-dimension/)
 */
export default abstract class DimensionLayerView extends DimensionLayerViewSuperclass {}
declare const DimensionLayerViewSuperclass: typeof LayerView & typeof DimensionLayerViewMixin