You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by sc...@apache.org on 2018/04/30 21:03:42 UTC

[46/51] [partial] nifi-fds git commit: gh-pages update

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/d07dd0f2/node_modules/@angular/animations/@angular/animations/browser.es5.js
----------------------------------------------------------------------
diff --git a/node_modules/@angular/animations/@angular/animations/browser.es5.js b/node_modules/@angular/animations/@angular/animations/browser.es5.js
deleted file mode 100644
index 4148fd1..0000000
--- a/node_modules/@angular/animations/@angular/animations/browser.es5.js
+++ /dev/null
@@ -1,4911 +0,0 @@
-import * as tslib_1 from "tslib";
-/**
- * @license Angular v4.4.6
- * (c) 2010-2017 Google, Inc. https://angular.io/
- * License: MIT
- */
-import { AUTO_STYLE, NoopAnimationPlayer, sequence, style, ɵAnimationGroupPlayer, ɵPRE_STYLE } from '@angular/animations';
-/**
- * @license
- * Copyright Google Inc. All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
-function optimizeGroupPlayer(players) {
-    switch (players.length) {
-        case 0:
-            return new NoopAnimationPlayer();
-        case 1:
-            return players[0];
-        default:
-            return new ɵAnimationGroupPlayer(players);
-    }
-}
-function normalizeKeyframes(driver, normalizer, element, keyframes, preStyles, postStyles) {
-    if (preStyles === void 0) { preStyles = {}; }
-    if (postStyles === void 0) { postStyles = {}; }
-    var errors = [];
-    var normalizedKeyframes = [];
-    var previousOffset = -1;
-    var previousKeyframe = null;
-    keyframes.forEach(function (kf) {
-        var offset = kf['offset'];
-        var isSameOffset = offset == previousOffset;
-        var normalizedKeyframe = (isSameOffset && previousKeyframe) || {};
-        Object.keys(kf).forEach(function (prop) {
-            var normalizedProp = prop;
-            var normalizedValue = kf[prop];
-            if (prop !== 'offset') {
-                normalizedProp = normalizer.normalizePropertyName(normalizedProp, errors);
-                switch (normalizedValue) {
-                    case ɵPRE_STYLE:
-                        normalizedValue = preStyles[prop];
-                        break;
-                    case AUTO_STYLE:
-                        normalizedValue = postStyles[prop];
-                        break;
-                    default:
-                        normalizedValue =
-                            normalizer.normalizeStyleValue(prop, normalizedProp, normalizedValue, errors);
-                        break;
-                }
-            }
-            normalizedKeyframe[normalizedProp] = normalizedValue;
-        });
-        if (!isSameOffset) {
-            normalizedKeyframes.push(normalizedKeyframe);
-        }
-        previousKeyframe = normalizedKeyframe;
-        previousOffset = offset;
-    });
-    if (errors.length) {
-        var LINE_START = '\n - ';
-        throw new Error("Unable to animate due to the following errors:" + LINE_START + errors.join(LINE_START));
-    }
-    return normalizedKeyframes;
-}
-function listenOnPlayer(player, eventName, event, callback) {
-    switch (eventName) {
-        case 'start':
-            player.onStart(function () { return callback(event && copyAnimationEvent(event, 'start', player.totalTime)); });
-            break;
-        case 'done':
-            player.onDone(function () { return callback(event && copyAnimationEvent(event, 'done', player.totalTime)); });
-            break;
-        case 'destroy':
-            player.onDestroy(function () { return callback(event && copyAnimationEvent(event, 'destroy', player.totalTime)); });
-            break;
-    }
-}
-function copyAnimationEvent(e, phaseName, totalTime) {
-    var event = makeAnimationEvent(e.element, e.triggerName, e.fromState, e.toState, phaseName || e.phaseName, totalTime == undefined ? e.totalTime : totalTime);
-    var data = e['_data'];
-    if (data != null) {
-        event['_data'] = data;
-    }
-    return event;
-}
-function makeAnimationEvent(element, triggerName, fromState, toState, phaseName, totalTime) {
-    if (phaseName === void 0) { phaseName = ''; }
-    if (totalTime === void 0) { totalTime = 0; }
-    return { element: element, triggerName: triggerName, fromState: fromState, toState: toState, phaseName: phaseName, totalTime: totalTime };
-}
-function getOrSetAsInMap(map, key, defaultValue) {
-    var value;
-    if (map instanceof Map) {
-        value = map.get(key);
-        if (!value) {
-            map.set(key, value = defaultValue);
-        }
-    }
-    else {
-        value = map[key];
-        if (!value) {
-            value = map[key] = defaultValue;
-        }
-    }
-    return value;
-}
-function parseTimelineCommand(command) {
-    var separatorPos = command.indexOf(':');
-    var id = command.substring(1, separatorPos);
-    var action = command.substr(separatorPos + 1);
-    return [id, action];
-}
-var _contains = function (elm1, elm2) { return false; };
-var _matches = function (element, selector) { return false; };
-var _query = function (element, selector, multi) {
-    return [];
-};
-if (typeof Element != 'undefined') {
-    // this is well supported in all browsers
-    _contains = function (elm1, elm2) { return elm1.contains(elm2); };
-    if (Element.prototype.matches) {
-        _matches = function (element, selector) { return element.matches(selector); };
-    }
-    else {
-        var proto = Element.prototype;
-        var fn_1 = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector ||
-            proto.oMatchesSelector || proto.webkitMatchesSelector;
-        if (fn_1) {
-            _matches = function (element, selector) { return fn_1.apply(element, [selector]); };
-        }
-    }
-    _query = function (element, selector, multi) {
-        var results = [];
-        if (multi) {
-            results.push.apply(results, element.querySelectorAll(selector));
-        }
-        else {
-            var elm = element.querySelector(selector);
-            if (elm) {
-                results.push(elm);
-            }
-        }
-        return results;
-    };
-}
-var matchesElement = _matches;
-var containsElement = _contains;
-var invokeQuery = _query;
-/**
- * @license
- * Copyright Google Inc. All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
-/**
- * @experimental
- */
-var NoopAnimationDriver = (function () {
-    function NoopAnimationDriver() {
-    }
-    NoopAnimationDriver.prototype.matchesElement = function (element, selector) {
-        return matchesElement(element, selector);
-    };
-    NoopAnimationDriver.prototype.containsElement = function (elm1, elm2) { return containsElement(elm1, elm2); };
-    NoopAnimationDriver.prototype.query = function (element, selector, multi) {
-        return invokeQuery(element, selector, multi);
-    };
-    NoopAnimationDriver.prototype.computeStyle = function (element, prop, defaultValue) {
-        return defaultValue || '';
-    };
-    NoopAnimationDriver.prototype.animate = function (element, keyframes, duration, delay, easing, previousPlayers) {
-        if (previousPlayers === void 0) { previousPlayers = []; }
-        return new NoopAnimationPlayer();
-    };
-    return NoopAnimationDriver;
-}());
-/**
- * @experimental
- */
-var AnimationDriver = (function () {
-    function AnimationDriver() {
-    }
-    return AnimationDriver;
-}());
-AnimationDriver.NOOP = new NoopAnimationDriver();
-/**
- * @license
- * Copyright Google Inc. All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
-var ONE_SECOND = 1000;
-var SUBSTITUTION_EXPR_START = '{{';
-var SUBSTITUTION_EXPR_END = '}}';
-var ENTER_CLASSNAME = 'ng-enter';
-var LEAVE_CLASSNAME = 'ng-leave';
-var ENTER_SELECTOR = '.ng-enter';
-var LEAVE_SELECTOR = '.ng-leave';
-var NG_TRIGGER_CLASSNAME = 'ng-trigger';
-var NG_TRIGGER_SELECTOR = '.ng-trigger';
-var NG_ANIMATING_CLASSNAME = 'ng-animating';
-var NG_ANIMATING_SELECTOR = '.ng-animating';
-function resolveTimingValue(value) {
-    if (typeof value == 'number')
-        return value;
-    var matches = value.match(/^(-?[\.\d]+)(m?s)/);
-    if (!matches || matches.length < 2)
-        return 0;
-    return _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);
-}
-function _convertTimeValueToMS(value, unit) {
-    switch (unit) {
-        case 's':
-            return value * ONE_SECOND;
-        default:
-            return value;
-    }
-}
-function resolveTiming(timings, errors, allowNegativeValues) {
-    return timings.hasOwnProperty('duration') ?
-        timings :
-        parseTimeExpression(timings, errors, allowNegativeValues);
-}
-function parseTimeExpression(exp, errors, allowNegativeValues) {
-    var regex = /^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i;
-    var duration;
-    var delay = 0;
-    var easing = '';
-    if (typeof exp === 'string') {
-        var matches = exp.match(regex);
-        if (matches === null) {
-            errors.push("The provided timing value \"" + exp + "\" is invalid.");
-            return { duration: 0, delay: 0, easing: '' };
-        }
-        duration = _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);
-        var delayMatch = matches[3];
-        if (delayMatch != null) {
-            delay = _convertTimeValueToMS(Math.floor(parseFloat(delayMatch)), matches[4]);
-        }
-        var easingVal = matches[5];
-        if (easingVal) {
-            easing = easingVal;
-        }
-    }
-    else {
-        duration = exp;
-    }
-    if (!allowNegativeValues) {
-        var containsErrors = false;
-        var startIndex = errors.length;
-        if (duration < 0) {
-            errors.push("Duration values below 0 are not allowed for this animation step.");
-            containsErrors = true;
-        }
-        if (delay < 0) {
-            errors.push("Delay values below 0 are not allowed for this animation step.");
-            containsErrors = true;
-        }
-        if (containsErrors) {
-            errors.splice(startIndex, 0, "The provided timing value \"" + exp + "\" is invalid.");
-        }
-    }
-    return { duration: duration, delay: delay, easing: easing };
-}
-function copyObj(obj, destination) {
-    if (destination === void 0) { destination = {}; }
-    Object.keys(obj).forEach(function (prop) { destination[prop] = obj[prop]; });
-    return destination;
-}
-function normalizeStyles(styles) {
-    var normalizedStyles = {};
-    if (Array.isArray(styles)) {
-        styles.forEach(function (data) { return copyStyles(data, false, normalizedStyles); });
-    }
-    else {
-        copyStyles(styles, false, normalizedStyles);
-    }
-    return normalizedStyles;
-}
-function copyStyles(styles, readPrototype, destination) {
-    if (destination === void 0) { destination = {}; }
-    if (readPrototype) {
-        // we make use of a for-in loop so that the
-        // prototypically inherited properties are
-        // revealed from the backFill map
-        for (var prop in styles) {
-            destination[prop] = styles[prop];
-        }
-    }
-    else {
-        copyObj(styles, destination);
-    }
-    return destination;
-}
-function setStyles(element, styles) {
-    if (element['style']) {
-        Object.keys(styles).forEach(function (prop) {
-            var camelProp = dashCaseToCamelCase(prop);
-            element.style[camelProp] = styles[prop];
-        });
-    }
-}
-function eraseStyles(element, styles) {
-    if (element['style']) {
-        Object.keys(styles).forEach(function (prop) {
-            var camelProp = dashCaseToCamelCase(prop);
-            element.style[camelProp] = '';
-        });
-    }
-}
-function normalizeAnimationEntry(steps) {
-    if (Array.isArray(steps)) {
-        if (steps.length == 1)
-            return steps[0];
-        return sequence(steps);
-    }
-    return steps;
-}
-function validateStyleParams(value, options, errors) {
-    var params = options.params || {};
-    var matches = extractStyleParams(value);
-    if (matches.length) {
-        matches.forEach(function (varName) {
-            if (!params.hasOwnProperty(varName)) {
-                errors.push("Unable to resolve the local animation param " + varName + " in the given list of values");
-            }
-        });
-    }
-}
-var PARAM_REGEX = new RegExp(SUBSTITUTION_EXPR_START + "\\s*(.+?)\\s*" + SUBSTITUTION_EXPR_END, 'g');
-function extractStyleParams(value) {
-    var params = [];
-    if (typeof value === 'string') {
-        var val = value.toString();
-        var match = void 0;
-        while (match = PARAM_REGEX.exec(val)) {
-            params.push(match[1]);
-        }
-        PARAM_REGEX.lastIndex = 0;
-    }
-    return params;
-}
-function interpolateParams(value, params, errors) {
-    var original = value.toString();
-    var str = original.replace(PARAM_REGEX, function (_, varName) {
-        var localVal = params[varName];
-        // this means that the value was never overidden by the data passed in by the user
-        if (!params.hasOwnProperty(varName)) {
-            errors.push("Please provide a value for the animation param " + varName);
-            localVal = '';
-        }
-        return localVal.toString();
-    });
-    // we do this to assert that numeric values stay as they are
-    return str == original ? value : str;
-}
-function iteratorToArray(iterator) {
-    var arr = [];
-    var item = iterator.next();
-    while (!item.done) {
-        arr.push(item.value);
-        item = iterator.next();
-    }
-    return arr;
-}
-var DASH_CASE_REGEXP = /-+([a-z0-9])/g;
-function dashCaseToCamelCase(input) {
-    return input.replace(DASH_CASE_REGEXP, function () {
-        var m = [];
-        for (var _i = 0; _i < arguments.length; _i++) {
-            m[_i] = arguments[_i];
-        }
-        return m[1].toUpperCase();
-    });
-}
-function allowPreviousPlayerStylesMerge(duration, delay) {
-    return duration === 0 || delay === 0;
-}
-function visitDslNode(visitor, node, context) {
-    switch (node.type) {
-        case 7 /* Trigger */:
-            return visitor.visitTrigger(node, context);
-        case 0 /* State */:
-            return visitor.visitState(node, context);
-        case 1 /* Transition */:
-            return visitor.visitTransition(node, context);
-        case 2 /* Sequence */:
-            return visitor.visitSequence(node, context);
-        case 3 /* Group */:
-            return visitor.visitGroup(node, context);
-        case 4 /* Animate */:
-            return visitor.visitAnimate(node, context);
-        case 5 /* Keyframes */:
-            return visitor.visitKeyframes(node, context);
-        case 6 /* Style */:
-            return visitor.visitStyle(node, context);
-        case 8 /* Reference */:
-            return visitor.visitReference(node, context);
-        case 9 /* AnimateChild */:
-            return visitor.visitAnimateChild(node, context);
-        case 10 /* AnimateRef */:
-            return visitor.visitAnimateRef(node, context);
-        case 11 /* Query */:
-            return visitor.visitQuery(node, context);
-        case 12 /* Stagger */:
-            return visitor.visitStagger(node, context);
-        default:
-            throw new Error("Unable to resolve animation metadata node #" + node.type);
-    }
-}
-/**
- * @license
- * Copyright Google Inc. All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
-var ANY_STATE = '*';
-/**
- * @param {?} transitionValue
- * @param {?} errors
- * @return {?}
- */
-function parseTransitionExpr(transitionValue, errors) {
-    var /** @type {?} */ expressions = [];
-    if (typeof transitionValue == 'string') {
-        ((transitionValue))
-            .split(/\s*,\s*/)
-            .forEach(function (str) { return parseInnerTransitionStr(str, expressions, errors); });
-    }
-    else {
-        expressions.push(/** @type {?} */ (transitionValue));
-    }
-    return expressions;
-}
-/**
- * @param {?} eventStr
- * @param {?} expressions
- * @param {?} errors
- * @return {?}
- */
-function parseInnerTransitionStr(eventStr, expressions, errors) {
-    if (eventStr[0] == ':') {
-        eventStr = parseAnimationAlias(eventStr, errors);
-    }
-    var /** @type {?} */ match = eventStr.match(/^(\*|[-\w]+)\s*(<?[=-]>)\s*(\*|[-\w]+)$/);
-    if (match == null || match.length < 4) {
-        errors.push("The provided transition expression \"" + eventStr + "\" is not supported");
-        return expressions;
-    }
-    var /** @type {?} */ fromState = match[1];
-    var /** @type {?} */ separator = match[2];
-    var /** @type {?} */ toState = match[3];
-    expressions.push(makeLambdaFromStates(fromState, toState));
-    var /** @type {?} */ isFullAnyStateExpr = fromState == ANY_STATE && toState == ANY_STATE;
-    if (separator[0] == '<' && !isFullAnyStateExpr) {
-        expressions.push(makeLambdaFromStates(toState, fromState));
-    }
-}
-/**
- * @param {?} alias
- * @param {?} errors
- * @return {?}
- */
-function parseAnimationAlias(alias, errors) {
-    switch (alias) {
-        case ':enter':
-            return 'void => *';
-        case ':leave':
-            return '* => void';
-        default:
-            errors.push("The transition alias value \"" + alias + "\" is not supported");
-            return '* => *';
-    }
-}
-var TRUE_BOOLEAN_VALUES = new Set();
-TRUE_BOOLEAN_VALUES.add('true');
-TRUE_BOOLEAN_VALUES.add('1');
-var FALSE_BOOLEAN_VALUES = new Set();
-FALSE_BOOLEAN_VALUES.add('false');
-FALSE_BOOLEAN_VALUES.add('0');
-/**
- * @param {?} lhs
- * @param {?} rhs
- * @return {?}
- */
-function makeLambdaFromStates(lhs, rhs) {
-    var /** @type {?} */ LHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(lhs) || FALSE_BOOLEAN_VALUES.has(lhs);
-    var /** @type {?} */ RHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(rhs) || FALSE_BOOLEAN_VALUES.has(rhs);
-    return function (fromState, toState) {
-        var /** @type {?} */ lhsMatch = lhs == ANY_STATE || lhs == fromState;
-        var /** @type {?} */ rhsMatch = rhs == ANY_STATE || rhs == toState;
-        if (!lhsMatch && LHS_MATCH_BOOLEAN && typeof fromState === 'boolean') {
-            lhsMatch = fromState ? TRUE_BOOLEAN_VALUES.has(lhs) : FALSE_BOOLEAN_VALUES.has(lhs);
-        }
-        if (!rhsMatch && RHS_MATCH_BOOLEAN && typeof toState === 'boolean') {
-            rhsMatch = toState ? TRUE_BOOLEAN_VALUES.has(rhs) : FALSE_BOOLEAN_VALUES.has(rhs);
-        }
-        return lhsMatch && rhsMatch;
-    };
-}
-/**
- * @license
- * Copyright Google Inc. All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
-var SELF_TOKEN = ':self';
-var SELF_TOKEN_REGEX = new RegExp("s*" + SELF_TOKEN + "s*,?", 'g');
-/**
- * @param {?} metadata
- * @param {?} errors
- * @return {?}
- */
-function buildAnimationAst(metadata, errors) {
-    return new AnimationAstBuilderVisitor().build(metadata, errors);
-}
-var LEAVE_TOKEN = ':leave';
-var LEAVE_TOKEN_REGEX = new RegExp(LEAVE_TOKEN, 'g');
-var ENTER_TOKEN = ':enter';
-var ENTER_TOKEN_REGEX = new RegExp(ENTER_TOKEN, 'g');
-var ROOT_SELECTOR = '';
-var AnimationAstBuilderVisitor = (function () {
-    function AnimationAstBuilderVisitor() {
-    }
-    /**
-     * @param {?} metadata
-     * @param {?} errors
-     * @return {?}
-     */
-    AnimationAstBuilderVisitor.prototype.build = function (metadata, errors) {
-        var /** @type {?} */ context = new AnimationAstBuilderContext(errors);
-        this._resetContextStyleTimingState(context);
-        return (visitDslNode(this, normalizeAnimationEntry(metadata), context));
-    };
-    /**
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationAstBuilderVisitor.prototype._resetContextStyleTimingState = function (context) {
-        context.currentQuerySelector = ROOT_SELECTOR;
-        context.collectedStyles = {};
-        context.collectedStyles[ROOT_SELECTOR] = {};
-        context.currentTime = 0;
-    };
-    /**
-     * @param {?} metadata
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationAstBuilderVisitor.prototype.visitTrigger = function (metadata, context) {
-        var _this = this;
-        var /** @type {?} */ queryCount = context.queryCount = 0;
-        var /** @type {?} */ depCount = context.depCount = 0;
-        var /** @type {?} */ states = [];
-        var /** @type {?} */ transitions = [];
-        metadata.definitions.forEach(function (def) {
-            _this._resetContextStyleTimingState(context);
-            if (def.type == 0 /* State */) {
-                var /** @type {?} */ stateDef_1 = (def);
-                var /** @type {?} */ name = stateDef_1.name;
-                name.split(/\s*,\s*/).forEach(function (n) {
-                    stateDef_1.name = n;
-                    states.push(_this.visitState(stateDef_1, context));
-                });
-                stateDef_1.name = name;
-            }
-            else if (def.type == 1 /* Transition */) {
-                var /** @type {?} */ transition = _this.visitTransition(/** @type {?} */ (def), context);
-                queryCount += transition.queryCount;
-                depCount += transition.depCount;
-                transitions.push(transition);
-            }
-            else {
-                context.errors.push('only state() and transition() definitions can sit inside of a trigger()');
-            }
-        });
-        return {
-            type: 7 /* Trigger */,
-            name: metadata.name, states: states, transitions: transitions, queryCount: queryCount, depCount: depCount,
-            options: null
-        };
-    };
-    /**
-     * @param {?} metadata
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationAstBuilderVisitor.prototype.visitState = function (metadata, context) {
-        var /** @type {?} */ styleAst = this.visitStyle(metadata.styles, context);
-        var /** @type {?} */ astParams = (metadata.options && metadata.options.params) || null;
-        if (styleAst.containsDynamicStyles) {
-            var /** @type {?} */ missingSubs_1 = new Set();
-            var /** @type {?} */ params_1 = astParams || {};
-            styleAst.styles.forEach(function (value) {
-                if (isObject(value)) {
-                    var /** @type {?} */ stylesObj_1 = (value);
-                    Object.keys(stylesObj_1).forEach(function (prop) {
-                        extractStyleParams(stylesObj_1[prop]).forEach(function (sub) {
-                            if (!params_1.hasOwnProperty(sub)) {
-                                missingSubs_1.add(sub);
-                            }
-                        });
-                    });
-                }
-            });
-            if (missingSubs_1.size) {
-                var /** @type {?} */ missingSubsArr = iteratorToArray(missingSubs_1.values());
-                context.errors.push("state(\"" + metadata.name + "\", ...) must define default values for all the following style substitutions: " + missingSubsArr.join(', '));
-            }
-        }
-        return {
-            type: 0 /* State */,
-            name: metadata.name,
-            style: styleAst,
-            options: astParams ? { params: astParams } : null
-        };
-    };
-    /**
-     * @param {?} metadata
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationAstBuilderVisitor.prototype.visitTransition = function (metadata, context) {
-        context.queryCount = 0;
-        context.depCount = 0;
-        var /** @type {?} */ animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);
-        var /** @type {?} */ matchers = parseTransitionExpr(metadata.expr, context.errors);
-        return {
-            type: 1 /* Transition */,
-            matchers: matchers,
-            animation: animation,
-            queryCount: context.queryCount,
-            depCount: context.depCount,
-            options: normalizeAnimationOptions(metadata.options)
-        };
-    };
-    /**
-     * @param {?} metadata
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationAstBuilderVisitor.prototype.visitSequence = function (metadata, context) {
-        var _this = this;
-        return {
-            type: 2 /* Sequence */,
-            steps: metadata.steps.map(function (s) { return visitDslNode(_this, s, context); }),
-            options: normalizeAnimationOptions(metadata.options)
-        };
-    };
-    /**
-     * @param {?} metadata
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationAstBuilderVisitor.prototype.visitGroup = function (metadata, context) {
-        var _this = this;
-        var /** @type {?} */ currentTime = context.currentTime;
-        var /** @type {?} */ furthestTime = 0;
-        var /** @type {?} */ steps = metadata.steps.map(function (step) {
-            context.currentTime = currentTime;
-            var /** @type {?} */ innerAst = visitDslNode(_this, step, context);
-            furthestTime = Math.max(furthestTime, context.currentTime);
-            return innerAst;
-        });
-        context.currentTime = furthestTime;
-        return {
-            type: 3 /* Group */,
-            steps: steps,
-            options: normalizeAnimationOptions(metadata.options)
-        };
-    };
-    /**
-     * @param {?} metadata
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationAstBuilderVisitor.prototype.visitAnimate = function (metadata, context) {
-        var /** @type {?} */ timingAst = constructTimingAst(metadata.timings, context.errors);
-        context.currentAnimateTimings = timingAst;
-        var /** @type {?} */ styleAst;
-        var /** @type {?} */ styleMetadata = metadata.styles ? metadata.styles : style({});
-        if (styleMetadata.type == 5 /* Keyframes */) {
-            styleAst = this.visitKeyframes(/** @type {?} */ (styleMetadata), context);
-        }
-        else {
-            var /** @type {?} */ styleMetadata_1 = (metadata.styles);
-            var /** @type {?} */ isEmpty = false;
-            if (!styleMetadata_1) {
-                isEmpty = true;
-                var /** @type {?} */ newStyleData = {};
-                if (timingAst.easing) {
-                    newStyleData['easing'] = timingAst.easing;
-                }
-                styleMetadata_1 = style(newStyleData);
-            }
-            context.currentTime += timingAst.duration + timingAst.delay;
-            var /** @type {?} */ _styleAst = this.visitStyle(styleMetadata_1, context);
-            _styleAst.isEmptyStep = isEmpty;
-            styleAst = _styleAst;
-        }
-        context.currentAnimateTimings = null;
-        return {
-            type: 4 /* Animate */,
-            timings: timingAst,
-            style: styleAst,
-            options: null
-        };
-    };
-    /**
-     * @param {?} metadata
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationAstBuilderVisitor.prototype.visitStyle = function (metadata, context) {
-        var /** @type {?} */ ast = this._makeStyleAst(metadata, context);
-        this._validateStyleAst(ast, context);
-        return ast;
-    };
-    /**
-     * @param {?} metadata
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationAstBuilderVisitor.prototype._makeStyleAst = function (metadata, context) {
-        var /** @type {?} */ styles = [];
-        if (Array.isArray(metadata.styles)) {
-            ((metadata.styles)).forEach(function (styleTuple) {
-                if (typeof styleTuple == 'string') {
-                    if (styleTuple == AUTO_STYLE) {
-                        styles.push(/** @type {?} */ (styleTuple));
-                    }
-                    else {
-                        context.errors.push("The provided style string value " + styleTuple + " is not allowed.");
-                    }
-                }
-                else {
-                    styles.push(/** @type {?} */ (styleTuple));
-                }
-            });
-        }
-        else {
-            styles.push(metadata.styles);
-        }
-        var /** @type {?} */ containsDynamicStyles = false;
-        var /** @type {?} */ collectedEasing = null;
-        styles.forEach(function (styleData) {
-            if (isObject(styleData)) {
-                var /** @type {?} */ styleMap = (styleData);
-                var /** @type {?} */ easing = styleMap['easing'];
-                if (easing) {
-                    collectedEasing = (easing);
-                    delete styleMap['easing'];
-                }
-                if (!containsDynamicStyles) {
-                    for (var /** @type {?} */ prop in styleMap) {
-                        var /** @type {?} */ value = styleMap[prop];
-                        if (value.toString().indexOf(SUBSTITUTION_EXPR_START) >= 0) {
-                            containsDynamicStyles = true;
-                            break;
-                        }
-                    }
-                }
-            }
-        });
-        return {
-            type: 6 /* Style */,
-            styles: styles,
-            easing: collectedEasing,
-            offset: metadata.offset, containsDynamicStyles: containsDynamicStyles,
-            options: null
-        };
-    };
-    /**
-     * @param {?} ast
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationAstBuilderVisitor.prototype._validateStyleAst = function (ast, context) {
-        var /** @type {?} */ timings = context.currentAnimateTimings;
-        var /** @type {?} */ endTime = context.currentTime;
-        var /** @type {?} */ startTime = context.currentTime;
-        if (timings && startTime > 0) {
-            startTime -= timings.duration + timings.delay;
-        }
-        ast.styles.forEach(function (tuple) {
-            if (typeof tuple == 'string')
-                return;
-            Object.keys(tuple).forEach(function (prop) {
-                var /** @type {?} */ collectedStyles = context.collectedStyles[((context.currentQuerySelector))];
-                var /** @type {?} */ collectedEntry = collectedStyles[prop];
-                var /** @type {?} */ updateCollectedStyle = true;
-                if (collectedEntry) {
-                    if (startTime != endTime && startTime >= collectedEntry.startTime &&
-                        endTime <= collectedEntry.endTime) {
-                        context.errors.push("The CSS property \"" + prop + "\" that exists between the times of \"" + collectedEntry.startTime + "ms\" and \"" + collectedEntry.endTime + "ms\" is also being animated in a parallel animation between the times of \"" + startTime + "ms\" and \"" + endTime + "ms\"");
-                        updateCollectedStyle = false;
-                    }
-                    // we always choose the smaller start time value since we
-                    // want to have a record of the entire animation window where
-                    // the style property is being animated in between
-                    startTime = collectedEntry.startTime;
-                }
-                if (updateCollectedStyle) {
-                    collectedStyles[prop] = { startTime: startTime, endTime: endTime };
-                }
-                if (context.options) {
-                    validateStyleParams(tuple[prop], context.options, context.errors);
-                }
-            });
-        });
-    };
-    /**
-     * @param {?} metadata
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationAstBuilderVisitor.prototype.visitKeyframes = function (metadata, context) {
-        var _this = this;
-        var /** @type {?} */ ast = { type: 5 /* Keyframes */, styles: [], options: null };
-        if (!context.currentAnimateTimings) {
-            context.errors.push("keyframes() must be placed inside of a call to animate()");
-            return ast;
-        }
-        var /** @type {?} */ MAX_KEYFRAME_OFFSET = 1;
-        var /** @type {?} */ totalKeyframesWithOffsets = 0;
-        var /** @type {?} */ offsets = [];
-        var /** @type {?} */ offsetsOutOfOrder = false;
-        var /** @type {?} */ keyframesOutOfRange = false;
-        var /** @type {?} */ previousOffset = 0;
-        var /** @type {?} */ keyframes = metadata.steps.map(function (styles) {
-            var /** @type {?} */ style$$1 = _this._makeStyleAst(styles, context);
-            var /** @type {?} */ offsetVal = style$$1.offset != null ? style$$1.offset : consumeOffset(style$$1.styles);
-            var /** @type {?} */ offset = 0;
-            if (offsetVal != null) {
-                totalKeyframesWithOffsets++;
-                offset = style$$1.offset = offsetVal;
-            }
-            keyframesOutOfRange = keyframesOutOfRange || offset < 0 || offset > 1;
-            offsetsOutOfOrder = offsetsOutOfOrder || offset < previousOffset;
-            previousOffset = offset;
-            offsets.push(offset);
-            return style$$1;
-        });
-        if (keyframesOutOfRange) {
-            context.errors.push("Please ensure that all keyframe offsets are between 0 and 1");
-        }
-        if (offsetsOutOfOrder) {
-            context.errors.push("Please ensure that all keyframe offsets are in order");
-        }
-        var /** @type {?} */ length = metadata.steps.length;
-        var /** @type {?} */ generatedOffset = 0;
-        if (totalKeyframesWithOffsets > 0 && totalKeyframesWithOffsets < length) {
-            context.errors.push("Not all style() steps within the declared keyframes() contain offsets");
-        }
-        else if (totalKeyframesWithOffsets == 0) {
-            generatedOffset = MAX_KEYFRAME_OFFSET / (length - 1);
-        }
-        var /** @type {?} */ limit = length - 1;
-        var /** @type {?} */ currentTime = context.currentTime;
-        var /** @type {?} */ currentAnimateTimings = ((context.currentAnimateTimings));
-        var /** @type {?} */ animateDuration = currentAnimateTimings.duration;
-        keyframes.forEach(function (kf, i) {
-            var /** @type {?} */ offset = generatedOffset > 0 ? (i == limit ? 1 : (generatedOffset * i)) : offsets[i];
-            var /** @type {?} */ durationUpToThisFrame = offset * animateDuration;
-            context.currentTime = currentTime + currentAnimateTimings.delay + durationUpToThisFrame;
-            currentAnimateTimings.duration = durationUpToThisFrame;
-            _this._validateStyleAst(kf, context);
-            kf.offset = offset;
-            ast.styles.push(kf);
-        });
-        return ast;
-    };
-    /**
-     * @param {?} metadata
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationAstBuilderVisitor.prototype.visitReference = function (metadata, context) {
-        return {
-            type: 8 /* Reference */,
-            animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context),
-            options: normalizeAnimationOptions(metadata.options)
-        };
-    };
-    /**
-     * @param {?} metadata
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationAstBuilderVisitor.prototype.visitAnimateChild = function (metadata, context) {
-        context.depCount++;
-        return {
-            type: 9 /* AnimateChild */,
-            options: normalizeAnimationOptions(metadata.options)
-        };
-    };
-    /**
-     * @param {?} metadata
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationAstBuilderVisitor.prototype.visitAnimateRef = function (metadata, context) {
-        return {
-            type: 10 /* AnimateRef */,
-            animation: this.visitReference(metadata.animation, context),
-            options: normalizeAnimationOptions(metadata.options)
-        };
-    };
-    /**
-     * @param {?} metadata
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationAstBuilderVisitor.prototype.visitQuery = function (metadata, context) {
-        var /** @type {?} */ parentSelector = ((context.currentQuerySelector));
-        var /** @type {?} */ options = ((metadata.options || {}));
-        context.queryCount++;
-        context.currentQuery = metadata;
-        var _a = normalizeSelector(metadata.selector), selector = _a[0], includeSelf = _a[1];
-        context.currentQuerySelector =
-            parentSelector.length ? (parentSelector + ' ' + selector) : selector;
-        getOrSetAsInMap(context.collectedStyles, context.currentQuerySelector, {});
-        var /** @type {?} */ animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);
-        context.currentQuery = null;
-        context.currentQuerySelector = parentSelector;
-        return {
-            type: 11 /* Query */,
-            selector: selector,
-            limit: options.limit || 0,
-            optional: !!options.optional, includeSelf: includeSelf, animation: animation,
-            originalSelector: metadata.selector,
-            options: normalizeAnimationOptions(metadata.options)
-        };
-    };
-    /**
-     * @param {?} metadata
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationAstBuilderVisitor.prototype.visitStagger = function (metadata, context) {
-        if (!context.currentQuery) {
-            context.errors.push("stagger() can only be used inside of query()");
-        }
-        var /** @type {?} */ timings = metadata.timings === 'full' ?
-            { duration: 0, delay: 0, easing: 'full' } :
-            resolveTiming(metadata.timings, context.errors, true);
-        return {
-            type: 12 /* Stagger */,
-            animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context), timings: timings,
-            options: null
-        };
-    };
-    return AnimationAstBuilderVisitor;
-}());
-/**
- * @param {?} selector
- * @return {?}
- */
-function normalizeSelector(selector) {
-    var /** @type {?} */ hasAmpersand = selector.split(/\s*,\s*/).find(function (token) { return token == SELF_TOKEN; }) ? true : false;
-    if (hasAmpersand) {
-        selector = selector.replace(SELF_TOKEN_REGEX, '');
-    }
-    selector = selector.replace(ENTER_TOKEN_REGEX, ENTER_SELECTOR)
-        .replace(LEAVE_TOKEN_REGEX, LEAVE_SELECTOR)
-        .replace(/@\*/g, NG_TRIGGER_SELECTOR)
-        .replace(/@\w+/g, function (match) { return NG_TRIGGER_SELECTOR + '-' + match.substr(1); })
-        .replace(/:animating/g, NG_ANIMATING_SELECTOR);
-    return [selector, hasAmpersand];
-}
-/**
- * @param {?} obj
- * @return {?}
- */
-function normalizeParams(obj) {
-    return obj ? copyObj(obj) : null;
-}
-var AnimationAstBuilderContext = (function () {
-    /**
-     * @param {?} errors
-     */
-    function AnimationAstBuilderContext(errors) {
-        this.errors = errors;
-        this.queryCount = 0;
-        this.depCount = 0;
-        this.currentTransition = null;
-        this.currentQuery = null;
-        this.currentQuerySelector = null;
-        this.currentAnimateTimings = null;
-        this.currentTime = 0;
-        this.collectedStyles = {};
-        this.options = null;
-    }
-    return AnimationAstBuilderContext;
-}());
-/**
- * @param {?} styles
- * @return {?}
- */
-function consumeOffset(styles) {
-    if (typeof styles == 'string')
-        return null;
-    var /** @type {?} */ offset = null;
-    if (Array.isArray(styles)) {
-        styles.forEach(function (styleTuple) {
-            if (isObject(styleTuple) && styleTuple.hasOwnProperty('offset')) {
-                var /** @type {?} */ obj = (styleTuple);
-                offset = parseFloat(/** @type {?} */ (obj['offset']));
-                delete obj['offset'];
-            }
-        });
-    }
-    else if (isObject(styles) && styles.hasOwnProperty('offset')) {
-        var /** @type {?} */ obj = (styles);
-        offset = parseFloat(/** @type {?} */ (obj['offset']));
-        delete obj['offset'];
-    }
-    return offset;
-}
-/**
- * @param {?} value
- * @return {?}
- */
-function isObject(value) {
-    return !Array.isArray(value) && typeof value == 'object';
-}
-/**
- * @param {?} value
- * @param {?} errors
- * @return {?}
- */
-function constructTimingAst(value, errors) {
-    var /** @type {?} */ timings = null;
-    if (value.hasOwnProperty('duration')) {
-        timings = (value);
-    }
-    else if (typeof value == 'number') {
-        var /** @type {?} */ duration = resolveTiming(/** @type {?} */ (value), errors).duration;
-        return makeTimingAst(/** @type {?} */ (duration), 0, '');
-    }
-    var /** @type {?} */ strValue = (value);
-    var /** @type {?} */ isDynamic = strValue.split(/\s+/).some(function (v) { return v.charAt(0) == '{' && v.charAt(1) == '{'; });
-    if (isDynamic) {
-        var /** @type {?} */ ast = (makeTimingAst(0, 0, ''));
-        ast.dynamic = true;
-        ast.strValue = strValue;
-        return (ast);
-    }
-    timings = timings || resolveTiming(strValue, errors);
-    return makeTimingAst(timings.duration, timings.delay, timings.easing);
-}
-/**
- * @param {?} options
- * @return {?}
- */
-function normalizeAnimationOptions(options) {
-    if (options) {
-        options = copyObj(options);
-        if (options['params']) {
-            options['params'] = ((normalizeParams(options['params'])));
-        }
-    }
-    else {
-        options = {};
-    }
-    return options;
-}
-/**
- * @param {?} duration
- * @param {?} delay
- * @param {?} easing
- * @return {?}
- */
-function makeTimingAst(duration, delay, easing) {
-    return { duration: duration, delay: delay, easing: easing };
-}
-/**
- * @license
- * Copyright Google Inc. All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
-/**
- * @param {?} element
- * @param {?} keyframes
- * @param {?} preStyleProps
- * @param {?} postStyleProps
- * @param {?} duration
- * @param {?} delay
- * @param {?=} easing
- * @param {?=} subTimeline
- * @return {?}
- */
-function createTimelineInstruction(element, keyframes, preStyleProps, postStyleProps, duration, delay, easing, subTimeline) {
-    if (easing === void 0) { easing = null; }
-    if (subTimeline === void 0) { subTimeline = false; }
-    return {
-        type: 1 /* TimelineAnimation */,
-        element: element,
-        keyframes: keyframes,
-        preStyleProps: preStyleProps,
-        postStyleProps: postStyleProps,
-        duration: duration,
-        delay: delay,
-        totalTime: duration + delay, easing: easing, subTimeline: subTimeline
-    };
-}
-/**
- * @license
- * Copyright Google Inc. All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
-var ElementInstructionMap = (function () {
-    function ElementInstructionMap() {
-        this._map = new Map();
-    }
-    /**
-     * @param {?} element
-     * @return {?}
-     */
-    ElementInstructionMap.prototype.consume = function (element) {
-        var /** @type {?} */ instructions = this._map.get(element);
-        if (instructions) {
-            this._map.delete(element);
-        }
-        else {
-            instructions = [];
-        }
-        return instructions;
-    };
-    /**
-     * @param {?} element
-     * @param {?} instructions
-     * @return {?}
-     */
-    ElementInstructionMap.prototype.append = function (element, instructions) {
-        var /** @type {?} */ existingInstructions = this._map.get(element);
-        if (!existingInstructions) {
-            this._map.set(element, existingInstructions = []);
-        }
-        existingInstructions.push.apply(existingInstructions, instructions);
-    };
-    /**
-     * @param {?} element
-     * @return {?}
-     */
-    ElementInstructionMap.prototype.has = function (element) { return this._map.has(element); };
-    /**
-     * @return {?}
-     */
-    ElementInstructionMap.prototype.clear = function () { this._map.clear(); };
-    return ElementInstructionMap;
-}());
-/**
- * @license
- * Copyright Google Inc. All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
-var ONE_FRAME_IN_MILLISECONDS = 1;
-/**
- * @param {?} driver
- * @param {?} rootElement
- * @param {?} ast
- * @param {?=} startingStyles
- * @param {?=} finalStyles
- * @param {?=} options
- * @param {?=} subInstructions
- * @param {?=} errors
- * @return {?}
- */
-function buildAnimationTimelines(driver, rootElement, ast, startingStyles, finalStyles, options, subInstructions, errors) {
-    if (startingStyles === void 0) { startingStyles = {}; }
-    if (finalStyles === void 0) { finalStyles = {}; }
-    if (errors === void 0) { errors = []; }
-    return new AnimationTimelineBuilderVisitor().buildKeyframes(driver, rootElement, ast, startingStyles, finalStyles, options, subInstructions, errors);
-}
-var AnimationTimelineBuilderVisitor = (function () {
-    function AnimationTimelineBuilderVisitor() {
-    }
-    /**
-     * @param {?} driver
-     * @param {?} rootElement
-     * @param {?} ast
-     * @param {?} startingStyles
-     * @param {?} finalStyles
-     * @param {?} options
-     * @param {?=} subInstructions
-     * @param {?=} errors
-     * @return {?}
-     */
-    AnimationTimelineBuilderVisitor.prototype.buildKeyframes = function (driver, rootElement, ast, startingStyles, finalStyles, options, subInstructions, errors) {
-        if (errors === void 0) { errors = []; }
-        subInstructions = subInstructions || new ElementInstructionMap();
-        var /** @type {?} */ context = new AnimationTimelineContext(driver, rootElement, subInstructions, errors, []);
-        context.options = options;
-        context.currentTimeline.setStyles([startingStyles], null, context.errors, options);
-        visitDslNode(this, ast, context);
-        // this checks to see if an actual animation happened
-        var /** @type {?} */ timelines = context.timelines.filter(function (timeline) { return timeline.containsAnimation(); });
-        if (timelines.length && Object.keys(finalStyles).length) {
-            var /** @type {?} */ tl = timelines[timelines.length - 1];
-            if (!tl.allowOnlyTimelineStyles()) {
-                tl.setStyles([finalStyles], null, context.errors, options);
-            }
-        }
-        return timelines.length ? timelines.map(function (timeline) { return timeline.buildKeyframes(); }) :
-            [createTimelineInstruction(rootElement, [], [], [], 0, 0, '', false)];
-    };
-    /**
-     * @param {?} ast
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationTimelineBuilderVisitor.prototype.visitTrigger = function (ast, context) {
-        // these values are not visited in this AST
-    };
-    /**
-     * @param {?} ast
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationTimelineBuilderVisitor.prototype.visitState = function (ast, context) {
-        // these values are not visited in this AST
-    };
-    /**
-     * @param {?} ast
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationTimelineBuilderVisitor.prototype.visitTransition = function (ast, context) {
-        // these values are not visited in this AST
-    };
-    /**
-     * @param {?} ast
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationTimelineBuilderVisitor.prototype.visitAnimateChild = function (ast, context) {
-        var /** @type {?} */ elementInstructions = context.subInstructions.consume(context.element);
-        if (elementInstructions) {
-            var /** @type {?} */ innerContext = context.createSubContext(ast.options);
-            var /** @type {?} */ startTime = context.currentTimeline.currentTime;
-            var /** @type {?} */ endTime = this._visitSubInstructions(elementInstructions, innerContext, /** @type {?} */ (innerContext.options));
-            if (startTime != endTime) {
-                // we do this on the upper context because we created a sub context for
-                // the sub child animations
-                context.transformIntoNewTimeline(endTime);
-            }
-        }
-        context.previousNode = ast;
-    };
-    /**
-     * @param {?} ast
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationTimelineBuilderVisitor.prototype.visitAnimateRef = function (ast, context) {
-        var /** @type {?} */ innerContext = context.createSubContext(ast.options);
-        innerContext.transformIntoNewTimeline();
-        this.visitReference(ast.animation, innerContext);
-        context.transformIntoNewTimeline(innerContext.currentTimeline.currentTime);
-        context.previousNode = ast;
-    };
-    /**
-     * @param {?} instructions
-     * @param {?} context
-     * @param {?} options
-     * @return {?}
-     */
-    AnimationTimelineBuilderVisitor.prototype._visitSubInstructions = function (instructions, context, options) {
-        var /** @type {?} */ startTime = context.currentTimeline.currentTime;
-        var /** @type {?} */ furthestTime = startTime;
-        // this is a special-case for when a user wants to skip a sub
-        // animation from being fired entirely.
-        var /** @type {?} */ duration = options.duration != null ? resolveTimingValue(options.duration) : null;
-        var /** @type {?} */ delay = options.delay != null ? resolveTimingValue(options.delay) : null;
-        if (duration !== 0) {
-            instructions.forEach(function (instruction) {
-                var /** @type {?} */ instructionTimings = context.appendInstructionToTimeline(instruction, duration, delay);
-                furthestTime =
-                    Math.max(furthestTime, instructionTimings.duration + instructionTimings.delay);
-            });
-        }
-        return furthestTime;
-    };
-    /**
-     * @param {?} ast
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationTimelineBuilderVisitor.prototype.visitReference = function (ast, context) {
-        context.updateOptions(ast.options, true);
-        visitDslNode(this, ast.animation, context);
-        context.previousNode = ast;
-    };
-    /**
-     * @param {?} ast
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationTimelineBuilderVisitor.prototype.visitSequence = function (ast, context) {
-        var _this = this;
-        var /** @type {?} */ subContextCount = context.subContextCount;
-        var /** @type {?} */ ctx = context;
-        var /** @type {?} */ options = ast.options;
-        if (options && (options.params || options.delay)) {
-            ctx = context.createSubContext(options);
-            ctx.transformIntoNewTimeline();
-            if (options.delay != null) {
-                if (ctx.previousNode.type == 6 /* Style */) {
-                    ctx.currentTimeline.snapshotCurrentStyles();
-                    ctx.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;
-                }
-                var /** @type {?} */ delay = resolveTimingValue(options.delay);
-                ctx.delayNextStep(delay);
-            }
-        }
-        if (ast.steps.length) {
-            ast.steps.forEach(function (s) { return visitDslNode(_this, s, ctx); });
-            // this is here just incase the inner steps only contain or end with a style() call
-            ctx.currentTimeline.applyStylesToKeyframe();
-            // this means that some animation function within the sequence
-            // ended up creating a sub timeline (which means the current
-            // timeline cannot overlap with the contents of the sequence)
-            if (ctx.subContextCount > subContextCount) {
-                ctx.transformIntoNewTimeline();
-            }
-        }
-        context.previousNode = ast;
-    };
-    /**
-     * @param {?} ast
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationTimelineBuilderVisitor.prototype.visitGroup = function (ast, context) {
-        var _this = this;
-        var /** @type {?} */ innerTimelines = [];
-        var /** @type {?} */ furthestTime = context.currentTimeline.currentTime;
-        var /** @type {?} */ delay = ast.options && ast.options.delay ? resolveTimingValue(ast.options.delay) : 0;
-        ast.steps.forEach(function (s) {
-            var /** @type {?} */ innerContext = context.createSubContext(ast.options);
-            if (delay) {
-                innerContext.delayNextStep(delay);
-            }
-            visitDslNode(_this, s, innerContext);
-            furthestTime = Math.max(furthestTime, innerContext.currentTimeline.currentTime);
-            innerTimelines.push(innerContext.currentTimeline);
-        });
-        // this operation is run after the AST loop because otherwise
-        // if the parent timeline's collected styles were updated then
-        // it would pass in invalid data into the new-to-be forked items
-        innerTimelines.forEach(function (timeline) { return context.currentTimeline.mergeTimelineCollectedStyles(timeline); });
-        context.transformIntoNewTimeline(furthestTime);
-        context.previousNode = ast;
-    };
-    /**
-     * @param {?} ast
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationTimelineBuilderVisitor.prototype._visitTiming = function (ast, context) {
-        if (((ast)).dynamic) {
-            var /** @type {?} */ strValue = ((ast)).strValue;
-            var /** @type {?} */ timingValue = context.params ? interpolateParams(strValue, context.params, context.errors) : strValue;
-            return resolveTiming(timingValue, context.errors);
-        }
-        else {
-            return { duration: ast.duration, delay: ast.delay, easing: ast.easing };
-        }
-    };
-    /**
-     * @param {?} ast
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationTimelineBuilderVisitor.prototype.visitAnimate = function (ast, context) {
-        var /** @type {?} */ timings = context.currentAnimateTimings = this._visitTiming(ast.timings, context);
-        var /** @type {?} */ timeline = context.currentTimeline;
-        if (timings.delay) {
-            context.incrementTime(timings.delay);
-            timeline.snapshotCurrentStyles();
-        }
-        var /** @type {?} */ style$$1 = ast.style;
-        if (style$$1.type == 5 /* Keyframes */) {
-            this.visitKeyframes(style$$1, context);
-        }
-        else {
-            context.incrementTime(timings.duration);
-            this.visitStyle(/** @type {?} */ (style$$1), context);
-            timeline.applyStylesToKeyframe();
-        }
-        context.currentAnimateTimings = null;
-        context.previousNode = ast;
-    };
-    /**
-     * @param {?} ast
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationTimelineBuilderVisitor.prototype.visitStyle = function (ast, context) {
-        var /** @type {?} */ timeline = context.currentTimeline;
-        var /** @type {?} */ timings = ((context.currentAnimateTimings));
-        // this is a special case for when a style() call
-        // directly follows  an animate() call (but not inside of an animate() call)
-        if (!timings && timeline.getCurrentStyleProperties().length) {
-            timeline.forwardFrame();
-        }
-        var /** @type {?} */ easing = (timings && timings.easing) || ast.easing;
-        if (ast.isEmptyStep) {
-            timeline.applyEmptyStep(easing);
-        }
-        else {
-            timeline.setStyles(ast.styles, easing, context.errors, context.options);
-        }
-        context.previousNode = ast;
-    };
-    /**
-     * @param {?} ast
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationTimelineBuilderVisitor.prototype.visitKeyframes = function (ast, context) {
-        var /** @type {?} */ currentAnimateTimings = ((context.currentAnimateTimings));
-        var /** @type {?} */ startTime = (((context.currentTimeline))).duration;
-        var /** @type {?} */ duration = currentAnimateTimings.duration;
-        var /** @type {?} */ innerContext = context.createSubContext();
-        var /** @type {?} */ innerTimeline = innerContext.currentTimeline;
-        innerTimeline.easing = currentAnimateTimings.easing;
-        ast.styles.forEach(function (step) {
-            var /** @type {?} */ offset = step.offset || 0;
-            innerTimeline.forwardTime(offset * duration);
-            innerTimeline.setStyles(step.styles, step.easing, context.errors, context.options);
-            innerTimeline.applyStylesToKeyframe();
-        });
-        // this will ensure that the parent timeline gets all the styles from
-        // the child even if the new timeline below is not used
-        context.currentTimeline.mergeTimelineCollectedStyles(innerTimeline);
-        // we do this because the window between this timeline and the sub timeline
-        // should ensure that the styles within are exactly the same as they were before
-        context.transformIntoNewTimeline(startTime + duration);
-        context.previousNode = ast;
-    };
-    /**
-     * @param {?} ast
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationTimelineBuilderVisitor.prototype.visitQuery = function (ast, context) {
-        var _this = this;
-        // in the event that the first step before this is a style step we need
-        // to ensure the styles are applied before the children are animated
-        var /** @type {?} */ startTime = context.currentTimeline.currentTime;
-        var /** @type {?} */ options = ((ast.options || {}));
-        var /** @type {?} */ delay = options.delay ? resolveTimingValue(options.delay) : 0;
-        if (delay && (context.previousNode.type === 6 /* Style */ ||
-            (startTime == 0 && context.currentTimeline.getCurrentStyleProperties().length))) {
-            context.currentTimeline.snapshotCurrentStyles();
-            context.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;
-        }
-        var /** @type {?} */ furthestTime = startTime;
-        var /** @type {?} */ elms = context.invokeQuery(ast.selector, ast.originalSelector, ast.limit, ast.includeSelf, options.optional ? true : false, context.errors);
-        context.currentQueryTotal = elms.length;
-        var /** @type {?} */ sameElementTimeline = null;
-        elms.forEach(function (element, i) {
-            context.currentQueryIndex = i;
-            var /** @type {?} */ innerContext = context.createSubContext(ast.options, element);
-            if (delay) {
-                innerContext.delayNextStep(delay);
-            }
-            if (element === context.element) {
-                sameElementTimeline = innerContext.currentTimeline;
-            }
-            visitDslNode(_this, ast.animation, innerContext);
-            // this is here just incase the inner steps only contain or end
-            // with a style() call (which is here to signal that this is a preparatory
-            // call to style an element before it is animated again)
-            innerContext.currentTimeline.applyStylesToKeyframe();
-            var /** @type {?} */ endTime = innerContext.currentTimeline.currentTime;
-            furthestTime = Math.max(furthestTime, endTime);
-        });
-        context.currentQueryIndex = 0;
-        context.currentQueryTotal = 0;
-        context.transformIntoNewTimeline(furthestTime);
-        if (sameElementTimeline) {
-            context.currentTimeline.mergeTimelineCollectedStyles(sameElementTimeline);
-            context.currentTimeline.snapshotCurrentStyles();
-        }
-        context.previousNode = ast;
-    };
-    /**
-     * @param {?} ast
-     * @param {?} context
-     * @return {?}
-     */
-    AnimationTimelineBuilderVisitor.prototype.visitStagger = function (ast, context) {
-        var /** @type {?} */ parentContext = ((context.parentContext));
-        var /** @type {?} */ tl = context.currentTimeline;
-        var /** @type {?} */ timings = ast.timings;
-        var /** @type {?} */ duration = Math.abs(timings.duration);
-        var /** @type {?} */ maxTime = duration * (context.currentQueryTotal - 1);
-        var /** @type {?} */ delay = duration * context.currentQueryIndex;
-        var /** @type {?} */ staggerTransformer = timings.duration < 0 ? 'reverse' : timings.easing;
-        switch (staggerTransformer) {
-            case 'reverse':
-                delay = maxTime - delay;
-                break;
-            case 'full':
-                delay = parentContext.currentStaggerTime;
-                break;
-        }
-        var /** @type {?} */ timeline = context.currentTimeline;
-        if (delay) {
-            timeline.delayNextStep(delay);
-        }
-        var /** @type {?} */ startingTime = timeline.currentTime;
-        visitDslNode(this, ast.animation, context);
-        context.previousNode = ast;
-        // time = duration + delay
-        // the reason why this computation is so complex is because
-        // the inner timeline may either have a delay value or a stretched
-        // keyframe depending on if a subtimeline is not used or is used.
-        parentContext.currentStaggerTime =
-            (tl.currentTime - startingTime) + (tl.startTime - parentContext.currentTimeline.startTime);
-    };
-    return AnimationTimelineBuilderVisitor;
-}());
-var DEFAULT_NOOP_PREVIOUS_NODE = ({});
-var AnimationTimelineContext = (function () {
-    /**
-     * @param {?} _driver
-     * @param {?} element
-     * @param {?} subInstructions
-     * @param {?} errors
-     * @param {?} timelines
-     * @param {?=} initialTimeline
-     */
-    function AnimationTimelineContext(_driver, element, subInstructions, errors, timelines, initialTimeline) {
-        this._driver = _driver;
-        this.element = element;
-        this.subInstructions = subInstructions;
-        this.errors = errors;
-        this.timelines = timelines;
-        this.parentContext = null;
-        this.currentAnimateTimings = null;
-        this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;
-        this.subContextCount = 0;
-        this.options = {};
-        this.currentQueryIndex = 0;
-        this.currentQueryTotal = 0;
-        this.currentStaggerTime = 0;
-        this.currentTimeline = initialTimeline || new TimelineBuilder(element, 0);
-        timelines.push(this.currentTimeline);
-    }
-    Object.defineProperty(AnimationTimelineContext.prototype, "params", {
-        /**
-         * @return {?}
-         */
-        get: function () { return this.options.params; },
-        enumerable: true,
-        configurable: true
-    });
-    /**
-     * @param {?} options
-     * @param {?=} skipIfExists
-     * @return {?}
-     */
-    AnimationTimelineContext.prototype.updateOptions = function (options, skipIfExists) {
-        var _this = this;
-        if (!options)
-            return;
-        var /** @type {?} */ newOptions = (options);
-        var /** @type {?} */ optionsToUpdate = this.options;
-        // NOTE: this will get patched up when other animation methods support duration overrides
-        if (newOptions.duration != null) {
-            ((optionsToUpdate)).duration = resolveTimingValue(newOptions.duration);
-        }
-        if (newOptions.delay != null) {
-            optionsToUpdate.delay = resolveTimingValue(newOptions.delay);
-        }
-        var /** @type {?} */ newParams = newOptions.params;
-        if (newParams) {
-            var /** @type {?} */ paramsToUpdate_1 = ((optionsToUpdate.params));
-            if (!paramsToUpdate_1) {
-                paramsToUpdate_1 = this.options.params = {};
-            }
-            Object.keys(newParams).forEach(function (name) {
-                if (!skipIfExists || !paramsToUpdate_1.hasOwnProperty(name)) {
-                    paramsToUpdate_1[name] = interpolateParams(newParams[name], paramsToUpdate_1, _this.errors);
-                }
-            });
-        }
-    };
-    /**
-     * @return {?}
-     */
-    AnimationTimelineContext.prototype._copyOptions = function () {
-        var /** @type {?} */ options = {};
-        if (this.options) {
-            var /** @type {?} */ oldParams_1 = this.options.params;
-            if (oldParams_1) {
-                var /** @type {?} */ params_2 = options['params'] = {};
-                Object.keys(oldParams_1).forEach(function (name) { params_2[name] = oldParams_1[name]; });
-            }
-        }
-        return options;
-    };
-    /**
-     * @param {?=} options
-     * @param {?=} element
-     * @param {?=} newTime
-     * @return {?}
-     */
-    AnimationTimelineContext.prototype.createSubContext = function (options, element, newTime) {
-        if (options === void 0) { options = null; }
-        var /** @type {?} */ target = element || this.element;
-        var /** @type {?} */ context = new AnimationTimelineContext(this._driver, target, this.subInstructions, this.errors, this.timelines, this.currentTimeline.fork(target, newTime || 0));
-        context.previousNode = this.previousNode;
-        context.currentAnimateTimings = this.currentAnimateTimings;
-        context.options = this._copyOptions();
-        context.updateOptions(options);
-        context.currentQueryIndex = this.currentQueryIndex;
-        context.currentQueryTotal = this.currentQueryTotal;
-        context.parentContext = this;
-        this.subContextCount++;
-        return context;
-    };
-    /**
-     * @param {?=} newTime
-     * @return {?}
-     */
-    AnimationTimelineContext.prototype.transformIntoNewTimeline = function (newTime) {
-        this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;
-        this.currentTimeline = this.currentTimeline.fork(this.element, newTime);
-        this.timelines.push(this.currentTimeline);
-        return this.currentTimeline;
-    };
-    /**
-     * @param {?} instruction
-     * @param {?} duration
-     * @param {?} delay
-     * @return {?}
-     */
-    AnimationTimelineContext.prototype.appendInstructionToTimeline = function (instruction, duration, delay) {
-        var /** @type {?} */ updatedTimings = {
-            duration: duration != null ? duration : instruction.duration,
-            delay: this.currentTimeline.currentTime + (delay != null ? delay : 0) + instruction.delay,
-            easing: ''
-        };
-        var /** @type {?} */ builder = new SubTimelineBuilder(instruction.element, instruction.keyframes, instruction.preStyleProps, instruction.postStyleProps, updatedTimings, instruction.stretchStartingKeyframe);
-        this.timelines.push(builder);
-        return updatedTimings;
-    };
-    /**
-     * @param {?} time
-     * @return {?}
-     */
-    AnimationTimelineContext.prototype.incrementTime = function (time) {
-        this.currentTimeline.forwardTime(this.currentTimeline.duration + time);
-    };
-    /**
-     * @param {?} delay
-     * @return {?}
-     */
-    AnimationTimelineContext.prototype.delayNextStep = function (delay) {
-        // negative delays are not yet supported
-        if (delay > 0) {
-            this.currentTimeline.delayNextStep(delay);
-        }
-    };
-    /**
-     * @param {?} selector
-     * @param {?} originalSelector
-     * @param {?} limit
-     * @param {?} includeSelf
-     * @param {?} optional
-     * @param {?} errors
-     * @return {?}
-     */
-    AnimationTimelineContext.prototype.invokeQuery = function (selector, originalSelector, limit, includeSelf, optional, errors) {
-        var /** @type {?} */ results = [];
-        if (includeSelf) {
-            results.push(this.element);
-        }
-        if (selector.length > 0) {
-            var /** @type {?} */ multi = limit != 1;
-            var /** @type {?} */ elements = this._driver.query(this.element, selector, multi);
-            if (limit !== 0) {
-                elements = elements.slice(0, limit);
-            }
-            results.push.apply(results, elements);
-        }
-        if (!optional && results.length == 0) {
-            errors.push("`query(\"" + originalSelector + "\")` returned zero elements. (Use `query(\"" + originalSelector + "\", { optional: true })` if you wish to allow this.)");
-        }
-        return results;
-    };
-    return AnimationTimelineContext;
-}());
-var TimelineBuilder = (function () {
-    /**
-     * @param {?} element
-     * @param {?} startTime
-     * @param {?=} _elementTimelineStylesLookup
-     */
-    function TimelineBuilder(element, startTime, _elementTimelineStylesLookup) {
-        this.element = element;
-        this.startTime = startTime;
-        this._elementTimelineStylesLookup = _elementTimelineStylesLookup;
-        this.duration = 0;
-        this._previousKeyframe = {};
-        this._currentKeyframe = {};
-        this._keyframes = new Map();
-        this._styleSummary = {};
-        this._pendingStyles = {};
-        this._backFill = {};
-        this._currentEmptyStepKeyframe = null;
-        if (!this._elementTimelineStylesLookup) {
-            this._elementTimelineStylesLookup = new Map();
-        }
-        this._localTimelineStyles = Object.create(this._backFill, {});
-        this._globalTimelineStyles = this._elementTimelineStylesLookup.get(element);
-        if (!this._globalTimelineStyles) {
-            this._globalTimelineStyles = this._localTimelineStyles;
-            this._elementTimelineStylesLookup.set(element, this._localTimelineStyles);
-        }
-        this._loadKeyframe();
-    }
-    /**
-     * @return {?}
-     */
-    TimelineBuilder.prototype.containsAnimation = function () {
-        switch (this._keyframes.size) {
-            case 0:
-                return false;
-            case 1:
-                return this.getCurrentStyleProperties().length > 0;
-            default:
-                return true;
-        }
-    };
-    /**
-     * @return {?}
-     */
-    TimelineBuilder.prototype.getCurrentStyleProperties = function () { return Object.keys(this._currentKeyframe); };
-    Object.defineProperty(TimelineBuilder.prototype, "currentTime", {
-        /**
-         * @return {?}
-         */
-        get: function () { return this.startTime + this.duration; },
-        enumerable: true,
-        configurable: true
-    });
-    /**
-     * @param {?} delay
-     * @return {?}
-     */
-    TimelineBuilder.prototype.delayNextStep = function (delay) {
-        // in the event that a style() step is placed right before a stagger()
-        // and that style() step is the very first style() value in the animation
-        // then we need to make a copy of the keyframe [0, copy, 1] so that the delay
-        // properly applies the style() values to work with the stagger...
-        var /** @type {?} */ hasPreStyleStep = this._keyframes.size == 1 && Object.keys(this._pendingStyles).length;
-        if (this.duration || hasPreStyleStep) {
-            this.forwardTime(this.currentTime + delay);
-            if (hasPreStyleStep) {
-                this.snapshotCurrentStyles();
-            }
-        }
-        else {
-            this.startTime += delay;
-        }
-    };
-    /**
-     * @param {?} element
-     * @param {?=} currentTime
-     * @return {?}
-     */
-    TimelineBuilder.prototype.fork = function (element, currentTime) {
-        this.applyStylesToKeyframe();
-        return new TimelineBuilder(element, currentTime || this.currentTime, this._elementTimelineStylesLookup);
-    };
-    /**
-     * @return {?}
-     */
-    TimelineBuilder.prototype._loadKeyframe = function () {
-        if (this._currentKeyframe) {
-            this._previousKeyframe = this._currentKeyframe;
-        }
-        this._currentKeyframe = ((this._keyframes.get(this.duration)));
-        if (!this._currentKeyframe) {
-            this._currentKeyframe = Object.create(this._backFill, {});
-            this._keyframes.set(this.duration, this._currentKeyframe);
-        }
-    };
-    /**
-     * @return {?}
-     */
-    TimelineBuilder.prototype.forwardFrame = function () {
-        this.duration += ONE_FRAME_IN_MILLISECONDS;
-        this._loadKeyframe();
-    };
-    /**
-     * @param {?} time
-     * @return {?}
-     */
-    TimelineBuilder.prototype.forwardTime = function (time) {
-        this.applyStylesToKeyframe();
-        this.duration = time;
-        this._loadKeyframe();
-    };
-    /**
-     * @param {?} prop
-     * @param {?} value
-     * @return {?}
-     */
-    TimelineBuilder.prototype._updateStyle = function (prop, value) {
-        this._localTimelineStyles[prop] = value;
-        this._globalTimelineStyles[prop] = value;
-        this._styleSummary[prop] = { time: this.currentTime, value: value };
-    };
-    /**
-     * @return {?}
-     */
-    TimelineBuilder.prototype.allowOnlyTimelineStyles = function () { return this._currentEmptyStepKeyframe !== this._currentKeyframe; };
-    /**
-     * @param {?} easing
-     * @return {?}
-     */
-    TimelineBuilder.prototype.applyEmptyStep = function (easing) {
-        var _this = this;
-        if (easing) {
-            this._previousKeyframe['easing'] = easing;
-        }
-        // special case for animate(duration):
-        // all missing styles are filled with a `*` value then
-        // if any destination styles are filled in later on the same
-        // keyframe then they will override the overridden styles
-        // We use `_globalTimelineStyles` here because there may be
-        // styles in previous keyframes that are not present in this timeline
-        Object.keys(this._globalTimelineStyles).forEach(function (prop) {
-            _this._backFill[prop] = _this._globalTimelineStyles[prop] || AUTO_STYLE;
-            _this._currentKeyframe[prop] = AUTO_STYLE;
-        });
-        this._currentEmptyStepKeyframe = this._currentKeyframe;
-    };
-    /**
-     * @param {?} input
-     * @param {?} easing
-     * @param {?} errors
-     * @param {?=} options
-     * @return {?}
-     */
-    TimelineBuilder.prototype.setStyles = function (input, easing, errors, options) {
-        var _this = this;
-        if (easing) {
-            this._previousKeyframe['easing'] = easing;
-        }
-        var /** @type {?} */ params = (options && options.params) || {};
-        var /** @type {?} */ styles = flattenStyles(input, this._globalTimelineStyles);
-        Object.keys(styles).forEach(function (prop) {
-            var /** @type {?} */ val = interpolateParams(styles[prop], params, errors);
-            _this._pendingStyles[prop] = val;
-            if (!_this._localTimelineStyles.hasOwnProperty(prop)) {
-                _this._backFill[prop] = _this._globalTimelineStyles.hasOwnProperty(prop) ?
-                    _this._globalTimelineStyles[prop] :
-                    AUTO_STYLE;
-            }
-            _this._updateStyle(prop, val);
-        });
-    };
-    /**
-     * @return {?}
-     */
-    TimelineBuilder.prototype.applyStylesToKeyframe = function () {
-        var _this = this;
-        var /** @type {?} */ styles = this._pendingStyles;
-        var /** @type {?} */ props = Object.keys(styles);
-        if (props.length == 0)
-            return;
-        this._pendingStyles = {};
-        props.forEach(function (prop) {
-            var /** @type {?} */ val = styles[prop];
-            _this._currentKeyframe[prop] = val;
-        });
-        Object.keys(this._localTimelineStyles).forEach(function (prop) {
-            if (!_this._currentKeyframe.hasOwnProperty(prop)) {
-                _this._currentKeyframe[prop] = _this._localTimelineStyles[prop];
-            }
-        });
-    };
-    /**
-     * @return {?}
-     */
-    TimelineBuilder.prototype.snapshotCurrentStyles = function () {
-        var _this = this;
-        Object.keys(this._localTimelineStyles).forEach(function (prop) {
-            var /** @type {?} */ val = _this._localTimelineStyles[prop];
-            _this._pendingStyles[prop] = val;
-            _this._updateStyle(prop, val);
-        });
-    };
-    /**
-     * @return {?}
-     */
-    TimelineBuilder.prototype.getFinalKeyframe = function () { return this._keyframes.get(this.duration); };
-    Object.defineProperty(TimelineBuilder.prototype, "properties", {
-        /**
-         * @return {?}
-         */
-        get: function () {
-            var /** @type {?} */ properties = [];
-            for (var /** @type {?} */ prop in this._currentKeyframe) {
-                properties.push(prop);
-            }
-            return properties;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    /**
-     * @param {?} timeline
-     * @return {?}
-     */
-    TimelineBuilder.prototype.mergeTimelineCollectedStyles = function (timeline) {
-        var _this = this;
-        Object.keys(timeline._styleSummary).forEach(function (prop) {
-            var /** @type {?} */ details0 = _this._styleSummary[prop];
-            var /** @type {?} */ details1 = timeline._styleSummary[prop];
-            if (!details0 || details1.time > details0.time) {
-                _this._updateStyle(prop, details1.value);
-            }
-        });
-    };
-    /**
-     * @return {?}
-     */
-    TimelineBuilder.prototype.buildKeyframes = function () {
-        var _this = this;
-        this.applyStylesToKeyframe();
-        var /** @type {?} */ preStyleProps = new Set();
-        var /** @type {?} */ postStyleProps = new Set();
-        var /** @type {?} */ isEmpty = this._keyframes.size === 1 && this.duration === 0;
-        var /** @type {?} */ finalKeyframes = [];
-        this._keyframes.forEach(function (keyframe, time) {
-            var /** @type {?} */ finalKeyframe = copyStyles(keyframe, true);
-            Object.keys(finalKeyframe).forEach(function (prop) {
-                var /** @type {?} */ value = finalKeyframe[prop];
-                if (value == ɵPRE_STYLE) {
-                    preStyleProps.add(prop);
-                }
-                else if (value == AUTO_STYLE) {
-                    postStyleProps.add(prop);
-                }
-            });
-            if (!isEmpty) {
-                finalKeyframe['offset'] = time / _this.duration;
-            }
-            finalKeyframes.push(finalKeyframe);
-        });
-        var /** @type {?} */ preProps = preStyleProps.size ? iteratorToArray(preStyleProps.values()) : [];
-        var /** @type {?} */ postProps = postStyleProps.size ? iteratorToArray(postStyleProps.values()) : [];
-        // special case for a 0-second animation (which is designed just to place styles onscreen)
-        if (isEmpty) {
-            var /** @type {?} */ kf0 = finalKeyframes[0];
-            var /** @type {?} */ kf1 = copyObj(kf0);
-            kf0['offset'] = 0;
-            kf1['offset'] = 1;
-            finalKeyframes = [kf0, kf1];
-        }
-        return createTimelineInstruction(this.element, finalKeyframes, preProps, postProps, this.duration, this.startTime, this.easing, false);
-    };
-    return TimelineBuilder;
-}());
-var SubTimelineBuilder = (function (_super) {
-    tslib_1.__extends(SubTimelineBuilder, _super);
-    /**
-     * @param {?} element
-     * @param {?} keyframes
-     * @param {?} preStyleProps
-     * @param {?} postStyleProps
-     * @param {?} timings
-     * @param {?=} _stretchStartingKeyframe
-     */
-    function SubTimelineBuilder(element, keyframes, preStyleProps, postStyleProps, timings, _stretchStartingKeyframe) {
-        if (_stretchStartingKeyframe === void 0) { _stretchStartingKeyframe = false; }
-        var _this = _super.call(this, element, timings.delay) || this;
-        _this.element = element;
-        _this.keyframes = keyframes;
-        _this.preStyleProps = preStyleProps;
-        _this.postStyleProps = postStyleProps;
-        _this._stretchStartingKeyframe = _stretchStartingKeyframe;
-        _this.timings = { duration: timings.duration, delay: timings.delay, easing: timings.easing };
-        return _this;
-    }
-    /**
-     * @return {?}
-     */
-    SubTimelineBuilder.prototype.containsAnimation = function () { return this.keyframes.length > 1; };
-    /**
-     * @return {?}
-     */
-    SubTimelineBuilder.prototype.buildKeyframes = function () {
-        var /** @type {?} */ keyframes = this.keyframes;
-        var _a = this.timings, delay = _a.delay, duration = _a.duration, easing = _a.easing;
-        if (this._stretchStartingKeyframe && delay) {
-            var /** @type {?} */ newKeyframes = [];
-            var /** @type {?} */ totalTime = duration + delay;
-            var /** @type {?} */ startingGap = delay / totalTime;
-            // the original starting keyframe now starts once the delay is done
-            var /** @type {?} */ newFirstKeyframe = copyStyles(keyframes[0], false);
-            newFirstKeyframe['offset'] = 0;
-            newKeyframes.push(newFirstKeyframe);
-            var /** @type {?} */ oldFirstKeyframe = copyStyles(keyframes[0], false);
-            oldFirstKeyframe['offset'] = roundOffset(startingGap);
-            newKeyframes.push(oldFirstKeyframe);
-            /*
-              When the keyframe is stretched then it means that the delay before the animation
-              starts is gone. Instead the first keyframe is placed at the start of the animation
-              and it is then copied to where it starts when the original delay is over. This basically
-              means nothing animates during that delay, but the styles are still renderered. For this
-              to work the original offset values that exist in the original keyframes must be "warped"
-              so that they can take the new keyframe + delay into account.
-      
-              delay=1000, duration=1000, keyframes = 0 .5 1
-      
-              turns into
-      
-              delay=0, duration=2000, keyframes = 0 .33 .66 1
-             */
-            // offsets between 1 ... n -1 are all warped by the keyframe stretch
-            var /** @type {?} */ limit = keyframes.length - 1;
-            for (var /** @type {?} */ i = 1; i <= limit; i++) {
-                var /** @type {?} */ kf = copyStyles(keyframes[i], false);
-                var /** @type {?} */ oldOffset = (kf['offset']);
-                var /** @type {?} */ timeAtKeyframe = delay + oldOffset * duration;
-                kf['offset'] = roundOffset(timeAtKeyframe / totalTime);
-                newKeyframes.push(kf);
-            }
-            // the new starting keyframe should be added at the start
-            duration = totalTime;
-            delay = 0;
-            easing = '';
-            keyframes = newKeyframes;
-        }
-        return createTimelineInstruction(this.element, keyframes, this.preStyleProps, this.postStyleProps, duration, delay, easing, true);
-    };
-    return SubTimelineBuilder;
-}(TimelineBuilder));
-/**
- * @param {?} offset
- * @param {?=} decimalPoints
- * @return {?}
- */
-function roundOffset(offset, decimalPoints) {
-    if (decimalPoints === void 0) { decimalPoints = 3; }
-    var /** @type {?} */ mult = Math.pow(10, decimalPoints - 1);
-    return Math.round(offset * mult) / mult;
-}
-/**
- * @param {?} input
- * @param {?} allStyles
- * @return {?}
- */
-function flattenStyles(input, allStyles) {
-    var /** @type {?} */ styles = {};
-    var /** @type {?} */ allProperties;
-    input.forEach(function (token) {
-        if (token === '*') {
-            allProperties = allProperties || Object.keys(allStyles);
-            allProperties.forEach(function (prop) { styles[prop] = AUTO_STYLE; });
-        }
-        else {
-            copyStyles(/** @type {?} */ (token), false, styles);
-        }
-    });
-    return styles;
-}
-/**
- * @license
- * Copyright Google Inc. All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
-var Animation = (function () {
-    /**
-     * @param {?} _driver
-     * @param {?} input
-     */
-    function Animation(_driver, input) {
-        this._driver = _driver;
-        var errors = [];
-        var ast = buildAnimationAst(input, errors);
-        if (errors.length) {
-            var errorMessage = "animation validation failed:\n" + errors.join("\n");
-            throw new Error(errorMessage);
-        }
-        this._animationAst = ast;
-    }
-    /**
-     * @param {?} element
-     * @param {?} startingStyles
-     * @param {?} destinationStyles
-     * @param {?} options
-     * @param {?=} subInstructions
-     * @return {?}
-     */
-    Animation.prototype.buildTimelines = function (element, startingStyles, destinationStyles, options, subInstructions) {
-        var /** @type {?} */ start = Array.isArray(startingStyles) ? normalizeStyles(startingStyles) : (startingStyles);
-        var /** @type {?} */ dest = Array.isArray(destinationStyles) ? normalizeStyles(destinationStyles) : (destinationStyles);
-        var /** @type {?} */ errors = [];
-        subInstructions = subInstructions || new ElementInstructionMap();
-        var /** @type {?} */ result = buildAnimationTimelines(this._driver, element, this._animationAst, start, dest, options, subInstructions, errors);
-        if (errors.length) {
-            var /** @type {?} */ errorMessage = "animation building failed:\n" + errors.join("\n");
-            throw new Error(errorMessage);
-        }
-        return result;
-    };
-    return Animation;
-}());
-/**
- * @license
- * Copyright Google Inc. All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
-/**
- * @experimental Animation support is experimental.
- */
-/**
- * @license
- * Copyright Google Inc. All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */ var AnimationStyleNormalizer = (function () {
-    function AnimationStyleNormalizer() {
-    }
-    return AnimationStyleNormalizer;
-}());
-/**
- * @experimental Animation support is experimental.
- */
-var NoopAnimationStyleNormalizer = (function () {
-    function NoopAnimationStyleNormalizer() {
-    }
-    NoopAnimationStyleNormalizer.prototype.normalizePropertyName = function (propertyName, errors) { return propertyName; };
-    NoopAnimationStyleNormalizer.prototype.normalizeStyleValue = function (userProvidedProperty, normalizedProperty, value, errors) {
-        return value;
-    };
-    return NoopAnimationStyleNormalizer;
-}());
-/**
- * @license
- * Copyright Google Inc. All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
-var WebAnimationsStyleNormalizer = (function (_super) {
-    tslib_1.__extends(WebAnimationsStyleNormalizer, _super);
-    function WebAnimationsStyleNormalizer() {
-        return _super !== null && _super.apply(this, arguments) || this;
-    }
-    /**
-     * @param {?} propertyName
-     * @param {?} errors
-     * @return {?}
-     */
-    WebAnimationsStyleNormalizer.prototype.normalizePropertyName = function (propertyName, errors) {
-        return dashCaseToCamelCase(propertyName);
-    };
-    /**
-     * @param {?} userProvidedProperty
-     * @param {?} normalizedProperty
-     * @param {?} value
-     * @param {?} errors
-     * @return {?}
-     */
-    WebAnimationsStyleNormalizer.prototype.normalizeStyleValue = function (userProvidedProperty, normalizedProperty, value, errors) {
-        var /** @type {?} */ unit = '';
-        var /** @type {?} */ strVal = value.toString().trim();
-        if (DIMENSIONAL_PROP_MAP[normalizedProperty] && value !== 0 && value !== '0') {
-            if (typeof value === 'number') {
-                unit = 'px';
-            }
-            else {
-                var /** @type {?} */ valAndSuffixMatch = value.match(/^[+-]?[\d\.]+([a-z]*)$/);
-                if (valAndSuffixMatch && valAndSuffixMatch[1].length == 0) {
-                    errors.push("Please provide a CSS unit value for " + userProvidedProperty + ":" + value);
-                }
-            }
-        }
-        return strVal + unit;
-    };
-    return WebAnimationsStyleNormalizer;
-}(AnimationStyleNormalizer));
-var DIMENSIONAL_PROP_MAP = makeBooleanMap('width,height,minWidth,minHeight,maxWidth,maxHeight,left,top,bottom,right,fontSize,outlineWidth,outlineOffset,paddingTop,paddingLeft,paddingBottom,paddingRight,marginTop,marginLeft,marginBottom,marginRight,borderRadius,borderWidth,borderTopWidth,borderLeftWidth,borderRightWidth,borderBottomWidth,textIndent,perspective'
-    .split(','));
-/**
- * @param {?} keys
- * @return {?}
- */
-function makeBooleanMap(keys) {
-    var /** @type {?} */ map = {};
-    keys.forEach(function (key) { return map[key] = 

<TRUNCATED>