// Generated by scripts/generate.mjs from bindings/api.mjs. Do not edit.

///|
#external
pub type TransformControls

///|
#module("@mizchi/three-mbt/controls")
pub extern "js" fn TransformControls::TransformControls(
  camera : Camera,
  canvas : Canvas,
) -> TransformControls = "transformControls"

///|
pub extern "js" fn TransformControls::enabled(self : TransformControls) -> Bool =
  #| (self) => self.enabled

///|
pub extern "js" fn TransformControls::set_enabled(
  self : TransformControls,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.enabled = value; }

///|
pub extern "js" fn TransformControls::dragging(
  self : TransformControls,
) -> Bool =
  #| (self) => self.dragging

///|
extern "js" fn TransformControls::ffi_object(
  self : TransformControls,
) -> Nullable[Object3D] =
  #| (self) => self.object

///|
pub fn TransformControls::object(self : TransformControls) -> Object3D? {
  self.ffi_object().to_option()
}

///|
pub extern "js" fn TransformControls::attach(
  self : TransformControls,
  object : Object3D,
) -> TransformControls =
  #| (self, object) => self.attach(object)

///|
pub extern "js" fn TransformControls::detach(
  self : TransformControls,
) -> TransformControls =
  #| (self) => self.detach()

///|
pub extern "js" fn TransformControls::reset(self : TransformControls) -> Unit =
  #| (self) => self.reset()

///|
pub extern "js" fn TransformControls::get_helper(
  self : TransformControls,
) -> Object3D =
  #| (self) => self.getHelper()

///|
pub extern "js" fn TransformControls::dispose(self : TransformControls) -> Unit =
  #| (self) => self.dispose()

///|
pub extern "js" fn TransformControls::mode(
  self : TransformControls,
) -> TransformMode =
  #| (self) => ["translate", "rotate", "scale"].indexOf(self.mode)

///|
pub extern "js" fn TransformControls::set_mode(
  self : TransformControls,
  value : TransformMode,
) -> Unit =
  #| (self, value) => self.setMode(["translate", "rotate", "scale"][value])

///|
pub extern "js" fn TransformControls::space(
  self : TransformControls,
) -> TransformSpace =
  #| (self) => self.space === "local" ? 1 : 0

///|
pub extern "js" fn TransformControls::set_space(
  self : TransformControls,
  value : TransformSpace,
) -> Unit =
  #| (self, value) => self.setSpace(value === 1 ? "local" : "world")

///|
extern "js" fn TransformControls::ffi_translation_snap(
  self : TransformControls,
) -> Nullable[Double] =
  #| (self) => self.translationSnap

///|
pub fn TransformControls::translation_snap(self : TransformControls) -> Double? {
  self.ffi_translation_snap().to_option()
}

///|
extern "js" fn TransformControls::ffi_set_translation_snap(
  self : TransformControls,
  value : Nullable[Double],
) -> Unit =
  #| (self, value) => { self.translationSnap = value; }

///|
pub fn TransformControls::set_translation_snap(
  self : TransformControls,
  value : Double?,
) -> Unit {
  self.ffi_set_translation_snap(Nullable::from_option(value))
}

///|
extern "js" fn TransformControls::ffi_rotation_snap(
  self : TransformControls,
) -> Nullable[Double] =
  #| (self) => self.rotationSnap

///|
pub fn TransformControls::rotation_snap(self : TransformControls) -> Double? {
  self.ffi_rotation_snap().to_option()
}

///|
extern "js" fn TransformControls::ffi_set_rotation_snap(
  self : TransformControls,
  value : Nullable[Double],
) -> Unit =
  #| (self, value) => { self.rotationSnap = value; }

///|
pub fn TransformControls::set_rotation_snap(
  self : TransformControls,
  value : Double?,
) -> Unit {
  self.ffi_set_rotation_snap(Nullable::from_option(value))
}

///|
extern "js" fn TransformControls::ffi_scale_snap(
  self : TransformControls,
) -> Nullable[Double] =
  #| (self) => self.scaleSnap

///|
pub fn TransformControls::scale_snap(self : TransformControls) -> Double? {
  self.ffi_scale_snap().to_option()
}

///|
extern "js" fn TransformControls::ffi_set_scale_snap(
  self : TransformControls,
  value : Nullable[Double],
) -> Unit =
  #| (self, value) => { self.scaleSnap = value; }

///|
pub fn TransformControls::set_scale_snap(
  self : TransformControls,
  value : Double?,
) -> Unit {
  self.ffi_set_scale_snap(Nullable::from_option(value))
}

///|
pub extern "js" fn TransformControls::size(self : TransformControls) -> Double =
  #| (self) => self.size

///|
pub extern "js" fn TransformControls::set_size(
  self : TransformControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.size = value; }

///|
pub extern "js" fn TransformControls::show_x(self : TransformControls) -> Bool =
  #| (self) => self.showX

///|
pub extern "js" fn TransformControls::set_show_x(
  self : TransformControls,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.showX = value; }

///|
pub extern "js" fn TransformControls::show_y(self : TransformControls) -> Bool =
  #| (self) => self.showY

///|
pub extern "js" fn TransformControls::set_show_y(
  self : TransformControls,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.showY = value; }

///|
pub extern "js" fn TransformControls::show_z(self : TransformControls) -> Bool =
  #| (self) => self.showZ

///|
pub extern "js" fn TransformControls::set_show_z(
  self : TransformControls,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.showZ = value; }

///|
pub extern "js" fn TransformControls::min_x(self : TransformControls) -> Double =
  #| (self) => self.minX

///|
pub extern "js" fn TransformControls::set_min_x(
  self : TransformControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.minX = value; }

///|
pub extern "js" fn TransformControls::max_x(self : TransformControls) -> Double =
  #| (self) => self.maxX

///|
pub extern "js" fn TransformControls::set_max_x(
  self : TransformControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.maxX = value; }

///|
pub extern "js" fn TransformControls::min_y(self : TransformControls) -> Double =
  #| (self) => self.minY

///|
pub extern "js" fn TransformControls::set_min_y(
  self : TransformControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.minY = value; }

///|
pub extern "js" fn TransformControls::max_y(self : TransformControls) -> Double =
  #| (self) => self.maxY

///|
pub extern "js" fn TransformControls::set_max_y(
  self : TransformControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.maxY = value; }

///|
pub extern "js" fn TransformControls::min_z(self : TransformControls) -> Double =
  #| (self) => self.minZ

///|
pub extern "js" fn TransformControls::set_min_z(
  self : TransformControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.minZ = value; }

///|
pub extern "js" fn TransformControls::max_z(self : TransformControls) -> Double =
  #| (self) => self.maxZ

///|
pub extern "js" fn TransformControls::set_max_z(
  self : TransformControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.maxZ = value; }

///|
pub extern "js" fn TransformControls::show_xy(self : TransformControls) -> Bool =
  #| (self) => self.showXY

///|
pub extern "js" fn TransformControls::set_show_xy(
  self : TransformControls,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.showXY = value; }

///|
pub extern "js" fn TransformControls::show_yz(self : TransformControls) -> Bool =
  #| (self) => self.showYZ

///|
pub extern "js" fn TransformControls::set_show_yz(
  self : TransformControls,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.showYZ = value; }

///|
pub extern "js" fn TransformControls::show_xz(self : TransformControls) -> Bool =
  #| (self) => self.showXZ

///|
pub extern "js" fn TransformControls::set_show_xz(
  self : TransformControls,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.showXZ = value; }

///|
pub extern "js" fn TransformControls::show_xyze(
  self : TransformControls,
) -> Bool =
  #| (self) => self.showXYZE

///|
pub extern "js" fn TransformControls::set_show_xyze(
  self : TransformControls,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.showXYZE = value; }

///|
pub extern "js" fn TransformControls::show_e(self : TransformControls) -> Bool =
  #| (self) => self.showE

///|
pub extern "js" fn TransformControls::set_show_e(
  self : TransformControls,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.showE = value; }

///|
extern "js" fn TransformControls::ffi_viewport(
  self : TransformControls,
) -> Nullable[Vector4] =
  #| (self) => self.viewport

///|
pub fn TransformControls::viewport(self : TransformControls) -> Vector4? {
  self.ffi_viewport().to_option()
}

///|
extern "js" fn TransformControls::ffi_set_viewport(
  self : TransformControls,
  value : Nullable[Vector4],
) -> Unit =
  #| (self, value) => { self.viewport = value; }

///|
pub fn TransformControls::set_viewport(
  self : TransformControls,
  value : Vector4?,
) -> Unit {
  self.ffi_set_viewport(Nullable::from_option(value))
}

///|
pub extern "js" fn TransformControls::set_colors(
  self : TransformControls,
  x : Color,
  y : Color,
  z : Color,
  active : Color,
) -> Unit =
  #| (self, x, y, z, active) => self.setColors(x, y, z, active)

///|
pub extern "js" fn TransformControls::get_raycaster(
  self : TransformControls,
) -> Raycaster =
  #| (self) => self.getRaycaster()