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

///|
#module("@mizchi/three-mbt/constructors")
pub extern "js" fn Color::from_hex(hex : Int) -> Color = "colorHex"

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

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

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

///|
pub extern "js" fn Color::clone(self : Color) -> Color =
  #| (self) => self.clone()

///|
pub extern "js" fn Color::copy(self : Color, other : Color) -> Color =
  #| (self, other) => self.copy(other)

///|
pub extern "js" fn Color::equals(self : Color, other : Color) -> Bool =
  #| (self, other) => self.equals(other)

///|
pub extern "js" fn Color::same_reference(self : Color, other : Color) -> Bool =
  #| (self, other) => self === other

///|
pub extern "js" fn Color::set_hex(self : Color, hex : Int) -> Color =
  #| (self, hex) => self.setHex(hex)

///|
pub extern "js" fn Color::get_hex(self : Color) -> Int =
  #| (self) => self.getHex()

///|
pub extern "js" fn Color::set_rgb(
  self : Color,
  r : Double,
  g : Double,
  b : Double,
) -> Color =
  #| (self, r, g, b) => self.setRGB(r, g, b)

///|
pub extern "js" fn Color::lerp(
  self : Color,
  other : Color,
  alpha : Double,
) -> Color =
  #| (self, other, alpha) => self.lerp(other, alpha)

///|
pub extern "js" fn Color::multiply(self : Color, other : Color) -> Color =
  #| (self, other) => self.multiply(other)

///|
pub extern "js" fn Color::multiply_scalar(
  self : Color,
  scalar : Double,
) -> Color =
  #| (self, scalar) => self.multiplyScalar(scalar)

///|
pub extern "js" fn Color::from_array(
  self : Color,
  values : FixedArray[Double],
  offset : Int,
) -> Color =
  #| (self, values, offset) => self.fromArray(values, offset)

///|
pub extern "js" fn Color::to_array(self : Color) -> FixedArray[Double] =
  #| (self) => self.toArray()

///|
pub extern "js" fn Color::to_array_into(
  self : Color,
  values : FixedArray[Double],
  offset : Int,
) -> FixedArray[Double] =
  #| (self, values, offset) => self.toArray(values, offset)

///|
pub extern "js" fn Color::get_hsl(self : Color, target : ColorHSL) -> ColorHSL =
  #| (self, target) => self.getHSL(target)

///|
pub extern "js" fn Color::get_rgb(self : Color, target : Color) -> Color =
  #| (self, target) => self.getRGB(target)

///|
pub extern "js" fn Color::set_color(self : Color, color : Color) -> Color =
  #| (self, color) => self.set(color)

///|
pub extern "js" fn Color::set_from_vector3(
  self : Color,
  vector : Vector3,
) -> Color =
  #| (self, vector) => self.setFromVector3(vector)

///|
pub extern "js" fn Color::set_scalar(self : Color, value : Double) -> Color =
  #| (self, value) => self.setScalar(value)

///|
pub extern "js" fn Color::set_hsl(
  self : Color,
  h : Double,
  s : Double,
  l : Double,
) -> Color =
  #| (self, h, s, l) => self.setHSL(h, s, l)

///|
pub extern "js" fn Color::set_style(self : Color, style : String) -> Color =
  #| (self, style) => self.setStyle(style)

///|
pub extern "js" fn Color::set_color_name(self : Color, name : String) -> Color =
  #| (self, name) => self.setColorName(name)

///|
pub extern "js" fn Color::copy_srgb_to_linear(
  self : Color,
  other : Color,
) -> Color =
  #| (self, other) => self.copySRGBToLinear(other)

///|
pub extern "js" fn Color::copy_linear_to_srgb(
  self : Color,
  other : Color,
) -> Color =
  #| (self, other) => self.copyLinearToSRGB(other)

///|
pub extern "js" fn Color::add(self : Color, other : Color) -> Color =
  #| (self, other) => self.add(other)

///|
pub extern "js" fn Color::sub(self : Color, other : Color) -> Color =
  #| (self, other) => self.sub(other)

///|
pub extern "js" fn Color::convert_srgb_to_linear(self : Color) -> Color =
  #| (self) => self.convertSRGBToLinear()

///|
pub extern "js" fn Color::convert_linear_to_srgb(self : Color) -> Color =
  #| (self) => self.convertLinearToSRGB()

///|
pub extern "js" fn Color::get_hex_string(self : Color) -> String =
  #| (self) => self.getHexString()

///|
pub extern "js" fn Color::get_style(self : Color) -> String =
  #| (self) => self.getStyle()

///|
pub extern "js" fn Color::offset_hsl(
  self : Color,
  h : Double,
  s : Double,
  l : Double,
) -> Color =
  #| (self, h, s, l) => self.offsetHSL(h, s, l)

///|
pub extern "js" fn Color::add_colors(
  self : Color,
  a : Color,
  b : Color,
) -> Color =
  #| (self, a, b) => self.addColors(a, b)

///|
pub extern "js" fn Color::add_scalar(self : Color, value : Double) -> Color =
  #| (self, value) => self.addScalar(value)

///|
pub extern "js" fn Color::apply_matrix3(
  self : Color,
  matrix : Matrix3,
) -> Color =
  #| (self, matrix) => self.applyMatrix3(matrix)

///|
pub extern "js" fn Color::lerp_colors(
  self : Color,
  a : Color,
  b : Color,
  alpha : Double,
) -> Color =
  #| (self, a, b, alpha) => self.lerpColors(a, b, alpha)

///|
pub extern "js" fn Color::lerp_hsl(
  self : Color,
  other : Color,
  alpha : Double,
) -> Color =
  #| (self, other, alpha) => self.lerpHSL(other, alpha)

///|
pub extern "js" fn Color::from_buffer_attribute(
  self : Color,
  attribute : BufferAttribute,
  index : Int,
) -> Color =
  #| (self, attribute, index) => self.fromBufferAttribute(attribute, index)

///|
extern "js" fn Color::ffi_to_json(self : Color) -> JsResult[String] =
  #| (self) => { try { return { ok: true, value: (() => JSON.stringify(self.toJSON()))() }; } catch (error) { return { ok: false, error: String(error) }; } }

///|
pub fn Color::to_json(self : Color) -> Json raise SerializationError {
  match self.ffi_to_json().into_result() {
    Ok(value) =>
      @json.parse(value) catch {
        error => raise SerializationError((error : Error).to_string())
      }
    Err(message) => raise SerializationError(message)
  }
}

///|
extern "js" fn Color::ffi_to_json_string(self : Color) -> JsResult[String] =
  #| (self) => { try { return { ok: true, value: (() => JSON.stringify(self.toJSON()))() }; } catch (error) { return { ok: false, error: String(error) }; } }

///|
pub fn Color::to_json_string(self : Color) -> String raise SerializationError {
  match self.ffi_to_json_string().into_result() {
    Ok(value) => value
    Err(message) => raise SerializationError(message)
  }
}