import type { ClonableMixin } from "../../core/Clonable.js";
import type { JSONSupport } from "../../core/JSONSupport.js";

export interface MeshTextureTransformProperties extends Partial<Pick<MeshTextureTransform, "offset" | "rotation" | "scale">> {}

/**
 * MeshTextureTransform represents a transformation of UV mesh coordinates used to sample a
 * [MeshTexture](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html). The transformation includes an offset,
 * rotation and scale. Texture transformations can be used to optimize reuse of textures, for
 * example, by packing many images into a single texture "atlas" and using the texture transform
 * offset and scale to sample a specific region within this larger texture.
 *
 * @since 4.27
 * @see [MeshTexture](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshTexture.html)
 * @see [MeshMaterial](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-MeshMaterial.html)
 * @see [Mesh](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-Mesh.html)
 */
export default class MeshTextureTransform extends MeshTextureTransformSuperclass {
  constructor(properties?: MeshTextureTransformProperties);
  /**
   * The offset of the UV coordinate origin as a factor of the texture dimensions.
   *
   * @default [0, 0]
   */
  accessor offset: [
      number,
      number
  ];
  /**
   * The rotation of the UV coordinates in degrees, counterclockwise around the origin.
   *
   * @default 0
   */
  accessor rotation: number;
  /**
   * The scale factor applied to the components of the UV coordinates.
   *
   * @default [1, 1]
   */
  accessor scale: [
      number,
      number
  ];
}
declare const MeshTextureTransformSuperclass: typeof JSONSupport & typeof ClonableMixin