/**
 * Types of units used across the JS API.
 *
 * @since 4.18
 */

/**
 * Linear units used in projections.
 *
 * @see [SpatialReference.unit](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html#unit)
 * @see [HeightModelInfo.heightUnit](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-HeightModelInfo.html#heightUnit)
 */
export type ProjectionLengthUnit = "millimeters" | "centimeters" | "meters" | "feet" | "us-feet" | "clarke-feet" | "fathoms" | "nautical-miles" | "german-meters" | "us-chains" | "us-links" | "us-miles" | "kilometers" | "clarke-yards" | "clarke-chains" | "clarke-links" | "sears-yards" | "sears-feet" | "sears-chains" | "sears-links" | "benoit-1895-a-yards" | "benoit-1895-a-feet" | "benoit-1895-a-chains" | "benoit-1895-a-links" | "benoit-1895-b-yards" | "benoit-1895-b-feet" | "benoit-1895-b-chains" | "benoit-1895-b-links" | "1865-feet" | "indian-feet" | "indian-1937-feet" | "indian-1962-feet" | "indian-1975-feet" | "indian-yards" | "indian-1937-yards" | "indian-1962-yards" | "indian-1975-yards" | "statute-miles" | "gold-coast-feet" | "british-1936-feet" | "yards" | "chains" | "links" | "sears-1922-truncated-yards" | "sears-1922-truncated-feet" | "sears-1922-truncated-chains" | "sears-1922-truncated-links" | "us-yards" | "decimeters" | "inches" | "us-inches" | "rods" | "us-rods" | "us-nautical-miles" | "uk-nautical-miles" | "smoots" | "tx-vara" | "points" | "micrometers" | "nanometers" | "50-kilometers" | "150-kilometers";

/** Units for lengths. */
export type LengthUnit = "inches" | "feet" | "yards" | "miles" | "nautical-miles" | "us-feet" | "millimeters" | "centimeters" | "decimeters" | "meters" | "kilometers";

/** Units for areas. */
export type AreaUnit = "square-inches" | "square-feet" | "square-yards" | "square-miles" | "square-nautical-miles" | "square-us-feet" | "square-millimeters" | "square-centimeters" | "square-decimeters" | "square-meters" | "square-kilometers" | "acres" | "ares" | "hectares";

/** Units for volumes. */
export type VolumeUnit = "cubic-inches" | "cubic-feet" | "cubic-yards" | "cubic-miles" | "cubic-us-feet" | "liters" | "megaliters" | "gigaliters" | "cubic-millimeters" | "cubic-centimeters" | "cubic-decimeters" | "cubic-meters" | "cubic-kilometers";

/** Units for elevations. */
export type ElevationUnit = "unknown" | "inches" | "feet" | "us-feet" | "yards" | "miles" | "nautical-miles" | "millimeters" | "centimeters" | "decimeters" | "meters" | "kilometers" | "decimal-degrees";

/** Units for angles. */
export type AngleUnit = "degrees" | "radians";

/** Units for time. */
export type TimeUnit = "milliseconds" | "seconds" | "minutes" | "hours" | "days" | "weeks" | "months" | "years" | "decades" | "centuries" | "unknown";

export type SpeedUnit = "meter-per-second" | "kilometer-per-hour" | "knots" | "feet-per-second" | "mile-per-hour";

/** Units for measurement. */
export type Unit = LengthUnit | AreaUnit | VolumeUnit | AngleUnit;

/** Measurement systems. */
export type MeasurementSystem = "metric" | "imperial";

/** Measurement systems or an area units. */
export type SystemOrAreaUnit = MeasurementSystem | AreaUnit;

/** Measurement system or an length unit. */
export type SystemOrLengthUnit = MeasurementSystem | LengthUnit;

/** Measurement system or a volume unit. */
export type SystemOrVolumeUnit = MeasurementSystem | VolumeUnit;