// Do not edit. This file is generated.
// MoonBit type: TouchInit
// Specifications: touch-events.idl

///|
/// [TouchInit](https://developer.mozilla.org/en-US/docs/Web/API/TouchInit)
#external
pub type TouchInit

///|
pub impl TJsValue for TouchInit with to_js(self : TouchInit) -> JsValue = "%identity"

///|
pub impl FromJsAny for TouchInit with from_js_any(value : JsAny) -> TouchInit = "%identity"

///|
pub fn TouchInit::new(
  identifier : Int,
  target : &TEventTarget,
  client_x? : Double,
  client_y? : Double,
  screen_x? : Double,
  screen_y? : Double,
  page_x? : Double,
  page_y? : Double,
  radius_x? : Float,
  radius_y? : Float,
  rotation_angle? : Float,
  force? : Float,
  altitude_angle? : Double,
  azimuth_angle? : Double,
  touch_type? : TouchType,
) -> TouchInit {
  touch_init_ffi(
    TJsValue::to_js(identifier),
    TJsValue::to_js(target),
    opt_to_js(client_x),
    opt_to_js(client_y),
    opt_to_js(screen_x),
    opt_to_js(screen_y),
    opt_to_js(page_x),
    opt_to_js(page_y),
    opt_to_js(radius_x),
    opt_to_js(radius_y),
    opt_to_js(rotation_angle),
    opt_to_js(force),
    opt_to_js(altitude_angle),
    opt_to_js(azimuth_angle),
    opt_to_js(touch_type),
  )
}

///|
pub fn TouchInit::empty() -> TouchInit {
  touch_init_empty_ffi()
}

///|
pub fn TouchInit::identifier(self : TouchInit) -> Int {
  touch_init_get_identifier_ffi(TJsValue::to_js(self))
}

///|
pub fn TouchInit::target(self : TouchInit) -> EventTarget {
  touch_init_get_target_ffi(TJsValue::to_js(self))
}

///|
pub fn TouchInit::client_x(self : TouchInit) -> Double? {
  touch_init_get_client_x_ffi(TJsValue::to_js(self)).to_option_prim()
}

///|
pub fn TouchInit::client_y(self : TouchInit) -> Double? {
  touch_init_get_client_y_ffi(TJsValue::to_js(self)).to_option_prim()
}

///|
pub fn TouchInit::screen_x(self : TouchInit) -> Double? {
  touch_init_get_screen_x_ffi(TJsValue::to_js(self)).to_option_prim()
}

///|
pub fn TouchInit::screen_y(self : TouchInit) -> Double? {
  touch_init_get_screen_y_ffi(TJsValue::to_js(self)).to_option_prim()
}

///|
pub fn TouchInit::page_x(self : TouchInit) -> Double? {
  touch_init_get_page_x_ffi(TJsValue::to_js(self)).to_option_prim()
}

///|
pub fn TouchInit::page_y(self : TouchInit) -> Double? {
  touch_init_get_page_y_ffi(TJsValue::to_js(self)).to_option_prim()
}

///|
pub fn TouchInit::radius_x(self : TouchInit) -> Float? {
  touch_init_get_radius_x_ffi(TJsValue::to_js(self)).to_option_prim()
}

///|
pub fn TouchInit::radius_y(self : TouchInit) -> Float? {
  touch_init_get_radius_y_ffi(TJsValue::to_js(self)).to_option_prim()
}

///|
pub fn TouchInit::rotation_angle(self : TouchInit) -> Float? {
  touch_init_get_rotation_angle_ffi(TJsValue::to_js(self)).to_option_prim()
}

///|
pub fn TouchInit::force(self : TouchInit) -> Float? {
  touch_init_get_force_ffi(TJsValue::to_js(self)).to_option_prim()
}

///|
pub fn TouchInit::altitude_angle(self : TouchInit) -> Double? {
  touch_init_get_altitude_angle_ffi(TJsValue::to_js(self)).to_option_prim()
}

///|
pub fn TouchInit::azimuth_angle(self : TouchInit) -> Double? {
  touch_init_get_azimuth_angle_ffi(TJsValue::to_js(self)).to_option_prim()
}

///|
pub fn TouchInit::touch_type(self : TouchInit) -> TouchType? {
  touch_init_get_touch_type_ffi(TJsValue::to_js(self)).to_option()
}

///|
#cfg(target="js")
extern "js" fn touch_init_ffi(
  identifier : JsValue,
  target : JsValue,
  client_x : JsValue,
  client_y : JsValue,
  screen_x : JsValue,
  screen_y : JsValue,
  page_x : JsValue,
  page_y : JsValue,
  radius_x : JsValue,
  radius_y : JsValue,
  rotation_angle : JsValue,
  force : JsValue,
  altitude_angle : JsValue,
  azimuth_angle : JsValue,
  touch_type : JsValue,
) -> TouchInit =
  #|(identifier, target, clientX, clientY, screenX, screenY, pageX, pageY, radiusX, radiusY, rotationAngle, force, altitudeAngle, azimuthAngle, touchType) => {
  #|  const obj = {};
  #|  if (identifier !== undefined) obj.identifier = identifier;
  #|  if (target !== undefined) obj.target = target;
  #|  if (clientX !== undefined) obj.clientX = clientX;
  #|  if (clientY !== undefined) obj.clientY = clientY;
  #|  if (screenX !== undefined) obj.screenX = screenX;
  #|  if (screenY !== undefined) obj.screenY = screenY;
  #|  if (pageX !== undefined) obj.pageX = pageX;
  #|  if (pageY !== undefined) obj.pageY = pageY;
  #|  if (radiusX !== undefined) obj.radiusX = radiusX;
  #|  if (radiusY !== undefined) obj.radiusY = radiusY;
  #|  if (rotationAngle !== undefined) obj.rotationAngle = rotationAngle;
  #|  if (force !== undefined) obj.force = force;
  #|  if (altitudeAngle !== undefined) obj.altitudeAngle = altitudeAngle;
  #|  if (azimuthAngle !== undefined) obj.azimuthAngle = azimuthAngle;
  #|  if (touchType !== undefined) obj.touchType = touchType;
  #|  return obj;
  #|}

///|
#cfg(target="js")
extern "js" fn touch_init_empty_ffi() -> TouchInit = "() => {}"

///|
#cfg(target="js")
extern "js" fn touch_init_get_identifier_ffi_js(obj : JsValue) -> JsValue = "(obj) => obj.identifier"

///|
#cfg(target="js")
fn touch_init_get_identifier_ffi(obj : JsValue) -> Int {
  touch_init_get_identifier_ffi_js(obj).unsafe_cast()
}

///|
#cfg(target="js")
extern "js" fn touch_init_get_target_ffi_js(obj : JsValue) -> JsValue = "(obj) => obj.target"

///|
#cfg(target="js")
fn touch_init_get_target_ffi(obj : JsValue) -> EventTarget {
  touch_init_get_target_ffi_js(obj).unsafe_cast()
}

///|
#cfg(target="js")
extern "js" fn touch_init_get_client_x_ffi(obj : JsValue) -> JsValue = "(obj) => obj.clientX"

///|
#cfg(target="js")
extern "js" fn touch_init_get_client_y_ffi(obj : JsValue) -> JsValue = "(obj) => obj.clientY"

///|
#cfg(target="js")
extern "js" fn touch_init_get_screen_x_ffi(obj : JsValue) -> JsValue = "(obj) => obj.screenX"

///|
#cfg(target="js")
extern "js" fn touch_init_get_screen_y_ffi(obj : JsValue) -> JsValue = "(obj) => obj.screenY"

///|
#cfg(target="js")
extern "js" fn touch_init_get_page_x_ffi(obj : JsValue) -> JsValue = "(obj) => obj.pageX"

///|
#cfg(target="js")
extern "js" fn touch_init_get_page_y_ffi(obj : JsValue) -> JsValue = "(obj) => obj.pageY"

///|
#cfg(target="js")
extern "js" fn touch_init_get_radius_x_ffi(obj : JsValue) -> JsValue = "(obj) => obj.radiusX"

///|
#cfg(target="js")
extern "js" fn touch_init_get_radius_y_ffi(obj : JsValue) -> JsValue = "(obj) => obj.radiusY"

///|
#cfg(target="js")
extern "js" fn touch_init_get_rotation_angle_ffi(obj : JsValue) -> JsValue = "(obj) => obj.rotationAngle"

///|
#cfg(target="js")
extern "js" fn touch_init_get_force_ffi(obj : JsValue) -> JsValue = "(obj) => obj.force"

///|
#cfg(target="js")
extern "js" fn touch_init_get_altitude_angle_ffi(obj : JsValue) -> JsValue = "(obj) => obj.altitudeAngle"

///|
#cfg(target="js")
extern "js" fn touch_init_get_azimuth_angle_ffi(obj : JsValue) -> JsValue = "(obj) => obj.azimuthAngle"

///|
#cfg(target="js")
extern "js" fn touch_init_get_touch_type_ffi(obj : JsValue) -> JsValue = "(obj) => obj.touchType"

///|
#cfg(target="wasm-gc")
fn touch_init_ffi(
  identifier : JsValue,
  target : JsValue,
  client_x : JsValue,
  client_y : JsValue,
  screen_x : JsValue,
  screen_y : JsValue,
  page_x : JsValue,
  page_y : JsValue,
  radius_x : JsValue,
  radius_y : JsValue,
  rotation_angle : JsValue,
  force : JsValue,
  altitude_angle : JsValue,
  azimuth_angle : JsValue,
  touch_type : JsValue,
) -> TouchInit = "webapi_TouchInit" "new"

///|
#cfg(target="wasm-gc")
fn touch_init_empty_ffi() -> TouchInit = "webapi_Dictionary" "empty"

///|
#cfg(target="wasm-gc")
fn touch_init_get_identifier_ffi(obj : JsValue) -> Int = "webapi_TouchInit" "get_identifier"

///|
#cfg(target="wasm-gc")
fn touch_init_get_target_ffi(obj : JsValue) -> EventTarget = "webapi_TouchInit" "get_target"

///|
#cfg(target="wasm-gc")
fn touch_init_get_client_x_ffi(obj : JsValue) -> JsValue = "webapi_TouchInit" "get_clientX"

///|
#cfg(target="wasm-gc")
fn touch_init_get_client_y_ffi(obj : JsValue) -> JsValue = "webapi_TouchInit" "get_clientY"

///|
#cfg(target="wasm-gc")
fn touch_init_get_screen_x_ffi(obj : JsValue) -> JsValue = "webapi_TouchInit" "get_screenX"

///|
#cfg(target="wasm-gc")
fn touch_init_get_screen_y_ffi(obj : JsValue) -> JsValue = "webapi_TouchInit" "get_screenY"

///|
#cfg(target="wasm-gc")
fn touch_init_get_page_x_ffi(obj : JsValue) -> JsValue = "webapi_TouchInit" "get_pageX"

///|
#cfg(target="wasm-gc")
fn touch_init_get_page_y_ffi(obj : JsValue) -> JsValue = "webapi_TouchInit" "get_pageY"

///|
#cfg(target="wasm-gc")
fn touch_init_get_radius_x_ffi(obj : JsValue) -> JsValue = "webapi_TouchInit" "get_radiusX"

///|
#cfg(target="wasm-gc")
fn touch_init_get_radius_y_ffi(obj : JsValue) -> JsValue = "webapi_TouchInit" "get_radiusY"

///|
#cfg(target="wasm-gc")
fn touch_init_get_rotation_angle_ffi(obj : JsValue) -> JsValue = "webapi_TouchInit" "get_rotationAngle"

///|
#cfg(target="wasm-gc")
fn touch_init_get_force_ffi(obj : JsValue) -> JsValue = "webapi_TouchInit" "get_force"

///|
#cfg(target="wasm-gc")
fn touch_init_get_altitude_angle_ffi(obj : JsValue) -> JsValue = "webapi_TouchInit" "get_altitudeAngle"

///|
#cfg(target="wasm-gc")
fn touch_init_get_azimuth_angle_ffi(obj : JsValue) -> JsValue = "webapi_TouchInit" "get_azimuthAngle"

///|
#cfg(target="wasm-gc")
fn touch_init_get_touch_type_ffi(obj : JsValue) -> JsValue = "webapi_TouchInit" "get_touchType"