blob: 560a30f496daad5adece8ae6aa0b3a350d3e0791 [file] [log] [blame]
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
//
// API docs from [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web).
// Attributions and copyright licensing by Mozilla Contributors is licensed
// under [CC-BY-SA 2.5](https://creativecommons.org/licenses/by-sa/2.5/.
// Generated from Web IDL definitions.
// ignore_for_file: unintended_html_in_doc_comment
@JS()
library;
import 'dart:js_interop';
import 'dom.dart';
import 'hr_time.dart';
import 'html.dart';
import 'service_workers.dart';
import 'vibration.dart';
typedef NotificationPermissionCallback = JSFunction;
typedef NotificationPermission = String;
typedef NotificationDirection = String;
/// The **`Notification`** interface of the [Notifications API] is used to
/// configure and display desktop notifications to the user.
///
/// These notifications' appearance and specific functionality vary across
/// platforms but generally they provide a way to asynchronously provide
/// information to the user.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/Notification).
extension type Notification._(JSObject _) implements EventTarget, JSObject {
external factory Notification(
String title, [
NotificationOptions options,
]);
/// The **`requestPermission()`** static method of the [Notification]
/// interface requests permission from the user for the current origin to
/// display notifications.
///
/// The method returns a `Promise` that fulfills with a string indicating
/// whether permission was granted or denied.
external static JSPromise<JSString> requestPermission(
[NotificationPermissionCallback deprecatedCallback]);
/// The **`permission`** read-only static property of the [Notification]
/// interface indicates the current permission granted by the user for the
/// current origin to
/// display web notifications.
external static NotificationPermission get permission;
/// The **`close()`** method of the [Notification] interface is used to
/// close/remove a previously displayed notification.
///
/// > [!NOTE]
/// > This API shouldn't be used just to have the notification
/// > removed from the screen after a fixed delay since this method will also
/// > remove the
/// > notification from any notification tray, preventing users from
/// > interacting with it
/// > after it was initially shown. A valid use for this API would be to
/// > remove a
/// > notification that is no longer relevant (e.g. the user already read the
/// > notification
/// > on the webpage in the case of a messaging app or the following song is
/// > already playing
/// > in a music app).
external void close();
external EventHandler get onclick;
external set onclick(EventHandler value);
external EventHandler get onshow;
external set onshow(EventHandler value);
external EventHandler get onerror;
external set onerror(EventHandler value);
external EventHandler get onclose;
external set onclose(EventHandler value);
/// The **`title`** read-only property of the
/// [Notification] interface indicates the title of the notification, as
/// specified in the `title` parameter of the
/// [Notification.Notification] constructor.
external String get title;
/// The **`dir`** read-only property of the [Notification] interface indicates
/// the text direction of the notification, as specified in the `dir` option
/// of the [Notification.Notification] constructor.
external NotificationDirection get dir;
/// The **`lang`** read-only property of the
/// [Notification] interface indicates the language used in the notification,
/// as specified in the `lang` option of the
/// [Notification.Notification] constructor.
///
/// The language itself is specified using a string representing a language
/// tag according to `5646, "Tags for Identifying Languages (also known as BCP
/// 47)"`.
/// See the Sitepoint
/// [ISO 2 letter language codes](https://www.sitepoint.com/iso-2-letter-language-codes/)
/// page for a simple reference.
external String get lang;
/// The **`body`** read-only property of the
/// [Notification] interface indicates the body string of the notification, as
/// specified in the `body` option of the
/// [Notification.Notification] constructor.
external String get body;
/// The **`tag`** read-only property of the
/// [Notification] interface signifies an identifying tag for the
/// notification,
/// as specified in the `tag` option of the
/// [Notification.Notification] constructor.
///
/// The idea of notification tags is that more than one notification can share
/// the same
/// tag, linking them together. One notification can then be programmatically
/// replaced with
/// another to avoid the users' screen being filled up with a huge number of
/// similar
/// notifications.
external String get tag;
/// The **`icon`** read-only property of the
/// [Notification] interface contains the URL of an icon to be displayed as
/// part of the notification, as specified in the `icon` option of the
/// [Notification.Notification] constructor.
external String get icon;
/// The **`badge`** read-only property of the [Notification] interface returns
/// a string containing the URL of an image to represent the notification when
/// there is not enough space to display the notification itself such as for
/// example, the Android Notification Bar. On Android devices, the badge
/// should accommodate devices up to 4x resolution, about 96 by 96 px, and the
/// image will be automatically masked.
external String get badge;
/// The **`silent`** read-only property of the
/// [Notification] interface specifies whether the notification should be
/// silent, i.e., no sounds or vibrations should be issued regardless of the
/// device
/// settings. This is controlled via the `silent` option of the
/// [Notification.Notification] constructor.
external bool? get silent;
/// The **`requireInteraction`** read-only property of the [Notification]
/// interface returns a boolean value indicating that a notification should
/// remain active until the user clicks or dismisses it, rather than closing
/// automatically.
///
/// > [!NOTE]
/// > This can be set when the notification is first created by setting the
/// > `requireInteraction` option to `true` in the options object of the
/// > [Notification.Notification] constructor.
external bool get requireInteraction;
/// The **`data`** read-only property of the
/// [Notification] interface returns a structured clone of the notification's
/// data, as specified in the `data` option of the
/// [Notification.Notification] constructor.
///
/// The notification's data can be any arbitrary data that you want associated
/// with the
/// notification.
external JSAny? get data;
}
extension type NotificationOptions._(JSObject _) implements JSObject {
external factory NotificationOptions({
NotificationDirection dir,
String lang,
String body,
String tag,
String image,
String icon,
String badge,
VibratePattern vibrate,
EpochTimeStamp timestamp,
bool renotify,
bool? silent,
bool requireInteraction,
JSAny? data,
JSArray<NotificationAction> actions,
});
external NotificationDirection get dir;
external set dir(NotificationDirection value);
external String get lang;
external set lang(String value);
external String get body;
external set body(String value);
external String get tag;
external set tag(String value);
external String get image;
external set image(String value);
external String get icon;
external set icon(String value);
external String get badge;
external set badge(String value);
external VibratePattern get vibrate;
external set vibrate(VibratePattern value);
external EpochTimeStamp get timestamp;
external set timestamp(EpochTimeStamp value);
external bool get renotify;
external set renotify(bool value);
external bool? get silent;
external set silent(bool? value);
external bool get requireInteraction;
external set requireInteraction(bool value);
external JSAny? get data;
external set data(JSAny? value);
external JSArray<NotificationAction> get actions;
external set actions(JSArray<NotificationAction> value);
}
extension type NotificationAction._(JSObject _) implements JSObject {
external factory NotificationAction({
required String action,
required String title,
String icon,
});
external String get action;
external set action(String value);
external String get title;
external set title(String value);
external String get icon;
external set icon(String value);
}
extension type GetNotificationOptions._(JSObject _) implements JSObject {
external factory GetNotificationOptions({String tag});
external String get tag;
external set tag(String value);
}
/// @AvailableInWorkers("service")
///
/// The **`NotificationEvent`** interface of the [Notifications API] represents
/// a notification event dispatched on the [ServiceWorkerGlobalScope] of a
/// [ServiceWorker].
///
/// This interface inherits from the [ExtendableEvent] interface.
///
/// > [!NOTE]
/// > Only persistent notification events, fired at the
/// > [ServiceWorkerGlobalScope] object, implement the `NotificationEvent`
/// > interface. Non-persistent notification events, fired at the [Notification]
/// > object, implement the `Event` interface.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/NotificationEvent).
extension type NotificationEvent._(JSObject _)
implements ExtendableEvent, JSObject {
external factory NotificationEvent(
String type,
NotificationEventInit eventInitDict,
);
/// @AvailableInWorkers("service")
///
/// The **`notification`** read-only property of the [NotificationEvent]
/// interface returns the instance of the [Notification] that was clicked to
/// fire the event. The [Notification] provides read-only access to many
/// properties that were set at the instantiation time of the Notification
/// such as `tag` and `data` attributes that allow you to store information
/// for deferred use in the `notificationclick` event.
external Notification get notification;
/// @AvailableInWorkers("service")
///
/// The **`action`** read-only property of the [NotificationEvent] interface
/// returns the string ID of the notification button the user clicked. This
/// value returns an empty string if the user clicked the notification
/// somewhere other than an action button, or the notification does not have a
/// button. The notification id is set during the creation of the Notification
/// via the actions array attribute and can't be modified unless the
/// notification is replaced.
external String get action;
}
extension type NotificationEventInit._(JSObject _)
implements ExtendableEventInit, JSObject {
external factory NotificationEventInit({
bool bubbles,
bool cancelable,
bool composed,
required Notification notification,
String action,
});
external Notification get notification;
external set notification(Notification value);
external String get action;
external set action(String value);
}