// Do not edit. This file is generated.
// MoonBit type: ValidityState
// Specifications: html.idl

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

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

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

///|
/// Unchecked downcast — no runtime type check is performed.
/// Prefer `try_into()` for checked downcasts.
#deprecated("Use unsafe_into or try_into instead")
pub fn[T : TValidityState] ValidityState::into(self : ValidityState) -> T = "%identity"

///|
/// Unchecked downcast — no runtime type check is performed.
/// WARNING: If the underlying JS value is not of type T, this will silently
/// produce a value with incorrect type, leading to undefined behavior.
pub fn[T : TValidityState] ValidityState::unsafe_into(
  self : ValidityState,
) -> T = "%identity"

///|
pub impl HasConstructor for ValidityState with constructor_name() {
  "ValidityState"
}

///|
/// Checked downcast — returns None if the JS value is not an instance of T.
pub fn[T : TValidityState + HasConstructor] ValidityState::try_into(
  self : ValidityState,
) -> T? {
  if js_instanceof(TJsValue::to_js(self), T::constructor_name()) {
    Some(self.unsafe_into())
  } else {
    None
  }
}

///|
pub impl TValidityState for ValidityState

///|
/// [ValidityState](https://developer.mozilla.org/en-US/docs/Web/API/ValidityState) interface.
pub trait TValidityState: TJsValue {
  value_missing(self : Self) -> Bool = _
  type_mismatch(self : Self) -> Bool = _
  pattern_mismatch(self : Self) -> Bool = _
  too_long(self : Self) -> Bool = _
  too_short(self : Self) -> Bool = _
  range_underflow(self : Self) -> Bool = _
  range_overflow(self : Self) -> Bool = _
  step_mismatch(self : Self) -> Bool = _
  bad_input(self : Self) -> Bool = _
  custom_error(self : Self) -> Bool = _
  valid(self : Self) -> Bool = _
}

///|
/// [ValidityState.valueMissing](https://developer.mozilla.org/en-US/docs/Web/API/ValidityState/valueMissing)
impl TValidityState with value_missing(self : Self) -> Bool {
  validity_state_value_missing_ffi(TJsValue::to_js(self))
}

///|
/// [ValidityState.typeMismatch](https://developer.mozilla.org/en-US/docs/Web/API/ValidityState/typeMismatch)
impl TValidityState with type_mismatch(self : Self) -> Bool {
  validity_state_type_mismatch_ffi(TJsValue::to_js(self))
}

///|
/// [ValidityState.patternMismatch](https://developer.mozilla.org/en-US/docs/Web/API/ValidityState/patternMismatch)
impl TValidityState with pattern_mismatch(self : Self) -> Bool {
  validity_state_pattern_mismatch_ffi(TJsValue::to_js(self))
}

///|
/// [ValidityState.tooLong](https://developer.mozilla.org/en-US/docs/Web/API/ValidityState/tooLong)
impl TValidityState with too_long(self : Self) -> Bool {
  validity_state_too_long_ffi(TJsValue::to_js(self))
}

///|
/// [ValidityState.tooShort](https://developer.mozilla.org/en-US/docs/Web/API/ValidityState/tooShort)
impl TValidityState with too_short(self : Self) -> Bool {
  validity_state_too_short_ffi(TJsValue::to_js(self))
}

///|
/// [ValidityState.rangeUnderflow](https://developer.mozilla.org/en-US/docs/Web/API/ValidityState/rangeUnderflow)
impl TValidityState with range_underflow(self : Self) -> Bool {
  validity_state_range_underflow_ffi(TJsValue::to_js(self))
}

///|
/// [ValidityState.rangeOverflow](https://developer.mozilla.org/en-US/docs/Web/API/ValidityState/rangeOverflow)
impl TValidityState with range_overflow(self : Self) -> Bool {
  validity_state_range_overflow_ffi(TJsValue::to_js(self))
}

///|
/// [ValidityState.stepMismatch](https://developer.mozilla.org/en-US/docs/Web/API/ValidityState/stepMismatch)
impl TValidityState with step_mismatch(self : Self) -> Bool {
  validity_state_step_mismatch_ffi(TJsValue::to_js(self))
}

///|
/// [ValidityState.badInput](https://developer.mozilla.org/en-US/docs/Web/API/ValidityState/badInput)
impl TValidityState with bad_input(self : Self) -> Bool {
  validity_state_bad_input_ffi(TJsValue::to_js(self))
}

///|
/// [ValidityState.customError](https://developer.mozilla.org/en-US/docs/Web/API/ValidityState/customError)
impl TValidityState with custom_error(self : Self) -> Bool {
  validity_state_custom_error_ffi(TJsValue::to_js(self))
}

///|
/// [ValidityState.valid](https://developer.mozilla.org/en-US/docs/Web/API/ValidityState/valid)
impl TValidityState with valid(self : Self) -> Bool {
  validity_state_valid_ffi(TJsValue::to_js(self))
}

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

///|
#cfg(target="js")
fn validity_state_value_missing_ffi(obj : JsValue) -> Bool {
  validity_state_value_missing_ffi_js(obj).unsafe_cast()
}

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

///|
#cfg(target="js")
fn validity_state_type_mismatch_ffi(obj : JsValue) -> Bool {
  validity_state_type_mismatch_ffi_js(obj).unsafe_cast()
}

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

///|
#cfg(target="js")
fn validity_state_pattern_mismatch_ffi(obj : JsValue) -> Bool {
  validity_state_pattern_mismatch_ffi_js(obj).unsafe_cast()
}

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

///|
#cfg(target="js")
fn validity_state_too_long_ffi(obj : JsValue) -> Bool {
  validity_state_too_long_ffi_js(obj).unsafe_cast()
}

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

///|
#cfg(target="js")
fn validity_state_too_short_ffi(obj : JsValue) -> Bool {
  validity_state_too_short_ffi_js(obj).unsafe_cast()
}

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

///|
#cfg(target="js")
fn validity_state_range_underflow_ffi(obj : JsValue) -> Bool {
  validity_state_range_underflow_ffi_js(obj).unsafe_cast()
}

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

///|
#cfg(target="js")
fn validity_state_range_overflow_ffi(obj : JsValue) -> Bool {
  validity_state_range_overflow_ffi_js(obj).unsafe_cast()
}

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

///|
#cfg(target="js")
fn validity_state_step_mismatch_ffi(obj : JsValue) -> Bool {
  validity_state_step_mismatch_ffi_js(obj).unsafe_cast()
}

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

///|
#cfg(target="js")
fn validity_state_bad_input_ffi(obj : JsValue) -> Bool {
  validity_state_bad_input_ffi_js(obj).unsafe_cast()
}

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

///|
#cfg(target="js")
fn validity_state_custom_error_ffi(obj : JsValue) -> Bool {
  validity_state_custom_error_ffi_js(obj).unsafe_cast()
}

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

///|
#cfg(target="js")
fn validity_state_valid_ffi(obj : JsValue) -> Bool {
  validity_state_valid_ffi_js(obj).unsafe_cast()
}

///|
#cfg(target="wasm-gc")
fn validity_state_value_missing_ffi(obj : JsValue) -> Bool = "webapi_ValidityState" "get_valueMissing"

///|
#cfg(target="wasm-gc")
fn validity_state_type_mismatch_ffi(obj : JsValue) -> Bool = "webapi_ValidityState" "get_typeMismatch"

///|
#cfg(target="wasm-gc")
fn validity_state_pattern_mismatch_ffi(obj : JsValue) -> Bool = "webapi_ValidityState" "get_patternMismatch"

///|
#cfg(target="wasm-gc")
fn validity_state_too_long_ffi(obj : JsValue) -> Bool = "webapi_ValidityState" "get_tooLong"

///|
#cfg(target="wasm-gc")
fn validity_state_too_short_ffi(obj : JsValue) -> Bool = "webapi_ValidityState" "get_tooShort"

///|
#cfg(target="wasm-gc")
fn validity_state_range_underflow_ffi(obj : JsValue) -> Bool = "webapi_ValidityState" "get_rangeUnderflow"

///|
#cfg(target="wasm-gc")
fn validity_state_range_overflow_ffi(obj : JsValue) -> Bool = "webapi_ValidityState" "get_rangeOverflow"

///|
#cfg(target="wasm-gc")
fn validity_state_step_mismatch_ffi(obj : JsValue) -> Bool = "webapi_ValidityState" "get_stepMismatch"

///|
#cfg(target="wasm-gc")
fn validity_state_bad_input_ffi(obj : JsValue) -> Bool = "webapi_ValidityState" "get_badInput"

///|
#cfg(target="wasm-gc")
fn validity_state_custom_error_ffi(obj : JsValue) -> Bool = "webapi_ValidityState" "get_customError"

///|
#cfg(target="wasm-gc")
fn validity_state_valid_ffi(obj : JsValue) -> Bool = "webapi_ValidityState" "get_valid"