| // Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| // |
| // API docs from [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web). |
| // Attributions and copyright licensing by Mozilla Contributors is licensed |
| // under [CC-BY-SA 2.5](https://creativecommons.org/licenses/by-sa/2.5/. |
| |
| // Generated from Web IDL definitions. |
| |
| // ignore_for_file: unintended_html_in_doc_comment |
| |
| @JS() |
| library; |
| |
| import 'dart:js_interop'; |
| |
| import 'dom.dart'; |
| import 'html.dart'; |
| |
| typedef SchedulerPostTaskCallback = JSFunction; |
| typedef TaskPriority = String; |
| extension type SchedulerPostTaskOptions._(JSObject _) implements JSObject { |
| external factory SchedulerPostTaskOptions({ |
| AbortSignal signal, |
| TaskPriority priority, |
| int delay, |
| }); |
| |
| external AbortSignal get signal; |
| external set signal(AbortSignal value); |
| external TaskPriority get priority; |
| external set priority(TaskPriority value); |
| external int get delay; |
| external set delay(int value); |
| } |
| |
| /// The **`Scheduler`** interface of the |
| /// [Prioritized Task Scheduling API](https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API) |
| /// provides methods for scheduling prioritized tasks. |
| /// |
| /// A `Scheduler` can be accessed from the global object using |
| /// [Window.scheduler] or [WorkerGlobalScope.scheduler] within a worker. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/Scheduler). |
| extension type Scheduler._(JSObject _) implements JSObject { |
| /// The **`postTask()`** method of the [Scheduler] interface is used for |
| /// adding tasks to be |
| /// [scheduled](https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API) |
| /// according to their |
| /// [priority](https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API#task_priorities). |
| /// |
| /// The method allows users to optionally specify a minimum delay before the |
| /// task will run, a priority for the task, and a signal that can be used to |
| /// modify the task priority and/or abort the task. |
| /// It returns a promise that is resolved with the result of the task callback |
| /// function, or rejected with the abort reason or an error thrown in the |
| /// task. |
| /// |
| /// Task priority can be |
| /// [mutable or immutable](https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API#mutable_and_immutable_task_priority). |
| /// If the task priority will never need to change then it should be set using |
| /// the `options.priority` parameter (any priority set through a signal will |
| /// then be ignored). |
| /// You can still pass an [AbortSignal] (which has no priority) or |
| /// [TaskSignal] to the `options.signal` parameter for aborting the task. |
| /// |
| /// If the task priority might need to be changed the `options.priority` |
| /// parameter must not be set. |
| /// Instead a [TaskController] should be created and its [TaskSignal] should |
| /// be passed to `options.signal`. |
| /// The task priority will be initialized from the signal priority, and can |
| /// later be modified using the signal's associated [TaskController]. |
| /// |
| /// If no priority is set then the task priority defaults to |
| /// [`"user-visible"`](/en-US/docs/Web/API/Prioritized_Task_Scheduling_API#user-visible). |
| /// |
| /// If a delay is specified and greater than 0, then the execution of the task |
| /// will be delayed for at least that many milliseconds. |
| /// Otherwise the task is immediately scheduled for prioritization. |
| external JSPromise<JSAny?> postTask( |
| SchedulerPostTaskCallback callback, [ |
| SchedulerPostTaskOptions options, |
| ]); |
| } |
| |
| /// The **`TaskPriorityChangeEvent`** is the interface for the |
| /// [`prioritychange`](https://developer.mozilla.org/en-US/docs/Web/API/TaskSignal/prioritychange_event) |
| /// event. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/TaskPriorityChangeEvent). |
| extension type TaskPriorityChangeEvent._(JSObject _) |
| implements Event, JSObject { |
| external factory TaskPriorityChangeEvent( |
| String type, |
| TaskPriorityChangeEventInit priorityChangeEventInitDict, |
| ); |
| |
| /// The **`previousPriority`** read-only property of the |
| /// [TaskPriorityChangeEvent] interface returns the priority of the |
| /// corresponding [TaskSignal] before it was changed and this |
| /// [`prioritychange`](https://developer.mozilla.org/en-US/docs/Web/API/TaskSignal/prioritychange_event) |
| /// event was emitted. |
| /// |
| /// This is the value that was set in the |
| /// [`TaskPriorityChangeEvent` constructor](https://developer.mozilla.org/en-US/docs/Web/API/TaskPriorityChangeEvent/TaskPriorityChangeEvent) |
| /// argument `options.previous`. <!-- link? --> |
| /// |
| /// The new priority of the task can be read from `event.target.priority`. |
| external TaskPriority get previousPriority; |
| } |
| extension type TaskPriorityChangeEventInit._(JSObject _) |
| implements EventInit, JSObject { |
| external factory TaskPriorityChangeEventInit({ |
| bool bubbles, |
| bool cancelable, |
| bool composed, |
| required TaskPriority previousPriority, |
| }); |
| |
| external TaskPriority get previousPriority; |
| external set previousPriority(TaskPriority value); |
| } |
| extension type TaskControllerInit._(JSObject _) implements JSObject { |
| external factory TaskControllerInit({TaskPriority priority}); |
| |
| external TaskPriority get priority; |
| external set priority(TaskPriority value); |
| } |
| |
| /// The **`TaskController`** interface of the |
| /// [Prioritized Task Scheduling API](https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API) |
| /// represents a controller object that can be used to both abort and change the |
| /// [priority](https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API#task_priorities) |
| /// of one or more prioritized tasks. |
| /// If there is no need to change task priorities, then [AbortController] can be |
| /// used instead. |
| /// |
| /// A new `TaskController` instance is created using the |
| /// [TaskController.TaskController] constructor, optionally specifying a |
| /// [priority](https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API#task_priorities) |
| /// for its associated signal (a [TaskSignal]). |
| /// If not specified, the signal will have a priority of |
| /// [`"user-visible"`](/en-US/docs/Web/API/Prioritized_Task_Scheduling_API#user-visible) |
| /// by default. |
| /// |
| /// The controller's signal can be passed as an argument to the |
| /// [Scheduler.postTask] method for one or more tasks. |
| /// For |
| /// [mutable tasks](https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API#mutable_and_immutable_task_priority) |
| /// (only) the task is initialized with the signal priority, and can later be |
| /// changed by calling [TaskController.setPriority]. |
| /// For immutable tasks, any priority initialized or set by the controller is |
| /// ignored. |
| /// |
| /// Tasks can be aborted by calling [AbortController.abort] on the controller. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/TaskController). |
| extension type TaskController._(JSObject _) |
| implements AbortController, JSObject { |
| external factory TaskController([TaskControllerInit init]); |
| |
| /// The **`setPriority()`** method of the [TaskController] interface can be |
| /// called to set a new |
| /// [priority](https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API#task_priorities) |
| /// for this controller's |
| /// [`signal`](https://developer.mozilla.org/en-US/docs/Web/API/TaskController#taskcontroller.signal). |
| /// If a prioritized task is |
| /// [configured](https://developer.mozilla.org/en-US/docs/Web/API/Scheduler/postTask#signal) |
| /// to use the signal, this will also change the task priority. |
| /// |
| /// Observers are notified of priority changes by dispatching a |
| /// [`prioritychange`](https://developer.mozilla.org/en-US/docs/Web/API/TaskSignal/prioritychange_event) |
| /// event. |
| /// The method will only notify if the priority actually changes (the event is |
| /// not fired if the priority would not be changed by the call). |
| /// |
| /// Note that task priority can only be changed for |
| /// [tasks with mutable priorities](https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API#mutable_and_immutable_task_priority). |
| /// If the task is immutable, the function call is ignored. |
| external void setPriority(TaskPriority priority); |
| } |
| |
| /// The **`TaskSignal`** interface of the |
| /// [Prioritized Task Scheduling API](https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API) |
| /// represents a signal object that allows you to communicate with a prioritized |
| /// task, and abort it or change the |
| /// [priority](https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API#task_priorities) |
| /// (if required) via a [TaskController] object. |
| /// |
| /// An object of this type is created, and associated with, a [TaskController]. |
| /// The initial priority of the signal may be set by specifying it as an |
| /// argument to the [TaskController.TaskController] constructor (by default it |
| /// is `"user-visible"`). |
| /// The priority can be changed by calling [TaskController.setPriority] on the |
| /// controller. |
| /// |
| /// The signal may be passed as the `options.signal` argument in |
| /// [Scheduler.postTask], after which it's associated controller can be used to |
| /// abort the task. |
| /// If the |
| /// [task priority is mutable](https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API#mutable_and_immutable_task_priority), |
| /// the controller can also be used to change the task's priority. |
| /// Abortable tasks that do not need the priority to change may instead specify |
| /// an [AbortSignal] as the `options.signal` argument. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/TaskSignal). |
| extension type TaskSignal._(JSObject _) implements AbortSignal, JSObject { |
| /// The read-only **`priority`** property of the [TaskSignal] interface |
| /// indicates the signal |
| /// [priority](https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API#task_priorities). |
| /// |
| /// The initial value is set in the associated [TaskController] by specifying |
| /// it as an argument to the |
| /// [`TaskController` constructor](https://developer.mozilla.org/en-US/docs/Web/API/TaskController/TaskController) |
| /// (by default it is `"user-visible"`). |
| /// The priority of the signal can be changed by calling |
| /// [TaskController.setPriority] on the associated controller. |
| /// |
| /// For |
| /// [tasks with a mutable priority](https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API#mutable_and_immutable_task_priority), |
| /// this value is used to set the initial task priority and later to change |
| /// it. |
| /// Tasks with an immutable priority will ignore the value. |
| external TaskPriority get priority; |
| external EventHandler get onprioritychange; |
| external set onprioritychange(EventHandler value); |
| } |