| // 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 'css_font_loading.dart'; |
| import 'css_typed_om.dart'; |
| import 'css_view_transitions.dart'; |
| import 'cssom.dart'; |
| import 'cssom_view.dart'; |
| import 'fullscreen.dart'; |
| import 'geometry.dart'; |
| import 'html.dart'; |
| import 'pointerlock.dart'; |
| import 'scroll_to_text_fragment.dart'; |
| import 'selection_api.dart'; |
| import 'svg.dart'; |
| import 'web_animations.dart'; |
| |
| typedef MutationCallback = JSFunction; |
| typedef EventListener = JSFunction; |
| typedef NodeFilter = JSFunction; |
| typedef XPathNSResolver = JSFunction; |
| typedef ShadowRootMode = String; |
| typedef SlotAssignmentMode = String; |
| |
| /// The **`Event`** interface represents an event which takes place on an |
| /// [`EventTarget`](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget). |
| /// |
| /// An event can be triggered by the user action e.g. clicking the mouse button |
| /// or tapping keyboard, or generated by APIs to represent the progress of an |
| /// asynchronous task. It can also be triggered programmatically, such as by |
| /// calling the |
| /// [`HTMLElement.click()`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click) |
| /// method of an element, or by defining the event, then sending it to a |
| /// specified target using |
| /// [`EventTarget.dispatchEvent()`](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent). |
| /// |
| /// There are many types of events, some of which use other interfaces based on |
| /// the main `Event` interface. `Event` itself contains the properties and |
| /// methods which are common to all events. |
| /// |
| /// Many DOM elements can be set up to accept (or "listen" for) these events, |
| /// and execute code in response to process (or "handle") them. Event-handlers |
| /// are usually connected (or "attached") to various |
| /// [HTML elements](https://developer.mozilla.org/en-US/docs/Web/HTML/Element) |
| /// (such as `<button>`, `<div>`, `<span>`, etc.) using |
| /// [`EventTarget.addEventListener()`](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener), |
| /// and this generally replaces using the old HTML |
| /// [event handler attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes). |
| /// Further, when properly added, such handlers can also be disconnected if |
| /// needed using |
| /// [`removeEventListener()`](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener). |
| /// |
| /// > [!NOTE] |
| /// > One element can have several such handlers, even for the exact same |
| /// > event—particularly if separate, independent code modules attach them, each |
| /// > for its own independent purposes. (For example, a webpage with an |
| /// > advertising-module and statistics-module both monitoring video-watching.) |
| /// |
| /// When there are many nested elements, each with its own handler(s), event |
| /// processing can become very complicated—especially where a parent element |
| /// receives the very same event as its child elements because "spatially" they |
| /// overlap so the event technically occurs in both, and the processing order of |
| /// such events depends on the |
| /// [Event bubbling](https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Scripting/Event_bubbling) |
| /// settings of each handler triggered. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/Event). |
| extension type Event._(JSObject _) implements JSObject { |
| external factory Event( |
| String type, [ |
| EventInit eventInitDict, |
| ]); |
| |
| static const int NONE = 0; |
| |
| static const int CAPTURING_PHASE = 1; |
| |
| static const int AT_TARGET = 2; |
| |
| static const int BUBBLING_PHASE = 3; |
| |
| /// The **`composedPath()`** method of the [Event] |
| /// interface returns the event's path which is an array of the objects on |
| /// which listeners |
| /// will be invoked. This does not include nodes in shadow trees if the shadow |
| /// root was |
| /// created with its [ShadowRoot.mode] closed. |
| external JSArray<EventTarget> composedPath(); |
| |
| /// The **`stopPropagation()`** method of the [Event] |
| /// interface prevents further propagation of the current event in the |
| /// capturing and |
| /// bubbling phases. It does not, however, prevent any default behaviors from |
| /// occurring; for |
| /// instance, clicks on links are still processed. If you want to stop those |
| /// behaviors, see |
| /// the [Event.preventDefault] method. It also does not |
| /// prevent propagation to other event-handlers of the current element. If you |
| /// want to stop those, |
| /// see [Event.stopImmediatePropagation]. |
| external void stopPropagation(); |
| |
| /// The **`stopImmediatePropagation()`** method of the |
| /// [Event] interface prevents other listeners of the same event from being |
| /// called. |
| /// |
| /// If several listeners are attached to the same element for the same event |
| /// type, they are called in the order in which they were added. If |
| /// `stopImmediatePropagation()` is invoked during one such call, no remaining |
| /// listeners will be called, either on that element or any other element. |
| external void stopImmediatePropagation(); |
| |
| /// The **`preventDefault()`** method of the [Event] interface tells the that |
| /// if the event does not get explicitly handled, its default action should |
| /// not be taken as it normally would be. |
| /// |
| /// The event continues to propagate as usual, |
| /// unless one of its event listeners calls |
| /// [Event.stopPropagation] |
| /// or [Event.stopImmediatePropagation], |
| /// either of which terminates propagation at once. |
| /// |
| /// As noted below, calling **`preventDefault()`** for a |
| /// non-cancelable event, such as one dispatched via |
| /// [EventTarget.dispatchEvent], without specifying |
| /// `cancelable: true` has no effect. |
| /// |
| /// If a passive listener calls `preventDefault()`, nothing will happen and a |
| /// console warning may be generated. |
| external void preventDefault(); |
| |
| /// The **`Event.initEvent()`** method is used to initialize the |
| /// value of an [event] created using [Document.createEvent]. |
| /// |
| /// Events initialized in this way must have been created with the |
| /// [Document.createEvent] method. |
| /// This method must be called to set the event |
| /// before it is dispatched, using [EventTarget.dispatchEvent]. |
| /// Once dispatched, it doesn't do anything anymore. |
| /// |
| /// > **Note:** _Do not use this method anymore as it is deprecated._ |
| /// > Instead use specific event constructors, like [Event.Event]. |
| /// > The page on |
| /// > [Creating and triggering events](https://developer.mozilla.org/en-US/docs/Web/Events/Creating_and_triggering_events) |
| /// > gives more information about the way to use these. |
| external void initEvent( |
| String type, [ |
| bool bubbles, |
| bool cancelable, |
| ]); |
| |
| /// The **`type`** read-only property of the [Event] |
| /// interface returns a string containing the event's type. It is set when the |
| /// event is |
| /// constructed and is the name commonly used to refer to the specific event, |
| /// such as |
| /// `click`, `load`, or `error`. |
| external String get type; |
| |
| /// The read-only **`target`** property of the |
| /// [Event] interface is a reference to the object onto which the event was |
| /// dispatched. It is different from [Event.currentTarget] when the event |
| /// handler is called during the bubbling or capturing phase of the event. |
| external EventTarget? get target; |
| |
| /// The deprecated **`Event.srcElement`** is an alias for the [Event.target] |
| /// property. Use [Event.target] instead. |
| external EventTarget? get srcElement; |
| |
| /// The **`currentTarget`** read-only property of the [Event] interface |
| /// identifies the element to which the event handler has been attached. |
| /// |
| /// This will not always be the same as the element on which the event was |
| /// fired, because the event may have fired on a descendant of the element |
| /// with the handler, and then |
| /// [bubbled](https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Scripting/Event_bubbling) |
| /// up to the element with the handler. The element on which the event was |
| /// fired is given by [Event.target]. |
| /// |
| /// Note that the value of `currentTarget` is only available in a handler for |
| /// the event. Outside an event handler it will be `null`. This means that, |
| /// for example, if you take a reference to the `Event` object inside an event |
| /// handler and then access its `currentTarget` property outside the event |
| /// handler, its value will be `null`. |
| external EventTarget? get currentTarget; |
| |
| /// The **`eventPhase`** read-only property of the |
| /// [Event] interface indicates which phase of the event flow is currently |
| /// being evaluated. |
| external int get eventPhase; |
| |
| /// The **`cancelBubble`** property of the [Event] |
| /// interface is deprecated. Use [Event.stopPropagation] instead. |
| /// Setting its value to `true` before returning from an event handler |
| /// prevents propagation |
| /// of the event. In later implementations, setting this to `false` does |
| /// nothing. |
| /// See [Browser compatibility](#browser_compatibility) for details. |
| external bool get cancelBubble; |
| external set cancelBubble(bool value); |
| |
| /// The **`bubbles`** read-only property of the [Event] interface indicates |
| /// whether the event bubbles up through the DOM tree or not. |
| /// |
| /// > [!NOTE] |
| /// > See |
| /// > [Event bubbling](https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Scripting/Event_bubbling) |
| /// > for more information on bubbling. |
| external bool get bubbles; |
| |
| /// The **`cancelable`** read-only property of the [Event] interface indicates |
| /// whether the event |
| /// can be canceled, and therefore prevented as if the event never happened. |
| /// |
| /// If the event is _not_ cancelable, then its `cancelable` property will be |
| /// `false` and the event listener cannot stop the event from occurring. |
| /// |
| /// Most browser-native events that can be canceled are the ones that result |
| /// from the user |
| /// interacting with the page. Canceling the [Element.click_event], |
| /// [Element.wheel_event], or |
| /// [Window.beforeunload_event] events would prevent the user |
| /// from clicking on something, scrolling the page with the mouse wheel, or |
| /// navigating away from the page, respectively. |
| /// |
| /// [Synthetic events](https://developer.mozilla.org/en-US/docs/Web/API/Event/Event) |
| /// created by other JavaScript |
| /// code define if they can be canceled when they are created. |
| /// |
| /// To cancel an event, call the [event.preventDefault] |
| /// method on the event. This keeps the implementation from executing the |
| /// default action |
| /// that is associated with the event. |
| /// |
| /// Event listeners that handle multiple kinds of events may want to check |
| /// `cancelable` before invoking their [event.preventDefault] methods. |
| external bool get cancelable; |
| |
| /// The [Event] property |
| /// **`returnValue`** indicates whether the default action for |
| /// this event has been prevented or not. |
| /// |
| /// It is set to `true` by |
| /// default, allowing the default action to occur. Setting this property to |
| /// `false` prevents the default action. |
| /// |
| /// > [!NOTE] |
| /// > While `returnValue` has been adopted into the DOM |
| /// > standard, it is present primarily to support existing code. Use |
| /// > [Event.preventDefault], and |
| /// > [Event.defaultPrevented] instead of this historical |
| /// > property. |
| external bool get returnValue; |
| external set returnValue(bool value); |
| |
| /// The **`defaultPrevented`** read-only property of the [Event] interface |
| /// returns a boolean value indicating whether or not the call to |
| /// [Event.preventDefault] canceled the event. |
| external bool get defaultPrevented; |
| |
| /// The read-only **`composed`** property of the |
| /// [Event] interface returns a boolean value which indicates whether |
| /// or not the event will propagate across the shadow DOM boundary into the |
| /// standard DOM. |
| /// |
| /// All UA-dispatched UI events are composed |
| /// (click/touch/mouseover/copy/paste, etc.). Most |
| /// other types of events are not composed, and so will return `false`. For |
| /// example, this includes synthetic events that are created without their |
| /// `composed` option set to `true`. |
| /// |
| /// Propagation only occurs if the [Event.bubbles] property is also |
| /// `true`. However, capturing only composed events are also handled at host |
| /// as |
| /// if they were in `AT_TARGET` phase. You can determine the path the event |
| /// will |
| /// follow through the shadow root to the DOM root by calling |
| /// [Event.composedPath]. |
| external bool get composed; |
| |
| /// The **`isTrusted`** read-only property of the |
| /// [Event] interface is a boolean value that is `true` |
| /// when the event was generated by the user agent (including via user actions |
| /// and programmatic methods such as [HTMLElement.focus]), |
| /// and `false` when the event was dispatched via |
| /// [EventTarget.dispatchEvent]. |
| /// The only exception is the `click` event, which initializes the `isTrusted` |
| /// property to `false` in user agents. |
| external bool get isTrusted; |
| |
| /// The **`timeStamp`** read-only property of the [Event] interface returns |
| /// the time (in milliseconds) at which the event was created. |
| external double get timeStamp; |
| } |
| extension type EventInit._(JSObject _) implements JSObject { |
| external factory EventInit({ |
| bool bubbles, |
| bool cancelable, |
| bool composed, |
| }); |
| |
| external bool get bubbles; |
| external set bubbles(bool value); |
| external bool get cancelable; |
| external set cancelable(bool value); |
| external bool get composed; |
| external set composed(bool value); |
| } |
| |
| /// The **`CustomEvent`** interface represents events initialized by an |
| /// application for any purpose. |
| /// |
| /// > [!NOTE] |
| /// > If used to attempt to communicate between a web extension content script |
| /// > and a web page script, a non-string `detail` property throws with |
| /// > "Permission denied to access property" in Firefox. To avoid this issue |
| /// > clone the object. See |
| /// > [Share objects with page scripts](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Sharing_objects_with_page_scripts) |
| /// > for more information. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent). |
| extension type CustomEvent._(JSObject _) implements Event, JSObject { |
| external factory CustomEvent( |
| String type, [ |
| CustomEventInit eventInitDict, |
| ]); |
| |
| /// The **`CustomEvent.initCustomEvent()`** method initializes a [CustomEvent] |
| /// object. |
| /// If the event has already been dispatched, this method does nothing. |
| /// |
| /// Events initialized in this way must have been created with the |
| /// [Document.createEvent] method. |
| /// This method must be called to set the event before it is dispatched using |
| /// [EventTarget.dispatchEvent]. |
| /// Once dispatched, it doesn't do anything anymore. |
| /// |
| /// > **Note:** **Do not use this method anymore, as it is deprecated.** |
| /// > |
| /// > Rather than using the feature, instead use specific event constructors, |
| /// > like [CustomEvent.CustomEvent]. |
| /// > The page on |
| /// > [Creating and triggering events](https://developer.mozilla.org/en-US/docs/Web/Events/Creating_and_triggering_events) |
| /// > gives more information about the way to use those. |
| external void initCustomEvent( |
| String type, [ |
| bool bubbles, |
| bool cancelable, |
| JSAny? detail, |
| ]); |
| |
| /// The read-only **`detail`** property of the [CustomEvent] interface returns |
| /// any data passed when initializing the event. |
| external JSAny? get detail; |
| } |
| extension type CustomEventInit._(JSObject _) implements EventInit, JSObject { |
| external factory CustomEventInit({ |
| bool bubbles, |
| bool cancelable, |
| bool composed, |
| JSAny? detail, |
| }); |
| |
| external JSAny? get detail; |
| external set detail(JSAny? value); |
| } |
| |
| /// The **`EventTarget`** interface is implemented by objects that can receive |
| /// events and may have listeners for them. |
| /// In other words, any target of events implements the three methods associated |
| /// with this interface. |
| /// |
| /// [Element], and its children, as well as [Document] and [Window], are the |
| /// most common event targets, |
| /// but other objects can be event targets, too. |
| /// For example [IDBRequest], [AudioNode], and [AudioContext] are also event |
| /// targets. |
| /// |
| /// Many event targets (including elements, documents, and windows) also support |
| /// setting |
| /// [event handlers](https://developer.mozilla.org/en-US/docs/Web/Events/Event_handlers) |
| /// via `onevent` properties and attributes. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget). |
| extension type EventTarget._(JSObject _) implements JSObject { |
| external factory EventTarget(); |
| |
| /// The **`addEventListener()`** method of the [EventTarget] interface |
| /// sets up a function that will be called whenever the specified event is |
| /// delivered to the target. |
| /// |
| /// Common targets are [Element], or its children, [Document], and [Window], |
| /// but the target may be any object that supports events (such as |
| /// [IDBRequest]). |
| /// |
| /// > [!NOTE] |
| /// > The `addEventListener()` method is the _recommended_ way to register an |
| /// > event listener. The benefits are as follows: |
| /// > |
| /// > - It allows adding more than one handler for an event. This is |
| /// > particularly |
| /// > useful for libraries, JavaScript modules, or any other kind of |
| /// > code that needs to work well with other libraries or extensions. |
| /// > - In contrast to using an `onXYZ` property, it gives you finer-grained |
| /// > control of the phase when the listener is activated (capturing vs. |
| /// > bubbling). |
| /// > - It works on any event target, not just HTML or SVG elements. |
| /// |
| /// The method `addEventListener()` works by adding a function, or an object |
| /// that implements a `handleEvent()` function, to the list of event listeners |
| /// for the specified event type |
| /// on the [EventTarget] on which it's called. If the function or object is |
| /// already in the list of event listeners for this target, the function or |
| /// object is not added a second time. |
| /// |
| /// > [!NOTE] |
| /// > If a particular anonymous function is in the list of event listeners |
| /// > registered for a certain target, and then later in the code, an |
| /// > identical anonymous function is given in an `addEventListener` call, the |
| /// > second function will _also_ be added to the list of event listeners for |
| /// > that target. |
| /// > |
| /// > Indeed, anonymous functions are not identical even if defined using |
| /// > the _same_ unchanging source-code called repeatedly, **even if in a |
| /// > loop**. |
| /// > |
| /// > Repeatedly defining the same unnamed function in such cases can be |
| /// > problematic. (See [Memory issues](#memory_issues), below.) |
| /// |
| /// If an event listener is added to an [EventTarget] from inside another |
| /// listener — |
| /// that is, during the processing of the event — |
| /// that event will not trigger the new listener. |
| /// However, the new listener may be triggered during a later stage of event |
| /// flow, |
| /// such as during the bubbling phase. |
| external void addEventListener( |
| String type, |
| EventListener? callback, [ |
| JSAny options, |
| ]); |
| |
| /// The **`removeEventListener()`** method of the [EventTarget] interface |
| /// removes an event listener previously registered with |
| /// [EventTarget.addEventListener] from the target. |
| /// The event listener to be removed is identified using a combination of the |
| /// event type, |
| /// the event listener function itself, and various optional options that may |
| /// affect the matching process; |
| /// see |
| /// [Matching event listeners for removal](#matching_event_listeners_for_removal). |
| /// |
| /// Calling `removeEventListener()` with arguments that do not identify any |
| /// currently registered |
| /// [event listener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#the_event_listener_callback) |
| /// on the `EventTarget` has no |
| /// effect. |
| /// |
| /// If an |
| /// [event listener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#the_event_listener_callback) |
| /// is removed from an [EventTarget] while another listener of the target is |
| /// processing an event, it will not be triggered by the event. However, it |
| /// can be reattached. |
| /// |
| /// > [!WARNING] |
| /// > If a listener is registered twice, one with the _capture_ flag set and |
| /// > one without, you must remove each one separately. Removal of a capturing |
| /// > listener does not affect a non-capturing version of the same listener, |
| /// > and vice versa. |
| /// |
| /// Event listeners can also be removed by passing an [AbortSignal] to an |
| /// [EventTarget.addEventListener] and then later calling |
| /// [AbortController.abort] on the controller owning the signal. |
| external void removeEventListener( |
| String type, |
| EventListener? callback, [ |
| JSAny options, |
| ]); |
| |
| /// The **`dispatchEvent()`** method of the [EventTarget] sends an [Event] to |
| /// the object, (synchronously) invoking the affected |
| /// event listeners in the appropriate order. The normal event processing |
| /// rules (including the capturing and optional bubbling phase) also apply to |
| /// events |
| /// dispatched manually with `dispatchEvent()`. |
| /// |
| /// Calling `dispatchEvent()` is the last step to _firing an event_. The event |
| /// should have already been created and initialized using an [Event.Event] |
| /// constructor. |
| /// |
| /// > [!NOTE] |
| /// > When calling this method, the [Event.target] property is initialized to |
| /// > the current `EventTarget`. |
| /// |
| /// Unlike "native" events, which are fired by the browser and invoke event |
| /// handlers |
| /// asynchronously via the |
| /// [event loop](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Event_loop), |
| /// `dispatchEvent()` invokes event handlers _synchronously_. All applicable |
| /// event |
| /// handlers are called and return before `dispatchEvent()` returns. |
| external bool dispatchEvent(Event event); |
| } |
| extension type EventListenerOptions._(JSObject _) implements JSObject { |
| external factory EventListenerOptions({bool capture}); |
| |
| external bool get capture; |
| external set capture(bool value); |
| } |
| extension type AddEventListenerOptions._(JSObject _) |
| implements EventListenerOptions, JSObject { |
| external factory AddEventListenerOptions({ |
| bool capture, |
| bool passive, |
| bool once, |
| AbortSignal signal, |
| }); |
| |
| external bool get passive; |
| external set passive(bool value); |
| external bool get once; |
| external set once(bool value); |
| external AbortSignal get signal; |
| external set signal(AbortSignal value); |
| } |
| |
| /// The **`AbortController`** interface represents a controller object that |
| /// allows you to abort one or more Web requests as and when desired. |
| /// |
| /// You can create a new `AbortController` object using the |
| /// [AbortController.AbortController] constructor. Communicating with an |
| /// asynchronous operation is done using an [AbortSignal] object. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/AbortController). |
| extension type AbortController._(JSObject _) implements JSObject { |
| external factory AbortController(); |
| |
| /// The **`abort()`** method of the [AbortController] interface aborts an |
| /// asynchronous operation before it has completed. |
| /// This is able to abort |
| /// [fetch requests](https://developer.mozilla.org/en-US/docs/Web/API/Window/fetch), |
| /// the consumption of any response bodies, or streams. |
| external void abort([JSAny? reason]); |
| |
| /// The **`signal`** read-only property of the [AbortController] interface |
| /// returns an [AbortSignal] object instance, which can be used to communicate |
| /// with/abort an asynchronous operation as desired. |
| external AbortSignal get signal; |
| } |
| |
| /// The **`AbortSignal`** interface represents a signal object that allows you |
| /// to communicate with an asynchronous operation (such as a fetch request) and |
| /// abort it if required via an [AbortController] object. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal). |
| extension type AbortSignal._(JSObject _) implements EventTarget, JSObject { |
| /// The **`AbortSignal.abort()`** static method returns an [AbortSignal] that |
| /// is already set as aborted (and which does not trigger an |
| /// [AbortSignal.abort_event] event). |
| /// |
| /// This is shorthand for the following code: |
| /// |
| /// ```js |
| /// const controller = new AbortController(); |
| /// controller.abort(); |
| /// return controller.signal; |
| /// ``` |
| /// |
| /// This could, for example, be passed to a fetch method in order to run its |
| /// abort logic (i.e. it may be that code is organized such that the abort |
| /// logic should be run even if the intended fetch operation has not been |
| /// started). |
| /// |
| /// > [!NOTE] |
| /// > The method is similar in purpose to `Promise.reject`. |
| external static AbortSignal abort([JSAny? reason]); |
| |
| /// The **`AbortSignal.timeout()`** static method returns an [AbortSignal] |
| /// that will automatically abort after a specified time. |
| /// |
| /// The signal aborts with a `TimeoutError` [DOMException] on timeout. |
| /// |
| /// The timeout is based on active rather than elapsed time, and will |
| /// effectively be paused if the code is running in a suspended worker, or |
| /// while the document is in a back-forward cache |
| /// ("[bfcache](https://web.dev/articles/bfcache)"). |
| /// |
| /// To combine multiple signals, you can use [AbortSignal.any_static], for |
| /// example, to directly abort a download using either a timeout signal or by |
| /// calling [AbortController.abort]. |
| external static AbortSignal timeout(int milliseconds); |
| |
| /// The **`AbortSignal.any()`** static method takes an iterable of abort |
| /// signals and returns an [AbortSignal]. The returned abort signal is aborted |
| /// when any of the input iterable abort signals are aborted. The |
| /// [AbortSignal.reason] will be set to the reason of the first signal that is |
| /// aborted. If any of the given abort signals are already aborted then so |
| /// will be the returned [AbortSignal]. |
| external static AbortSignal any(JSArray<AbortSignal> signals); |
| |
| /// The **`throwIfAborted()`** method throws the signal's abort |
| /// [AbortSignal.reason] if the signal has been aborted; otherwise it does |
| /// nothing. |
| /// |
| /// An API that needs to support aborting can accept an [AbortSignal] object |
| /// and use `throwIfAborted()` to test and throw when the |
| /// [`abort`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/abort_event) |
| /// event is signalled. |
| /// |
| /// This method can also be used to abort operations at particular points in |
| /// code, rather than passing to functions that take a signal. |
| external void throwIfAborted(); |
| |
| /// The **`aborted`** read-only property returns a value that indicates |
| /// whether the asynchronous operations the signal is communicating with are |
| /// aborted (`true`) or not (`false`). |
| external bool get aborted; |
| |
| /// The **`reason`** read-only property returns a JavaScript value that |
| /// indicates the abort reason. |
| /// |
| /// The property is `undefined` when the signal has not been aborted. |
| /// It can be set to a specific value when the signal is aborted, using |
| /// [AbortController.abort] or [AbortSignal.abort_static]. |
| /// If not explicitly set in those methods, it defaults to "AbortError" |
| /// [DOMException]. |
| external JSAny? get reason; |
| external EventHandler get onabort; |
| external set onabort(EventHandler value); |
| } |
| |
| /// **`NodeList`** objects are collections of |
| /// [nodes](https://developer.mozilla.org/en-US/docs/Web/API/Node), usually |
| /// returned by properties such as [Node.childNodes] and methods such as |
| /// [document.querySelectorAll]. |
| /// |
| /// This interface was an |
| /// [attempt to create an unmodifiable list](https://stackoverflow.com/questions/74630989/why-use-domstringlist-rather-than-an-array/74641156#74641156) |
| /// and only continues to be supported to not break code that's already using |
| /// it. Modern APIs represent list structures using types based on JavaScript |
| /// [arrays](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array), |
| /// thus making many array methods available, and at the same time imposing |
| /// additional semantics on their usage (such as making their items read-only). |
| /// |
| /// These historical reasons do not mean that you as a developer should avoid |
| /// `NodeList`. You don't create `NodeList` objects yourself, but you get them |
| /// from APIs such as [Document.querySelectorAll], and these APIs are not |
| /// deprecated. However, be careful of the semantic differences from a real |
| /// array. |
| /// |
| /// Although `NodeList` is not an `Array`, it is possible to iterate over it |
| /// with `forEach()`. It can also be converted to a real `Array` using |
| /// `Array.from()`. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/NodeList). |
| extension type NodeList._(JSObject _) implements JSObject { |
| /// Returns a node from a |
| /// [`NodeList`](https://developer.mozilla.org/en-US/docs/Web/API/NodeList) by |
| /// index. This method |
| /// doesn't throw exceptions as long as you provide arguments. A value of |
| /// `null` |
| /// is returned if the index is out of range, and a `TypeError` is thrown if |
| /// no |
| /// argument is provided. |
| /// |
| /// In JavaScript, instead of calling `nodeList.item(index)`, you can also |
| /// access the `index` directly, like `nodeList[index]`. |
| external Node? item(int index); |
| |
| /// The **`NodeList.length`** property returns the number of items |
| /// in a [NodeList]. |
| external int get length; |
| } |
| |
| /// The **`HTMLCollection`** interface represents a generic collection |
| /// (array-like object similar to `arguments`) of elements (in document order) |
| /// and offers methods and properties for selecting from the list. |
| /// |
| /// An `HTMLCollection` in the HTML DOM is live; it is automatically updated |
| /// when the underlying document is changed. For this reason it is a good idea |
| /// to make a copy (e.g., using `Array.from`) to iterate over if adding, moving, |
| /// or removing nodes. |
| /// |
| /// This interface is called `HTMLCollection` for historical reasons, because |
| /// before the modern DOM, collections implementing this interface could only |
| /// have HTML elements as their items. |
| /// |
| /// This interface was an |
| /// [attempt to create an unmodifiable list](https://stackoverflow.com/questions/74630989/why-use-domstringlist-rather-than-an-array/74641156#74641156) |
| /// and only continues to be supported to not break code that's already using |
| /// it. Modern APIs represent list structures using types based on JavaScript |
| /// [arrays](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array), |
| /// thus making many array methods available, and at the same time imposing |
| /// additional semantics on their usage (such as making their items read-only). |
| /// |
| /// These historical reasons do not mean that you as a developer should avoid |
| /// `HTMLCollection`. You don't create `HTMLCollection` objects yourself, but |
| /// you get them from APIs such as [Document.getElementsByClassName], and these |
| /// APIs are not deprecated. However, be careful of the semantic differences |
| /// from a real array. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection). |
| extension type HTMLCollection._(JSObject _) implements JSObject { |
| /// The [HTMLCollection] method `item()` |
| /// returns the element located at the specified offset into the collection. |
| /// |
| /// > [!NOTE] |
| /// > Because the contents of an `HTMLCollection` are |
| /// > live, changes to the underlying DOM can and will cause the position of |
| /// > individual |
| /// > elements in the collection to change, so the index value will not |
| /// > necessarily remain |
| /// > constant for a given element. |
| external Element? item(int index); |
| |
| /// The **`namedItem()`** method of the [HTMLCollection] interface returns |
| /// the first [Element] in the collection whose `id` or `name` attribute match |
| /// the specified name, or `null` if no element matches. |
| /// |
| /// In JavaScript, instead of calling `collection.namedItem("value")`, you can |
| /// also directly access the name on the collection, like |
| /// `collection["value"]`, unless the name collides with one of the existing |
| /// `HTMLCollection` properties. |
| external Element? namedItem(String name); |
| |
| /// The **`HTMLCollection.length`** property returns the number of |
| /// items in a [HTMLCollection]. |
| external int get length; |
| } |
| |
| /// The **`MutationObserver`** interface provides the ability to watch for |
| /// changes being made to the |
| /// [DOM](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) |
| /// tree. It is designed as a replacement for the older |
| /// [Mutation Events](https://developer.mozilla.org/en-US/docs/Web/API/MutationEvent) |
| /// feature, which was part of the DOM3 Events specification. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver). |
| extension type MutationObserver._(JSObject _) implements JSObject { |
| external factory MutationObserver(MutationCallback callback); |
| |
| /// The [MutationObserver] method **`observe()`** configures the |
| /// `MutationObserver` |
| /// callback to begin receiving notifications of changes to the DOM that match |
| /// the given options. |
| /// |
| /// Depending on the configuration, the observer may watch a single [Node] in |
| /// the DOM tree, or that node and some or all of its descendant nodes. The |
| /// same node can be observed by multiple observers, and the same |
| /// `MutationObserver` can watch for changes to different parts of the DOM |
| /// tree and/or different types of changes by calling `observe()` multiple |
| /// times on the same |
| /// `MutationObserver`. |
| /// |
| /// To stop the `MutationObserver` (so that none of its callbacks will be |
| /// triggered any longer), call [MutationObserver.disconnect]. |
| external void observe( |
| Node target, [ |
| MutationObserverInit options, |
| ]); |
| |
| /// The [MutationObserver] method |
| /// **`disconnect()`** tells the observer to stop watching for |
| /// mutations. |
| /// |
| /// The observer can be reused by calling its |
| /// [MutationObserver.observe] method again. |
| external void disconnect(); |
| |
| /// The [MutationObserver] method |
| /// **`takeRecords()`** returns a list of all matching DOM changes |
| /// that have been detected but not yet processed by the observer's callback |
| /// function, |
| /// leaving the mutation queue empty. |
| /// |
| /// The most common use case for this is to |
| /// immediately fetch all pending mutation records immediately prior to |
| /// disconnecting the |
| /// observer, so that any pending mutations can be processed when shutting |
| /// down the |
| /// observer. |
| external JSArray<MutationRecord> takeRecords(); |
| } |
| extension type MutationObserverInit._(JSObject _) implements JSObject { |
| external factory MutationObserverInit({ |
| bool childList, |
| bool attributes, |
| bool characterData, |
| bool subtree, |
| bool attributeOldValue, |
| bool characterDataOldValue, |
| JSArray<JSString> attributeFilter, |
| }); |
| |
| external bool get childList; |
| external set childList(bool value); |
| external bool get attributes; |
| external set attributes(bool value); |
| external bool get characterData; |
| external set characterData(bool value); |
| external bool get subtree; |
| external set subtree(bool value); |
| external bool get attributeOldValue; |
| external set attributeOldValue(bool value); |
| external bool get characterDataOldValue; |
| external set characterDataOldValue(bool value); |
| external JSArray<JSString> get attributeFilter; |
| external set attributeFilter(JSArray<JSString> value); |
| } |
| |
| /// The **`MutationRecord`** is a read-only interface that represents an |
| /// individual DOM mutation observed by a [MutationObserver]. It is the object |
| /// inside the array passed to the callback of a [MutationObserver]. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/MutationRecord). |
| extension type MutationRecord._(JSObject _) implements JSObject { |
| /// The [MutationRecord] read-only property **`type`** is the type of the |
| /// [MutationRecord] observed by a [MutationObserver]. |
| external String get type; |
| |
| /// The [MutationRecord] read-only property **`target`** is the target (i.e. |
| /// the mutated/changed node) of a mutation observed with a |
| /// [MutationObserver]. |
| external Node get target; |
| |
| /// The [MutationRecord] read-only property **`addedNodes`** is a [NodeList] |
| /// of nodes added to a target node by a mutation observed with a |
| /// [MutationObserver]. |
| external NodeList get addedNodes; |
| |
| /// The [MutationRecord] read-only property **`removedNodes`** is a [NodeList] |
| /// of nodes removed from a target node by a mutation observed with a |
| /// [MutationObserver]. |
| external NodeList get removedNodes; |
| |
| /// The [MutationRecord] read-only property **`previousSibling`** is the |
| /// previous sibling of an added or removed child node of the |
| /// [`target`](https://developer.mozilla.org/en-US/docs/Web/API/MutationRecord/target) |
| /// of a [MutationObserver]. |
| external Node? get previousSibling; |
| |
| /// The [MutationRecord] read-only property **`nextSibling`** is the next |
| /// sibling of an added or removed child node of the |
| /// [`target`](https://developer.mozilla.org/en-US/docs/Web/API/MutationRecord/target) |
| /// of a [MutationObserver]. |
| external Node? get nextSibling; |
| |
| /// The [MutationRecord] read-only property **`attributeName`** contains the |
| /// name of a changed attribute belonging to a node that is observed by a |
| /// [MutationObserver]. |
| external String? get attributeName; |
| |
| /// The [MutationRecord] read-only property **`attributeNamespace`** is the |
| /// namespace of the mutated attribute in the [MutationRecord] observed by a |
| /// [MutationObserver]. |
| external String? get attributeNamespace; |
| |
| /// The [MutationRecord] read-only property **`oldValue`** contains the |
| /// character data or attribute value of an observed node before it was |
| /// changed. |
| external String? get oldValue; |
| } |
| |
| /// The **`Node`** interface is an abstract base |
| /// class upon which many other DOM API objects are based, thus letting those |
| /// object types |
| /// to be used similarly and often interchangeably. As an abstract class, there |
| /// is |
| /// no such thing as a plain `Node` object. All objects that implement |
| /// `Node` functionality are based on one of its subclasses. Most notable are |
| /// [Document], [Element], and [DocumentFragment]. |
| /// |
| /// In addition, every kind of DOM node is represented by an interface based on |
| /// `Node`. These include [Attr], [CharacterData] |
| /// (which [Text], [Comment], [CDATASection] and |
| /// [ProcessingInstruction] are all based on), and [DocumentType]. |
| /// |
| /// In some cases, a particular feature of the base `Node` interface may not |
| /// apply to one of its child interfaces; in that case, the inheriting node may |
| /// return `null` or throw an exception, depending on circumstances. For |
| /// example, |
| /// attempting to add children to a node type that cannot have children will |
| /// throw an |
| /// exception. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/Node). |
| extension type Node._(JSObject _) implements EventTarget, JSObject { |
| static const int ELEMENT_NODE = 1; |
| |
| static const int ATTRIBUTE_NODE = 2; |
| |
| static const int TEXT_NODE = 3; |
| |
| static const int CDATA_SECTION_NODE = 4; |
| |
| static const int ENTITY_REFERENCE_NODE = 5; |
| |
| static const int ENTITY_NODE = 6; |
| |
| static const int PROCESSING_INSTRUCTION_NODE = 7; |
| |
| static const int COMMENT_NODE = 8; |
| |
| static const int DOCUMENT_NODE = 9; |
| |
| static const int DOCUMENT_TYPE_NODE = 10; |
| |
| static const int DOCUMENT_FRAGMENT_NODE = 11; |
| |
| static const int NOTATION_NODE = 12; |
| |
| static const int DOCUMENT_POSITION_DISCONNECTED = 1; |
| |
| static const int DOCUMENT_POSITION_PRECEDING = 2; |
| |
| static const int DOCUMENT_POSITION_FOLLOWING = 4; |
| |
| static const int DOCUMENT_POSITION_CONTAINS = 8; |
| |
| static const int DOCUMENT_POSITION_CONTAINED_BY = 16; |
| |
| static const int DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 32; |
| |
| /// The **`getRootNode()`** method of the [Node] interface |
| /// returns the context object's root, |
| /// which optionally includes the shadow root if it is available. |
| external Node getRootNode([GetRootNodeOptions options]); |
| |
| /// The **`hasChildNodes()`** method of the [Node] interface |
| /// returns a boolean value indicating |
| /// whether the given [Node] has |
| /// [child nodes](https://developer.mozilla.org/en-US/docs/Web/API/Node/childNodes) |
| /// or not. |
| external bool hasChildNodes(); |
| |
| /// The **`normalize()`** method of the [Node] interface puts the specified |
| /// node |
| /// and all of its sub-tree into a _normalized_ form. |
| /// In a normalized sub-tree, no text nodes in the sub-tree are empty and |
| /// there are no adjacent text nodes. |
| external void normalize(); |
| |
| /// The **`cloneNode()`** method of the [Node] interface |
| /// returns a duplicate of the node on which this method was called. |
| /// Its parameter controls if the subtree contained in a node is also cloned |
| /// or not. |
| /// |
| /// Cloning a node copies all of its attributes and their values, |
| /// including intrinsic (inline) listeners. It does _not_ copy event listeners |
| /// added |
| /// using |
| /// [`addEventListener()`](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener) |
| /// or |
| /// those assigned to element properties (e.g., `node.onclick = |
| /// someFunction`). |
| /// Additionally, for a `canvas` element, the painted image is not copied. |
| /// |
| /// > **Warning:** `cloneNode()` may lead to duplicate element IDs in a |
| /// > document! |
| /// > |
| /// > If the original node has an `id` attribute, and the clone |
| /// > will be placed in the same document, then you should modify the clone's |
| /// > ID to be |
| /// > unique. |
| /// > |
| /// > Also, `name` attributes may need to be modified, |
| /// > depending on whether duplicate names are expected. |
| /// |
| /// To clone a node to insert into a _different_ document, use |
| /// [Document.importNode] instead. |
| external Node cloneNode([bool subtree]); |
| |
| /// The **`isEqualNode()`** method of the [Node] interface tests whether two |
| /// nodes are equal. |
| /// Two nodes are equal when they have the same type, defining characteristics |
| /// (for |
| /// elements, this would be their ID, number of children, and so forth), its |
| /// attributes |
| /// match, and so on. The specific set of data points that must match varies |
| /// depending on |
| /// the types of the nodes. |
| external bool isEqualNode(Node? otherNode); |
| |
| /// The **`isSameNode()`** method of the [Node] interface |
| /// is a legacy alias the [for the `===` strict equality |
| /// operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Strict_equality). |
| /// That is, it tests whether two nodes are the same |
| /// (in other words, whether they reference the same object). |
| /// |
| /// > [!NOTE] |
| /// > There is no need to use `isSameNode()`; instead use the `===` strict |
| /// > equality operator. |
| external bool isSameNode(Node? otherNode); |
| |
| /// The **`compareDocumentPosition()`** method of the [Node] interface |
| /// reports the position of its argument node relative to the node on which it |
| /// is called. |
| external int compareDocumentPosition(Node other); |
| |
| /// The **`contains()`** method of the [Node] interface |
| /// returns a boolean value indicating |
| /// whether a node is a descendant of a given node, that is the node itself, |
| /// one of its direct children ([Node.childNodes]), |
| /// one of the children's direct children, and so on. |
| /// |
| /// > [!NOTE] |
| /// > A node is _contained_ inside itself. |
| external bool contains(Node? other); |
| |
| /// The **`lookupPrefix()`** method of the [Node] interface |
| /// returns a string containing the prefix for a given namespace URI, if |
| /// present, |
| /// and `null` if not. |
| /// When multiple prefixes are possible, the first prefix is returned. |
| external String? lookupPrefix(String? namespace); |
| |
| /// The **`lookupNamespaceURI()`** method of the [Node] interface |
| /// takes a prefix as parameter and returns the namespace URI associated with |
| /// it on the given node if found (and |
| /// `null` if not). This method's existence allows `Node` objects to be passed |
| /// as a namespace resolver to [XPathEvaluator.createExpression] and |
| /// [XPathEvaluator.evaluate]. |
| external String? lookupNamespaceURI(String? prefix); |
| |
| /// The **`isDefaultNamespace()`** method of the [Node] interface accepts a |
| /// namespace URI as an argument. |
| /// It returns a boolean value that is `true` if the namespace is the default |
| /// namespace on the given node and `false` if not. |
| /// |
| /// > [!NOTE] |
| /// > The default namespace of an HTML element is always `""`. For a SVG |
| /// > element, it is set by the `xmlns` attribute. |
| external bool isDefaultNamespace(String? namespace); |
| |
| /// The **`insertBefore()`** method of the [Node] interface |
| /// inserts a node before a _reference node_ as a child of a specified _parent |
| /// node_. |
| /// |
| /// If the given node already exists in the document, |
| /// `insertBefore()` moves it from its current position to the new position. |
| /// (That is, it will automatically be removed from its existing parent |
| /// before appending it to the specified new parent.) |
| /// |
| /// This means that a node cannot be in two locations of the document |
| /// simultaneously. |
| /// |
| /// > [!NOTE] |
| /// > The [Node.cloneNode] can be used to make a copy |
| /// > of the node before appending it under the new parent. Note that the |
| /// > copies made with |
| /// > `cloneNode()` will not be automatically kept in sync. |
| /// |
| /// If the given child is a [DocumentFragment], the entire contents of the |
| /// `DocumentFragment` are moved into the child list of the specified parent |
| /// node. |
| external Node insertBefore( |
| Node node, |
| Node? child, |
| ); |
| |
| /// The **`appendChild()`** method of the [Node] interface adds a node to the |
| /// end of the list of children of a specified parent node. |
| /// |
| /// > [!NOTE] |
| /// > If the given child is a reference to an existing node in the document, |
| /// > `appendChild()` moves it from its current position to the new position. |
| /// |
| /// If the given child is a [DocumentFragment], the entire contents of the |
| /// [DocumentFragment] are moved into the child list of the specified parent |
| /// node. |
| /// |
| /// `appendChild()` returns the newly appended node, or if the child is a |
| /// [DocumentFragment], the emptied fragment. |
| /// |
| /// > [!NOTE] |
| /// > Unlike this method, the [Element.append] method supports multiple |
| /// > arguments and appending strings. You can prefer using it if your node is |
| /// > an element. |
| external Node appendChild(Node node); |
| |
| /// The **`replaceChild()`** method of the [Node] interface replaces a child |
| /// node within the given (parent) node. |
| external Node replaceChild( |
| Node node, |
| Node child, |
| ); |
| |
| /// The **`removeChild()`** method of the [Node] interface |
| /// removes a child node from the DOM and returns the removed node. |
| /// |
| /// > [!NOTE] |
| /// > As long as a reference is kept on the removed child, |
| /// > it still exists in memory, but is no longer part of the DOM. |
| /// > It can still be reused later in the code. |
| /// > |
| /// > If the return value of `removeChild()` is not stored, and no other |
| /// > reference is kept, |
| /// > it will be |
| /// > [automatically deleted](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_management) |
| /// > from memory after a short time. |
| /// |
| /// Unlike [Node.cloneNode] the return value preserves the `EventListener` |
| /// objects associated with it. |
| external Node removeChild(Node child); |
| |
| /// The read-only **`nodeType`** property of a [Node] interface is an integer |
| /// that identifies what the node is. It distinguishes different kind of nodes |
| /// from each other, |
| /// such as [Element], [Text] and [Comment]. |
| external int get nodeType; |
| |
| /// The read-only **`nodeName`** property of [Node] returns the name of the |
| /// current node as a string. |
| external String get nodeName; |
| |
| /// The read-only **`baseURI`** property of the [Node] interface |
| /// returns the absolute base URL of the document containing the node. |
| /// |
| /// The base URL is used to resolve relative URLs when the browser needs to |
| /// obtain an absolute URL, for example when processing the HTML `img` |
| /// element's `src` attribute or the `xlink:href` or `href` attributes in |
| /// SVG. |
| /// |
| /// Although this property is read-only, its value is determined by an |
| /// algorithm each time |
| /// the property is accessed, and may change if the conditions changed. |
| /// |
| /// The base URL is determined as follows: |
| /// |
| /// 1. By default, the base URL is the location of the document (as determined |
| /// by [window.location]). |
| /// 2. If it is an HTML Document and there is a `Base` element in the |
| /// document, |
| /// the `href` value of the _first_ `Base` element with such an attribute is |
| /// used instead. |
| external String get baseURI; |
| |
| /// The read-only **`isConnected`** property of the [Node] interface |
| /// returns a boolean indicating whether the node is connected |
| /// (directly or indirectly) to a [Document] object. |
| external bool get isConnected; |
| |
| /// The read-only **`ownerDocument`** property of the [Node] interface |
| /// returns the top-level document object of the node. |
| external Document? get ownerDocument; |
| |
| /// The read-only **`parentNode`** property of the [Node] interface |
| /// returns the parent of the specified node in the DOM tree. |
| /// |
| /// `Document` and `DocumentFragment` |
| /// [nodes](https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType) |
| /// can never have a parent, so |
| /// `parentNode` will always return `null`. |
| /// It also returns `null` if the node has just been created |
| /// and is not yet attached to the tree. [Node.parentElement] on the other |
| /// hand only returns `Element` nodes. |
| external Node? get parentNode; |
| |
| /// The read-only **`parentElement`** property of [Node] interface |
| /// returns the DOM node's parent [Element], or `null` if the node either has |
| /// no |
| /// parent, or its parent isn't a DOM [Element]. [Node.parentNode] on the |
| /// other hand returns any kind of parent, regardless of its type. |
| external Element? get parentElement; |
| |
| /// The read-only **`childNodes`** property of the [Node] interface returns a |
| /// live |
| /// [NodeList] of child [Node] of the given element where |
| /// the first child node is assigned index `0`. Child nodes include elements, |
| /// text and |
| /// comments. |
| /// |
| /// > [!NOTE] |
| /// > The [NodeList] being live means that its content is changed each time |
| /// > new children are added or removed. |
| /// > |
| /// > Browsers insert text nodes into a document to represent whitespace in |
| /// > the source markup. |
| /// > Therefore a node obtained, for example, using `Node.childNodes[0]` |
| /// > may refer to a whitespace text node rather than the actual element the |
| /// > author intended to get. |
| /// > |
| /// > See |
| /// > [Whitespace in the DOM](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Whitespace) |
| /// > for more information. |
| /// |
| /// The items in the collection of nodes are objects, not strings. To get data |
| /// from node |
| /// objects, use their properties. For example, to get the name of the first |
| /// childNode, you can use `elementNodeReference.childNodes[0].nodeName`. |
| /// |
| /// The [document] object itself has two children: the Doctype declaration and |
| /// the |
| /// root element, typically referred to as `documentElement`. In HTML |
| /// documents the latter is the `html` element. |
| /// |
| /// It is important to keep in mind that `childNodes` includes _all_ child |
| /// nodes, |
| /// including non-element nodes like text and comment. |
| /// To get a collection containing only elements, use [Element.children] |
| /// instead. |
| external NodeList get childNodes; |
| |
| /// The read-only **`firstChild`** property of the [Node] interface |
| /// returns the node's first child in the tree, |
| /// or `null` if the node has no children. |
| /// |
| /// If the node is a [Document], |
| /// this property returns the first node in the list of its direct children. |
| /// |
| /// > [!NOTE] |
| /// > This property returns any type of node that is the first child of this |
| /// > one. |
| /// > It may be a [Text] or a [Comment] node. |
| /// > If you want to get the first [Element] that is a child of another |
| /// > element, |
| /// > consider using [Element.firstElementChild]. |
| external Node? get firstChild; |
| |
| /// The read-only **`lastChild`** property of the [Node] interface |
| /// returns the last child of the node, or `null` if there are no child nodes. |
| /// |
| /// > [!NOTE] |
| /// > This property returns any type of node that is the last child of this |
| /// > one. |
| /// > It may be a [Text] or a [Comment] node. |
| /// > If you want to get the last [Element] that is a child of another |
| /// > element, |
| /// > consider using [Element.lastElementChild]. |
| external Node? get lastChild; |
| |
| /// The read-only **`previousSibling`** property of the [Node] interface |
| /// returns the node immediately preceding the specified one in its parent's |
| /// [Node.childNodes] list, |
| /// or `null` if the specified node is the first in that list. |
| /// |
| /// > [!NOTE] |
| /// > Browsers insert text nodes into a document to represent whitespace in |
| /// > the source markup. |
| /// > Therefore a node obtained, for example, using |
| /// > [`Node.firstChild`](https://developer.mozilla.org/en-US/docs/Web/API/Node/firstChild) |
| /// > or `Node.previousSibling` |
| /// > may refer to a whitespace text node rather than the actual element the |
| /// > author intended to get. |
| /// > |
| /// > See |
| /// > [Whitespace in the DOM](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Whitespace) |
| /// > for more information. |
| /// > |
| /// > You can use |
| /// > [`previousElementSibling`](https://developer.mozilla.org/en-US/docs/Web/API/Element/previousElementSibling) |
| /// > to get the previous element node (skipping text nodes and any other |
| /// > non-element nodes). |
| /// > |
| /// > To navigate the opposite way through the child nodes list use |
| /// > [Node.nextSibling](https://developer.mozilla.org/en-US/docs/Web/API/Node/nextSibling). |
| external Node? get previousSibling; |
| |
| /// The read-only **`nextSibling`** property of the [Node] interface |
| /// returns the node immediately following the specified one in their |
| /// parent's [Node.childNodes], or returns `null` |
| /// if the specified node is the last child in the parent element. |
| /// |
| /// > [!NOTE] |
| /// > Browsers insert [Text] nodes into a document to represent whitespace in |
| /// > the source markup. |
| /// > Therefore a node obtained, for example, using |
| /// > [`Node.firstChild`](https://developer.mozilla.org/en-US/docs/Web/API/Node/firstChild) |
| /// > or |
| /// > [`Node.previousSibling`](https://developer.mozilla.org/en-US/docs/Web/API/Node/previousSibling) |
| /// > may refer to a whitespace text node rather than the actual element the |
| /// > author |
| /// > intended to get. |
| /// > |
| /// > The article |
| /// > [Whitespace in the DOM](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Whitespace) |
| /// > contains more information about this behavior. |
| /// > |
| /// > You can use [Element.nextElementSibling] to obtain the next element |
| /// > skipping any whitespace nodes, other between-element text, or comments. |
| /// > |
| /// > To navigate the opposite way through the child nodes list use |
| /// > [Node.previousSibling](https://developer.mozilla.org/en-US/docs/Web/API/Node/previousSibling). |
| external Node? get nextSibling; |
| |
| /// The **`nodeValue`** property of the [Node] interface returns or sets the |
| /// value of the current node. |
| external String? get nodeValue; |
| external set nodeValue(String? value); |
| |
| /// The **`textContent`** property of the [Node] |
| /// interface represents the text content of the node and its descendants. |
| /// |
| /// > **Note:** `textContent` and [HTMLElement.innerText] are easily confused, |
| /// > but the two properties are |
| /// > [different in important ways](#differences_from_innertext). |
| external String? get textContent; |
| external set textContent(String? value); |
| } |
| extension type GetRootNodeOptions._(JSObject _) implements JSObject { |
| external factory GetRootNodeOptions({bool composed}); |
| |
| external bool get composed; |
| external set composed(bool value); |
| } |
| @JS() |
| external Document get document; |
| |
| /// The **`Document`** interface represents any web page loaded in the browser |
| /// and serves as an entry point into the web page's content, which is the |
| /// [DOM tree](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Using_the_Document_Object_Model#what_is_a_dom_tree). |
| /// |
| /// The DOM tree includes elements such as `body` and `table`, among |
| /// [many others](https://developer.mozilla.org/en-US/docs/Web/HTML/Element). It |
| /// provides functionality globally to the document, like how to obtain the |
| /// page's URL and create new elements in the document. |
| /// |
| /// The `Document` interface describes the common properties and methods for any |
| /// kind of document. Depending on the document's type (e.g. |
| /// [HTML](https://developer.mozilla.org/en-US/docs/Web/HTML), |
| /// [XML](https://developer.mozilla.org/en-US/docs/Web/XML), SVG, …), a larger |
| /// API is available: HTML documents, served with the `"text/html"` content |
| /// type, also implement the [HTMLDocument] interface, whereas XML and SVG |
| /// documents implement the [XMLDocument] interface. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/Document). |
| extension type Document._(JSObject _) implements Node, JSObject { |
| external factory Document(); |
| |
| /// The **`parseHTMLUnsafe()`** static method of the [Document] object is used |
| /// to parse a string of HTML, which may contain |
| /// [declarative shadow roots](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template#declarative_shadow_dom), |
| /// in order to create a new [Document] instance. |
| /// |
| /// The suffix "Unsafe" in the method name indicates that, while `<script>` |
| /// elements are not evaluated during parsing, the method does not sanitize |
| /// other potentially unsafe XSS-relevant input. |
| /// |
| /// The resulting `Document` will have a |
| /// [content type](https://developer.mozilla.org/en-US/docs/Web/API/Document/contentType) |
| /// of "text/html", a |
| /// [character set](https://developer.mozilla.org/en-US/docs/Web/API/Document/characterSet) |
| /// of UTF-8, and a URL of "about:blank" |
| external static Document parseHTMLUnsafe(JSAny html); |
| |
| /// The **`getElementsByTagName`** method of |
| /// [Document] interface returns an |
| /// [HTMLCollection] of elements with the given tag name. |
| /// |
| /// The complete |
| /// document is searched, including the root node. The returned |
| /// `HTMLCollection` |
| /// is live, meaning that it updates itself automatically to stay in sync with |
| /// the DOM tree |
| /// without having to call `document.getElementsByTagName()` again. |
| external HTMLCollection getElementsByTagName(String qualifiedName); |
| |
| /// Returns a list of elements with the given tag name belonging to the given |
| /// namespace. |
| /// The complete document is searched, including the root node. |
| external HTMLCollection getElementsByTagNameNS( |
| String? namespace, |
| String localName, |
| ); |
| |
| /// The **`getElementsByClassName`** method of |
| /// [Document] interface returns an array-like object |
| /// of all child elements which have all of the given class name(s). |
| /// |
| /// When called on |
| /// the [document] object, the complete document is searched, including the |
| /// root node. You may also call [Element.getElementsByClassName] on any |
| /// element; it will return only elements which are descendants of the |
| /// specified root element with the given class name(s). |
| /// |
| /// > [!WARNING] |
| /// > This is a live [HTMLCollection]. Changes in the DOM will |
| /// > reflect in the array as the changes occur. If an element selected by |
| /// > this array no |
| /// > longer qualifies for the selector, it will automatically be removed. Be |
| /// > aware of this |
| /// > for iteration purposes. |
| external HTMLCollection getElementsByClassName(String classNames); |
| |
| /// In an [HTML](https://developer.mozilla.org/en-US/docs/Web/HTML) document, |
| /// the **`document.createElement()`** method creates the HTML element |
| /// specified by `localName`, or an [HTMLUnknownElement] if `localName` isn't |
| /// recognized. |
| external Element createElement( |
| String localName, [ |
| JSAny options, |
| ]); |
| |
| /// Creates an element with the specified namespace URI and qualified name. |
| /// |
| /// To create an element without specifying a namespace URI, use the |
| /// [Document.createElement] method. |
| external Element createElementNS( |
| String? namespace, |
| String qualifiedName, [ |
| JSAny options, |
| ]); |
| |
| /// Creates a new empty [DocumentFragment] into which |
| /// DOM nodes can be added to build an offscreen DOM tree. |
| external DocumentFragment createDocumentFragment(); |
| |
| /// Creates a new [Text] node. This method can be used to escape HTML |
| /// characters. |
| external Text createTextNode(String data); |
| |
| /// **`createCDATASection()`** creates a new CDATA section node, |
| /// and returns it. |
| external CDATASection createCDATASection(String data); |
| |
| /// **`createComment()`** creates a new comment node, and returns |
| /// it. |
| external Comment createComment(String data); |
| |
| /// `createProcessingInstruction()` generates a new |
| /// [processing instruction](https://developer.mozilla.org/en-US/docs/Web/API/ProcessingInstruction) |
| /// node and returns it. |
| /// |
| /// The new node usually will be inserted into an XML document in order to |
| /// accomplish anything with it, such as with [node.insertBefore]. |
| external ProcessingInstruction createProcessingInstruction( |
| String target, |
| String data, |
| ); |
| |
| /// The [Document] object's **`importNode()`** method creates a copy of a |
| /// [Node] or [DocumentFragment] from another document, to be |
| /// inserted into the current document later. |
| /// |
| /// The imported node is not yet included in the document tree. To include it, |
| /// you need to |
| /// call an insertion method such as [Node.appendChild] or |
| /// [Node.insertBefore] with a node that _is_ |
| /// currently in the document tree. |
| /// |
| /// Unlike [document.adoptNode], the original node is not removed from its |
| /// original document. The imported node is a clone of the original. |
| external Node importNode( |
| Node node, [ |
| bool subtree, |
| ]); |
| |
| /// **`Document.adoptNode()`** transfers a from another [Document] into the |
| /// method's document. |
| /// The adopted node and its subtree are removed from their original document |
| /// (if any), and their [Node.ownerDocument] is changed to the current |
| /// document. |
| /// The node can then be inserted into the current document. |
| external Node adoptNode(Node node); |
| |
| /// The **`Document.createAttribute()`** method creates a new |
| /// attribute node, and returns it. The object created is a node implementing |
| /// the |
| /// [Attr] interface. The DOM does not enforce what sort of attributes can be |
| /// added to a particular element in this manner. |
| /// |
| /// > [!NOTE] |
| /// > The string given in parameter is converted to lowercase. |
| external Attr createAttribute(String localName); |
| |
| /// The **`Document.createAttributeNS()`** method creates a new attribute node |
| /// with the specified namespace URI and qualified name, and returns it. |
| /// The object created is a node implementing the |
| /// [Attr] interface. The DOM does not enforce what sort of attributes can be |
| /// added to a particular element in this manner. |
| external Attr createAttributeNS( |
| String? namespace, |
| String qualifiedName, |
| ); |
| |
| /// > [!WARNING] |
| /// > Many methods used with `createEvent`, such as `initCustomEvent`, are |
| /// > deprecated. |
| /// > Use |
| /// > [event constructors](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent) |
| /// > instead. |
| /// |
| /// Creates an [event](https://developer.mozilla.org/en-US/docs/Web/API/Event) |
| /// of the type specified. The |
| /// returned object should be first initialized and can then be passed to |
| /// [EventTarget.dispatchEvent]. |
| external Event createEvent(String interface); |
| |
| /// The **`Document.createRange()`** method returns a new |
| /// [Range] object. |
| external Range createRange(); |
| |
| /// The **`Document.createNodeIterator()`** method returns a new |
| /// [`NodeIterator`](https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator) |
| /// object. |
| external NodeIterator createNodeIterator( |
| Node root, [ |
| int whatToShow, |
| NodeFilter? filter, |
| ]); |
| |
| /// The **`Document.createTreeWalker()`** creator method returns a newly |
| /// created [TreeWalker] object. |
| external TreeWalker createTreeWalker( |
| Node root, [ |
| int whatToShow, |
| NodeFilter? filter, |
| ]); |
| |
| /// The **`startViewTransition()`** method of the [Document] interface starts |
| /// a new same-document (SPA) |
| /// [view transition](https://developer.mozilla.org/en-US/docs/Web/API/View_Transition_API) |
| /// and returns a [ViewTransition] object to represent it. |
| /// |
| /// When `startViewTransition()` is invoked, a sequence of steps is followed |
| /// as explained in |
| /// [The view transition process](https://developer.mozilla.org/en-US/docs/Web/API/View_Transition_API/Using#the_view_transition_process). |
| external ViewTransition startViewTransition([JSObject callbackOptions]); |
| |
| /// The **`elementFromPoint()`** |
| /// method, available on the [Document] object, returns the topmost [Element] |
| /// at the specified coordinates |
| /// (relative to the viewport). |
| /// |
| /// If the element at the specified point belongs to another document (for |
| /// example, the |
| /// document of an `iframe`), that document's parent element is returned |
| /// (the `<iframe>` itself). If the element at the given point is anonymous |
| /// or XBL generated content, such as a textbox's scroll bars, then the first |
| /// non-anonymous |
| /// ancestor element (for example, the textbox) is returned. |
| /// |
| /// Elements with set to `none` will be ignored, |
| /// and the element below it will be returned. |
| /// |
| /// If the method is run on another document (like an `<iframe>`'s |
| /// subdocument), the coordinates are relative to the document where the |
| /// method is being |
| /// called. |
| /// |
| /// If the specified point is outside the visible bounds of the document or |
| /// either |
| /// coordinate is negative, the result is `null`. |
| /// |
| /// If you need to find the specific position inside the element, use |
| /// [Document.caretPositionFromPoint]. |
| external Element? elementFromPoint( |
| num x, |
| num y, |
| ); |
| |
| /// The **`elementsFromPoint()`** method |
| /// of the [Document] interface returns an array of all elements |
| /// at the specified coordinates (relative to the viewport). |
| /// The elements are ordered from the topmost to the bottommost box of the |
| /// viewport. |
| /// |
| /// It operates in a similar way to the [Document.elementFromPoint] method. |
| external JSArray<Element> elementsFromPoint( |
| num x, |
| num y, |
| ); |
| |
| /// The **`caretPositionFromPoint()`** method of the [Document] interface |
| /// returns a [CaretPosition] object, containing the DOM node, along with the |
| /// caret and caret's character offset within that node. |
| external CaretPosition? caretPositionFromPoint( |
| num x, |
| num y, [ |
| CaretPositionFromPointOptions options, |
| ]); |
| |
| /// The [Document] method |
| /// **`exitFullscreen()`** requests that the element on this |
| /// document which is currently being presented in fullscreen mode be taken |
| /// out of |
| /// fullscreen mode, restoring the previous state of the screen. This usually |
| /// reverses the effects of a previous call to [Element.requestFullscreen]. |
| external JSPromise<JSAny?> exitFullscreen(); |
| external JSObject operator [](String name); |
| |
| /// The **`getElementsByName()`** method |
| /// of the [Document] object returns a [NodeList] Collection of |
| /// elements with a given `name` attribute in the document. |
| external NodeList getElementsByName(String elementName); |
| |
| /// The **`Document.open()`** method opens a document for |
| /// [Document.write]. |
| /// |
| /// This does come with some side effects. For example: |
| /// |
| /// - All event listeners currently registered on the document, nodes inside |
| /// the document, |
| /// or the document's window are removed. |
| /// - All existing nodes are removed from the document. |
| external JSObject? open([ |
| String unused1OrUrl, |
| String nameOrUnused2, |
| String features, |
| ]); |
| |
| /// The **`Document.close()`** method finishes writing to a |
| /// document, opened with [Document.open]. |
| external void close(); |
| |
| /// > [!WARNING] |
| /// > Use of the `document.write()` method is strongly discouraged. |
| /// > |
| /// > As |
| /// > [the HTML spec itself warns](<https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#document.write()>): |
| /// > |
| /// > > This method has very idiosyncratic behavior. In some cases, this |
| /// > method can affect the state of the |
| /// > [HTML parser](https://html.spec.whatwg.org/multipage/parsing.html#html-parser) |
| /// > while the parser is running, resulting in a DOM that does not correspond |
| /// > to the source of the document (e.g. if the string written is the string |
| /// > "`<plaintext>`" or "`<!--`"). In other cases, the call can clear the |
| /// > current page first, as if |
| /// > [`document.open()`](https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-open) |
| /// > had been called. In yet more cases, the method is simply ignored, or |
| /// > throws an exception. Users agents are |
| /// > [explicitly allowed to avoid executing `script` elements inserted via this method](https://html.spec.whatwg.org/multipage/parsing.html#document-written-scripts-intervention). |
| /// > And to make matters even worse, the exact behavior of this method can in |
| /// > some cases be dependent on network latency, which can lead to failures |
| /// > that are very hard to debug. For all these reasons, use of this method |
| /// > is strongly discouraged. |
| /// > > Therefore, avoid using `document.write()` — and if possible, update |
| /// > any existing code that is still using it. |
| /// |
| /// The **`document.write()`** method writes a string of text to a document |
| /// stream opened by [document.open]. |
| /// |
| /// > [!NOTE] |
| /// > Because `document.write()` writes to the document **stream**, calling |
| /// > `document.write()` on a closed (loaded) document automatically calls |
| /// > `document.open()`, |
| /// > [which will clear the document](https://developer.mozilla.org/en-US/docs/Web/API/Document/open#notes). |
| external void write([ |
| JSAny text1, |
| JSAny text2, |
| JSAny text3, |
| JSAny text4, |
| ]); |
| |
| /// Writes a string of text followed by a newline character to a document. |
| external void writeln([ |
| JSAny text1, |
| JSAny text2, |
| JSAny text3, |
| JSAny text4, |
| ]); |
| |
| /// The **`hasFocus()`** method of the [Document] interface returns a boolean |
| /// value indicating whether the document or any element inside the document |
| /// has focus. |
| /// This method can be used to determine whether the active element in a |
| /// document has focus. |
| /// |
| /// > [!NOTE] |
| /// > When viewing a document, an element with focus is always the |
| /// > [active element](https://developer.mozilla.org/en-US/docs/Web/API/Document/activeElement) |
| /// > in the document, but an active element does not necessarily have focus. |
| /// > For example, an active element within a popup window that is not the |
| /// > foreground doesn't have focus. |
| external bool hasFocus(); |
| |
| /// The **`execCommand`** method implements multiple different commands. Some |
| /// of them provide access to the clipboard, while others are for editing |
| /// [form inputs](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input), |
| /// [`contenteditable`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/contenteditable) |
| /// elements or entire documents (when switched to |
| /// [design mode](https://developer.mozilla.org/en-US/docs/Web/API/Document/designMode)). |
| /// |
| /// To access the clipboard, the newer |
| /// [Clipboard API](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API) |
| /// is recommended over `execCommand()`. However, there is no replacement for |
| /// the editing commands: unlike direct DOM manipulation, modifications |
| /// performed by `execCommand()` preserve the undo buffer (edit history). |
| /// |
| /// Most commands affect the document's |
| /// [selection](https://developer.mozilla.org/en-US/docs/Web/API/Selection). |
| /// For example, some commands (bold, italics, etc.) format the currently |
| /// selected text, while others delete the selection, insert new elements |
| /// (replacing the selection) or affect an entire line (indenting). Only the |
| /// currently active editable element can be modified, but some commands (e.g. |
| /// `copy`) can work without an editable element. |
| /// |
| /// > [!NOTE] |
| /// > Modifications performed by `execCommand()` may or may not trigger |
| /// > [Element.beforeinput_event] and [Element.input_event] events, depending |
| /// > on the browser and configuration. If triggered, the handlers for the |
| /// > events will run before `execCommand()` returns. Authors need to be |
| /// > careful about such recursive calls, especially if they call |
| /// > `execCommand()` in response to these events. From Firefox 82, nested |
| /// > `execCommand()` calls will always fail, see |
| /// > [bug 1634262](https://bugzil.la/1634262). |
| external bool execCommand( |
| String commandId, [ |
| bool showUI, |
| String value, |
| ]); |
| external bool queryCommandIndeterm(String commandId); |
| external String queryCommandValue(String commandId); |
| |
| /// The **`Document.clear()`** method does nothing, but doesn't raise any |
| /// error. |
| external void clear(); |
| external void captureEvents(); |
| external void releaseEvents(); |
| |
| /// The **`exitPictureInPicture()`** method of the [Document] interface |
| /// requests that a video contained |
| /// in this document, which is currently floating, be taken out of |
| /// picture-in-picture |
| /// mode, restoring the previous state of the screen. This usually reverses |
| /// the |
| /// effects of a previous call to [HTMLVideoElement.requestPictureInPicture]. |
| external JSPromise<JSAny?> exitPictureInPicture(); |
| |
| /// The **`exitPointerLock()`** method of the [Document] interface |
| /// asynchronously releases a pointer lock previously requested through |
| /// [Element.requestPointerLock]. |
| /// |
| /// > [!NOTE] |
| /// > While the **`exitPointerLock()`** method is called on the document, the |
| /// > **`requestPointerLock()`** method is called on an element. |
| /// |
| /// To track the success or failure of the request, it is necessary to listen |
| /// for the [Document.pointerlockchange_event] and |
| /// [Document.pointerlockerror_event] events. |
| external void exitPointerLock(); |
| |
| /// The **`hasUnpartitionedCookieAccess()`** method of the [Document] |
| /// interface returns a `Promise` that resolves with a boolean value |
| /// indicating whether the document has access to |
| /// [third-party](https://developer.mozilla.org/en-US/docs/Web/Privacy/Guides/Third-party_cookies), |
| /// [unpartitioned](https://developer.mozilla.org/en-US/docs/Web/API/Storage_Access_API#unpartitioned_versus_partitioned_cookies) |
| /// cookies. |
| /// |
| /// This method is part of the |
| /// [Storage Access API](https://developer.mozilla.org/en-US/docs/Web/API/Storage_Access_API). |
| /// |
| /// This method is a new name for [Document.hasStorageAccess]. |
| external JSPromise<JSBoolean> hasUnpartitionedCookieAccess(); |
| |
| /// The **`getSelection()`** method of the [Document] interface returns the |
| /// [Selection] object associated with this document, representing the range |
| /// of text selected by the user, or the current position of the caret. |
| external Selection? getSelection(); |
| |
| /// The **`hasStorageAccess()`** method of the [Document] interface returns a |
| /// `Promise` that resolves with a boolean value indicating whether the |
| /// document has access to |
| /// [third-party](https://developer.mozilla.org/en-US/docs/Web/Privacy/Guides/Third-party_cookies), |
| /// [unpartitioned](https://developer.mozilla.org/en-US/docs/Web/API/Storage_Access_API#unpartitioned_versus_partitioned_cookies) |
| /// cookies. |
| /// |
| /// This method is part of the |
| /// [Storage Access API](https://developer.mozilla.org/en-US/docs/Web/API/Storage_Access_API). |
| /// |
| /// > [!NOTE] |
| /// > This method is another name for [Document.hasUnpartitionedCookieAccess]. |
| /// > There are no current plans to remove this method in favor of |
| /// > [Document.hasUnpartitionedCookieAccess]. |
| external JSPromise<JSBoolean> hasStorageAccess(); |
| |
| /// The **`requestStorageAccess()`** method of the [Document] interface allows |
| /// content loaded in a third-party context (i.e., embedded in an `iframe`) to |
| /// request access to |
| /// [third-party cookies](https://developer.mozilla.org/en-US/docs/Web/Privacy/Guides/Third-party_cookies) |
| /// and |
| /// [unpartitioned state](https://developer.mozilla.org/en-US/docs/Web/Privacy/Guides/State_Partitioning#state_partitioning). |
| /// This is relevant to user agents that, by default, block access to |
| /// third-party, |
| /// [unpartitioned](https://developer.mozilla.org/en-US/docs/Web/API/Storage_Access_API#unpartitioned_versus_partitioned_cookies) |
| /// cookies to improve privacy (e.g., to prevent tracking), and is part of the |
| /// [Storage Access API](https://developer.mozilla.org/en-US/docs/Web/API/Storage_Access_API). |
| /// |
| /// To check whether permission to access third-party cookies has already been |
| /// granted, you can call [Permissions.query], specifying the feature name |
| /// `"storage-access"`. |
| /// |
| /// > [!NOTE] |
| /// > Usage of this feature may be blocked by a |
| /// > [Permissions Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Permissions_Policy) |
| /// > set on your server. In addition, the document must pass additional |
| /// > browser-specific checks such as allowlists, blocklists, on-device |
| /// > classification, user settings, |
| /// > anti-[clickjacking](https://developer.mozilla.org/en-US/docs/Web/Security/Attacks/Clickjacking) |
| /// > heuristics, or prompting the user for explicit permission. |
| external JSPromise<JSAny?> requestStorageAccess(); |
| |
| /// The **`getElementById()`** method of the [Document] interface returns an |
| /// [Element] object representing the element whose [Element.id] property |
| /// matches the specified string. Since element IDs are required to be unique |
| /// if specified, they're a useful way to get access to a specific element |
| /// quickly. |
| /// |
| /// If you need to get access to an element which doesn't have an ID, you can |
| /// use [Document.querySelector] to find the element using any . |
| /// |
| /// > [!NOTE] |
| /// > IDs should be unique inside a document. If two or more elements in a |
| /// > document have the same ID, this method returns the first element found. |
| external Element? getElementById(String elementId); |
| |
| /// The `getAnimations()` method of the [Document] interface |
| /// returns an array of all [Animation] objects currently in effect whose |
| /// target elements are descendants of the document. This array includes |
| /// [CSS Animations](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animations), |
| /// [CSS Transitions](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_transitions), |
| /// and |
| /// [Web Animations](https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API). |
| external JSArray<Animation> getAnimations(); |
| |
| /// The **`Document.prepend()`** method |
| /// inserts a set of [Node] objects or strings before |
| /// the first child of the document. Strings |
| /// are inserted as equivalent [Text] nodes. |
| /// |
| /// This method prepends a child to a `Document`. To prepend to an arbitrary |
| /// element in the tree, see [Element.prepend]. |
| external void prepend([ |
| JSAny node1, |
| JSAny node2, |
| JSAny node3, |
| JSAny node4, |
| ]); |
| |
| /// The **`Document.append()`** method |
| /// inserts a set of [Node] objects or strings after |
| /// the last child of the document. Strings |
| /// are inserted as equivalent [Text] nodes. |
| /// |
| /// This method appends a child to a `Document`. To append to an arbitrary |
| /// element in the tree, see [Element.append]. |
| external void append([ |
| JSAny node1, |
| JSAny node2, |
| JSAny node3, |
| JSAny node4, |
| ]); |
| |
| /// The **`Document.replaceChildren()`** method replaces the |
| /// existing children of a `Document` with a specified new set of children. |
| external void replaceChildren([ |
| JSAny node1, |
| JSAny node2, |
| JSAny node3, |
| JSAny node4, |
| ]); |
| |
| /// The [Document] method **`querySelector()`** |
| /// returns the first [Element] within the document that matches the specified |
| /// [CSS selector](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_selectors), |
| /// or group of CSS selectors. If no matches are found, `null` is returned. |
| /// |
| /// The matching is done using depth-first pre-order traversal of the |
| /// document's nodes starting with the first element in the document's markup |
| /// and iterating through sequential nodes by order of the number of child |
| /// nodes. |
| /// |
| /// If the specified selector matches an ID that is incorrectly used more than |
| /// once in the |
| /// document, the first element with that ID is returned. |
| /// |
| /// [CSS pseudo-elements](https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements) |
| /// will never return |
| /// any elements, as specified in the |
| /// [Selectors API](https://www.w3.org/TR/selectors-api/#grammar). |
| external Element? querySelector(String selectors); |
| |
| /// The [Document] method **`querySelectorAll()`** |
| /// returns a static (not live) [NodeList] representing a list of the |
| /// document's elements that match the specified group of selectors. |
| external NodeList querySelectorAll(String selectors); |
| |
| /// This method compiles an [XPathExpression] which can then be used for |
| /// (repeated) evaluations. |
| /// |
| /// You must call this method on the same document that you run the expression |
| /// against. |
| external XPathExpression createExpression( |
| String expression, [ |
| XPathNSResolver? resolver, |
| ]); |
| |
| /// The **`createNSResolver()`** method of the [Document] interface used to |
| /// create a custom `XPathNSResolver` object. It now returns the input as-is |
| /// and is only kept for compatibility reasons. |
| external Node createNSResolver(Node nodeResolver); |
| |
| /// The **`evaluate()`** method of the [Document] interface selects elements |
| /// based on the |
| /// [XPath](https://developer.mozilla.org/en-US/docs/Web/XML/XPath) |
| /// expression given in parameters. |
| /// |
| /// XPath expressions can be evaluated on both HTML and XML documents. |
| external XPathResult evaluate( |
| String expression, |
| Node contextNode, [ |
| XPathNSResolver? resolver, |
| int type, |
| XPathResult? result, |
| ]); |
| |
| /// The **`Document.implementation`** property returns a |
| /// [DOMImplementation] object associated with the current document. |
| external DOMImplementation get implementation; |
| |
| /// The **`URL`** read-only property of the [Document] |
| /// interface returns the document location as a string. |
| external String get URL; |
| |
| /// The **`documentURI`** read-only property of the |
| /// [Document] interface returns the document location as a string. |
| external String get documentURI; |
| |
| /// The **`Document.compatMode`** read-only property indicates |
| /// whether the document is rendered in |
| /// [Quirks mode](https://developer.mozilla.org/en-US/docs/Web/HTML/Quirks_Mode_and_Standards_Mode) |
| /// or |
| /// Standards mode. |
| external String get compatMode; |
| |
| /// The **`Document.characterSet`** |
| /// read-only property returns the |
| /// [character encoding](https://developer.mozilla.org/en-US/docs/Glossary/Character_encoding) |
| /// of the |
| /// document that it's currently rendered with. |
| /// |
| /// > [!NOTE] |
| /// > A "character set" and a "character encoding" are related, but different. |
| /// > Despite the |
| /// > name of this property, it returns the _encoding_. |
| external String get characterSet; |
| |
| /// The **`Document.contentType`** read-only property returns the |
| /// MIME type that the document is being rendered as. This may come from HTTP |
| /// headers or |
| /// other sources of MIME information, and might be affected by automatic type |
| /// conversions |
| /// performed by either the browser or extensions. |
| /// |
| /// > [!NOTE] |
| /// > This property is unaffected by `meta` |
| /// > elements. |
| external String get contentType; |
| |
| /// The **`doctype`** read-only property of the [Document] interface is a |
| /// [DocumentType] object representing the associated with the current |
| /// document. |
| external DocumentType? get doctype; |
| |
| /// The **`documentElement`** read-only property of the [Document] interface |
| /// returns the |
| /// [Element] that is the root element of the [document] (for |
| /// example, the `html` element for HTML documents). |
| external Element? get documentElement; |
| |
| /// **`Document.rootElement`** returns the [Element] |
| /// that is the root element of the [document] if it is an |
| /// element, otherwise `null`. It is deprecated in favor of |
| /// [Document.documentElement], which returns the root element for all |
| /// documents. |
| external SVGSVGElement? get rootElement; |
| |
| /// The **`scrollingElement`** read-only property of the |
| /// [Document] interface returns a reference to the [Element] that |
| /// scrolls the document. In standards mode, this is the root element of the |
| /// document, [document.documentElement]. |
| /// |
| /// When in quirks mode, the `scrollingElement` attribute returns the HTML |
| /// `body` element if it exists and is _not_ |
| /// [potentially scrollable](https://drafts.csswg.org/cssom-view/#potentially-scrollable), |
| /// otherwise it returns `null`. This may look surprising but is true |
| /// according to both the specification and browsers. |
| external Element? get scrollingElement; |
| |
| /// The read-only **`fullscreenEnabled`** |
| /// property on the [Document] interface indicates whether or not fullscreen |
| /// mode is available. |
| /// |
| /// fullscreen mode is available only for a page that has no |
| /// windowed plug-ins in any of its documents, and if all `iframe` elements |
| /// which contain the document have their |
| /// [`allowfullscreen`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#allowfullscreen) |
| /// attribute set. |
| /// |
| /// Although this property is read-only, it will not throw if it is modified |
| /// (even in |
| /// strict mode); the setter is a no-operation and it will be ignored. |
| external bool get fullscreenEnabled; |
| |
| /// The obsolete [Document] interface's **`fullscreen`** read-only property |
| /// reports whether or not the document is currently displaying content in |
| /// fullscreen mode. |
| /// |
| /// Although this property is read-only, it will not throw if it is modified |
| /// (even in strict mode); the setter is a no-operation and it will be |
| /// ignored. |
| /// |
| /// > [!NOTE] |
| /// > Since this property is deprecated, you can determine if fullscreen mode |
| /// > is active on the document by checking to see if |
| /// > [Document.fullscreenElement] is not `null`. |
| external bool get fullscreen; |
| external EventHandler get onfullscreenchange; |
| external set onfullscreenchange(EventHandler value); |
| external EventHandler get onfullscreenerror; |
| external set onfullscreenerror(EventHandler value); |
| |
| /// The **`Document.location`** read-only property returns a |
| /// [Location] object, which contains information about the URL of the |
| /// document |
| /// and provides methods for changing that URL and loading another URL. |
| /// |
| /// Though `Document.location` is a _read-only_ `Location` |
| /// object, you can also assign a string to it. This means that you can |
| /// work with document.location as if it were a string in most cases: |
| /// `document.location = 'http://www.example.com'` is a synonym of |
| /// `document.location.href = 'http://www.example.com'`. If you assign another |
| /// string to it, browser will load the website you assigned. |
| /// |
| /// To retrieve just the URL as a string, the read-only [document.URL] |
| /// property can also be used. |
| /// |
| /// If the current document is not in a browsing context, the returned value |
| /// is |
| /// `null`. |
| external Location? get location; |
| |
| /// The **`domain`** property of the [Document] |
| /// interface gets/sets the domain portion of the of the current |
| /// document, as used by the |
| /// [same-origin policy](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy). |
| external String get domain; |
| external set domain(String value); |
| |
| /// The **`Document.referrer`** property returns the |
| /// [URI](https://www.w3.org/Addressing/#background) of the page that linked |
| /// to |
| /// this page. |
| external String get referrer; |
| |
| /// The [Document] property `cookie` lets you read and write |
| /// [cookies](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies) |
| /// associated with the document. |
| /// It serves as a getter and setter for the actual values of the cookies. |
| external String get cookie; |
| external set cookie(String value); |
| |
| /// The **`lastModified`** property of the [Document] |
| /// interface returns a string containing the date and local time on which the |
| /// current document |
| /// was last modified. |
| external String get lastModified; |
| |
| /// The **`Document.readyState`** property describes the loading state of the |
| /// [document]. |
| /// When the value of this property changes, a |
| /// [Document.readystatechange_event] event fires on the [document] object. |
| external DocumentReadyState get readyState; |
| |
| /// The **`document.title`** property gets or sets the current title of the |
| /// document. |
| /// When present, it defaults to the value of the |
| /// [`<title>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title). |
| external String get title; |
| external set title(String value); |
| |
| /// The **`Document.dir`** property is a string |
| /// representing the directionality of the text of the document, whether left |
| /// to right |
| /// (default) or right to left. Possible values are `'rtl'`, right to left, |
| /// and |
| /// `'ltr'`, left to right. |
| external String get dir; |
| external set dir(String value); |
| |
| /// The **`Document.body`** property represents the |
| /// `body` or `frameset` node of the current document, or |
| /// `null` if no such element exists. |
| external HTMLElement? get body; |
| external set body(HTMLElement? value); |
| |
| /// The **`head`** read-only property of |
| /// the [Document] interface returns the `head` element of |
| /// the current document. |
| external HTMLHeadElement? get head; |
| |
| /// The **`images`** read-only property of the [Document] interface returns a |
| /// [collection](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection) |
| /// of the |
| /// [images](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement) |
| /// in the current HTML document. |
| external HTMLCollection get images; |
| |
| /// The **`embeds`** read-only property of the |
| /// [Document] interface returns a list of the embedded |
| /// `embed` elements within the current document. |
| external HTMLCollection get embeds; |
| |
| /// The **`plugins`** read-only property of the |
| /// [Document] interface returns an [HTMLCollection] object |
| /// containing one or more [HTMLEmbedElement]s representing the |
| /// `embed` elements in the current document. |
| /// |
| /// > [!NOTE] |
| /// > For a list of installed plugins, use |
| /// > [Navigator.plugins](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/plugins) |
| /// > instead. |
| external HTMLCollection get plugins; |
| |
| /// The **`links`** read-only property of the [Document] interface returns a |
| /// collection of all `area` elements and `a` elements in a document with a |
| /// value for the |
| /// [href](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#href) |
| /// attribute. |
| external HTMLCollection get links; |
| |
| /// The **`forms`** read-only property of |
| /// the [Document] interface returns an [HTMLCollection] listing |
| /// all the `form` elements contained in the document. |
| /// |
| /// > [!NOTE] |
| /// > Similarly, you can access a list of a form's component user |
| /// > input elements using the [HTMLFormElement.elements] property. |
| external HTMLCollection get forms; |
| |
| /// The **`scripts`** property of the [Document] |
| /// interface returns a list of the `script` |
| /// elements in the document. The returned object is an |
| /// [HTMLCollection]. |
| external HTMLCollection get scripts; |
| |
| /// The **`Document.currentScript`** property returns the `script` element |
| /// whose script is currently being processed and [isn't a JavaScript |
| /// module](https://github.com/whatwg/html/issues/997). (For modules use |
| /// [`import.meta`](/en-US/docs/Web/JavaScript/Reference/Operators/import.meta) |
| /// instead.) |
| /// |
| /// It's important to note that this will not reference the `script` |
| /// element if the code in the script is being called as a callback or event |
| /// handler; it |
| /// will only reference the element while it's initially being processed. |
| external HTMLOrSVGScriptElement? get currentScript; |
| |
| /// In browsers, **`document.defaultView`** returns the |
| /// [Window] object associated with , or `null` if none is available. |
| /// |
| /// This property is read-only. |
| external Window? get defaultView; |
| |
| /// **`document.designMode`** controls whether the entire document |
| /// is editable. Valid values are `"on"` and `"off"`. According to the |
| /// specification, this property is meant to default to `"off"`. Firefox |
| /// follows |
| /// this standard. The earlier versions of Chrome and IE default to |
| /// `"inherit"`. |
| /// Starting in Chrome 43, the default is `"off"` and `"inherit"` is |
| /// no longer supported. In IE6-10, the value is capitalized. |
| external String get designMode; |
| external set designMode(String value); |
| |
| /// The **`Document.hidden`** read-only property returns a Boolean |
| /// value indicating if the page is considered hidden or not. |
| /// |
| /// The [Document.visibilityState] property provides an alternative way to |
| /// determine whether the page is hidden. |
| external bool get hidden; |
| |
| /// The **`Document.visibilityState`** |
| /// read-only property returns the visibility of the document. It can be used |
| /// to check whether the document is in the background or in a minimized |
| /// window, or is otherwise not visible to the user. |
| /// |
| /// When the value of this property changes, the |
| /// [Document.visibilitychange_event] event is sent to the [Document]. |
| /// |
| /// The [Document.hidden] property provides an alternative way to determine |
| /// whether the page is hidden. |
| external DocumentVisibilityState get visibilityState; |
| external EventHandler get onreadystatechange; |
| external set onreadystatechange(EventHandler value); |
| external EventHandler get onvisibilitychange; |
| external set onvisibilitychange(EventHandler value); |
| |
| /// **`fgColor`** gets/sets the foreground color, or text color, of |
| /// the current document. |
| external String get fgColor; |
| external set fgColor(String value); |
| |
| /// The **`Document.linkColor`** property gets/sets the color of |
| /// links within the document. |
| /// |
| /// This property is deprecated. As an alternative, you can set the CSS |
| /// `color` property on either HTML anchor links (`a`) or on |
| /// pseudo-classes. Another alternative is |
| /// `document.body.link`, although this is [deprecated in HTML |
| /// 4.01](https://www.w3.org/TR/html401/struct/global.html#adef-link). |
| external String get linkColor; |
| external set linkColor(String value); |
| |
| /// The **`Document.vlinkColor`** property gets/sets the color of |
| /// links that the user has visited in the document. |
| external String get vlinkColor; |
| external set vlinkColor(String value); |
| |
| /// Returns or sets the color of an active link in the document body. A link |
| /// is active |
| /// during the time between `mousedown` and `mouseup` events. |
| external String get alinkColor; |
| external set alinkColor(String value); |
| |
| /// The deprecated `bgColor` property gets or sets the background color of the |
| /// current document. |
| external String get bgColor; |
| external set bgColor(String value); |
| |
| /// The **`anchors`** read-only property of the |
| /// [Document] interface returns a list of all of the anchors in the document. |
| external HTMLCollection get anchors; |
| |
| /// The **`applets`** property of the [Document] returns an empty |
| /// [HTMLCollection]. This property is kept only for compatibility reasons; in |
| /// older versions of browsers, it returned a list of the applets within a |
| /// document. |
| /// |
| /// > [!NOTE] |
| /// > Support for the `<applet>` element has been removed by all browsers. |
| /// > Therefore, calling `document.applets` always |
| /// > returns an empty collection. |
| external HTMLCollection get applets; |
| |
| /// The [Document] interface's read-only **`all`** property returns an |
| /// [HTMLAllCollection] rooted at the document node. |
| /// |
| /// Rather than using `document.all` to return an [HTMLAllCollection] of all |
| /// the document's elements in document order, you can use |
| /// [Document.querySelectorAll] to return a [NodeList] of all the document's |
| /// elements in document order: |
| /// |
| /// ```js |
| /// const allElements = document.querySelectorAll("*"); |
| /// ``` |
| external HTMLAllCollection get all; |
| |
| /// The read-only |
| /// **`pictureInPictureEnabled`** property of the |
| /// [Document] interface indicates whether or not picture-in-picture mode is |
| /// available. |
| /// |
| /// Picture-in-Picture mode is available by default unless specified |
| /// otherwise by a |
| /// [Permissions-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Permissions-Policy/picture-in-picture). |
| /// |
| /// Although this property is read-only, it will not throw if it is modified |
| /// (even in |
| /// strict mode); the setter is a no-operation and will be ignored. |
| external bool get pictureInPictureEnabled; |
| external EventHandler get onpointerlockchange; |
| external set onpointerlockchange(EventHandler value); |
| external EventHandler get onpointerlockerror; |
| external set onpointerlockerror(EventHandler value); |
| |
| /// The **`fragmentDirective`** read-only property of the [Document] interface |
| /// returns the [FragmentDirective] for the current document. |
| external FragmentDirective get fragmentDirective; |
| |
| /// The `timeline` readonly property of the [Document] interface represents |
| /// the default timeline of the current document. This timeline is a special |
| /// instance of [DocumentTimeline]. |
| /// |
| /// This timeline is unique to each `document` and persists for the lifetime |
| /// of the `document` including calls to [Document.open]. |
| /// |
| /// This timeline expresses the time in milliseconds since |
| /// [Performance.timeOrigin]. |
| /// Prior to the time origin, the timeline is inactive, and its |
| /// [AnimationTimeline.currentTime] is `null`. |
| /// |
| /// > [!NOTE] |
| /// > A document timeline that is associated with a non-active document (a |
| /// > [Document] not associated with a [Window], `iframe`, or `frame`) is also |
| /// > considered to be inactive. |
| external DocumentTimeline get timeline; |
| |
| /// The **`fonts`** property of the [Document] interface returns the |
| /// [FontFaceSet] interface of the document. |
| /// |
| /// This feature is part of the |
| /// [CSS Font Loading API](https://developer.mozilla.org/en-US/docs/Web/API/CSS_Font_Loading_API). |
| external FontFaceSet get fonts; |
| |
| /// The **`styleSheets`** read-only property of the [Document] interface |
| /// returns a [StyleSheetList] of [CSSStyleSheet] objects, for stylesheets |
| /// explicitly linked into or embedded in a document. |
| external StyleSheetList get styleSheets; |
| |
| /// The **`adoptedStyleSheets`** property of the [Document] interface is used |
| /// for setting an array of constructed stylesheets to be used by the |
| /// document. |
| /// |
| /// > [!NOTE] |
| /// > A constructed stylesheet is a stylesheet created programmatically using |
| /// > the [`CSSStyleSheet()` |
| /// > constructor](https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/CSSStyleSheet) |
| /// > (as compared to one created by a user-agent when importing a stylesheet |
| /// > from a script, imported using `style` and , or linked to via `link`). |
| /// |
| /// The same constructed stylesheets can also be shared with one or more |
| /// [ShadowRoot] instances using the |
| /// [`ShadowRoot.adoptedStyleSheets`](https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot/adoptedStyleSheets) |
| /// property. |
| /// Changing an adopted stylesheet will affect all the objects that adopt it. |
| /// |
| /// Stylesheets in the property are evaluated along with the document's other |
| /// stylesheets using the |
| /// [CSS cascade algorithm](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_cascade/Cascade). |
| /// Where the resolution of rules considers stylesheet order, |
| /// `adoptedStyleSheets` are assumed to be ordered after those in |
| /// [`Document.styleSheets`](https://developer.mozilla.org/en-US/docs/Web/API/Document/styleSheets). |
| /// |
| /// Only stylesheets created using the [`CSSStyleSheet()` |
| /// constructor](https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/CSSStyleSheet) |
| /// within the context of the current [Document] may be adopted. |
| external JSArray<CSSStyleSheet> get adoptedStyleSheets; |
| external set adoptedStyleSheets(JSArray<CSSStyleSheet> value); |
| |
| /// The |
| /// **`Document.fullscreenElement`** read-only |
| /// property returns the [Element] that is currently being presented in |
| /// fullscreen mode in this document, or `null` if fullscreen mode is not |
| /// currently in use. |
| /// |
| /// Although this property is read-only, it will not throw if it is modified |
| /// (even in |
| /// strict mode); the setter is a no-operation and it will be ignored. |
| external Element? get fullscreenElement; |
| |
| /// The **`activeElement`** read-only property of the [Document] interface |
| /// returns the [Element] within the DOM that is receiving keyboard events |
| /// such as [Element.keydown_event] and [Element.keyup_event]. This is usually |
| /// analogous to the focused element. |
| /// |
| /// Which elements are focusable varies depending on the platform and the |
| /// browser's current configuration. For example, on Safari, following the |
| /// behavior of macOS, elements that aren't text input elements are not |
| /// focusable by default, unless the "Full Keyboard Access" setting is enabled |
| /// in System Preferences. |
| /// |
| /// Typically a user can press the <kbd>Tab</kbd> key to move the focus around |
| /// the page among focusable elements, and use keyboard gestures such as |
| /// <kbd>Space</kbd> or <kbd>Enter</kbd> to simulate clicks on the focused |
| /// element. |
| /// |
| /// > [!NOTE] |
| /// > Focus (which element is receiving user input events) is not the same |
| /// > thing as selection (the currently highlighted part of the document). You |
| /// > can get the current selection using [window.getSelection]. |
| external Element? get activeElement; |
| |
| /// The read-only **`pictureInPictureElement`** property of the [Document] |
| /// interface returns the [Element] that is currently being |
| /// presented in picture-in-picture mode in this document, or `null` if |
| /// picture-in-picture mode is not currently in use. |
| /// |
| /// Although this property is read-only, it will not throw if it is modified |
| /// (even in |
| /// strict mode); the setter is a no-operation and will be ignored. |
| external Element? get pictureInPictureElement; |
| |
| /// The **`pointerLockElement`** read-only property of the [Document] |
| /// interface provides the element set as the target for mouse events while |
| /// the pointer is locked. |
| /// It is `null` if lock is pending, pointer is unlocked, or the target is in |
| /// another document. |
| external Element? get pointerLockElement; |
| |
| /// The read-only **`children`** property returns a live [HTMLCollection] |
| /// which contains all of the child [Element] of the document upon which it |
| /// was called. |
| /// |
| /// For HTML documents, this is usually only the root `<html>` element. |
| /// |
| /// See [Element.children] for child elements of specific HTML elements within |
| /// the document. |
| external HTMLCollection get children; |
| |
| /// The **`Document.firstElementChild`** read-only property |
| /// returns the document's first child [Element], or `null` if there |
| /// are no child elements. |
| /// |
| /// For HTML documents, this is usually the only child, the root `<html>` |
| /// element. |
| /// |
| /// See [Element.firstElementChild] for the first child element of specific |
| /// elements within a document. |
| external Element? get firstElementChild; |
| |
| /// The **`Document.lastElementChild`** read-only property |
| /// returns the document's last child [Element], or `null` if there |
| /// are no child elements. |
| /// |
| /// For HTML documents, this is usually the only child, the root `<html>` |
| /// element. |
| /// |
| /// See [Element.lastElementChild] for the last child element of specific |
| /// elements within a document. |
| external Element? get lastElementChild; |
| |
| /// The **`Document.childElementCount`** read-only property |
| /// returns the number of child elements of the document. |
| /// |
| /// To get the number of children of a specific element, see |
| /// [Element.childElementCount]. |
| external int get childElementCount; |
| external EventHandler get onabort; |
| external set onabort(EventHandler value); |
| external EventHandler get onauxclick; |
| external set onauxclick(EventHandler value); |
| external EventHandler get onbeforeinput; |
| external set onbeforeinput(EventHandler value); |
| external EventHandler get onbeforetoggle; |
| external set onbeforetoggle(EventHandler value); |
| external EventHandler get onblur; |
| external set onblur(EventHandler value); |
| external EventHandler get oncancel; |
| external set oncancel(EventHandler value); |
| external EventHandler get oncanplay; |
| external set oncanplay(EventHandler value); |
| external EventHandler get oncanplaythrough; |
| external set oncanplaythrough(EventHandler value); |
| external EventHandler get onchange; |
| external set onchange(EventHandler value); |
| external EventHandler get onclick; |
| external set onclick(EventHandler value); |
| external EventHandler get onclose; |
| external set onclose(EventHandler value); |
| external EventHandler get oncontextlost; |
| external set oncontextlost(EventHandler value); |
| external EventHandler get oncontextmenu; |
| external set oncontextmenu(EventHandler value); |
| external EventHandler get oncontextrestored; |
| external set oncontextrestored(EventHandler value); |
| external EventHandler get oncopy; |
| external set oncopy(EventHandler value); |
| external EventHandler get oncuechange; |
| external set oncuechange(EventHandler value); |
| external EventHandler get oncut; |
| external set oncut(EventHandler value); |
| external EventHandler get ondblclick; |
| external set ondblclick(EventHandler value); |
| external EventHandler get ondrag; |
| external set ondrag(EventHandler value); |
| external EventHandler get ondragend; |
| external set ondragend(EventHandler value); |
| external EventHandler get ondragenter; |
| external set ondragenter(EventHandler value); |
| external EventHandler get ondragleave; |
| external set ondragleave(EventHandler value); |
| external EventHandler get ondragover; |
| external set ondragover(EventHandler value); |
| external EventHandler get ondragstart; |
| external set ondragstart(EventHandler value); |
| external EventHandler get ondrop; |
| external set ondrop(EventHandler value); |
| external EventHandler get ondurationchange; |
| external set ondurationchange(EventHandler value); |
| external EventHandler get onemptied; |
| external set onemptied(EventHandler value); |
| external EventHandler get onended; |
| external set onended(EventHandler value); |
| external OnErrorEventHandler get onerror; |
| external set onerror(OnErrorEventHandler value); |
| external EventHandler get onfocus; |
| external set onfocus(EventHandler value); |
| external EventHandler get onformdata; |
| external set onformdata(EventHandler value); |
| external EventHandler get oninput; |
| external set oninput(EventHandler value); |
| external EventHandler get oninvalid; |
| external set oninvalid(EventHandler value); |
| external EventHandler get onkeydown; |
| external set onkeydown(EventHandler value); |
| external EventHandler get onkeypress; |
| external set onkeypress(EventHandler value); |
| external EventHandler get onkeyup; |
| external set onkeyup(EventHandler value); |
| external EventHandler get onload; |
| external set onload(EventHandler value); |
| external EventHandler get onloadeddata; |
| external set onloadeddata(EventHandler value); |
| external EventHandler get onloadedmetadata; |
| external set onloadedmetadata(EventHandler value); |
| external EventHandler get onloadstart; |
| external set onloadstart(EventHandler value); |
| external EventHandler get onmousedown; |
| external set onmousedown(EventHandler value); |
| external EventHandler get onmouseenter; |
| external set onmouseenter(EventHandler value); |
| external EventHandler get onmouseleave; |
| external set onmouseleave(EventHandler value); |
| external EventHandler get onmousemove; |
| external set onmousemove(EventHandler value); |
| external EventHandler get onmouseout; |
| external set onmouseout(EventHandler value); |
| external EventHandler get onmouseover; |
| external set onmouseover(EventHandler value); |
| external EventHandler get onmouseup; |
| external set onmouseup(EventHandler value); |
| external EventHandler get onpaste; |
| external set onpaste(EventHandler value); |
| external EventHandler get onpause; |
| external set onpause(EventHandler value); |
| external EventHandler get onplay; |
| external set onplay(EventHandler value); |
| external EventHandler get onplaying; |
| external set onplaying(EventHandler value); |
| external EventHandler get onprogress; |
| external set onprogress(EventHandler value); |
| external EventHandler get onratechange; |
| external set onratechange(EventHandler value); |
| external EventHandler get onreset; |
| external set onreset(EventHandler value); |
| external EventHandler get onresize; |
| external set onresize(EventHandler value); |
| external EventHandler get onscroll; |
| external set onscroll(EventHandler value); |
| external EventHandler get onscrollend; |
| external set onscrollend(EventHandler value); |
| external EventHandler get onsecuritypolicyviolation; |
| external set onsecuritypolicyviolation(EventHandler value); |
| external EventHandler get onseeked; |
| external set onseeked(EventHandler value); |
| external EventHandler get onseeking; |
| external set onseeking(EventHandler value); |
| external EventHandler get onselect; |
| external set onselect(EventHandler value); |
| external EventHandler get onslotchange; |
| external set onslotchange(EventHandler value); |
| external EventHandler get onstalled; |
| external set onstalled(EventHandler value); |
| external EventHandler get onsubmit; |
| external set onsubmit(EventHandler value); |
| external EventHandler get onsuspend; |
| external set onsuspend(EventHandler value); |
| external EventHandler get ontimeupdate; |
| external set ontimeupdate(EventHandler value); |
| external EventHandler get ontoggle; |
| external set ontoggle(EventHandler value); |
| external EventHandler get onvolumechange; |
| external set onvolumechange(EventHandler value); |
| external EventHandler get onwaiting; |
| external set onwaiting(EventHandler value); |
| external EventHandler get onwheel; |
| external set onwheel(EventHandler value); |
| external EventHandler get onanimationstart; |
| external set onanimationstart(EventHandler value); |
| external EventHandler get onanimationiteration; |
| external set onanimationiteration(EventHandler value); |
| external EventHandler get onanimationend; |
| external set onanimationend(EventHandler value); |
| external EventHandler get onanimationcancel; |
| external set onanimationcancel(EventHandler value); |
| external EventHandler get ontransitionrun; |
| external set ontransitionrun(EventHandler value); |
| external EventHandler get ontransitionstart; |
| external set ontransitionstart(EventHandler value); |
| external EventHandler get ontransitionend; |
| external set ontransitionend(EventHandler value); |
| external EventHandler get ontransitioncancel; |
| external set ontransitioncancel(EventHandler value); |
| external EventHandler get onpointerover; |
| external set onpointerover(EventHandler value); |
| external EventHandler get onpointerenter; |
| external set onpointerenter(EventHandler value); |
| external EventHandler get onpointerdown; |
| external set onpointerdown(EventHandler value); |
| external EventHandler get onpointermove; |
| external set onpointermove(EventHandler value); |
| external EventHandler get onpointerup; |
| external set onpointerup(EventHandler value); |
| external EventHandler get onpointercancel; |
| external set onpointercancel(EventHandler value); |
| external EventHandler get onpointerout; |
| external set onpointerout(EventHandler value); |
| external EventHandler get onpointerleave; |
| external set onpointerleave(EventHandler value); |
| external EventHandler get ongotpointercapture; |
| external set ongotpointercapture(EventHandler value); |
| external EventHandler get onlostpointercapture; |
| external set onlostpointercapture(EventHandler value); |
| external EventHandler get onselectstart; |
| external set onselectstart(EventHandler value); |
| external EventHandler get onselectionchange; |
| external set onselectionchange(EventHandler value); |
| external EventHandler get ontouchstart; |
| external set ontouchstart(EventHandler value); |
| external EventHandler get ontouchend; |
| external set ontouchend(EventHandler value); |
| external EventHandler get ontouchmove; |
| external set ontouchmove(EventHandler value); |
| external EventHandler get ontouchcancel; |
| external set ontouchcancel(EventHandler value); |
| } |
| |
| /// The **XMLDocument** interface represents an XML document. It inherits from |
| /// the generic [Document] and does not add any specific methods or properties |
| /// to it: nevertheless, several algorithms behave differently with the two |
| /// types of documents. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/XMLDocument). |
| extension type XMLDocument._(JSObject _) implements Document, JSObject {} |
| extension type ElementCreationOptions._(JSObject _) implements JSObject { |
| external factory ElementCreationOptions({String is_}); |
| |
| @JS('is') |
| external String get is_; |
| @JS('is') |
| external set is_(String value); |
| } |
| |
| /// The **`DOMImplementation`** interface represents an object providing methods |
| /// which are not dependent on any particular document. Such an object is |
| /// returned by the [Document.implementation] property. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation). |
| extension type DOMImplementation._(JSObject _) implements JSObject { |
| /// The **`DOMImplementation.createDocumentType()`** method returns |
| /// a [DocumentType] object which can either be used with |
| /// [DOMImplementation.createDocument] upon document creation or can be put |
| /// into the document via methods like [Node.insertBefore] or |
| /// [Node.replaceChild]. |
| external DocumentType createDocumentType( |
| String qualifiedName, |
| String publicId, |
| String systemId, |
| ); |
| |
| /// The **`DOMImplementation.createDocument()`** method creates and |
| /// returns an [XMLDocument]. |
| external XMLDocument createDocument( |
| String? namespace, |
| String qualifiedName, [ |
| DocumentType? doctype, |
| ]); |
| |
| /// The |
| /// **`DOMImplementation.createHTMLDocument()`** method creates a |
| /// new HTML [Document]. |
| external Document createHTMLDocument([String title]); |
| |
| /// The |
| /// **`DOMImplementation.hasFeature()`** method returns a |
| /// boolean flag indicating if a given feature is supported. It is |
| /// deprecated and modern browsers return `true` in all cases. |
| /// |
| /// The different implementations fairly diverged in what kind of features |
| /// were reported. |
| /// The latest version of the spec settled to force this method to always |
| /// return |
| /// `true`, where the functionality was accurate and in use. |
| external bool hasFeature(); |
| } |
| |
| /// The **`DocumentType`** interface represents a [Node] containing a doctype. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/DocumentType). |
| extension type DocumentType._(JSObject _) implements Node, JSObject { |
| /// The **`DocumentType.before()`** method inserts a set of |
| /// [Node] objects or strings in the children list of the |
| /// `DocumentType`'s parent, just before the `DocumentType`. |
| /// Strings are inserted as equivalent [Text] nodes. |
| external void before([ |
| JSAny node1, |
| JSAny node2, |
| JSAny node3, |
| JSAny node4, |
| ]); |
| |
| /// The **`DocumentType.after()`** method inserts a set of |
| /// [Node] objects or strings in the children list of the |
| /// `DocumentType`'s parent, just after the `DocumentType`. |
| /// Strings are inserted as equivalent [Text] nodes. |
| external void after([ |
| JSAny node1, |
| JSAny node2, |
| JSAny node3, |
| JSAny node4, |
| ]); |
| |
| /// The **`DocumentType.replaceWith()`** method replaces the document type |
| /// with a set of given nodes. |
| external void replaceWith([ |
| JSAny node1, |
| JSAny node2, |
| JSAny node3, |
| JSAny node4, |
| ]); |
| |
| /// The **`DocumentType.remove()`** method removes a document's `doctype`. |
| external void remove(); |
| |
| /// The read-only **`name`** property of the [DocumentType] returns the type |
| /// of the document. |
| /// |
| /// For synthetic `DocumentType`, this property reflects the value given in |
| /// parameter to [DOMImplementation.createDocumentType]. |
| /// |
| /// For HTML documents, browsers always set it up to `html`, whatever the |
| /// actual `doctype` in the source code is. |
| external String get name; |
| |
| /// The read-only **`publicId`** property of the [DocumentType] returns a |
| /// formal identifier of the document. |
| /// |
| /// For synthetic `DocumentType`, this property reflects the value given in |
| /// parameter to [DOMImplementation.createDocumentType]. |
| external String get publicId; |
| |
| /// The read-only **`systemId`** property of the [DocumentType] returns the |
| /// URL of the associated DTD. |
| /// |
| /// For synthetic `DocumentType`, this property reflects the value given in |
| /// parameter to [DOMImplementation.createDocumentType]. |
| external String get systemId; |
| } |
| |
| /// The **`DocumentFragment`** interface represents a minimal document object |
| /// that has no parent. |
| /// |
| /// It is used as a lightweight version of [Document] that stores a segment of a |
| /// document structure comprised of nodes just like a standard document. The key |
| /// difference is due to the fact that the document fragment isn't part of the |
| /// active document tree structure. Changes made to the fragment don't affect |
| /// the document. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment). |
| extension type DocumentFragment._(JSObject _) implements Node, JSObject { |
| external factory DocumentFragment(); |
| |
| /// The **`getElementById()`** method of the [DocumentFragment] returns an |
| /// [Element] object representing the element whose [Element.id] property |
| /// matches the specified string. Since element IDs are required to be unique |
| /// if specified, they're a useful way to get access to a specific element |
| /// quickly. |
| /// |
| /// If you need to get access to an element which doesn't have an ID, you can |
| /// use [Document.querySelector] to find the element using any . |
| /// |
| /// > [!NOTE] |
| /// > IDs should be unique inside a document fragment. If two or more elements |
| /// > in a document fragment have the same ID, this method returns the first |
| /// > element found. |
| external Element? getElementById(String elementId); |
| |
| /// The **`DocumentFragment.prepend()`** method |
| /// inserts a set of [Node] objects or strings before |
| /// the first child of the document fragment. Strings |
| /// are inserted as equivalent [Text] nodes. |
| /// |
| /// This method prepends a child to a `DocumentFragment`. To prepend to an |
| /// arbitrary element in the tree, see [Element.prepend]. |
| external void prepend([ |
| JSAny node1, |
| JSAny node2, |
| JSAny node3, |
| JSAny node4, |
| ]); |
| |
| /// The **`DocumentFragment.append()`** method |
| /// inserts a set of [Node] objects or strings after |
| /// the last child of the document fragment. Strings |
| /// are inserted as equivalent [Text] nodes. |
| /// |
| /// This method appends a child to a `DocumentFragment`. To append to an |
| /// arbitrary element in the tree, see [Element.append]. |
| external void append([ |
| JSAny node1, |
| JSAny node2, |
| JSAny node3, |
| JSAny node4, |
| ]); |
| |
| /// The **`DocumentFragment.replaceChildren()`** method replaces the |
| /// existing children of a `DocumentFragment` with a specified new set of |
| /// children. These |
| /// can be string or [Node] objects. |
| external void replaceChildren([ |
| JSAny node1, |
| JSAny node2, |
| JSAny node3, |
| JSAny node4, |
| ]); |
| |
| /// The **`DocumentFragment.querySelector()`** method returns the |
| /// first element, or `null` if no matches are found, within the |
| /// [DocumentFragment] (using depth-first pre-order traversal of the |
| /// document's nodes) that matches the specified group of selectors. |
| /// |
| /// If the selector matches an ID and this ID is erroneously used several |
| /// times in the |
| /// document, it returns the first matching element. |
| /// |
| /// If the selectors specified in parameter are invalid a [DOMException] with |
| /// a `SYNTAX_ERR` value is raised. |
| external Element? querySelector(String selectors); |
| |
| /// The **`DocumentFragment.querySelectorAll()`** method returns a |
| /// [NodeList] of elements within the [DocumentFragment] (using |
| /// depth-first pre-order traversal of the document's nodes) that matches the |
| /// specified |
| /// group of selectors. |
| /// |
| /// If the selectors specified in parameter are invalid a [DOMException] with |
| /// a `SYNTAX_ERR` value is raised. |
| external NodeList querySelectorAll(String selectors); |
| |
| /// The read-only **`children`** property returns a live [HTMLCollection] |
| /// which contains all of the child [Element] of the document fragment upon |
| /// which it was called. |
| external HTMLCollection get children; |
| |
| /// The **`DocumentFragment.firstElementChild`** read-only property |
| /// returns the document fragment's first child [Element], or `null` if there |
| /// are no child elements. |
| external Element? get firstElementChild; |
| |
| /// The **`DocumentFragment.lastElementChild`** read-only property |
| /// returns the document fragment's last child [Element], or `null` if there |
| /// are no child elements. |
| external Element? get lastElementChild; |
| |
| /// The **`DocumentFragment.childElementCount`** read-only property |
| /// returns the number of child elements of a `DocumentFragment`. |
| /// |
| /// To get the number of children of a specific element, see |
| /// [Element.childElementCount]. |
| external int get childElementCount; |
| } |
| |
| /// The **`ShadowRoot`** interface of the Shadow DOM API is the root node of a |
| /// DOM subtree that is rendered separately from a document's main DOM tree. |
| /// |
| /// You can retrieve a reference to an element's shadow root using its |
| /// [Element.shadowRoot] property, provided it was created using |
| /// [Element.attachShadow] with the `mode` option set to `open`. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot). |
| extension type ShadowRoot._(JSObject _) implements DocumentFragment, JSObject { |
| /// The **`setHTMLUnsafe()`** method of the [ShadowRoot] interface is used to |
| /// parse a string of HTML into a [DocumentFragment], which then replaces the |
| /// element's subtree in the DOM. |
| /// The input HTML may include |
| /// [declarative shadow roots](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template#declarative_shadow_dom). |
| /// |
| /// The suffix "Unsafe" in the method name indicates that the method does not |
| /// sanitize or remove potentially unsafe XSS-relevant input, such as |
| /// `<script>` elements, and script or event handler content attributes. |
| /// |
| /// If the string of HTML defines more than one |
| /// [declarative shadow root](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template#declarative_shadow_dom) |
| /// in a particular shadow host then only the first [ShadowRoot] is created — |
| /// subsequent declarations are parsed as `<template>` elements within that |
| /// shadow root. |
| /// |
| /// > [!NOTE] |
| /// > This method should be used instead of [ShadowRoot.innerHTML] when a |
| /// > string of HTML may contain declarative shadow roots. |
| external void setHTMLUnsafe(JSAny html); |
| |
| /// The **`getHTML()`** method of the [ShadowRoot] interface is used to |
| /// serialize a shadow root's DOM to an HTML string. |
| /// |
| /// The method provides an options argument that enables the serialization of |
| /// child nodes that are shadow roots. |
| /// The options can be used to include nested shadow roots that have been set |
| /// as [ShadowRoot.serializable], and/or a specified array of [ShadowRoot] |
| /// objects, which may be either open or closed. |
| /// |
| /// Without arguments, child nodes that are shadow roots are not serialized, |
| /// and this method behaves in the same way as reading the value of |
| /// [Element.innerHTML]. |
| external String getHTML([GetHTMLOptions options]); |
| |
| /// The **`getAnimations()`** method of the [ShadowRoot] interface |
| /// returns an array of all [Animation] objects currently in effect whose |
| /// target elements are descendants of the shadow tree. This array includes |
| /// [CSS Animations](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animations), |
| /// [CSS Transitions](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_transitions), |
| /// and |
| /// [Web Animations](https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API). |
| external JSArray<Animation> getAnimations(); |
| |
| /// The **`mode`** read-only property of the [ShadowRoot] specifies its mode — |
| /// either `open` or `closed`. |
| /// This defines whether or not the shadow root's internal features are |
| /// accessible from JavaScript. |
| /// |
| /// When the `mode` of a shadow root is `"closed"`, the shadow root's |
| /// implementation internals are inaccessible and unchangeable from |
| /// JavaScript—in the same way the implementation internals of, for example, |
| /// the `video` element are inaccessible and unchangeable from JavaScript. |
| /// |
| /// The property value is set using the `options.mode` property of the object |
| /// passed to [Element.attachShadow], or using the |
| /// [`shadowrootmode`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template#shadowrootmode) |
| /// attribute of the |
| /// [`<template>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template) |
| /// element when a shadow root is created declaratively. |
| external ShadowRootMode get mode; |
| |
| /// The **`delegatesFocus`** read-only property of the [ShadowRoot] interface |
| /// returns `true` if the shadow root delegates focus, and `false` otherwise. |
| /// |
| /// If `true`, when a non-focusable part of the shadow DOM is clicked, or |
| /// `.focus()` is called on the host element, the first focusable part inside |
| /// the host's shadow DOM is given focus, and the shadow host is given any |
| /// available `:focus` styling. |
| /// |
| /// Focus is of particular importance for keyboard users (including those |
| /// using screen readers). `delegatesFocus` default behavior is to focus the |
| /// first focusable element — which may be undesirable if that element is not |
| /// meant to be part of the tabbing order (for example, an element with |
| /// `tabindex="-1"`), or if a more 'important' focusable element should |
| /// receive initial focus (for instance, the first text field rather than the |
| /// 'close' button which precedes it). In such cases, the `autofocus` |
| /// attribute can be specified on the element which should receive initial |
| /// focus. Use the `autofocus` attribute with caution as it can introduce |
| /// accessibility issues, such as bypassing important content which may go |
| /// unnoticed due to focus being set to an element later in the DOM order. |
| /// |
| /// The property value is originally set using the `delegatesFocus` property |
| /// of the object passed to [Element.attachShadow], or using the |
| /// [`shadowrootdelegatesfocus`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template#shadowrootclonable) |
| /// attribute of the |
| /// [`<template>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template) |
| /// element when a shadow root is created declaratively. |
| external bool get delegatesFocus; |
| |
| /// The read-only **`slotAssignment`** property of the [ShadowRoot] interface |
| /// returns the _slot assignment mode_ for the shadow DOM tree. Nodes are |
| /// either automatically assigned (`named`) or manually assigned (`manual`). |
| /// The value of this property defined using the `slotAssignment` option when |
| /// calling [Element.attachShadow]. |
| external SlotAssignmentMode get slotAssignment; |
| |
| /// The **`clonable`** read-only property of the [ShadowRoot] interface |
| /// returns `true` if the shadow root is clonable, and `false` otherwise. |
| /// |
| /// When the value is `true`, a shadow host cloned with [Node.cloneNode] or |
| /// [Document.importNode] will include a copy of the shadow root. |
| /// |
| /// By default the value is `false`. |
| /// It can be set to `true` using the `clonable` option of the |
| /// [Element.attachShadow] method or by setting the |
| /// [`shadowrootclonable`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template#shadowrootclonable) |
| /// attribute of the `<template>` element that is being used to declaratively |
| /// attach a shadow root. |
| external bool get clonable; |
| |
| /// The **`serializable`** read-only property of the [ShadowRoot] interface |
| /// returns `true` if the shadow root is serializable. |
| /// |
| /// If set, the shadow root may be serialized by calling the [Element.getHTML] |
| /// or [ShadowRoot.getHTML] methods with the `options.serializableShadowRoots` |
| /// parameter set `true`. |
| /// |
| /// The serializable property of a shadow root is specified when the shadow |
| /// root is created, either declaratively by adding the |
| /// [`shadowrootserializable`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template#shadowrootserializable) |
| /// attribute on a `<template>` element (along with an allowed |
| /// [`shadowrootmode`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template#shadowrootmode) |
| /// value), or by setting the |
| /// [`options.serializable`](/en-US/docs/Web/API/Element/attachShadow#serializable) |
| /// parameter to `true` when using |
| /// [`Element.attachShadow()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/attachShadow). |
| external bool get serializable; |
| |
| /// The **`host`** read-only property of |
| /// the [ShadowRoot] returns a reference to the DOM element the |
| /// `ShadowRoot` is attached to. |
| external Element get host; |
| external EventHandler get onslotchange; |
| external set onslotchange(EventHandler value); |
| |
| /// The **`innerHTML`** property of the [ShadowRoot] |
| /// interface sets or returns a reference to the DOM tree inside the |
| /// `ShadowRoot`. |
| external JSAny get innerHTML; |
| external set innerHTML(JSAny value); |
| |
| /// The **`styleSheets`** read-only property of the [ShadowRoot] interface |
| /// returns a [StyleSheetList] of [CSSStyleSheet] objects, for stylesheets |
| /// explicitly linked into or embedded in a shadow tree. |
| external StyleSheetList get styleSheets; |
| |
| /// The **`adoptedStyleSheets`** property of the [ShadowRoot] interface sets |
| /// an array of constructed stylesheets to be used by the shadow DOM subtree. |
| /// |
| /// > [!NOTE] |
| /// > A constructed stylesheet is a stylesheet created programmatically using |
| /// > the [`CSSStyleSheet()` |
| /// > constructor](https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/CSSStyleSheet) |
| /// > (as compared to one created by a user-agent when importing a stylesheet |
| /// > from a script, imported using `style` and , or linked to via `link`). |
| /// |
| /// The same constructed stylesheet can be adopted by multiple [ShadowRoot] |
| /// instances, and by the parent document (using the |
| /// [Document.adoptedStyleSheets] property). |
| /// Changing an adopted stylesheet will affect all the adopting objects. |
| /// |
| /// Stylesheets in the `adoptedStyleSheets` property are considered along with |
| /// the shadow DOM's other stylesheets. |
| /// For the purpose of determining the final computed CSS of any element, they |
| /// are considered to have been added _after_ the other stylesheets in the |
| /// shadow DOM |
| /// ([`ShadowRoot.styleSheets`](https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot/styleSheets)). |
| /// |
| /// Only stylesheets created using the [`CSSStyleSheet()` |
| /// constructor](https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/CSSStyleSheet), |
| /// and from within the same parent [Document] as the shadow root, may be |
| /// adopted. |
| external JSArray<CSSStyleSheet> get adoptedStyleSheets; |
| external set adoptedStyleSheets(JSArray<CSSStyleSheet> value); |
| |
| /// The **`fullscreenElement`** read-only property of the |
| /// [ShadowRoot] interface returns the element within the shadow tree that is |
| /// currently displayed in full screen. |
| external Element? get fullscreenElement; |
| |
| /// The **`activeElement`** read-only property of the |
| /// [ShadowRoot] interface returns the element within the shadow tree that has |
| /// focus. |
| external Element? get activeElement; |
| |
| /// The **`pictureInPictureElement`** read-only property of the |
| /// [ShadowRoot] interface returns the [Element] that is currently being |
| /// presented in picture-in-picture mode in this shadow tree, or `null` if |
| /// picture-in-picture mode is not currently in use. |
| external Element? get pictureInPictureElement; |
| |
| /// The **`pointerLockElement`** read-only property of the [ShadowRoot] |
| /// interface provides the element set as the target for mouse events while |
| /// the pointer is locked. |
| /// It is `null` if lock is pending, pointer is unlocked, or the target is in |
| /// another tree. |
| external Element? get pointerLockElement; |
| } |
| |
| /// **`Element`** is the most general base class from which all element objects |
| /// (i.e. objects that represent elements) in a [Document] inherit. It only has |
| /// methods and properties common to all kinds of elements. More specific |
| /// classes inherit from `Element`. |
| /// |
| /// For example, the [HTMLElement] interface is the base interface for HTML |
| /// elements. Similarly, the [SVGElement] interface is the basis for all SVG |
| /// elements, and the [MathMLElement] interface is the base interface for MathML |
| /// elements. Most functionality is specified further down the class hierarchy. |
| /// |
| /// Languages outside the realm of the Web platform, like XUL through the |
| /// `XULElement` interface, also implement `Element`. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/Element). |
| extension type Element._(JSObject _) implements Node, JSObject { |
| /// The **`hasAttributes()`** method of the [Element] |
| /// interface returns a boolean value indicating whether the current element |
| /// has any |
| /// attributes or not. |
| external bool hasAttributes(); |
| |
| /// The **`getAttributeNames()`** method of the |
| /// [Element] interface returns the attribute names of the element as an |
| /// `Array` of strings. If the element has no attributes it returns an empty |
| /// array. |
| /// |
| /// Using `getAttributeNames()` along with |
| /// [Element.getAttribute], is a memory-efficient and |
| /// performant alternative to accessing [Element.attributes]. |
| /// |
| /// The names returned by **`getAttributeNames()`** are _qualified_ attribute |
| /// names, meaning that attributes with a namespace prefix have their names |
| /// returned with that namespace prefix (_not_ the actual namespace), followed |
| /// by a colon, followed by the attribute name (for example, |
| /// **`xlink:href`**), while any attributes which have no namespace prefix |
| /// have their names returned as-is (for example, **`href`**). |
| external JSArray<JSString> getAttributeNames(); |
| |
| /// The **`getAttribute()`** method of the |
| /// [Element] interface returns the value of a specified attribute on the |
| /// element. |
| /// |
| /// If the given attribute does not exist, the value returned will be `null`. |
| /// |
| /// If you need to inspect the [Attr] node's properties, you can use the |
| /// [Element.getAttributeNode] method instead. |
| external String? getAttribute(String qualifiedName); |
| |
| /// The **`getAttributeNS()`** method of the [Element] |
| /// interface returns the string value of the attribute with the specified |
| /// namespace and |
| /// name. If the named attribute does not exist, the value returned will |
| /// either be |
| /// `null` or `""` (the empty string); see [Notes](#notes) for |
| /// details. |
| /// |
| /// If you are working with HTML documents and you don't need to specify the |
| /// requested attribute as being part of a specific namespace, use the |
| /// [Element.getAttribute] method instead. |
| external String? getAttributeNS( |
| String? namespace, |
| String localName, |
| ); |
| |
| /// The **`setAttribute()`** method of the [Element] interface sets the value |
| /// of an attribute on the specified element. If the attribute already exists, |
| /// the value is updated; otherwise a new attribute is added with the |
| /// specified name and value. |
| /// |
| /// To get the current value of an attribute, use [Element.getAttribute]; to |
| /// remove an attribute, call [Element.removeAttribute]. |
| /// |
| /// If you need to work with the [Attr] node (such as cloning from another |
| /// element) before adding it, you can use the [Element.setAttributeNode] |
| /// method instead. |
| external void setAttribute( |
| String qualifiedName, |
| String value, |
| ); |
| |
| /// `setAttributeNS` adds a new attribute or changes the value of an attribute |
| /// with the given namespace and name. |
| /// |
| /// If you are working with HTML documents and you don't need to specify the |
| /// requested attribute as being part of a specific namespace, use the |
| /// [Element.setAttribute] method instead. |
| external void setAttributeNS( |
| String? namespace, |
| String qualifiedName, |
| String value, |
| ); |
| |
| /// The [Element] method |
| /// **`removeAttribute()`** removes the attribute with the |
| /// specified name from the element. |
| external void removeAttribute(String qualifiedName); |
| |
| /// The **`removeAttributeNS()`** method of the |
| /// [Element] interface removes the specified attribute with the specified |
| /// namespace from an element. |
| /// |
| /// If you are working with HTML and you don't need to specify the requested |
| /// attribute as being part of a specific namespace, use the |
| /// [Element.removeAttribute] method instead. |
| external void removeAttributeNS( |
| String? namespace, |
| String localName, |
| ); |
| |
| /// The **`toggleAttribute()`** method of the |
| /// [Element] interface toggles a Boolean attribute (removing it if it is |
| /// present and adding it if it is not present) on the given element. |
| external bool toggleAttribute( |
| String qualifiedName, [ |
| bool force, |
| ]); |
| |
| /// The **`Element.hasAttribute()`** method returns a |
| /// **Boolean** value indicating whether the specified element has the |
| /// specified attribute or not. |
| external bool hasAttribute(String qualifiedName); |
| |
| /// The **`hasAttributeNS()`** method of the [Element] interface returns a |
| /// boolean value indicating whether the current element has the specified |
| /// attribute with the specified namespace. |
| /// |
| /// If you are working with HTML documents and you don't need to specify the |
| /// requested attribute as being part of a specific namespace, use the |
| /// [Element.hasAttribute] method instead. |
| external bool hasAttributeNS( |
| String? namespace, |
| String localName, |
| ); |
| |
| /// Returns the specified attribute of the specified element, as an [Attr] |
| /// node. |
| /// |
| /// This method is useful if you need the attribute's |
| /// [instance properties](https://developer.mozilla.org/en-US/docs/Web/API/Attr#instance_properties). |
| /// If you only need the attribute's value, you can use the |
| /// [Element.getAttribute] method instead. |
| external Attr? getAttributeNode(String qualifiedName); |
| |
| /// The **`getAttributeNodeNS()`** method of the [Element] interface returns |
| /// the namespaced [Attr] node of an element. |
| /// |
| /// This method is useful if you need the namespaced attribute's |
| /// [instance properties](https://developer.mozilla.org/en-US/docs/Web/API/Attr#instance_properties). |
| /// If you only need the namespaced attribute's value, you can use the |
| /// [Element.getAttributeNS] method instead. |
| /// |
| /// If you need the [Attr] node of an element in HTML documents and the |
| /// attribute is not namespaced, use the [Element.getAttributeNode] method |
| /// instead. |
| external Attr? getAttributeNodeNS( |
| String? namespace, |
| String localName, |
| ); |
| |
| /// The **`setAttributeNode()`** method of the [Element] interface adds a new |
| /// [Attr] node to the specified element. |
| /// |
| /// If you don't need to work with the attribute node (such as cloning from |
| /// another element) before adding it, you can use the [Element.setAttribute] |
| /// method instead. |
| external Attr? setAttributeNode(Attr attr); |
| |
| /// The **`setAttributeNodeNS()`** method of the [Element] interface adds a |
| /// new namespaced [Attr] node to an element. |
| /// |
| /// If you don't need to work with the attribute node (such as cloning from |
| /// another element) before adding it, you can use the |
| /// [Element.setAttributeNS] method instead. |
| /// |
| /// If you are working with HTML documents and you don't need to specify the |
| /// requested attribute as being part of a specific namespace, use the |
| /// [Element.setAttribute] method instead. |
| external Attr? setAttributeNodeNS(Attr attr); |
| |
| /// The **`removeAttributeNode()`** method of the [Element] interface removes |
| /// the specified [Attr] node from the element. |
| /// |
| /// If you don't need to inspect the attribute node before removing it, you |
| /// can use the [Element.removeAttribute] method instead. |
| external Attr removeAttributeNode(Attr attr); |
| |
| /// The **`Element.attachShadow()`** method attaches a shadow DOM tree to the |
| /// specified element and returns a reference to its [ShadowRoot]. |
| external ShadowRoot attachShadow(ShadowRootInit init); |
| |
| /// The **`closest()`** method of the [Element] interface traverses the |
| /// element and its parents (heading toward the document root) until it finds |
| /// a node that matches the specified |
| /// [CSS selector](https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics/Basic_selectors). |
| external Element? closest(String selectors); |
| |
| /// The **`matches()`** method of the [Element] interface tests whether the |
| /// element would be selected by the specified |
| /// [CSS selector](https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics/Basic_selectors). |
| external bool matches(String selectors); |
| |
| /// The |
| /// **`Element.getElementsByTagName()`** method returns a live |
| /// [HTMLCollection] of elements with the given |
| /// [tag name](https://developer.mozilla.org/en-US/docs/Web/API/Element/tagName). |
| /// |
| /// All descendants of the |
| /// specified element are searched, but not the element itself. The returned |
| /// list is |
| /// _live_, which means it updates itself with the DOM tree automatically. |
| /// Therefore, there is no need to call `Element.getElementsByTagName()` with |
| /// the same element and arguments repeatedly if the DOM changes in between |
| /// calls. |
| /// |
| /// When called on an HTML element in an HTML document, `getElementsByTagName` |
| /// lower-cases the argument before searching for it. This is undesirable when |
| /// trying to |
| /// match SVG elements (such as |
| /// [`<linearGradient>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/linearGradient)) |
| /// in an HTML document. Instead, use [Element.getElementsByTagNameNS], |
| /// which preserves the capitalization of the tag name. |
| /// |
| /// `Element.getElementsByTagName` is similar to |
| /// [Document.getElementsByTagName], except that it only searches for |
| /// elements that are descendants of the specified element. |
| external HTMLCollection getElementsByTagName(String qualifiedName); |
| |
| /// The **`Element.getElementsByTagNameNS()`** method returns a |
| /// live [HTMLCollection] of elements with the given tag name belonging to the |
| /// given namespace. It is similar to [Document.getElementsByTagNameNS], |
| /// except |
| /// that its search is restricted to descendants of the specified element. |
| external HTMLCollection getElementsByTagNameNS( |
| String? namespace, |
| String localName, |
| ); |
| |
| /// The [Element] method |
| /// **`getElementsByClassName()`** returns a live |
| /// [HTMLCollection] which contains every descendant element which has the |
| /// specified class name or names. |
| /// |
| /// The method [Document.getElementsByClassName] |
| /// on the [Document] interface works essentially the same way, except it acts |
| /// on the entire document, starting at the document root. |
| external HTMLCollection getElementsByClassName(String classNames); |
| |
| /// The **`insertAdjacentElement()`** method of the |
| /// [Element] interface inserts a given element node at a given position |
| /// relative to the element it is invoked upon. |
| external Element? insertAdjacentElement( |
| String where, |
| Element element, |
| ); |
| |
| /// The **`insertAdjacentText()`** method of the [Element] interface, given a |
| /// relative position and a string, inserts a new text node at the given |
| /// position relative to the element it is called from. |
| external void insertAdjacentText( |
| String where, |
| String data, |
| ); |
| |
| /// The **`computedStyleMap()`** method of |
| /// the [Element] interface returns a [StylePropertyMapReadOnly] |
| /// interface which provides a read-only representation of a CSS declaration |
| /// block that is |
| /// an alternative to [CSSStyleDeclaration]. |
| external StylePropertyMapReadOnly computedStyleMap(); |
| |
| /// The **`getClientRects()`** method of the [Element] |
| /// interface returns a collection of [DOMRect] objects that indicate the |
| /// bounding rectangles for each |
| /// [CSS border box](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_box_model/Introduction_to_the_CSS_box_model) |
| /// in a client. |
| /// |
| /// Most elements only have one border box each, but a multiline |
| /// [inline-level element](https://developer.mozilla.org/en-US/docs/Glossary/Inline-level_content) |
| /// (such as a multiline |
| /// `span` element, by default) has a border box around each line. |
| external DOMRectList getClientRects(); |
| |
| /// The **`Element.getBoundingClientRect()`** method returns a |
| /// [DOMRect] object providing information about the size of an element and |
| /// its |
| /// position relative to the |
| /// [viewport](https://developer.mozilla.org/en-US/docs/Glossary/Viewport). |
| external DOMRect getBoundingClientRect(); |
| |
| /// The **`checkVisibility()`** method of the [Element] interface checks |
| /// whether the element is visible. |
| /// |
| /// The method returns `false` in either of the following situations: |
| /// |
| /// - The element doesn't have an associated box, for example because the CSS |
| /// `display` property is set to |
| /// [`none`](https://developer.mozilla.org/en-US/docs/Web/CSS/display#none) |
| /// or |
| /// [`contents`](https://developer.mozilla.org/en-US/docs/Web/CSS/display#contents). |
| /// - The element is not being rendered because the element or an ancestor |
| /// element sets the property to |
| /// [`hidden`](https://developer.mozilla.org/en-US/docs/Web/CSS/content-visibility#hidden). |
| /// |
| /// The optional parameter enables additional checks to test for other |
| /// interpretations of what "visible" means. |
| /// For example, you can further check whether an element has an opacity of |
| /// `0`, if the value of the element |
| /// [`visibility`](https://developer.mozilla.org/en-US/docs/Web/CSS/visibility) |
| /// property makes it invisible, or if the element property has a value of |
| /// [`auto`](https://developer.mozilla.org/en-US/docs/Web/CSS/content-visibility#auto) |
| /// and its rendering is currently being skipped. |
| external bool checkVisibility([CheckVisibilityOptions options]); |
| |
| /// The [Element] interface's |
| /// **`scrollIntoView()`** method scrolls the element's ancestor |
| /// containers such that the element on which `scrollIntoView()` is called is |
| /// visible to the user. |
| external void scrollIntoView([JSAny arg]); |
| |
| /// The **`scroll()`** method of the [Element] |
| /// interface scrolls the element to a particular set of coordinates inside a |
| /// given |
| /// element. |
| external void scroll([ |
| JSAny optionsOrX, |
| num y, |
| ]); |
| |
| /// The **`scrollTo()`** method of the [Element] |
| /// interface scrolls to a particular set of coordinates inside a given |
| /// element. |
| external void scrollTo([ |
| JSAny optionsOrX, |
| num y, |
| ]); |
| |
| /// The **`scrollBy()`** method of the [Element] |
| /// interface scrolls an element by the given amount. |
| external void scrollBy([ |
| JSAny optionsOrX, |
| num y, |
| ]); |
| |
| /// The **`Element.requestFullscreen()`** |
| /// method issues an asynchronous request to make the element be displayed in |
| /// fullscreen |
| /// mode. |
| /// |
| /// It's not guaranteed that the element will be put into full screen mode. If |
| /// permission |
| /// to enter full screen mode is granted, the returned `Promise` will resolve |
| /// and the element will receive a [Element.fullscreenchange_event] event to |
| /// let it know that |
| /// it's now in full screen mode. If permission is denied, the promise is |
| /// rejected and the |
| /// element receives a [Element.fullscreenerror_event] event instead. If the |
| /// element has been |
| /// detached from the original document, then the document receives these |
| /// events instead. |
| external JSPromise<JSAny?> requestFullscreen([FullscreenOptions options]); |
| |
| /// The **`setHTMLUnsafe()`** method of the [Element] interface is used to |
| /// parse a string of HTML into a [DocumentFragment], which then replaces the |
| /// element's subtree in the DOM. |
| /// The input HTML may include |
| /// [declarative shadow roots](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template#declarative_shadow_dom). |
| /// |
| /// The suffix "Unsafe" in the method name indicates that the method does not |
| /// sanitize or remove potentially unsafe XSS-relevant input, such as |
| /// `<script>` elements, and script or event handler content attributes. |
| /// |
| /// If the string of HTML defines more than one |
| /// [declarative shadow root](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template#declarative_shadow_dom) |
| /// in a particular shadow host then only the first [ShadowRoot] is created — |
| /// subsequent declarations are parsed as `<template>` elements within that |
| /// shadow root. |
| /// |
| /// > [!NOTE] |
| /// > This method should be used instead of [Element.innerHTML] when a string |
| /// > of HTML may contain declarative shadow roots. |
| external void setHTMLUnsafe(JSAny html); |
| |
| /// The **`getHTML()`** method of the [Element] interface is used to serialize |
| /// an element's DOM to an HTML string. |
| /// |
| /// The method provides an options argument that enables the serialization of |
| /// child nodes that are shadow roots. |
| /// The options can be used to include nested shadow roots that have been set |
| /// as [ShadowRoot.serializable], and/or a specified array of [ShadowRoot] |
| /// objects, which may be either open or closed. |
| /// |
| /// Without arguments, child nodes that are shadow roots are not serialized, |
| /// and this method behaves in the same way as reading the value of |
| /// [Element.innerHTML]. |
| external String getHTML([GetHTMLOptions options]); |
| |
| /// The **`insertAdjacentHTML()`** method of the |
| /// [Element] interface parses the specified text as HTML or XML and inserts |
| /// the resulting nodes into the DOM tree at a specified position. |
| external void insertAdjacentHTML( |
| String position, |
| JSAny string, |
| ); |
| |
| /// The **`setPointerCapture()`** method of the |
| /// [Element] interface is used to designate a specific element as the |
| /// _capture target_ of future pointer events. Subsequent events for the |
| /// pointer will |
| /// be targeted at the capture element until capture is released (via |
| /// [Element.releasePointerCapture] or the |
| /// [Element.pointerup_event] event is fired). |
| /// |
| /// See |
| /// [pointer events](https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events#pointer_capture) |
| /// for an overview and examples of how pointer capture works. |
| external void setPointerCapture(int pointerId); |
| |
| /// The **`releasePointerCapture()`** method of the |
| /// [Element] interface releases (stops) |
| /// [_pointer capture_](https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events#pointer_capture) |
| /// that was |
| /// previously set for a specific ([PointerEvent]) _pointer_. |
| external void releasePointerCapture(int pointerId); |
| |
| /// The **`hasPointerCapture()`** method of the |
| /// [Element] interface checks whether the element on which it is invoked has |
| /// [pointer capture](https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events#pointer_capture) |
| /// for the pointer identified by the given pointer ID. |
| external bool hasPointerCapture(int pointerId); |
| |
| /// The **`requestPointerLock()`** method of the [Element] interface lets you |
| /// asynchronously ask for the pointer to be locked on the given element. |
| /// |
| /// To track the success or failure of the request, it is necessary to listen |
| /// for the [Document.pointerlockchange_event] and |
| /// [Document.pointerlockerror_event] events at the [Document] level. |
| /// |
| /// > [!NOTE] |
| /// > In the current specification, `requestPointerLock()` only communicates |
| /// > the success or failure of the request by firing |
| /// > [Document.pointerlockchange_event] or [Document.pointerlockerror_event] |
| /// > events. |
| /// > [A proposed update to the specification](https://github.com/w3c/pointerlock/pull/49) |
| /// > updates `requestPointerLock()` to return a `Promise` which communicates |
| /// > success or failure. This page documents the version that returns a |
| /// > `Promise`. However, note that this version is not yet a standard and is |
| /// > not implemented by all browsers. See |
| /// > [Browser compatibility](#browser_compatibility) for more information. |
| external JSPromise<JSAny?> requestPointerLock([PointerLockOptions options]); |
| |
| /// The **`Element.prepend()`** method inserts a set of |
| /// [Node] objects or strings before the first child |
| /// of the [Element]. Strings are inserted as |
| /// equivalent [Text] nodes. |
| external void prepend([ |
| JSAny node1, |
| JSAny node2, |
| JSAny node3, |
| JSAny node4, |
| ]); |
| |
| /// The **`Element.append()`** method |
| /// inserts a set of [Node] objects or strings after |
| /// the last child of the `Element`. Strings |
| /// are inserted as equivalent [Text] nodes. |
| /// |
| /// Differences from [Node.appendChild]: |
| /// |
| /// - `Element.append()` allows you to also append strings, whereas |
| /// `Node.appendChild()` only accepts [Node] |
| /// objects. |
| /// - `Element.append()` has no return value, whereas |
| /// `Node.appendChild()` returns the appended [Node] object. |
| /// - `Element.append()` can append several nodes and strings, whereas |
| /// `Node.appendChild()` can only append one node. |
| external void append([ |
| JSAny node1, |
| JSAny node2, |
| JSAny node3, |
| JSAny node4, |
| ]); |
| |
| /// The **`Element.replaceChildren()`** method replaces the |
| /// existing children of a [Node] with a specified new set of children. These |
| /// can be string or [Node] objects. |
| external void replaceChildren([ |
| JSAny node1, |
| JSAny node2, |
| JSAny node3, |
| JSAny node4, |
| ]); |
| |
| /// The **`querySelector()`** method of the [Element] |
| /// interface returns the first element that is a descendant of the element on |
| /// which it is |
| /// invoked that matches the specified group of selectors. |
| external Element? querySelector(String selectors); |
| |
| /// The [Element] method **`querySelectorAll()`** |
| /// returns a static (not live) [NodeList] representing a list of elements |
| /// matching the specified group of selectors which are descendants of the |
| /// element on which |
| /// the method was called. |
| external NodeList querySelectorAll(String selectors); |
| |
| /// The **`Element.before()`** method inserts a set of |
| /// [Node] objects or strings in the children list of this |
| /// `Element`'s parent, just before this `Element`. |
| /// Strings are inserted as equivalent [Text] nodes. |
| external void before([ |
| JSAny node1, |
| JSAny node2, |
| JSAny node3, |
| JSAny node4, |
| ]); |
| |
| /// The **`Element.after()`** method inserts a set of |
| /// [Node] objects or strings in the children list of the |
| /// `Element`'s parent, just after the `Element`. |
| /// Strings are inserted as equivalent [Text] nodes. |
| external void after([ |
| JSAny node1, |
| JSAny node2, |
| JSAny node3, |
| JSAny node4, |
| ]); |
| |
| /// The **`Element.replaceWith()`** method replaces this |
| /// `Element` in the children list of its parent with a set of |
| /// [Node] objects or strings. Strings are inserted as equivalent [Text] |
| /// nodes. |
| external void replaceWith([ |
| JSAny node1, |
| JSAny node2, |
| JSAny node3, |
| JSAny node4, |
| ]); |
| |
| /// The **`Element.remove()`** method removes the element from the DOM. |
| external void remove(); |
| |
| /// The [Element] interface's **`animate()`** method |
| /// is a shortcut method which creates a new [Animation], applies it to the |
| /// element, then plays the animation. It returns the created [Animation] |
| /// object instance. |
| /// |
| /// > [!NOTE] |
| /// > Elements can have multiple animations applied to them. You can get a |
| /// > list of the |
| /// > animations that affect an element by calling [Element.getAnimations]. |
| external Animation animate( |
| JSObject? keyframes, [ |
| JSAny options, |
| ]); |
| |
| /// The `getAnimations()` method of the [Element] interface |
| /// (specified on the `Animatable` mixin) returns an array of all |
| /// [Animation] objects affecting this element or which are scheduled to do so |
| /// in future. It can optionally return [Animation] objects for descendant |
| /// elements too. |
| /// |
| /// > [!NOTE] |
| /// > This array includes |
| /// > [CSS Animations](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animations), |
| /// > [CSS Transitions](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_transitions), |
| /// > and |
| /// > [Web Animations](https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API). |
| external JSArray<Animation> getAnimations([GetAnimationsOptions options]); |
| |
| /// The **`Element.namespaceURI`** read-only property returns the namespace |
| /// URI of the element, or `null` if the element is not in a namespace. |
| external String? get namespaceURI; |
| |
| /// The **`Element.prefix`** read-only property returns the |
| /// namespace prefix of the specified element, or `null` if no prefix is |
| /// specified. |
| external String? get prefix; |
| |
| /// The **`Element.localName`** read-only property returns the |
| /// local part of the qualified name of an element. |
| external String get localName; |
| |
| /// The **`tagName`** read-only property |
| /// of the [Element] interface returns the tag name of the element on which |
| /// it's called. |
| /// |
| /// For example, if the element is an `img`, its |
| /// `tagName` property is `IMG` (for HTML documents; it may be cased |
| /// differently for XML/XHTML documents). Note: You can use the |
| /// [Element.localName] property |
| /// to access the Element's local name — which for the case in the example is |
| /// `img` (lowercase). |
| external String get tagName; |
| |
| /// The **`id`** property of the [Element] interface |
| /// represents the element's identifier, reflecting the |
| /// [**`id`**](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id) |
| /// global attribute. |
| /// |
| /// If the `id` value is not the empty string, it must be unique in a |
| /// document. |
| /// |
| /// The `id` is often used with [Document.getElementById] to retrieve a |
| /// particular element. |
| /// Another common case is to use an element's |
| /// [ID as a selector](https://developer.mozilla.org/en-US/docs/Web/CSS/ID_selectors) |
| /// when styling the document with |
| /// [CSS](https://developer.mozilla.org/en-US/docs/Web/CSS). |
| /// |
| /// > [!NOTE] |
| /// > Identifiers are case-sensitive, but you should avoid creating |
| /// > IDs that differ only in the capitalization. |
| external String get id; |
| external set id(String value); |
| |
| /// The **`className`** property of the |
| /// [Element] interface gets and sets the value of the |
| /// [`class` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/class) |
| /// of the specified element. |
| external String get className; |
| external set className(String value); |
| |
| /// The **`Element.classList`** is a read-only property that |
| /// returns a live [DOMTokenList] collection of the `class` |
| /// attributes of the element. This can then be used to manipulate the class |
| /// list. |
| /// |
| /// Using `classList` is a convenient alternative to accessing an element's |
| /// list |
| /// of classes as a space-delimited string via [element.className]. |
| external DOMTokenList get classList; |
| |
| /// The **`slot`** property of the [Element] interface |
| /// returns the name of the shadow DOM slot the element is inserted in. |
| /// |
| /// A slot is a placeholder inside a |
| /// [web component](https://developer.mozilla.org/en-US/docs/Web/API/Web_components) |
| /// that users can fill with their own markup (see |
| /// [Using templates and slots](https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_templates_and_slots) |
| /// for more information). |
| external String get slot; |
| external set slot(String value); |
| |
| /// The **`Element.attributes`** property returns a live collection |
| /// of all attribute nodes registered to the specified node. It is a |
| /// [NamedNodeMap], not an `Array`, so it has no `Array` |
| /// methods and the [Attr] nodes' indexes may differ among browsers. To be |
| /// more |
| /// specific, `attributes` is a key/value pair of strings that represents any |
| /// information regarding that attribute. |
| external NamedNodeMap get attributes; |
| |
| /// The `Element.shadowRoot` read-only property |
| /// represents the shadow root hosted by the element. |
| /// |
| /// Use [Element.attachShadow] to add a shadow root to an existing element. |
| external ShadowRoot? get shadowRoot; |
| |
| /// The **`part`** property of the [Element] interface |
| /// represents the part identifier(s) of the element (i.e. set using the |
| /// `part` |
| /// attribute), returned as a [DOMTokenList]. These can be used to style parts |
| /// of a shadow DOM, via the pseudo-element. |
| external DOMTokenList get part; |
| |
| /// The **`Element.scrollTop`** property gets or sets the number of pixels by |
| /// which an element's content is scrolled from its top edge. This value is |
| /// subpixel precise in modern browsers, meaning that it isn't necessarily a |
| /// whole number. |
| external double get scrollTop; |
| external set scrollTop(num value); |
| |
| /// The **`Element.scrollLeft`** property gets or sets the number of pixels by |
| /// which an element's content is scrolled from its left edge. This value is |
| /// subpixel precise in modern browsers, meaning that it isn't necessarily a |
| /// whole number. |
| external double get scrollLeft; |
| external set scrollLeft(num value); |
| |
| /// The **`Element.scrollWidth`** read-only property is a |
| /// measurement of the width of an element's content, including content not |
| /// visible on the |
| /// screen due to overflow. |
| /// |
| /// The `scrollWidth` value is equal to the minimum width the element would |
| /// require in order to fit all the content in the viewport without using a |
| /// horizontal |
| /// scrollbar. The width is measured in the same way as [Element.clientWidth]: |
| /// it includes the element's padding, but not its border, margin or |
| /// vertical scrollbar (if present). It can also include the width of |
| /// pseudo-elements such |
| /// as or . If the element's content can fit |
| /// without a need for horizontal scrollbar, its `scrollWidth` is equal to |
| /// [Element.clientWidth]. |
| /// |
| /// > [!NOTE] |
| /// > This property will round the value to an integer. If you need a |
| /// > fractional value, |
| /// > use [Element.getBoundingClientRect]. |
| external int get scrollWidth; |
| |
| /// The **`Element.scrollHeight`** read-only property is a |
| /// measurement of the height of an element's content, including content not |
| /// visible on the |
| /// screen due to overflow. |
| /// |
| ///  |
| /// |
| /// The `scrollHeight` value is equal to the minimum height the element would |
| /// require in order to fit all the content in the viewport without using a |
| /// vertical |
| /// scrollbar. The height is measured in the same way as |
| /// [Element.clientHeight]: |
| /// it includes the element's padding, but not its border, margin or |
| /// horizontal scrollbar (if present). It can also include the height of |
| /// pseudo-elements |
| /// such as or . If the element's content can |
| /// fit without a need for vertical scrollbar, its `scrollHeight` is equal to |
| /// [Element.clientHeight] |
| /// |
| /// > [!NOTE] |
| /// > This property will round the value to an integer. If you need a |
| /// > fractional value, use |
| /// > [Element.getBoundingClientRect]. |
| external int get scrollHeight; |
| |
| /// The width of the top border of an element in pixels. It is a read-only, |
| /// integer |
| /// property of element. |
| /// |
| /// As it happens, all that lies between the two locations (`offsetTop` and |
| /// client area top) is the element's border. This is because the `offsetTop` |
| /// indicates the location of the top of the border (not the margin) while the |
| /// client area |
| /// starts immediately below the border, (client area includes padding.) |
| /// Therefore, the |
| /// **clientTop** value will always equal the integer portion of the |
| /// `.getComputedStyle()` value for "border-top-width". (Actually might be |
| /// Math.round(parseFloat()).) For example, if the computed "border-top-width" |
| /// is zero, |
| /// then **`clientTop`** is also zero. |
| /// |
| /// > [!NOTE] |
| /// > This property will round the value to an integer. If you |
| /// > need a fractional value, use [element.getBoundingClientRect]. |
| external int get clientTop; |
| |
| /// The width of the left border of an element in pixels. It includes the |
| /// width of the |
| /// vertical scrollbar if the text direction of the element is right-to-left |
| /// and if there |
| /// is an overflow causing a left vertical scrollbar to be rendered. |
| /// `clientLeft` does not include the left margin or the left padding. |
| /// `clientLeft` is read-only. |
| /// |
| /// > [!NOTE] |
| /// > This property will round the value to an integer. If you |
| /// > need a fractional value, use [element.getBoundingClientRect]. |
| /// |
| /// > [!NOTE] |
| /// > When an element has |
| /// > `display: inline`, `clientLeft` returns `0` |
| /// > regardless of the element's border. |
| external int get clientLeft; |
| |
| /// The **`Element.clientWidth`** property is zero for inline |
| /// elements and elements with no CSS; otherwise, it's the inner width of an |
| /// element in |
| /// pixels. It includes padding but excludes borders, margins, and vertical |
| /// scrollbars (if |
| /// present). |
| /// |
| /// When `clientWidth` is used on the root element (the |
| /// `<html>` element), (or on `<body>` if the document is |
| /// in quirks mode), the viewport's width (excluding any scrollbar) is |
| /// returned. |
| /// |
| /// > [!NOTE] |
| /// > This property will round the value to an integer. If you need |
| /// > a fractional value, use [element.getBoundingClientRect]. |
| external int get clientWidth; |
| |
| /// The **`Element.clientHeight`** read-only property is zero for |
| /// elements with no CSS or inline layout boxes; otherwise, it's the inner |
| /// height of an |
| /// element in pixels. It includes padding but excludes borders, margins, and |
| /// horizontal |
| /// scrollbars (if present). |
| /// |
| /// `clientHeight` can be calculated as: CSS `height` + CSS |
| /// `padding` - height of horizontal scrollbar (if present). |
| /// |
| /// When `clientHeight` is used on the root element (the |
| /// `<html>` element), (or on `<body>` if the document is |
| /// in quirks mode), the viewport's height (excluding any scrollbar) is |
| /// returned. |
| /// |
| /// > [!NOTE] |
| /// > This property will round the value to an integer. If you need |
| /// > a fractional value, use [element.getBoundingClientRect]. |
| external int get clientHeight; |
| |
| /// The **`currentCSSZoom`** read-only property of the [Element] interface |
| /// provides the "effective" |
| /// [CSS `zoom`](https://developer.mozilla.org/en-US/docs/Web/CSS/zoom) of an |
| /// element, taking into account the zoom applied to the element and all its |
| /// parent elements. |
| /// |
| /// The value calculated by multiplying the CSS `zoom` values of the element |
| /// and all of its parents. |
| /// For example, if three elements with zoom values of 2, 1.5, and 3, are |
| /// nested within each other, the most deeply nested element will have a |
| /// `currentCSSZoom` value of 9. |
| /// If the element doesn't have a CSS box, for example because `display: none` |
| /// is set on the element or one of its parents, then the `currentCSSZoom` is |
| /// set to 1. |
| /// |
| /// Note that some methods, such as [Element.getBoundingClientRect], return |
| /// dimensions and position that are relative to the viewport, and hence |
| /// include the effects of CSS `zoom`. |
| /// Other properties and methods return values that are relative to the |
| /// element itself, and do not include the effects of zooming. |
| /// These include, for example, `client*` properties such as |
| /// [Element.clientHeight], `scroll*()` methods like [Element.scroll], and |
| /// `offset*` properties such as [HTMLElement.offsetHeight]. |
| /// The `currentCSSZoom` property can be used to scale these values to adjust |
| /// for the effects of zooming. |
| external double get currentCSSZoom; |
| external EventHandler get onfullscreenchange; |
| external set onfullscreenchange(EventHandler value); |
| external EventHandler get onfullscreenerror; |
| external set onfullscreenerror(EventHandler value); |
| |
| /// The [Element] property **`innerHTML`** gets or sets the HTML or XML markup |
| /// contained within the element. |
| /// |
| /// More precisely, `innerHTML` gets a serialization of the nested child DOM |
| /// elements within the element, or sets HTML or XML that should be parsed to |
| /// replace the DOM tree within the element. |
| /// |
| /// To insert the HTML into the document rather than replace the contents of |
| /// an element, use the method [Element.insertAdjacentHTML]. |
| /// |
| /// The serialization of the DOM tree read from the property does not include |
| /// — if you want to get a HTML string that includes shadow roots, you must |
| /// instead use the [Element.getHTML] or [ShadowRoot.getHTML] methods. |
| /// Similarly, when setting element content using `innerHTML`, the HTML string |
| /// is parsed into DOM elements that do not contain shadow roots. |
| /// |
| /// So for example |
| /// [`<template>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template) |
| /// is parsed into as [HTMLTemplateElement], whether or not the |
| /// [`shadowrootmode`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template#shadowrootmode) |
| /// attribute is specified |
| /// In order to set an element's contents from an HTML string that includes |
| /// declarative shadow roots, you must use either [Element.setHTMLUnsafe] or |
| /// [ShadowRoot.setHTMLUnsafe]. |
| external JSAny get innerHTML; |
| external set innerHTML(JSAny value); |
| |
| /// The **`outerHTML`** attribute of the [Element] |
| /// DOM interface gets the serialized HTML fragment describing the element |
| /// including its |
| /// descendants. It can also be set to replace the element with nodes parsed |
| /// from the given |
| /// string. |
| /// |
| /// To only obtain the HTML representation of the contents of an element, or |
| /// to replace the |
| /// contents of an element, use the [Element.innerHTML] property |
| /// instead. |
| external JSAny get outerHTML; |
| external set outerHTML(JSAny value); |
| |
| /// The read-only **`children`** property returns a live [HTMLCollection] |
| /// which contains all of the child [Element] of the element upon which it was |
| /// called. |
| /// |
| /// `Element.children` includes only element nodes. To get all child nodes, |
| /// including non-element nodes like text and comment nodes, use |
| /// [Node.childNodes]. |
| external HTMLCollection get children; |
| |
| /// The **`Element.firstElementChild`** read-only property |
| /// returns an element's first child [Element], or `null` if there |
| /// are no child elements. |
| /// |
| /// `Element.firstElementChild` includes only element nodes. |
| /// To get all child nodes, including non-element nodes like text and comment |
| /// nodes, use [Node.firstChild]. |
| external Element? get firstElementChild; |
| |
| /// The **`Element.lastElementChild`** read-only property |
| /// returns an element's last child [Element], or `null` if there |
| /// are no child elements. |
| /// |
| /// `Element.lastElementChild` includes only element nodes. |
| /// To get all child nodes, including non-element nodes like text and comment |
| /// nodes, use [Node.lastChild]. |
| external Element? get lastElementChild; |
| |
| /// The **`Element.childElementCount`** read-only property |
| /// returns the number of child elements of this element. |
| external int get childElementCount; |
| |
| /// The **`Element.previousElementSibling`** |
| /// read-only property returns the [Element] immediately prior to the |
| /// specified |
| /// one in its parent's [Element.children] list, or `null` if the specified |
| /// element is the first one in the list. |
| external Element? get previousElementSibling; |
| |
| /// The **`Element.nextElementSibling`** read-only |
| /// property returns the element immediately following the specified one in |
| /// its parent's |
| /// [Element.children] list, or `null` if the specified element is the last |
| /// one in the list. |
| external Element? get nextElementSibling; |
| |
| /// The **`assignedSlot`** read-only |
| /// property of the [Element] interface returns an |
| /// [HTMLSlotElement] representing the `slot` element the |
| /// node is inserted in. |
| external HTMLSlotElement? get assignedSlot; |
| external String? get role; |
| external set role(String? value); |
| |
| /// The **`ariaAtomic`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-atomic`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-atomic) |
| /// attribute, which indicates whether assistive technologies will present |
| /// all, or only parts of, the changed region based on the change |
| /// notifications defined by the |
| /// [`aria-relevant`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-relevant) |
| /// attribute. |
| external String? get ariaAtomic; |
| external set ariaAtomic(String? value); |
| |
| /// The **`ariaAutoComplete`** property of the [Element] interface reflects |
| /// the value of the |
| /// [`aria-autocomplete`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-autocomplete) |
| /// attribute, which indicates whether inputting text could trigger display of |
| /// one or more predictions of the user's intended value for a combobox, |
| /// searchbox, or textbox and specifies how predictions would be presented if |
| /// they were made. |
| external String? get ariaAutoComplete; |
| external set ariaAutoComplete(String? value); |
| |
| /// The **`ariaBrailleLabel`** property of the [Element] interface reflects |
| /// the value of the |
| /// [`aria-braillelabel`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-braillelabel) |
| /// attribute, which defines the ARIA braille label of the element. |
| /// |
| /// This element label may be used by assistive technologies that can present |
| /// content in braille, but should only be set if a braille-specific label |
| /// would improve the user experience. |
| /// The |
| /// [`aria-braillelabel`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-braillelabel) |
| /// contains additional information about when the property should be set. |
| external String? get ariaBrailleLabel; |
| external set ariaBrailleLabel(String? value); |
| |
| /// The **`ariaBrailleRoleDescription`** property of the [Element] interface |
| /// reflects the value of the |
| /// [`aria-brailleroledescription`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-brailleroledescription) |
| /// attribute, which defines the ARIA braille role description of the element. |
| /// |
| /// This property may be used to provide an abbreviated version of the |
| /// [`aria-roledescription`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-roledescription) |
| /// value. |
| /// It should only be used if `aria-roledescription` is present and in the |
| /// rare case where it is too verbose for braille. |
| /// The |
| /// [`aria-brailleroledescription`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-brailleroledescription) |
| /// contains additional information about when the property should be set. |
| external String? get ariaBrailleRoleDescription; |
| external set ariaBrailleRoleDescription(String? value); |
| |
| /// The **`ariaBusy`** property of the [Element] interface reflects the value |
| /// of the |
| /// [`aria-busy`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-busy) |
| /// attribute, which indicates whether an element is being modified, as |
| /// assistive technologies may want to wait until the modifications are |
| /// complete before exposing them to the user. |
| external String? get ariaBusy; |
| external set ariaBusy(String? value); |
| |
| /// The **`ariaChecked`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-checked`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-checked) |
| /// attribute, which indicates the current "checked" state of checkboxes, |
| /// radio buttons, and other widgets that have a checked state. |
| /// |
| /// > [!NOTE] |
| /// > Where possible use an HTML `input` element with `type="checkbox"` as |
| /// > this element has built in semantics and does not require ARIA |
| /// > attributes. |
| external String? get ariaChecked; |
| external set ariaChecked(String? value); |
| |
| /// The **`ariaColCount`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-colcount`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-colcount) |
| /// attribute, which defines the number of columns in a table, grid, or |
| /// treegrid. |
| external String? get ariaColCount; |
| external set ariaColCount(String? value); |
| |
| /// The **`ariaColIndex`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-colindex`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-colindex) |
| /// attribute, which defines an element's column index or position with |
| /// respect to the total number of columns within a table, grid, or treegrid. |
| external String? get ariaColIndex; |
| external set ariaColIndex(String? value); |
| |
| /// The **`ariaColIndexText`** property of the [Element] interface reflects |
| /// the value of the |
| /// [`aria-colindextext`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-colindextext) |
| /// attribute, which defines a human readable text alternative of |
| /// aria-colindex. |
| external String? get ariaColIndexText; |
| external set ariaColIndexText(String? value); |
| |
| /// The **`ariaColSpan`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-colspan`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-colspan) |
| /// attribute, which defines the number of columns spanned by a cell or |
| /// gridcell within a table, grid, or treegrid. |
| external String? get ariaColSpan; |
| external set ariaColSpan(String? value); |
| |
| /// The **`ariaCurrent`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-current`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current) |
| /// attribute, which indicates the element that represents the current item |
| /// within a container or set of related elements. |
| external String? get ariaCurrent; |
| external set ariaCurrent(String? value); |
| |
| /// The **`ariaDescription`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-description`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description) |
| /// attribute, which defines a string value that describes or annotates the |
| /// current element. |
| external String? get ariaDescription; |
| external set ariaDescription(String? value); |
| |
| /// The **`ariaDisabled`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-disabled`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-disabled) |
| /// attribute, which indicates that the element is perceivable but disabled, |
| /// so it is not editable or otherwise operable. |
| /// |
| /// > [!NOTE] |
| /// > Where possible, use the `input` element with `type="button"` or the |
| /// > `button` element — because those elements have built in semantics and do |
| /// > not require ARIA attributes. |
| external String? get ariaDisabled; |
| external set ariaDisabled(String? value); |
| |
| /// The **`ariaExpanded`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-expanded`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-expanded) |
| /// attribute, which indicates whether a grouping element owned or controlled |
| /// by this element is expanded or collapsed. |
| external String? get ariaExpanded; |
| external set ariaExpanded(String? value); |
| |
| /// The **`ariaHasPopup`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-haspopup`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-haspopup) |
| /// attribute, which indicates the availability and type of interactive popup |
| /// element, such as menu or dialog, that can be triggered by an element. |
| external String? get ariaHasPopup; |
| external set ariaHasPopup(String? value); |
| |
| /// The **`ariaHidden`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-hidden`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden)) |
| /// attribute, which indicates whether the element is exposed to an |
| /// accessibility API. |
| external String? get ariaHidden; |
| external set ariaHidden(String? value); |
| external String? get ariaInvalid; |
| external set ariaInvalid(String? value); |
| |
| /// The **`ariaKeyShortcuts`** property of the [Element] interface reflects |
| /// the value of the `aria-keyshortcuts` attribute, which indicates keyboard |
| /// shortcuts that an author has implemented to activate or give focus to an |
| /// element. |
| external String? get ariaKeyShortcuts; |
| external set ariaKeyShortcuts(String? value); |
| |
| /// The **`ariaLabel`** property of the [Element] interface reflects the value |
| /// of the |
| /// [`aria-label`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label) |
| /// attribute, which defines a string value that labels the current element. |
| external String? get ariaLabel; |
| external set ariaLabel(String? value); |
| |
| /// The **`ariaLevel`** property of the [Element] interface reflects the value |
| /// of the `aria-level` attribute, which defines the hierarchical level of an |
| /// element within a structure. |
| /// |
| /// > [!NOTE] |
| /// > Where possible use an HTML `h1` or other correct heading level as these |
| /// > have built in semantics and do not require ARIA attributes. |
| external String? get ariaLevel; |
| external set ariaLevel(String? value); |
| |
| /// The **`ariaLive`** property of the [Element] interface reflects the value |
| /// of the |
| /// [`aria-live`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-live) |
| /// attribute, which indicates that an element will be updated, and describes |
| /// the types of updates the user agents, assistive technologies, and user can |
| /// expect from the |
| /// [live region](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions). |
| external String? get ariaLive; |
| external set ariaLive(String? value); |
| |
| /// The **`ariaModal`** property of the [Element] interface reflects the value |
| /// of the `aria-modal` attribute, which indicates whether an element is modal |
| /// when displayed. Applying the `aria-modal` property to an element with |
| /// `role="dialog"` replaces the technique of using aria-hidden on the |
| /// background for informing assistive technologies that content outside a |
| /// dialog is inert. |
| external String? get ariaModal; |
| external set ariaModal(String? value); |
| |
| /// The **`ariaMultiLine`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-multiline`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-multiline) |
| /// attribute, which indicates whether a text box accepts multiple lines of |
| /// input or only a single line. |
| /// |
| /// > [!NOTE] |
| /// > Where possible use an HTML `input` element with `type="text"` or a |
| /// > `textarea` as these have built in semantics and do not require ARIA |
| /// > attributes. |
| external String? get ariaMultiLine; |
| external set ariaMultiLine(String? value); |
| |
| /// The **`ariaMultiSelectable`** property of the [Element] interface reflects |
| /// the value of the |
| /// [`aria-multiselectable`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-multiselectable) |
| /// attribute, which indicates that the user may select more than one item |
| /// from the current selectable descendants. |
| /// |
| /// > [!NOTE] |
| /// > Where possible use an HTML `select` element as this has built in |
| /// > semantics and does not require ARIA attributes. |
| external String? get ariaMultiSelectable; |
| external set ariaMultiSelectable(String? value); |
| |
| /// The **`ariaOrientation`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-orientation`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-orientation) |
| /// attribute, which indicates whether the element's orientation is |
| /// horizontal, vertical, or unknown/ambiguous. |
| external String? get ariaOrientation; |
| external set ariaOrientation(String? value); |
| |
| /// The **`ariaPlaceholder`** property of the [Element] interface reflects the |
| /// value of the `aria-placeholder` attribute, which defines a short hint |
| /// intended to aid the user with data entry when the control has no value. |
| /// |
| /// > [!NOTE] |
| /// > Where possible use an HTML `input` element with `type="text"` or a |
| /// > `textarea` as these have built in semantics and do not require ARIA |
| /// > attributes. |
| external String? get ariaPlaceholder; |
| external set ariaPlaceholder(String? value); |
| |
| /// The **`ariaPosInSet`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-posinset`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-posinset) |
| /// attribute, which defines an element's number or position in the current |
| /// set of listitems or treeitems. |
| external String? get ariaPosInSet; |
| external set ariaPosInSet(String? value); |
| |
| /// The **`ariaPressed`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-pressed`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-pressed) |
| /// attribute, which indicates the current "pressed" state of toggle buttons. |
| /// |
| /// > [!NOTE] |
| /// > Where possible use an HTML `input` element with `type="button"` or the |
| /// > `button` element as these have built in semantics and do not require |
| /// > ARIA attributes. |
| external String? get ariaPressed; |
| external set ariaPressed(String? value); |
| |
| /// The **`ariaReadOnly`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-readonly`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-readonly) |
| /// attribute, which indicates that the element is not editable, but is |
| /// otherwise operable. |
| /// |
| /// > [!NOTE] |
| /// > Where possible use an HTML `input` element with `type="text"` or a |
| /// > `textarea` as these have built in semantics and do not require ARIA |
| /// > attributes. |
| external String? get ariaReadOnly; |
| external set ariaReadOnly(String? value); |
| |
| /// The **`ariaRequired`** property of the [Element] interface reflects the |
| /// value of the `aria-required` attribute, which indicates that user input is |
| /// required on the element before a form may be submitted. |
| /// |
| /// > [!NOTE] |
| /// > Where possible use an HTML `input` element with `type="text"` or a |
| /// > `textarea` as these have built in semantics and do not require ARIA |
| /// > attributes. |
| external String? get ariaRequired; |
| external set ariaRequired(String? value); |
| |
| /// The **`ariaRoleDescription`** property of the [Element] interface reflects |
| /// the value of the |
| /// [`aria-roledescription`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-roledescription) |
| /// attribute, which defines a human-readable, author-localized description |
| /// for the role of an element. |
| external String? get ariaRoleDescription; |
| external set ariaRoleDescription(String? value); |
| |
| /// The **`ariaRowCount`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-rowcount`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-rowcount) |
| /// attribute, which defines the total number of rows in a table, grid, or |
| /// treegrid. |
| external String? get ariaRowCount; |
| external set ariaRowCount(String? value); |
| |
| /// The **`ariaRowIndex`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-rowindex`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-rowindex) |
| /// attribute, which defines an element's row index or position with respect |
| /// to the total number of rows within a table, grid, or treegrid. |
| external String? get ariaRowIndex; |
| external set ariaRowIndex(String? value); |
| |
| /// The **`ariaRowIndexText`** property of the [Element] interface reflects |
| /// the value of the |
| /// [`aria-rowindextext`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-rowindextext) |
| /// attribute, which defines a human readable text alternative of |
| /// aria-rowindex. |
| external String? get ariaRowIndexText; |
| external set ariaRowIndexText(String? value); |
| |
| /// The **`ariaRowSpan`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-rowspan`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-rowspan) |
| /// attribute, which defines the number of rows spanned by a cell or gridcell |
| /// within a table, grid, or treegrid. |
| external String? get ariaRowSpan; |
| external set ariaRowSpan(String? value); |
| |
| /// The **`ariaSelected`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-selected`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-selected) |
| /// attribute, which indicates the current "selected" state of elements that |
| /// have a selected state. |
| external String? get ariaSelected; |
| external set ariaSelected(String? value); |
| |
| /// The **`ariaSetSize`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-setsize`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-setsize) |
| /// attribute, which defines the number of items in the current set of |
| /// listitems or treeitems. |
| external String? get ariaSetSize; |
| external set ariaSetSize(String? value); |
| |
| /// The **`ariaSort`** property of the [Element] interface reflects the value |
| /// of the |
| /// [`aria-sort`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-sort) |
| /// attribute, which indicates if items in a table or grid are sorted in |
| /// ascending or descending order. |
| external String? get ariaSort; |
| external set ariaSort(String? value); |
| |
| /// The **`ariaValueMax`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-valuemax`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-valuemax) |
| /// attribute, which defines the maximum allowed value for a range widget. |
| external String? get ariaValueMax; |
| external set ariaValueMax(String? value); |
| |
| /// The **`ariaValueMin`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-valuemin`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-valuemin) |
| /// attribute, which defines the minimum allowed value for a range widget. |
| external String? get ariaValueMin; |
| external set ariaValueMin(String? value); |
| |
| /// The **`ariaValueNow`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-valuenow`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-valuenow) |
| /// attribute, which defines the current value for a range widget. |
| external String? get ariaValueNow; |
| external set ariaValueNow(String? value); |
| |
| /// The **`ariaValueText`** property of the [Element] interface reflects the |
| /// value of the |
| /// [`aria-valuetext`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-valuetext) |
| /// attribute, which defines the human-readable text alternative of |
| /// aria-valuenow for a range widget. |
| external String? get ariaValueText; |
| external set ariaValueText(String? value); |
| } |
| extension type ShadowRootInit._(JSObject _) implements JSObject { |
| external factory ShadowRootInit({ |
| required ShadowRootMode mode, |
| bool delegatesFocus, |
| SlotAssignmentMode slotAssignment, |
| bool clonable, |
| bool serializable, |
| }); |
| |
| external ShadowRootMode get mode; |
| external set mode(ShadowRootMode value); |
| external bool get delegatesFocus; |
| external set delegatesFocus(bool value); |
| external SlotAssignmentMode get slotAssignment; |
| external set slotAssignment(SlotAssignmentMode value); |
| external bool get clonable; |
| external set clonable(bool value); |
| external bool get serializable; |
| external set serializable(bool value); |
| } |
| |
| /// The **`NamedNodeMap`** interface represents a collection of [Attr] objects. |
| /// Objects inside a `NamedNodeMap` are not in any particular order, unlike |
| /// [NodeList], although they may be accessed by an index as in an array. |
| /// |
| /// A `NamedNodeMap` object is _live_ and will thus be auto-updated if changes |
| /// are made to its contents internally or elsewhere. |
| /// |
| /// > [!NOTE] |
| /// > Although called `NamedNodeMap`, this interface doesn't deal with [Node] |
| /// > objects but with [Attr] objects, which are a specialized class of [Node] |
| /// > objects. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap). |
| extension type NamedNodeMap._(JSObject _) implements JSObject { |
| /// The **`item()`** method of the [NamedNodeMap] interface |
| /// returns the item in the map matching the index. |
| /// |
| /// > [!NOTE] |
| /// > This method is also called when you use the operator `[]` syntax. |
| /// > So, `myMap[i]` is equivalent to `myMap.item(i)` where `i` is a number. |
| external Attr? item(int index); |
| |
| /// The **`getNamedItem()`** method of the [NamedNodeMap] interface returns |
| /// the [Attr] corresponding to the given name, or `null` if there is no |
| /// corresponding attribute. |
| /// |
| /// > [!NOTE] |
| /// > This method is also called when you use the operator `[]` syntax. |
| /// > So, `myMap[str]` is equivalent to `myMap.getNamedItem(str)` where `str` |
| /// > is a string. |
| external Attr? getNamedItem(String qualifiedName); |
| |
| /// The **`getNamedItemNS()`** method of the [NamedNodeMap] interface returns |
| /// the [Attr] corresponding to the given local name in the given namespace, |
| /// or `null` if there is no corresponding attribute. |
| external Attr? getNamedItemNS( |
| String? namespace, |
| String localName, |
| ); |
| |
| /// The **`setNamedItem()`** method of the [NamedNodeMap] interface |
| /// puts the [Attr] identified by its name in the map. |
| /// If there is already an [Attr] with the same name in the map, |
| /// it is _replaced_. |
| external Attr? setNamedItem(Attr attr); |
| |
| /// The **`setNamedItemNS()`** method of the [NamedNodeMap] interface |
| /// puts the [Attr] identified by its name in the map. |
| /// If there was already an [Attr] with the same name in the map, |
| /// it is _replaced_. |
| /// |
| /// > [!NOTE] |
| /// > This method is an alias of `setNamedItem()` you can use them |
| /// > interchangeably. |
| external Attr? setNamedItemNS(Attr attr); |
| |
| /// The **`removeNamedItem()`** method of the [NamedNodeMap] interface |
| /// removes the [Attr] corresponding to the given name from the map. |
| external Attr removeNamedItem(String qualifiedName); |
| |
| /// The **`removeNamedItemNS()`** method of the [NamedNodeMap] interface |
| /// removes the [Attr] corresponding to the given namespace and local name |
| /// from the map. |
| external Attr removeNamedItemNS( |
| String? namespace, |
| String localName, |
| ); |
| |
| /// The read-only **`length`** property of the [NamedNodeMap] interface |
| /// is the number of objects stored in the map. |
| external int get length; |
| } |
| |
| /// The **`Attr`** interface represents one of an element's attributes as an |
| /// object. In most situations, you will directly retrieve the attribute value |
| /// as a string (e.g., [Element.getAttribute]), but some cases may require |
| /// interacting with `Attr` instances (e.g., [Element.getAttributeNode]). |
| /// |
| /// The core idea of an object of type `Attr` is the association between a |
| /// _name_ and a _value_. An attribute may also be part of a _namespace_ and, in |
| /// this case, it also has a URI identifying the namespace, and a prefix that is |
| /// an abbreviation for the namespace. |
| /// |
| /// The name is deemed _local_ when it ignores the eventual namespace prefix and |
| /// deemed _qualified_ when it includes the prefix of the namespace, if any, |
| /// separated from the local name by a colon (`:`). We have three cases: an |
| /// attribute outside of a namespace, an attribute inside a namespace without a |
| /// prefix defined, an attribute inside a namespace with a prefix: |
| /// |
| /// | Attribute | Namespace name | Namespace prefix | Attribute local name | Attribute qualified name | |
| /// | --------- | -------------- | ---------------- | -------------------- | ------------------------ | |
| /// | `myAttr` | _none_ | _none_ | `myAttr` | `myAttr` | |
| /// | `myAttr` | `mynamespace` | _none_ | `myAttr` | `myAttr` | |
| /// | `myAttr` | `mynamespace` | `myns` | `myAttr` | `myns:myAttr` | |
| /// |
| /// > [!NOTE] |
| /// > This interface represents only attributes present in the tree |
| /// > representation of the [Element], being a SVG, an HTML or a MathML element. |
| /// > It doesn't represent the _property_ of an interface associated with such |
| /// > element, such as [HTMLTableElement] for a `table` element. (See for more |
| /// > information about attributes and how they are _reflected_ into |
| /// > properties.) |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/Attr). |
| extension type Attr._(JSObject _) implements Node, JSObject { |
| /// The read-only **`namespaceURI`** property of the [Attr] interface returns |
| /// the namespace URI of the attribute, |
| /// or `null` if the element is not in a namespace. |
| /// |
| /// The namespace URI is set at the [Attr] creation and cannot be changed. |
| /// An attribute with a namespace can be created using |
| /// [Element.setAttributeNS]. |
| /// |
| /// > [!NOTE] |
| /// > An attribute does not inherit its namespace from the element it is |
| /// > attached to. |
| /// > If an attribute is not explicitly given a namespace, it has no |
| /// > namespace. |
| /// |
| /// The browser does not handle or enforce namespace validation per se. It is |
| /// up to the JavaScript |
| /// application to do any necessary validation. Note, too, that the namespace |
| /// prefix, once it |
| /// is associated with a particular attribute node, cannot be changed. |
| external String? get namespaceURI; |
| |
| /// The read-only **`prefix`** property of the [Attr] returns the namespace |
| /// prefix of the attribute, or `null` if no prefix is specified. |
| /// |
| /// The prefix is always in lower case, whatever case is used at the attribute |
| /// creation. |
| /// |
| /// > [!NOTE] |
| /// > Only XML supports namespaces. HTML does not. That means that the prefix |
| /// > of an attribute of an HTML element will always be `null`. |
| /// |
| /// Also, only the `xml` (for the `xml:lang` attribute), `xlink` (for the |
| /// `xlink:href`, `xlink:show`, `xlink:target` and `xlink:title` attributes) |
| /// and `xpath` namespaces are supported, and only on SVG and MathML elements. |
| external String? get prefix; |
| |
| /// The read-only **`localName`** property of the [Attr] interface returns the |
| /// _local part_ of the _qualified name_ of an attribute, that is the name of |
| /// the attribute, stripped from any namespace in front of it. For example, if |
| /// the qualified name is `xml:lang`, the returned local name is `lang`, if |
| /// the element supports that namespace. |
| /// |
| /// The local name is always in lower case, whatever case at the attribute |
| /// creation. |
| /// |
| /// > [!NOTE] |
| /// > HTML only supports a fixed set of namespaces on SVG and MathML elements. |
| /// > These are `xml` (for the `xml:lang` attribute), `xlink` (for the |
| /// > `xlink:href`, `xlink:show`, `xlink:target` and `xlink:title` attributes) |
| /// > and `xpath`. |
| /// > |
| /// > That means that the local name of an attribute of an HTML element is |
| /// > always be equal to its qualified name: Colons are treated as regular |
| /// > characters. In XML, like in SVG or MathML, the colon denotes the end of |
| /// > the prefix and what is before is the namespace; the local name may be |
| /// > different from the qualified name. |
| external String get localName; |
| |
| /// The read-only **`name`** property of the [Attr] interface returns the |
| /// _qualified name_ of an attribute, that is the name of the attribute, with |
| /// the namespace prefix, if any, in front of it. For example, if the local |
| /// name is `lang` and the namespace prefix is `xml`, the returned qualified |
| /// name is `xml:lang`. |
| /// |
| /// The qualified name is always in lower case, whatever case at the attribute |
| /// creation. |
| external String get name; |
| |
| /// The **`value`** property of the [Attr] interface contains the value of the |
| /// attribute. |
| external String get value; |
| external set value(String value); |
| |
| /// The read-only **`ownerElement`** property of the [Attr] interface returns |
| /// the [Element] the attribute belongs to. |
| external Element? get ownerElement; |
| |
| /// The read-only **`specified`** property of the [Attr] interface always |
| /// returns `true`. |
| external bool get specified; |
| } |
| |
| /// The **`CharacterData`** abstract interface represents a [Node] object that |
| /// contains characters. This is an abstract interface, meaning there aren't any |
| /// objects of type `CharacterData`: it is implemented by other interfaces like |
| /// [Text], [Comment], [CDATASection], or [ProcessingInstruction], which aren't |
| /// abstract. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/CharacterData). |
| extension type CharacterData._(JSObject _) implements Node, JSObject { |
| /// The **`substringData()`** method of the [CharacterData] interface |
| /// returns a portion of the existing data, |
| /// starting at the specified index |
| /// and extending for a given number of characters afterwards. |
| external String substringData( |
| int offset, |
| int count, |
| ); |
| |
| /// The **`appendData()`** method of the [CharacterData] interface |
| /// adds the provided data to the end of the node's current data. |
| external void appendData(String data); |
| |
| /// The **`insertData()`** method of the [CharacterData] interface |
| /// inserts the provided data into this `CharacterData` node's current data, |
| /// at the provided offset from the start of the existing data. |
| /// The provided data is spliced into the existing data. |
| external void insertData( |
| int offset, |
| String data, |
| ); |
| |
| /// The **`deleteData()`** method of the [CharacterData] interface |
| /// removes all or part of the data from this `CharacterData` node. |
| external void deleteData( |
| int offset, |
| int count, |
| ); |
| |
| /// The **`replaceData()`** method of the [CharacterData] interface removes a |
| /// certain number of characters of the existing text in a given |
| /// `CharacterData` node and replaces those characters with the text provided. |
| external void replaceData( |
| int offset, |
| int count, |
| String data, |
| ); |
| |
| /// The **`before()`** method of the [CharacterData] interface |
| /// inserts a set of [Node] objects and strings |
| /// in the children list of the `CharacterData`'s parent, just before the |
| /// `CharacterData` node. |
| /// |
| /// Strings are inserted as [Text] nodes; the string is being passed as |
| /// argument to the [Text.Text] constructor. |
| external void before([ |
| JSAny node1, |
| JSAny node2, |
| JSAny node3, |
| JSAny node4, |
| ]); |
| |
| /// The **`after()`** method of the [CharacterData] interface |
| /// inserts a set of [Node] objects or strings in the children list of the |
| /// object's parent, just after the object itself. |
| /// |
| /// Strings are inserted as [Text] nodes; the string is being passed as |
| /// argument to the [Text.Text] constructor. |
| external void after([ |
| JSAny node1, |
| JSAny node2, |
| JSAny node3, |
| JSAny node4, |
| ]); |
| |
| /// The **`replaceWith()`** method of the [CharacterData] interface |
| /// replaces this node in the children list of its parent |
| /// with a set of [Node] objects or string. |
| /// |
| /// Strings are inserted as [Text] nodes; the string is being passed as |
| /// argument to the [Text.Text] constructor. |
| external void replaceWith([ |
| JSAny node1, |
| JSAny node2, |
| JSAny node3, |
| JSAny node4, |
| ]); |
| |
| /// The **`remove()`** method of the [CharacterData] removes the text |
| /// contained in the node. |
| external void remove(); |
| |
| /// The **`data`** property of the [CharacterData] interface represent the |
| /// value of the current object's data. |
| external String get data; |
| external set data(String value); |
| |
| /// The read-only **`CharacterData.length`** property |
| /// returns the number of characters in the contained data, as a positive |
| /// integer. |
| external int get length; |
| |
| /// The read-only **`previousElementSibling`** property of the [CharacterData] |
| /// interface |
| /// returns the first [Element] before the current node in its parent's |
| /// children list, |
| /// or `null` if there is none. |
| external Element? get previousElementSibling; |
| |
| /// The read-only **`nextElementSibling`** property of the [CharacterData] |
| /// interface |
| /// returns the first [Element] node following the specified one in its |
| /// parent's |
| /// children list, or `null` if the specified element is the last one in the |
| /// list. |
| external Element? get nextElementSibling; |
| } |
| |
| /// The **`Text`** interface represents a text [Node] in a DOM tree. |
| /// |
| /// To understand what a text node is, consider the following document: |
| /// |
| /// ```html |
| /// <html lang="en" class="e"> |
| /// <head> |
| /// <title>Aliens?</title> |
| /// </head> |
| /// <body> |
| /// Why yes. |
| /// </body> |
| /// </html> |
| /// ``` |
| /// |
| /// In that document, there are five text nodes, with the following contents: |
| /// |
| /// - `"\n "` (after the `<head>` start tag, a newline followed by four |
| /// spaces) |
| /// - `"Aliens?"` (the contents of the `title` element) |
| /// - `"\n "` (after the `</head>` end tag, a newline followed by two spaces) |
| /// - `"\n "` (after the `<body>` start tag, a newline followed by two spaces) |
| /// - `"\n Why yes.\n \n\n"` (the contents of the `body` element) |
| /// |
| /// Each of those text nodes is an object that has the properties and methods |
| /// documented in this article. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/Text). |
| extension type Text._(JSObject _) implements CharacterData, JSObject { |
| external factory Text([String data]); |
| |
| /// The **`splitText()`** method of the [Text] interface |
| /// breaks the [Text] node into two nodes at the specified offset, |
| /// keeping both nodes in the tree as siblings. |
| /// |
| /// After the split, the current node contains all the content |
| /// up to the specified offset point, |
| /// and a newly created node of the same type contains the remaining text. |
| /// The newly created node is returned to the caller. |
| /// If the original node had a parent, the new node is inserted as the next |
| /// sibling of the original node. |
| /// If the offset is equal to the length of the original node, |
| /// the newly created node has no data. |
| /// |
| /// Separated text nodes can be concatenated using the [Node.normalize] |
| /// method. |
| external Text splitText(int offset); |
| |
| /// The read-only **`wholeText`** property of the [Text] interface |
| /// returns the full text of all [Text] nodes logically adjacent to the node. |
| /// The text is concatenated in document order. |
| /// This allows specifying any text node and obtaining all adjacent text as a |
| /// single string. |
| /// |
| /// > [!NOTE] |
| /// > This is similar to calling [Node.normalize] followed by reading the text |
| /// > value, |
| /// > but without modifying the tree. |
| external String get wholeText; |
| |
| /// The read-only **`assignedSlot`** property of the [Text] interface |
| /// returns the [HTMLSlotElement] object associated with the element. |
| external HTMLSlotElement? get assignedSlot; |
| } |
| |
| /// The **`CDATASection`** interface represents a CDATA section |
| /// that can be used within XML to include extended portions of unescaped text. |
| /// When inside a CDATA section, the symbols `<` and `&` don't need escaping |
| /// as they normally do. |
| /// |
| /// In XML, a CDATA section looks like: |
| /// |
| /// ```xml |
| /// <![CDATA[ … ]]> |
| /// ``` |
| /// |
| /// For example: |
| /// |
| /// ```xml |
| /// <foo> |
| /// Here is a CDATA section: <![CDATA[ < > & ]]> with all kinds of unescaped text. |
| /// </foo> |
| /// ``` |
| /// |
| /// The only sequence which is not allowed within a CDATA section is the closing |
| /// sequence |
| /// of a CDATA section itself, `]]>`. |
| /// |
| /// > [!NOTE] |
| /// > CDATA sections should not be used within HTML. They are considered |
| /// > comments and are not displayed. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/CDATASection). |
| extension type CDATASection._(JSObject _) implements Text, JSObject {} |
| |
| /// The **`ProcessingInstruction`** interface represents a |
| /// [processing instruction](https://www.w3.org/TR/xml/#sec-pi); that is, a |
| /// [Node] which embeds an instruction targeting a specific application but that |
| /// can be ignored by any other applications which don't recognize the |
| /// instruction. |
| /// |
| /// > **Warning:** `ProcessingInstruction` nodes are only supported in XML |
| /// > documents, not in HTML documents. In these, a process instruction will be |
| /// > considered as a comment and be represented as a [Comment] object in the |
| /// > tree. |
| /// |
| /// A processing instruction may be different than the |
| /// [XML declaration](https://developer.mozilla.org/en-US/docs/Web/XML/Guides/XML_introduction#xml_declaration). |
| /// |
| /// > [!NOTE] |
| /// > User-defined processing instructions cannot begin with `"xml"`, as |
| /// > `xml`-prefixed processing-instruction target names are reserved by the XML |
| /// > specification for particular, standard uses (see, for example, |
| /// > `<?xml-stylesheet ?>`. |
| /// |
| /// For example: |
| /// |
| /// ```html |
| /// <?xml version="1.0"?> |
| /// ``` |
| /// |
| /// is a processing instruction whose `target` is `xml`. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/ProcessingInstruction). |
| extension type ProcessingInstruction._(JSObject _) |
| implements CharacterData, JSObject { |
| /// The read-only **`target`** property of the [ProcessingInstruction] |
| /// interface |
| /// represent the application to which the `ProcessingInstruction` is |
| /// targeted. |
| /// |
| /// For example: |
| /// |
| /// ```html |
| /// <?xml version="1.0"?> |
| /// ``` |
| /// |
| /// is a processing instruction whose `target` is `xml`. |
| external String get target; |
| |
| /// The read-only **`sheet`** property of the [ProcessingInstruction] |
| /// interface |
| /// contains the stylesheet associated to the `ProcessingInstruction`. |
| /// |
| /// The `xml-stylesheet` processing instruction is used to associate a |
| /// stylesheet in an XML file. |
| external CSSStyleSheet? get sheet; |
| } |
| |
| /// The **`Comment`** interface represents textual notations within markup; |
| /// although it is generally not visually shown, such comments are available to |
| /// be read in the source view. |
| /// |
| /// Comments are represented in HTML and XML as content between `<!--` and |
| /// `-->`. In XML, like inside SVG or MathML markup, the character sequence `--` |
| /// cannot be used within a comment. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/Comment). |
| extension type Comment._(JSObject _) implements CharacterData, JSObject { |
| external factory Comment([String data]); |
| } |
| |
| /// The **`AbstractRange`** abstract interface is the base class upon which all |
| /// range types are defined. A **range** is an object that indicates the start |
| /// and end points of a section of content within the document. |
| /// |
| /// > [!NOTE] |
| /// > As an abstract interface, you will not directly instantiate an object of |
| /// > type `AbstractRange`. Instead, you will use the [Range] or [StaticRange] |
| /// > interfaces. To understand the difference between those two interfaces, and |
| /// > how to choose which is appropriate for your needs, consult each |
| /// > interface's documentation. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/AbstractRange). |
| extension type AbstractRange._(JSObject _) implements JSObject { |
| /// The read-only **`startContainer`** property of the [AbstractRange] |
| /// interface returns the start [Node] for the range. |
| external Node get startContainer; |
| |
| /// The read-only **`startOffset`** property of the [AbstractRange] interface |
| /// returns the offset into the start node of the range's start position. |
| external int get startOffset; |
| |
| /// The read-only **`endContainer`** property of the [AbstractRange] interface |
| /// returns the [Node] in which the end of the range is located. |
| external Node get endContainer; |
| |
| /// The **`endOffset`** property of the [AbstractRange] interface returns the |
| /// offset into the end node of the range's end position. |
| external int get endOffset; |
| |
| /// The read-only **`collapsed`** property of the [AbstractRange] interface |
| /// returns `true` if the range's start position and end position are the |
| /// same. |
| external bool get collapsed; |
| } |
| extension type StaticRangeInit._(JSObject _) implements JSObject { |
| external factory StaticRangeInit({ |
| required Node startContainer, |
| required int startOffset, |
| required Node endContainer, |
| required int endOffset, |
| }); |
| |
| external Node get startContainer; |
| external set startContainer(Node value); |
| external int get startOffset; |
| external set startOffset(int value); |
| external Node get endContainer; |
| external set endContainer(Node value); |
| external int get endOffset; |
| external set endOffset(int value); |
| } |
| |
| /// The |
| /// [DOM](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) |
| /// **`StaticRange`** interface extends [AbstractRange] to provide a method to |
| /// specify a range of content in the DOM whose contents don't update to reflect |
| /// changes which occur within the DOM tree. |
| /// |
| /// This interface offers the same set of properties and methods as |
| /// `AbstractRange`. |
| /// |
| /// `AbstractRange` and `StaticRange` are not available from |
| /// [web workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API). |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/StaticRange). |
| extension type StaticRange._(JSObject _) implements AbstractRange, JSObject { |
| external factory StaticRange(StaticRangeInit init); |
| } |
| |
| /// The **`Range`** interface represents a fragment of a document that can |
| /// contain nodes and parts of text nodes. |
| /// |
| /// A range can be created by using the [Document.createRange] method. Range |
| /// objects can also be retrieved by using the [Selection.getRangeAt] method of |
| /// the [Selection] object or the [Document.caretRangeFromPoint] method of the |
| /// [Document] object. |
| /// |
| /// There also is the [Range.Range] constructor available. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/Range). |
| extension type Range._(JSObject _) implements AbstractRange, JSObject { |
| external factory Range(); |
| |
| static const int START_TO_START = 0; |
| |
| static const int START_TO_END = 1; |
| |
| static const int END_TO_END = 2; |
| |
| static const int END_TO_START = 3; |
| |
| /// The **`Range.setStart()`** method sets the start position of a |
| /// [Range]. |
| /// |
| /// If the `startNode` is a [Node] of type [Text], |
| /// [Comment], or [CDataSection], then `startOffset` is |
| /// the number of characters from the start of `startNode`. For other |
| /// `Node` types, `startOffset` is the number of child nodes between |
| /// the start of the `startNode`. |
| /// |
| /// Setting the start point below (lower in the document) the end point will |
| /// result in a |
| /// collapsed range with the start and end points both set to the specified |
| /// start position. |
| external void setStart( |
| Node node, |
| int offset, |
| ); |
| |
| /// The **`Range.setEnd()`** method sets the end position of a [Range] to be |
| /// located at the given offset into the specified node x.Setting |
| /// the end point above (higher in the document) than the start point will |
| /// result in a |
| /// collapsed range with the start and end points both set to the specified |
| /// end position. |
| external void setEnd( |
| Node node, |
| int offset, |
| ); |
| |
| /// The **`Range.setStartBefore()`** method sets the start position |
| /// of a [Range] relative to another [Node]. The parent |
| /// [Node] of the start of the [Range] will be the same as that |
| /// for the `referenceNode`. |
| external void setStartBefore(Node node); |
| |
| /// The **`Range.setStartAfter()`** method sets the start position |
| /// of a [Range] relative to a [Node]. The parent |
| /// [Node] of the start of the [Range] will be the same as that |
| /// for the `referenceNode`. |
| external void setStartAfter(Node node); |
| |
| /// The **`Range.setEndBefore()`** method sets the end position of |
| /// a `Range` relative to another [Node]. The parent |
| /// `Node` of end of the `Range` will be the same as that for the |
| /// `referenceNode`. |
| external void setEndBefore(Node node); |
| |
| /// The **`Range.setEndAfter()`** method sets the end position of a |
| /// [Range] relative to another [Node]. The parent |
| /// `Node` of end of the `Range` will be the same as that for the |
| /// `referenceNode`. |
| external void setEndAfter(Node node); |
| |
| /// The **`Range.collapse()`** method collapses the |
| /// [Range] to one of its boundary points. |
| /// |
| /// A collapsed [Range] is empty, containing no content, specifying a |
| /// single-point in a DOM tree. To determine if a [Range] is already |
| /// collapsed, |
| /// see the [Range.collapsed] property. |
| external void collapse([bool toStart]); |
| |
| /// The **`Range.selectNode()`** method sets the |
| /// [Range] to contain the [Node] and its contents. The parent |
| /// [Node] of the start and end of the [Range] will be the same as |
| /// the parent of the _referenceNode_. |
| external void selectNode(Node node); |
| |
| /// The **`Range.selectNodeContents()`** method sets the [Range] to contain |
| /// the contents of a [Node]. |
| /// |
| /// The parent `Node` of the start and end of the `Range` will be the |
| /// reference node. The `startOffset` is 0, and the `endOffset` is the |
| /// number of child `Node`s or number of characters contained in the reference |
| /// node. |
| external void selectNodeContents(Node node); |
| |
| /// The |
| /// **`Range.compareBoundaryPoints()`** method compares the |
| /// boundary points of the [Range] with those of another range. |
| external int compareBoundaryPoints( |
| int how, |
| Range sourceRange, |
| ); |
| |
| /// The **`Range.deleteContents()`** method removes the contents of |
| /// the [Range] from the [Document]. |
| /// |
| /// In the context of a [Range], when a node is partially selected—meaning it |
| /// overlaps with the start or end of the selection—only the selected portion |
| /// of the text is deleted, while the node itself remains intact. However, if |
| /// a node is fully selected, the entire node and its contents are removed. |
| /// |
| /// Unlike [Range.extractContents], this method does not return a |
| /// [DocumentFragment] containing the deleted content. |
| external void deleteContents(); |
| |
| /// The **`Range.extractContents()`** method moves contents of the |
| /// [Range] from the document tree into a [DocumentFragment]. |
| /// |
| /// Event listeners added using DOM Events are not retained during extraction. |
| /// HTML |
| /// attribute events are retained or duplicated as they are for the |
| /// [Node.cloneNode] method. HTML `id` attributes are also cloned, |
| /// which can lead to an invalid document if a partially-selected node is |
| /// extracted and |
| /// appended to the document. |
| /// |
| /// Partially selected nodes are cloned to include the parent tags necessary |
| /// to make the |
| /// document fragment valid. |
| external DocumentFragment extractContents(); |
| |
| /// The **`Range.cloneContents()`** returns a [DocumentFragment] copying the |
| /// objects of type [Node] |
| /// included in the [Range]. |
| /// |
| /// Event listeners added using [EventTarget.addEventListener] |
| /// are not copied during cloning. HTML attribute events are duplicated as |
| /// they are |
| /// for the [Node.cloneNode] method. HTML `id` attributes |
| /// are also cloned, which can lead to an invalid document through cloning. |
| /// |
| /// Partially selected nodes include the parent tags necessary to make the |
| /// document |
| /// fragment valid. |
| external DocumentFragment cloneContents(); |
| |
| /// The **`Range.insertNode()`** method inserts a node at the start |
| /// of the [Range]. |
| /// |
| /// The new node is inserted at the start boundary point of the `Range`. If |
| /// the |
| /// new node is to be added to a text [Node], that `Node` is split |
| /// at the insertion point, and the insertion occurs between the two text |
| /// nodes. |
| /// |
| /// If the new node is a document fragment, the children of the document |
| /// fragment are |
| /// inserted instead. |
| external void insertNode(Node node); |
| |
| /// The **`Range.surroundContents()`** method moves content of the |
| /// [Range] into a new node, placing the new node at the start of the |
| /// specified range. |
| /// |
| /// This method is nearly equivalent to |
| /// `newNode.appendChild(range.extractContents()); range.insertNode(newNode)`. |
| /// After surrounding, the boundary points of the `range` include |
| /// `newNode`. |
| /// |
| /// An exception will be thrown, however, if the [Range] splits a non-[Text] |
| /// node with only one of its boundary points. That is, unlike the |
| /// alternative above, if there are partially selected nodes, they will not be |
| /// cloned and |
| /// instead the operation will fail. |
| external void surroundContents(Node newParent); |
| |
| /// The **`Range.cloneRange()`** method returns a |
| /// [Range] object with boundary points identical to the cloned |
| /// [Range]. |
| /// |
| /// The returned clone is copied by value, not reference, so a change in |
| /// either |
| /// [Range] does not affect the other. |
| external Range cloneRange(); |
| |
| /// The **`Range.detach()`** method does nothing. It used to |
| /// disable the [Range] object and enable the browser to release associated |
| /// resources. The method has been kept for compatibility. |
| external void detach(); |
| |
| /// The **`Range.isPointInRange()`** method returns a boolean |
| /// indicating whether the given point is in the [Range]. It returns |
| /// `true` if the point (cursor position) at `offset` within |
| /// `ReferenceNode` is within this range. |
| external bool isPointInRange( |
| Node node, |
| int offset, |
| ); |
| |
| /// The **`Range.comparePoint()`** method returns `-1`, |
| /// `0`, or `1` depending on whether the `referenceNode` is |
| /// before, the same as, or after the [Range]. |
| /// |
| /// If the _reference node_ is a [Node] of type [Text], |
| /// [Comment], or [CDATASection], then offset is the number of |
| /// characters from the start of _reference node_. For other [Node] |
| /// types, offset is the number of child nodes between the start of the |
| /// _reference |
| /// node_. |
| external int comparePoint( |
| Node node, |
| int offset, |
| ); |
| |
| /// The **`Range.intersectsNode()`** method returns a boolean |
| /// indicating whether the given [Node] intersects the [Range]. |
| external bool intersectsNode(Node node); |
| |
| /// The **`Range.getClientRects()`** method returns a list of [DOMRect] |
| /// objects representing the area of the screen occupied by the |
| /// [range](https://developer.mozilla.org/en-US/docs/Web/API/Range). This is |
| /// created by aggregating the results of calls to |
| /// [Element.getClientRects] for all the elements in the range. |
| external DOMRectList getClientRects(); |
| |
| /// The **`Range.getBoundingClientRect()`** method returns a [DOMRect] object |
| /// that bounds the contents of the range; this is a rectangle |
| /// enclosing the union of the bounding rectangles for all the elements in the |
| /// range. |
| /// |
| /// This method is useful for determining the viewport coordinates of the |
| /// cursor or |
| /// selection inside a text box. See [Element.getBoundingClientRect] for |
| /// details on the returned value. |
| external DOMRect getBoundingClientRect(); |
| |
| /// The **`Range.createContextualFragment()`** method returns a |
| /// [DocumentFragment] by invoking the HTML fragment parsing algorithm or the |
| /// XML fragment parsing algorithm with the start of the range (the _parent_ |
| /// of the |
| /// selected node) as the context node. The HTML fragment parsing algorithm is |
| /// used if the |
| /// range belongs to a `Document` whose HTMLness bit is set. In the HTML case, |
| /// if |
| /// the context node would be `html`, for historical reasons the fragment |
| /// parsing |
| /// algorithm is invoked with `body` as the context instead. |
| external DocumentFragment createContextualFragment(JSAny string); |
| |
| /// The **`Range.commonAncestorContainer`** read-only property |
| /// returns the deepest — or furthest down the document tree — [Node] that |
| /// contains both |
| /// [boundary points](https://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position-h3) |
| /// of the [Range]. This means that if |
| /// [Range.startContainer] and [Range.endContainer] both refer to |
| /// the same node, this node is the **common ancestor container**. |
| /// |
| /// Since a `Range` need not be continuous, and may also partially select |
| /// nodes, |
| /// this is a convenient way to find a `Node` which encloses a |
| /// `Range`. |
| /// |
| /// This property is read-only. To change the ancestor container of a `Node`, |
| /// consider using the various methods available to set the start and end |
| /// positions of the |
| /// `Range`, such as [Range.setStart] and |
| /// [Range.setEnd]. |
| external Node get commonAncestorContainer; |
| } |
| |
| /// The **`NodeIterator`** interface represents an iterator to traverse nodes of |
| /// a DOM subtree in document order. |
| /// |
| /// A `NodeIterator` can be created using the [Document.createNodeIterator] |
| /// method, as follows: |
| /// |
| /// ```js |
| /// const nodeIterator = document.createNodeIterator(root, whatToShow, filter); |
| /// ``` |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator). |
| extension type NodeIterator._(JSObject _) implements JSObject { |
| /// The **`NodeIterator.nextNode()`** method returns the next node |
| /// in the set represented by the [NodeIterator] and advances the position of |
| /// the iterator within the set. The first call to `nextNode()` returns the |
| /// first node in the set. |
| /// |
| /// This method returns `null` when there are no nodes left in the set. |
| /// |
| /// In old browsers, as specified in old versions of the specifications, the |
| /// method may |
| /// throws the `INVALID_STATE_ERR` [DOMException] if this method |
| /// is called after the [NodeIterator.detach] method. Recent browsers never |
| /// throw. |
| external Node? nextNode(); |
| |
| /// The **`NodeIterator.previousNode()`** method returns the |
| /// previous node in the set represented by the [NodeIterator] and moves the |
| /// position of the iterator backwards within the set. |
| /// |
| /// This method returns `null` when the current node is the first node in the |
| /// set. |
| /// |
| /// In old browsers, as specified in old versions of the specifications, the |
| /// method may |
| /// throws the `INVALID_STATE_ERR` [DOMException] if this method |
| /// is called after the [NodeIterator.detach] method. Recent browsers never |
| /// throw. |
| external Node? previousNode(); |
| |
| /// The **`NodeIterator.detach()`** method is a no-op, kept for |
| /// backward compatibility only. |
| /// |
| /// Originally, it detached the [NodeIterator] from the set over which it |
| /// iterates, releasing any resources used by the set and setting the |
| /// iterator's state to |
| /// `INVALID`. Once this method had been called, calls to other methods on |
| /// `NodeIterator` would raise the `INVALID_STATE_ERR` exception. |
| external void detach(); |
| |
| /// The **`NodeIterator.root`** read-only property represents the |
| /// [Node] that is the root of what the [NodeIterator] |
| /// traverses. |
| external Node get root; |
| |
| /// The **`NodeIterator.referenceNode`** read-only property returns the |
| /// [Node] to which the iterator is anchored; as new nodes are inserted, the |
| /// iterator remains anchored to the reference node as specified by this |
| /// property. |
| external Node get referenceNode; |
| |
| /// The **`NodeIterator.pointerBeforeReferenceNode`** read-only |
| /// property returns a boolean flag that indicates whether the |
| /// `NodeFilter` is anchored before (if this value is `true`) or |
| /// after (if this value is `false`) the anchor node indicated by the |
| /// [NodeIterator.referenceNode] property. |
| external bool get pointerBeforeReferenceNode; |
| |
| /// The **`NodeIterator.whatToShow`** read-only property represents |
| /// an `unsigned integer` representing a bitmask signifying what types of |
| /// nodes |
| /// should be returned by the [NodeIterator]. |
| external int get whatToShow; |
| |
| /// The **`NodeIterator.filter`** read-only property returns a |
| /// `NodeFilter` object, that is an object which implements an |
| /// `acceptNode(node)` method, used to screen nodes. |
| /// |
| /// When creating the [NodeIterator], the filter object is passed in as the |
| /// third parameter, and the object method `acceptNode(node)` is |
| /// called on every single node to determine whether or not to accept it. This |
| /// function |
| /// should return the constant `NodeFilter.FILTER_ACCEPT` for cases when the |
| /// node should be accepted and `NodeFilter.FILTER_REJECT` for cases when the |
| /// node should be rejected. |
| external NodeFilter? get filter; |
| } |
| |
| /// The **`TreeWalker`** object represents the nodes of a document subtree and a |
| /// position within them. |
| /// |
| /// A `TreeWalker` can be created using the [Document.createTreeWalker] method. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker). |
| extension type TreeWalker._(JSObject _) implements JSObject { |
| /// The **`TreeWalker.parentNode()`** method moves the current |
| /// [Node] to the first _visible_ ancestor node in the document order, |
| /// and returns the found node. If no such node exists, or if it is above the |
| /// `TreeWalker`'s _root node_, it returns `null` and the current |
| /// node is not changed. |
| external Node? parentNode(); |
| |
| /// The **`TreeWalker.firstChild()`** method moves the current |
| /// [Node] to the first _visible_ child of the current node, and returns |
| /// the found child. If no such child exists, it returns `null` and the |
| /// current node is not changed. |
| external Node? firstChild(); |
| |
| /// The **`TreeWalker.lastChild()`** method moves the current |
| /// [Node] to the last _visible_ child of the current node, and returns |
| /// the found child. If no such child exists, it returns `null` and the |
| /// current node is not changed. |
| external Node? lastChild(); |
| |
| /// The **`TreeWalker.previousSibling()`** method moves the current |
| /// [Node] to its previous sibling, if any, and returns the found sibling. If |
| /// there is no such node, it returns `null` and the current node is not |
| /// changed. |
| external Node? previousSibling(); |
| |
| /// The **`TreeWalker.nextSibling()`** method moves the current |
| /// [Node] to its next sibling, if any, and returns the found sibling. If |
| /// there |
| /// is no such node, it returns `null` and the current node is not changed. |
| external Node? nextSibling(); |
| |
| /// The **`TreeWalker.previousNode()`** method moves the current |
| /// [Node] to the previous _visible_ node in the document order, and |
| /// returns the found node. If no such node |
| /// exists, or if it is before that the _root node_ defined at the object |
| /// construction, it returns `null` and the current node is not changed. |
| external Node? previousNode(); |
| |
| /// The **`TreeWalker.nextNode()`** method moves the current |
| /// [Node] to the next _visible_ node in the document order, and returns |
| /// the found node. If no such node exists, it returns `null` and the current |
| /// node is not changed. |
| external Node? nextNode(); |
| |
| /// The **`TreeWalker.root`** read-only property returns the root [Node] that |
| /// the [TreeWalker] traverses. |
| external Node get root; |
| |
| /// The **`TreeWalker.whatToShow`** read-only property returns a |
| /// bitmask that indicates the types of |
| /// [nodes](https://developer.mozilla.org/en-US/docs/Web/API/Node) to show. |
| /// Non-matching nodes are skipped, but their |
| /// children may be included, if relevant. The possible values are: |
| /// |
| /// <table class="no-markdown"> |
| /// <thead> |
| /// <tr> |
| /// <th>Constant</th> |
| /// <th>Numerical value</th> |
| /// <th>Description</th> |
| /// </tr> |
| /// </thead> |
| /// <tbody> |
| /// <tr> |
| /// <td><code>NodeFilter.SHOW_ALL</code></td> |
| /// <td> |
| /// <code>4294967295</code> (that is the max value of <code>unsigned long</code>) |
| /// </td> |
| /// <td>Shows all nodes.</td> |
| /// </tr> |
| /// <tr> |
| /// <td> |
| /// <code>NodeFilter.SHOW_ATTRIBUTE</code> |
| /// </td> |
| /// <td><code>2</code></td> |
| /// <td> |
| /// Shows attribute [Attr] nodes. This is meaningful |
| /// only when creating a [TreeWalker] with an |
| /// [Attr] node as its root; in this case, it means |
| /// that the attribute node will appear in the first position of the |
| /// iteration or traversal. Since attributes are never children of other |
| /// nodes, they do not appear when traversing over the document tree. |
| /// </td> |
| /// </tr> |
| /// <tr> |
| /// <td> |
| /// <code>NodeFilter.SHOW_CDATA_SECTION</code> |
| /// </td> |
| /// <td><code>8</code></td> |
| /// <td>Shows [CDATASection] nodes.</td> |
| /// </tr> |
| /// <tr> |
| /// <td><code>NodeFilter.SHOW_COMMENT</code></td> |
| /// <td><code>128</code></td> |
| /// <td>Shows [Comment] nodes.</td> |
| /// </tr> |
| /// <tr> |
| /// <td><code>NodeFilter.SHOW_DOCUMENT</code></td> |
| /// <td><code>256</code></td> |
| /// <td>Shows [Document] nodes.</td> |
| /// </tr> |
| /// <tr> |
| /// <td><code>NodeFilter.SHOW_DOCUMENT_FRAGMENT</code></td> |
| /// <td><code>1024</code></td> |
| /// <td>Shows [DocumentFragment] nodes.</td> |
| /// </tr> |
| /// <tr> |
| /// <td><code>NodeFilter.SHOW_DOCUMENT_TYPE</code></td> |
| /// <td><code>512</code></td> |
| /// <td>Shows [DocumentType] nodes.</td> |
| /// </tr> |
| /// <tr> |
| /// <td><code>NodeFilter.SHOW_ELEMENT</code></td> |
| /// <td><code>1</code></td> |
| /// <td>Shows [Element] nodes.</td> |
| /// </tr> |
| /// <tr> |
| /// <td><code>NodeFilter.SHOW_ENTITY</code> </td> |
| /// <td><code>32</code></td> |
| /// <td>Legacy, no more used.</td> |
| /// </tr> |
| /// <tr> |
| /// <td> |
| /// <code>NodeFilter.SHOW_ENTITY_REFERENCE</code> |
| /// </td> |
| /// <td><code>16</code></td> |
| /// <td>Legacy, no more used.</td> |
| /// </tr> |
| /// <tr> |
| /// <td> |
| /// <code>NodeFilter.SHOW_NOTATION</code> |
| /// </td> |
| /// <td><code>2048</code></td> |
| /// <td>Legacy, no more used.</td> |
| /// </tr> |
| /// <tr> |
| /// <td><code>NodeFilter.SHOW_PROCESSING_INSTRUCTION</code></td> |
| /// <td><code>64</code></td> |
| /// <td>Shows [ProcessingInstruction] nodes.</td> |
| /// </tr> |
| /// <tr> |
| /// <td><code>NodeFilter.SHOW_TEXT</code></td> |
| /// <td><code>4</code></td> |
| /// <td>Shows [Text] nodes.</td> |
| /// </tr> |
| /// </tbody> |
| /// </table> |
| external int get whatToShow; |
| |
| /// The **`TreeWalker.filter`** read-only property returns the `NodeFilter` |
| /// associated with the [TreeWalker]. |
| /// |
| /// When creating the `TreeWalker`, the filter object is passed in as the |
| /// third |
| /// parameter, and its method `acceptNode()` is called on every |
| /// single node to determine whether or not to accept it. |
| external NodeFilter? get filter; |
| |
| /// The **`TreeWalker.currentNode`** property represents the |
| /// [Node] which the [TreeWalker] is currently pointing at. |
| external Node get currentNode; |
| external set currentNode(Node value); |
| } |
| |
| /// The **`DOMTokenList`** interface represents a set of space-separated tokens. |
| /// Such a set is returned by [Element.classList] or [HTMLLinkElement.relList], |
| /// and many others. |
| /// |
| /// A `DOMTokenList` is indexed beginning with `0` as with JavaScript `Array` |
| /// objects. `DOMTokenList` is always case-sensitive. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList). |
| extension type DOMTokenList._(JSObject _) implements JSObject { |
| /// The **`item()`** method of the [DOMTokenList] interface returns an item in |
| /// the list, |
| /// determined by its position in the list, its index. |
| /// |
| /// > [!NOTE] |
| /// > This method is equivalent as the |
| /// > [bracket notation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_accessors#bracket_notation). |
| /// > So `aList.item(i)` is the same as `aList[i]`. |
| external String? item(int index); |
| |
| /// The **`contains()`** method of the [DOMTokenList] interface |
| /// returns a boolean value — `true` if the underlying list contains the given |
| /// token, |
| /// otherwise `false`. |
| external bool contains(String token); |
| |
| /// The **`add()`** method of the [DOMTokenList] interface adds the given |
| /// tokens to the list, omitting any that are already present. |
| external void add([ |
| String token1, |
| String token2, |
| String token3, |
| String token4, |
| ]); |
| |
| /// The **`remove()`** method of the [DOMTokenList] interface |
| /// removes the specified _tokens_ from the list. |
| external void remove([ |
| String token1, |
| String token2, |
| String token3, |
| String token4, |
| ]); |
| |
| /// The **`toggle()`** method of the [DOMTokenList] interface |
| /// removes an existing token from the list and returns `false`. |
| /// If the token doesn't exist it's added and the function returns `true`. |
| external bool toggle( |
| String token, [ |
| bool force, |
| ]); |
| |
| /// The **`replace()`** method of the [DOMTokenList] interface |
| /// replaces an existing token with a new token. |
| /// If the first token doesn't exist, `replace()` returns `false` immediately, |
| /// without adding the new token to the token list. |
| external bool replace( |
| String token, |
| String newToken, |
| ); |
| |
| /// The **`supports()`** method of the [DOMTokenList] interface |
| /// returns `true` if a given `token` is in the associated attribute's |
| /// supported tokens. |
| /// This method is intended to support feature detection. |
| external bool supports(String token); |
| |
| /// The read-only **`length`** property of the [DOMTokenList] interface is an |
| /// `integer` representing the number |
| /// of objects stored in the object. |
| external int get length; |
| |
| /// The **`value`** property of the [DOMTokenList] |
| /// interface is a that returns the value of the list serialized as a |
| /// string, or clears and sets the list to the given value. |
| external String get value; |
| external set value(String value); |
| } |
| |
| /// The **`XPathResult`** interface represents the results generated by |
| /// evaluating an XPath expression within the context of a given node. |
| /// |
| /// Since XPath expressions can result in a variety of result types, this |
| /// interface makes it possible to determine and handle the type and value of |
| /// the result. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult). |
| extension type XPathResult._(JSObject _) implements JSObject { |
| static const int ANY_TYPE = 0; |
| |
| static const int NUMBER_TYPE = 1; |
| |
| static const int STRING_TYPE = 2; |
| |
| static const int BOOLEAN_TYPE = 3; |
| |
| static const int UNORDERED_NODE_ITERATOR_TYPE = 4; |
| |
| static const int ORDERED_NODE_ITERATOR_TYPE = 5; |
| |
| static const int UNORDERED_NODE_SNAPSHOT_TYPE = 6; |
| |
| static const int ORDERED_NODE_SNAPSHOT_TYPE = 7; |
| |
| static const int ANY_UNORDERED_NODE_TYPE = 8; |
| |
| static const int FIRST_ORDERED_NODE_TYPE = 9; |
| |
| /// The **`iterateNext()`** method of the |
| /// [XPathResult] interface iterates over a node set result and returns the |
| /// next node from it or `null` if there are no more nodes. |
| external Node? iterateNext(); |
| |
| /// The **`snapshotItem()`** method of the |
| /// [XPathResult] interface returns an item of the snapshot collection or |
| /// `null` in case the index is not within the range of nodes. Unlike the |
| /// iterator result, the snapshot does not become invalid, but may not |
| /// correspond to the |
| /// current document if it is mutated. |
| external Node? snapshotItem(int index); |
| |
| /// The read-only **`resultType`** property of the |
| /// [XPathResult] interface represents the type of the result, as defined by |
| /// the type constants. |
| external int get resultType; |
| |
| /// The read-only **`numberValue`** property of the |
| /// [XPathResult] interface returns the numeric value of a result with |
| /// [XPathResult.resultType] being `NUMBER_TYPE`. |
| external double get numberValue; |
| |
| /// The read-only **`stringValue`** property of the |
| /// [XPathResult] interface returns the string value of a result with |
| /// [XPathResult.resultType] being `STRING_TYPE`. |
| external String get stringValue; |
| |
| /// The read-only **`booleanValue`** property of the |
| /// [XPathResult] interface returns the boolean value of a result with |
| /// [XPathResult.resultType] being `BOOLEAN_TYPE`. |
| external bool get booleanValue; |
| |
| /// The read-only **`singleNodeValue`** property of the |
| /// [XPathResult] interface returns a [Node] value or |
| /// `null` in case no node was matched of a result with |
| /// [XPathResult.resultType] being `ANY_UNORDERED_NODE_TYPE` or |
| /// `FIRST_ORDERED_NODE_TYPE`. |
| external Node? get singleNodeValue; |
| |
| /// The read-only **`invalidIteratorState`** property of the |
| /// [XPathResult] interface signifies that the iterator has become invalid. It |
| /// is `true` if [XPathResult.resultType] is |
| /// `UNORDERED_NODE_ITERATOR_TYPE` or `ORDERED_NODE_ITERATOR_TYPE` and |
| /// the document has been modified since this result was returned. |
| external bool get invalidIteratorState; |
| |
| /// The read-only **`snapshotLength`** property of the |
| /// [XPathResult] interface represents the number of nodes in the result |
| /// snapshot. |
| external int get snapshotLength; |
| } |
| |
| /// This interface is a compiled XPath expression that can be evaluated on a |
| /// document or specific node to return information from its tree. |
| /// |
| /// This is useful when an expression will be reused in an application, because |
| /// it is just compiled once and all namespace prefixes which occur within the |
| /// expression are preresolved. |
| /// |
| /// Objects of this type are created by calling |
| /// [XPathEvaluator.createExpression]. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/XPathExpression). |
| extension type XPathExpression._(JSObject _) implements JSObject { |
| /// The **`evaluate()`** method of the |
| /// [XPathExpression] interface executes an |
| /// [XPath](https://developer.mozilla.org/en-US/docs/Web/XML/XPath) expression |
| /// on the given node or document and |
| /// returns an [XPathResult]. |
| external XPathResult evaluate( |
| Node contextNode, [ |
| int type, |
| XPathResult? result, |
| ]); |
| } |
| |
| /// The `XPathEvaluator` interface allows to compile and evaluate expressions. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/XPathEvaluator). |
| extension type XPathEvaluator._(JSObject _) implements JSObject { |
| external factory XPathEvaluator(); |
| |
| /// This method compiles an [XPathExpression] which can then be used for |
| /// (repeated) evaluations of the expression. |
| external XPathExpression createExpression( |
| String expression, [ |
| XPathNSResolver? resolver, |
| ]); |
| |
| /// The **`createNSResolver()`** method of the [XPathEvaluator] interface used |
| /// to create a custom `XPathNSResolver` object. It now returns the input |
| /// as-is and is only kept for compatibility reasons. |
| external Node createNSResolver(Node nodeResolver); |
| |
| /// The `evaluate()` method of the [XPathEvaluator] interface |
| /// executes an XPath expression on the given node or document and returns an |
| /// [XPathResult]. |
| external XPathResult evaluate( |
| String expression, |
| Node contextNode, [ |
| XPathNSResolver? resolver, |
| int type, |
| XPathResult? result, |
| ]); |
| } |
| |
| /// An **`XSLTProcessor`** applies an |
| /// [XSLT](https://developer.mozilla.org/en-US/docs/Web/XML/XSLT) stylesheet |
| /// transformation to an XML document to |
| /// produce a new XML document as output. It has methods to load the XSLT |
| /// stylesheet, to |
| /// manipulate `<xsl:param>` parameter values, and to apply the |
| /// transformation to documents. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/XSLTProcessor). |
| extension type XSLTProcessor._(JSObject _) implements JSObject { |
| external factory XSLTProcessor(); |
| |
| /// The `importStylesheet()` method of the [XSLTProcessor] interface imports |
| /// an XSLT stylesheet for the processor. |
| external void importStylesheet(Node style); |
| |
| /// The `transformToFragment()` method of the [XSLTProcessor] interface |
| /// transforms a provided [Node] source to a [DocumentFragment] using the XSLT |
| /// stylesheet associated with the `XSLTProcessor`. |
| external DocumentFragment transformToFragment( |
| Node source, |
| Document output, |
| ); |
| |
| /// The `transformToDocument()` method of the [XSLTProcessor] interface |
| /// transforms the provided [Node] source to a [Document] using the XSLT |
| /// stylesheet associated with `XSLTProcessor`. |
| external Document transformToDocument(Node source); |
| |
| /// The `setParameter()` method of the [XSLTProcessor] interface sets the |
| /// value of a parameter (`<xsl:param>`) in the stylesheet imported in the |
| /// processor. |
| external void setParameter( |
| String namespaceURI, |
| String localName, |
| JSAny? value, |
| ); |
| |
| /// The `getParameter()` method of the [XSLTProcessor] interface returns the |
| /// value of a parameter (`<xsl:param>`) from the stylesheet imported in the |
| /// processor. |
| external JSAny? getParameter( |
| String namespaceURI, |
| String localName, |
| ); |
| |
| /// The `removeParameter()` method of the [XSLTProcessor] interface removes |
| /// the parameter (`<xsl:param>`) and its value from the stylesheet imported |
| /// in the processor. |
| external void removeParameter( |
| String namespaceURI, |
| String localName, |
| ); |
| |
| /// The `clearParameters()` method of the [XSLTProcessor] interface removes |
| /// all parameters (`<xsl:param>`) and their values from the stylesheet |
| /// imported in the processor. The `XSLTProcessor` will then use the default |
| /// values specified in the XSLT stylesheet. |
| external void clearParameters(); |
| |
| /// The `reset()` method of the [XSLTProcessor] interface removes all |
| /// parameters (`<xsl:param>`) and the XSLT stylesheet from the processor. The |
| /// `XSLTProcessor` will then be in its original state when it was created. |
| external void reset(); |
| } |