diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 808040fa..15142a7e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -20,6 +20,7 @@ is the default target for pull requests. 1. Commit changes to your fork. 1. Create a pull request from your fork of web-animations-js to [web-animations/web-animations-js/dev](https://github.com/web-animations/web-animations-js/tree/dev). +1. Ensure that you've signed the [Google Contributor License Agreement](https://cla.developers.google.com/clas). ## Debugging tests @@ -83,7 +84,7 @@ Example: `http://localhost:9876/base/test/web-platform-tests/web-animations/anim npm install grunt # Optional "grunt test" to make sure everything still passes. - git add -f *.min.js* + git add -f *.min.js{,.map} git rm .gitignore git commit -m 'Add build artifacts from '`cat .git/refs/heads/dev` git push HEAD:refs/heads/master diff --git a/Gruntfile.js b/Gruntfile.js index aeeb406d..aad63761 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -206,6 +206,7 @@ module.exports = function(grunt) { } function filterTests(testFiles) { + console.assert(testFiles.length > 0); if (!testFilter) { return testFiles; } @@ -226,18 +227,20 @@ module.exports = function(grunt) { karmaConfig.files = ['test/karma-mocha-setup.js'].concat(config.src, testFiles); }); } - function runWebPlatformTests() { + function runWebPlatformTests(withNativeFallback) { var testFiles = filterTests(grunt.file.expand(config.webPlatformTests)); if (testFiles.length == 0) { return Promise.resolve(true); } - console.info('Running web-platform-tests/web-animations tests...'); + var withOrWithout = withNativeFallback ? 'with' : 'without'; + console.info('Running web-platform-tests/web-animations tests for target ' + task.target + ' ' + withOrWithout + ' native fallback...'); return runKarma(function(karmaConfig) { configCallback(karmaConfig); karmaConfig.client.testharnessTests = require('./test/web-platform-tests-expectations.js'); karmaConfig.client.testharnessTests.testURLList = testFiles; - karmaConfig.proxies['/base/polyfill.js'] = '/base/' + task.target + '.min.js'; + karmaConfig.client.testharnessTests.target = task.target; + karmaConfig.client.testharnessTests.withNativeFallback = withNativeFallback; karmaConfig.files.push('test/karma-testharness-adapter.js'); var servedFiles = [ 'test/web-platform-tests/resources/**', @@ -256,10 +259,15 @@ module.exports = function(grunt) { } var polyfillTestsPassed = false; + var webPlatformTestsWithFallbackPassed = false; + var webPlatformTestsWithoutFallbackPassed = false; runPolyfillTests().then(success => { polyfillTestsPassed = success; - }).then(runWebPlatformTests).then(webPlatformTestsPassed => { - done(polyfillTestsPassed && webPlatformTestsPassed); + }).then(() => runWebPlatformTests(true)).then(success => { + webPlatformTestsWithFallbackPassed = success; + }).then(() => runWebPlatformTests(false)).then(success => { + webPlatformTestsWithoutFallbackPassed = success; + done(polyfillTestsPassed && webPlatformTestsWithFallbackPassed && webPlatformTestsWithoutFallbackPassed); }).catch(function(error) { console.error(error); done(false); diff --git a/History.md b/History.md index 152b032b..22e83052 100644 --- a/History.md +++ b/History.md @@ -1,3 +1,9 @@ +### 2.3.0 - *July 20 2017* + + * [Support IE/Edge SVG transforms.](https://github.com/web-animations/web-animations-js/pull/148) + + * [Parse and evaluate calc expressions without eval.](https://github.com/web-animations/web-animations-js/pull/151) + ### 2.2.5 - *April 17 2017* * Removed erroneously added *.gz files from release. diff --git a/package.json b/package.json index 50ed8a44..413a22e9 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "type": "git", "url": "https://github.com/web-animations/web-animations-js.git" }, - "version": "2.2.5", + "version": "2.3.0", "keywords": [ "animations", "polyfill" diff --git a/src/apply-preserving-inline-style.js b/src/apply-preserving-inline-style.js index 795be364..4002a2f5 100644 --- a/src/apply-preserving-inline-style.js +++ b/src/apply-preserving-inline-style.js @@ -14,6 +14,28 @@ (function(scope, testing) { + var SVG_TRANSFORM_PROP = '_webAnimationsUpdateSvgTransformAttr'; + + /** + * IE/Edge do not support `transform` styles for SVG elements. Instead, + * `transform` attribute can be animated with some restrictions. + * See https://connect.microsoft.com/IE/feedback/details/811744/ie11-bug-with-implementation-of-css-transforms-in-svg, + * https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/1173754/, + * https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/101242/, etc. + * The same problem is exhibited by pre-Chrome Android browsers (ICS). + * Unfortunately, there's no easy way to feature-detect it. + */ + function updateSvgTransformAttr(window, element) { + if (!element.namespaceURI || element.namespaceURI.indexOf('/svg') == -1) { + return false; + } + if (!(SVG_TRANSFORM_PROP in window)) { + window[SVG_TRANSFORM_PROP] = + /Trident|MSIE|IEMobile|Edge|Android 4/i.test(window.navigator.userAgent); + } + return window[SVG_TRANSFORM_PROP]; + } + var styleAttributes = { cssText: 1, length: 1, @@ -44,6 +66,7 @@ WEB_ANIMATIONS_TESTING && console.assert(!(element.style instanceof AnimatedCSSStyleDeclaration), 'Element must not already have an animated style attached.'); + this._element = element; // Stores the inline style of the element on its behalf while the // polyfill uses the element's inline style to simulate web animations. // This is needed to fake regular inline style CSSOM access on the element. @@ -51,6 +74,8 @@ this._style = element.style; this._length = 0; this._isAnimatedProperty = {}; + this._updateSvgTransformAttr = updateSvgTransformAttr(window, element); + this._savedTransformAttr = null; // Copy the inline style contents over to the surrogate. for (var i = 0; i < this._style.length; i++) { @@ -110,9 +135,30 @@ _set: function(property, value) { this._style[property] = value; this._isAnimatedProperty[property] = true; + if (this._updateSvgTransformAttr && + scope.unprefixedPropertyName(property) == 'transform') { + // On IE/Edge, also set SVG element's `transform` attribute to 2d + // matrix of the transform. The `transform` style does not work, but + // `transform` attribute can be used instead. + // Notice, if the platform indeed supports SVG/CSS transforms the CSS + // declaration is supposed to override the attribute. + if (this._savedTransformAttr == null) { + this._savedTransformAttr = this._element.getAttribute('transform'); + } + this._element.setAttribute('transform', scope.transformToSvgMatrix(value)); + } }, _clear: function(property) { this._style[property] = this._surrogateStyle[property]; + if (this._updateSvgTransformAttr && + scope.unprefixedPropertyName(property) == 'transform') { + if (this._savedTransformAttr) { + this._element.setAttribute('transform', this._savedTransformAttr); + } else { + this._element.removeAttribute('transform'); + } + this._savedTransformAttr = null; + } delete this._isAnimatedProperty[property]; }, }; @@ -185,7 +231,9 @@ } }; - if (WEB_ANIMATIONS_TESTING) + if (WEB_ANIMATIONS_TESTING) { testing.ensureStyleIsPatched = ensureStyleIsPatched; + testing.updateSvgTransformAttr = updateSvgTransformAttr; + } })(webAnimations1, webAnimationsTesting); diff --git a/src/dimension-handler.js b/src/dimension-handler.js index f1b263d1..9e487f97 100644 --- a/src/dimension-handler.js +++ b/src/dimension-handler.js @@ -14,6 +14,78 @@ (function(scope, testing) { + // Evaluates a calc expression. + // https://drafts.csswg.org/css-values-3/#calc-notation + function calculate(expression) { + // In calc expressions, white space is required on both sides of the + // + and - operators. https://drafts.csswg.org/css-values-3/#calc-notation + // Thus any + or - immediately adjacent to . or 0..9 is part of the number, + // e.g. -1.23e+45 + // This regular expression matches ( ) * / + - and numbers. + var tokenRegularExpression = /([\+\-\w\.]+|[\(\)\*\/])/g; + var currentToken; + function consume() { + var matchResult = tokenRegularExpression.exec(expression); + if (matchResult) + currentToken = matchResult[0]; + else + currentToken = undefined; + } + consume(); // Read the initial token. + + function calcNumber() { + // https://drafts.csswg.org/css-values-3/#number-value + var result = Number(currentToken); + consume(); + return result; + } + + function calcValue() { + // = | | | ( ) + if (currentToken !== '(') + return calcNumber(); + consume(); + var result = calcSum(); + if (currentToken !== ')') + return NaN; + consume(); + return result; + } + + function calcProduct() { + // = [ '*' | '/' ]* + var left = calcValue(); + while (currentToken === '*' || currentToken === '/') { + var operator = currentToken; + consume(); + var right = calcValue(); + if (operator === '*') + left *= right; + else + left /= right; + } + return left; + } + + function calcSum() { + // = [ [ '+' | '-' ] ]* + var left = calcProduct(); + while (currentToken === '+' || currentToken === '-') { + var operator = currentToken; + consume(); + var right = calcProduct(); + if (operator === '+') + left += right; + else + left -= right; + } + return left; + } + + // = calc( ) + return calcSum(); + } + function parseDimension(unitRegExp, string) { string = string.trim().toLowerCase(); @@ -36,7 +108,7 @@ var taggedUnitRegExp = 'U(' + unitRegExp.source + ')'; // Validating input is simply applying as many reductions as we can. - var typeCheck = string.replace(/[-+]?(\d*\.)?\d+/g, 'N') + var typeCheck = string.replace(/[-+]?(\d*\.)?\d+([Ee][-+]?\d+)?/g, 'N') .replace(new RegExp('N' + taggedUnitRegExp, 'g'), 'D') .replace(/\s[+-]\s/g, 'O') .replace(/\s/g, ''); @@ -54,7 +126,7 @@ return; for (var unit in matchedUnits) { - var result = eval(string.replace(new RegExp('U' + unit, 'g'), '').replace(new RegExp(taggedUnitRegExp, 'g'), '*0')); + var result = calculate(string.replace(new RegExp('U' + unit, 'g'), '').replace(new RegExp(taggedUnitRegExp, 'g'), '*0')); if (!isFinite(result)) return; matchedUnits[unit] = result; diff --git a/src/matrix-decomposition.js b/src/matrix-decomposition.js index 4172513d..aa9cfe76 100644 --- a/src/matrix-decomposition.js +++ b/src/matrix-decomposition.js @@ -435,5 +435,6 @@ scope.dot = dot; scope.makeMatrixDecomposition = makeMatrixDecomposition; + scope.transformListToMatrix = convertToMatrix; })(webAnimations1, webAnimationsTesting); diff --git a/src/property-names.js b/src/property-names.js index c52d990c..f106c066 100644 --- a/src/property-names.js +++ b/src/property-names.js @@ -14,13 +14,15 @@ (function(scope, testing) { - var aliased = {}; + var prefixed = {}; + var unprefixed = {}; function alias(name, aliases) { aliases.concat([name]).forEach(function(candidate) { if (candidate in document.documentElement.style) { - aliased[name] = candidate; + prefixed[name] = candidate; } + unprefixed[candidate] = name; }); } alias('transform', ['webkitTransform', 'msTransform']); @@ -29,7 +31,10 @@ alias('perspectiveOrigin', ['webkitPerspectiveOrigin']); scope.propertyName = function(property) { - return aliased[property] || property; + return prefixed[property] || property; + }; + scope.unprefixedPropertyName = function(property) { + return unprefixed[property] || property; }; })(webAnimations1, webAnimationsTesting); diff --git a/src/transform-handler.js b/src/transform-handler.js index c4482961..c6b4d934 100644 --- a/src/transform-handler.js +++ b/src/transform-handler.js @@ -256,6 +256,19 @@ scope.addPropertiesHandler(parseTransform, mergeTransforms, ['transform']); + scope.transformToSvgMatrix = function(string) { + // matrix( ) + var mat = scope.transformListToMatrix(parseTransform(string)); + return 'matrix(' + + numberToLongString(mat[0]) + ' ' + // + numberToLongString(mat[1]) + ' ' + // + numberToLongString(mat[4]) + ' ' + // + numberToLongString(mat[5]) + ' ' + // + numberToLongString(mat[12]) + ' ' + // + numberToLongString(mat[13]) + // + ')'; + }; + if (WEB_ANIMATIONS_TESTING) testing.parseTransform = parseTransform; diff --git a/test/js/apply-preserving-inline-style.js b/test/js/apply-preserving-inline-style.js index fe080e6b..a8490d20 100644 --- a/test/js/apply-preserving-inline-style.js +++ b/test/js/apply-preserving-inline-style.js @@ -4,9 +4,15 @@ suite('apply-preserving-inline-style', function() { ensureStyleIsPatched(this.element); this.style = this.element.style; document.documentElement.appendChild(this.element); + this.svgContainer = document.createElementNS( + 'http://www.w3.org/2000/svg', 'svg'); + document.documentElement.appendChild(this.svgContainer); + delete window._webAnimationsUpdateSvgTransformAttr; }); teardown(function() { document.documentElement.removeChild(this.element); + document.documentElement.removeChild(this.svgContainer); + delete window._webAnimationsUpdateSvgTransformAttr; }); test('Style is patched', function() { @@ -69,4 +75,119 @@ suite('apply-preserving-inline-style', function() { this.style.cssText = 'top: 0px'; assert.equal(this.style.length, 1); }); + test('Detect SVG transform compatibility', function() { + var element = document.createElement('div'); + var svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); + function check(userAgent, shouldUpdateSvgTransformAttr) { + var win = {navigator: {userAgent: userAgent}}; + // Non-SVG element is never updated. + assert.equal(updateSvgTransformAttr(win, element), false); + // SVG element may be updated as tested. + assert.equal(updateSvgTransformAttr(win, svgElement), + shouldUpdateSvgTransformAttr); + } + // Unknown data: assume that transforms supported. + check('', false); + // Chrome: transforms supported. + check('Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E)' + + ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.20' + + ' Mobile Safari/537.36', + false); + // Safari: transforms supported. + check('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) ' + + 'AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 ' + + 'Safari/7046A194A', + false); + // Firefox: transforms supported. + check('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) ' + + 'Gecko/20100101 Firefox/40.1', + false); + // IE: transforms are NOT supported. + check('Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 7.0;' + + ' InfoPath.3; .NET CLR 3.1.40767; Trident/6.0; en-IN)', + true); + // Edge: transforms are NOT supported. + check('Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36' + + ' (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36' + + ' Edge/12.10136', + true); + // ICS Android: transforms are NOT supported. + check('Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; MZ604 Build/I.7.1-45)' + + ' AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30', + true); + }); + test('Set and clear transform', function() { + // This is not an SVG element, so CSS transform support is not consulted. + window._webAnimationsUpdateSvgTransformAttr = true; + // Set. + this.element.style._set('transform', 'translate(10px, 10px) scale(2)'); + assert.equal(getComputedStyle(this.element).transform, + 'matrix(2, 0, 0, 2, 10, 10)'); + assert.equal(this.element.hasAttribute('transform'), false); + // Clear. + this.element.style._clear('transform'); + assert.equal(getComputedStyle(this.element).transform, 'none'); + assert.equal(this.element.hasAttribute('transform'), false); + }); + test('Set and clear supported transform on SVG element', function() { + window._webAnimationsUpdateSvgTransformAttr = false; + var svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); + ensureStyleIsPatched(svgElement); + this.svgContainer.appendChild(svgElement); + // Set. + svgElement.style._set('transform', 'translate(10px, 10px) scale(2)'); + assert.equal(getComputedStyle(svgElement).transform, + 'matrix(2, 0, 0, 2, 10, 10)'); + assert.equal(svgElement.hasAttribute('transform'), false); + // Clear. + svgElement.style._clear('transform'); + assert.equal(getComputedStyle(svgElement).transform, 'none'); + assert.equal(svgElement.hasAttribute('transform'), false); + }); + test('Set and clear transform CSS property not supported on SVG element', function() { + window._webAnimationsUpdateSvgTransformAttr = true; + var svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); + ensureStyleIsPatched(svgElement); + this.svgContainer.appendChild(svgElement); + // Set. + svgElement.style._set('transform', 'translate(10px, 10px) scale(2)'); + assert.equal(getComputedStyle(svgElement).transform, + 'matrix(2, 0, 0, 2, 10, 10)'); + assert.equal(svgElement.getAttribute('transform'), + 'matrix(2 0 0 2 10 10)'); + // Clear. + svgElement.style._clear('transform'); + assert.equal(getComputedStyle(svgElement).transform, 'none'); + assert.equal(svgElement.getAttribute('transform'), null); + }); + test('Set and clear prefixed transform CSS property not supported on SVG element', function() { + window._webAnimationsUpdateSvgTransformAttr = true; + var svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); + ensureStyleIsPatched(svgElement); + this.svgContainer.appendChild(svgElement); + // Set. + svgElement.style._set('msTransform', 'translate(10px, 10px) scale(2)'); + assert.equal(svgElement.getAttribute('transform'), + 'matrix(2 0 0 2 10 10)'); + // Clear. + svgElement.style._clear('msTransform'); + assert.equal(svgElement.getAttribute('transform'), null); + }); + test('Restore transform CSS property not supported on SVG element', function() { + window._webAnimationsUpdateSvgTransformAttr = true; + var svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); + svgElement.setAttribute('transform', 'matrix(2 0 0 2 0 0)'); + ensureStyleIsPatched(svgElement); + this.svgContainer.appendChild(svgElement); + // Set. + svgElement.style._set('transform', 'translate(10px, 10px) scale(2)'); + assert.equal(getComputedStyle(svgElement).transform, + 'matrix(2, 0, 0, 2, 10, 10)'); + assert.equal(svgElement.getAttribute('transform'), + 'matrix(2 0 0 2 10 10)'); + // Clear. + svgElement.style._clear('transform'); + assert.equal(getComputedStyle(svgElement).transform, 'none'); + assert.equal(svgElement.getAttribute('transform'), 'matrix(2 0 0 2 0 0)'); + }); }); diff --git a/test/js/dimension-handler.js b/test/js/dimension-handler.js index baa04253..c3580b30 100644 --- a/test/js/dimension-handler.js +++ b/test/js/dimension-handler.js @@ -18,6 +18,8 @@ suite('dimension-handler', function() { {px: 50.0, em: -6.5}); assert.deepEqual(webAnimations1.parseLength('calc((5px + 2px)*(1 + 2*(4 + 2*-5)) + 7px - (5em + 6vw/2)*4)'), {px: -70, em: -20, vw: -12}); + assert.deepEqual(webAnimations1.parseLength('calc(-13.2E+1rem/+12e-1/(+1 + +2 - -2 * 2 - -3))'), + {rem: -11}); assert.deepEqual(webAnimations1.parseLength('calc(calc(5px) + calc(((3))) *calc(calc(10px)))'), {px: 35}); }); diff --git a/test/karma-testharness-adapter.js b/test/karma-testharness-adapter.js index fa855a23..54eb6cc4 100644 --- a/test/karma-testharness-adapter.js +++ b/test/karma-testharness-adapter.js @@ -18,8 +18,12 @@ // Behaves like JSON.stringify() except only for strings and outputs strings with single quotes // instead of double quotes. // This so we can paste test results as expectations while keeping our linter happy. - function stringify(string) { - return '\'' + string.replace(/\\/g, '\\\\').replace(/\n/g, '\\n').replace(/'/g, '\\\'') + '\''; + function stringify(x) { + if (typeof x == 'string') { + return '\'' + x.replace(/\\/g, '\\\\').replace(/\n/g, '\\n').replace(/'/g, '\\\'') + '\''; + } + console.assert(typeof x != 'object'); + return x.toString(); } function checkExpectations(testURL, passes, failures, expectedFailures) { @@ -98,10 +102,12 @@ function checkConfig(config) { var requiredProperties = { + target: '', testURLList: '', skip: '', - expectedFailures: '', + failureConfigurations: '', flakyTestIndicator: '', + withNativeFallback: '', }; var errorMessage = ''; if (!config) { @@ -125,29 +131,64 @@ return true; } + var filteredConfigurationAttributes = ['target', 'withNativeFallback']; + // Serialises the failures suitable for pasting into expectedFailures: {} in web-platform-tests-expectations.js - function formatFailures(failures) { + function formatFailures(config, failures) { + var result = ' {\n'; + + result += ' configuration: {\n'; + filteredConfigurationAttributes.forEach(function(attribute) { + result += ' ' + attribute + ': ' + stringify(config[attribute]) + ',\n'; + }); + result += ' },\n'; + + result += ' failures: {\n'; var testURLs = Object.keys(failures); testURLs.sort(); - return testURLs.map(function(testURL) { + result += testURLs.map(function(testURL) { var tests = Object.keys(failures[testURL]); tests.sort(); return ( - ' ' + stringify(testURL) + ': {\n' + + ' ' + stringify(testURL) + ': {\n' + tests.map(function(test) { return ( - ' ' + stringify(test) + ':\n' + - ' ' + stringify(failures[testURL][test]) + ',\n'); + ' ' + stringify(test) + ':\n' + + ' ' + stringify(failures[testURL][test]) + ',\n'); }).join('\n') + - ' },\n'); + ' },\n'); }).join('\n'); + result += ' },\n'; + + result += ' },\n'; + return result; + } + + function getExpectedFailures(config, testURL) { + var result = {}; + config.failureConfigurations.forEach(function(failureConfiguration) { + var configFilter = failureConfiguration.configuration; + var filterMatches = filteredConfigurationAttributes.every(function(attribute) { + console.assert(attribute in config); + console.assert(attribute in configFilter); + return configFilter[attribute] == null || config[attribute] == configFilter[attribute]; + }); + if (!filterMatches) { + return; + } + var testURLFailures = failureConfiguration.failures[testURL] || []; + for (var testName in testURLFailures) { + result[testName] = testURLFailures[testName]; + } + }); + return result; } function runRemainingTests(remainingTestURLs, config, testNameDiv, iframe, outputFailures) { if (remainingTestURLs.length == 0) { karma.complete(); window.failures = outputFailures; - window.formattedFailures = formatFailures(outputFailures); + window.formattedFailures = formatFailures(config, outputFailures); return; } @@ -167,11 +208,11 @@ // parent window and call it once testharness.js has loaded. window.onTestharnessLoaded = function(innerWindow) { innerWindow.add_completion_callback(function(results) { - var expectations = config.expectedFailures[testURL]; + var expectedFailures = getExpectedFailures(config, testURL); var failures = {}; var passes = {}; results.forEach(function(result) { - if (expectations && expectations[result.name] == config.flakyTestIndicator) { + if (expectedFailures && expectedFailures[result.name] == config.flakyTestIndicator) { failures[result.name] = config.flakyTestIndicator; return; } @@ -188,7 +229,7 @@ outputFailures[testURL] = failures; } - karma.result(checkExpectations(testURL, passes, failures, expectations)); + karma.result(checkExpectations(testURL, passes, failures, expectedFailures)); runRemainingTests(remainingTestURLs.slice(1), config, testNameDiv, iframe, outputFailures); }); }; diff --git a/test/resources/testharnessreport.js b/test/resources/testharnessreport.js index a6559852..358f72d7 100644 --- a/test/resources/testharnessreport.js +++ b/test/resources/testharnessreport.js @@ -407,17 +407,14 @@ function dump_test_results(tests, status) { /* BEGIN WEB ANIMATIONS POLYFILL EXTRAS */ -// Disable native Web Animations fallback. -// TODO(alancutter): Make this configurable in testing targets. -Element.prototype.animate = null; - -// The path /base/polyfill.js is expected to be a proxy for the appropriate polyfill script configured in Karma. -document.write(''); -if (window.parent && parent.window.onTestharnessLoaded) { - parent.window.onTestharnessLoaded(window); -} else { - metadata_generator.setup(); +// This must be run under a Karma server via "grunt test". +var config = window.parent.__karma__.config.testharnessTests; +if (!config.withNativeFallback) { + // Disable native Web Animations fallback. + Element.prototype.animate = null; } +document.write(''); +parent.window.onTestharnessLoaded(window); /* END WEB ANIMATIONS POLYFILL EXTRAS */ diff --git a/test/web-platform-tests-expectations.js b/test/web-platform-tests-expectations.js index d8bbd6bb..22461d15 100644 --- a/test/web-platform-tests-expectations.js +++ b/test/web-platform-tests-expectations.js @@ -6,1339 +6,2694 @@ module.exports = { }, flakyTestIndicator: 'FLAKY_TEST_RESULT', - expectedFailures: { - 'test/web-platform-tests/web-animations/interfaces/Animatable/animate-basic.html': { - 'Element.animate() creates an Animation object': - 'assert_equals: Returned object is an Animation expected "[object Animation]" but got "[object Object]"', - - // Seems to be a bug in Firefox 47 onwards? The TypeError is thrown but disappears by the time it bubbles up to assert_throws(). - 'Element.animate() does not accept property-indexed keyframes with an invalid easing value': - 'assert_throws: function "function () {\n div.animate(subtest.input, 2000);\n }" did not throw', + + // Schema for failureConfigurations: + // failureConfigurations := [ ] + // failureConfiguration := { configuration: ?, failures: } + // configuration := { target: ?, withNativeFallback: ? } + // failures := { : { : } } + failureConfigurations: [ + { + configuration: { + target: 'web-animations', + withNativeFallback: true, + }, + failures: { + 'test/web-platform-tests/web-animations/animation-model/keyframe-effects/effect-value-context.html': { + 'Effect values reflect changes to font-size when computed style is not immediately flushed': + 'assert_equals: Effect value after updating font-size on parent element expected "300px" but got "150px"', + }, + }, + }, + { + configuration: { + target: 'web-animations', + withNativeFallback: false, + }, + failures: { + 'test/web-platform-tests/web-animations/interfaces/Animatable/animate-basic.html': { + 'Element.animate() creates an Animation object': + 'assert_equals: Returned object is an Animation expected "[object Animation]" but got "[object Object]"', + + 'Element.animate() does not accept property-indexed keyframes with an invalid easing value': + 'assert_throws: function "function () {\n div.animate(subtest.input, 2000);\n }" did not throw', + }, + + 'test/web-platform-tests/web-animations/interfaces/Animation/cancel.html': { + 'Animated style is cleared after calling Animation.cancel()': + 'assert_not_equals: transform style is animated before cancelling got disallowed value "none"', + }, + + 'test/web-platform-tests/web-animations/interfaces/Animation/pause.html': { + 'pause() from idle': + 'assert_equals: initially pause-pending expected "pending" but got "paused"', + }, + + 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/effect-easing.html': { + 'effect easing produces negative values 1 with keyframe easing cubic-bezier(0, 0, 0, 0)': + 'assert_approx_equals: The left of the animation should be approximately -29.501119758965654 at 250ms expected -29.501119758965654 +/- 0.01 but got 0', + + 'effect easing produces values greater than 1 with keyframe easing cubic-bezier(1, 1, 1, 1)': + 'assert_approx_equals: The left of the animation should be approximately 102.40666638411385 at 250ms expected 102.40666638411385 +/- 0.01 but got 100', + + 'effect easing which produces values greater than 1 and the tangent on the upper boundary is infinity with keyframe easing producing values greater than 1': + 'assert_approx_equals: The left of the animation should be approximately 100 at 240ms expected 100 +/- 0.01 but got 99.5333', + }, + }, }, - 'test/web-platform-tests/web-animations/interfaces/Animatable/animate-effect.html': { - 'Element.animate() accepts a double as an options argument': - 'assert_equals: expected "auto" but got "none"', + { + configuration: { + target: 'web-animations-next', + withNativeFallback: true, + }, + failures: { + 'test/web-platform-tests/web-animations/animation-model/keyframe-effects/effect-value-context.html': { + 'Effect values reflect changes to font-size when computed style is not immediately flushed': + 'assert_equals: Effect value after updating font-size on parent element expected "300px" but got "150px"', + }, - 'Element.animate() accepts a keyframe sequence where greater shorthand precedes lesser shorthand': - 'anim.effect.getKeyframes is not a function', + 'test/web-platform-tests/web-animations/interfaces/Animatable/animate-basic.html': { + 'Element.animate() creates an Animation object': + 'assert_equals: Returned object is an Animation expected "[object Animation]" but got "[object Object]"', + }, - 'Element.animate() accepts a keyframe sequence where lesser shorthand precedes greater shorthand': - 'anim.effect.getKeyframes is not a function', + 'test/web-platform-tests/web-animations/interfaces/Animatable/animate-effect.html': { + 'Element.animate() accepts a double as an options argument': + 'assert_equals: expected "auto" but got "none"', - 'Element.animate() accepts a keyframe sequence where longhand precedes shorthand': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a keyframe sequence where greater shorthand precedes lesser shorthand': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a keyframe sequence where shorthand precedes longhand': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a keyframe sequence where lesser shorthand precedes greater shorthand': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a keyframe sequence with a CSS variable reference': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a keyframe sequence where longhand precedes shorthand': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a keyframe sequence with a CSS variable reference in a shorthand property': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a keyframe sequence where shorthand precedes longhand': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a keyframe sequence with different composite values, but the same composite value for a given offset': - 'add compositing is not supported', + 'Element.animate() accepts a keyframe sequence with a CSS variable reference': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a keyframe sequence with different easing values, but the same easing value for a given offset': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a keyframe sequence with a CSS variable reference in a shorthand property': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a keyframe sequence with duplicate values for a given interior offset': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a keyframe sequence with different composite values, but the same composite value for a given offset': + 'add compositing is not supported', - 'Element.animate() accepts a keyframe sequence with duplicate values for offsets 0 and 1': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a keyframe sequence with different easing values, but the same easing value for a given offset': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a keyframe sequence with repeated values at offset 1 with different easings': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a keyframe sequence with duplicate values for a given interior offset': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a one property keyframe sequence with all omitted offsets': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a keyframe sequence with duplicate values for offsets 0 and 1': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a one property keyframe sequence with some omitted offsets': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a keyframe sequence with repeated values at offset 1 with different easings': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a one property one keyframe sequence': - 'Partial keyframes are not supported', + 'Element.animate() accepts a one property keyframe sequence with all omitted offsets': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a one property one non-array value property-indexed keyframes specification': - 'Partial keyframes are not supported', + 'Element.animate() accepts a one property keyframe sequence with some omitted offsets': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a one property one value property-indexed keyframes specification': - 'Partial keyframes are not supported', + 'Element.animate() accepts a one property one keyframe sequence': + 'Animation to or from an underlying value is not yet supported.', - 'Element.animate() accepts a one property two keyframe sequence': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a one property one non-array value property-indexed keyframes specification': + 'Animation to or from an underlying value is not yet supported.', - 'Element.animate() accepts a one property two keyframe sequence that needs to stringify its values': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a one property one value property-indexed keyframes specification': + 'Animation to or from an underlying value is not yet supported.', - 'Element.animate() accepts a one property two value property-indexed keyframes specification': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a one property two keyframe sequence': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a one property two value property-indexed keyframes specification that needs to stringify its values': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a one property two keyframe sequence that needs to stringify its values': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a one property two value property-indexed keyframes specification where the first value is invalid': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a one property two value property-indexed keyframes specification': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a one property two value property-indexed keyframes specification where the second value is invalid': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a one property two value property-indexed keyframes specification that needs to stringify its values': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a one shorthand property two keyframe sequence': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a one property two value property-indexed keyframes specification where the first value is invalid': + 'Animation to or from an underlying value is not yet supported.', - 'Element.animate() accepts a one shorthand property two value property-indexed keyframes specification': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a one property two value property-indexed keyframes specification where the second value is invalid': + 'Animation to or from an underlying value is not yet supported.', - 'Element.animate() accepts a property-indexed keyframes specification with a CSS variable reference': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a one shorthand property two keyframe sequence': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a property-indexed keyframes specification with a CSS variable reference in a shorthand property': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a one shorthand property two value property-indexed keyframes specification': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a property-indexed keyframes specification with an invalid value': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a property-indexed keyframes specification with a CSS variable reference': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a single keyframe sequence with omitted offsets': - 'Partial keyframes are not supported', + 'Element.animate() accepts a property-indexed keyframes specification with a CSS variable reference in a shorthand property': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a two property (a shorthand and one of its component longhands) two keyframe sequence': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a property-indexed keyframes specification with an invalid value': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a single keyframe sequence with omitted offsets': + 'Animation to or from an underlying value is not yet supported.', - 'Element.animate() accepts a two property four keyframe sequence': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a two property (a shorthand and one of its component longhands) two keyframe sequence': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a two property keyframe sequence where one property is missing from the first keyframe': - 'Partial keyframes are not supported', + 'Element.animate() accepts a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a two property keyframe sequence where one property is missing from the last keyframe': - 'Partial keyframes are not supported', + 'Element.animate() accepts a two property four keyframe sequence': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a two property keyframe sequence with some omitted offsets': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a two property keyframe sequence where one property is missing from the first keyframe': + 'Animation to or from an underlying value is not yet supported.', - 'Element.animate() accepts a two property property-indexed keyframes specification with different numbers of values': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a two property keyframe sequence where one property is missing from the last keyframe': + 'Animation to or from an underlying value is not yet supported.', - 'Element.animate() accepts a two property two keyframe sequence': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a two property keyframe sequence with some omitted offsets': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts a two property two value property-indexed keyframes specification': - 'anim.effect.getKeyframes is not a function', + 'Element.animate() accepts a two property property-indexed keyframes specification with different numbers of values': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() accepts an absent options argument': - 'assert_equals: expected (string) "auto" but got (number) 0', + 'Element.animate() accepts a two property two keyframe sequence': + 'anim.effect.getKeyframes is not a function', - 'Element.animate() creates an Animation object with a KeyframeEffect': - 'assert_equals: Returned Animation has a KeyframeEffect expected "[object KeyframeEffect]" but got "[object Object]"', - }, + 'Element.animate() accepts a two property two value property-indexed keyframes specification': + 'anim.effect.getKeyframes is not a function', - 'test/web-platform-tests/web-animations/interfaces/Animatable/animate-pseudo-element.html': { - 'CSSPseudoElement.animate() creates an Animation object': - 'document.getAnimations is not a function', + 'Element.animate() accepts an absent options argument': + 'assert_equals: expected (string) "auto" but got (number) 0', - 'CSSPseudoElement.animate() creates an Animation object targeting to the correct CSSPseudoElement object': - 'document.getAnimations is not a function', - }, + 'Element.animate() creates an Animation object with a KeyframeEffect': + 'assert_equals: Returned Animation has a KeyframeEffect expected "[object KeyframeEffect]" but got "[object Object]"', + }, - 'test/web-platform-tests/web-animations/interfaces/Animation/cancel.html': { - 'Animated style is cleared after calling Animation.cancel()': - 'assert_not_equals: transform style is animated before cancelling got disallowed value "none"', - }, + 'test/web-platform-tests/web-animations/interfaces/Animatable/animate-pseudo-element.html': { + 'CSSPseudoElement.animate() creates an Animation object': + 'document.getAnimations is not a function', - 'test/web-platform-tests/web-animations/interfaces/Animation/finish.html': { - 'Test exceptions when finishing infinite animation': - 'assert_throws: function "function () {\n animation.finish();\n }" did not throw', + 'CSSPseudoElement.animate() creates an Animation object targeting to the correct CSSPseudoElement object': + 'document.getAnimations is not a function', + }, - 'Test exceptions when finishing non-running animation': - 'assert_throws: function "function () {\n animation.finish();\n }" did not throw', + 'test/web-platform-tests/web-animations/interfaces/Animation/finish.html': { + 'Test finish() resolves finished promise synchronously with an animation without a target': + 'KeyframeEffectReadOnly is not defined', - 'Test finish() resolves finished promise synchronously with an animation without a target': - 'KeyframeEffectReadOnly is not defined', + 'Test finish() while pause-pending with negative playbackRate': + 'FLAKY_TEST_RESULT', - 'Test finish() while pause-pending with negative playbackRate': - 'assert_equals: The play state of a pause-pending animation should become "finished" after finish() is called expected "finished" but got "paused"', + 'Test finish() while pause-pending with positive playbackRate': + 'FLAKY_TEST_RESULT', - 'Test finish() while pause-pending with positive playbackRate': - 'assert_equals: The play state of a pause-pending animation should become "finished" after finish() is called expected "finished" but got "paused"', + 'Test finish() while play-pending': + 'FLAKY_TEST_RESULT', - 'Test finish() while paused': - 'assert_equals: The play state of a paused animation should become "finished" after finish() is called expected "finished" but got "paused"', + 'Test finishing of animation with a current time past the effect end': + 'animation.effect.getComputedTiming is not a function', - 'Test finish() while play-pending': - 'assert_approx_equals: The start time of a play-pending animation should be set after calling finish() expected NaN +/- 0.0005 but got 0', + 'Test normally finished animation resolves finished promise synchronously with an animation without a target': + 'KeyframeEffectReadOnly is not defined', + }, - 'Test finishing of animation with a current time past the effect end': - 'animation.effect.getComputedTiming is not a function', + 'test/web-platform-tests/web-animations/interfaces/Animation/finished.html': { + 'Test finished promise is not resolved once the animation falls out finished state even though the current finished promise is generated soon after animation state became finished': + 'assert_unreached: Animation.finished should not be resolved Reached unreachable code', - 'Test normally finished animation resolves finished promise synchronously with an animation without a target': - 'KeyframeEffectReadOnly is not defined', - }, + 'Test finished promise is not resolved when the animation falls out finished state immediately': + 'assert_unreached: Animation.finished should not be resolved Reached unreachable code', - 'test/web-platform-tests/web-animations/interfaces/Animation/finished.html': { - 'Test finished promise changes for animation duration changes': - 'assert_equals: currentTime should be unchanged when duration shortened expected 50000 but got 25000', + 'cancelling an idle animation still replaces the finished promise': + 'assert_not_equals: A redundant call to cancel() should still generate a new finished promise got disallowed value object "[object Promise]"', + }, - 'Test finished promise is not resolved once the animation falls out finished state even though the current finished promise is generated soon after animation state became finished': - 'assert_unreached: Animation.finished should not be resolved Reached unreachable code', + 'test/web-platform-tests/web-animations/interfaces/Animation/oncancel.html': { + 'oncancel event is fired when animation.cancel() is called.': + 'FLAKY_TEST_RESULT', + }, - 'Test finished promise is not resolved when the animation falls out finished state immediately': - 'assert_unreached: Animation.finished should not be resolved Reached unreachable code', + 'test/web-platform-tests/web-animations/interfaces/Animation/onfinish.html': { + 'onfinish event is fired when animation.finish() is called': + 'FLAKY_TEST_RESULT', + }, - 'cancelling an already-finished animation replaces the finished promise': - 'assert_not_equals: A new finished promise should be created when cancelling a finished animation got disallowed value object "[object Promise]"', + 'test/web-platform-tests/web-animations/interfaces/Animation/playbackRate.html': { + 'Test the effect of setting playbackRate while playing animation': + 'FLAKY_TEST_RESULT', + }, - 'cancelling an idle animation still replaces the finished promise': - 'assert_not_equals: A redundant call to cancel() should still generate a new finished promise got disallowed value object "[object Promise]"', - }, + 'test/web-platform-tests/web-animations/interfaces/Animation/reverse.html': { + 'reverse() when playbackRate < 0 and currentTime < 0': + 'assert_equals: reverse() should start playing from the start of animation time if the playbackRate < 0 and the currentTime < 0 expected 0 but got -200000', - 'test/web-platform-tests/web-animations/interfaces/Animation/oncancel.html': { - 'oncancel event is fired when animation.cancel() is called.': - 'FLAKY_TEST_RESULT', - }, + 'reverse() when playbackRate < 0 and currentTime < 0 and the target effect end is positive infinity': + 'assert_equals: reverse() should start playing from the start of animation time if the playbackRate < 0 and the currentTime < 0 and the target effect is positive infinity expected 0 but got -200000', - 'test/web-platform-tests/web-animations/interfaces/Animation/onfinish.html': { - 'onfinish event is fired when animation.finish() is called': - 'FLAKY_TEST_RESULT', - }, + 'reverse() when playbackRate < 0 and currentTime > effect end': + 'assert_equals: reverse() should start playing from the start of animation time if the playbackRate < 0 and the currentTime > effect end expected 0 but got 200000', - 'test/web-platform-tests/web-animations/interfaces/Animation/pause.html': { - 'pause() from idle': - 'assert_equals: initially pause-pending expected "pending" but got "paused"', - }, + 'reverse() when playbackRate > 0 and currentTime < 0': + 'assert_equals: reverse() should start playing from the animation effect end if the playbackRate > 0 and the currentTime < 0 expected 100000 but got -200000', - 'test/web-platform-tests/web-animations/interfaces/Animation/playbackRate.html': { - 'Test the effect of setting playbackRate while playing animation': - 'FLAKY_TEST_RESULT', - }, + 'reverse() when playbackRate > 0 and currentTime > effect end': + 'assert_equals: reverse() should start playing from the animation effect end if the playbackRate > 0 and the currentTime > effect end expected 100000 but got 200000', + }, - 'test/web-platform-tests/web-animations/interfaces/Animation/reverse.html': { - 'reverse() when playbackRate < 0 and currentTime < 0': - 'assert_equals: reverse() should start playing from the start of animation time if the playbackRate < 0 and the currentTime < 0 expected 0 but got -200000', + 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/delay.html': { + 'Test adding a positive delay to an animation without a backwards fill makes it no longer active': + 'anim.effect.getComputedTiming is not a function', - 'reverse() when playbackRate < 0 and currentTime < 0 and the target effect end is positive infinity': - 'assert_equals: reverse() should start playing from the start of animation time if the playbackRate < 0 and the currentTime < 0 and the target effect is positive infinity expected 0 but got -200000', + 'Test finishing an animation using a large negative delay': + 'anim.effect.getComputedTiming is not a function', - 'reverse() when playbackRate < 0 and currentTime > effect end': - 'assert_equals: reverse() should start playing from the start of animation time if the playbackRate < 0 and the currentTime > effect end expected 0 but got 200000', + 'Test seeking an animation by setting a negative delay': + 'anim.effect.getComputedTiming is not a function', - 'reverse() when playbackRate > 0 and currentTime < 0': - 'assert_equals: reverse() should start playing from the animation effect end if the playbackRate > 0 and the currentTime < 0 expected 100000 but got -200000', + 'set delay -100': + 'anim.effect.getComputedTiming is not a function', - 'reverse() when playbackRate > 0 and currentTime > effect end': - 'assert_equals: reverse() should start playing from the animation effect end if the playbackRate > 0 and the currentTime > effect end expected 100000 but got 200000', - }, + 'set delay 100': + 'anim.effect.getComputedTiming is not a function', + }, - 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/delay.html': { - 'Test adding a positive delay to an animation without a backwards fill makes it no longer active': - 'anim.effect.getComputedTiming is not a function', + 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/duration.html': { + 'set NaN duration in animate using a duration parameter': + 'assert_throws: function "function () {\n div.animate({ opacity: [ 0, 1 ] }, NaN);\n }" did not throw', - 'Test finishing an animation using a large negative delay': - 'anim.effect.getComputedTiming is not a function', + 'set auto duration in animate as object': + 'assert_equals: set duration \'auto\' expected (string) "auto" but got (number) 0', - 'Test seeking an animation by setting a negative delay': - 'anim.effect.getComputedTiming is not a function', + 'set duration 123.45': + 'anim.effect.getComputedTiming is not a function', - 'set delay -100': - 'anim.effect.getComputedTiming is not a function', + 'set duration Infinity': + 'anim.effect.getComputedTiming is not a function', - 'set delay 100': - 'anim.effect.getComputedTiming is not a function', - }, + 'set duration auto': + 'anim.effect.getComputedTiming is not a function', + }, - 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/duration.html': { - 'set 100 string duration in animate using an options object': - 'assert_throws: function "function () {\n div.animate({ opacity: [ 0, 1 ] }, { duration: \'100\' });\n }" did not throw', + 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/easing.html': { + 'Change the easing while the animation is running': + 'anim.effect.getComputedTiming is not a function', - 'set NaN duration in animate using a duration parameter': - 'assert_throws: function "function () {\n div.animate({ opacity: [ 0, 1 ] }, NaN);\n }" did not throw', + 'ease function': + 'animation.effect.getComputedTiming is not a function', - 'set NaN duration in animate using an options object': - 'assert_throws: function "function () {\n div.animate({ opacity: [ 0, 1 ] }, { duration: NaN });\n }" did not throw', + 'ease-in function': + 'animation.effect.getComputedTiming is not a function', - 'set abc string duration in animate using an options object': - 'assert_throws: function "function () {\n div.animate({ opacity: [ 0, 1 ] }, { duration: \'abc\' });\n }" did not throw', + 'ease-in-out function': + 'animation.effect.getComputedTiming is not a function', - 'set auto duration in animate as object': - 'assert_equals: set duration \'auto\' expected (string) "auto" but got (number) 0', + 'ease-out function': + 'animation.effect.getComputedTiming is not a function', - 'set duration 123.45': - 'anim.effect.getComputedTiming is not a function', + 'easing function which produces values greater than 1': + 'animation.effect.getComputedTiming is not a function', - 'set duration Infinity': - 'anim.effect.getComputedTiming is not a function', + 'linear function': + 'animation.effect.getComputedTiming is not a function', - 'set duration auto': - 'anim.effect.getComputedTiming is not a function', + 'steps(end) function': + 'animation.effect.getComputedTiming is not a function', - 'set duration string 100': - 'assert_throws: function "function () {\n anim.effect.timing.duration = \'100\';\n }" did not throw', - }, + 'steps(start) function': + 'animation.effect.getComputedTiming is not a function', + }, - 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/easing.html': { - 'Change the easing while the animation is running': - 'anim.effect.getComputedTiming is not a function', + 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/endDelay.html': { + 'onfinish event is fired currentTime is after endTime': + 'FLAKY_TEST_RESULT', - 'ease function': - 'animation.effect.getComputedTiming is not a function', + 'set endDelay -1000': + 'anim.effect.getComputedTiming is not a function', - 'ease-in function': - 'animation.effect.getComputedTiming is not a function', + 'set endDelay 123.45': + 'anim.effect.getComputedTiming is not a function', + }, - 'ease-in-out function': - 'animation.effect.getComputedTiming is not a function', + 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/fill.html': { + 'set fill backwards': + 'anim.effect.getComputedTiming is not a function', - 'ease-out function': - 'animation.effect.getComputedTiming is not a function', + 'set fill both': + 'anim.effect.getComputedTiming is not a function', - 'easing function which produces values greater than 1': - 'animation.effect.getComputedTiming is not a function', + 'set fill forwards': + 'anim.effect.getComputedTiming is not a function', - 'linear function': - 'animation.effect.getComputedTiming is not a function', + 'set fill none': + 'anim.effect.getComputedTiming is not a function', + }, - 'steps(end) function': - 'animation.effect.getComputedTiming is not a function', + 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/getAnimations.html': { + 'when currentTime changed in duration:1000, delay: -500, endDelay: -500': + 'assert_equals: when currentTime 0 expected 0 but got 1', - 'steps(start) function': - 'animation.effect.getComputedTiming is not a function', - }, + 'when currentTime changed in duration:1000, delay: 500, endDelay: -500': + 'assert_equals: set currentTime 1000 expected 0 but got 1', - 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/endDelay.html': { - 'onfinish event is fired currentTime is after endTime': - 'FLAKY_TEST_RESULT', + 'when duration is changed': + 'assert_equals: set duration 102000 expected (object) object "[object Object]" but got (undefined) undefined', - 'set endDelay -1000': - 'anim.effect.getComputedTiming is not a function', + 'when endDelay is changed': + 'assert_equals: set negative endDelay so as endTime is less than currentTime expected 0 but got 1', - 'set endDelay 123.45': - 'anim.effect.getComputedTiming is not a function', + 'when iterations is changed': + 'assert_equals: set iterations 10 expected (object) object "[object Object]" but got (undefined) undefined', + }, - 'set endDelay Infinity': - 'assert_throws: we can not assign Infinity to timing.endDelay function "function () {\n anim.effect.timing.endDelay = Infinity;\n }" did not throw', + 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/getComputedStyle.html': { + 'change currentTime when fill forwards and endDelay is negative': + 'assert_equals: set currentTime same as endTime expected "0" but got "0.5"', - 'set endDelay negative Infinity': - 'assert_throws: we can not assign negative Infinity to timing.endDelay function "function () {\n anim.effect.timing.endDelay = -Infinity;\n }" did not throw', - }, + 'changed duration immediately updates its computed styles': + 'FLAKY_TEST_RESULT', - 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/fill.html': { - 'set fill backwards': - 'anim.effect.getComputedTiming is not a function', + 'changed iterations immediately updates its computed styles': + 'FLAKY_TEST_RESULT', + }, - 'set fill both': - 'anim.effect.getComputedTiming is not a function', + 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/iterationStart.html': { + 'Test invalid iterationStart value': + 'assert_throws: function "function () {\n anim.effect.timing.iterationStart = -1;\n }" threw object "ReferenceError: timing is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'set fill forwards': - 'anim.effect.getComputedTiming is not a function', + 'Test that changing the iterationStart affects computed timing during the active phase': + 'anim.effect.getComputedTiming is not a function', - 'set fill none': - 'anim.effect.getComputedTiming is not a function', - }, + 'Test that changing the iterationStart affects computed timing when backwards-filling': + 'anim.effect.getComputedTiming is not a function', - 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/getAnimations.html': { - 'when currentTime changed in duration:1000, delay: -500, endDelay: -500': - 'assert_equals: when currentTime 0 expected 0 but got 1', + 'Test that changing the iterationStart affects computed timing when forwards-filling': + 'anim.effect.getComputedTiming is not a function', + }, - 'when currentTime changed in duration:1000, delay: 500, endDelay: -500': - 'assert_equals: set currentTime 1000 expected 0 but got 1', + 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/iterations.html': { + 'set iterations 2': + 'anim.effect.getComputedTiming is not a function', - 'when duration is changed': - 'assert_equals: set duration 102000 expected (object) object "[object Object]" but got (undefined) undefined', + 'set iterations Infinity': + 'anim.effect.getComputedTiming is not a function', + }, - 'when endDelay is changed': - 'assert_equals: set negative endDelay so as endTime is less than currentTime expected 0 but got 1', + 'test/web-platform-tests/web-animations/interfaces/AnimationTimeline/document-timeline.html': { + 'document.timeline.currentTime liveness tests': + 'assert_true: document.timeline.currentTime increases between script blocks expected true got false', - 'when iterations is changed': - 'assert_equals: set iterations 10 expected (object) object "[object Object]" but got (undefined) undefined', - }, + 'document.timeline.currentTime value tests': + 'assert_true: document.timeline.currentTime is positive expected true got false', + }, - 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/getComputedStyle.html': { - 'change currentTime when fill forwards and endDelay is positive': - 'assert_equals: set currentTime just a little before duration expected "0.0001" but got "0"', + 'test/web-platform-tests/web-animations/interfaces/AnimationTimeline/idlharness.html': { + 'AnimationTimeline interface object length': + 'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing', - 'changed duration immediately updates its computed styles': - 'FLAKY_TEST_RESULT', + 'AnimationTimeline interface object name': + 'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing', - 'changed iterations immediately updates its computed styles': - 'FLAKY_TEST_RESULT', - }, + 'AnimationTimeline interface: attribute currentTime': + 'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing', - 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/iterationStart.html': { - 'Test invalid iterationStart value': - 'assert_throws: function "function () {\n anim.effect.timing.iterationStart = -1;\n }" threw object "ReferenceError: timing is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'AnimationTimeline interface: document.timeline must inherit property "currentTime" with the proper type (0)': + 'assert_inherits: property "currentTime" found on object expected in prototype chain', - 'Test that changing the iterationStart affects computed timing during the active phase': - 'anim.effect.getComputedTiming is not a function', + 'AnimationTimeline interface: existence and properties of interface object': + 'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing', - 'Test that changing the iterationStart affects computed timing when backwards-filling': - 'anim.effect.getComputedTiming is not a function', + 'AnimationTimeline interface: existence and properties of interface prototype object': + 'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing', - 'Test that changing the iterationStart affects computed timing when forwards-filling': - 'anim.effect.getComputedTiming is not a function', - }, + 'AnimationTimeline interface: existence and properties of interface prototype object\'s "constructor" property': + 'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing', - 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/iterations.html': { - 'set iterations 2': - 'anim.effect.getComputedTiming is not a function', + 'DocumentTimeline interface object length': + 'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing', - 'set iterations Infinity': - 'anim.effect.getComputedTiming is not a function', - }, + 'DocumentTimeline interface object name': + 'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing', - 'test/web-platform-tests/web-animations/interfaces/AnimationTimeline/document-timeline.html': { - 'document.timeline.currentTime liveness tests': - 'assert_true: document.timeline.currentTime increases between script blocks expected true got false', + 'DocumentTimeline interface: existence and properties of interface object': + 'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing', - 'document.timeline.currentTime value tests': - 'assert_true: document.timeline.currentTime is positive expected true got false', - }, + 'DocumentTimeline interface: existence and properties of interface prototype object': + 'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing', - 'test/web-platform-tests/web-animations/interfaces/AnimationTimeline/idlharness.html': { - 'AnimationTimeline interface object length': - 'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing', + 'DocumentTimeline interface: existence and properties of interface prototype object\'s "constructor" property': + 'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing', - 'AnimationTimeline interface object name': - 'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing', + 'DocumentTimeline must be primary interface of document.timeline': + 'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing', - 'AnimationTimeline interface: attribute currentTime': - 'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing', + 'Stringification of document.timeline': + 'assert_equals: class string of document.timeline expected "[object DocumentTimeline]" but got "[object Object]"', + }, - 'AnimationTimeline interface: document.timeline must inherit property "currentTime" with the proper type (0)': - 'assert_inherits: property "currentTime" found on object expected in prototype chain', + 'test/web-platform-tests/web-animations/interfaces/Document/getAnimations.html': { + 'Test document.getAnimations for non-animated content': + 'document.getAnimations is not a function', - 'AnimationTimeline interface: existence and properties of interface object': - 'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing', + 'Test document.getAnimations for script-generated animations': + 'document.getAnimations is not a function', - 'AnimationTimeline interface: existence and properties of interface prototype object': - 'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing', + 'Test document.getAnimations with null target': + 'KeyframeEffectReadOnly is not defined', - 'AnimationTimeline interface: existence and properties of interface prototype object\'s "constructor" property': - 'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing', + 'Test the order of document.getAnimations with script generated animations': + 'document.getAnimations is not a function', + }, - 'DocumentTimeline interface object length': - 'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing', + 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/constructor.html': { + 'Invalid KeyframeEffectReadOnly option by -Infinity': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'DocumentTimeline interface object name': - 'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing', + 'Invalid KeyframeEffectReadOnly option by NaN': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'DocumentTimeline interface: existence and properties of interface object': - 'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing', + 'Invalid KeyframeEffectReadOnly option by a NaN duration': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'DocumentTimeline interface: existence and properties of interface prototype object': - 'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing', + 'Invalid KeyframeEffectReadOnly option by a NaN iterations': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'DocumentTimeline interface: existence and properties of interface prototype object\'s "constructor" property': - 'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing', + 'Invalid KeyframeEffectReadOnly option by a blank easing': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'DocumentTimeline must be primary interface of document.timeline': - 'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing', + 'Invalid KeyframeEffectReadOnly option by a multi-value easing': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'Stringification of document.timeline': - 'assert_equals: class string of document.timeline expected "[object DocumentTimeline]" but got "[object Object]"', - }, + 'Invalid KeyframeEffectReadOnly option by a negative Infinity duration': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'test/web-platform-tests/web-animations/interfaces/Document/getAnimations.html': { - 'Test document.getAnimations for non-animated content': - 'document.getAnimations is not a function', + 'Invalid KeyframeEffectReadOnly option by a negative Infinity iterations': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'Test document.getAnimations for script-generated animations': - 'document.getAnimations is not a function', + 'Invalid KeyframeEffectReadOnly option by a negative duration': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'Test document.getAnimations with null target': - 'KeyframeEffectReadOnly is not defined', + 'Invalid KeyframeEffectReadOnly option by a negative iterations': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'Test the order of document.getAnimations with script generated animations': - 'document.getAnimations is not a function', - }, + 'Invalid KeyframeEffectReadOnly option by a negative value': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/constructor.html': { - 'Invalid KeyframeEffectReadOnly option by -Infinity': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'Invalid KeyframeEffectReadOnly option by a string duration': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'Invalid KeyframeEffectReadOnly option by NaN': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'Invalid KeyframeEffectReadOnly option by a variable easing': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'Invalid KeyframeEffectReadOnly option by a NaN duration': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'Invalid KeyframeEffectReadOnly option by an \'inherit\' easing': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'Invalid KeyframeEffectReadOnly option by a NaN iterations': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'Invalid KeyframeEffectReadOnly option by an \'initial\' easing': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'Invalid KeyframeEffectReadOnly option by a blank easing': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'Invalid KeyframeEffectReadOnly option by an unrecognized easing': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'Invalid KeyframeEffectReadOnly option by a multi-value easing': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'Invalid easing [a blank easing] in keyframe sequence should be thrown': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")', - 'Invalid KeyframeEffectReadOnly option by a negative Infinity duration': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'Invalid easing [a multi-value easing] in keyframe sequence should be thrown': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")', - 'Invalid KeyframeEffectReadOnly option by a negative Infinity iterations': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'Invalid easing [a variable easing] in keyframe sequence should be thrown': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")', - 'Invalid KeyframeEffectReadOnly option by a negative duration': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'Invalid easing [an \'inherit\' easing] in keyframe sequence should be thrown': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")', - 'Invalid KeyframeEffectReadOnly option by a negative iterations': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'Invalid easing [an \'initial\' easing] in keyframe sequence should be thrown': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")', - 'Invalid KeyframeEffectReadOnly option by a negative value': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'Invalid easing [an unrecognized easing] in keyframe sequence should be thrown': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")', - 'Invalid KeyframeEffectReadOnly option by a string duration': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'KeyframeEffect constructor creates an AnimationEffectTiming timing object': + 'assert_equals: expected "[object KeyframeEffect]" but got "[object Object]"', - 'Invalid KeyframeEffectReadOnly option by a variable easing': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'KeyframeEffectReadOnly constructor throws with a keyframe sequence with an invalid easing value': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'Invalid KeyframeEffectReadOnly option by an \'inherit\' easing': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'KeyframeEffectReadOnly constructor throws with keyframes not loosely sorted by offset': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'Invalid KeyframeEffectReadOnly option by an \'initial\' easing': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'KeyframeEffectReadOnly constructor throws with keyframes with an invalid composite value': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'Invalid KeyframeEffectReadOnly option by an unrecognized easing': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'KeyframeEffectReadOnly constructor throws with keyframes with an out-of-bounded negative offset': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'Invalid easing [a blank easing] in keyframe sequence should be thrown': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")', + 'KeyframeEffectReadOnly constructor throws with keyframes with an out-of-bounded positive offset': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'Invalid easing [a multi-value easing] in keyframe sequence should be thrown': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")', + 'KeyframeEffectReadOnly constructor throws with property-indexed keyframes with an invalid easing value': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', - 'Invalid easing [a variable easing] in keyframe sequence should be thrown': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")', + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence where greater shorthand precedes lesser shorthand': + 'KeyframeEffectReadOnly is not defined', - 'Invalid easing [an \'inherit\' easing] in keyframe sequence should be thrown': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")', + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence where lesser shorthand precedes greater shorthand': + 'KeyframeEffectReadOnly is not defined', - 'Invalid easing [an \'initial\' easing] in keyframe sequence should be thrown': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")', + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence where longhand precedes shorthand': + 'KeyframeEffectReadOnly is not defined', - 'Invalid easing [an unrecognized easing] in keyframe sequence should be thrown': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")', + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence where shorthand precedes longhand': + 'KeyframeEffectReadOnly is not defined', - 'KeyframeEffect constructor creates an AnimationEffectTiming timing object': - 'assert_equals: expected "[object KeyframeEffect]" but got "[object Object]"', + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with a CSS variable reference': + 'KeyframeEffectReadOnly is not defined', - 'KeyframeEffectReadOnly constructor throws with a keyframe sequence with an invalid easing value': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with a CSS variable reference in a shorthand property': + 'KeyframeEffectReadOnly is not defined', - 'KeyframeEffectReadOnly constructor throws with keyframes not loosely sorted by offset': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with different composite values, but the same composite value for a given offset': + 'KeyframeEffectReadOnly is not defined', - 'KeyframeEffectReadOnly constructor throws with keyframes with an invalid composite value': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with different easing values, but the same easing value for a given offset': + 'KeyframeEffectReadOnly is not defined', - 'KeyframeEffectReadOnly constructor throws with keyframes with an out-of-bounded negative offset': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with duplicate values for a given interior offset': + 'KeyframeEffectReadOnly is not defined', - 'KeyframeEffectReadOnly constructor throws with keyframes with an out-of-bounded positive offset': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with duplicate values for offsets 0 and 1': + 'KeyframeEffectReadOnly is not defined', - 'KeyframeEffectReadOnly constructor throws with property-indexed keyframes with an invalid easing value': - 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with repeated values at offset 1 with different easings': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence where greater shorthand precedes lesser shorthand': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a one property keyframe sequence with all omitted offsets': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence where lesser shorthand precedes greater shorthand': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a one property keyframe sequence with some omitted offsets': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence where longhand precedes shorthand': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a one property one keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence where shorthand precedes longhand': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a one property one non-array value property-indexed keyframes specification': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with a CSS variable reference': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a one property one value property-indexed keyframes specification': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with a CSS variable reference in a shorthand property': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a one property two keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with different composite values, but the same composite value for a given offset': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a one property two keyframe sequence that needs to stringify its values': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with different easing values, but the same easing value for a given offset': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with duplicate values for a given interior offset': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification that needs to stringify its values': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with duplicate values for offsets 0 and 1': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification where the first value is invalid': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with repeated values at offset 1 with different easings': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification where the second value is invalid': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a one property keyframe sequence with all omitted offsets': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a one shorthand property two keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a one property keyframe sequence with some omitted offsets': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a one shorthand property two value property-indexed keyframes specification': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a one property one keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a property-indexed keyframes specification with a CSS variable reference': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a one property one non-array value property-indexed keyframes specification': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a property-indexed keyframes specification with a CSS variable reference in a shorthand property': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a one property one value property-indexed keyframes specification': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a property-indexed keyframes specification with an invalid value': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a one property two keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a single keyframe sequence with omitted offsets': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a one property two keyframe sequence that needs to stringify its values': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a two property (a shorthand and one of its component longhands) two keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification that needs to stringify its values': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a two property four keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification where the first value is invalid': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a two property keyframe sequence where one property is missing from the first keyframe': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification where the second value is invalid': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a two property keyframe sequence where one property is missing from the last keyframe': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a one shorthand property two keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a two property keyframe sequence with some omitted offsets': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a one shorthand property two value property-indexed keyframes specification': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a two property property-indexed keyframes specification with different numbers of values': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a property-indexed keyframes specification with a CSS variable reference': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a two property two keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a property-indexed keyframes specification with a CSS variable reference in a shorthand property': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with a two property two value property-indexed keyframes specification': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a property-indexed keyframes specification with an invalid value': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly can be constructed with no frames': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a single keyframe sequence with omitted offsets': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed by +Infinity': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a two property (a shorthand and one of its component longhands) two keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed by a double value': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed by a forwards fill': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a two property four keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed by a normal KeyframeEffectOptions object': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a two property keyframe sequence where one property is missing from the first keyframe': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed by an Infinity duration': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a two property keyframe sequence where one property is missing from the last keyframe': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed by an Infinity iterations': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a two property keyframe sequence with some omitted offsets': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed by an auto duration': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a two property property-indexed keyframes specification with different numbers of values': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed by an auto fill': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a two property two keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed by an empty KeyframeEffectOptions object': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with a two property two value property-indexed keyframes specification': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a keyframe sequence where greater shorthand precedes lesser shorthand roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly can be constructed with no frames': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a keyframe sequence where lesser shorthand precedes greater shorthand roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed by +Infinity': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a keyframe sequence where longhand precedes shorthand roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed by a double value': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a keyframe sequence where shorthand precedes longhand roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed by a forwards fill': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a keyframe sequence with a CSS variable reference in a shorthand property roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed by a normal KeyframeEffectOptions object': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a keyframe sequence with a CSS variable reference roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed by an Infinity duration': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a keyframe sequence with different composite values, but the same composite value for a given offset roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed by an Infinity iterations': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a keyframe sequence with different easing values, but the same easing value for a given offset roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed by an auto duration': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a keyframe sequence with duplicate values for a given interior offset roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed by an auto fill': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a keyframe sequence with duplicate values for offsets 0 and 1 roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed by an empty KeyframeEffectOptions object': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a keyframe sequence with repeated values at offset 1 with different easings roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a keyframe sequence where greater shorthand precedes lesser shorthand roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a one property keyframe sequence with all omitted offsets roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a keyframe sequence where lesser shorthand precedes greater shorthand roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a one property keyframe sequence with some omitted offsets roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a keyframe sequence where longhand precedes shorthand roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a one property one keyframe sequence roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a keyframe sequence where shorthand precedes longhand roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a one property one non-array value property-indexed keyframes specification roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a keyframe sequence with a CSS variable reference in a shorthand property roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a one property one value property-indexed keyframes specification roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a keyframe sequence with a CSS variable reference roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a one property two keyframe sequence roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a keyframe sequence with different composite values, but the same composite value for a given offset roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a one property two keyframe sequence that needs to stringify its values roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a keyframe sequence with different easing values, but the same easing value for a given offset roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a keyframe sequence with duplicate values for a given interior offset roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification that needs to stringify its values roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a keyframe sequence with duplicate values for offsets 0 and 1 roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification where the first value is invalid roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a keyframe sequence with repeated values at offset 1 with different easings roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification where the second value is invalid roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a one property keyframe sequence with all omitted offsets roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a one shorthand property two keyframe sequence roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a one property keyframe sequence with some omitted offsets roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a one shorthand property two value property-indexed keyframes specification roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a one property one keyframe sequence roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a property-indexed keyframes specification with a CSS variable reference in a shorthand property roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a one property one non-array value property-indexed keyframes specification roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a property-indexed keyframes specification with a CSS variable reference roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a one property one value property-indexed keyframes specification roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a property-indexed keyframes specification with an invalid value roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a one property two keyframe sequence roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a single keyframe sequence with omitted offsets roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a one property two keyframe sequence that needs to stringify its values roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a two property (a shorthand and one of its component longhands) two keyframe sequence roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification that needs to stringify its values roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a two property four keyframe sequence roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification where the first value is invalid roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a two property keyframe sequence where one property is missing from the first keyframe roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification where the second value is invalid roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a two property keyframe sequence where one property is missing from the last keyframe roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a one shorthand property two keyframe sequence roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a two property keyframe sequence with some omitted offsets roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a one shorthand property two value property-indexed keyframes specification roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a two property property-indexed keyframes specification with different numbers of values roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a property-indexed keyframes specification with a CSS variable reference in a shorthand property roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a two property two keyframe sequence roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a property-indexed keyframes specification with a CSS variable reference roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with a two property two value property-indexed keyframes specification roundtrips': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a property-indexed keyframes specification with an invalid value roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed with null target': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a single keyframe sequence with omitted offsets roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'a KeyframeEffectReadOnly constructed without any KeyframeEffectOptions object': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a two property (a shorthand and one of its component longhands) two keyframe sequence roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'composite values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in KeyframeTimingOptions': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'composite values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in property-indexed keyframes': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a two property four keyframe sequence roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'composite values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in regular keyframes': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a two property keyframe sequence where one property is missing from the first keyframe roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'easing values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in KeyframeTimingOptions': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a two property keyframe sequence where one property is missing from the last keyframe roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'easing values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in a property-indexed keyframe': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a two property keyframe sequence with some omitted offsets roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'easing values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in regular keyframes': + 'KeyframeEffectReadOnly is not defined', - 'a KeyframeEffectReadOnly constructed with a two property property-indexed keyframes specification with different numbers of values roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'the KeyframeEffectReadOnly constructor reads keyframe properties in the expected order': + 'KeyframeEffectReadOnly is not defined', + }, - 'a KeyframeEffectReadOnly constructed with a two property two keyframe sequence roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/effect-easing-steps.html': { + 'Test bounds point of step(4, start) easing with iterationStart 0.75 and delay': + 'animation.effect.getComputedTiming is not a function', - 'a KeyframeEffectReadOnly constructed with a two property two value property-indexed keyframes specification roundtrips': - 'KeyframeEffectReadOnly is not defined', + 'Test bounds point of step-end easing with iterationStart and delay': + 'animation.effect.getComputedTiming is not a function', - 'a KeyframeEffectReadOnly constructed with null target': - 'KeyframeEffectReadOnly is not defined', + 'Test bounds point of step-end easing with iterationStart not at a transition point': + 'animation.effect.getComputedTiming is not a function', - 'a KeyframeEffectReadOnly constructed without any KeyframeEffectOptions object': - 'KeyframeEffectReadOnly is not defined', + 'Test bounds point of step-start easing': + 'animation.effect.getComputedTiming is not a function', - 'composite values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in KeyframeTimingOptions': - 'KeyframeEffectReadOnly is not defined', + 'Test bounds point of step-start easing in keyframe': + 'animation.effect.getComputedTiming is not a function', - 'composite values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in property-indexed keyframes': - 'KeyframeEffectReadOnly is not defined', + 'Test bounds point of step-start easing with alternate direction': + 'animation.effect.getComputedTiming is not a function', - 'composite values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in regular keyframes': - 'KeyframeEffectReadOnly is not defined', + 'Test bounds point of step-start easing with alternate-reverse direction': + 'animation.effect.getComputedTiming is not a function', - 'easing values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in KeyframeTimingOptions': - 'KeyframeEffectReadOnly is not defined', + 'Test bounds point of step-start easing with compositor': + 'animation.effect.getComputedTiming is not a function', - 'easing values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in a property-indexed keyframe': - 'KeyframeEffectReadOnly is not defined', + 'Test bounds point of step-start easing with iterationStart and delay': + 'animation.effect.getComputedTiming is not a function', - 'easing values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in regular keyframes': - 'KeyframeEffectReadOnly is not defined', + 'Test bounds point of step-start easing with iterationStart and reverse direction': + 'animation.effect.getComputedTiming is not a function', - 'the KeyframeEffectReadOnly constructor reads keyframe properties in the expected order': - 'KeyframeEffectReadOnly is not defined', - }, + 'Test bounds point of step-start easing with iterationStart not at a transition point': + 'animation.effect.getComputedTiming is not a function', - 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/effect-easing.html': { - 'effect easing produces values greater than 1 with keyframe easing cubic-bezier(1, 1, 1, 1)': - 'assert_approx_equals: The left of the animation should be approximately 102.40666638411385 at 250ms expected 102.40666638411385 +/- 0.01 but got 100', + 'Test bounds point of step-start easing with reverse direction': + 'animation.effect.getComputedTiming is not a function', + }, - 'effect easing produces negative values 1 with keyframe easing cubic-bezier(0, 0, 0, 0)': - 'assert_approx_equals: The left of the animation should be approximately -29.501119758965654 at 250ms expected -29.501119758965654 +/- 0.01 but got 0', + 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/getComputedTiming.html': { + 'getComputedTiming().activeDuration for a non-zero duration and default iteration count': + 'KeyframeEffectReadOnly is not defined', - 'effect easing which produces values greater than 1 and the tangent on the upper boundary is infinity with keyframe easing producing values greater than 1': - 'assert_approx_equals: The left of the animation should be approximately 100 at 240ms expected 100 +/- 0.01 but got 99.5333', - }, + 'getComputedTiming().activeDuration for a non-zero duration and fractional iteration count': + 'KeyframeEffectReadOnly is not defined', - 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/effect-easing-steps.html': { - 'Test bounds point of step-start easing': - 'animation.effect.getComputedTiming is not a function', + 'getComputedTiming().activeDuration for a non-zero duration and integral iteration count': + 'KeyframeEffectReadOnly is not defined', - 'Test bounds point of step-start easing with compositor': - 'animation.effect.getComputedTiming is not a function', + 'getComputedTiming().activeDuration for a zero duration and default iteration count': + 'KeyframeEffectReadOnly is not defined', - 'Test bounds point of step-start easing with reverse direction': - 'animation.effect.getComputedTiming is not a function', + 'getComputedTiming().activeDuration for a zero duration and fractional iteration count': + 'KeyframeEffectReadOnly is not defined', - 'Test bounds point of step-start easing with iterationStart not at a transition point': - 'animation.effect.getComputedTiming is not a function', + 'getComputedTiming().activeDuration for a zero duration and infinite iteration count': + 'KeyframeEffectReadOnly is not defined', - 'Test bounds point of step-start easing with iterationStart and delay': - 'animation.effect.getComputedTiming is not a function', + 'getComputedTiming().activeDuration for a zero duration and zero iteration count': + 'KeyframeEffectReadOnly is not defined', - 'Test bounds point of step-start easing with iterationStart and reverse direction': - 'animation.effect.getComputedTiming is not a function', + 'getComputedTiming().activeDuration for an empty KeyframeEffectOptions object': + 'KeyframeEffectReadOnly is not defined', - 'Test bounds point of step(4, start) easing with iterationStart 0.75 and delay': - 'animation.effect.getComputedTiming is not a function', + 'getComputedTiming().activeDuration for an infinite duration and default iteration count': + 'KeyframeEffectReadOnly is not defined', - 'Test bounds point of step-start easing with alternate direction': - 'animation.effect.getComputedTiming is not a function', + 'getComputedTiming().activeDuration for an infinite duration and fractional iteration count': + 'KeyframeEffectReadOnly is not defined', - 'Test bounds point of step-start easing with alternate-reverse direction': - 'animation.effect.getComputedTiming is not a function', + 'getComputedTiming().activeDuration for an infinite duration and infinite iteration count': + 'KeyframeEffectReadOnly is not defined', - 'Test bounds point of step-start easing in keyframe': - 'animation.effect.getComputedTiming is not a function', + 'getComputedTiming().activeDuration for an infinite duration and zero iteration count': + 'KeyframeEffectReadOnly is not defined', - 'Test bounds point of step-end easing with iterationStart and delay': - 'animation.effect.getComputedTiming is not a function', + 'getComputedTiming().activeDuration for an non-zero duration and infinite iteration count': + 'KeyframeEffectReadOnly is not defined', - 'Test bounds point of step-end easing with iterationStart not at a transition point': - 'animation.effect.getComputedTiming is not a function', - }, + 'getComputedTiming().activeDuration for an non-zero duration and zero iteration count': + 'KeyframeEffectReadOnly is not defined', - 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/getComputedTiming.html': { - 'getComputedTiming().activeDuration for a non-zero duration and default iteration count': - 'KeyframeEffectReadOnly is not defined', + 'getComputedTiming().endTime for a non-zero duration and default iteration count': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().activeDuration for a non-zero duration and fractional iteration count': - 'KeyframeEffectReadOnly is not defined', + 'getComputedTiming().endTime for a non-zero duration and non-default iteration count': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().activeDuration for a non-zero duration and integral iteration count': - 'KeyframeEffectReadOnly is not defined', + 'getComputedTiming().endTime for a non-zero duration and non-zero delay': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().activeDuration for a zero duration and default iteration count': - 'KeyframeEffectReadOnly is not defined', + 'getComputedTiming().endTime for a non-zero duration, non-zero delay and non-default iteration': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().activeDuration for a zero duration and fractional iteration count': - 'KeyframeEffectReadOnly is not defined', + 'getComputedTiming().endTime for a zero duration and negative delay': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().activeDuration for a zero duration and infinite iteration count': - 'KeyframeEffectReadOnly is not defined', + 'getComputedTiming().endTime for an empty KeyframeEffectOptions object': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().activeDuration for a zero duration and zero iteration count': - 'KeyframeEffectReadOnly is not defined', + 'getComputedTiming().endTime for an infinite duration': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().activeDuration for an empty KeyframeEffectOptions object': - 'KeyframeEffectReadOnly is not defined', + 'getComputedTiming().endTime for an infinite duration and delay': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().activeDuration for an infinite duration and default iteration count': - 'KeyframeEffectReadOnly is not defined', + 'getComputedTiming().endTime for an infinite duration and negative delay': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().activeDuration for an infinite duration and fractional iteration count': - 'KeyframeEffectReadOnly is not defined', + 'getComputedTiming().endTime for an infinite iteration count': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().activeDuration for an infinite duration and infinite iteration count': - 'KeyframeEffectReadOnly is not defined', + 'getComputedTiming().endTime for an non-zero duration and negative delay': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().activeDuration for an infinite duration and zero iteration count': - 'KeyframeEffectReadOnly is not defined', + 'getComputedTiming().endTime for an non-zero duration and negative delay greater than active duration': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().activeDuration for an non-zero duration and infinite iteration count': - 'KeyframeEffectReadOnly is not defined', + 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by +Infinity': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().activeDuration for an non-zero duration and zero iteration count': - 'KeyframeEffectReadOnly is not defined', + 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by a double value': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().endTime for a non-zero duration and default iteration count': - 'KeyframeEffectReadOnly is not defined', + 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by a forwards fill': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().endTime for a non-zero duration and non-default iteration count': - 'KeyframeEffectReadOnly is not defined', + 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by a normal KeyframeEffectOptions object': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().endTime for a non-zero duration and non-zero delay': - 'KeyframeEffectReadOnly is not defined', + 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an Infinity duration': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().endTime for a non-zero duration, non-zero delay and non-default iteration': - 'KeyframeEffectReadOnly is not defined', + 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an Infinity iterations': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().endTime for a zero duration and negative delay': - 'KeyframeEffectReadOnly is not defined', + 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an auto duration': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().endTime for an empty KeyframeEffectOptions object': - 'KeyframeEffectReadOnly is not defined', + 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an auto fill': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().endTime for an infinite duration': - 'KeyframeEffectReadOnly is not defined', + 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an empty KeyframeEffectOptions object': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().endTime for an infinite duration and delay': - 'KeyframeEffectReadOnly is not defined', + 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed without any KeyframeEffectOptions object': + 'KeyframeEffectReadOnly is not defined', + }, - 'getComputedTiming().endTime for an infinite duration and negative delay': - 'KeyframeEffectReadOnly is not defined', + 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument.html': { + 'non-animatable property \'animation\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().endTime for an infinite iteration count': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'animation\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().endTime for an non-zero duration and negative delay': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'animationDelay\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'getComputedTiming().endTime for an non-zero duration and negative delay greater than active duration': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'animationDelay\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', - 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by +Infinity': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'animationDirection\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by a double value': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'animationDirection\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', - 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by a forwards fill': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'animationDuration\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by a normal KeyframeEffectOptions object': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'animationDuration\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', - 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an Infinity duration': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'animationFillMode\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an Infinity iterations': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'animationFillMode\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', - 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an auto duration': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'animationIterationCount\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an auto fill': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'animationIterationCount\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', - 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an empty KeyframeEffectOptions object': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'animationName\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed without any KeyframeEffectOptions object': - 'KeyframeEffectReadOnly is not defined', - }, + 'non-animatable property \'animationName\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', - 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument.html': { - 'non-animatable property \'animation\' is not accessed when using a keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'animationPlayState\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'non-animatable property \'animation\' is not accessed when using a property-indexed keyframe object': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'animationPlayState\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', - 'non-animatable property \'animationDelay\' is not accessed when using a keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'animationTimingFunction\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'non-animatable property \'animationDelay\' is not accessed when using a property-indexed keyframe object': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'animationTimingFunction\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', - 'non-animatable property \'animationDirection\' is not accessed when using a keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'display\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'non-animatable property \'animationDirection\' is not accessed when using a property-indexed keyframe object': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'display\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', - 'non-animatable property \'animationDuration\' is not accessed when using a keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'transition\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'non-animatable property \'animationDuration\' is not accessed when using a property-indexed keyframe object': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'transition\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', - 'non-animatable property \'animationFillMode\' is not accessed when using a keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'transitionDelay\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'non-animatable property \'animationFillMode\' is not accessed when using a property-indexed keyframe object': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'transitionDelay\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', - 'non-animatable property \'animationIterationCount\' is not accessed when using a keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'transitionDuration\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'non-animatable property \'animationIterationCount\' is not accessed when using a property-indexed keyframe object': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'transitionDuration\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', - 'non-animatable property \'animationName\' is not accessed when using a keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'transitionProperty\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'non-animatable property \'animationName\' is not accessed when using a property-indexed keyframe object': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'transitionProperty\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', - 'non-animatable property \'animationPlayState\' is not accessed when using a keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'transitionTimingFunction\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'non-animatable property \'animationPlayState\' is not accessed when using a property-indexed keyframe object': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'transitionTimingFunction\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', - 'non-animatable property \'animationTimingFunction\' is not accessed when using a keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'unsupportedProperty\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'non-animatable property \'animationTimingFunction\' is not accessed when using a property-indexed keyframe object': - 'KeyframeEffectReadOnly is not defined', + 'non-animatable property \'unsupportedProperty\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', + }, - 'non-animatable property \'display\' is not accessed when using a keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/setKeyframes.html': { + 'Keyframes can be replaced with a keyframe sequence where greater shorthand precedes lesser shorthand': + 'effect.setKeyframes is not a function', - 'non-animatable property \'display\' is not accessed when using a property-indexed keyframe object': - 'KeyframeEffectReadOnly is not defined', + 'Keyframes can be replaced with a keyframe sequence where lesser shorthand precedes greater shorthand': + 'effect.setKeyframes is not a function', - 'non-animatable property \'transition\' is not accessed when using a keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'Keyframes can be replaced with a keyframe sequence where longhand precedes shorthand': + 'effect.setKeyframes is not a function', - 'non-animatable property \'transition\' is not accessed when using a property-indexed keyframe object': - 'KeyframeEffectReadOnly is not defined', + 'Keyframes can be replaced with a keyframe sequence where shorthand precedes longhand': + 'effect.setKeyframes is not a function', - 'non-animatable property \'transitionDelay\' is not accessed when using a keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'Keyframes can be replaced with a keyframe sequence with a CSS variable reference': + 'effect.setKeyframes is not a function', - 'non-animatable property \'transitionDelay\' is not accessed when using a property-indexed keyframe object': - 'KeyframeEffectReadOnly is not defined', + 'Keyframes can be replaced with a keyframe sequence with a CSS variable reference in a shorthand property': + 'effect.setKeyframes is not a function', - 'non-animatable property \'transitionDuration\' is not accessed when using a keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'Keyframes can be replaced with a keyframe sequence with different composite values, but the same composite value for a given offset': + 'effect.setKeyframes is not a function', - 'non-animatable property \'transitionDuration\' is not accessed when using a property-indexed keyframe object': - 'KeyframeEffectReadOnly is not defined', + 'Keyframes can be replaced with a keyframe sequence with different easing values, but the same easing value for a given offset': + 'effect.setKeyframes is not a function', - 'non-animatable property \'transitionProperty\' is not accessed when using a keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'Keyframes can be replaced with a keyframe sequence with duplicate values for a given interior offset': + 'effect.setKeyframes is not a function', - 'non-animatable property \'transitionProperty\' is not accessed when using a property-indexed keyframe object': - 'KeyframeEffectReadOnly is not defined', + 'Keyframes can be replaced with a keyframe sequence with duplicate values for offsets 0 and 1': + 'effect.setKeyframes is not a function', - 'non-animatable property \'transitionTimingFunction\' is not accessed when using a keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'Keyframes can be replaced with a keyframe sequence with repeated values at offset 1 with different easings': + 'effect.setKeyframes is not a function', - 'non-animatable property \'transitionTimingFunction\' is not accessed when using a property-indexed keyframe object': - 'KeyframeEffectReadOnly is not defined', + 'Keyframes can be replaced with a one property keyframe sequence with all omitted offsets': + 'effect.setKeyframes is not a function', - 'non-animatable property \'unsupportedProperty\' is not accessed when using a keyframe sequence': - 'KeyframeEffectReadOnly is not defined', + 'Keyframes can be replaced with a one property keyframe sequence with some omitted offsets': + 'effect.setKeyframes is not a function', - 'non-animatable property \'unsupportedProperty\' is not accessed when using a property-indexed keyframe object': - 'KeyframeEffectReadOnly is not defined', - }, + 'Keyframes can be replaced with a one property one keyframe sequence': + 'effect.setKeyframes is not a function', - 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/setKeyframes.html': { - 'Keyframes can be replaced with a keyframe sequence where greater shorthand precedes lesser shorthand': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a one property one non-array value property-indexed keyframes specification': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a keyframe sequence where lesser shorthand precedes greater shorthand': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a one property one value property-indexed keyframes specification': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a keyframe sequence where longhand precedes shorthand': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a one property two keyframe sequence': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a keyframe sequence where shorthand precedes longhand': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a one property two keyframe sequence that needs to stringify its values': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a keyframe sequence with a CSS variable reference': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a one property two value property-indexed keyframes specification': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a keyframe sequence with a CSS variable reference in a shorthand property': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a one property two value property-indexed keyframes specification that needs to stringify its values': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a keyframe sequence with different composite values, but the same composite value for a given offset': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a one property two value property-indexed keyframes specification where the first value is invalid': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a keyframe sequence with different easing values, but the same easing value for a given offset': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a one property two value property-indexed keyframes specification where the second value is invalid': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a keyframe sequence with duplicate values for a given interior offset': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a one shorthand property two keyframe sequence': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a keyframe sequence with duplicate values for offsets 0 and 1': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a one shorthand property two value property-indexed keyframes specification': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a keyframe sequence with repeated values at offset 1 with different easings': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a property-indexed keyframes specification with a CSS variable reference': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a one property keyframe sequence with all omitted offsets': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a property-indexed keyframes specification with a CSS variable reference in a shorthand property': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a one property keyframe sequence with some omitted offsets': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a property-indexed keyframes specification with an invalid value': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a one property one keyframe sequence': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a single keyframe sequence with omitted offsets': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a one property one non-array value property-indexed keyframes specification': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a two property (a shorthand and one of its component longhands) two keyframe sequence': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a one property one value property-indexed keyframes specification': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a one property two keyframe sequence': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a two property four keyframe sequence': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a one property two keyframe sequence that needs to stringify its values': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a two property keyframe sequence where one property is missing from the first keyframe': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a one property two value property-indexed keyframes specification': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a two property keyframe sequence where one property is missing from the last keyframe': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a one property two value property-indexed keyframes specification that needs to stringify its values': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a two property keyframe sequence with some omitted offsets': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a one property two value property-indexed keyframes specification where the first value is invalid': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a two property property-indexed keyframes specification with different numbers of values': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a one property two value property-indexed keyframes specification where the second value is invalid': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a two property two keyframe sequence': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a one shorthand property two keyframe sequence': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with a two property two value property-indexed keyframes specification': + 'effect.setKeyframes is not a function', - 'Keyframes can be replaced with a one shorthand property two value property-indexed keyframes specification': - 'effect.setKeyframes is not a function', + 'Keyframes can be replaced with an empty keyframe': + 'effect.setKeyframes is not a function', + }, - 'Keyframes can be replaced with a property-indexed keyframes specification with a CSS variable reference': - 'effect.setKeyframes is not a function', + 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/setTarget.html': { + 'Test setting target from a valid target to another target': + 'assert_equals: Value of 1st element (currently not targeted) after changing the effect target expected "10px" but got "50px"', - 'Keyframes can be replaced with a property-indexed keyframes specification with a CSS variable reference in a shorthand property': - 'effect.setKeyframes is not a function', + 'Test setting target from a valid target to null': + 'assert_equals: Value after clearing the target expected "10px" but got "50px"', - 'Keyframes can be replaced with a property-indexed keyframes specification with an invalid value': - 'effect.setKeyframes is not a function', + 'Test setting target from null to a valid target': + 'assert_equals: Value at 50% progress after setting new target expected "50px" but got "10px"', + }, - 'Keyframes can be replaced with a single keyframe sequence with omitted offsets': - 'effect.setKeyframes is not a function', + 'test/web-platform-tests/web-animations/timing-model/animation-effects/current-iteration.html': { + 'Test currentIteration during before and after phase when fill is none': + 'anim.effect.getComputedTiming is not a function', - 'Keyframes can be replaced with a two property (a shorthand and one of its component longhands) two keyframe sequence': - 'effect.setKeyframes is not a function', + 'Test fractional iterations: iterations:3.5 iterationStart:0 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', - 'Keyframes can be replaced with a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification': - 'effect.setKeyframes is not a function', + 'Test fractional iterations: iterations:3.5 iterationStart:0 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', - 'Keyframes can be replaced with a two property four keyframe sequence': - 'effect.setKeyframes is not a function', + 'Test fractional iterations: iterations:3.5 iterationStart:0 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', - 'Keyframes can be replaced with a two property keyframe sequence where one property is missing from the first keyframe': - 'effect.setKeyframes is not a function', + 'Test fractional iterations: iterations:3.5 iterationStart:2.5 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', - 'Keyframes can be replaced with a two property keyframe sequence where one property is missing from the last keyframe': - 'effect.setKeyframes is not a function', + 'Test fractional iterations: iterations:3.5 iterationStart:2.5 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', - 'Keyframes can be replaced with a two property keyframe sequence with some omitted offsets': - 'effect.setKeyframes is not a function', + 'Test fractional iterations: iterations:3.5 iterationStart:2.5 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', - 'Keyframes can be replaced with a two property property-indexed keyframes specification with different numbers of values': - 'effect.setKeyframes is not a function', + 'Test fractional iterations: iterations:3.5 iterationStart:3 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', - 'Keyframes can be replaced with a two property two keyframe sequence': - 'effect.setKeyframes is not a function', + 'Test fractional iterations: iterations:3.5 iterationStart:3 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', - 'Keyframes can be replaced with a two property two value property-indexed keyframes specification': - 'effect.setKeyframes is not a function', + 'Test fractional iterations: iterations:3.5 iterationStart:3 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', - 'Keyframes can be replaced with an empty keyframe': - 'effect.setKeyframes is not a function', - }, + 'Test infinity iterations: iterations:Infinity iterationStart:0 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test infinity iterations: iterations:Infinity iterationStart:0 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test infinity iterations: iterations:Infinity iterationStart:0 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test infinity iterations: iterations:Infinity iterationStart:2.5 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test infinity iterations: iterations:Infinity iterationStart:2.5 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test infinity iterations: iterations:Infinity iterationStart:2.5 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test infinity iterations: iterations:Infinity iterationStart:3 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test infinity iterations: iterations:Infinity iterationStart:3 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test infinity iterations: iterations:Infinity iterationStart:3 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test integer iterations: iterations:3 iterationStart:0 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test integer iterations: iterations:3 iterationStart:0 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test integer iterations: iterations:3 iterationStart:0 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test integer iterations: iterations:3 iterationStart:2.5 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test integer iterations: iterations:3 iterationStart:2.5 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test integer iterations: iterations:3 iterationStart:2.5 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test integer iterations: iterations:3 iterationStart:3 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test integer iterations: iterations:3 iterationStart:3 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test integer iterations: iterations:3 iterationStart:3 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test zero iterations: iterations:0 iterationStart:0 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test zero iterations: iterations:0 iterationStart:0 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test zero iterations: iterations:0 iterationStart:0 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test zero iterations: iterations:0 iterationStart:2.5 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test zero iterations: iterations:0 iterationStart:2.5 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test zero iterations: iterations:0 iterationStart:2.5 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test zero iterations: iterations:0 iterationStart:3 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test zero iterations: iterations:0 iterationStart:3 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test zero iterations: iterations:0 iterationStart:3 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + }, - 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/setTarget.html': { - 'Test setting target from a valid target to another target': - 'assert_equals: Value of 1st element (currently not targeted) after changing the effect target expected "10px" but got "50px"', + 'test/web-platform-tests/web-animations/timing-model/animations/set-the-animation-start-time.html': { + 'Setting an unresolved start time an animation without an active timeline does not clear the current time': + 'Animation with null timeline is not supported', - 'Test setting target from a valid target to null': - 'assert_equals: Value after clearing the target expected "10px" but got "50px"', + 'Setting an unresolved start time sets the hold time': + 'Value being assigned to Animation.startTime is not a finite floating-point value.', - 'Test setting target from null to a valid target': - 'assert_equals: Value at 50% progress after setting new target expected "50px" but got "10px"', + 'Setting the start time clears the hold time': + 'Value being assigned to Animation.startTime is not a finite floating-point value.', + + 'Setting the start time of an animation without an active timeline': + 'Animation with null timeline is not supported', + + 'Setting the start time resolves a pending pause task': + 'Value being assigned to Animation.startTime is not a finite floating-point value.', + + 'Setting the start time resolves a pending ready promise': + 'Value being assigned to Animation.startTime is not a finite floating-point value.', + + 'Setting the start time updates the finished state': + 'Value being assigned to Animation.startTime is not a finite floating-point value.', + }, + }, }, - 'test/web-platform-tests/web-animations/timing-model/animation-effects/current-iteration.html': { - 'Test currentIteration during before and after phase when fill is none': - 'anim.effect.getComputedTiming is not a function', + { + configuration: { + target: 'web-animations-next', + withNativeFallback: false, + }, + failures: { + 'test/web-platform-tests/web-animations/interfaces/Animatable/animate-basic.html': { + 'Element.animate() creates an Animation object': + 'assert_equals: Returned object is an Animation expected "[object Animation]" but got "[object Object]"', - 'Test fractional iterations: iterations:3.5 iterationStart:0 duration:0 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() does not accept property-indexed keyframes with an invalid easing value': + 'assert_throws: function "function () {\n div.animate(subtest.input, 2000);\n }" did not throw', + }, - 'Test fractional iterations: iterations:3.5 iterationStart:0 duration:100 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'test/web-platform-tests/web-animations/interfaces/Animatable/animate-effect.html': { + 'Element.animate() accepts a double as an options argument': + 'assert_equals: expected "auto" but got "none"', - 'Test fractional iterations: iterations:3.5 iterationStart:0 duration:Infinity delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a keyframe sequence where greater shorthand precedes lesser shorthand': + 'anim.effect.getKeyframes is not a function', - 'Test fractional iterations: iterations:3.5 iterationStart:2.5 duration:0 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a keyframe sequence where lesser shorthand precedes greater shorthand': + 'anim.effect.getKeyframes is not a function', - 'Test fractional iterations: iterations:3.5 iterationStart:2.5 duration:100 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a keyframe sequence where longhand precedes shorthand': + 'anim.effect.getKeyframes is not a function', - 'Test fractional iterations: iterations:3.5 iterationStart:2.5 duration:Infinity delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a keyframe sequence where shorthand precedes longhand': + 'anim.effect.getKeyframes is not a function', - 'Test fractional iterations: iterations:3.5 iterationStart:3 duration:0 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a keyframe sequence with a CSS variable reference': + 'anim.effect.getKeyframes is not a function', - 'Test fractional iterations: iterations:3.5 iterationStart:3 duration:100 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a keyframe sequence with a CSS variable reference in a shorthand property': + 'anim.effect.getKeyframes is not a function', - 'Test fractional iterations: iterations:3.5 iterationStart:3 duration:Infinity delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a keyframe sequence with different composite values, but the same composite value for a given offset': + 'add compositing is not supported', - 'Test infinity iterations: iterations:Infinity iterationStart:0 duration:0 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a keyframe sequence with different easing values, but the same easing value for a given offset': + 'anim.effect.getKeyframes is not a function', - 'Test infinity iterations: iterations:Infinity iterationStart:0 duration:100 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a keyframe sequence with duplicate values for a given interior offset': + 'anim.effect.getKeyframes is not a function', - 'Test infinity iterations: iterations:Infinity iterationStart:0 duration:Infinity delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a keyframe sequence with duplicate values for offsets 0 and 1': + 'anim.effect.getKeyframes is not a function', - 'Test infinity iterations: iterations:Infinity iterationStart:2.5 duration:0 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a keyframe sequence with repeated values at offset 1 with different easings': + 'anim.effect.getKeyframes is not a function', - 'Test infinity iterations: iterations:Infinity iterationStart:2.5 duration:100 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a one property keyframe sequence with all omitted offsets': + 'anim.effect.getKeyframes is not a function', - 'Test infinity iterations: iterations:Infinity iterationStart:2.5 duration:Infinity delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a one property keyframe sequence with some omitted offsets': + 'anim.effect.getKeyframes is not a function', - 'Test infinity iterations: iterations:Infinity iterationStart:3 duration:0 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a one property one keyframe sequence': + 'Partial keyframes are not supported', - 'Test infinity iterations: iterations:Infinity iterationStart:3 duration:100 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a one property one non-array value property-indexed keyframes specification': + 'Partial keyframes are not supported', - 'Test infinity iterations: iterations:Infinity iterationStart:3 duration:Infinity delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a one property one value property-indexed keyframes specification': + 'Partial keyframes are not supported', - 'Test integer iterations: iterations:3 iterationStart:0 duration:0 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a one property two keyframe sequence': + 'anim.effect.getKeyframes is not a function', - 'Test integer iterations: iterations:3 iterationStart:0 duration:100 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a one property two keyframe sequence that needs to stringify its values': + 'anim.effect.getKeyframes is not a function', - 'Test integer iterations: iterations:3 iterationStart:0 duration:Infinity delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a one property two value property-indexed keyframes specification': + 'anim.effect.getKeyframes is not a function', - 'Test integer iterations: iterations:3 iterationStart:2.5 duration:0 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a one property two value property-indexed keyframes specification that needs to stringify its values': + 'anim.effect.getKeyframes is not a function', - 'Test integer iterations: iterations:3 iterationStart:2.5 duration:100 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a one property two value property-indexed keyframes specification where the first value is invalid': + 'anim.effect.getKeyframes is not a function', - 'Test integer iterations: iterations:3 iterationStart:2.5 duration:Infinity delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a one property two value property-indexed keyframes specification where the second value is invalid': + 'anim.effect.getKeyframes is not a function', - 'Test integer iterations: iterations:3 iterationStart:3 duration:0 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a one shorthand property two keyframe sequence': + 'anim.effect.getKeyframes is not a function', - 'Test integer iterations: iterations:3 iterationStart:3 duration:100 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a one shorthand property two value property-indexed keyframes specification': + 'anim.effect.getKeyframes is not a function', - 'Test integer iterations: iterations:3 iterationStart:3 duration:Infinity delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a property-indexed keyframes specification with a CSS variable reference': + 'anim.effect.getKeyframes is not a function', - 'Test zero iterations: iterations:0 iterationStart:0 duration:0 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a property-indexed keyframes specification with a CSS variable reference in a shorthand property': + 'anim.effect.getKeyframes is not a function', - 'Test zero iterations: iterations:0 iterationStart:0 duration:100 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a property-indexed keyframes specification with an invalid value': + 'anim.effect.getKeyframes is not a function', - 'Test zero iterations: iterations:0 iterationStart:0 duration:Infinity delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a single keyframe sequence with omitted offsets': + 'Partial keyframes are not supported', - 'Test zero iterations: iterations:0 iterationStart:2.5 duration:0 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a two property (a shorthand and one of its component longhands) two keyframe sequence': + 'anim.effect.getKeyframes is not a function', - 'Test zero iterations: iterations:0 iterationStart:2.5 duration:100 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification': + 'anim.effect.getKeyframes is not a function', - 'Test zero iterations: iterations:0 iterationStart:2.5 duration:Infinity delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a two property four keyframe sequence': + 'anim.effect.getKeyframes is not a function', - 'Test zero iterations: iterations:0 iterationStart:3 duration:0 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a two property keyframe sequence where one property is missing from the first keyframe': + 'Partial keyframes are not supported', - 'Test zero iterations: iterations:0 iterationStart:3 duration:100 delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', + 'Element.animate() accepts a two property keyframe sequence where one property is missing from the last keyframe': + 'Partial keyframes are not supported', - 'Test zero iterations: iterations:0 iterationStart:3 duration:Infinity delay:1 fill:both': - 'anim.effect.getComputedTiming is not a function', - }, + 'Element.animate() accepts a two property keyframe sequence with some omitted offsets': + 'anim.effect.getKeyframes is not a function', + + 'Element.animate() accepts a two property property-indexed keyframes specification with different numbers of values': + 'anim.effect.getKeyframes is not a function', + + 'Element.animate() accepts a two property two keyframe sequence': + 'anim.effect.getKeyframes is not a function', + + 'Element.animate() accepts a two property two value property-indexed keyframes specification': + 'anim.effect.getKeyframes is not a function', + + 'Element.animate() accepts an absent options argument': + 'assert_equals: expected (string) "auto" but got (number) 0', + + 'Element.animate() creates an Animation object with a KeyframeEffect': + 'assert_equals: Returned Animation has a KeyframeEffect expected "[object KeyframeEffect]" but got "[object Object]"', + }, + + 'test/web-platform-tests/web-animations/interfaces/Animatable/animate-pseudo-element.html': { + 'CSSPseudoElement.animate() creates an Animation object': + 'document.getAnimations is not a function', + + 'CSSPseudoElement.animate() creates an Animation object targeting to the correct CSSPseudoElement object': + 'document.getAnimations is not a function', + }, + + 'test/web-platform-tests/web-animations/interfaces/Animation/cancel.html': { + 'Animated style is cleared after calling Animation.cancel()': + 'assert_not_equals: transform style is animated before cancelling got disallowed value "none"', + }, + + 'test/web-platform-tests/web-animations/interfaces/Animation/finish.html': { + 'Test exceptions when finishing infinite animation': + 'assert_throws: function "function () {\n animation.finish();\n }" did not throw', + + 'Test exceptions when finishing non-running animation': + 'assert_throws: function "function () {\n animation.finish();\n }" did not throw', + + 'Test finish() resolves finished promise synchronously with an animation without a target': + 'KeyframeEffectReadOnly is not defined', + + 'Test finish() while pause-pending with negative playbackRate': + 'assert_equals: The play state of a pause-pending animation should become "finished" after finish() is called expected "finished" but got "paused"', + + 'Test finish() while pause-pending with positive playbackRate': + 'assert_equals: The play state of a pause-pending animation should become "finished" after finish() is called expected "finished" but got "paused"', + + 'Test finish() while paused': + 'assert_equals: The play state of a paused animation should become "finished" after finish() is called expected "finished" but got "paused"', + + 'Test finish() while play-pending': + 'assert_approx_equals: The start time of a play-pending animation should be set after calling finish() expected NaN +/- 0.0005 but got 0', + + 'Test finishing of animation with a current time past the effect end': + 'animation.effect.getComputedTiming is not a function', + + 'Test normally finished animation resolves finished promise synchronously with an animation without a target': + 'KeyframeEffectReadOnly is not defined', + }, + + 'test/web-platform-tests/web-animations/interfaces/Animation/finished.html': { + 'Test finished promise changes for animation duration changes': + 'assert_equals: currentTime should be unchanged when duration shortened expected 50000 but got 25000', + + 'Test finished promise is not resolved once the animation falls out finished state even though the current finished promise is generated soon after animation state became finished': + 'assert_unreached: Animation.finished should not be resolved Reached unreachable code', + + 'Test finished promise is not resolved when the animation falls out finished state immediately': + 'assert_unreached: Animation.finished should not be resolved Reached unreachable code', + + 'cancelling an already-finished animation replaces the finished promise': + 'assert_not_equals: A new finished promise should be created when cancelling a finished animation got disallowed value object "[object Promise]"', + + 'cancelling an idle animation still replaces the finished promise': + 'assert_not_equals: A redundant call to cancel() should still generate a new finished promise got disallowed value object "[object Promise]"', + }, + + 'test/web-platform-tests/web-animations/interfaces/Animation/oncancel.html': { + 'oncancel event is fired when animation.cancel() is called.': + 'FLAKY_TEST_RESULT', + }, + + 'test/web-platform-tests/web-animations/interfaces/Animation/onfinish.html': { + 'onfinish event is fired when animation.finish() is called': + 'FLAKY_TEST_RESULT', + }, + + 'test/web-platform-tests/web-animations/interfaces/Animation/pause.html': { + 'pause() from idle': + 'assert_equals: initially pause-pending expected "pending" but got "paused"', + }, + + 'test/web-platform-tests/web-animations/interfaces/Animation/playbackRate.html': { + 'Test the effect of setting playbackRate while playing animation': + 'FLAKY_TEST_RESULT', + }, + + 'test/web-platform-tests/web-animations/interfaces/Animation/reverse.html': { + 'reverse() when playbackRate < 0 and currentTime < 0': + 'assert_equals: reverse() should start playing from the start of animation time if the playbackRate < 0 and the currentTime < 0 expected 0 but got -200000', + + 'reverse() when playbackRate < 0 and currentTime < 0 and the target effect end is positive infinity': + 'assert_equals: reverse() should start playing from the start of animation time if the playbackRate < 0 and the currentTime < 0 and the target effect is positive infinity expected 0 but got -200000', + + 'reverse() when playbackRate < 0 and currentTime > effect end': + 'assert_equals: reverse() should start playing from the start of animation time if the playbackRate < 0 and the currentTime > effect end expected 0 but got 200000', + + 'reverse() when playbackRate > 0 and currentTime < 0': + 'assert_equals: reverse() should start playing from the animation effect end if the playbackRate > 0 and the currentTime < 0 expected 100000 but got -200000', + + 'reverse() when playbackRate > 0 and currentTime > effect end': + 'assert_equals: reverse() should start playing from the animation effect end if the playbackRate > 0 and the currentTime > effect end expected 100000 but got 200000', + }, + + 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/delay.html': { + 'Test adding a positive delay to an animation without a backwards fill makes it no longer active': + 'anim.effect.getComputedTiming is not a function', + + 'Test finishing an animation using a large negative delay': + 'anim.effect.getComputedTiming is not a function', + + 'Test seeking an animation by setting a negative delay': + 'anim.effect.getComputedTiming is not a function', + + 'set delay -100': + 'anim.effect.getComputedTiming is not a function', + + 'set delay 100': + 'anim.effect.getComputedTiming is not a function', + }, + + 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/duration.html': { + 'set 100 string duration in animate using an options object': + 'assert_throws: function "function () {\n div.animate({ opacity: [ 0, 1 ] }, { duration: \'100\' });\n }" did not throw', + + 'set NaN duration in animate using a duration parameter': + 'assert_throws: function "function () {\n div.animate({ opacity: [ 0, 1 ] }, NaN);\n }" did not throw', + + 'set NaN duration in animate using an options object': + 'assert_throws: function "function () {\n div.animate({ opacity: [ 0, 1 ] }, { duration: NaN });\n }" did not throw', + + 'set abc string duration in animate using an options object': + 'assert_throws: function "function () {\n div.animate({ opacity: [ 0, 1 ] }, { duration: \'abc\' });\n }" did not throw', + + 'set auto duration in animate as object': + 'assert_equals: set duration \'auto\' expected (string) "auto" but got (number) 0', + + 'set duration 123.45': + 'anim.effect.getComputedTiming is not a function', + + 'set duration Infinity': + 'anim.effect.getComputedTiming is not a function', + + 'set duration auto': + 'anim.effect.getComputedTiming is not a function', + + 'set duration string 100': + 'assert_throws: function "function () {\n anim.effect.timing.duration = \'100\';\n }" did not throw', + }, + + 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/easing.html': { + 'Change the easing while the animation is running': + 'anim.effect.getComputedTiming is not a function', + + 'ease function': + 'animation.effect.getComputedTiming is not a function', + + 'ease-in function': + 'animation.effect.getComputedTiming is not a function', + + 'ease-in-out function': + 'animation.effect.getComputedTiming is not a function', + + 'ease-out function': + 'animation.effect.getComputedTiming is not a function', + + 'easing function which produces values greater than 1': + 'animation.effect.getComputedTiming is not a function', + + 'linear function': + 'animation.effect.getComputedTiming is not a function', + + 'steps(end) function': + 'animation.effect.getComputedTiming is not a function', + + 'steps(start) function': + 'animation.effect.getComputedTiming is not a function', + }, + + 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/endDelay.html': { + 'onfinish event is fired currentTime is after endTime': + 'FLAKY_TEST_RESULT', + + 'set endDelay -1000': + 'anim.effect.getComputedTiming is not a function', + + 'set endDelay 123.45': + 'anim.effect.getComputedTiming is not a function', + + 'set endDelay Infinity': + 'assert_throws: we can not assign Infinity to timing.endDelay function "function () {\n anim.effect.timing.endDelay = Infinity;\n }" did not throw', + + 'set endDelay negative Infinity': + 'assert_throws: we can not assign negative Infinity to timing.endDelay function "function () {\n anim.effect.timing.endDelay = -Infinity;\n }" did not throw', + }, + + 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/fill.html': { + 'set fill backwards': + 'anim.effect.getComputedTiming is not a function', + + 'set fill both': + 'anim.effect.getComputedTiming is not a function', + + 'set fill forwards': + 'anim.effect.getComputedTiming is not a function', + + 'set fill none': + 'anim.effect.getComputedTiming is not a function', + }, + + 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/getAnimations.html': { + 'when currentTime changed in duration:1000, delay: -500, endDelay: -500': + 'assert_equals: when currentTime 0 expected 0 but got 1', + + 'when currentTime changed in duration:1000, delay: 500, endDelay: -500': + 'assert_equals: set currentTime 1000 expected 0 but got 1', + + 'when duration is changed': + 'assert_equals: set duration 102000 expected (object) object "[object Object]" but got (undefined) undefined', + + 'when endDelay is changed': + 'assert_equals: set negative endDelay so as endTime is less than currentTime expected 0 but got 1', + + 'when iterations is changed': + 'assert_equals: set iterations 10 expected (object) object "[object Object]" but got (undefined) undefined', + }, + + 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/getComputedStyle.html': { + 'change currentTime when fill forwards and endDelay is positive': + 'assert_equals: set currentTime just a little before duration expected "0.0001" but got "0"', + + 'changed duration immediately updates its computed styles': + 'FLAKY_TEST_RESULT', + + 'changed iterations immediately updates its computed styles': + 'FLAKY_TEST_RESULT', + }, + + 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/iterationStart.html': { + 'Test invalid iterationStart value': + 'assert_throws: function "function () {\n anim.effect.timing.iterationStart = -1;\n }" threw object "ReferenceError: timing is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'Test that changing the iterationStart affects computed timing during the active phase': + 'anim.effect.getComputedTiming is not a function', + + 'Test that changing the iterationStart affects computed timing when backwards-filling': + 'anim.effect.getComputedTiming is not a function', + + 'Test that changing the iterationStart affects computed timing when forwards-filling': + 'anim.effect.getComputedTiming is not a function', + }, + + 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/iterations.html': { + 'set iterations 2': + 'anim.effect.getComputedTiming is not a function', + + 'set iterations Infinity': + 'anim.effect.getComputedTiming is not a function', + }, + + 'test/web-platform-tests/web-animations/interfaces/AnimationTimeline/document-timeline.html': { + 'document.timeline.currentTime liveness tests': + 'assert_true: document.timeline.currentTime increases between script blocks expected true got false', + + 'document.timeline.currentTime value tests': + 'assert_true: document.timeline.currentTime is positive expected true got false', + }, + + 'test/web-platform-tests/web-animations/interfaces/AnimationTimeline/idlharness.html': { + 'AnimationTimeline interface object length': + 'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing', + + 'AnimationTimeline interface object name': + 'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing', + + 'AnimationTimeline interface: attribute currentTime': + 'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing', + + 'AnimationTimeline interface: document.timeline must inherit property "currentTime" with the proper type (0)': + 'assert_inherits: property "currentTime" found on object expected in prototype chain', + + 'AnimationTimeline interface: existence and properties of interface object': + 'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing', + + 'AnimationTimeline interface: existence and properties of interface prototype object': + 'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing', + + 'AnimationTimeline interface: existence and properties of interface prototype object\'s "constructor" property': + 'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing', + + 'DocumentTimeline interface object length': + 'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing', + + 'DocumentTimeline interface object name': + 'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing', + + 'DocumentTimeline interface: existence and properties of interface object': + 'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing', + + 'DocumentTimeline interface: existence and properties of interface prototype object': + 'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing', + + 'DocumentTimeline interface: existence and properties of interface prototype object\'s "constructor" property': + 'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing', + + 'DocumentTimeline must be primary interface of document.timeline': + 'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing', + + 'Stringification of document.timeline': + 'assert_equals: class string of document.timeline expected "[object DocumentTimeline]" but got "[object Object]"', + }, + + 'test/web-platform-tests/web-animations/interfaces/Document/getAnimations.html': { + 'Test document.getAnimations for non-animated content': + 'document.getAnimations is not a function', + + 'Test document.getAnimations for script-generated animations': + 'document.getAnimations is not a function', + + 'Test document.getAnimations with null target': + 'KeyframeEffectReadOnly is not defined', + + 'Test the order of document.getAnimations with script generated animations': + 'document.getAnimations is not a function', + }, + + 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/constructor.html': { + 'Invalid KeyframeEffectReadOnly option by -Infinity': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'Invalid KeyframeEffectReadOnly option by NaN': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'Invalid KeyframeEffectReadOnly option by a NaN duration': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'Invalid KeyframeEffectReadOnly option by a NaN iterations': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'Invalid KeyframeEffectReadOnly option by a blank easing': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'Invalid KeyframeEffectReadOnly option by a multi-value easing': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'Invalid KeyframeEffectReadOnly option by a negative Infinity duration': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'Invalid KeyframeEffectReadOnly option by a negative Infinity iterations': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'Invalid KeyframeEffectReadOnly option by a negative duration': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'Invalid KeyframeEffectReadOnly option by a negative iterations': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'Invalid KeyframeEffectReadOnly option by a negative value': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'Invalid KeyframeEffectReadOnly option by a string duration': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'Invalid KeyframeEffectReadOnly option by a variable easing': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'Invalid KeyframeEffectReadOnly option by an \'inherit\' easing': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'Invalid KeyframeEffectReadOnly option by an \'initial\' easing': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'Invalid KeyframeEffectReadOnly option by an unrecognized easing': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'Invalid easing [a blank easing] in keyframe sequence should be thrown': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")', + + 'Invalid easing [a multi-value easing] in keyframe sequence should be thrown': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")', + + 'Invalid easing [a variable easing] in keyframe sequence should be thrown': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")', + + 'Invalid easing [an \'inherit\' easing] in keyframe sequence should be thrown': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")', + + 'Invalid easing [an \'initial\' easing] in keyframe sequence should be thrown': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")', + + 'Invalid easing [an unrecognized easing] in keyframe sequence should be thrown': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")', + + 'KeyframeEffect constructor creates an AnimationEffectTiming timing object': + 'assert_equals: expected "[object KeyframeEffect]" but got "[object Object]"', + + 'KeyframeEffectReadOnly constructor throws with a keyframe sequence with an invalid easing value': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'KeyframeEffectReadOnly constructor throws with keyframes not loosely sorted by offset': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'KeyframeEffectReadOnly constructor throws with keyframes with an invalid composite value': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'KeyframeEffectReadOnly constructor throws with keyframes with an out-of-bounded negative offset': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'KeyframeEffectReadOnly constructor throws with keyframes with an out-of-bounded positive offset': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'KeyframeEffectReadOnly constructor throws with property-indexed keyframes with an invalid easing value': + 'assert_throws: function "function () {\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")', + + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence where greater shorthand precedes lesser shorthand': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence where lesser shorthand precedes greater shorthand': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence where longhand precedes shorthand': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence where shorthand precedes longhand': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with a CSS variable reference': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with a CSS variable reference in a shorthand property': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with different composite values, but the same composite value for a given offset': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with different easing values, but the same easing value for a given offset': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with duplicate values for a given interior offset': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with duplicate values for offsets 0 and 1': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with repeated values at offset 1 with different easings': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a one property keyframe sequence with all omitted offsets': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a one property keyframe sequence with some omitted offsets': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a one property one keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a one property one non-array value property-indexed keyframes specification': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a one property one value property-indexed keyframes specification': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a one property two keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a one property two keyframe sequence that needs to stringify its values': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification that needs to stringify its values': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification where the first value is invalid': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification where the second value is invalid': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a one shorthand property two keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a one shorthand property two value property-indexed keyframes specification': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a property-indexed keyframes specification with a CSS variable reference': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a property-indexed keyframes specification with a CSS variable reference in a shorthand property': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a property-indexed keyframes specification with an invalid value': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a single keyframe sequence with omitted offsets': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a two property (a shorthand and one of its component longhands) two keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a two property four keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a two property keyframe sequence where one property is missing from the first keyframe': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a two property keyframe sequence where one property is missing from the last keyframe': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a two property keyframe sequence with some omitted offsets': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly can be constructed with a two property property-indexed keyframes specification with different numbers of values': + 'KeyframeEffectReadOnly is not defined', - 'test/web-platform-tests/web-animations/timing-model/animations/set-the-animation-start-time.html': { - 'Setting an unresolved start time an animation without an active timeline does not clear the current time': - 'Animation with null timeline is not supported', + 'a KeyframeEffectReadOnly can be constructed with a two property two keyframe sequence': + 'KeyframeEffectReadOnly is not defined', - 'Setting an unresolved start time sets the hold time': - 'assert_equals: expected "running" but got "idle"', + 'a KeyframeEffectReadOnly can be constructed with a two property two value property-indexed keyframes specification': + 'KeyframeEffectReadOnly is not defined', - 'Setting the start time clears the hold time': - 'assert_approx_equals: The current time is calculated from the start time, not the hold time expected 2000 +/- 0.0005 but got 1000', + 'a KeyframeEffectReadOnly can be constructed with no frames': + 'KeyframeEffectReadOnly is not defined', - 'Setting the start time of an animation without an active timeline': - 'Animation with null timeline is not supported', + 'a KeyframeEffectReadOnly constructed by +Infinity': + 'KeyframeEffectReadOnly is not defined', - 'Setting the start time resolves a pending pause task': - 'assert_equals: Animation is in pause-pending state expected "pending" but got "paused"', + 'a KeyframeEffectReadOnly constructed by a double value': + 'KeyframeEffectReadOnly is not defined', - 'Setting the start time updates the finished state': - 'assert_equals: Seeked to finished state using the startTime expected "finished" but got "idle"', + 'a KeyframeEffectReadOnly constructed by a forwards fill': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed by a normal KeyframeEffectOptions object': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed by an Infinity duration': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed by an Infinity iterations': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed by an auto duration': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed by an auto fill': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed by an empty KeyframeEffectOptions object': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a keyframe sequence where greater shorthand precedes lesser shorthand roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a keyframe sequence where lesser shorthand precedes greater shorthand roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a keyframe sequence where longhand precedes shorthand roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a keyframe sequence where shorthand precedes longhand roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a keyframe sequence with a CSS variable reference in a shorthand property roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a keyframe sequence with a CSS variable reference roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a keyframe sequence with different composite values, but the same composite value for a given offset roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a keyframe sequence with different easing values, but the same easing value for a given offset roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a keyframe sequence with duplicate values for a given interior offset roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a keyframe sequence with duplicate values for offsets 0 and 1 roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a keyframe sequence with repeated values at offset 1 with different easings roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a one property keyframe sequence with all omitted offsets roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a one property keyframe sequence with some omitted offsets roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a one property one keyframe sequence roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a one property one non-array value property-indexed keyframes specification roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a one property one value property-indexed keyframes specification roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a one property two keyframe sequence roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a one property two keyframe sequence that needs to stringify its values roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification that needs to stringify its values roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification where the first value is invalid roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification where the second value is invalid roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a one shorthand property two keyframe sequence roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a one shorthand property two value property-indexed keyframes specification roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a property-indexed keyframes specification with a CSS variable reference in a shorthand property roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a property-indexed keyframes specification with a CSS variable reference roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a property-indexed keyframes specification with an invalid value roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a single keyframe sequence with omitted offsets roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a two property (a shorthand and one of its component longhands) two keyframe sequence roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a two property four keyframe sequence roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a two property keyframe sequence where one property is missing from the first keyframe roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a two property keyframe sequence where one property is missing from the last keyframe roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a two property keyframe sequence with some omitted offsets roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a two property property-indexed keyframes specification with different numbers of values roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a two property two keyframe sequence roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with a two property two value property-indexed keyframes specification roundtrips': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed with null target': + 'KeyframeEffectReadOnly is not defined', + + 'a KeyframeEffectReadOnly constructed without any KeyframeEffectOptions object': + 'KeyframeEffectReadOnly is not defined', + + 'composite values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in KeyframeTimingOptions': + 'KeyframeEffectReadOnly is not defined', + + 'composite values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in property-indexed keyframes': + 'KeyframeEffectReadOnly is not defined', + + 'composite values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in regular keyframes': + 'KeyframeEffectReadOnly is not defined', + + 'easing values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in KeyframeTimingOptions': + 'KeyframeEffectReadOnly is not defined', + + 'easing values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in a property-indexed keyframe': + 'KeyframeEffectReadOnly is not defined', + + 'easing values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in regular keyframes': + 'KeyframeEffectReadOnly is not defined', + + 'the KeyframeEffectReadOnly constructor reads keyframe properties in the expected order': + 'KeyframeEffectReadOnly is not defined', + }, + + 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/effect-easing-steps.html': { + 'Test bounds point of step(4, start) easing with iterationStart 0.75 and delay': + 'animation.effect.getComputedTiming is not a function', + + 'Test bounds point of step-end easing with iterationStart and delay': + 'animation.effect.getComputedTiming is not a function', + + 'Test bounds point of step-end easing with iterationStart not at a transition point': + 'animation.effect.getComputedTiming is not a function', + + 'Test bounds point of step-start easing': + 'animation.effect.getComputedTiming is not a function', + + 'Test bounds point of step-start easing in keyframe': + 'animation.effect.getComputedTiming is not a function', + + 'Test bounds point of step-start easing with alternate direction': + 'animation.effect.getComputedTiming is not a function', + + 'Test bounds point of step-start easing with alternate-reverse direction': + 'animation.effect.getComputedTiming is not a function', + + 'Test bounds point of step-start easing with compositor': + 'animation.effect.getComputedTiming is not a function', + + 'Test bounds point of step-start easing with iterationStart and delay': + 'animation.effect.getComputedTiming is not a function', + + 'Test bounds point of step-start easing with iterationStart and reverse direction': + 'animation.effect.getComputedTiming is not a function', + + 'Test bounds point of step-start easing with iterationStart not at a transition point': + 'animation.effect.getComputedTiming is not a function', + + 'Test bounds point of step-start easing with reverse direction': + 'animation.effect.getComputedTiming is not a function', + }, + + 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/effect-easing.html': { + 'effect easing produces negative values 1 with keyframe easing cubic-bezier(0, 0, 0, 0)': + 'assert_approx_equals: The left of the animation should be approximately -29.501119758965654 at 250ms expected -29.501119758965654 +/- 0.01 but got 0', + + 'effect easing produces values greater than 1 with keyframe easing cubic-bezier(1, 1, 1, 1)': + 'assert_approx_equals: The left of the animation should be approximately 102.40666638411385 at 250ms expected 102.40666638411385 +/- 0.01 but got 100', + + 'effect easing which produces values greater than 1 and the tangent on the upper boundary is infinity with keyframe easing producing values greater than 1': + 'assert_approx_equals: The left of the animation should be approximately 100 at 240ms expected 100 +/- 0.01 but got 99.5333', + }, + + 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/getComputedTiming.html': { + 'getComputedTiming().activeDuration for a non-zero duration and default iteration count': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().activeDuration for a non-zero duration and fractional iteration count': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().activeDuration for a non-zero duration and integral iteration count': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().activeDuration for a zero duration and default iteration count': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().activeDuration for a zero duration and fractional iteration count': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().activeDuration for a zero duration and infinite iteration count': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().activeDuration for a zero duration and zero iteration count': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().activeDuration for an empty KeyframeEffectOptions object': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().activeDuration for an infinite duration and default iteration count': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().activeDuration for an infinite duration and fractional iteration count': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().activeDuration for an infinite duration and infinite iteration count': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().activeDuration for an infinite duration and zero iteration count': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().activeDuration for an non-zero duration and infinite iteration count': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().activeDuration for an non-zero duration and zero iteration count': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().endTime for a non-zero duration and default iteration count': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().endTime for a non-zero duration and non-default iteration count': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().endTime for a non-zero duration and non-zero delay': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().endTime for a non-zero duration, non-zero delay and non-default iteration': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().endTime for a zero duration and negative delay': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().endTime for an empty KeyframeEffectOptions object': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().endTime for an infinite duration': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().endTime for an infinite duration and delay': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().endTime for an infinite duration and negative delay': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().endTime for an infinite iteration count': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().endTime for an non-zero duration and negative delay': + 'KeyframeEffectReadOnly is not defined', + + 'getComputedTiming().endTime for an non-zero duration and negative delay greater than active duration': + 'KeyframeEffectReadOnly is not defined', + + 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by +Infinity': + 'KeyframeEffectReadOnly is not defined', + + 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by a double value': + 'KeyframeEffectReadOnly is not defined', + + 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by a forwards fill': + 'KeyframeEffectReadOnly is not defined', + + 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by a normal KeyframeEffectOptions object': + 'KeyframeEffectReadOnly is not defined', + + 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an Infinity duration': + 'KeyframeEffectReadOnly is not defined', + + 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an Infinity iterations': + 'KeyframeEffectReadOnly is not defined', + + 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an auto duration': + 'KeyframeEffectReadOnly is not defined', + + 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an auto fill': + 'KeyframeEffectReadOnly is not defined', + + 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an empty KeyframeEffectOptions object': + 'KeyframeEffectReadOnly is not defined', + + 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed without any KeyframeEffectOptions object': + 'KeyframeEffectReadOnly is not defined', + }, + + 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument.html': { + 'non-animatable property \'animation\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'animation\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'animationDelay\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'animationDelay\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'animationDirection\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'animationDirection\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'animationDuration\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'animationDuration\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'animationFillMode\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'animationFillMode\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'animationIterationCount\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'animationIterationCount\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'animationName\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'animationName\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'animationPlayState\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'animationPlayState\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'animationTimingFunction\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'animationTimingFunction\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'display\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'display\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'transition\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'transition\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'transitionDelay\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'transitionDelay\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'transitionDuration\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'transitionDuration\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'transitionProperty\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'transitionProperty\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'transitionTimingFunction\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'transitionTimingFunction\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'unsupportedProperty\' is not accessed when using a keyframe sequence': + 'KeyframeEffectReadOnly is not defined', + + 'non-animatable property \'unsupportedProperty\' is not accessed when using a property-indexed keyframe object': + 'KeyframeEffectReadOnly is not defined', + }, + + 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/setKeyframes.html': { + 'Keyframes can be replaced with a keyframe sequence where greater shorthand precedes lesser shorthand': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a keyframe sequence where lesser shorthand precedes greater shorthand': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a keyframe sequence where longhand precedes shorthand': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a keyframe sequence where shorthand precedes longhand': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a keyframe sequence with a CSS variable reference': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a keyframe sequence with a CSS variable reference in a shorthand property': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a keyframe sequence with different composite values, but the same composite value for a given offset': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a keyframe sequence with different easing values, but the same easing value for a given offset': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a keyframe sequence with duplicate values for a given interior offset': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a keyframe sequence with duplicate values for offsets 0 and 1': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a keyframe sequence with repeated values at offset 1 with different easings': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a one property keyframe sequence with all omitted offsets': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a one property keyframe sequence with some omitted offsets': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a one property one keyframe sequence': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a one property one non-array value property-indexed keyframes specification': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a one property one value property-indexed keyframes specification': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a one property two keyframe sequence': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a one property two keyframe sequence that needs to stringify its values': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a one property two value property-indexed keyframes specification': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a one property two value property-indexed keyframes specification that needs to stringify its values': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a one property two value property-indexed keyframes specification where the first value is invalid': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a one property two value property-indexed keyframes specification where the second value is invalid': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a one shorthand property two keyframe sequence': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a one shorthand property two value property-indexed keyframes specification': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a property-indexed keyframes specification with a CSS variable reference': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a property-indexed keyframes specification with a CSS variable reference in a shorthand property': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a property-indexed keyframes specification with an invalid value': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a single keyframe sequence with omitted offsets': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a two property (a shorthand and one of its component longhands) two keyframe sequence': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a two property four keyframe sequence': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a two property keyframe sequence where one property is missing from the first keyframe': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a two property keyframe sequence where one property is missing from the last keyframe': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a two property keyframe sequence with some omitted offsets': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a two property property-indexed keyframes specification with different numbers of values': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a two property two keyframe sequence': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with a two property two value property-indexed keyframes specification': + 'effect.setKeyframes is not a function', + + 'Keyframes can be replaced with an empty keyframe': + 'effect.setKeyframes is not a function', + }, + + 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/setTarget.html': { + 'Test setting target from a valid target to another target': + 'assert_equals: Value of 1st element (currently not targeted) after changing the effect target expected "10px" but got "50px"', + + 'Test setting target from a valid target to null': + 'assert_equals: Value after clearing the target expected "10px" but got "50px"', + + 'Test setting target from null to a valid target': + 'assert_equals: Value at 50% progress after setting new target expected "50px" but got "10px"', + }, + + 'test/web-platform-tests/web-animations/timing-model/animation-effects/current-iteration.html': { + 'Test currentIteration during before and after phase when fill is none': + 'anim.effect.getComputedTiming is not a function', + + 'Test fractional iterations: iterations:3.5 iterationStart:0 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test fractional iterations: iterations:3.5 iterationStart:0 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test fractional iterations: iterations:3.5 iterationStart:0 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test fractional iterations: iterations:3.5 iterationStart:2.5 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test fractional iterations: iterations:3.5 iterationStart:2.5 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test fractional iterations: iterations:3.5 iterationStart:2.5 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test fractional iterations: iterations:3.5 iterationStart:3 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test fractional iterations: iterations:3.5 iterationStart:3 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test fractional iterations: iterations:3.5 iterationStart:3 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test infinity iterations: iterations:Infinity iterationStart:0 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test infinity iterations: iterations:Infinity iterationStart:0 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test infinity iterations: iterations:Infinity iterationStart:0 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test infinity iterations: iterations:Infinity iterationStart:2.5 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test infinity iterations: iterations:Infinity iterationStart:2.5 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test infinity iterations: iterations:Infinity iterationStart:2.5 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test infinity iterations: iterations:Infinity iterationStart:3 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test infinity iterations: iterations:Infinity iterationStart:3 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test infinity iterations: iterations:Infinity iterationStart:3 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test integer iterations: iterations:3 iterationStart:0 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test integer iterations: iterations:3 iterationStart:0 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test integer iterations: iterations:3 iterationStart:0 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test integer iterations: iterations:3 iterationStart:2.5 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test integer iterations: iterations:3 iterationStart:2.5 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test integer iterations: iterations:3 iterationStart:2.5 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test integer iterations: iterations:3 iterationStart:3 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test integer iterations: iterations:3 iterationStart:3 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test integer iterations: iterations:3 iterationStart:3 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test zero iterations: iterations:0 iterationStart:0 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test zero iterations: iterations:0 iterationStart:0 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test zero iterations: iterations:0 iterationStart:0 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test zero iterations: iterations:0 iterationStart:2.5 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test zero iterations: iterations:0 iterationStart:2.5 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test zero iterations: iterations:0 iterationStart:2.5 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test zero iterations: iterations:0 iterationStart:3 duration:0 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test zero iterations: iterations:0 iterationStart:3 duration:100 delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + + 'Test zero iterations: iterations:0 iterationStart:3 duration:Infinity delay:1 fill:both': + 'anim.effect.getComputedTiming is not a function', + }, + + 'test/web-platform-tests/web-animations/timing-model/animations/set-the-animation-start-time.html': { + 'Setting an unresolved start time an animation without an active timeline does not clear the current time': + 'Animation with null timeline is not supported', + + 'Setting an unresolved start time sets the hold time': + 'assert_equals: expected "running" but got "idle"', + + 'Setting the start time clears the hold time': + 'assert_approx_equals: The current time is calculated from the start time, not the hold time expected 2000 +/- 0.0005 but got 1000', + + 'Setting the start time of an animation without an active timeline': + 'Animation with null timeline is not supported', + + 'Setting the start time resolves a pending pause task': + 'assert_equals: Animation is in pause-pending state expected "pending" but got "paused"', + + 'Setting the start time updates the finished state': + 'assert_equals: Seeked to finished state using the startTime expected "finished" but got "idle"', + }, + }, }, - }, + + ], }; diff --git a/web-animations-next-lite.min.js b/web-animations-next-lite.min.js index 6d4a9e76..965fcbb2 100644 --- a/web-animations-next-lite.min.js +++ b/web-animations-next-lite.min.js @@ -12,5 +12,5 @@ // See the License for the specific language governing permissions and // limitations under the License. -!function(a,b){var c={},d={},e={},f=null;!function(a,b){function c(a){if("number"==typeof a)return a;var b={};for(var c in a)b[c]=a[c];return b}function d(){this._delay=0,this._endDelay=0,this._fill="none",this._iterationStart=0,this._iterations=1,this._duration=0,this._playbackRate=1,this._direction="normal",this._easing="linear",this._easingFunction=x}function e(){return a.isDeprecated("Invalid timing inputs","2016-03-02","TypeError exceptions will be thrown instead.",!0)}function f(b,c,e){var f=new d;return c&&(f.fill="both",f.duration="auto"),"number"!=typeof b||isNaN(b)?void 0!==b&&Object.getOwnPropertyNames(b).forEach(function(c){if("auto"!=b[c]){if(("number"==typeof f[c]||"duration"==c)&&("number"!=typeof b[c]||isNaN(b[c])))return;if("fill"==c&&-1==v.indexOf(b[c]))return;if("direction"==c&&-1==w.indexOf(b[c]))return;if("playbackRate"==c&&1!==b[c]&&a.isDeprecated("AnimationEffectTiming.playbackRate","2014-11-28","Use Animation.playbackRate instead."))return;f[c]=b[c]}}):f.duration=b,f}function g(a){return"number"==typeof a&&(a=isNaN(a)?{duration:0}:{duration:a}),a}function h(b,c){return b=a.numericTimingToObject(b),f(b,c)}function i(a,b,c,d){return a<0||a>1||c<0||c>1?x:function(e){function f(a,b,c){return 3*a*(1-c)*(1-c)*c+3*b*(1-c)*c*c+c*c*c}if(e<=0){var g=0;return a>0?g=b/a:!b&&c>0&&(g=d/c),g*e}if(e>=1){var h=0;return c<1?h=(d-1)/(c-1):1==c&&a<1&&(h=(b-1)/(a-1)),1+h*(e-1)}for(var i=0,j=1;i=1)return 1;var d=1/a;return(c+=b*d)-c%d}}function k(a){C||(C=document.createElement("div").style),C.animationTimingFunction="",C.animationTimingFunction=a;var b=C.animationTimingFunction;if(""==b&&e())throw new TypeError(a+" is not a valid value for easing");return b}function l(a){if("linear"==a)return x;var b=E.exec(a);if(b)return i.apply(this,b.slice(1).map(Number));var c=F.exec(a);return c?j(Number(c[1]),{start:y,middle:z,end:A}[c[2]]):B[a]||x}function m(a){return Math.abs(n(a)/a.playbackRate)}function n(a){return 0===a.duration||0===a.iterations?0:a.duration*a.iterations}function o(a,b,c){if(null==b)return G;var d=c.delay+a+c.endDelay;return b=Math.min(c.delay+a,d)?I:J}function p(a,b,c,d,e){switch(d){case H:return"backwards"==b||"both"==b?0:null;case J:return c-e;case I:return"forwards"==b||"both"==b?a:null;case G:return null}}function q(a,b,c,d,e){var f=e;return 0===a?b!==H&&(f+=c):f+=d/a,f}function r(a,b,c,d,e,f){var g=a===1/0?b%1:a%1;return 0!==g||c!==I||0===d||0===e&&0!==f||(g=1),g}function s(a,b,c,d){return a===I&&b===1/0?1/0:1===c?Math.floor(d)-1:Math.floor(d)}function t(a,b,c){var d=a;if("normal"!==a&&"reverse"!==a){var e=b;"alternate-reverse"===a&&(e+=1),d="normal",e!==1/0&&e%2!=0&&(d="reverse")}return"normal"===d?c:1-c}function u(a,b,c){var d=o(a,b,c),e=p(a,c.fill,b,d,c.delay);if(null===e)return null;var f=q(c.duration,d,c.iterations,e,c.iterationStart),g=r(f,c.iterationStart,d,c.iterations,e,c.duration),h=s(d,c.iterations,g,f),i=t(c.direction,h,g);return c._easingFunction(i)}var v="backwards|forwards|both|none".split("|"),w="reverse|alternate|alternate-reverse".split("|"),x=function(a){return a};d.prototype={_setMember:function(b,c){this["_"+b]=c,this._effect&&(this._effect._timingInput[b]=c,this._effect._timing=a.normalizeTimingInput(this._effect._timingInput),this._effect.activeDuration=a.calculateActiveDuration(this._effect._timing),this._effect._animation&&this._effect._animation._rebuildUnderlyingAnimation())},get playbackRate(){return this._playbackRate},set delay(a){this._setMember("delay",a)},get delay(){return this._delay},set endDelay(a){this._setMember("endDelay",a)},get endDelay(){return this._endDelay},set fill(a){this._setMember("fill",a)},get fill(){return this._fill},set iterationStart(a){if((isNaN(a)||a<0)&&e())throw new TypeError("iterationStart must be a non-negative number, received: "+timing.iterationStart);this._setMember("iterationStart",a)},get iterationStart(){return this._iterationStart},set duration(a){if("auto"!=a&&(isNaN(a)||a<0)&&e())throw new TypeError("duration must be non-negative or auto, received: "+a);this._setMember("duration",a)},get duration(){return this._duration},set direction(a){this._setMember("direction",a)},get direction(){return this._direction},set easing(a){this._easingFunction=l(k(a)),this._setMember("easing",a)},get easing(){return this._easing},set iterations(a){if((isNaN(a)||a<0)&&e())throw new TypeError("iterations must be non-negative, received: "+a);this._setMember("iterations",a)},get iterations(){return this._iterations}};var y=1,z=.5,A=0,B={ease:i(.25,.1,.25,1),"ease-in":i(.42,0,1,1),"ease-out":i(0,0,.58,1),"ease-in-out":i(.42,0,.58,1),"step-start":j(1,y),"step-middle":j(1,z),"step-end":j(1,A)},C=null,D="\\s*(-?\\d+\\.?\\d*|-?\\.\\d+)\\s*",E=new RegExp("cubic-bezier\\("+D+","+D+","+D+","+D+"\\)"),F=/steps\(\s*(\d+)\s*,\s*(start|middle|end)\s*\)/,G=0,H=1,I=2,J=3;a.cloneTimingInput=c,a.makeTiming=f,a.numericTimingToObject=g,a.normalizeTimingInput=h,a.calculateActiveDuration=m,a.calculateIterationProgress=u,a.calculatePhase=o,a.normalizeEasing=k,a.parseEasingFunction=l}(c),function(a,b){function c(a,b){return a in k?k[a][b]||b:b}function d(a){return"display"===a||0===a.lastIndexOf("animation",0)||0===a.lastIndexOf("transition",0)}function e(a,b,e){if(!d(a)){var f=h[a];if(f){i.style[a]=b;for(var g in f){var j=f[g],k=i.style[j];e[j]=c(j,k)}}else e[a]=c(a,b)}}function f(a){var b=[];for(var c in a)if(!(c in["easing","offset","composite"])){var d=a[c];Array.isArray(d)||(d=[d]);for(var e,f=d.length,g=0;g1&&null==d[0].offset&&(d[0].offset=0);for(var b=0,c=d[0].offset,e=1;e1)throw new TypeError("Keyframe offsets must be between 0 and 1.")}}else if("composite"==d){if("add"==f||"accumulate"==f)throw{type:DOMException.NOT_SUPPORTED_ERR,name:"NotSupportedError",message:"add compositing is not supported"};if("replace"!=f)throw new TypeError("Invalid composite mode "+f+".")}else f="easing"==d?a.normalizeEasing(f):""+f;e(d,f,c)}return void 0==c.offset&&(c.offset=null),void 0==c.easing&&(c.easing="linear"),c}),g=!0,h=-1/0,i=0;i=0&&a.offset<=1}),g||c(),d}var h={background:["backgroundImage","backgroundPosition","backgroundSize","backgroundRepeat","backgroundAttachment","backgroundOrigin","backgroundClip","backgroundColor"],border:["borderTopColor","borderTopStyle","borderTopWidth","borderRightColor","borderRightStyle","borderRightWidth","borderBottomColor","borderBottomStyle","borderBottomWidth","borderLeftColor","borderLeftStyle","borderLeftWidth"],borderBottom:["borderBottomWidth","borderBottomStyle","borderBottomColor"],borderColor:["borderTopColor","borderRightColor","borderBottomColor","borderLeftColor"],borderLeft:["borderLeftWidth","borderLeftStyle","borderLeftColor"],borderRadius:["borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius"],borderRight:["borderRightWidth","borderRightStyle","borderRightColor"],borderTop:["borderTopWidth","borderTopStyle","borderTopColor"],borderWidth:["borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth"],flex:["flexGrow","flexShrink","flexBasis"],font:["fontFamily","fontSize","fontStyle","fontVariant","fontWeight","lineHeight"],margin:["marginTop","marginRight","marginBottom","marginLeft"],outline:["outlineColor","outlineStyle","outlineWidth"],padding:["paddingTop","paddingRight","paddingBottom","paddingLeft"]},i=document.createElementNS("http://www.w3.org/1999/xhtml","div"),j={thin:"1px",medium:"3px",thick:"5px"},k={borderBottomWidth:j,borderLeftWidth:j,borderRightWidth:j,borderTopWidth:j,fontSize:{"xx-small":"60%","x-small":"75%",small:"89%",medium:"100%",large:"120%","x-large":"150%","xx-large":"200%"},fontWeight:{normal:"400",bold:"700"},outlineWidth:j,textShadow:{none:"0px 0px 0px transparent"},boxShadow:{none:"0px 0px 0px 0px transparent"}};a.convertToArrayForm=f,a.normalizeKeyframes=g}(c),function(a){var b={};a.isDeprecated=function(a,c,d,e){var f=e?"are":"is",g=new Date,h=new Date(c);return h.setMonth(h.getMonth()+3),!(g=a.applyFrom&&c0?this._totalDuration:0),this._ensureAlive())},get currentTime(){return this._idle||this._currentTimePending?null:this._currentTime},set currentTime(a){a=+a,isNaN(a)||(b.restart(),this._paused||null==this._startTime||(this._startTime=this._timeline.currentTime-a/this._playbackRate),this._currentTimePending=!1,this._currentTime!=a&&(this._idle&&(this._idle=!1,this._paused=!0),this._tickCurrentTime(a,!0),b.applyDirtiedAnimation(this)))},get startTime(){return this._startTime},set startTime(a){a=+a,isNaN(a)||this._paused||this._idle||(this._startTime=a,this._tickCurrentTime((this._timeline.currentTime-this._startTime)*this.playbackRate),b.applyDirtiedAnimation(this))},get playbackRate(){return this._playbackRate},set playbackRate(a){if(a!=this._playbackRate){var c=this.currentTime;this._playbackRate=a,this._startTime=null,"paused"!=this.playState&&"idle"!=this.playState&&(this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),b.applyDirtiedAnimation(this)),null!=c&&(this.currentTime=c)}},get _isFinished(){return!this._idle&&(this._playbackRate>0&&this._currentTime>=this._totalDuration||this._playbackRate<0&&this._currentTime<=0)},get _totalDuration(){return this._effect._totalDuration},get playState(){return this._idle?"idle":null==this._startTime&&!this._paused&&0!=this.playbackRate||this._currentTimePending?"pending":this._paused?"paused":this._isFinished?"finished":"running"},_rewind:function(){if(this._playbackRate>=0)this._currentTime=0;else{if(!(this._totalDuration<1/0))throw new DOMException("Unable to rewind negative playback rate animation with infinite duration","InvalidStateError");this._currentTime=this._totalDuration}},play:function(){this._paused=!1,(this._isFinished||this._idle)&&(this._rewind(),this._startTime=null),this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),b.applyDirtiedAnimation(this)},pause:function(){this._isFinished||this._paused||this._idle?this._idle&&(this._rewind(),this._idle=!1):this._currentTimePending=!0,this._startTime=null,this._paused=!0},finish:function(){this._idle||(this.currentTime=this._playbackRate>0?this._totalDuration:0,this._startTime=this._totalDuration-this.currentTime,this._currentTimePending=!1,b.applyDirtiedAnimation(this))},cancel:function(){this._inEffect&&(this._inEffect=!1,this._idle=!0,this._paused=!1,this._isFinished=!0,this._finishedFlag=!0,this._currentTime=0,this._startTime=null,this._effect._update(null),b.applyDirtiedAnimation(this))},reverse:function(){this.playbackRate*=-1,this.play()},addEventListener:function(a,b){"function"==typeof b&&"finish"==a&&this._finishHandlers.push(b)},removeEventListener:function(a,b){if("finish"==a){var c=this._finishHandlers.indexOf(b);c>=0&&this._finishHandlers.splice(c,1)}},_fireEvents:function(a){if(this._isFinished){if(!this._finishedFlag){var b=new d(this,this._currentTime,a),c=this._finishHandlers.concat(this.onfinish?[this.onfinish]:[]);setTimeout(function(){c.forEach(function(a){a.call(b.target,b)})},0),this._finishedFlag=!0}}else this._finishedFlag=!1},_tick:function(a,b){this._idle||this._paused||(null==this._startTime?b&&(this.startTime=a-this._currentTime/this.playbackRate):this._isFinished||this._tickCurrentTime((a-this._startTime)*this.playbackRate)),b&&(this._currentTimePending=!1,this._fireEvents(a))},get _needsTick(){return this.playState in{pending:1,running:1}||!this._finishedFlag},_targetAnimations:function(){var a=this._effect._target;return a._activeAnimations||(a._activeAnimations=[]),a._activeAnimations},_markTarget:function(){var a=this._targetAnimations();-1===a.indexOf(this)&&a.push(this)},_unmarkTarget:function(){var a=this._targetAnimations(),b=a.indexOf(this);-1!==b&&a.splice(b,1)}}}(c,d),function(a,b,c){function d(a){var b=j;j=[],ad?c%=d:d%=c;return c=a*b/(c+d)}function g(a){return function(b){var c=a(b);return c&&(c[0]=void 0),c}}function h(a,b){return function(c){return a(c)||[b,c]}}function i(b,c){for(var d=[],e=0;e=1?b:"visible"}]}a.addPropertiesHandler(String,c,["visibility"])}(d),function(a,b){function c(a){a=a.trim(),f.fillStyle="#000",f.fillStyle=a;var b=f.fillStyle;if(f.fillStyle="#fff",f.fillStyle=a,b==f.fillStyle){f.fillRect(0,0,1,1);var c=f.getImageData(0,0,1,1).data;f.clearRect(0,0,1,1);var d=c[3]/255;return[c[0]*d,c[1]*d,c[2]*d,d]}}function d(b,c){return[b,c,function(b){function c(a){return Math.max(0,Math.min(255,a))}if(b[3])for(var d=0;d<3;d++)b[d]=Math.round(c(b[d]/b[3]));return b[3]=a.numberToString(a.clamp(0,1,b[3])),"rgba("+b.join(",")+")"}]}var e=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");e.width=e.height=1;var f=e.getContext("2d");a.addPropertiesHandler(c,d,["background-color","border-bottom-color","border-left-color","border-right-color","border-top-color","color","fill","flood-color","lighting-color","outline-color","stop-color","stroke","text-decoration-color"]),a.consumeColor=a.consumeParenthesised.bind(null,c),a.mergeColors=d}(d),function(a,b){function c(a,b){if("0"==(b=b.trim().toLowerCase())&&"px".search(a)>=0)return{px:0};if(/^[^(]*$|^calc/.test(b)){b=b.replace(/calc\(/g,"(");var c={};b=b.replace(a,function(a){return c[a]=null,"U"+a});for(var d="U("+a.source+")",e=b.replace(/[-+]?(\d*\.)?\d+/g,"N").replace(new RegExp("N"+d,"g"),"D").replace(/\s[+-]\s/g,"O").replace(/\s/g,""),f=[/N\*(D)/g,/(N|D)[*\/]N/g,/(N|D)O\1/g,/\((N|D)\)/g],g=0;g1?"calc("+c+")":c}]}var f="px|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc",g=c.bind(null,new RegExp(f,"g")),h=c.bind(null,new RegExp(f+"|%","g")),i=c.bind(null,/deg|rad|grad|turn/g);a.parseLength=g,a.parseLengthOrPercent=h,a.consumeLengthOrPercent=a.consumeParenthesised.bind(null,h),a.parseAngle=i,a.mergeDimensions=e;var j=a.consumeParenthesised.bind(null,g),k=a.consumeRepeated.bind(void 0,j,/^/),l=a.consumeRepeated.bind(void 0,k,/^,/);a.consumeSizePairList=l;var m=function(a){var b=l(a);if(b&&""==b[1])return b[0]},n=a.mergeNestedRepeated.bind(void 0,d," "),o=a.mergeNestedRepeated.bind(void 0,n,",");a.mergeNonNegativeSizePair=n,a.addPropertiesHandler(m,o,["background-size"]),a.addPropertiesHandler(h,d,["border-bottom-width","border-image-width","border-left-width","border-right-width","border-top-width","flex-basis","font-size","height","line-height","max-height","max-width","outline-width","width"]),a.addPropertiesHandler(h,e,["border-bottom-left-radius","border-bottom-right-radius","border-top-left-radius","border-top-right-radius","bottom","left","letter-spacing","margin-bottom","margin-left","margin-right","margin-top","min-height","min-width","outline-offset","padding-bottom","padding-left","padding-right","padding-top","perspective","right","shape-margin","stroke-dashoffset","text-indent","top","vertical-align","word-spacing"])}(d,f),function(a,b){function c(b){return a.consumeLengthOrPercent(b)||a.consumeToken(/^auto/,b)}function d(b){var d=a.consumeList([a.ignore(a.consumeToken.bind(null,/^rect/)),a.ignore(a.consumeToken.bind(null,/^\(/)),a.consumeRepeated.bind(null,c,/^,/),a.ignore(a.consumeToken.bind(null,/^\)/))],b);if(d&&4==d[0].length)return d[0]}function e(b,c){return"auto"==b||"auto"==c?[!0,!1,function(d){var e=d?b:c;if("auto"==e)return"auto";var f=a.mergeDimensions(e,e);return f[2](f[0])}]:a.mergeDimensions(b,c)}function f(a){return"rect("+a+")"}var g=a.mergeWrappedNestedRepeated.bind(null,f,e,", ");a.parseBox=d,a.mergeBoxes=g,a.addPropertiesHandler(d,g,["clip"])}(d),function(a,b){function c(a){return function(b){var c=0;return a.map(function(a){return a===k?b[c++]:a})}}function d(a){return a}function e(b){if("none"==(b=b.toLowerCase().trim()))return[];for(var c,d=/\s*(\w+)\(([^)]*)\)/g,e=[],f=0;c=d.exec(b);){if(c.index!=f)return;f=c.index+c[0].length;var g=c[1],h=n[g];if(!h)return;var i=c[2].split(","),j=h[0];if(j.length=0&&this._cancelHandlers.splice(c,1)}else i.call(this,a,b)},f}}}(),function(a){var b=document.documentElement,c=null,d=!1;try{var e=getComputedStyle(b).getPropertyValue("opacity"),f="0"==e?"1":"0";c=b.animate({opacity:[f,f]},{duration:1}),c.currentTime=0,d=getComputedStyle(b).getPropertyValue("opacity")==f}catch(a){}finally{c&&c.cancel()}if(!d){var g=window.Element.prototype.animate;window.Element.prototype.animate=function(b,c){return window.Symbol&&Symbol.iterator&&Array.prototype.from&&b[Symbol.iterator]&&(b=Array.from(b)),Array.isArray(b)||null===b||(b=a.convertToArrayForm(b)),g.call(this,b,c)}}}(c),function(a,b,c){function d(a){var c=b.timeline;c.currentTime=a,c._discardAnimations(),0==c._animations.length?f=!1:requestAnimationFrame(d)}var e=window.requestAnimationFrame;window.requestAnimationFrame=function(a){return e(function(c){b.timeline._updateAnimationsPromises(),a(c),b.timeline._updateAnimationsPromises()})},b.AnimationTimeline=function(){this._animations=[],this.currentTime=void 0},b.AnimationTimeline.prototype={getAnimations:function(){return this._discardAnimations(),this._animations.slice()},_updateAnimationsPromises:function(){b.animationsWithPromises=b.animationsWithPromises.filter(function(a){return a._updatePromises()})},_discardAnimations:function(){this._updateAnimationsPromises(),this._animations=this._animations.filter(function(a){return"finished"!=a.playState&&"idle"!=a.playState})},_play:function(a){var c=new b.Animation(a,this);return this._animations.push(c),b.restartWebAnimationsNextTick(),c._updatePromises(),c._animation.play(),c._updatePromises(),c},play:function(a){return a&&a.remove(),this._play(a)}};var f=!1;b.restartWebAnimationsNextTick=function(){f||(f=!0,requestAnimationFrame(d))};var g=new b.AnimationTimeline;b.timeline=g;try{Object.defineProperty(window.document,"timeline",{configurable:!0,get:function(){return g}})}catch(a){}try{window.document.timeline=g}catch(a){}}(0,e),function(a,b,c){b.animationsWithPromises=[],b.Animation=function(b,c){if(this.id="",b&&b._id&&(this.id=b._id),this.effect=b,b&&(b._animation=this),!c)throw new Error("Animation with null timeline is not supported");this._timeline=c,this._sequenceNumber=a.sequenceNumber++,this._holdTime=0,this._paused=!1,this._isGroup=!1,this._animation=null,this._childAnimations=[],this._callback=null,this._oldPlayState="idle",this._rebuildUnderlyingAnimation(),this._animation.cancel(),this._updatePromises()},b.Animation.prototype={_updatePromises:function(){var a=this._oldPlayState,b=this.playState;return this._readyPromise&&b!==a&&("idle"==b?(this._rejectReadyPromise(),this._readyPromise=void 0):"pending"==a?this._resolveReadyPromise():"pending"==b&&(this._readyPromise=void 0)),this._finishedPromise&&b!==a&&("idle"==b?(this._rejectFinishedPromise(),this._finishedPromise=void 0):"finished"==b?this._resolveFinishedPromise():"finished"==a&&(this._finishedPromise=void 0)),this._oldPlayState=this.playState,this._readyPromise||this._finishedPromise},_rebuildUnderlyingAnimation:function(){this._updatePromises();var a,c,d,e,f=!!this._animation;f&&(a=this.playbackRate,c=this._paused,d=this.startTime,e=this.currentTime,this._animation.cancel(),this._animation._wrapper=null,this._animation=null),(!this.effect||this.effect instanceof window.KeyframeEffect)&&(this._animation=b.newUnderlyingAnimationForKeyframeEffect(this.effect),b.bindAnimationForKeyframeEffect(this)),(this.effect instanceof window.SequenceEffect||this.effect instanceof window.GroupEffect)&&(this._animation=b.newUnderlyingAnimationForGroup(this.effect),b.bindAnimationForGroup(this)),this.effect&&this.effect._onsample&&b.bindAnimationForCustomEffect(this),f&&(1!=a&&(this.playbackRate=a),null!==d?this.startTime=d:null!==e?this.currentTime=e:null!==this._holdTime&&(this.currentTime=this._holdTime),c&&this.pause()),this._updatePromises()},_updateChildren:function(){if(this.effect&&"idle"!=this.playState){var a=this.effect._timing.delay;this._childAnimations.forEach(function(c){this._arrangeChildren(c,a),this.effect instanceof window.SequenceEffect&&(a+=b.groupChildDuration(c.effect))}.bind(this))}},_setExternalAnimation:function(a){if(this.effect&&this._isGroup)for(var b=0;b1||c<0||c>1?x:function(e){function f(a,b,c){return 3*a*(1-c)*(1-c)*c+3*b*(1-c)*c*c+c*c*c}if(e<=0){var g=0;return a>0?g=b/a:!b&&c>0&&(g=d/c),g*e}if(e>=1){var h=0;return c<1?h=(d-1)/(c-1):1==c&&a<1&&(h=(b-1)/(a-1)),1+h*(e-1)}for(var i=0,j=1;i=1)return 1;var d=1/a;return(c+=b*d)-c%d}}function k(a){C||(C=document.createElement("div").style),C.animationTimingFunction="",C.animationTimingFunction=a;var b=C.animationTimingFunction;if(""==b&&e())throw new TypeError(a+" is not a valid value for easing");return b}function l(a){if("linear"==a)return x;var b=E.exec(a);if(b)return i.apply(this,b.slice(1).map(Number));var c=F.exec(a);return c?j(Number(c[1]),{start:y,middle:z,end:A}[c[2]]):B[a]||x}function m(a){return Math.abs(n(a)/a.playbackRate)}function n(a){return 0===a.duration||0===a.iterations?0:a.duration*a.iterations}function o(a,b,c){if(null==b)return G;var d=c.delay+a+c.endDelay;return b=Math.min(c.delay+a,d)?I:J}function p(a,b,c,d,e){switch(d){case H:return"backwards"==b||"both"==b?0:null;case J:return c-e;case I:return"forwards"==b||"both"==b?a:null;case G:return null}}function q(a,b,c,d,e){var f=e;return 0===a?b!==H&&(f+=c):f+=d/a,f}function r(a,b,c,d,e,f){var g=a===1/0?b%1:a%1;return 0!==g||c!==I||0===d||0===e&&0!==f||(g=1),g}function s(a,b,c,d){return a===I&&b===1/0?1/0:1===c?Math.floor(d)-1:Math.floor(d)}function t(a,b,c){var d=a;if("normal"!==a&&"reverse"!==a){var e=b;"alternate-reverse"===a&&(e+=1),d="normal",e!==1/0&&e%2!=0&&(d="reverse")}return"normal"===d?c:1-c}function u(a,b,c){var d=o(a,b,c),e=p(a,c.fill,b,d,c.delay);if(null===e)return null;var f=q(c.duration,d,c.iterations,e,c.iterationStart),g=r(f,c.iterationStart,d,c.iterations,e,c.duration),h=s(d,c.iterations,g,f),i=t(c.direction,h,g);return c._easingFunction(i)}var v="backwards|forwards|both|none".split("|"),w="reverse|alternate|alternate-reverse".split("|"),x=function(a){return a};d.prototype={_setMember:function(b,c){this["_"+b]=c,this._effect&&(this._effect._timingInput[b]=c,this._effect._timing=a.normalizeTimingInput(this._effect._timingInput),this._effect.activeDuration=a.calculateActiveDuration(this._effect._timing),this._effect._animation&&this._effect._animation._rebuildUnderlyingAnimation())},get playbackRate(){return this._playbackRate},set delay(a){this._setMember("delay",a)},get delay(){return this._delay},set endDelay(a){this._setMember("endDelay",a)},get endDelay(){return this._endDelay},set fill(a){this._setMember("fill",a)},get fill(){return this._fill},set iterationStart(a){if((isNaN(a)||a<0)&&e())throw new TypeError("iterationStart must be a non-negative number, received: "+timing.iterationStart);this._setMember("iterationStart",a)},get iterationStart(){return this._iterationStart},set duration(a){if("auto"!=a&&(isNaN(a)||a<0)&&e())throw new TypeError("duration must be non-negative or auto, received: "+a);this._setMember("duration",a)},get duration(){return this._duration},set direction(a){this._setMember("direction",a)},get direction(){return this._direction},set easing(a){this._easingFunction=l(k(a)),this._setMember("easing",a)},get easing(){return this._easing},set iterations(a){if((isNaN(a)||a<0)&&e())throw new TypeError("iterations must be non-negative, received: "+a);this._setMember("iterations",a)},get iterations(){return this._iterations}};var y=1,z=.5,A=0,B={ease:i(.25,.1,.25,1),"ease-in":i(.42,0,1,1),"ease-out":i(0,0,.58,1),"ease-in-out":i(.42,0,.58,1),"step-start":j(1,y),"step-middle":j(1,z),"step-end":j(1,A)},C=null,D="\\s*(-?\\d+\\.?\\d*|-?\\.\\d+)\\s*",E=new RegExp("cubic-bezier\\("+D+","+D+","+D+","+D+"\\)"),F=/steps\(\s*(\d+)\s*,\s*(start|middle|end)\s*\)/,G=0,H=1,I=2,J=3;a.cloneTimingInput=c,a.makeTiming=f,a.numericTimingToObject=g,a.normalizeTimingInput=h,a.calculateActiveDuration=m,a.calculateIterationProgress=u,a.calculatePhase=o,a.normalizeEasing=k,a.parseEasingFunction=l}(c),function(a,b){function c(a,b){return a in k?k[a][b]||b:b}function d(a){return"display"===a||0===a.lastIndexOf("animation",0)||0===a.lastIndexOf("transition",0)}function e(a,b,e){if(!d(a)){var f=h[a];if(f){i.style[a]=b;for(var g in f){var j=f[g],k=i.style[j];e[j]=c(j,k)}}else e[a]=c(a,b)}}function f(a){var b=[];for(var c in a)if(!(c in["easing","offset","composite"])){var d=a[c];Array.isArray(d)||(d=[d]);for(var e,f=d.length,g=0;g1&&null==d[0].offset&&(d[0].offset=0);for(var b=0,c=d[0].offset,e=1;e1)throw new TypeError("Keyframe offsets must be between 0 and 1.")}}else if("composite"==d){if("add"==f||"accumulate"==f)throw{type:DOMException.NOT_SUPPORTED_ERR,name:"NotSupportedError",message:"add compositing is not supported"};if("replace"!=f)throw new TypeError("Invalid composite mode "+f+".")}else f="easing"==d?a.normalizeEasing(f):""+f;e(d,f,c)}return void 0==c.offset&&(c.offset=null),void 0==c.easing&&(c.easing="linear"),c}),g=!0,h=-1/0,i=0;i=0&&a.offset<=1}),g||c(),d}var h={background:["backgroundImage","backgroundPosition","backgroundSize","backgroundRepeat","backgroundAttachment","backgroundOrigin","backgroundClip","backgroundColor"],border:["borderTopColor","borderTopStyle","borderTopWidth","borderRightColor","borderRightStyle","borderRightWidth","borderBottomColor","borderBottomStyle","borderBottomWidth","borderLeftColor","borderLeftStyle","borderLeftWidth"],borderBottom:["borderBottomWidth","borderBottomStyle","borderBottomColor"],borderColor:["borderTopColor","borderRightColor","borderBottomColor","borderLeftColor"],borderLeft:["borderLeftWidth","borderLeftStyle","borderLeftColor"],borderRadius:["borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius"],borderRight:["borderRightWidth","borderRightStyle","borderRightColor"],borderTop:["borderTopWidth","borderTopStyle","borderTopColor"],borderWidth:["borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth"],flex:["flexGrow","flexShrink","flexBasis"],font:["fontFamily","fontSize","fontStyle","fontVariant","fontWeight","lineHeight"],margin:["marginTop","marginRight","marginBottom","marginLeft"],outline:["outlineColor","outlineStyle","outlineWidth"],padding:["paddingTop","paddingRight","paddingBottom","paddingLeft"]},i=document.createElementNS("http://www.w3.org/1999/xhtml","div"),j={thin:"1px",medium:"3px",thick:"5px"},k={borderBottomWidth:j,borderLeftWidth:j,borderRightWidth:j,borderTopWidth:j,fontSize:{"xx-small":"60%","x-small":"75%",small:"89%",medium:"100%",large:"120%","x-large":"150%","xx-large":"200%"},fontWeight:{normal:"400",bold:"700"},outlineWidth:j,textShadow:{none:"0px 0px 0px transparent"},boxShadow:{none:"0px 0px 0px 0px transparent"}};a.convertToArrayForm=f,a.normalizeKeyframes=g}(c),function(a){var b={};a.isDeprecated=function(a,c,d,e){var f=e?"are":"is",g=new Date,h=new Date(c);return h.setMonth(h.getMonth()+3),!(g=a.applyFrom&&c0?this._totalDuration:0),this._ensureAlive())},get currentTime(){return this._idle||this._currentTimePending?null:this._currentTime},set currentTime(a){a=+a,isNaN(a)||(b.restart(),this._paused||null==this._startTime||(this._startTime=this._timeline.currentTime-a/this._playbackRate),this._currentTimePending=!1,this._currentTime!=a&&(this._idle&&(this._idle=!1,this._paused=!0),this._tickCurrentTime(a,!0),b.applyDirtiedAnimation(this)))},get startTime(){return this._startTime},set startTime(a){a=+a,isNaN(a)||this._paused||this._idle||(this._startTime=a,this._tickCurrentTime((this._timeline.currentTime-this._startTime)*this.playbackRate),b.applyDirtiedAnimation(this))},get playbackRate(){return this._playbackRate},set playbackRate(a){if(a!=this._playbackRate){var c=this.currentTime;this._playbackRate=a,this._startTime=null,"paused"!=this.playState&&"idle"!=this.playState&&(this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),b.applyDirtiedAnimation(this)),null!=c&&(this.currentTime=c)}},get _isFinished(){return!this._idle&&(this._playbackRate>0&&this._currentTime>=this._totalDuration||this._playbackRate<0&&this._currentTime<=0)},get _totalDuration(){return this._effect._totalDuration},get playState(){return this._idle?"idle":null==this._startTime&&!this._paused&&0!=this.playbackRate||this._currentTimePending?"pending":this._paused?"paused":this._isFinished?"finished":"running"},_rewind:function(){if(this._playbackRate>=0)this._currentTime=0;else{if(!(this._totalDuration<1/0))throw new DOMException("Unable to rewind negative playback rate animation with infinite duration","InvalidStateError");this._currentTime=this._totalDuration}},play:function(){this._paused=!1,(this._isFinished||this._idle)&&(this._rewind(),this._startTime=null),this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),b.applyDirtiedAnimation(this)},pause:function(){this._isFinished||this._paused||this._idle?this._idle&&(this._rewind(),this._idle=!1):this._currentTimePending=!0,this._startTime=null,this._paused=!0},finish:function(){this._idle||(this.currentTime=this._playbackRate>0?this._totalDuration:0,this._startTime=this._totalDuration-this.currentTime,this._currentTimePending=!1,b.applyDirtiedAnimation(this))},cancel:function(){this._inEffect&&(this._inEffect=!1,this._idle=!0,this._paused=!1,this._isFinished=!0,this._finishedFlag=!0,this._currentTime=0,this._startTime=null,this._effect._update(null),b.applyDirtiedAnimation(this))},reverse:function(){this.playbackRate*=-1,this.play()},addEventListener:function(a,b){"function"==typeof b&&"finish"==a&&this._finishHandlers.push(b)},removeEventListener:function(a,b){if("finish"==a){var c=this._finishHandlers.indexOf(b);c>=0&&this._finishHandlers.splice(c,1)}},_fireEvents:function(a){if(this._isFinished){if(!this._finishedFlag){var b=new d(this,this._currentTime,a),c=this._finishHandlers.concat(this.onfinish?[this.onfinish]:[]);setTimeout(function(){c.forEach(function(a){a.call(b.target,b)})},0),this._finishedFlag=!0}}else this._finishedFlag=!1},_tick:function(a,b){this._idle||this._paused||(null==this._startTime?b&&(this.startTime=a-this._currentTime/this.playbackRate):this._isFinished||this._tickCurrentTime((a-this._startTime)*this.playbackRate)),b&&(this._currentTimePending=!1,this._fireEvents(a))},get _needsTick(){return this.playState in{pending:1,running:1}||!this._finishedFlag},_targetAnimations:function(){var a=this._effect._target;return a._activeAnimations||(a._activeAnimations=[]),a._activeAnimations},_markTarget:function(){var a=this._targetAnimations();-1===a.indexOf(this)&&a.push(this)},_unmarkTarget:function(){var a=this._targetAnimations(),b=a.indexOf(this);-1!==b&&a.splice(b,1)}}}(c,d),function(a,b,c){function d(a){var b=j;j=[],ad?c%=d:d%=c;return c=a*b/(c+d)}function g(a){return function(b){var c=a(b);return c&&(c[0]=void 0),c}}function h(a,b){return function(c){return a(c)||[b,c]}}function i(b,c){for(var d=[],e=0;e=1?b:"visible"}]}a.addPropertiesHandler(String,c,["visibility"])}(d),function(a,b){function c(a){a=a.trim(),f.fillStyle="#000",f.fillStyle=a;var b=f.fillStyle;if(f.fillStyle="#fff",f.fillStyle=a,b==f.fillStyle){f.fillRect(0,0,1,1);var c=f.getImageData(0,0,1,1).data;f.clearRect(0,0,1,1);var d=c[3]/255;return[c[0]*d,c[1]*d,c[2]*d,d]}}function d(b,c){return[b,c,function(b){function c(a){return Math.max(0,Math.min(255,a))}if(b[3])for(var d=0;d<3;d++)b[d]=Math.round(c(b[d]/b[3]));return b[3]=a.numberToString(a.clamp(0,1,b[3])),"rgba("+b.join(",")+")"}]}var e=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");e.width=e.height=1;var f=e.getContext("2d");a.addPropertiesHandler(c,d,["background-color","border-bottom-color","border-left-color","border-right-color","border-top-color","color","fill","flood-color","lighting-color","outline-color","stop-color","stroke","text-decoration-color"]),a.consumeColor=a.consumeParenthesised.bind(null,c),a.mergeColors=d}(d),function(a,b){function c(a){function b(){var b=h.exec(a);g=b?b[0]:void 0}function c(){var a=Number(g);return b(),a}function d(){if("("!==g)return c();b();var a=f();return")"!==g?NaN:(b(),a)}function e(){for(var a=d();"*"===g||"/"===g;){var c=g;b();var e=d();"*"===c?a*=e:a/=e}return a}function f(){for(var a=e();"+"===g||"-"===g;){var c=g;b();var d=e();"+"===c?a+=d:a-=d}return a}var g,h=/([\+\-\w\.]+|[\(\)\*\/])/g;return b(),f()}function d(a,b){if("0"==(b=b.trim().toLowerCase())&&"px".search(a)>=0)return{px:0};if(/^[^(]*$|^calc/.test(b)){b=b.replace(/calc\(/g,"(");var d={};b=b.replace(a,function(a){return d[a]=null,"U"+a});for(var e="U("+a.source+")",f=b.replace(/[-+]?(\d*\.)?\d+([Ee][-+]?\d+)?/g,"N").replace(new RegExp("N"+e,"g"),"D").replace(/\s[+-]\s/g,"O").replace(/\s/g,""),g=[/N\*(D)/g,/(N|D)[*\/]N/g,/(N|D)O\1/g,/\((N|D)\)/g],h=0;h1?"calc("+c+")":c}]}var g="px|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc",h=d.bind(null,new RegExp(g,"g")),i=d.bind(null,new RegExp(g+"|%","g")),j=d.bind(null,/deg|rad|grad|turn/g);a.parseLength=h,a.parseLengthOrPercent=i,a.consumeLengthOrPercent=a.consumeParenthesised.bind(null,i),a.parseAngle=j,a.mergeDimensions=f;var k=a.consumeParenthesised.bind(null,h),l=a.consumeRepeated.bind(void 0,k,/^/),m=a.consumeRepeated.bind(void 0,l,/^,/);a.consumeSizePairList=m;var n=function(a){var b=m(a);if(b&&""==b[1])return b[0]},o=a.mergeNestedRepeated.bind(void 0,e," "),p=a.mergeNestedRepeated.bind(void 0,o,",");a.mergeNonNegativeSizePair=o,a.addPropertiesHandler(n,p,["background-size"]),a.addPropertiesHandler(i,e,["border-bottom-width","border-image-width","border-left-width","border-right-width","border-top-width","flex-basis","font-size","height","line-height","max-height","max-width","outline-width","width"]),a.addPropertiesHandler(i,f,["border-bottom-left-radius","border-bottom-right-radius","border-top-left-radius","border-top-right-radius","bottom","left","letter-spacing","margin-bottom","margin-left","margin-right","margin-top","min-height","min-width","outline-offset","padding-bottom","padding-left","padding-right","padding-top","perspective","right","shape-margin","stroke-dashoffset","text-indent","top","vertical-align","word-spacing"])}(d),function(a,b){function c(b){return a.consumeLengthOrPercent(b)||a.consumeToken(/^auto/,b)}function d(b){var d=a.consumeList([a.ignore(a.consumeToken.bind(null,/^rect/)),a.ignore(a.consumeToken.bind(null,/^\(/)),a.consumeRepeated.bind(null,c,/^,/),a.ignore(a.consumeToken.bind(null,/^\)/))],b);if(d&&4==d[0].length)return d[0]}function e(b,c){return"auto"==b||"auto"==c?[!0,!1,function(d){var e=d?b:c;if("auto"==e)return"auto";var f=a.mergeDimensions(e,e);return f[2](f[0])}]:a.mergeDimensions(b,c)}function f(a){return"rect("+a+")"}var g=a.mergeWrappedNestedRepeated.bind(null,f,e,", ");a.parseBox=d,a.mergeBoxes=g,a.addPropertiesHandler(d,g,["clip"])}(d),function(a,b){function c(a){return function(b){var c=0;return a.map(function(a){return a===k?b[c++]:a})}}function d(a){return a}function e(b){if("none"==(b=b.toLowerCase().trim()))return[];for(var c,d=/\s*(\w+)\(([^)]*)\)/g,e=[],f=0;c=d.exec(b);){if(c.index!=f)return;f=c.index+c[0].length;var g=c[1],h=n[g];if(!h)return;var i=c[2].split(","),j=h[0];if(j.length=0&&this._cancelHandlers.splice(c,1)}else i.call(this,a,b)},f}}}(),function(a){var b=document.documentElement,c=null,d=!1;try{var e=getComputedStyle(b).getPropertyValue("opacity"),f="0"==e?"1":"0";c=b.animate({opacity:[f,f]},{duration:1}),c.currentTime=0,d=getComputedStyle(b).getPropertyValue("opacity")==f}catch(a){}finally{c&&c.cancel()}if(!d){var g=window.Element.prototype.animate;window.Element.prototype.animate=function(b,c){return window.Symbol&&Symbol.iterator&&Array.prototype.from&&b[Symbol.iterator]&&(b=Array.from(b)),Array.isArray(b)||null===b||(b=a.convertToArrayForm(b)),g.call(this,b,c)}}}(c),function(a,b,c){function d(a){var c=b.timeline;c.currentTime=a,c._discardAnimations(),0==c._animations.length?f=!1:requestAnimationFrame(d)}var e=window.requestAnimationFrame;window.requestAnimationFrame=function(a){return e(function(c){b.timeline._updateAnimationsPromises(),a(c),b.timeline._updateAnimationsPromises()})},b.AnimationTimeline=function(){this._animations=[],this.currentTime=void 0},b.AnimationTimeline.prototype={getAnimations:function(){return this._discardAnimations(),this._animations.slice()},_updateAnimationsPromises:function(){b.animationsWithPromises=b.animationsWithPromises.filter(function(a){return a._updatePromises()})},_discardAnimations:function(){this._updateAnimationsPromises(),this._animations=this._animations.filter(function(a){return"finished"!=a.playState&&"idle"!=a.playState})},_play:function(a){var c=new b.Animation(a,this);return this._animations.push(c),b.restartWebAnimationsNextTick(),c._updatePromises(),c._animation.play(),c._updatePromises(),c},play:function(a){return a&&a.remove(),this._play(a)}};var f=!1;b.restartWebAnimationsNextTick=function(){f||(f=!0,requestAnimationFrame(d))};var g=new b.AnimationTimeline;b.timeline=g;try{Object.defineProperty(window.document,"timeline",{configurable:!0,get:function(){return g}})}catch(a){}try{window.document.timeline=g}catch(a){}}(0,e),function(a,b,c){b.animationsWithPromises=[],b.Animation=function(b,c){if(this.id="",b&&b._id&&(this.id=b._id),this.effect=b,b&&(b._animation=this),!c)throw new Error("Animation with null timeline is not supported");this._timeline=c,this._sequenceNumber=a.sequenceNumber++,this._holdTime=0,this._paused=!1,this._isGroup=!1,this._animation=null,this._childAnimations=[],this._callback=null,this._oldPlayState="idle",this._rebuildUnderlyingAnimation(),this._animation.cancel(),this._updatePromises()},b.Animation.prototype={_updatePromises:function(){var a=this._oldPlayState,b=this.playState;return this._readyPromise&&b!==a&&("idle"==b?(this._rejectReadyPromise(),this._readyPromise=void 0):"pending"==a?this._resolveReadyPromise():"pending"==b&&(this._readyPromise=void 0)),this._finishedPromise&&b!==a&&("idle"==b?(this._rejectFinishedPromise(),this._finishedPromise=void 0):"finished"==b?this._resolveFinishedPromise():"finished"==a&&(this._finishedPromise=void 0)),this._oldPlayState=this.playState,this._readyPromise||this._finishedPromise},_rebuildUnderlyingAnimation:function(){this._updatePromises();var a,c,d,e,f=!!this._animation;f&&(a=this.playbackRate,c=this._paused,d=this.startTime,e=this.currentTime,this._animation.cancel(),this._animation._wrapper=null,this._animation=null),(!this.effect||this.effect instanceof window.KeyframeEffect)&&(this._animation=b.newUnderlyingAnimationForKeyframeEffect(this.effect),b.bindAnimationForKeyframeEffect(this)),(this.effect instanceof window.SequenceEffect||this.effect instanceof window.GroupEffect)&&(this._animation=b.newUnderlyingAnimationForGroup(this.effect),b.bindAnimationForGroup(this)),this.effect&&this.effect._onsample&&b.bindAnimationForCustomEffect(this),f&&(1!=a&&(this.playbackRate=a),null!==d?this.startTime=d:null!==e?this.currentTime=e:null!==this._holdTime&&(this.currentTime=this._holdTime),c&&this.pause()),this._updatePromises()},_updateChildren:function(){if(this.effect&&"idle"!=this.playState){var a=this.effect._timing.delay;this._childAnimations.forEach(function(c){this._arrangeChildren(c,a),this.effect instanceof window.SequenceEffect&&(a+=b.groupChildDuration(c.effect))}.bind(this))}},_setExternalAnimation:function(a){if(this.effect&&this._isGroup)for(var b=0;b1||c<0||c>1?x:function(e){function f(a,b,c){return 3*a*(1-c)*(1-c)*c+3*b*(1-c)*c*c+c*c*c}if(e<=0){var g=0;return a>0?g=b/a:!b&&c>0&&(g=d/c),g*e}if(e>=1){var h=0;return c<1?h=(d-1)/(c-1):1==c&&a<1&&(h=(b-1)/(a-1)),1+h*(e-1)}for(var i=0,j=1;i=1)return 1;var d=1/a;return(c+=b*d)-c%d}}function k(a){C||(C=document.createElement("div").style),C.animationTimingFunction="",C.animationTimingFunction=a;var b=C.animationTimingFunction;if(""==b&&e())throw new TypeError(a+" is not a valid value for easing");return b}function l(a){if("linear"==a)return x;var b=E.exec(a);if(b)return i.apply(this,b.slice(1).map(Number));var c=F.exec(a);return c?j(Number(c[1]),{start:y,middle:z,end:A}[c[2]]):B[a]||x}function m(a){return Math.abs(n(a)/a.playbackRate)}function n(a){return 0===a.duration||0===a.iterations?0:a.duration*a.iterations}function o(a,b,c){if(null==b)return G;var d=c.delay+a+c.endDelay;return b=Math.min(c.delay+a,d)?I:J}function p(a,b,c,d,e){switch(d){case H:return"backwards"==b||"both"==b?0:null;case J:return c-e;case I:return"forwards"==b||"both"==b?a:null;case G:return null}}function q(a,b,c,d,e){var f=e;return 0===a?b!==H&&(f+=c):f+=d/a,f}function r(a,b,c,d,e,f){var g=a===1/0?b%1:a%1;return 0!==g||c!==I||0===d||0===e&&0!==f||(g=1),g}function s(a,b,c,d){return a===I&&b===1/0?1/0:1===c?Math.floor(d)-1:Math.floor(d)}function t(a,b,c){var d=a;if("normal"!==a&&"reverse"!==a){var e=b;"alternate-reverse"===a&&(e+=1),d="normal",e!==1/0&&e%2!=0&&(d="reverse")}return"normal"===d?c:1-c}function u(a,b,c){var d=o(a,b,c),e=p(a,c.fill,b,d,c.delay);if(null===e)return null;var f=q(c.duration,d,c.iterations,e,c.iterationStart),g=r(f,c.iterationStart,d,c.iterations,e,c.duration),h=s(d,c.iterations,g,f),i=t(c.direction,h,g);return c._easingFunction(i)}var v="backwards|forwards|both|none".split("|"),w="reverse|alternate|alternate-reverse".split("|"),x=function(a){return a};d.prototype={_setMember:function(b,c){this["_"+b]=c,this._effect&&(this._effect._timingInput[b]=c,this._effect._timing=a.normalizeTimingInput(this._effect._timingInput),this._effect.activeDuration=a.calculateActiveDuration(this._effect._timing),this._effect._animation&&this._effect._animation._rebuildUnderlyingAnimation())},get playbackRate(){return this._playbackRate},set delay(a){this._setMember("delay",a)},get delay(){return this._delay},set endDelay(a){this._setMember("endDelay",a)},get endDelay(){return this._endDelay},set fill(a){this._setMember("fill",a)},get fill(){return this._fill},set iterationStart(a){if((isNaN(a)||a<0)&&e())throw new TypeError("iterationStart must be a non-negative number, received: "+timing.iterationStart);this._setMember("iterationStart",a)},get iterationStart(){return this._iterationStart},set duration(a){if("auto"!=a&&(isNaN(a)||a<0)&&e())throw new TypeError("duration must be non-negative or auto, received: "+a);this._setMember("duration",a)},get duration(){return this._duration},set direction(a){this._setMember("direction",a)},get direction(){return this._direction},set easing(a){this._easingFunction=l(k(a)),this._setMember("easing",a)},get easing(){return this._easing},set iterations(a){if((isNaN(a)||a<0)&&e())throw new TypeError("iterations must be non-negative, received: "+a);this._setMember("iterations",a)},get iterations(){return this._iterations}};var y=1,z=.5,A=0,B={ease:i(.25,.1,.25,1),"ease-in":i(.42,0,1,1),"ease-out":i(0,0,.58,1),"ease-in-out":i(.42,0,.58,1),"step-start":j(1,y),"step-middle":j(1,z),"step-end":j(1,A)},C=null,D="\\s*(-?\\d+\\.?\\d*|-?\\.\\d+)\\s*",E=new RegExp("cubic-bezier\\("+D+","+D+","+D+","+D+"\\)"),F=/steps\(\s*(\d+)\s*,\s*(start|middle|end)\s*\)/,G=0,H=1,I=2,J=3;a.cloneTimingInput=c,a.makeTiming=f,a.numericTimingToObject=g,a.normalizeTimingInput=h,a.calculateActiveDuration=m,a.calculateIterationProgress=u,a.calculatePhase=o,a.normalizeEasing=k,a.parseEasingFunction=l}(c),function(a,b){function c(a,b){return a in k?k[a][b]||b:b}function d(a){return"display"===a||0===a.lastIndexOf("animation",0)||0===a.lastIndexOf("transition",0)}function e(a,b,e){if(!d(a)){var f=h[a];if(f){i.style[a]=b;for(var g in f){var j=f[g],k=i.style[j];e[j]=c(j,k)}}else e[a]=c(a,b)}}function f(a){var b=[];for(var c in a)if(!(c in["easing","offset","composite"])){var d=a[c];Array.isArray(d)||(d=[d]);for(var e,f=d.length,g=0;g1&&null==d[0].offset&&(d[0].offset=0);for(var b=0,c=d[0].offset,e=1;e1)throw new TypeError("Keyframe offsets must be between 0 and 1.")}}else if("composite"==d){if("add"==f||"accumulate"==f)throw{type:DOMException.NOT_SUPPORTED_ERR,name:"NotSupportedError",message:"add compositing is not supported"};if("replace"!=f)throw new TypeError("Invalid composite mode "+f+".")}else f="easing"==d?a.normalizeEasing(f):""+f;e(d,f,c)}return void 0==c.offset&&(c.offset=null),void 0==c.easing&&(c.easing="linear"),c}),g=!0,h=-1/0,i=0;i=0&&a.offset<=1}),g||c(),d}var h={background:["backgroundImage","backgroundPosition","backgroundSize","backgroundRepeat","backgroundAttachment","backgroundOrigin","backgroundClip","backgroundColor"],border:["borderTopColor","borderTopStyle","borderTopWidth","borderRightColor","borderRightStyle","borderRightWidth","borderBottomColor","borderBottomStyle","borderBottomWidth","borderLeftColor","borderLeftStyle","borderLeftWidth"],borderBottom:["borderBottomWidth","borderBottomStyle","borderBottomColor"],borderColor:["borderTopColor","borderRightColor","borderBottomColor","borderLeftColor"],borderLeft:["borderLeftWidth","borderLeftStyle","borderLeftColor"],borderRadius:["borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius"],borderRight:["borderRightWidth","borderRightStyle","borderRightColor"],borderTop:["borderTopWidth","borderTopStyle","borderTopColor"],borderWidth:["borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth"],flex:["flexGrow","flexShrink","flexBasis"],font:["fontFamily","fontSize","fontStyle","fontVariant","fontWeight","lineHeight"],margin:["marginTop","marginRight","marginBottom","marginLeft"],outline:["outlineColor","outlineStyle","outlineWidth"],padding:["paddingTop","paddingRight","paddingBottom","paddingLeft"]},i=document.createElementNS("http://www.w3.org/1999/xhtml","div"),j={thin:"1px",medium:"3px",thick:"5px"},k={borderBottomWidth:j,borderLeftWidth:j,borderRightWidth:j,borderTopWidth:j,fontSize:{"xx-small":"60%","x-small":"75%",small:"89%",medium:"100%",large:"120%","x-large":"150%","xx-large":"200%"},fontWeight:{normal:"400",bold:"700"},outlineWidth:j,textShadow:{none:"0px 0px 0px transparent"},boxShadow:{none:"0px 0px 0px 0px transparent"}};a.convertToArrayForm=f,a.normalizeKeyframes=g}(c),function(a){var b={};a.isDeprecated=function(a,c,d,e){var f=e?"are":"is",g=new Date,h=new Date(c);return h.setMonth(h.getMonth()+3),!(g=a.applyFrom&&cthis._surrogateStyle.length;)this._length--,Object.defineProperty(this,this._length,{configurable:!0,enumerable:!1,value:void 0})},_set:function(a,b){this._style[a]=b,this._isAnimatedProperty[a]=!0},_clear:function(a){this._style[a]=this._surrogateStyle[a],delete this._isAnimatedProperty[a]}};for(var i in g)d.prototype[i]=function(a,b){return function(){var c=this._surrogateStyle[a].apply(this._surrogateStyle,arguments);return b&&(this._isAnimatedProperty[arguments[0]]||this._style[a].apply(this._style,arguments),this._updateIndices()),c}}(i,i in h);for(var j in document.documentElement.style)j in f||j in g||function(a){c(d.prototype,a,{get:function(){return this._surrogateStyle[a]},set:function(b){this._surrogateStyle[a]=b,this._updateIndices(),this._isAnimatedProperty[a]||(this._style[a]=b)}})}(j);a.apply=function(b,c,d){e(b),b.style._set(a.propertyName(c),d)},a.clear=function(b,c){b._webAnimationsPatchedStyle&&b.style._clear(a.propertyName(c))}}(d),function(a){window.Element.prototype.animate=function(b,c){var d="";return c&&c.id&&(d=c.id),a.timeline._play(a.KeyframeEffect(this,b,c,d))}}(d),function(a,b){function c(a,b,d){if("number"==typeof a&&"number"==typeof b)return a*(1-d)+b*d;if("boolean"==typeof a&&"boolean"==typeof b)return d<.5?a:b;if(a.length==b.length){for(var e=[],f=0;f0?this._totalDuration:0),this._ensureAlive())},get currentTime(){return this._idle||this._currentTimePending?null:this._currentTime},set currentTime(a){a=+a,isNaN(a)||(b.restart(),this._paused||null==this._startTime||(this._startTime=this._timeline.currentTime-a/this._playbackRate),this._currentTimePending=!1,this._currentTime!=a&&(this._idle&&(this._idle=!1,this._paused=!0),this._tickCurrentTime(a,!0),b.applyDirtiedAnimation(this)))},get startTime(){return this._startTime},set startTime(a){a=+a,isNaN(a)||this._paused||this._idle||(this._startTime=a,this._tickCurrentTime((this._timeline.currentTime-this._startTime)*this.playbackRate),b.applyDirtiedAnimation(this))},get playbackRate(){return this._playbackRate},set playbackRate(a){if(a!=this._playbackRate){var c=this.currentTime;this._playbackRate=a,this._startTime=null,"paused"!=this.playState&&"idle"!=this.playState&&(this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),b.applyDirtiedAnimation(this)),null!=c&&(this.currentTime=c)}},get _isFinished(){return!this._idle&&(this._playbackRate>0&&this._currentTime>=this._totalDuration||this._playbackRate<0&&this._currentTime<=0)},get _totalDuration(){return this._effect._totalDuration},get playState(){return this._idle?"idle":null==this._startTime&&!this._paused&&0!=this.playbackRate||this._currentTimePending?"pending":this._paused?"paused":this._isFinished?"finished":"running"},_rewind:function(){if(this._playbackRate>=0)this._currentTime=0;else{if(!(this._totalDuration<1/0))throw new DOMException("Unable to rewind negative playback rate animation with infinite duration","InvalidStateError");this._currentTime=this._totalDuration}},play:function(){this._paused=!1,(this._isFinished||this._idle)&&(this._rewind(),this._startTime=null),this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),b.applyDirtiedAnimation(this)},pause:function(){this._isFinished||this._paused||this._idle?this._idle&&(this._rewind(),this._idle=!1):this._currentTimePending=!0,this._startTime=null,this._paused=!0},finish:function(){this._idle||(this.currentTime=this._playbackRate>0?this._totalDuration:0,this._startTime=this._totalDuration-this.currentTime,this._currentTimePending=!1,b.applyDirtiedAnimation(this))},cancel:function(){this._inEffect&&(this._inEffect=!1,this._idle=!0,this._paused=!1,this._isFinished=!0,this._finishedFlag=!0,this._currentTime=0,this._startTime=null,this._effect._update(null),b.applyDirtiedAnimation(this))},reverse:function(){this.playbackRate*=-1,this.play()},addEventListener:function(a,b){"function"==typeof b&&"finish"==a&&this._finishHandlers.push(b)},removeEventListener:function(a,b){if("finish"==a){var c=this._finishHandlers.indexOf(b);c>=0&&this._finishHandlers.splice(c,1)}},_fireEvents:function(a){if(this._isFinished){if(!this._finishedFlag){var b=new d(this,this._currentTime,a),c=this._finishHandlers.concat(this.onfinish?[this.onfinish]:[]);setTimeout(function(){c.forEach(function(a){a.call(b.target,b)})},0),this._finishedFlag=!0}}else this._finishedFlag=!1},_tick:function(a,b){this._idle||this._paused||(null==this._startTime?b&&(this.startTime=a-this._currentTime/this.playbackRate):this._isFinished||this._tickCurrentTime((a-this._startTime)*this.playbackRate)),b&&(this._currentTimePending=!1,this._fireEvents(a))},get _needsTick(){return this.playState in{pending:1,running:1}||!this._finishedFlag},_targetAnimations:function(){var a=this._effect._target;return a._activeAnimations||(a._activeAnimations=[]),a._activeAnimations},_markTarget:function(){var a=this._targetAnimations();-1===a.indexOf(this)&&a.push(this)},_unmarkTarget:function(){var a=this._targetAnimations(),b=a.indexOf(this);-1!==b&&a.splice(b,1)}}}(c,d),function(a,b,c){function d(a){var b=j;j=[],a1e-4?(u=.5/Math.sqrt(w),v=[(q[2][1]-q[1][2])*u,(q[0][2]-q[2][0])*u,(q[1][0]-q[0][1])*u,.25/u]):q[0][0]>q[1][1]&&q[0][0]>q[2][2]?(u=2*Math.sqrt(1+q[0][0]-q[1][1]-q[2][2]),v=[.25*u,(q[0][1]+q[1][0])/u,(q[0][2]+q[2][0])/u,(q[2][1]-q[1][2])/u]):q[1][1]>q[2][2]?(u=2*Math.sqrt(1+q[1][1]-q[0][0]-q[2][2]),v=[(q[0][1]+q[1][0])/u,.25*u,(q[1][2]+q[2][1])/u,(q[0][2]-q[2][0])/u]):(u=2*Math.sqrt(1+q[2][2]-q[0][0]-q[1][1]),v=[(q[0][2]+q[2][0])/u,(q[1][2]+q[2][1])/u,.25*u,(q[1][0]-q[0][1])/u]),[p,r,s,v,n]}return j}();a.dot=c,a.makeMatrixDecomposition=h}(d),function(a){function b(a,b){var c=a.exec(b);if(c)return c=a.ignoreCase?c[0].toLowerCase():c[0],[c,b.substr(c.length)]}function c(a,b){b=b.replace(/^\s*/,"");var c=a(b);if(c)return[c[0],c[1].replace(/^\s*/,"")]}function d(a,d,e){a=c.bind(null,a);for(var f=[];;){var g=a(e);if(!g)return[f,e];if(f.push(g[0]),e=g[1],!(g=b(d,e))||""==g[1])return[f,e];e=g[1]}}function e(a,b){for(var c=0,d=0;dd?c%=d:d%=c;return c=a*b/(c+d)}function g(a){return function(b){var c=a(b);return c&&(c[0]=void 0),c}}function h(a,b){return function(c){return a(c)||[b,c]}}function i(b,c){for(var d=[],e=0;e=1?b:"visible"}]}a.addPropertiesHandler(String,c,["visibility"])}(d),function(a,b){function c(a){a=a.trim(),f.fillStyle="#000",f.fillStyle=a;var b=f.fillStyle;if(f.fillStyle="#fff",f.fillStyle=a,b==f.fillStyle){f.fillRect(0,0,1,1);var c=f.getImageData(0,0,1,1).data;f.clearRect(0,0,1,1);var d=c[3]/255;return[c[0]*d,c[1]*d,c[2]*d,d]}}function d(b,c){return[b,c,function(b){function c(a){return Math.max(0,Math.min(255,a))}if(b[3])for(var d=0;d<3;d++)b[d]=Math.round(c(b[d]/b[3]));return b[3]=a.numberToString(a.clamp(0,1,b[3])),"rgba("+b.join(",")+")"}]}var e=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");e.width=e.height=1;var f=e.getContext("2d");a.addPropertiesHandler(c,d,["background-color","border-bottom-color","border-left-color","border-right-color","border-top-color","color","fill","flood-color","lighting-color","outline-color","stop-color","stroke","text-decoration-color"]),a.consumeColor=a.consumeParenthesised.bind(null,c),a.mergeColors=d}(d),function(a,b){function c(a,b){if("0"==(b=b.trim().toLowerCase())&&"px".search(a)>=0)return{px:0};if(/^[^(]*$|^calc/.test(b)){b=b.replace(/calc\(/g,"(");var c={};b=b.replace(a,function(a){return c[a]=null,"U"+a});for(var d="U("+a.source+")",e=b.replace(/[-+]?(\d*\.)?\d+/g,"N").replace(new RegExp("N"+d,"g"),"D").replace(/\s[+-]\s/g,"O").replace(/\s/g,""),f=[/N\*(D)/g,/(N|D)[*\/]N/g,/(N|D)O\1/g,/\((N|D)\)/g],g=0;g1?"calc("+c+")":c}]}var f="px|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc",g=c.bind(null,new RegExp(f,"g")),h=c.bind(null,new RegExp(f+"|%","g")),i=c.bind(null,/deg|rad|grad|turn/g);a.parseLength=g,a.parseLengthOrPercent=h,a.consumeLengthOrPercent=a.consumeParenthesised.bind(null,h),a.parseAngle=i,a.mergeDimensions=e;var j=a.consumeParenthesised.bind(null,g),k=a.consumeRepeated.bind(void 0,j,/^/),l=a.consumeRepeated.bind(void 0,k,/^,/);a.consumeSizePairList=l;var m=function(a){var b=l(a);if(b&&""==b[1])return b[0]},n=a.mergeNestedRepeated.bind(void 0,d," "),o=a.mergeNestedRepeated.bind(void 0,n,",");a.mergeNonNegativeSizePair=n,a.addPropertiesHandler(m,o,["background-size"]),a.addPropertiesHandler(h,d,["border-bottom-width","border-image-width","border-left-width","border-right-width","border-top-width","flex-basis","font-size","height","line-height","max-height","max-width","outline-width","width"]),a.addPropertiesHandler(h,e,["border-bottom-left-radius","border-bottom-right-radius","border-top-left-radius","border-top-right-radius","bottom","left","letter-spacing","margin-bottom","margin-left","margin-right","margin-top","min-height","min-width","outline-offset","padding-bottom","padding-left","padding-right","padding-top","perspective","right","shape-margin","stroke-dashoffset","text-indent","top","vertical-align","word-spacing"])}(d,f),function(a,b){function c(b){return a.consumeLengthOrPercent(b)||a.consumeToken(/^auto/,b)}function d(b){var d=a.consumeList([a.ignore(a.consumeToken.bind(null,/^rect/)),a.ignore(a.consumeToken.bind(null,/^\(/)),a.consumeRepeated.bind(null,c,/^,/),a.ignore(a.consumeToken.bind(null,/^\)/))],b);if(d&&4==d[0].length)return d[0]}function e(b,c){return"auto"==b||"auto"==c?[!0,!1,function(d){var e=d?b:c;if("auto"==e)return"auto";var f=a.mergeDimensions(e,e);return f[2](f[0])}]:a.mergeDimensions(b,c)}function f(a){return"rect("+a+")"}var g=a.mergeWrappedNestedRepeated.bind(null,f,e,", ");a.parseBox=d,a.mergeBoxes=g,a.addPropertiesHandler(d,g,["clip"])}(d),function(a,b){function c(a){return function(b){var c=0;return a.map(function(a){return a===k?b[c++]:a})}}function d(a){return a}function e(b){if("none"==(b=b.toLowerCase().trim()))return[];for(var c,d=/\s*(\w+)\(([^)]*)\)/g,e=[],f=0;c=d.exec(b);){if(c.index!=f)return;f=c.index+c[0].length;var g=c[1],h=n[g];if(!h)return;var i=c[2].split(","),j=h[0];if(j.length900||b%100!=0))return b}function c(b){return b=100*Math.round(b/100),b=a.clamp(100,900,b),400===b?"normal":700===b?"bold":String(b)}function d(a,b){return[a,b,c]}a.addPropertiesHandler(b,d,["font-weight"])}(d),function(a){function b(a){var b={};for(var c in a)b[c]=-a[c];return b}function c(b){return a.consumeToken(/^(left|center|right|top|bottom)\b/i,b)||a.consumeLengthOrPercent(b)}function d(b,d){var e=a.consumeRepeated(c,/^/,d);if(e&&""==e[1]){var f=e[0];if(f[0]=f[0]||"center",f[1]=f[1]||"center",3==b&&(f[2]=f[2]||{px:0}),f.length==b){if(/top|bottom/.test(f[0])||/left|right/.test(f[1])){var h=f[0];f[0]=f[1],f[1]=h}if(/left|right|center|Object/.test(f[0])&&/top|bottom|center|Object/.test(f[1]))return f.map(function(a){return"object"==typeof a?a:g[a]})}}}function e(d){var e=a.consumeRepeated(c,/^/,d);if(e){for(var f=e[0],h=[{"%":50},{"%":50}],i=0,j=!1,k=0;k=0&&this._cancelHandlers.splice(c,1)}else i.call(this,a,b)},f}}}(),function(a){var b=document.documentElement,c=null,d=!1;try{var e=getComputedStyle(b).getPropertyValue("opacity"),f="0"==e?"1":"0";c=b.animate({opacity:[f,f]},{duration:1}),c.currentTime=0,d=getComputedStyle(b).getPropertyValue("opacity")==f}catch(a){}finally{c&&c.cancel()}if(!d){var g=window.Element.prototype.animate;window.Element.prototype.animate=function(b,c){return window.Symbol&&Symbol.iterator&&Array.prototype.from&&b[Symbol.iterator]&&(b=Array.from(b)),Array.isArray(b)||null===b||(b=a.convertToArrayForm(b)),g.call(this,b,c)}}}(c),function(a,b,c){function d(a){var c=b.timeline;c.currentTime=a,c._discardAnimations(),0==c._animations.length?f=!1:requestAnimationFrame(d)}var e=window.requestAnimationFrame;window.requestAnimationFrame=function(a){return e(function(c){b.timeline._updateAnimationsPromises(),a(c),b.timeline._updateAnimationsPromises()})},b.AnimationTimeline=function(){this._animations=[],this.currentTime=void 0},b.AnimationTimeline.prototype={getAnimations:function(){return this._discardAnimations(),this._animations.slice()},_updateAnimationsPromises:function(){b.animationsWithPromises=b.animationsWithPromises.filter(function(a){return a._updatePromises()})},_discardAnimations:function(){this._updateAnimationsPromises(),this._animations=this._animations.filter(function(a){return"finished"!=a.playState&&"idle"!=a.playState})},_play:function(a){var c=new b.Animation(a,this);return this._animations.push(c),b.restartWebAnimationsNextTick(),c._updatePromises(),c._animation.play(),c._updatePromises(),c},play:function(a){return a&&a.remove(),this._play(a)}};var f=!1;b.restartWebAnimationsNextTick=function(){f||(f=!0,requestAnimationFrame(d))};var g=new b.AnimationTimeline;b.timeline=g;try{Object.defineProperty(window.document,"timeline",{configurable:!0,get:function(){return g}})}catch(a){}try{window.document.timeline=g}catch(a){}}(0,e),function(a,b,c){b.animationsWithPromises=[],b.Animation=function(b,c){if(this.id="",b&&b._id&&(this.id=b._id),this.effect=b,b&&(b._animation=this),!c)throw new Error("Animation with null timeline is not supported");this._timeline=c,this._sequenceNumber=a.sequenceNumber++,this._holdTime=0,this._paused=!1,this._isGroup=!1,this._animation=null,this._childAnimations=[],this._callback=null,this._oldPlayState="idle",this._rebuildUnderlyingAnimation(),this._animation.cancel(),this._updatePromises()},b.Animation.prototype={_updatePromises:function(){var a=this._oldPlayState,b=this.playState;return this._readyPromise&&b!==a&&("idle"==b?(this._rejectReadyPromise(),this._readyPromise=void 0):"pending"==a?this._resolveReadyPromise():"pending"==b&&(this._readyPromise=void 0)),this._finishedPromise&&b!==a&&("idle"==b?(this._rejectFinishedPromise(),this._finishedPromise=void 0):"finished"==b?this._resolveFinishedPromise():"finished"==a&&(this._finishedPromise=void 0)),this._oldPlayState=this.playState,this._readyPromise||this._finishedPromise},_rebuildUnderlyingAnimation:function(){this._updatePromises();var a,c,d,e,f=!!this._animation;f&&(a=this.playbackRate,c=this._paused,d=this.startTime,e=this.currentTime,this._animation.cancel(),this._animation._wrapper=null,this._animation=null),(!this.effect||this.effect instanceof window.KeyframeEffect)&&(this._animation=b.newUnderlyingAnimationForKeyframeEffect(this.effect),b.bindAnimationForKeyframeEffect(this)),(this.effect instanceof window.SequenceEffect||this.effect instanceof window.GroupEffect)&&(this._animation=b.newUnderlyingAnimationForGroup(this.effect),b.bindAnimationForGroup(this)),this.effect&&this.effect._onsample&&b.bindAnimationForCustomEffect(this),f&&(1!=a&&(this.playbackRate=a),null!==d?this.startTime=d:null!==e?this.currentTime=e:null!==this._holdTime&&(this.currentTime=this._holdTime),c&&this.pause()),this._updatePromises()},_updateChildren:function(){if(this.effect&&"idle"!=this.playState){var a=this.effect._timing.delay;this._childAnimations.forEach(function(c){this._arrangeChildren(c,a),this.effect instanceof window.SequenceEffect&&(a+=b.groupChildDuration(c.effect))}.bind(this))}},_setExternalAnimation:function(a){if(this.effect&&this._isGroup)for(var b=0;b1||c<0||c>1?x:function(e){function f(a,b,c){return 3*a*(1-c)*(1-c)*c+3*b*(1-c)*c*c+c*c*c}if(e<=0){var g=0;return a>0?g=b/a:!b&&c>0&&(g=d/c),g*e}if(e>=1){var h=0;return c<1?h=(d-1)/(c-1):1==c&&a<1&&(h=(b-1)/(a-1)),1+h*(e-1)}for(var i=0,j=1;i=1)return 1;var d=1/a;return(c+=b*d)-c%d}}function k(a){C||(C=document.createElement("div").style),C.animationTimingFunction="",C.animationTimingFunction=a;var b=C.animationTimingFunction;if(""==b&&e())throw new TypeError(a+" is not a valid value for easing");return b}function l(a){if("linear"==a)return x;var b=E.exec(a);if(b)return i.apply(this,b.slice(1).map(Number));var c=F.exec(a);return c?j(Number(c[1]),{start:y,middle:z,end:A}[c[2]]):B[a]||x}function m(a){return Math.abs(n(a)/a.playbackRate)}function n(a){return 0===a.duration||0===a.iterations?0:a.duration*a.iterations}function o(a,b,c){if(null==b)return G;var d=c.delay+a+c.endDelay;return b=Math.min(c.delay+a,d)?I:J}function p(a,b,c,d,e){switch(d){case H:return"backwards"==b||"both"==b?0:null;case J:return c-e;case I:return"forwards"==b||"both"==b?a:null;case G:return null}}function q(a,b,c,d,e){var f=e;return 0===a?b!==H&&(f+=c):f+=d/a,f}function r(a,b,c,d,e,f){var g=a===1/0?b%1:a%1;return 0!==g||c!==I||0===d||0===e&&0!==f||(g=1),g}function s(a,b,c,d){return a===I&&b===1/0?1/0:1===c?Math.floor(d)-1:Math.floor(d)}function t(a,b,c){var d=a;if("normal"!==a&&"reverse"!==a){var e=b;"alternate-reverse"===a&&(e+=1),d="normal",e!==1/0&&e%2!=0&&(d="reverse")}return"normal"===d?c:1-c}function u(a,b,c){var d=o(a,b,c),e=p(a,c.fill,b,d,c.delay);if(null===e)return null;var f=q(c.duration,d,c.iterations,e,c.iterationStart),g=r(f,c.iterationStart,d,c.iterations,e,c.duration),h=s(d,c.iterations,g,f),i=t(c.direction,h,g);return c._easingFunction(i)}var v="backwards|forwards|both|none".split("|"),w="reverse|alternate|alternate-reverse".split("|"),x=function(a){return a};d.prototype={_setMember:function(b,c){this["_"+b]=c,this._effect&&(this._effect._timingInput[b]=c,this._effect._timing=a.normalizeTimingInput(this._effect._timingInput),this._effect.activeDuration=a.calculateActiveDuration(this._effect._timing),this._effect._animation&&this._effect._animation._rebuildUnderlyingAnimation())},get playbackRate(){return this._playbackRate},set delay(a){this._setMember("delay",a)},get delay(){return this._delay},set endDelay(a){this._setMember("endDelay",a)},get endDelay(){return this._endDelay},set fill(a){this._setMember("fill",a)},get fill(){return this._fill},set iterationStart(a){if((isNaN(a)||a<0)&&e())throw new TypeError("iterationStart must be a non-negative number, received: "+timing.iterationStart);this._setMember("iterationStart",a)},get iterationStart(){return this._iterationStart},set duration(a){if("auto"!=a&&(isNaN(a)||a<0)&&e())throw new TypeError("duration must be non-negative or auto, received: "+a);this._setMember("duration",a)},get duration(){return this._duration},set direction(a){this._setMember("direction",a)},get direction(){return this._direction},set easing(a){this._easingFunction=l(k(a)),this._setMember("easing",a)},get easing(){return this._easing},set iterations(a){if((isNaN(a)||a<0)&&e())throw new TypeError("iterations must be non-negative, received: "+a);this._setMember("iterations",a)},get iterations(){return this._iterations}};var y=1,z=.5,A=0,B={ease:i(.25,.1,.25,1),"ease-in":i(.42,0,1,1),"ease-out":i(0,0,.58,1),"ease-in-out":i(.42,0,.58,1),"step-start":j(1,y),"step-middle":j(1,z),"step-end":j(1,A)},C=null,D="\\s*(-?\\d+\\.?\\d*|-?\\.\\d+)\\s*",E=new RegExp("cubic-bezier\\("+D+","+D+","+D+","+D+"\\)"),F=/steps\(\s*(\d+)\s*,\s*(start|middle|end)\s*\)/,G=0,H=1,I=2,J=3;a.cloneTimingInput=c,a.makeTiming=f,a.numericTimingToObject=g,a.normalizeTimingInput=h,a.calculateActiveDuration=m,a.calculateIterationProgress=u,a.calculatePhase=o,a.normalizeEasing=k,a.parseEasingFunction=l}(c),function(a,b){function c(a,b){return a in k?k[a][b]||b:b}function d(a){return"display"===a||0===a.lastIndexOf("animation",0)||0===a.lastIndexOf("transition",0)}function e(a,b,e){if(!d(a)){var f=h[a];if(f){i.style[a]=b;for(var g in f){var j=f[g],k=i.style[j];e[j]=c(j,k)}}else e[a]=c(a,b)}}function f(a){var b=[];for(var c in a)if(!(c in["easing","offset","composite"])){var d=a[c];Array.isArray(d)||(d=[d]);for(var e,f=d.length,g=0;g1&&null==d[0].offset&&(d[0].offset=0);for(var b=0,c=d[0].offset,e=1;e1)throw new TypeError("Keyframe offsets must be between 0 and 1.")}}else if("composite"==d){if("add"==f||"accumulate"==f)throw{type:DOMException.NOT_SUPPORTED_ERR,name:"NotSupportedError",message:"add compositing is not supported"};if("replace"!=f)throw new TypeError("Invalid composite mode "+f+".")}else f="easing"==d?a.normalizeEasing(f):""+f;e(d,f,c)}return void 0==c.offset&&(c.offset=null),void 0==c.easing&&(c.easing="linear"),c}),g=!0,h=-1/0,i=0;i=0&&a.offset<=1}),g||c(),d}var h={background:["backgroundImage","backgroundPosition","backgroundSize","backgroundRepeat","backgroundAttachment","backgroundOrigin","backgroundClip","backgroundColor"],border:["borderTopColor","borderTopStyle","borderTopWidth","borderRightColor","borderRightStyle","borderRightWidth","borderBottomColor","borderBottomStyle","borderBottomWidth","borderLeftColor","borderLeftStyle","borderLeftWidth"],borderBottom:["borderBottomWidth","borderBottomStyle","borderBottomColor"],borderColor:["borderTopColor","borderRightColor","borderBottomColor","borderLeftColor"],borderLeft:["borderLeftWidth","borderLeftStyle","borderLeftColor"],borderRadius:["borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius"],borderRight:["borderRightWidth","borderRightStyle","borderRightColor"],borderTop:["borderTopWidth","borderTopStyle","borderTopColor"],borderWidth:["borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth"],flex:["flexGrow","flexShrink","flexBasis"],font:["fontFamily","fontSize","fontStyle","fontVariant","fontWeight","lineHeight"],margin:["marginTop","marginRight","marginBottom","marginLeft"],outline:["outlineColor","outlineStyle","outlineWidth"],padding:["paddingTop","paddingRight","paddingBottom","paddingLeft"]},i=document.createElementNS("http://www.w3.org/1999/xhtml","div"),j={thin:"1px",medium:"3px",thick:"5px"},k={borderBottomWidth:j,borderLeftWidth:j,borderRightWidth:j,borderTopWidth:j,fontSize:{"xx-small":"60%","x-small":"75%",small:"89%",medium:"100%",large:"120%","x-large":"150%","xx-large":"200%"},fontWeight:{normal:"400",bold:"700"},outlineWidth:j,textShadow:{none:"0px 0px 0px transparent"},boxShadow:{none:"0px 0px 0px 0px transparent"}};a.convertToArrayForm=f,a.normalizeKeyframes=g}(c),function(a){var b={};a.isDeprecated=function(a,c,d,e){var f=e?"are":"is",g=new Date,h=new Date(c);return h.setMonth(h.getMonth()+3),!(g=a.applyFrom&&cthis._surrogateStyle.length;)this._length--,Object.defineProperty(this,this._length,{configurable:!0,enumerable:!1,value:void 0})},_set:function(b,c){this._style[b]=c,this._isAnimatedProperty[b]=!0,this._updateSvgTransformAttr&&"transform"==a.unprefixedPropertyName(b)&&(null==this._savedTransformAttr&&(this._savedTransformAttr=this._element.getAttribute("transform")),this._element.setAttribute("transform",a.transformToSvgMatrix(c)))},_clear:function(b){this._style[b]=this._surrogateStyle[b],this._updateSvgTransformAttr&&"transform"==a.unprefixedPropertyName(b)&&(this._savedTransformAttr?this._element.setAttribute("transform",this._savedTransformAttr):this._element.removeAttribute("transform"),this._savedTransformAttr=null),delete this._isAnimatedProperty[b]}};for(var k in i)e.prototype[k]=function(a,b){return function(){var c=this._surrogateStyle[a].apply(this._surrogateStyle,arguments);return b&&(this._isAnimatedProperty[arguments[0]]||this._style[a].apply(this._style,arguments),this._updateIndices()),c}}(k,k in j);for(var l in document.documentElement.style)l in h||l in i||function(a){d(e.prototype,a,{get:function(){return this._surrogateStyle[a]},set:function(b){this._surrogateStyle[a]=b,this._updateIndices(),this._isAnimatedProperty[a]||(this._style[a]=b)}})}(l);a.apply=function(b,c,d){f(b),b.style._set(a.propertyName(c),d)},a.clear=function(b,c){b._webAnimationsPatchedStyle&&b.style._clear(a.propertyName(c))}}(d),function(a){window.Element.prototype.animate=function(b,c){var d="";return c&&c.id&&(d=c.id),a.timeline._play(a.KeyframeEffect(this,b,c,d))}}(d),function(a,b){function c(a,b,d){if("number"==typeof a&&"number"==typeof b)return a*(1-d)+b*d;if("boolean"==typeof a&&"boolean"==typeof b)return d<.5?a:b;if(a.length==b.length){for(var e=[],f=0;f0?this._totalDuration:0),this._ensureAlive())},get currentTime(){return this._idle||this._currentTimePending?null:this._currentTime},set currentTime(a){a=+a,isNaN(a)||(b.restart(),this._paused||null==this._startTime||(this._startTime=this._timeline.currentTime-a/this._playbackRate),this._currentTimePending=!1,this._currentTime!=a&&(this._idle&&(this._idle=!1,this._paused=!0),this._tickCurrentTime(a,!0),b.applyDirtiedAnimation(this)))},get startTime(){return this._startTime},set startTime(a){a=+a,isNaN(a)||this._paused||this._idle||(this._startTime=a,this._tickCurrentTime((this._timeline.currentTime-this._startTime)*this.playbackRate),b.applyDirtiedAnimation(this))},get playbackRate(){return this._playbackRate},set playbackRate(a){if(a!=this._playbackRate){var c=this.currentTime;this._playbackRate=a,this._startTime=null,"paused"!=this.playState&&"idle"!=this.playState&&(this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),b.applyDirtiedAnimation(this)),null!=c&&(this.currentTime=c)}},get _isFinished(){return!this._idle&&(this._playbackRate>0&&this._currentTime>=this._totalDuration||this._playbackRate<0&&this._currentTime<=0)},get _totalDuration(){return this._effect._totalDuration},get playState(){return this._idle?"idle":null==this._startTime&&!this._paused&&0!=this.playbackRate||this._currentTimePending?"pending":this._paused?"paused":this._isFinished?"finished":"running"},_rewind:function(){if(this._playbackRate>=0)this._currentTime=0;else{if(!(this._totalDuration<1/0))throw new DOMException("Unable to rewind negative playback rate animation with infinite duration","InvalidStateError");this._currentTime=this._totalDuration}},play:function(){this._paused=!1,(this._isFinished||this._idle)&&(this._rewind(),this._startTime=null),this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),b.applyDirtiedAnimation(this)},pause:function(){this._isFinished||this._paused||this._idle?this._idle&&(this._rewind(),this._idle=!1):this._currentTimePending=!0,this._startTime=null,this._paused=!0},finish:function(){this._idle||(this.currentTime=this._playbackRate>0?this._totalDuration:0,this._startTime=this._totalDuration-this.currentTime,this._currentTimePending=!1,b.applyDirtiedAnimation(this))},cancel:function(){this._inEffect&&(this._inEffect=!1,this._idle=!0,this._paused=!1,this._isFinished=!0,this._finishedFlag=!0,this._currentTime=0,this._startTime=null,this._effect._update(null),b.applyDirtiedAnimation(this))},reverse:function(){this.playbackRate*=-1,this.play()},addEventListener:function(a,b){"function"==typeof b&&"finish"==a&&this._finishHandlers.push(b)},removeEventListener:function(a,b){if("finish"==a){var c=this._finishHandlers.indexOf(b);c>=0&&this._finishHandlers.splice(c,1)}},_fireEvents:function(a){if(this._isFinished){if(!this._finishedFlag){var b=new d(this,this._currentTime,a),c=this._finishHandlers.concat(this.onfinish?[this.onfinish]:[]);setTimeout(function(){c.forEach(function(a){a.call(b.target,b)})},0),this._finishedFlag=!0}}else this._finishedFlag=!1},_tick:function(a,b){this._idle||this._paused||(null==this._startTime?b&&(this.startTime=a-this._currentTime/this.playbackRate):this._isFinished||this._tickCurrentTime((a-this._startTime)*this.playbackRate)),b&&(this._currentTimePending=!1,this._fireEvents(a))},get _needsTick(){return this.playState in{pending:1,running:1}||!this._finishedFlag},_targetAnimations:function(){var a=this._effect._target;return a._activeAnimations||(a._activeAnimations=[]),a._activeAnimations},_markTarget:function(){var a=this._targetAnimations();-1===a.indexOf(this)&&a.push(this)},_unmarkTarget:function(){var a=this._targetAnimations(),b=a.indexOf(this);-1!==b&&a.splice(b,1)}}}(c,d),function(a,b,c){function d(a){var b=j;j=[],a1e-4?(u=.5/Math.sqrt(w),v=[(q[2][1]-q[1][2])*u,(q[0][2]-q[2][0])*u,(q[1][0]-q[0][1])*u,.25/u]):q[0][0]>q[1][1]&&q[0][0]>q[2][2]?(u=2*Math.sqrt(1+q[0][0]-q[1][1]-q[2][2]),v=[.25*u,(q[0][1]+q[1][0])/u,(q[0][2]+q[2][0])/u,(q[2][1]-q[1][2])/u]):q[1][1]>q[2][2]?(u=2*Math.sqrt(1+q[1][1]-q[0][0]-q[2][2]),v=[(q[0][1]+q[1][0])/u,.25*u,(q[1][2]+q[2][1])/u,(q[0][2]-q[2][0])/u]):(u=2*Math.sqrt(1+q[2][2]-q[0][0]-q[1][1]),v=[(q[0][2]+q[2][0])/u,(q[1][2]+q[2][1])/u,.25*u,(q[1][0]-q[0][1])/u]),[p,r,s,v,n]}return j}();a.dot=c,a.makeMatrixDecomposition=h,a.transformListToMatrix=g}(d),function(a){function b(a,b){var c=a.exec(b);if(c)return c=a.ignoreCase?c[0].toLowerCase():c[0],[c,b.substr(c.length)]}function c(a,b){b=b.replace(/^\s*/,"");var c=a(b);if(c)return[c[0],c[1].replace(/^\s*/,"")]}function d(a,d,e){a=c.bind(null,a);for(var f=[];;){var g=a(e);if(!g)return[f,e];if(f.push(g[0]),e=g[1],!(g=b(d,e))||""==g[1])return[f,e];e=g[1]}}function e(a,b){for(var c=0,d=0;dd?c%=d:d%=c;return c=a*b/(c+d)}function g(a){return function(b){var c=a(b);return c&&(c[0]=void 0),c}}function h(a,b){return function(c){return a(c)||[b,c]}}function i(b,c){for(var d=[],e=0;e=1?b:"visible"}]}a.addPropertiesHandler(String,c,["visibility"])}(d),function(a,b){function c(a){a=a.trim(),f.fillStyle="#000",f.fillStyle=a;var b=f.fillStyle;if(f.fillStyle="#fff",f.fillStyle=a,b==f.fillStyle){f.fillRect(0,0,1,1);var c=f.getImageData(0,0,1,1).data;f.clearRect(0,0,1,1);var d=c[3]/255;return[c[0]*d,c[1]*d,c[2]*d,d]}}function d(b,c){return[b,c,function(b){function c(a){return Math.max(0,Math.min(255,a))}if(b[3])for(var d=0;d<3;d++)b[d]=Math.round(c(b[d]/b[3]));return b[3]=a.numberToString(a.clamp(0,1,b[3])),"rgba("+b.join(",")+")"}]}var e=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");e.width=e.height=1;var f=e.getContext("2d");a.addPropertiesHandler(c,d,["background-color","border-bottom-color","border-left-color","border-right-color","border-top-color","color","fill","flood-color","lighting-color","outline-color","stop-color","stroke","text-decoration-color"]),a.consumeColor=a.consumeParenthesised.bind(null,c),a.mergeColors=d}(d),function(a,b){function c(a){function b(){var b=h.exec(a);g=b?b[0]:void 0}function c(){var a=Number(g);return b(),a}function d(){if("("!==g)return c();b();var a=f();return")"!==g?NaN:(b(),a)}function e(){for(var a=d();"*"===g||"/"===g;){var c=g;b();var e=d();"*"===c?a*=e:a/=e}return a}function f(){for(var a=e();"+"===g||"-"===g;){var c=g;b();var d=e();"+"===c?a+=d:a-=d}return a}var g,h=/([\+\-\w\.]+|[\(\)\*\/])/g;return b(),f()}function d(a,b){if("0"==(b=b.trim().toLowerCase())&&"px".search(a)>=0)return{px:0};if(/^[^(]*$|^calc/.test(b)){b=b.replace(/calc\(/g,"(");var d={};b=b.replace(a,function(a){return d[a]=null,"U"+a});for(var e="U("+a.source+")",f=b.replace(/[-+]?(\d*\.)?\d+([Ee][-+]?\d+)?/g,"N").replace(new RegExp("N"+e,"g"),"D").replace(/\s[+-]\s/g,"O").replace(/\s/g,""),g=[/N\*(D)/g,/(N|D)[*\/]N/g,/(N|D)O\1/g,/\((N|D)\)/g],h=0;h1?"calc("+c+")":c}]}var g="px|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc",h=d.bind(null,new RegExp(g,"g")),i=d.bind(null,new RegExp(g+"|%","g")),j=d.bind(null,/deg|rad|grad|turn/g);a.parseLength=h,a.parseLengthOrPercent=i,a.consumeLengthOrPercent=a.consumeParenthesised.bind(null,i),a.parseAngle=j,a.mergeDimensions=f;var k=a.consumeParenthesised.bind(null,h),l=a.consumeRepeated.bind(void 0,k,/^/),m=a.consumeRepeated.bind(void 0,l,/^,/);a.consumeSizePairList=m;var n=function(a){var b=m(a);if(b&&""==b[1])return b[0]},o=a.mergeNestedRepeated.bind(void 0,e," "),p=a.mergeNestedRepeated.bind(void 0,o,",");a.mergeNonNegativeSizePair=o,a.addPropertiesHandler(n,p,["background-size"]),a.addPropertiesHandler(i,e,["border-bottom-width","border-image-width","border-left-width","border-right-width","border-top-width","flex-basis","font-size","height","line-height","max-height","max-width","outline-width","width"]),a.addPropertiesHandler(i,f,["border-bottom-left-radius","border-bottom-right-radius","border-top-left-radius","border-top-right-radius","bottom","left","letter-spacing","margin-bottom","margin-left","margin-right","margin-top","min-height","min-width","outline-offset","padding-bottom","padding-left","padding-right","padding-top","perspective","right","shape-margin","stroke-dashoffset","text-indent","top","vertical-align","word-spacing"])}(d),function(a,b){function c(b){return a.consumeLengthOrPercent(b)||a.consumeToken(/^auto/,b)}function d(b){var d=a.consumeList([a.ignore(a.consumeToken.bind(null,/^rect/)),a.ignore(a.consumeToken.bind(null,/^\(/)),a.consumeRepeated.bind(null,c,/^,/),a.ignore(a.consumeToken.bind(null,/^\)/))],b);if(d&&4==d[0].length)return d[0]}function e(b,c){return"auto"==b||"auto"==c?[!0,!1,function(d){var e=d?b:c;if("auto"==e)return"auto";var f=a.mergeDimensions(e,e);return f[2](f[0])}]:a.mergeDimensions(b,c)}function f(a){return"rect("+a+")"}var g=a.mergeWrappedNestedRepeated.bind(null,f,e,", ");a.parseBox=d,a.mergeBoxes=g,a.addPropertiesHandler(d,g,["clip"])}(d),function(a,b){function c(a){return function(b){var c=0;return a.map(function(a){return a===k?b[c++]:a})}}function d(a){return a}function e(b){if("none"==(b=b.toLowerCase().trim()))return[];for(var c,d=/\s*(\w+)\(([^)]*)\)/g,e=[],f=0;c=d.exec(b);){if(c.index!=f)return;f=c.index+c[0].length;var g=c[1],h=n[g];if(!h)return;var i=c[2].split(","),j=h[0];if(j.length900||b%100!=0))return b}function c(b){return b=100*Math.round(b/100),b=a.clamp(100,900,b),400===b?"normal":700===b?"bold":String(b)}function d(a,b){return[a,b,c]}a.addPropertiesHandler(b,d,["font-weight"])}(d),function(a){function b(a){var b={};for(var c in a)b[c]=-a[c];return b}function c(b){return a.consumeToken(/^(left|center|right|top|bottom)\b/i,b)||a.consumeLengthOrPercent(b)}function d(b,d){var e=a.consumeRepeated(c,/^/,d);if(e&&""==e[1]){var f=e[0];if(f[0]=f[0]||"center",f[1]=f[1]||"center",3==b&&(f[2]=f[2]||{px:0}),f.length==b){if(/top|bottom/.test(f[0])||/left|right/.test(f[1])){var h=f[0];f[0]=f[1],f[1]=h}if(/left|right|center|Object/.test(f[0])&&/top|bottom|center|Object/.test(f[1]))return f.map(function(a){return"object"==typeof a?a:g[a]})}}}function e(d){var e=a.consumeRepeated(c,/^/,d);if(e){for(var f=e[0],h=[{"%":50},{"%":50}],i=0,j=!1,k=0;k=0&&this._cancelHandlers.splice(c,1)}else i.call(this,a,b)},f}}}(),function(a){var b=document.documentElement,c=null,d=!1;try{var e=getComputedStyle(b).getPropertyValue("opacity"),f="0"==e?"1":"0";c=b.animate({opacity:[f,f]},{duration:1}),c.currentTime=0,d=getComputedStyle(b).getPropertyValue("opacity")==f}catch(a){}finally{c&&c.cancel()}if(!d){var g=window.Element.prototype.animate;window.Element.prototype.animate=function(b,c){return window.Symbol&&Symbol.iterator&&Array.prototype.from&&b[Symbol.iterator]&&(b=Array.from(b)),Array.isArray(b)||null===b||(b=a.convertToArrayForm(b)),g.call(this,b,c)}}}(c),function(a,b,c){function d(a){var c=b.timeline;c.currentTime=a,c._discardAnimations(),0==c._animations.length?f=!1:requestAnimationFrame(d)}var e=window.requestAnimationFrame;window.requestAnimationFrame=function(a){return e(function(c){b.timeline._updateAnimationsPromises(),a(c),b.timeline._updateAnimationsPromises()})},b.AnimationTimeline=function(){this._animations=[],this.currentTime=void 0},b.AnimationTimeline.prototype={getAnimations:function(){return this._discardAnimations(),this._animations.slice()},_updateAnimationsPromises:function(){b.animationsWithPromises=b.animationsWithPromises.filter(function(a){return a._updatePromises()})},_discardAnimations:function(){this._updateAnimationsPromises(),this._animations=this._animations.filter(function(a){return"finished"!=a.playState&&"idle"!=a.playState})},_play:function(a){var c=new b.Animation(a,this);return this._animations.push(c),b.restartWebAnimationsNextTick(),c._updatePromises(),c._animation.play(),c._updatePromises(),c},play:function(a){return a&&a.remove(),this._play(a)}};var f=!1;b.restartWebAnimationsNextTick=function(){f||(f=!0,requestAnimationFrame(d))};var g=new b.AnimationTimeline;b.timeline=g;try{Object.defineProperty(window.document,"timeline",{configurable:!0,get:function(){return g}})}catch(a){}try{window.document.timeline=g}catch(a){}}(0,e),function(a,b,c){b.animationsWithPromises=[],b.Animation=function(b,c){if(this.id="",b&&b._id&&(this.id=b._id),this.effect=b,b&&(b._animation=this),!c)throw new Error("Animation with null timeline is not supported");this._timeline=c,this._sequenceNumber=a.sequenceNumber++,this._holdTime=0,this._paused=!1,this._isGroup=!1,this._animation=null,this._childAnimations=[],this._callback=null,this._oldPlayState="idle",this._rebuildUnderlyingAnimation(),this._animation.cancel(),this._updatePromises()},b.Animation.prototype={_updatePromises:function(){var a=this._oldPlayState,b=this.playState;return this._readyPromise&&b!==a&&("idle"==b?(this._rejectReadyPromise(),this._readyPromise=void 0):"pending"==a?this._resolveReadyPromise():"pending"==b&&(this._readyPromise=void 0)),this._finishedPromise&&b!==a&&("idle"==b?(this._rejectFinishedPromise(),this._finishedPromise=void 0):"finished"==b?this._resolveFinishedPromise():"finished"==a&&(this._finishedPromise=void 0)),this._oldPlayState=this.playState,this._readyPromise||this._finishedPromise},_rebuildUnderlyingAnimation:function(){this._updatePromises();var a,c,d,e,f=!!this._animation;f&&(a=this.playbackRate,c=this._paused,d=this.startTime,e=this.currentTime,this._animation.cancel(),this._animation._wrapper=null,this._animation=null),(!this.effect||this.effect instanceof window.KeyframeEffect)&&(this._animation=b.newUnderlyingAnimationForKeyframeEffect(this.effect),b.bindAnimationForKeyframeEffect(this)),(this.effect instanceof window.SequenceEffect||this.effect instanceof window.GroupEffect)&&(this._animation=b.newUnderlyingAnimationForGroup(this.effect),b.bindAnimationForGroup(this)),this.effect&&this.effect._onsample&&b.bindAnimationForCustomEffect(this),f&&(1!=a&&(this.playbackRate=a),null!==d?this.startTime=d:null!==e?this.currentTime=e:null!==this._holdTime&&(this.currentTime=this._holdTime),c&&this.pause()),this._updatePromises()},_updateChildren:function(){if(this.effect&&"idle"!=this.playState){var a=this.effect._timing.delay;this._childAnimations.forEach(function(c){this._arrangeChildren(c,a),this.effect instanceof window.SequenceEffect&&(a+=b.groupChildDuration(c.effect))}.bind(this))}},_setExternalAnimation:function(a){if(this.effect&&this._isGroup)for(var b=0;b1||c<0||c>1?x:function(e){function f(a,b,c){return 3*a*(1-c)*(1-c)*c+3*b*(1-c)*c*c+c*c*c}if(e<=0){var g=0;return a>0?g=b/a:!b&&c>0&&(g=d/c),g*e}if(e>=1){var h=0;return c<1?h=(d-1)/(c-1):1==c&&a<1&&(h=(b-1)/(a-1)),1+h*(e-1)}for(var i=0,j=1;i=1)return 1;var d=1/a;return(c+=b*d)-c%d}}function k(a){C||(C=document.createElement("div").style),C.animationTimingFunction="",C.animationTimingFunction=a;var b=C.animationTimingFunction;if(""==b&&e())throw new TypeError(a+" is not a valid value for easing");return b}function l(a){if("linear"==a)return x;var b=E.exec(a);if(b)return i.apply(this,b.slice(1).map(Number));var c=F.exec(a);return c?j(Number(c[1]),{start:y,middle:z,end:A}[c[2]]):B[a]||x}function m(a){return Math.abs(n(a)/a.playbackRate)}function n(a){return 0===a.duration||0===a.iterations?0:a.duration*a.iterations}function o(a,b,c){if(null==b)return G;var d=c.delay+a+c.endDelay;return b=Math.min(c.delay+a,d)?I:J}function p(a,b,c,d,e){switch(d){case H:return"backwards"==b||"both"==b?0:null;case J:return c-e;case I:return"forwards"==b||"both"==b?a:null;case G:return null}}function q(a,b,c,d,e){var f=e;return 0===a?b!==H&&(f+=c):f+=d/a,f}function r(a,b,c,d,e,f){var g=a===1/0?b%1:a%1;return 0!==g||c!==I||0===d||0===e&&0!==f||(g=1),g}function s(a,b,c,d){return a===I&&b===1/0?1/0:1===c?Math.floor(d)-1:Math.floor(d)}function t(a,b,c){var d=a;if("normal"!==a&&"reverse"!==a){var e=b;"alternate-reverse"===a&&(e+=1),d="normal",e!==1/0&&e%2!=0&&(d="reverse")}return"normal"===d?c:1-c}function u(a,b,c){var d=o(a,b,c),e=p(a,c.fill,b,d,c.delay);if(null===e)return null;var f=q(c.duration,d,c.iterations,e,c.iterationStart),g=r(f,c.iterationStart,d,c.iterations,e,c.duration),h=s(d,c.iterations,g,f),i=t(c.direction,h,g);return c._easingFunction(i)}var v="backwards|forwards|both|none".split("|"),w="reverse|alternate|alternate-reverse".split("|"),x=function(a){return a};d.prototype={_setMember:function(b,c){this["_"+b]=c,this._effect&&(this._effect._timingInput[b]=c,this._effect._timing=a.normalizeTimingInput(this._effect._timingInput),this._effect.activeDuration=a.calculateActiveDuration(this._effect._timing),this._effect._animation&&this._effect._animation._rebuildUnderlyingAnimation())},get playbackRate(){return this._playbackRate},set delay(a){this._setMember("delay",a)},get delay(){return this._delay},set endDelay(a){this._setMember("endDelay",a)},get endDelay(){return this._endDelay},set fill(a){this._setMember("fill",a)},get fill(){return this._fill},set iterationStart(a){if((isNaN(a)||a<0)&&e())throw new TypeError("iterationStart must be a non-negative number, received: "+timing.iterationStart);this._setMember("iterationStart",a)},get iterationStart(){return this._iterationStart},set duration(a){if("auto"!=a&&(isNaN(a)||a<0)&&e())throw new TypeError("duration must be non-negative or auto, received: "+a);this._setMember("duration",a)},get duration(){return this._duration},set direction(a){this._setMember("direction",a)},get direction(){return this._direction},set easing(a){this._easingFunction=l(k(a)),this._setMember("easing",a)},get easing(){return this._easing},set iterations(a){if((isNaN(a)||a<0)&&e())throw new TypeError("iterations must be non-negative, received: "+a);this._setMember("iterations",a)},get iterations(){return this._iterations}};var y=1,z=.5,A=0,B={ease:i(.25,.1,.25,1),"ease-in":i(.42,0,1,1),"ease-out":i(0,0,.58,1),"ease-in-out":i(.42,0,.58,1),"step-start":j(1,y),"step-middle":j(1,z),"step-end":j(1,A)},C=null,D="\\s*(-?\\d+\\.?\\d*|-?\\.\\d+)\\s*",E=new RegExp("cubic-bezier\\("+D+","+D+","+D+","+D+"\\)"),F=/steps\(\s*(\d+)\s*,\s*(start|middle|end)\s*\)/,G=0,H=1,I=2,J=3;a.cloneTimingInput=c,a.makeTiming=f,a.numericTimingToObject=g,a.normalizeTimingInput=h,a.calculateActiveDuration=m,a.calculateIterationProgress=u,a.calculatePhase=o,a.normalizeEasing=k,a.parseEasingFunction=l}(c),function(a,b){function c(a,b){return a in k?k[a][b]||b:b}function d(a){return"display"===a||0===a.lastIndexOf("animation",0)||0===a.lastIndexOf("transition",0)}function e(a,b,e){if(!d(a)){var f=h[a];if(f){i.style[a]=b;for(var g in f){var j=f[g],k=i.style[j];e[j]=c(j,k)}}else e[a]=c(a,b)}}function f(a){var b=[];for(var c in a)if(!(c in["easing","offset","composite"])){var d=a[c];Array.isArray(d)||(d=[d]);for(var e,f=d.length,g=0;g1&&null==d[0].offset&&(d[0].offset=0);for(var b=0,c=d[0].offset,e=1;e1)throw new TypeError("Keyframe offsets must be between 0 and 1.")}}else if("composite"==d){if("add"==f||"accumulate"==f)throw{type:DOMException.NOT_SUPPORTED_ERR,name:"NotSupportedError",message:"add compositing is not supported"};if("replace"!=f)throw new TypeError("Invalid composite mode "+f+".")}else f="easing"==d?a.normalizeEasing(f):""+f;e(d,f,c)}return void 0==c.offset&&(c.offset=null),void 0==c.easing&&(c.easing="linear"),c}),g=!0,h=-1/0,i=0;i=0&&a.offset<=1}),g||c(),d}var h={background:["backgroundImage","backgroundPosition","backgroundSize","backgroundRepeat","backgroundAttachment","backgroundOrigin","backgroundClip","backgroundColor"],border:["borderTopColor","borderTopStyle","borderTopWidth","borderRightColor","borderRightStyle","borderRightWidth","borderBottomColor","borderBottomStyle","borderBottomWidth","borderLeftColor","borderLeftStyle","borderLeftWidth"],borderBottom:["borderBottomWidth","borderBottomStyle","borderBottomColor"],borderColor:["borderTopColor","borderRightColor","borderBottomColor","borderLeftColor"],borderLeft:["borderLeftWidth","borderLeftStyle","borderLeftColor"],borderRadius:["borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius"],borderRight:["borderRightWidth","borderRightStyle","borderRightColor"],borderTop:["borderTopWidth","borderTopStyle","borderTopColor"],borderWidth:["borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth"],flex:["flexGrow","flexShrink","flexBasis"],font:["fontFamily","fontSize","fontStyle","fontVariant","fontWeight","lineHeight"],margin:["marginTop","marginRight","marginBottom","marginLeft"],outline:["outlineColor","outlineStyle","outlineWidth"],padding:["paddingTop","paddingRight","paddingBottom","paddingLeft"]},i=document.createElementNS("http://www.w3.org/1999/xhtml","div"),j={thin:"1px",medium:"3px",thick:"5px"},k={borderBottomWidth:j,borderLeftWidth:j,borderRightWidth:j,borderTopWidth:j,fontSize:{"xx-small":"60%","x-small":"75%",small:"89%",medium:"100%",large:"120%","x-large":"150%","xx-large":"200%"},fontWeight:{normal:"400",bold:"700"},outlineWidth:j,textShadow:{none:"0px 0px 0px transparent"},boxShadow:{none:"0px 0px 0px 0px transparent"}};a.convertToArrayForm=f,a.normalizeKeyframes=g}(c),function(a){var b={};a.isDeprecated=function(a,c,d,e){var f=e?"are":"is",g=new Date,h=new Date(c);return h.setMonth(h.getMonth()+3),!(g=a.applyFrom&&cthis._surrogateStyle.length;)this._length--,Object.defineProperty(this,this._length,{configurable:!0,enumerable:!1,value:void 0})},_set:function(a,b){this._style[a]=b,this._isAnimatedProperty[a]=!0},_clear:function(a){this._style[a]=this._surrogateStyle[a],delete this._isAnimatedProperty[a]}};for(var i in g)d.prototype[i]=function(a,b){return function(){var c=this._surrogateStyle[a].apply(this._surrogateStyle,arguments);return b&&(this._isAnimatedProperty[arguments[0]]||this._style[a].apply(this._style,arguments),this._updateIndices()),c}}(i,i in h);for(var j in document.documentElement.style)j in f||j in g||function(a){c(d.prototype,a,{get:function(){return this._surrogateStyle[a]},set:function(b){this._surrogateStyle[a]=b,this._updateIndices(),this._isAnimatedProperty[a]||(this._style[a]=b)}})}(j);a.apply=function(b,c,d){e(b),b.style._set(a.propertyName(c),d)},a.clear=function(b,c){b._webAnimationsPatchedStyle&&b.style._clear(a.propertyName(c))}}(d),function(a){window.Element.prototype.animate=function(b,c){var d="";return c&&c.id&&(d=c.id),a.timeline._play(a.KeyframeEffect(this,b,c,d))}}(d),function(a,b){function c(a,b,d){if("number"==typeof a&&"number"==typeof b)return a*(1-d)+b*d;if("boolean"==typeof a&&"boolean"==typeof b)return d<.5?a:b;if(a.length==b.length){for(var e=[],f=0;f0?this._totalDuration:0),this._ensureAlive())},get currentTime(){return this._idle||this._currentTimePending?null:this._currentTime},set currentTime(a){a=+a,isNaN(a)||(b.restart(),this._paused||null==this._startTime||(this._startTime=this._timeline.currentTime-a/this._playbackRate),this._currentTimePending=!1,this._currentTime!=a&&(this._idle&&(this._idle=!1,this._paused=!0),this._tickCurrentTime(a,!0),b.applyDirtiedAnimation(this)))},get startTime(){return this._startTime},set startTime(a){a=+a,isNaN(a)||this._paused||this._idle||(this._startTime=a,this._tickCurrentTime((this._timeline.currentTime-this._startTime)*this.playbackRate),b.applyDirtiedAnimation(this))},get playbackRate(){return this._playbackRate},set playbackRate(a){if(a!=this._playbackRate){var c=this.currentTime;this._playbackRate=a,this._startTime=null,"paused"!=this.playState&&"idle"!=this.playState&&(this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),b.applyDirtiedAnimation(this)),null!=c&&(this.currentTime=c)}},get _isFinished(){return!this._idle&&(this._playbackRate>0&&this._currentTime>=this._totalDuration||this._playbackRate<0&&this._currentTime<=0)},get _totalDuration(){return this._effect._totalDuration},get playState(){return this._idle?"idle":null==this._startTime&&!this._paused&&0!=this.playbackRate||this._currentTimePending?"pending":this._paused?"paused":this._isFinished?"finished":"running"},_rewind:function(){if(this._playbackRate>=0)this._currentTime=0;else{if(!(this._totalDuration<1/0))throw new DOMException("Unable to rewind negative playback rate animation with infinite duration","InvalidStateError");this._currentTime=this._totalDuration}},play:function(){this._paused=!1,(this._isFinished||this._idle)&&(this._rewind(),this._startTime=null),this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),b.applyDirtiedAnimation(this)},pause:function(){this._isFinished||this._paused||this._idle?this._idle&&(this._rewind(),this._idle=!1):this._currentTimePending=!0,this._startTime=null,this._paused=!0},finish:function(){this._idle||(this.currentTime=this._playbackRate>0?this._totalDuration:0,this._startTime=this._totalDuration-this.currentTime,this._currentTimePending=!1,b.applyDirtiedAnimation(this))},cancel:function(){this._inEffect&&(this._inEffect=!1,this._idle=!0,this._paused=!1,this._isFinished=!0,this._finishedFlag=!0,this._currentTime=0,this._startTime=null,this._effect._update(null),b.applyDirtiedAnimation(this))},reverse:function(){this.playbackRate*=-1,this.play()},addEventListener:function(a,b){"function"==typeof b&&"finish"==a&&this._finishHandlers.push(b)},removeEventListener:function(a,b){if("finish"==a){var c=this._finishHandlers.indexOf(b);c>=0&&this._finishHandlers.splice(c,1)}},_fireEvents:function(a){if(this._isFinished){if(!this._finishedFlag){var b=new d(this,this._currentTime,a),c=this._finishHandlers.concat(this.onfinish?[this.onfinish]:[]);setTimeout(function(){c.forEach(function(a){a.call(b.target,b)})},0),this._finishedFlag=!0}}else this._finishedFlag=!1},_tick:function(a,b){this._idle||this._paused||(null==this._startTime?b&&(this.startTime=a-this._currentTime/this.playbackRate):this._isFinished||this._tickCurrentTime((a-this._startTime)*this.playbackRate)),b&&(this._currentTimePending=!1,this._fireEvents(a))},get _needsTick(){return this.playState in{pending:1,running:1}||!this._finishedFlag},_targetAnimations:function(){var a=this._effect._target;return a._activeAnimations||(a._activeAnimations=[]),a._activeAnimations},_markTarget:function(){var a=this._targetAnimations();-1===a.indexOf(this)&&a.push(this)},_unmarkTarget:function(){var a=this._targetAnimations(),b=a.indexOf(this);-1!==b&&a.splice(b,1)}}}(c,d),function(a,b,c){function d(a){var b=j;j=[],a1e-4?(u=.5/Math.sqrt(w),v=[(q[2][1]-q[1][2])*u,(q[0][2]-q[2][0])*u,(q[1][0]-q[0][1])*u,.25/u]):q[0][0]>q[1][1]&&q[0][0]>q[2][2]?(u=2*Math.sqrt(1+q[0][0]-q[1][1]-q[2][2]),v=[.25*u,(q[0][1]+q[1][0])/u,(q[0][2]+q[2][0])/u,(q[2][1]-q[1][2])/u]):q[1][1]>q[2][2]?(u=2*Math.sqrt(1+q[1][1]-q[0][0]-q[2][2]),v=[(q[0][1]+q[1][0])/u,.25*u,(q[1][2]+q[2][1])/u,(q[0][2]-q[2][0])/u]):(u=2*Math.sqrt(1+q[2][2]-q[0][0]-q[1][1]),v=[(q[0][2]+q[2][0])/u,(q[1][2]+q[2][1])/u,.25*u,(q[1][0]-q[0][1])/u]),[p,r,s,v,n]}return j}();a.dot=c,a.makeMatrixDecomposition=h}(d),function(a){function b(a,b){var c=a.exec(b);if(c)return c=a.ignoreCase?c[0].toLowerCase():c[0],[c,b.substr(c.length)]}function c(a,b){b=b.replace(/^\s*/,"");var c=a(b);if(c)return[c[0],c[1].replace(/^\s*/,"")]}function d(a,d,e){a=c.bind(null,a);for(var f=[];;){var g=a(e);if(!g)return[f,e];if(f.push(g[0]),e=g[1],!(g=b(d,e))||""==g[1])return[f,e];e=g[1]}}function e(a,b){for(var c=0,d=0;dd?c%=d:d%=c;return c=a*b/(c+d)}function g(a){return function(b){var c=a(b);return c&&(c[0]=void 0),c}}function h(a,b){return function(c){return a(c)||[b,c]}}function i(b,c){for(var d=[],e=0;e=1?b:"visible"}]}a.addPropertiesHandler(String,c,["visibility"])}(d),function(a,b){function c(a){a=a.trim(),f.fillStyle="#000",f.fillStyle=a;var b=f.fillStyle;if(f.fillStyle="#fff",f.fillStyle=a,b==f.fillStyle){f.fillRect(0,0,1,1);var c=f.getImageData(0,0,1,1).data;f.clearRect(0,0,1,1);var d=c[3]/255;return[c[0]*d,c[1]*d,c[2]*d,d]}}function d(b,c){return[b,c,function(b){function c(a){return Math.max(0,Math.min(255,a))}if(b[3])for(var d=0;d<3;d++)b[d]=Math.round(c(b[d]/b[3]));return b[3]=a.numberToString(a.clamp(0,1,b[3])),"rgba("+b.join(",")+")"}]}var e=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");e.width=e.height=1;var f=e.getContext("2d");a.addPropertiesHandler(c,d,["background-color","border-bottom-color","border-left-color","border-right-color","border-top-color","color","fill","flood-color","lighting-color","outline-color","stop-color","stroke","text-decoration-color"]),a.consumeColor=a.consumeParenthesised.bind(null,c),a.mergeColors=d}(d),function(a,b){function c(a,b){if("0"==(b=b.trim().toLowerCase())&&"px".search(a)>=0)return{px:0};if(/^[^(]*$|^calc/.test(b)){b=b.replace(/calc\(/g,"(");var c={};b=b.replace(a,function(a){return c[a]=null,"U"+a});for(var d="U("+a.source+")",e=b.replace(/[-+]?(\d*\.)?\d+/g,"N").replace(new RegExp("N"+d,"g"),"D").replace(/\s[+-]\s/g,"O").replace(/\s/g,""),f=[/N\*(D)/g,/(N|D)[*\/]N/g,/(N|D)O\1/g,/\((N|D)\)/g],g=0;g1?"calc("+c+")":c}]}var f="px|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc",g=c.bind(null,new RegExp(f,"g")),h=c.bind(null,new RegExp(f+"|%","g")),i=c.bind(null,/deg|rad|grad|turn/g);a.parseLength=g,a.parseLengthOrPercent=h,a.consumeLengthOrPercent=a.consumeParenthesised.bind(null,h),a.parseAngle=i,a.mergeDimensions=e;var j=a.consumeParenthesised.bind(null,g),k=a.consumeRepeated.bind(void 0,j,/^/),l=a.consumeRepeated.bind(void 0,k,/^,/);a.consumeSizePairList=l;var m=function(a){var b=l(a);if(b&&""==b[1])return b[0]},n=a.mergeNestedRepeated.bind(void 0,d," "),o=a.mergeNestedRepeated.bind(void 0,n,",");a.mergeNonNegativeSizePair=n,a.addPropertiesHandler(m,o,["background-size"]),a.addPropertiesHandler(h,d,["border-bottom-width","border-image-width","border-left-width","border-right-width","border-top-width","flex-basis","font-size","height","line-height","max-height","max-width","outline-width","width"]),a.addPropertiesHandler(h,e,["border-bottom-left-radius","border-bottom-right-radius","border-top-left-radius","border-top-right-radius","bottom","left","letter-spacing","margin-bottom","margin-left","margin-right","margin-top","min-height","min-width","outline-offset","padding-bottom","padding-left","padding-right","padding-top","perspective","right","shape-margin","stroke-dashoffset","text-indent","top","vertical-align","word-spacing"])}(d,f),function(a,b){function c(b){return a.consumeLengthOrPercent(b)||a.consumeToken(/^auto/,b)}function d(b){var d=a.consumeList([a.ignore(a.consumeToken.bind(null,/^rect/)),a.ignore(a.consumeToken.bind(null,/^\(/)),a.consumeRepeated.bind(null,c,/^,/),a.ignore(a.consumeToken.bind(null,/^\)/))],b);if(d&&4==d[0].length)return d[0]}function e(b,c){return"auto"==b||"auto"==c?[!0,!1,function(d){var e=d?b:c;if("auto"==e)return"auto";var f=a.mergeDimensions(e,e);return f[2](f[0])}]:a.mergeDimensions(b,c)}function f(a){return"rect("+a+")"}var g=a.mergeWrappedNestedRepeated.bind(null,f,e,", ");a.parseBox=d,a.mergeBoxes=g,a.addPropertiesHandler(d,g,["clip"])}(d),function(a,b){function c(a){return function(b){var c=0;return a.map(function(a){return a===k?b[c++]:a})}}function d(a){return a}function e(b){if("none"==(b=b.toLowerCase().trim()))return[];for(var c,d=/\s*(\w+)\(([^)]*)\)/g,e=[],f=0;c=d.exec(b);){if(c.index!=f)return;f=c.index+c[0].length;var g=c[1],h=n[g];if(!h)return;var i=c[2].split(","),j=h[0];if(j.length900||b%100!=0))return b}function c(b){return b=100*Math.round(b/100),b=a.clamp(100,900,b),400===b?"normal":700===b?"bold":String(b)}function d(a,b){return[a,b,c]}a.addPropertiesHandler(b,d,["font-weight"])}(d),function(a){function b(a){var b={};for(var c in a)b[c]=-a[c];return b}function c(b){return a.consumeToken(/^(left|center|right|top|bottom)\b/i,b)||a.consumeLengthOrPercent(b)}function d(b,d){var e=a.consumeRepeated(c,/^/,d);if(e&&""==e[1]){var f=e[0];if(f[0]=f[0]||"center",f[1]=f[1]||"center",3==b&&(f[2]=f[2]||{px:0}),f.length==b){if(/top|bottom/.test(f[0])||/left|right/.test(f[1])){var h=f[0];f[0]=f[1],f[1]=h}if(/left|right|center|Object/.test(f[0])&&/top|bottom|center|Object/.test(f[1]))return f.map(function(a){return"object"==typeof a?a:g[a]})}}}function e(d){var e=a.consumeRepeated(c,/^/,d);if(e){for(var f=e[0],h=[{"%":50},{"%":50}],i=0,j=!1,k=0;k=0&&this._cancelHandlers.splice(c,1)}else i.call(this,a,b)},f}}}(),function(a){var b=document.documentElement,c=null,d=!1;try{var e=getComputedStyle(b).getPropertyValue("opacity"),f="0"==e?"1":"0";c=b.animate({opacity:[f,f]},{duration:1}),c.currentTime=0,d=getComputedStyle(b).getPropertyValue("opacity")==f}catch(a){}finally{c&&c.cancel()}if(!d){var g=window.Element.prototype.animate;window.Element.prototype.animate=function(b,c){return window.Symbol&&Symbol.iterator&&Array.prototype.from&&b[Symbol.iterator]&&(b=Array.from(b)),Array.isArray(b)||null===b||(b=a.convertToArrayForm(b)),g.call(this,b,c)}}}(c),b.true=a}({},function(){return this}()); +!function(a,b){var c={},d={};!function(a,b){function c(a){if("number"==typeof a)return a;var b={};for(var c in a)b[c]=a[c];return b}function d(){this._delay=0,this._endDelay=0,this._fill="none",this._iterationStart=0,this._iterations=1,this._duration=0,this._playbackRate=1,this._direction="normal",this._easing="linear",this._easingFunction=x}function e(){return a.isDeprecated("Invalid timing inputs","2016-03-02","TypeError exceptions will be thrown instead.",!0)}function f(b,c,e){var f=new d;return c&&(f.fill="both",f.duration="auto"),"number"!=typeof b||isNaN(b)?void 0!==b&&Object.getOwnPropertyNames(b).forEach(function(c){if("auto"!=b[c]){if(("number"==typeof f[c]||"duration"==c)&&("number"!=typeof b[c]||isNaN(b[c])))return;if("fill"==c&&-1==v.indexOf(b[c]))return;if("direction"==c&&-1==w.indexOf(b[c]))return;if("playbackRate"==c&&1!==b[c]&&a.isDeprecated("AnimationEffectTiming.playbackRate","2014-11-28","Use Animation.playbackRate instead."))return;f[c]=b[c]}}):f.duration=b,f}function g(a){return"number"==typeof a&&(a=isNaN(a)?{duration:0}:{duration:a}),a}function h(b,c){return b=a.numericTimingToObject(b),f(b,c)}function i(a,b,c,d){return a<0||a>1||c<0||c>1?x:function(e){function f(a,b,c){return 3*a*(1-c)*(1-c)*c+3*b*(1-c)*c*c+c*c*c}if(e<=0){var g=0;return a>0?g=b/a:!b&&c>0&&(g=d/c),g*e}if(e>=1){var h=0;return c<1?h=(d-1)/(c-1):1==c&&a<1&&(h=(b-1)/(a-1)),1+h*(e-1)}for(var i=0,j=1;i=1)return 1;var d=1/a;return(c+=b*d)-c%d}}function k(a){C||(C=document.createElement("div").style),C.animationTimingFunction="",C.animationTimingFunction=a;var b=C.animationTimingFunction;if(""==b&&e())throw new TypeError(a+" is not a valid value for easing");return b}function l(a){if("linear"==a)return x;var b=E.exec(a);if(b)return i.apply(this,b.slice(1).map(Number));var c=F.exec(a);return c?j(Number(c[1]),{start:y,middle:z,end:A}[c[2]]):B[a]||x}function m(a){return Math.abs(n(a)/a.playbackRate)}function n(a){return 0===a.duration||0===a.iterations?0:a.duration*a.iterations}function o(a,b,c){if(null==b)return G;var d=c.delay+a+c.endDelay;return b=Math.min(c.delay+a,d)?I:J}function p(a,b,c,d,e){switch(d){case H:return"backwards"==b||"both"==b?0:null;case J:return c-e;case I:return"forwards"==b||"both"==b?a:null;case G:return null}}function q(a,b,c,d,e){var f=e;return 0===a?b!==H&&(f+=c):f+=d/a,f}function r(a,b,c,d,e,f){var g=a===1/0?b%1:a%1;return 0!==g||c!==I||0===d||0===e&&0!==f||(g=1),g}function s(a,b,c,d){return a===I&&b===1/0?1/0:1===c?Math.floor(d)-1:Math.floor(d)}function t(a,b,c){var d=a;if("normal"!==a&&"reverse"!==a){var e=b;"alternate-reverse"===a&&(e+=1),d="normal",e!==1/0&&e%2!=0&&(d="reverse")}return"normal"===d?c:1-c}function u(a,b,c){var d=o(a,b,c),e=p(a,c.fill,b,d,c.delay);if(null===e)return null;var f=q(c.duration,d,c.iterations,e,c.iterationStart),g=r(f,c.iterationStart,d,c.iterations,e,c.duration),h=s(d,c.iterations,g,f),i=t(c.direction,h,g);return c._easingFunction(i)}var v="backwards|forwards|both|none".split("|"),w="reverse|alternate|alternate-reverse".split("|"),x=function(a){return a};d.prototype={_setMember:function(b,c){this["_"+b]=c,this._effect&&(this._effect._timingInput[b]=c,this._effect._timing=a.normalizeTimingInput(this._effect._timingInput),this._effect.activeDuration=a.calculateActiveDuration(this._effect._timing),this._effect._animation&&this._effect._animation._rebuildUnderlyingAnimation())},get playbackRate(){return this._playbackRate},set delay(a){this._setMember("delay",a)},get delay(){return this._delay},set endDelay(a){this._setMember("endDelay",a)},get endDelay(){return this._endDelay},set fill(a){this._setMember("fill",a)},get fill(){return this._fill},set iterationStart(a){if((isNaN(a)||a<0)&&e())throw new TypeError("iterationStart must be a non-negative number, received: "+timing.iterationStart);this._setMember("iterationStart",a)},get iterationStart(){return this._iterationStart},set duration(a){if("auto"!=a&&(isNaN(a)||a<0)&&e())throw new TypeError("duration must be non-negative or auto, received: "+a);this._setMember("duration",a)},get duration(){return this._duration},set direction(a){this._setMember("direction",a)},get direction(){return this._direction},set easing(a){this._easingFunction=l(k(a)),this._setMember("easing",a)},get easing(){return this._easing},set iterations(a){if((isNaN(a)||a<0)&&e())throw new TypeError("iterations must be non-negative, received: "+a);this._setMember("iterations",a)},get iterations(){return this._iterations}};var y=1,z=.5,A=0,B={ease:i(.25,.1,.25,1),"ease-in":i(.42,0,1,1),"ease-out":i(0,0,.58,1),"ease-in-out":i(.42,0,.58,1),"step-start":j(1,y),"step-middle":j(1,z),"step-end":j(1,A)},C=null,D="\\s*(-?\\d+\\.?\\d*|-?\\.\\d+)\\s*",E=new RegExp("cubic-bezier\\("+D+","+D+","+D+","+D+"\\)"),F=/steps\(\s*(\d+)\s*,\s*(start|middle|end)\s*\)/,G=0,H=1,I=2,J=3;a.cloneTimingInput=c,a.makeTiming=f,a.numericTimingToObject=g,a.normalizeTimingInput=h,a.calculateActiveDuration=m,a.calculateIterationProgress=u,a.calculatePhase=o,a.normalizeEasing=k,a.parseEasingFunction=l}(c),function(a,b){function c(a,b){return a in k?k[a][b]||b:b}function d(a){return"display"===a||0===a.lastIndexOf("animation",0)||0===a.lastIndexOf("transition",0)}function e(a,b,e){if(!d(a)){var f=h[a];if(f){i.style[a]=b;for(var g in f){var j=f[g],k=i.style[j];e[j]=c(j,k)}}else e[a]=c(a,b)}}function f(a){var b=[];for(var c in a)if(!(c in["easing","offset","composite"])){var d=a[c];Array.isArray(d)||(d=[d]);for(var e,f=d.length,g=0;g1&&null==d[0].offset&&(d[0].offset=0);for(var b=0,c=d[0].offset,e=1;e1)throw new TypeError("Keyframe offsets must be between 0 and 1.")}}else if("composite"==d){if("add"==f||"accumulate"==f)throw{type:DOMException.NOT_SUPPORTED_ERR,name:"NotSupportedError",message:"add compositing is not supported"};if("replace"!=f)throw new TypeError("Invalid composite mode "+f+".")}else f="easing"==d?a.normalizeEasing(f):""+f;e(d,f,c)}return void 0==c.offset&&(c.offset=null),void 0==c.easing&&(c.easing="linear"),c}),g=!0,h=-1/0,i=0;i=0&&a.offset<=1}),g||c(),d}var h={background:["backgroundImage","backgroundPosition","backgroundSize","backgroundRepeat","backgroundAttachment","backgroundOrigin","backgroundClip","backgroundColor"],border:["borderTopColor","borderTopStyle","borderTopWidth","borderRightColor","borderRightStyle","borderRightWidth","borderBottomColor","borderBottomStyle","borderBottomWidth","borderLeftColor","borderLeftStyle","borderLeftWidth"],borderBottom:["borderBottomWidth","borderBottomStyle","borderBottomColor"],borderColor:["borderTopColor","borderRightColor","borderBottomColor","borderLeftColor"],borderLeft:["borderLeftWidth","borderLeftStyle","borderLeftColor"],borderRadius:["borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius"],borderRight:["borderRightWidth","borderRightStyle","borderRightColor"],borderTop:["borderTopWidth","borderTopStyle","borderTopColor"],borderWidth:["borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth"],flex:["flexGrow","flexShrink","flexBasis"],font:["fontFamily","fontSize","fontStyle","fontVariant","fontWeight","lineHeight"],margin:["marginTop","marginRight","marginBottom","marginLeft"],outline:["outlineColor","outlineStyle","outlineWidth"],padding:["paddingTop","paddingRight","paddingBottom","paddingLeft"]},i=document.createElementNS("http://www.w3.org/1999/xhtml","div"),j={thin:"1px",medium:"3px",thick:"5px"},k={borderBottomWidth:j,borderLeftWidth:j,borderRightWidth:j,borderTopWidth:j,fontSize:{"xx-small":"60%","x-small":"75%",small:"89%",medium:"100%",large:"120%","x-large":"150%","xx-large":"200%"},fontWeight:{normal:"400",bold:"700"},outlineWidth:j,textShadow:{none:"0px 0px 0px transparent"},boxShadow:{none:"0px 0px 0px 0px transparent"}};a.convertToArrayForm=f,a.normalizeKeyframes=g}(c),function(a){var b={};a.isDeprecated=function(a,c,d,e){var f=e?"are":"is",g=new Date,h=new Date(c);return h.setMonth(h.getMonth()+3),!(g=a.applyFrom&&cthis._surrogateStyle.length;)this._length--,Object.defineProperty(this,this._length,{configurable:!0,enumerable:!1,value:void 0})},_set:function(b,c){this._style[b]=c,this._isAnimatedProperty[b]=!0,this._updateSvgTransformAttr&&"transform"==a.unprefixedPropertyName(b)&&(null==this._savedTransformAttr&&(this._savedTransformAttr=this._element.getAttribute("transform")),this._element.setAttribute("transform",a.transformToSvgMatrix(c)))},_clear:function(b){this._style[b]=this._surrogateStyle[b],this._updateSvgTransformAttr&&"transform"==a.unprefixedPropertyName(b)&&(this._savedTransformAttr?this._element.setAttribute("transform",this._savedTransformAttr):this._element.removeAttribute("transform"),this._savedTransformAttr=null),delete this._isAnimatedProperty[b]}};for(var k in i)e.prototype[k]=function(a,b){return function(){var c=this._surrogateStyle[a].apply(this._surrogateStyle,arguments);return b&&(this._isAnimatedProperty[arguments[0]]||this._style[a].apply(this._style,arguments),this._updateIndices()),c}}(k,k in j);for(var l in document.documentElement.style)l in h||l in i||function(a){d(e.prototype,a,{get:function(){return this._surrogateStyle[a]},set:function(b){this._surrogateStyle[a]=b,this._updateIndices(),this._isAnimatedProperty[a]||(this._style[a]=b)}})}(l);a.apply=function(b,c,d){f(b),b.style._set(a.propertyName(c),d)},a.clear=function(b,c){b._webAnimationsPatchedStyle&&b.style._clear(a.propertyName(c))}}(d),function(a){window.Element.prototype.animate=function(b,c){var d="";return c&&c.id&&(d=c.id),a.timeline._play(a.KeyframeEffect(this,b,c,d))}}(d),function(a,b){function c(a,b,d){if("number"==typeof a&&"number"==typeof b)return a*(1-d)+b*d;if("boolean"==typeof a&&"boolean"==typeof b)return d<.5?a:b;if(a.length==b.length){for(var e=[],f=0;f0?this._totalDuration:0),this._ensureAlive())},get currentTime(){return this._idle||this._currentTimePending?null:this._currentTime},set currentTime(a){a=+a,isNaN(a)||(b.restart(),this._paused||null==this._startTime||(this._startTime=this._timeline.currentTime-a/this._playbackRate),this._currentTimePending=!1,this._currentTime!=a&&(this._idle&&(this._idle=!1,this._paused=!0),this._tickCurrentTime(a,!0),b.applyDirtiedAnimation(this)))},get startTime(){return this._startTime},set startTime(a){a=+a,isNaN(a)||this._paused||this._idle||(this._startTime=a,this._tickCurrentTime((this._timeline.currentTime-this._startTime)*this.playbackRate),b.applyDirtiedAnimation(this))},get playbackRate(){return this._playbackRate},set playbackRate(a){if(a!=this._playbackRate){var c=this.currentTime;this._playbackRate=a,this._startTime=null,"paused"!=this.playState&&"idle"!=this.playState&&(this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),b.applyDirtiedAnimation(this)),null!=c&&(this.currentTime=c)}},get _isFinished(){return!this._idle&&(this._playbackRate>0&&this._currentTime>=this._totalDuration||this._playbackRate<0&&this._currentTime<=0)},get _totalDuration(){return this._effect._totalDuration},get playState(){return this._idle?"idle":null==this._startTime&&!this._paused&&0!=this.playbackRate||this._currentTimePending?"pending":this._paused?"paused":this._isFinished?"finished":"running"},_rewind:function(){if(this._playbackRate>=0)this._currentTime=0;else{if(!(this._totalDuration<1/0))throw new DOMException("Unable to rewind negative playback rate animation with infinite duration","InvalidStateError");this._currentTime=this._totalDuration}},play:function(){this._paused=!1,(this._isFinished||this._idle)&&(this._rewind(),this._startTime=null),this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),b.applyDirtiedAnimation(this)},pause:function(){this._isFinished||this._paused||this._idle?this._idle&&(this._rewind(),this._idle=!1):this._currentTimePending=!0,this._startTime=null,this._paused=!0},finish:function(){this._idle||(this.currentTime=this._playbackRate>0?this._totalDuration:0,this._startTime=this._totalDuration-this.currentTime,this._currentTimePending=!1,b.applyDirtiedAnimation(this))},cancel:function(){this._inEffect&&(this._inEffect=!1,this._idle=!0,this._paused=!1,this._isFinished=!0,this._finishedFlag=!0,this._currentTime=0,this._startTime=null,this._effect._update(null),b.applyDirtiedAnimation(this))},reverse:function(){this.playbackRate*=-1,this.play()},addEventListener:function(a,b){"function"==typeof b&&"finish"==a&&this._finishHandlers.push(b)},removeEventListener:function(a,b){if("finish"==a){var c=this._finishHandlers.indexOf(b);c>=0&&this._finishHandlers.splice(c,1)}},_fireEvents:function(a){if(this._isFinished){if(!this._finishedFlag){var b=new d(this,this._currentTime,a),c=this._finishHandlers.concat(this.onfinish?[this.onfinish]:[]);setTimeout(function(){c.forEach(function(a){a.call(b.target,b)})},0),this._finishedFlag=!0}}else this._finishedFlag=!1},_tick:function(a,b){this._idle||this._paused||(null==this._startTime?b&&(this.startTime=a-this._currentTime/this.playbackRate):this._isFinished||this._tickCurrentTime((a-this._startTime)*this.playbackRate)),b&&(this._currentTimePending=!1,this._fireEvents(a))},get _needsTick(){return this.playState in{pending:1,running:1}||!this._finishedFlag},_targetAnimations:function(){var a=this._effect._target;return a._activeAnimations||(a._activeAnimations=[]),a._activeAnimations},_markTarget:function(){var a=this._targetAnimations();-1===a.indexOf(this)&&a.push(this)},_unmarkTarget:function(){var a=this._targetAnimations(),b=a.indexOf(this);-1!==b&&a.splice(b,1)}}}(c,d),function(a,b,c){function d(a){var b=j;j=[],a1e-4?(u=.5/Math.sqrt(w),v=[(q[2][1]-q[1][2])*u,(q[0][2]-q[2][0])*u,(q[1][0]-q[0][1])*u,.25/u]):q[0][0]>q[1][1]&&q[0][0]>q[2][2]?(u=2*Math.sqrt(1+q[0][0]-q[1][1]-q[2][2]),v=[.25*u,(q[0][1]+q[1][0])/u,(q[0][2]+q[2][0])/u,(q[2][1]-q[1][2])/u]):q[1][1]>q[2][2]?(u=2*Math.sqrt(1+q[1][1]-q[0][0]-q[2][2]),v=[(q[0][1]+q[1][0])/u,.25*u,(q[1][2]+q[2][1])/u,(q[0][2]-q[2][0])/u]):(u=2*Math.sqrt(1+q[2][2]-q[0][0]-q[1][1]),v=[(q[0][2]+q[2][0])/u,(q[1][2]+q[2][1])/u,.25*u,(q[1][0]-q[0][1])/u]),[p,r,s,v,n]}return j}();a.dot=c,a.makeMatrixDecomposition=h,a.transformListToMatrix=g}(d),function(a){function b(a,b){var c=a.exec(b);if(c)return c=a.ignoreCase?c[0].toLowerCase():c[0],[c,b.substr(c.length)]}function c(a,b){b=b.replace(/^\s*/,"");var c=a(b);if(c)return[c[0],c[1].replace(/^\s*/,"")]}function d(a,d,e){a=c.bind(null,a);for(var f=[];;){var g=a(e);if(!g)return[f,e];if(f.push(g[0]),e=g[1],!(g=b(d,e))||""==g[1])return[f,e];e=g[1]}}function e(a,b){for(var c=0,d=0;dd?c%=d:d%=c;return c=a*b/(c+d)}function g(a){return function(b){var c=a(b);return c&&(c[0]=void 0),c}}function h(a,b){return function(c){return a(c)||[b,c]}}function i(b,c){for(var d=[],e=0;e=1?b:"visible"}]}a.addPropertiesHandler(String,c,["visibility"])}(d),function(a,b){function c(a){a=a.trim(),f.fillStyle="#000",f.fillStyle=a;var b=f.fillStyle;if(f.fillStyle="#fff",f.fillStyle=a,b==f.fillStyle){f.fillRect(0,0,1,1);var c=f.getImageData(0,0,1,1).data;f.clearRect(0,0,1,1);var d=c[3]/255;return[c[0]*d,c[1]*d,c[2]*d,d]}}function d(b,c){return[b,c,function(b){function c(a){return Math.max(0,Math.min(255,a))}if(b[3])for(var d=0;d<3;d++)b[d]=Math.round(c(b[d]/b[3]));return b[3]=a.numberToString(a.clamp(0,1,b[3])),"rgba("+b.join(",")+")"}]}var e=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");e.width=e.height=1;var f=e.getContext("2d");a.addPropertiesHandler(c,d,["background-color","border-bottom-color","border-left-color","border-right-color","border-top-color","color","fill","flood-color","lighting-color","outline-color","stop-color","stroke","text-decoration-color"]),a.consumeColor=a.consumeParenthesised.bind(null,c),a.mergeColors=d}(d),function(a,b){function c(a){function b(){var b=h.exec(a);g=b?b[0]:void 0}function c(){var a=Number(g);return b(),a}function d(){if("("!==g)return c();b();var a=f();return")"!==g?NaN:(b(),a)}function e(){for(var a=d();"*"===g||"/"===g;){var c=g;b();var e=d();"*"===c?a*=e:a/=e}return a}function f(){for(var a=e();"+"===g||"-"===g;){var c=g;b();var d=e();"+"===c?a+=d:a-=d}return a}var g,h=/([\+\-\w\.]+|[\(\)\*\/])/g;return b(),f()}function d(a,b){if("0"==(b=b.trim().toLowerCase())&&"px".search(a)>=0)return{px:0};if(/^[^(]*$|^calc/.test(b)){b=b.replace(/calc\(/g,"(");var d={};b=b.replace(a,function(a){return d[a]=null,"U"+a});for(var e="U("+a.source+")",f=b.replace(/[-+]?(\d*\.)?\d+([Ee][-+]?\d+)?/g,"N").replace(new RegExp("N"+e,"g"),"D").replace(/\s[+-]\s/g,"O").replace(/\s/g,""),g=[/N\*(D)/g,/(N|D)[*\/]N/g,/(N|D)O\1/g,/\((N|D)\)/g],h=0;h1?"calc("+c+")":c}]}var g="px|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc",h=d.bind(null,new RegExp(g,"g")),i=d.bind(null,new RegExp(g+"|%","g")),j=d.bind(null,/deg|rad|grad|turn/g);a.parseLength=h,a.parseLengthOrPercent=i,a.consumeLengthOrPercent=a.consumeParenthesised.bind(null,i),a.parseAngle=j,a.mergeDimensions=f;var k=a.consumeParenthesised.bind(null,h),l=a.consumeRepeated.bind(void 0,k,/^/),m=a.consumeRepeated.bind(void 0,l,/^,/);a.consumeSizePairList=m;var n=function(a){var b=m(a);if(b&&""==b[1])return b[0]},o=a.mergeNestedRepeated.bind(void 0,e," "),p=a.mergeNestedRepeated.bind(void 0,o,",");a.mergeNonNegativeSizePair=o,a.addPropertiesHandler(n,p,["background-size"]),a.addPropertiesHandler(i,e,["border-bottom-width","border-image-width","border-left-width","border-right-width","border-top-width","flex-basis","font-size","height","line-height","max-height","max-width","outline-width","width"]),a.addPropertiesHandler(i,f,["border-bottom-left-radius","border-bottom-right-radius","border-top-left-radius","border-top-right-radius","bottom","left","letter-spacing","margin-bottom","margin-left","margin-right","margin-top","min-height","min-width","outline-offset","padding-bottom","padding-left","padding-right","padding-top","perspective","right","shape-margin","stroke-dashoffset","text-indent","top","vertical-align","word-spacing"])}(d),function(a,b){function c(b){return a.consumeLengthOrPercent(b)||a.consumeToken(/^auto/,b)}function d(b){var d=a.consumeList([a.ignore(a.consumeToken.bind(null,/^rect/)),a.ignore(a.consumeToken.bind(null,/^\(/)),a.consumeRepeated.bind(null,c,/^,/),a.ignore(a.consumeToken.bind(null,/^\)/))],b);if(d&&4==d[0].length)return d[0]}function e(b,c){return"auto"==b||"auto"==c?[!0,!1,function(d){var e=d?b:c;if("auto"==e)return"auto";var f=a.mergeDimensions(e,e);return f[2](f[0])}]:a.mergeDimensions(b,c)}function f(a){return"rect("+a+")"}var g=a.mergeWrappedNestedRepeated.bind(null,f,e,", ");a.parseBox=d,a.mergeBoxes=g,a.addPropertiesHandler(d,g,["clip"])}(d),function(a,b){function c(a){return function(b){var c=0;return a.map(function(a){return a===k?b[c++]:a})}}function d(a){return a}function e(b){if("none"==(b=b.toLowerCase().trim()))return[];for(var c,d=/\s*(\w+)\(([^)]*)\)/g,e=[],f=0;c=d.exec(b);){if(c.index!=f)return;f=c.index+c[0].length;var g=c[1],h=n[g];if(!h)return;var i=c[2].split(","),j=h[0];if(j.length900||b%100!=0))return b}function c(b){return b=100*Math.round(b/100),b=a.clamp(100,900,b),400===b?"normal":700===b?"bold":String(b)}function d(a,b){return[a,b,c]}a.addPropertiesHandler(b,d,["font-weight"])}(d),function(a){function b(a){var b={};for(var c in a)b[c]=-a[c];return b}function c(b){return a.consumeToken(/^(left|center|right|top|bottom)\b/i,b)||a.consumeLengthOrPercent(b)}function d(b,d){var e=a.consumeRepeated(c,/^/,d);if(e&&""==e[1]){var f=e[0];if(f[0]=f[0]||"center",f[1]=f[1]||"center",3==b&&(f[2]=f[2]||{px:0}),f.length==b){if(/top|bottom/.test(f[0])||/left|right/.test(f[1])){var h=f[0];f[0]=f[1],f[1]=h}if(/left|right|center|Object/.test(f[0])&&/top|bottom|center|Object/.test(f[1]))return f.map(function(a){return"object"==typeof a?a:g[a]})}}}function e(d){var e=a.consumeRepeated(c,/^/,d);if(e){for(var f=e[0],h=[{"%":50},{"%":50}],i=0,j=!1,k=0;k=0&&this._cancelHandlers.splice(c,1)}else i.call(this,a,b)},f}}}(),function(a){var b=document.documentElement,c=null,d=!1;try{var e=getComputedStyle(b).getPropertyValue("opacity"),f="0"==e?"1":"0";c=b.animate({opacity:[f,f]},{duration:1}),c.currentTime=0,d=getComputedStyle(b).getPropertyValue("opacity")==f}catch(a){}finally{c&&c.cancel()}if(!d){var g=window.Element.prototype.animate;window.Element.prototype.animate=function(b,c){return window.Symbol&&Symbol.iterator&&Array.prototype.from&&b[Symbol.iterator]&&(b=Array.from(b)),Array.isArray(b)||null===b||(b=a.convertToArrayForm(b)),g.call(this,b,c)}}}(c),b.true=a}({},function(){return this}()); //# sourceMappingURL=web-animations.min.js.map \ No newline at end of file diff --git a/web-animations.min.js.map b/web-animations.min.js.map index 32bdd59f..c78ace0f 100644 --- a/web-animations.min.js.map +++ b/web-animations.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["src/scope.js","src/timing-utilities.js","src/normalize-keyframes.js","src/deprecation.js","src/web-animations-bonus-cancel-events.js","src/web-animations-bonus-object-form-keyframes.js"],"names":["webAnimationsShared","webAnimations1","webAnimationsNext","webAnimationsTesting","shared","testing","cloneTimingInput","timingInput","clone","m","AnimationEffectTiming","this","_delay","_endDelay","_fill","_iterationStart","_iterations","_duration","_playbackRate","_direction","_easing","_easingFunction","linear","isInvalidTimingDeprecated","isDeprecated","makeTiming","forGroup","effect","timing","fill","duration","isNaN","Object","getOwnPropertyNames","forEach","property","fills","indexOf","directions","numericTimingToObject","normalizeTimingInput","cubic","a","b","c","d","x","f","start_gradient","end_gradient","start","end","mid","xEst","Math","abs","step","count","pos","stepSize","normalizeEasing","easing","styleForCleaning","document","createElement","style","animationTimingFunction","normalizedEasing","TypeError","parseEasingFunction","cubicData","cubicBezierRe","exec","apply","slice","map","Number","stepData","stepRe","Start","middle","Middle","End","presets","calculateActiveDuration","repeatedDuration","playbackRate","iterations","calculatePhase","activeDuration","localTime","PhaseNone","endTime","delay","endDelay","min","PhaseBefore","PhaseAfter","PhaseActive","calculateActiveTime","fillMode","phase","calculateOverallProgress","iterationDuration","activeTime","iterationStart","overallProgress","calculateSimpleIterationProgress","simpleIterationProgress","Infinity","calculateCurrentIteration","floor","calculateDirectedProgress","playbackDirection","currentIteration","currentDirection","calculateIterationProgress","directedProgress","direction","split","prototype","_setMember","member","value","_effect","_timingInput","_timing","_animation","_rebuildUnderlyingAnimation","ease","ease-in","ease-out","ease-in-out","step-start","step-middle","step-end","numberString","RegExp","antiAlias","aliases","isNotAnimatable","lastIndexOf","expandShorthandAndAntiAlias","result","longProperties","shorthandToLonghand","shorthandExpanderElem","i","longProperty","longhandValue","convertToArrayForm","effectInput","normalizedEffectInput","values","Array","isArray","keyframe","numKeyframes","length","offset","composite","push","sort","normalizeKeyframes","spaceKeyframes","keyframes","previousIndex","previousOffset","j","window","Symbol","iterator","from","originalKeyframe","memberValue","isFinite","type","DOMException","NOT_SUPPORTED_ERR","name","message","everyFrameHasOffset","filter","background","border","borderBottom","borderColor","borderLeft","borderRadius","borderRight","borderTop","borderWidth","flex","font","margin","outline","padding","createElementNS","borderWidthAliases","thin","medium","thick","borderBottomWidth","borderLeftWidth","borderRightWidth","borderTopWidth","fontSize","xx-small","x-small","small","large","x-large","xx-large","fontWeight","normal","bold","outlineWidth","textShadow","none","boxShadow","silenced","feature","date","advice","plural","auxVerb","today","Date","expiry","setMonth","getMonth","console","warn","toDateString","deprecated","Error","animate","oncancel","now","performance","AnimationCancelEvent","target","currentTime","timelineTime","bubbles","cancelable","currentTarget","defaultPrevented","eventPhase","Event","AT_TARGET","timeStamp","originalElementAnimate","Element","options","animation","call","_cancelHandlers","originalCancel","cancel","event","handlers","concat","setTimeout","handler","originalAddEventListener","addEventListener","originalRemoveEventListener","removeEventListener","index","splice","element","documentElement","animated","originalOpacity","getComputedStyle","getPropertyValue","testOpacity","opacity","error","exports"],"mappings":"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","file":"web-animations.min.js"} \ No newline at end of file +{"version":3,"sources":["src/scope.js","src/timing-utilities.js","src/normalize-keyframes.js","src/deprecation.js","src/web-animations-bonus-cancel-events.js","src/web-animations-bonus-object-form-keyframes.js"],"names":["webAnimationsShared","webAnimations1","shared","testing","cloneTimingInput","timingInput","clone","m","AnimationEffectTiming","this","_delay","_endDelay","_fill","_iterationStart","_iterations","_duration","_playbackRate","_direction","_easing","_easingFunction","linear","isInvalidTimingDeprecated","isDeprecated","makeTiming","forGroup","effect","timing","fill","duration","isNaN","Object","getOwnPropertyNames","forEach","property","fills","indexOf","directions","numericTimingToObject","normalizeTimingInput","cubic","a","b","c","d","x","f","start_gradient","end_gradient","start","end","mid","xEst","Math","abs","step","count","pos","stepSize","normalizeEasing","easing","styleForCleaning","document","createElement","style","animationTimingFunction","normalizedEasing","TypeError","parseEasingFunction","cubicData","cubicBezierRe","exec","apply","slice","map","Number","stepData","stepRe","Start","middle","Middle","End","presets","calculateActiveDuration","repeatedDuration","playbackRate","iterations","calculatePhase","activeDuration","localTime","PhaseNone","endTime","delay","endDelay","min","PhaseBefore","PhaseAfter","PhaseActive","calculateActiveTime","fillMode","phase","calculateOverallProgress","iterationDuration","activeTime","iterationStart","overallProgress","calculateSimpleIterationProgress","simpleIterationProgress","Infinity","calculateCurrentIteration","floor","calculateDirectedProgress","playbackDirection","currentIteration","currentDirection","calculateIterationProgress","directedProgress","direction","split","prototype","_setMember","member","value","_effect","_timingInput","_timing","_animation","_rebuildUnderlyingAnimation","ease","ease-in","ease-out","ease-in-out","step-start","step-middle","step-end","numberString","RegExp","antiAlias","aliases","isNotAnimatable","lastIndexOf","expandShorthandAndAntiAlias","result","longProperties","shorthandToLonghand","shorthandExpanderElem","i","longProperty","longhandValue","convertToArrayForm","effectInput","normalizedEffectInput","values","Array","isArray","keyframe","numKeyframes","length","offset","composite","push","sort","normalizeKeyframes","spaceKeyframes","keyframes","previousIndex","previousOffset","j","window","Symbol","iterator","from","originalKeyframe","memberValue","isFinite","type","DOMException","NOT_SUPPORTED_ERR","name","message","everyFrameHasOffset","filter","background","border","borderBottom","borderColor","borderLeft","borderRadius","borderRight","borderTop","borderWidth","flex","font","margin","outline","padding","createElementNS","borderWidthAliases","thin","medium","thick","borderBottomWidth","borderLeftWidth","borderRightWidth","borderTopWidth","fontSize","xx-small","x-small","small","large","x-large","xx-large","fontWeight","normal","bold","outlineWidth","textShadow","none","boxShadow","silenced","feature","date","advice","plural","auxVerb","today","Date","expiry","setMonth","getMonth","console","warn","toDateString","deprecated","Error","animate","oncancel","now","performance","AnimationCancelEvent","target","currentTime","timelineTime","bubbles","cancelable","currentTarget","defaultPrevented","eventPhase","Event","AT_TARGET","timeStamp","originalElementAnimate","Element","options","animation","call","_cancelHandlers","originalCancel","cancel","event","handlers","concat","setTimeout","handler","originalAddEventListener","addEventListener","originalRemoveEventListener","removeEventListener","index","splice","element","documentElement","animated","originalOpacity","getComputedStyle","getPropertyValue","testOpacity","opacity","error","webAnimationsNext","exports","webAnimationsTesting"],"mappings":";;;;;;;;;;;;;;CAcA,SAAIA,EAAAA,GAAJ,GAAIA,MACAC,MCDJ,SAAUC,EAAQC,GAMhB,QAASC,GAAiBC,GACxB,GAA0B,gBAAfA,GACT,MAAOA,EAET,IAAIC,KACJ,KAAK,GAAIC,KAAKF,GACZC,EAAMC,GAAKF,EAAYE,EAEzB,OAAOD,GAGT,QAASE,KACPC,KAAKC,OAAS,EACdD,KAAKE,UAAY,EACjBF,KAAKG,MAAQ,OACbH,KAAKI,gBAAkB,EACvBJ,KAAKK,YAAc,EACnBL,KAAKM,UAAY,EACjBN,KAAKO,cAAgB,EACrBP,KAAKQ,WAAa,SAClBR,KAAKS,QAAU,SACfT,KAAKU,gBAAkBC,EAGzB,QAASC,KACP,MAAOnB,GAAOoB,aAAa,wBAAyB,aAAc,gDAAA,GA8EpE,QAASC,GAAWlB,EAAamB,EAAUC,GACzC,GAAIC,GAAS,GAAIlB,EA4BjB,OA3BIgB,KACFE,EAAOC,KAAO,OACdD,EAAOE,SAAW,QAEM,gBAAfvB,IAA4BwB,MAAMxB,OAAAA,KAElCA,GACTyB,OAAOC,oBAAoB1B,GAAa2B,QAAQ,SAASC,GACvD,GAA6B,QAAzB5B,EAAY4B,GAAqB,CACnC,IAA+B,gBAApBP,GAAOO,IAAqC,YAAZA,KACL,gBAAzB5B,GAAY4B,IAAyBJ,MAAMxB,EAAY4B,KAChE,MAGJ,IAAiB,QAAZA,IAAiE,GAAzCC,EAAMC,QAAQ9B,EAAY4B,IACrD,MAEF,IAAiB,aAAZA,IAA2E,GAA9CG,EAAWD,QAAQ9B,EAAY4B,IAC/D,MAEF,IAAgB,gBAAZA,GAAwD,IAA1B5B,EAAY4B,IAAmB/B,EAAOoB,aAAa,qCAAsC,aAAc,uCACvI,MAEFI,GAAOO,GAAY5B,EAAY4B,MAlBnCP,EAAOE,SAAWvB,EAsBbqB,EAGT,QAASW,GAAsBhC,GAQ7B,MAP0B,gBAAfA,KAEPA,EADEwB,MAAMxB,IACQuB,SAAU,IAEVA,SAAUvB,IAGvBA,EAGT,QAASiC,GAAqBjC,EAAamB,GAEzC,MADAnB,GAAcH,EAAOmC,sBAAsBhC,GACpCkB,EAAWlB,EAAamB,GAGjC,QAASe,GAAMC,EAAGC,EAAGC,EAAGC,GACtB,MAAIH,GAAI,GAAKA,EAAI,GAAKE,EAAI,GAAKA,EAAI,EAC1BtB,EAEF,SAASwB,GAqBZ,QAASC,GAAEL,EAAGC,EAAGlC,GAAK,MAAO,GAAIiC,GAAK,EAAIjC,IAAM,EAAIA,GAAKA,EAAI,EAAIkC,GAAK,EAAIlC,GAAKA,EAAIA,EAAIA,EAAIA,EAAIA,EApBjG,GAAIqC,GAAK,EAAG,CACV,GAAIE,GAAiB,CAKrB,OAJIN,GAAI,EACNM,EAAiBL,EAAID,GACbC,GAAKC,EAAI,IACjBI,EAAiBH,EAAID,GAChBI,EAAiBF,EAE1B,GAAIA,GAAK,EAAG,CACV,GAAIG,GAAe,CAKnB,OAJIL,GAAI,EACNK,GAAgBJ,EAAI,IAAMD,EAAI,GAClB,GAALA,GAAUF,EAAI,IACrBO,GAAgBN,EAAI,IAAMD,EAAI,IACzB,EAAIO,GAAgBH,EAAI,GAIjC,IADA,GAAII,GAAQ,EAAGC,EAAM,EACdD,EAAQC,GAAK,CAClB,GAAIC,IAAOF,EAAQC,GAAO,EAEtBE,EAAON,EAAEL,EAAGE,EAAGQ,EACnB,IAAIE,KAAKC,IAAIT,EAAIO,GAAQ,KACvB,MAAON,GAAEJ,EAAGE,EAAGO,EAEbC,GAAOP,EACTI,EAAQE,EAERD,EAAMC,EAGV,MAAOL,GAAEJ,EAAGE,EAAGO,IAQnB,QAASI,GAAKC,EAAOC,GACnB,MAAO,UAASZ,GACd,GAAIA,GAAK,EACP,MAAO,EAET,IAAIa,GAAW,EAAIF,CAEnB,QADAX,GAAKY,EAAMC,GACAb,EAAIa,GAmBnB,QAASC,GAAgBC,GAClBC,IACHA,EAAmBC,SAASC,cAAc,OAAOC,OAEnDH,EAAiBI,wBAA0B,GAC3CJ,EAAiBI,wBAA0BL,CAC3C,IAAIM,GAAmBL,EAAiBI,uBACxC,IAAwB,IAApBC,GAA0B5C,IAC5B,KAAM,IAAI6C,WAAUP,EAAS,mCAE/B,OAAOM,GAGT,QAASE,GAAoBF,GAC3B,GAAwB,UAApBA,EACF,MAAO7C,EAET,IAAIgD,GAAYC,EAAcC,KAAKL,EACnC,IAAIG,EACF,MAAO7B,GAAMgC,MAAM9D,KAAM2D,EAAUI,MAAM,GAAGC,IAAIC,QAElD,IAAIC,GAAWC,EAAON,KAAKL,EAC3B,OAAIU,GACKrB,EAAKoB,OAAOC,EAAS,KAAM3B,MAAS6B,EAAOC,OAAUC,EAAQ9B,IAAO+B,GAAKL,EAAS,KAE9EM,EAAQhB,IAMd7C,EAGT,QAAS8D,GAAwBxD,GAC/B,MAAO0B,MAAKC,IAAI8B,EAAiBzD,GAAUA,EAAO0D,cAGpD,QAASD,GAAiBzD,GAExB,MAAwB,KAApBA,EAAOE,UAAwC,IAAtBF,EAAO2D,WAC3B,EAEF3D,EAAOE,SAAWF,EAAO2D,WAQlC,QAASC,GAAeC,EAAgBC,EAAW9D,GAEjD,GAAiB,MAAb8D,EACF,MAAOC,EAGT,IAAIC,GAAUhE,EAAOiE,MAAQJ,EAAiB7D,EAAOkE,QACrD,OAAIJ,GAAYpC,KAAKyC,IAAInE,EAAOiE,MAAOD,GAC9BI,EAELN,GAAapC,KAAKyC,IAAInE,EAAOiE,MAAQJ,EAAgBG,GAChDK,EAGFC,EAGT,QAASC,GAAoBV,EAAgBW,EAAUV,EAAWW,EAAOR,GAEvE,OAAQQ,GACN,IAAKL,GACH,MAAgB,aAAZI,GAAuC,QAAZA,EACtB,EACF,IACT,KAAKF,GACH,MAAOR,GAAYG,CACrB,KAAKI,GACH,MAAgB,YAAZG,GAAsC,QAAZA,EACrBX,EACF,IACT,KAAKE,GACH,MAAO,OAIb,QAASW,GAAyBC,EAAmBF,EAAOd,EAAYiB,EAAYC,GAElF,GAAIC,GAAkBD,CAQtB,OAP0B,KAAtBF,EACEF,IAAUL,IACZU,GAAmBnB,GAGrBmB,GAAmBF,EAAaD,EAE3BG,EAGT,QAASC,GAAiCD,EAAiBD,EAAgBJ,EAAOd,EAAYiB,EAAYD,GAGxG,GAAIK,GAA2BF,IAAoBG,EAAAA,EAAYJ,EAAiB,EAAIC,EAAkB,CAKtG,OAJgC,KAA5BE,GAAiCP,IAAUJ,GAA6B,IAAfV,GACzC,IAAfiB,GAA0C,IAAtBD,IACvBK,EAA0B,GAErBA,EAGT,QAASE,GAA0BT,EAAOd,EAAYqB,EAAyBF,GAE7E,MAAIL,KAAUJ,GAAcV,IAAesB,EAAAA,EAClCA,EAAAA,EAEuB,IAA5BD,EACKtD,KAAKyD,MAAML,GAAmB,EAEhCpD,KAAKyD,MAAML,GAGpB,QAASM,GAA0BC,EAAmBC,EAAkBN,GAEtE,GAAIO,GAAmBF,CACvB,IAA0B,WAAtBA,GAAwD,YAAtBA,EAAiC,CACrE,GAAIpE,GAAIqE,CACkB,uBAAtBD,IACFpE,GAAK,GAEPsE,EAAmB,SACftE,IAAMgE,EAAAA,GAAYhE,EAAI,GAAM,IAC9BsE,EAAmB,WAGvB,MAAyB,WAArBA,EACKP,EAEF,EAAIA,EAGb,QAASQ,GAA2B3B,EAAgBC,EAAW9D,GAC7D,GAAIyE,GAAQb,EAAeC,EAAgBC,EAAW9D,GAClD4E,EAAaL,EAAoBV,EAAgB7D,EAAOC,KAAM6D,EAAWW,EAAOzE,EAAOiE,MAC3F,IAAmB,OAAfW,EACF,MAAO,KAET,IAAIE,GAAkBJ,EAAyB1E,EAAOE,SAAUuE,EAAOzE,EAAO2D,WAAYiB,EAAY5E,EAAO6E,gBACzGG,EAA0BD,EAAiCD,EAAiB9E,EAAO6E,eAAgBJ,EAAOzE,EAAO2D,WAAYiB,EAAY5E,EAAOE,UAChJoF,EAAmBJ,EAA0BT,EAAOzE,EAAO2D,WAAYqB,EAAyBF,GAChGW,EAAmBL,EAA0BpF,EAAO0F,UAAWJ,EAAkBN,EAIrF,OAAOhF,GAAOP,gBAAgBgG,GA1XhC,GAAIjF,GAAQ,+BAA+BmF,MAAM,KAC7CjF,EAAa,sCAAsCiF,MAAM,KACzDjG,EAAS,SAASwB,GAAK,MAAOA,GA8BlCpC,GAAsB8G,WACpBC,WAAY,SAASC,EAAQC,GAC3BhH,KAAK,IAAM+G,GAAUC,EACjBhH,KAAKiH,UACPjH,KAAKiH,QAAQC,aAAaH,GAAUC,EACpChH,KAAKiH,QAAQE,QAAU1H,EAAOoC,qBAAqB7B,KAAKiH,QAAQC,cAChElH,KAAKiH,QAAQnC,eAAiBrF,EAAOgF,wBAAwBzE,KAAKiH,QAAQE,SACtEnH,KAAKiH,QAAQG,YACfpH,KAAKiH,QAAQG,WAAWC,gCAI9B1C,mBACE,MAAO3E,MAAKO,eAEd2E,UAAU8B,GACRhH,KAAK8G,WAAW,QAASE,IAE3B9B,YACE,MAAOlF,MAAKC,QAEdkF,aAAa6B,GACXhH,KAAK8G,WAAW,WAAYE,IAE9B7B,eACE,MAAOnF,MAAKE,WAEdgB,SAAS8F,GACPhH,KAAK8G,WAAW,OAAQE,IAE1B9F,WACE,MAAOlB,MAAKG,OAEd2F,mBAAmBkB,GACjB,IAAK5F,MAAM4F,IAAUA,EAAQ,IAAMpG,IACjC,KAAM,IAAI6C,WAAU,2DAA6DxC,OAAO6E,eAE1F9F,MAAK8G,WAAW,iBAAkBE,IAEpClB,qBACE,MAAO9F,MAAKI,iBAEde,aAAa6F,GACX,GAAa,QAATA,IAAoB5F,MAAM4F,IAAUA,EAAQ,IAAMpG,IACpD,KAAM,IAAI6C,WAAU,oDAAsDuD,EAE5EhH,MAAK8G,WAAW,WAAYE,IAE9B7F,eACE,MAAOnB,MAAKM,WAEdqG,cAAcK,GACZhH,KAAK8G,WAAW,YAAaE,IAE/BL,gBACE,MAAO3G,MAAKQ,YAEd0C,WAAW8D,GACThH,KAAKU,gBAAkBgD,EAAoBT,EAAgB+D,IAC3DhH,KAAK8G,WAAW,SAAUE,IAE5B9D,aACE,MAAOlD,MAAKS,SAEdmE,eAAeoC,GACb,IAAK5F,MAAM4F,IAAUA,EAAQ,IAAMpG,IACjC,KAAM,IAAI6C,WAAU,8CAAgDuD,EAEtEhH,MAAK8G,WAAW,aAAcE,IAEhCpC,iBACE,MAAO5E,MAAKK,aA4FhB,IAAI+D,GAAQ,EACRE,EAAS,GACTC,EAAM,EAaNC,GACF8C,KAAQxF,EAAM,IAAM,GAAK,IAAM,GAC/ByF,UAAWzF,EAAM,IAAM,EAAG,EAAG,GAC7B0F,WAAY1F,EAAM,EAAG,EAAG,IAAM,GAC9B2F,cAAe3F,EAAM,IAAM,EAAG,IAAM,GACpC4F,aAAc7E,EAAK,EAAGuB,GACtBuD,cAAe9E,EAAK,EAAGyB,GACvBsD,WAAY/E,EAAK,EAAG0B,IAGlBpB,EAAmB,KACnB0E,EAAe,qCACfjE,EAAgB,GAAIkE,QAAO,kBAAoBD,EAAe,IAAMA,EAAe,IAAMA,EAAe,IAAMA,EAAe,OAC7H1D,EAAS,gDAgDTa,EAAY,EACZK,EAAc,EACdC,EAAa,EACbC,EAAc,CA2GlB9F,GAAOE,iBAAmBA,EAC1BF,EAAOqB,WAAaA,EACpBrB,EAAOmC,sBAAwBA,EAC/BnC,EAAOoC,qBAAuBA,EAC9BpC,EAAOgF,wBAA0BA,EACjChF,EAAOgH,2BAA6BA,EACpChH,EAAOoF,eAAiBA,EACxBpF,EAAOwD,gBAAkBA,EACzBxD,EAAOiE,oBAAsBA,GAc5BnE,GCrZH,SAAUE,EAAQC,GAmIhB,QAASqI,GAAUvG,EAAUwF,GAC3B,MAAIxF,KAAYwG,GACPA,EAAQxG,GAAUwF,IAAUA,EAE9BA,EAGT,QAASiB,GAAgBzG,GAEvB,MAAoB,YAAbA,GAAmE,IAAzCA,EAAS0G,YAAY,YAAa,IAAsD,IAA1C1G,EAAS0G,YAAY,aAAc,GAIpH,QAASC,GAA4B3G,EAAUwF,EAAOoB,GACpD,IAAIH,EAAgBzG,GAApB,CAGA,GAAI6G,GAAiBC,EAAoB9G,EACzC,IAAI6G,EAAgB,CAClBE,EAAsBjF,MAAM9B,GAAYwF,CACxC,KAAK,GAAIwB,KAAKH,GAAgB,CAC5B,GAAII,GAAeJ,EAAeG,GAC9BE,EAAgBH,EAAsBjF,MAAMmF,EAChDL,GAAOK,GAAgBV,EAAUU,EAAcC,QAGjDN,GAAO5G,GAAYuG,EAAUvG,EAAUwF,IAI3C,QAAS2B,GAAmBC,GAC1B,GAAIC,KAEJ,KAAK,GAAIrH,KAAYoH,GACnB,KAAIpH,KAAa,SAAU,SAAU,cAArC,CAIA,GAAIsH,GAASF,EAAYpH,EACpBuH,OAAMC,QAAQF,KACjBA,GAAUA,GAKZ,KAAK,GAFDG,GACAC,EAAeJ,EAAOK,OACjBX,EAAI,EAAGA,EAAIU,EAAcV,IAChCS,KAGEA,EAASG,OADP,UAAYR,GACIA,EAAYQ,OACL,GAAhBF,EACS,EAEAV,GAAKU,EAAe,GAGpC,UAAYN,KACdK,EAAS/F,OAAS0F,EAAY1F,QAG5B,aAAe0F,KACjBK,EAASI,UAAYT,EAAYS,WAGnCJ,EAASzH,GAAYsH,EAAON,GAE5BK,EAAsBS,KAAKL,GAK/B,MADAJ,GAAsBU,KAAK,SAASxH,EAAGC,GAAK,MAAOD,GAAEqH,OAASpH,EAAEoH,SACzDP,EAGT,QAASW,GAAmBZ,GAqE1B,QAASa,KACP,GAAIN,GAASO,EAAUP,MACa,OAAhCO,EAAUP,EAAS,GAAGC,SACxBM,EAAUP,EAAS,GAAGC,OAAS,GAC7BD,EAAS,GAA4B,MAAvBO,EAAU,GAAGN,SAC7BM,EAAU,GAAGN,OAAS,EAIxB,KAAK,GAFDO,GAAgB,EAChBC,EAAiBF,EAAU,GAAGN,OACzBZ,EAAI,EAAGA,EAAIW,EAAQX,IAAK,CAC/B,GAAIY,GAASM,EAAUlB,GAAGY,MAC1B,IAAc,MAAVA,EAAgB,CAClB,IAAK,GAAIS,GAAI,EAAGA,EAAIrB,EAAImB,EAAeE,IACrCH,EAAUC,EAAgBE,GAAGT,OAASQ,GAAkBR,EAASQ,GAAkBC,GAAKrB,EAAImB,EAC9FA,GAAgBnB,EAChBoB,EAAiBR,IAnFvB,GAAmB,MAAfR,EACF,QAGEkB,QAAOC,QAAUA,OAAOC,UAAYjB,MAAMlC,UAAUoD,MAAQrB,EAAYmB,OAAOC,YAEjFpB,EAAcG,MAAMkB,KAAKrB,IAGtBG,MAAMC,QAAQJ,KACjBA,EAAcD,EAAmBC,GA0CnC,KAAK,GAvCDc,GAAYd,EAAY5E,IAAI,SAASkG,GACvC,GAAIjB,KACJ,KAAK,GAAIlC,KAAUmD,GAAkB,CACnC,GAAIC,GAAcD,EAAiBnD,EACnC,IAAc,UAAVA,GACF,GAAmB,MAAfoD,EAAqB,CAEvB,GADAA,EAAclG,OAAOkG,IAChBC,SAASD,GACZ,KAAM,IAAI1G,WAAU,oCACtB,IAAI0G,EAAc,GAAKA,EAAc,EACnC,KAAM,IAAI1G,WAAU,kDAEnB,IAAc,aAAVsD,EAAuB,CAChC,GAAmB,OAAfoD,GAAuC,cAAfA,EAC1B,MACEE,KAAMC,aAAaC,kBACnBC,KAAM,oBACNC,QAAS,mCAEN,IAAmB,WAAfN,EACT,KAAM,IAAI1G,WAAU,0BAA4B0G,EAAc,SAGhEA,GADmB,UAAVpD,EACKtH,EAAOwD,gBAAgBkH,GAEvB,GAAKA,CAErBhC,GAA4BpB,EAAQoD,EAAalB,GAMnD,WAAA,IAJIA,EAASG,SACXH,EAASG,OAAS,UAAA,IAChBH,EAAS/F,SACX+F,EAAS/F,OAAS,UACb+F,IAGLyB,GAAAA,EAEAd,GAAAA,EAAAA,EACKpB,EAAI,EAAGA,EAAIkB,EAAUP,OAAQX,IAAK,CACzC,GAAIY,GAASM,EAAUlB,GAAGY,MAC1B,IAAc,MAAVA,EAAgB,CAClB,GAAIA,EAASQ,EACX,KAAM,IAAInG,WAAU,uEAEtBmG,GAAiBR,MAEjBsB,IAAAA,EA8BJ,MA1BAhB,GAAYA,EAAUiB,OAAO,SAAS1B,GACpC,MAAOA,GAASG,QAAU,GAAKH,EAASG,QAAU,IAsB/CsB,GACHjB,IAEKC,EAvST,GAAIpB,IACFsC,YACE,kBACA,qBACA,iBACA,mBACA,uBACA,mBACA,iBACA,mBAEFC,QACE,iBACA,iBACA,iBACA,mBACA,mBACA,mBACA,oBACA,oBACA,oBACA,kBACA,kBACA,mBAEFC,cACE,oBACA,oBACA,qBAEFC,aACE,iBACA,mBACA,oBACA,mBAEFC,YACE,kBACA,kBACA,mBAEFC,cACE,sBACA,uBACA,0BACA,0BAEFC,aACE,mBACA,mBACA,oBAEFC,WACE,iBACA,iBACA,kBAEFC,aACE,iBACA,mBACA,oBACA,mBAEFC,MACE,WACA,aACA,aAEFC,MACE,aACA,WACA,YACA,cACA,aACA,cAEFC,QACE,YACA,cACA,eACA,cAEFC,SACE,eACA,eACA,gBAEFC,SACE,aACA,eACA,gBACA,gBAIAlD,EAAwBnF,SAASsI,gBAAgB,+BAAgC,OAEjFC,GACFC,KAAM,MACNC,OAAQ,MACRC,MAAO,OAGL9D,GACF+D,kBAAmBJ,EACnBK,gBAAiBL,EACjBM,iBAAkBN,EAClBO,eAAgBP,EAChBQ,UACEC,WAAY,MACZC,UAAW,MACXC,MAAS,MACTT,OAAU,OACVU,MAAS,OACTC,UAAW,OACXC,WAAY,QAEdC,YACEC,OAAQ,MACRC,KAAM,OAERC,aAAclB,EACdmB,YACEC,KAAM,2BAERC,WACED,KAAM,+BA4KVtN,GAAOkJ,mBAAqBA,EAC5BlJ,EAAO+J,mBAAqBA,GAM3BjK,GClTH,SAAUE,GAER,GAAIwN,KAEJxN,GAAOoB,aAAe,SAASqM,EAASC,EAAMC,EAAQC,GAKpD,GAAIC,GAAUD,EAAS,MAAQ,KAC3BE,EAAQ,GAAIC,MACZC,EAAS,GAAID,MAAKL,EAGtB,OAFAM,GAAOC,SAASD,EAAOE,WAAa,KAEhCJ,EAAQE,IACJP,IAAWD,IACfW,QAAQC,KAAK,mBAAqBX,EAAU,IAAMI,EAAU,wCAA0CG,EAAOK,eAAiB,KAAOV,GAEvIH,EAASC,IAAAA,EAAW,KAOxBzN,EAAOsO,WAAa,SAASb,EAASC,EAAMC,EAAQC,GAClD,GAAIC,GAAUD,EAAS,MAAQ,IAC/B,IAAI5N,EAAOoB,aAAaqM,EAASC,EAAMC,EAAQC,GAC7C,KAAM,IAAIW,OAAMd,EAAU,IAAMI,EAAU,yBAA2BF,KAIxE7N,62mCChCH,WAEE,OAAA,KAAI6D,SAASC,cAAc,OAAO4K,YAAYC,SAA9C,CAKE,GAAIC,EACC,IAAIrE,OAAOsE,aAAeA,YAAYD,IAC3C,GAAIA,GAAM,WAAa,MAAOC,aAAYD,WAE1C,IAAIA,GAAM,WAAa,MAAOX,MAAKW,MAGrC,IAAIE,GAAuB,SAASC,EAAQC,EAAaC,GACvDxO,KAAKsO,OAASA,EACdtO,KAAKuO,YAAcA,EACnBvO,KAAKwO,aAAeA,EAEpBxO,KAAKqK,KAAO,SACZrK,KAAKyO,SAAAA,EACLzO,KAAK0O,YAAAA,EACL1O,KAAK2O,cAAgBL,EACrBtO,KAAK4O,kBAAAA,EACL5O,KAAK6O,WAAaC,MAAMC,UACxB/O,KAAKgP,UAAYxB,KAAKW,OAGpBc,EAAyBnF,OAAOoF,QAAQrI,UAAUoH,OACtDnE,QAAOoF,QAAQrI,UAAUoH,QAAU,SAASrF,EAAauG,GACvD,GAAIC,GAAYH,EAAuBI,KAAKrP,KAAM4I,EAAauG,EAE/DC,GAAUE,mBACVF,EAAUlB,SAAW,IAErB,IAAIqB,GAAiBH,EAAUI,MAC/BJ,GAAUI,OAAS,WACjBD,EAAeF,KAAKrP,KACpB,IAAIyP,GAAQ,GAAIpB,GAAqBrO,KAAM,KAAMmO,KAC7CuB,EAAW1P,KAAKsP,gBAAgBK,OAAO3P,KAAKkO,UAAYlO,KAAKkO,aACjE0B,YAAW,WACTF,EAASnO,QAAQ,SAASsO,GACxBA,EAAQR,KAAKI,EAAMnB,OAAQmB,MAE5B,GAGL,IAAIK,GAA2BV,EAAUW,gBACzCX,GAAUW,iBAAmB,SAAS1F,EAAMwF,GACpB,kBAAXA,IAAiC,UAARxF,EAClCrK,KAAKsP,gBAAgBhG,KAAKuG,GAE1BC,EAAyBT,KAAKrP,KAAMqK,EAAMwF,GAG9C,IAAIG,GAA8BZ,EAAUa,mBAW5C,OAVAb,GAAUa,oBAAsB,SAAS5F,EAAMwF,GAC7C,GAAY,UAARxF,EAAkB,CACpB,GAAI6F,GAAQlQ,KAAKsP,gBAAgB5N,QAAQmO,EACrCK,IAAS,GACXlQ,KAAKsP,gBAAgBa,OAAOD,EAAO,OAErCF,GAA4BX,KAAKrP,KAAMqK,EAAMwF,IAI1CT,OClEX,SAAU3P,GAgBR,GAAI2Q,GAAUhN,SAASiN,gBACnBjB,EAAY,KACZkB,GAAAA,CACJ,KACE,GAAIC,GAAkBC,iBAAiBJ,GAASK,iBAAiB,WAC7DC,EAAiC,KAAnBH,EAAyB,IAAM,GACjDnB,GAAYgB,EAAQnC,SAAS0C,SAAYD,EAAaA,KACjDvP,SAAU,IACfiO,EAAUb,YAAc,EACxB+B,EAAWE,iBAAiBJ,GAASK,iBAAiB,YAAcC,EACpE,MAAOE,IACP,QACIxB,GACFA,EAAUI,SAEd,IAAIc,EAAJ,CAIA,GAAIrB,GAAyBnF,OAAOoF,QAAQrI,UAAUoH,OACtDnE,QAAOoF,QAAQrI,UAAUoH,QAAU,SAASrF,EAAauG,GAUvD,MATIrF,QAAOC,QAAUA,OAAOC,UAAYjB,MAAMlC,UAAUoD,MAAQrB,EAAYmB,OAAOC,YAEjFpB,EAAcG,MAAMkB,KAAKrB,IAGtBG,MAAMC,QAAQJ,IAAgC,OAAhBA,IACjCA,EAAcnJ,EAAOkJ,mBAAmBC,IAGnCqG,EAAuBI,KAAKrP,KAAM4I,EAAauG,MAEvD5P,GL9CCsR,EAAAA,KAEJC,MACMC,WAAAA,MAAuB/Q","file":"web-animations.min.js"} \ No newline at end of file