// Do not edit. This file is generated.
// MoonBit type: NotificationAction
// Specifications: notifications.idl

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

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

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

///|
pub fn NotificationAction::new(
  action : String,
  title : String,
  navigate? : String,
  icon? : String,
) -> NotificationAction {
  notification_action_ffi(
    TJsValue::to_js(action),
    TJsValue::to_js(title),
    opt_to_js(navigate),
    opt_to_js(icon),
  )
}

///|
pub fn NotificationAction::empty() -> NotificationAction {
  notification_action_empty_ffi()
}

///|
pub fn NotificationAction::action(self : NotificationAction) -> String {
  notification_action_get_action_ffi(TJsValue::to_js(self))
}

///|
pub fn NotificationAction::title(self : NotificationAction) -> String {
  notification_action_get_title_ffi(TJsValue::to_js(self))
}

///|
pub fn NotificationAction::navigate(self : NotificationAction) -> String? {
  notification_action_get_navigate_ffi(TJsValue::to_js(self)).to_option_prim()
}

///|
pub fn NotificationAction::icon(self : NotificationAction) -> String? {
  notification_action_get_icon_ffi(TJsValue::to_js(self)).to_option_prim()
}

///|
#cfg(target="js")
extern "js" fn notification_action_ffi(
  action : JsValue,
  title : JsValue,
  navigate : JsValue,
  icon : JsValue,
) -> NotificationAction =
  #|(action, title, navigate, icon) => {
  #|  const obj = {};
  #|  if (action !== undefined) obj.action = action;
  #|  if (title !== undefined) obj.title = title;
  #|  if (navigate !== undefined) obj.navigate = navigate;
  #|  if (icon !== undefined) obj.icon = icon;
  #|  return obj;
  #|}

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

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

///|
#cfg(target="js")
fn notification_action_get_action_ffi(obj : JsValue) -> String {
  notification_action_get_action_ffi_js(obj).unsafe_cast()
}

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

///|
#cfg(target="js")
fn notification_action_get_title_ffi(obj : JsValue) -> String {
  notification_action_get_title_ffi_js(obj).unsafe_cast()
}

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

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

///|
#cfg(target="wasm-gc")
fn notification_action_ffi(
  action : JsValue,
  title : JsValue,
  navigate : JsValue,
  icon : JsValue,
) -> NotificationAction = "webapi_NotificationAction" "new"

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

///|
#cfg(target="wasm-gc")
fn notification_action_get_action_ffi_wasm(obj : JsValue) -> JsValue = "webapi_NotificationAction" "get_action"

///|
#cfg(target="wasm-gc")
fn notification_action_get_action_ffi(obj : JsValue) -> String {
  jsvalue_to_string(notification_action_get_action_ffi_wasm(obj))
}

///|
#cfg(target="wasm-gc")
fn notification_action_get_title_ffi_wasm(obj : JsValue) -> JsValue = "webapi_NotificationAction" "get_title"

///|
#cfg(target="wasm-gc")
fn notification_action_get_title_ffi(obj : JsValue) -> String {
  jsvalue_to_string(notification_action_get_title_ffi_wasm(obj))
}

///|
#cfg(target="wasm-gc")
fn notification_action_get_navigate_ffi(obj : JsValue) -> JsValue = "webapi_NotificationAction" "get_navigate"

///|
#cfg(target="wasm-gc")
fn notification_action_get_icon_ffi(obj : JsValue) -> JsValue = "webapi_NotificationAction" "get_icon"