// Do not edit. This file is generated.
// MoonBit type: StaticRangeInit
// Specifications: dom.idl

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

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

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

///|
pub fn StaticRangeInit::new(
  start_container : &TNode,
  start_offset : UInt,
  end_container : &TNode,
  end_offset : UInt,
) -> StaticRangeInit {
  static_range_init_ffi(
    TJsValue::to_js(start_container),
    TJsValue::to_js(start_offset),
    TJsValue::to_js(end_container),
    TJsValue::to_js(end_offset),
  )
}

///|
pub fn StaticRangeInit::empty() -> StaticRangeInit {
  static_range_init_empty_ffi()
}

///|
pub fn StaticRangeInit::start_container(self : StaticRangeInit) -> Node {
  static_range_init_get_start_container_ffi(TJsValue::to_js(self))
}

///|
pub fn StaticRangeInit::start_offset(self : StaticRangeInit) -> UInt {
  static_range_init_get_start_offset_ffi(TJsValue::to_js(self))
}

///|
pub fn StaticRangeInit::end_container(self : StaticRangeInit) -> Node {
  static_range_init_get_end_container_ffi(TJsValue::to_js(self))
}

///|
pub fn StaticRangeInit::end_offset(self : StaticRangeInit) -> UInt {
  static_range_init_get_end_offset_ffi(TJsValue::to_js(self))
}

///|
#cfg(target="js")
extern "js" fn static_range_init_ffi(
  start_container : JsValue,
  start_offset : JsValue,
  end_container : JsValue,
  end_offset : JsValue,
) -> StaticRangeInit =
  #|(startContainer, startOffset, endContainer, endOffset) => {
  #|  const obj = {};
  #|  if (startContainer !== undefined) obj.startContainer = startContainer;
  #|  if (startOffset !== undefined) obj.startOffset = startOffset;
  #|  if (endContainer !== undefined) obj.endContainer = endContainer;
  #|  if (endOffset !== undefined) obj.endOffset = endOffset;
  #|  return obj;
  #|}

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

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

///|
#cfg(target="js")
fn static_range_init_get_start_container_ffi(obj : JsValue) -> Node {
  static_range_init_get_start_container_ffi_js(obj).unsafe_cast()
}

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

///|
#cfg(target="js")
fn static_range_init_get_start_offset_ffi(obj : JsValue) -> UInt {
  static_range_init_get_start_offset_ffi_js(obj).unsafe_cast()
}

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

///|
#cfg(target="js")
fn static_range_init_get_end_container_ffi(obj : JsValue) -> Node {
  static_range_init_get_end_container_ffi_js(obj).unsafe_cast()
}

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

///|
#cfg(target="js")
fn static_range_init_get_end_offset_ffi(obj : JsValue) -> UInt {
  static_range_init_get_end_offset_ffi_js(obj).unsafe_cast()
}

///|
#cfg(target="wasm-gc")
fn static_range_init_ffi(
  start_container : JsValue,
  start_offset : JsValue,
  end_container : JsValue,
  end_offset : JsValue,
) -> StaticRangeInit = "webapi_StaticRangeInit" "new"

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

///|
#cfg(target="wasm-gc")
fn static_range_init_get_start_container_ffi(obj : JsValue) -> Node = "webapi_StaticRangeInit" "get_startContainer"

///|
#cfg(target="wasm-gc")
fn static_range_init_get_start_offset_ffi(obj : JsValue) -> UInt = "webapi_StaticRangeInit" "get_startOffset"

///|
#cfg(target="wasm-gc")
fn static_range_init_get_end_container_ffi(obj : JsValue) -> Node = "webapi_StaticRangeInit" "get_endContainer"

///|
#cfg(target="wasm-gc")
fn static_range_init_get_end_offset_ffi(obj : JsValue) -> UInt = "webapi_StaticRangeInit" "get_endOffset"