// https://drafts.csswg.org/web-animations-1/#the-animation-interface
[Exposed=Window]
interface Animation : EventTarget {
    constructor(optional AnimationEffect? effect = null,
                optional AnimationTimeline? timeline);

    attribute DOMString id;
    attribute AnimationEffect? effect;
    [ImplementedAs=timeline_for_bindings] attribute AnimationTimeline? timeline;
    [ImplementedAs=start_time_for_bindings] attribute CSSNumberish? startTime;
    [ImplementedAs=current_time_for_bindings] attribute CSSNumberish? currentTime;
    attribute double playbackRate;
    [ImplementedAs=play_state_for_bindings] readonly attribute AnimationPlayState playState;
    readonly attribute AnimationReplaceState replaceState;
    readonly attribute boolean pending;
    readonly attribute Promise<Animation> ready;
    readonly attribute Promise<Animation> finished;

    attribute EventHandler onfinish;
    attribute EventHandler oncancel;
    attribute EventHandler onremove;

    undefined cancel();
    undefined finish();
    undefined play();
    undefined pause();
    undefined updatePlaybackRate(double playbackRate);
    undefined reverse();
    undefined persist();
    [FIXME, CEReactions] undefined commitStyles();
};

// https://drafts.csswg.org/web-animations-1/#the-animationplaystate-enumeration
enum AnimationPlayState { "idle", "running", "paused", "finished" };

// https://drafts.csswg.org/web-animations-1/#the-animationreplacestate-enumeration
enum AnimationReplaceState { "active", "removed", "persisted" };
