System.register(['./css_animation_options', './animation'], function(exports_1, context_1) {
    "use strict";
    var __moduleName = context_1 && context_1.id;
    var css_animation_options_1, animation_1;
    var CssAnimationBuilder;
    return {
        setters:[
            function (css_animation_options_1_1) {
                css_animation_options_1 = css_animation_options_1_1;
            },
            function (animation_1_1) {
                animation_1 = animation_1_1;
            }],
        execute: function() {
            CssAnimationBuilder = (function () {
                /**
                 * Accepts public properties for CssAnimationBuilder
                 */
                function CssAnimationBuilder(browserDetails) {
                    this.browserDetails = browserDetails;
                    /** @type {CssAnimationOptions} */
                    this.data = new css_animation_options_1.CssAnimationOptions();
                }
                /**
                 * Adds a temporary class that will be removed at the end of the animation
                 * @param className
                 */
                CssAnimationBuilder.prototype.addAnimationClass = function (className) {
                    this.data.animationClasses.push(className);
                    return this;
                };
                /**
                 * Adds a class that will remain on the element after the animation has finished
                 * @param className
                 */
                CssAnimationBuilder.prototype.addClass = function (className) {
                    this.data.classesToAdd.push(className);
                    return this;
                };
                /**
                 * Removes a class from the element
                 * @param className
                 */
                CssAnimationBuilder.prototype.removeClass = function (className) {
                    this.data.classesToRemove.push(className);
                    return this;
                };
                /**
                 * Sets the animation duration (and overrides any defined through CSS)
                 * @param duration
                 */
                CssAnimationBuilder.prototype.setDuration = function (duration) {
                    this.data.duration = duration;
                    return this;
                };
                /**
                 * Sets the animation delay (and overrides any defined through CSS)
                 * @param delay
                 */
                CssAnimationBuilder.prototype.setDelay = function (delay) {
                    this.data.delay = delay;
                    return this;
                };
                /**
                 * Sets styles for both the initial state and the destination state
                 * @param from
                 * @param to
                 */
                CssAnimationBuilder.prototype.setStyles = function (from, to) {
                    return this.setFromStyles(from).setToStyles(to);
                };
                /**
                 * Sets the initial styles for the animation
                 * @param from
                 */
                CssAnimationBuilder.prototype.setFromStyles = function (from) {
                    this.data.fromStyles = from;
                    return this;
                };
                /**
                 * Sets the destination styles for the animation
                 * @param to
                 */
                CssAnimationBuilder.prototype.setToStyles = function (to) {
                    this.data.toStyles = to;
                    return this;
                };
                /**
                 * Starts the animation and returns a promise
                 * @param element
                 */
                CssAnimationBuilder.prototype.start = function (element) {
                    return new animation_1.Animation(element, this.data, this.browserDetails);
                };
                return CssAnimationBuilder;
            }());
            exports_1("CssAnimationBuilder", CssAnimationBuilder);
        }
    }
});
//# sourceMappingURL=css_animation_builder.js.map