blob: e9af2078934187a61269314995edb1778d5cfa13 [file] [log] [blame]
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
//
// API docs from [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web).
// Attributions and copyright licensing by Mozilla Contributors is licensed
// under [CC-BY-SA 2.5](https://creativecommons.org/licenses/by-sa/2.5/.
// Generated from Web IDL definitions.
// ignore_for_file: unintended_html_in_doc_comment
@JS()
library;
import 'dart:js_interop';
import 'css_view_transitions_2.dart';
typedef ViewTransitionUpdateCallback = JSFunction;
/// The **`ViewTransition`** interface of the [View Transition API] represents
/// an active view transition, and provides functionality to react to the
/// transition reaching different states (e.g. ready to run the animation, or
/// animation finished) or skip the transition altogether.
///
/// This object type is made available in the following ways:
///
/// - In the case of same-document (SPA) transitions, it is returned by the
/// [Document.startViewTransition] method.
/// - In the case of cross-document (MPA) transitions, it is made available:
/// - In the outgoing page via the [Window.pageswap_event] event object's [PageSwapEvent.viewTransition] property.
/// - In the inbound page via the [Window.pagereveal_event] event object's [PageRevealEvent.viewTransition] property.
///
/// When a view transition is triggered by a `startViewTransition()` call (or a
/// page navigation in the case of MPA transitions), 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).
/// This also explains when the different promises fulfill.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/ViewTransition).
extension type ViewTransition._(JSObject _) implements JSObject {
/// The **`skipTransition()`** method of the
/// [ViewTransition] interface skips the animation part of the view
/// transition, but doesn't skip running the associated view update.
external void skipTransition();
/// The **`updateCallbackDone`** read-only property of the
/// [ViewTransition] interface is a `Promise` that fulfills when the promise
/// returned by the [Document.startViewTransition] method's callback fulfills,
/// or rejects when it rejects.
///
/// `updateCallbackDone` is useful when you don't care about the
/// success/failure of a same-document (SPA) view transition animation, and
/// just want to know if and when the DOM is updated.
///
/// > [!NOTE]
/// > In the case of a cross-document (MPA) view transition, the
/// > `updateCallbackDone` promise of the associated `ViewTransition` is
/// > automatically fulfilled.
external JSPromise<JSAny?> get updateCallbackDone;
/// The **`ready`** read-only property of the
/// [ViewTransition] interface is a `Promise` that fulfills once the
/// pseudo-element tree is created and the transition animation is about to
/// start.
///
/// `ready` will reject if the transition cannot begin. This can be due to
/// misconfiguration, for example, duplicate s, or if the callback passed to
/// [Document.startViewTransition] throws or returns a promise that rejects.
external JSPromise<JSAny?> get ready;
/// The **`finished`** read-only property of the
/// [ViewTransition] interface is a `Promise` that fulfills once the
/// transition animation is finished, and the new page view is visible and
/// interactive to the user.
///
/// `finished` will only reject in the case of a same-document (SPA)
/// transition, if the callback passed to [Document.startViewTransition]
/// throws or returns a promise that rejects. This would indicate that the new
/// state of the page wasn't created.
///
/// If a transition animation fails to start or is skipped during the
/// transition using [ViewTransition.skipTransition], the end state is still
/// reached therefore `finished` will still fulfill.
external JSPromise<JSAny?> get finished;
external ViewTransitionTypeSet get types;
external set types(ViewTransitionTypeSet value);
}