blob: c2339997ee438869993ef857b5c082eb4d36fe09 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview Minimal Closure externs for Web Animations.
* "Minimal" because the web-animations spec is in flux, Chromium's support is
* changing, and the intended consumer (MD Settings) is actually using the
* web-animations-js polyfill for the time being.
* @see https://w3c.github.io/web-animations/#programming-interface
*/
/**
* @enum {number}
* @see https://w3c.github.io/web-animations/#enumdef-fillmode
*/
var FillMode = {
'none': 0,
'forwards': 1,
'backwards': 2,
'both': 3,
'auto': 4
};
/**
* @enum {number}
* @see https://w3c.github.io/web-animations/#enumdef-playbackdirection
*/
var PlaybackDirection = {
'normal': 0,
'reverse': 1,
'alternate': 2,
'alternate-reverse': 3
};
/**
* @enum {number}
* @see https://w3c.github.io/web-animations/#enumdef-iterationcompositeoperation
*/
var IterationCompositeOperation = {
'replace': 0,
'accumulate': 1
};
/**
* @enum {number}
* @see https://w3c.github.io/web-animations/#enumdef-compositeoperation
*/
var CompositeOperation = {
'replace': 0,
'add': 1,
'accumulate': 2
};
/**
* @constructor
* @param {!Event} event
*/
var EventHandlerNonNull = function(event) {};
/** @typedef {?EventHandlerNonNull} */
var EventHandler;
/**
* @constructor
* @see https://w3c.github.io/web-animations/#dictdef-keyframeanimationoptions
*/
var KeyframeAnimationOptions = function() {};
/**
* @constructor
* @see https://w3c.github.io/web-animations/#dictdef-keyframeeffectoptions
*/
var KeyframeEffectOptions = function() {};
/** @type {number} */
KeyframeEffectOptions.prototype.delay;
/** @type {number} */
KeyframeEffectOptions.prototype.endDelay;
/** @type {!FillMode} */
KeyframeEffectOptions.prototype.fill;
/** @type {number} */
KeyframeEffectOptions.prototype.iterationStart;
/** @type {number} */
KeyframeEffectOptions.prototype.iterations;
/** @type {number|string} */
KeyframeEffectOptions.prototype.duration;
/** @type {number} */
KeyframeEffectOptions.prototype.playbackRate;
/** @type {!PlaybackDirection} */
KeyframeEffectOptions.prototype.direction;
/** @type {string} */
KeyframeEffectOptions.prototype.easing;
/** @type {string} */
KeyframeEffectOptions.prototype.id;
/**
* @constructor
* @param {?Animatable} target
* @param {?Object} frames
* @param {number|KeyframeEffectOptions=} opt_options
* @see https://w3c.github.io/web-animations/#keyframeeffectreadonly
*/
var KeyframeEffectReadOnly = function(target, frames, opt_options) {};
/** @const {?Animatable} */
KeyframeEffectReadOnly.prototype.target;
/** @const {IterationCompositeOperation} */
KeyframeEffectReadOnly.prototype.iterationComposite;
/** @const {CompositeOperation} */
KeyframeEffectReadOnly.prototype.composite;
/** @const {string} */
KeyframeEffectReadOnly.prototype.spacing;
/** @return {KeyframeEffect} */
KeyframeEffectReadOnly.prototype.clone;
/** @return {Array<Object>} */
KeyframeEffectReadOnly.prototype.getFrames;
/**
* @constructor
* @extends KeyframeEffectReadOnly
* @param {?Animatable} target
* @param {?Object} frames
* @param {number|KeyframeEffectOptions=} opt_options
* @see https://w3c.github.io/web-animations/#keyframeeffect
*/
var KeyframeEffect = function(target, frames, opt_options) {};
/** @override */
KeyframeEffect.prototype.target;
/** @override */
KeyframeEffect.prototype.iterationComposite;
/** @override */
KeyframeEffect.prototype.composite;
/** @override */
KeyframeEffect.prototype.spacing;
/** @param {?Object} frames */
KeyframeEffect.prototype.setFrames;
/**
* @interface
* @extends {EventTarget}
* @see https://w3c.github.io/web-animations/#animation
*/
var Animation = function() {};
/** @type {string} */
Animation.prototype.id;
/** @type {?number} */
Animation.prototype.startTime;
/** @type {?number} */
Animation.prototype.currentTime;
/** @type {number} */
Animation.prototype.playbackRate;
/** @type {!Promise<!Animation>} */
Animation.prototype.finished;
Animation.prototype.finish = function() {};
Animation.prototype.play = function() {};
Animation.prototype.pause = function() {};
Animation.prototype.reverse = function() {};
Animation.prototype.cancel = function() {};
/** @type {EventHandler} */
Animation.prototype.onfinish;
/** @type {EventHandler} */
Animation.prototype.oncancel;
/**
* @interface
* @see https://w3c.github.io/web-animations/#animatable
*/
var Animatable = function() {};
Animatable.prototype = /** @lends {Element.prototype} */({
/**
* @param {?Array<Object>|Object} effect
* @param {number|!KeyframeEffectOptions=} opt_timing
* @return {!Animation}
*/
animate: function(effect, opt_timing) {},
});