@angular/animations 14.0.0-next.1 → 14.0.0-next.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/animations.d.ts +10 -2
- package/browser/browser.d.ts +15 -7
- package/browser/testing/testing.d.ts +2 -1
- package/esm2020/browser/src/dsl/animation.mjs +10 -6
- package/esm2020/browser/src/dsl/animation_ast_builder.mjs +24 -18
- package/esm2020/browser/src/dsl/animation_timeline_builder.mjs +8 -4
- package/esm2020/browser/src/dsl/animation_transition_expr.mjs +4 -3
- package/esm2020/browser/src/dsl/animation_transition_factory.mjs +5 -2
- package/esm2020/browser/src/dsl/animation_transition_instruction.mjs +1 -1
- package/esm2020/browser/src/dsl/animation_trigger.mjs +1 -1
- package/esm2020/browser/src/dsl/style_normalization/animation_style_normalizer.mjs +1 -1
- package/esm2020/browser/src/dsl/style_normalization/web_animations_style_normalizer.mjs +3 -2
- package/esm2020/browser/src/error_helpers.mjs +135 -0
- package/esm2020/browser/src/errors.mjs +9 -0
- package/esm2020/browser/src/private_export.mjs +2 -2
- package/esm2020/browser/src/render/animation_driver.mjs +8 -5
- package/esm2020/browser/src/render/animation_engine_next.mjs +9 -3
- package/esm2020/browser/src/render/shared.mjs +16 -5
- package/esm2020/browser/src/render/timeline_animation_engine.mjs +12 -6
- package/esm2020/browser/src/render/transition_animation_engine.mjs +28 -16
- package/esm2020/browser/src/render/web_animations/web_animations_driver.mjs +5 -2
- package/esm2020/browser/src/util.mjs +9 -8
- package/esm2020/browser/src/warning_helpers.mjs +33 -0
- package/esm2020/browser/testing/src/mock_animation_driver.mjs +5 -2
- package/esm2020/src/animation_metadata.mjs +10 -2
- package/esm2020/src/version.mjs +1 -1
- package/fesm2015/animations.mjs +10 -2
- package/fesm2015/animations.mjs.map +1 -1
- package/fesm2015/browser/testing.mjs +5 -2
- package/fesm2015/browser/testing.mjs.map +1 -1
- package/fesm2015/browser.mjs +283 -68
- package/fesm2015/browser.mjs.map +1 -1
- package/fesm2020/animations.mjs +10 -2
- package/fesm2020/animations.mjs.map +1 -1
- package/fesm2020/browser/testing.mjs +5 -2
- package/fesm2020/browser/testing.mjs.map +1 -1
- package/fesm2020/browser.mjs +282 -68
- package/fesm2020/browser.mjs.map +1 -1
- package/package.json +2 -2
package/fesm2020/browser.mjs
CHANGED
|
@@ -1,12 +1,146 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v14.0.0-next.
|
|
2
|
+
* @license Angular v14.0.0-next.4
|
|
3
3
|
* (c) 2010-2022 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { ɵAnimationGroupPlayer, NoopAnimationPlayer, AUTO_STYLE, ɵPRE_STYLE, sequence, style } from '@angular/animations';
|
|
8
8
|
import * as i0 from '@angular/core';
|
|
9
|
-
import { Injectable } from '@angular/core';
|
|
9
|
+
import { ɵRuntimeError, Injectable } from '@angular/core';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @license
|
|
13
|
+
* Copyright Google LLC All Rights Reserved.
|
|
14
|
+
*
|
|
15
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
16
|
+
* found in the LICENSE file at https://angular.io/license
|
|
17
|
+
*/
|
|
18
|
+
const NG_DEV_MODE$1 = typeof ngDevMode === 'undefined' || !!ngDevMode;
|
|
19
|
+
const LINE_START = '\n - ';
|
|
20
|
+
function invalidTimingValue(exp) {
|
|
21
|
+
return new ɵRuntimeError(3000 /* INVALID_TIMING_VALUE */, NG_DEV_MODE$1 && `The provided timing value "${exp}" is invalid.`);
|
|
22
|
+
}
|
|
23
|
+
function negativeStepValue() {
|
|
24
|
+
return new ɵRuntimeError(3100 /* NEGATIVE_STEP_VALUE */, NG_DEV_MODE$1 && 'Duration values below 0 are not allowed for this animation step.');
|
|
25
|
+
}
|
|
26
|
+
function negativeDelayValue() {
|
|
27
|
+
return new ɵRuntimeError(3101 /* NEGATIVE_DELAY_VALUE */, NG_DEV_MODE$1 && 'Delay values below 0 are not allowed for this animation step.');
|
|
28
|
+
}
|
|
29
|
+
function invalidStyleParams(varName) {
|
|
30
|
+
return new ɵRuntimeError(3001 /* INVALID_STYLE_PARAMS */, NG_DEV_MODE$1 &&
|
|
31
|
+
`Unable to resolve the local animation param ${varName} in the given list of values`);
|
|
32
|
+
}
|
|
33
|
+
function invalidParamValue(varName) {
|
|
34
|
+
return new ɵRuntimeError(3003 /* INVALID_PARAM_VALUE */, NG_DEV_MODE$1 && `Please provide a value for the animation param ${varName}`);
|
|
35
|
+
}
|
|
36
|
+
function invalidNodeType(nodeType) {
|
|
37
|
+
return new ɵRuntimeError(3004 /* INVALID_NODE_TYPE */, NG_DEV_MODE$1 && `Unable to resolve animation metadata node #${nodeType}`);
|
|
38
|
+
}
|
|
39
|
+
function invalidCssUnitValue(userProvidedProperty, value) {
|
|
40
|
+
return new ɵRuntimeError(3005 /* INVALID_CSS_UNIT_VALUE */, NG_DEV_MODE$1 && `Please provide a CSS unit value for ${userProvidedProperty}:${value}`);
|
|
41
|
+
}
|
|
42
|
+
function invalidTrigger() {
|
|
43
|
+
return new ɵRuntimeError(3006 /* INVALID_TRIGGER */, NG_DEV_MODE$1 &&
|
|
44
|
+
'animation triggers cannot be prefixed with an `@` sign (e.g. trigger(\'@foo\', [...]))');
|
|
45
|
+
}
|
|
46
|
+
function invalidDefinition() {
|
|
47
|
+
return new ɵRuntimeError(3007 /* INVALID_DEFINITION */, NG_DEV_MODE$1 && 'only state() and transition() definitions can sit inside of a trigger()');
|
|
48
|
+
}
|
|
49
|
+
function invalidState(metadataName, missingSubs) {
|
|
50
|
+
return new ɵRuntimeError(3008 /* INVALID_STATE */, NG_DEV_MODE$1 &&
|
|
51
|
+
`state("${metadataName}", ...) must define default values for all the following style substitutions: ${missingSubs.join(', ')}`);
|
|
52
|
+
}
|
|
53
|
+
function invalidStyleValue(value) {
|
|
54
|
+
return new ɵRuntimeError(3002 /* INVALID_STYLE_VALUE */, NG_DEV_MODE$1 && `The provided style string value ${value} is not allowed.`);
|
|
55
|
+
}
|
|
56
|
+
function invalidProperty(prop) {
|
|
57
|
+
return new ɵRuntimeError(3009 /* INVALID_PROPERTY */, NG_DEV_MODE$1 &&
|
|
58
|
+
`The provided animation property "${prop}" is not a supported CSS property for animations`);
|
|
59
|
+
}
|
|
60
|
+
function invalidParallelAnimation(prop, firstStart, firstEnd, secondStart, secondEnd) {
|
|
61
|
+
return new ɵRuntimeError(3010 /* INVALID_PARALLEL_ANIMATION */, NG_DEV_MODE$1 &&
|
|
62
|
+
`The CSS property "${prop}" that exists between the times of "${firstStart}ms" and "${firstEnd}ms" is also being animated in a parallel animation between the times of "${secondStart}ms" and "${secondEnd}ms"`);
|
|
63
|
+
}
|
|
64
|
+
function invalidKeyframes() {
|
|
65
|
+
return new ɵRuntimeError(3011 /* INVALID_KEYFRAMES */, NG_DEV_MODE$1 && `keyframes() must be placed inside of a call to animate()`);
|
|
66
|
+
}
|
|
67
|
+
function invalidOffset() {
|
|
68
|
+
return new ɵRuntimeError(3012 /* INVALID_OFFSET */, NG_DEV_MODE$1 && `Please ensure that all keyframe offsets are between 0 and 1`);
|
|
69
|
+
}
|
|
70
|
+
function keyframeOffsetsOutOfOrder() {
|
|
71
|
+
return new ɵRuntimeError(3200 /* KEYFRAME_OFFSETS_OUT_OF_ORDER */, NG_DEV_MODE$1 && `Please ensure that all keyframe offsets are in order`);
|
|
72
|
+
}
|
|
73
|
+
function keyframesMissingOffsets() {
|
|
74
|
+
return new ɵRuntimeError(3202 /* KEYFRAMES_MISSING_OFFSETS */, NG_DEV_MODE$1 && `Not all style() steps within the declared keyframes() contain offsets`);
|
|
75
|
+
}
|
|
76
|
+
function invalidStagger() {
|
|
77
|
+
return new ɵRuntimeError(3013 /* INVALID_STAGGER */, NG_DEV_MODE$1 && `stagger() can only be used inside of query()`);
|
|
78
|
+
}
|
|
79
|
+
function invalidQuery(selector) {
|
|
80
|
+
return new ɵRuntimeError(3014 /* INVALID_QUERY */, NG_DEV_MODE$1 &&
|
|
81
|
+
`\`query("${selector}")\` returned zero elements. (Use \`query("${selector}", { optional: true })\` if you wish to allow this.)`);
|
|
82
|
+
}
|
|
83
|
+
function invalidExpression(expr) {
|
|
84
|
+
return new ɵRuntimeError(3015 /* INVALID_EXPRESSION */, NG_DEV_MODE$1 && `The provided transition expression "${expr}" is not supported`);
|
|
85
|
+
}
|
|
86
|
+
function invalidTransitionAlias(alias) {
|
|
87
|
+
return new ɵRuntimeError(3016 /* INVALID_TRANSITION_ALIAS */, NG_DEV_MODE$1 && `The transition alias value "${alias}" is not supported`);
|
|
88
|
+
}
|
|
89
|
+
function validationFailed(errors) {
|
|
90
|
+
return new ɵRuntimeError(3500 /* VALIDATION_FAILED */, NG_DEV_MODE$1 && `animation validation failed:\n${errors.map(err => err.message).join('\n')}`);
|
|
91
|
+
}
|
|
92
|
+
function buildingFailed(errors) {
|
|
93
|
+
return new ɵRuntimeError(3501 /* BUILDING_FAILED */, NG_DEV_MODE$1 && `animation building failed:\n${errors.map(err => err.message).join('\n')}`);
|
|
94
|
+
}
|
|
95
|
+
function triggerBuildFailed(name, errors) {
|
|
96
|
+
return new ɵRuntimeError(3404 /* TRIGGER_BUILD_FAILED */, NG_DEV_MODE$1 &&
|
|
97
|
+
`The animation trigger "${name}" has failed to build due to the following errors:\n - ${errors.map(err => err.message).join('\n - ')}`);
|
|
98
|
+
}
|
|
99
|
+
function animationFailed(errors) {
|
|
100
|
+
return new ɵRuntimeError(3502 /* ANIMATION_FAILED */, NG_DEV_MODE$1 &&
|
|
101
|
+
`Unable to animate due to the following errors:${LINE_START}${errors.map(err => err.message).join(LINE_START)}`);
|
|
102
|
+
}
|
|
103
|
+
function registerFailed(errors) {
|
|
104
|
+
return new ɵRuntimeError(3503 /* REGISTRATION_FAILED */, NG_DEV_MODE$1 &&
|
|
105
|
+
`Unable to build the animation due to the following errors: ${errors.map(err => err.message).join('\n')}`);
|
|
106
|
+
}
|
|
107
|
+
function missingOrDestroyedAnimation() {
|
|
108
|
+
return new ɵRuntimeError(3300 /* MISSING_OR_DESTROYED_ANIMATION */, NG_DEV_MODE$1 && 'The requested animation doesn\'t exist or has already been destroyed');
|
|
109
|
+
}
|
|
110
|
+
function createAnimationFailed(errors) {
|
|
111
|
+
return new ɵRuntimeError(3504 /* CREATE_ANIMATION_FAILED */, NG_DEV_MODE$1 &&
|
|
112
|
+
`Unable to create the animation due to the following errors:${errors.map(err => err.message).join('\n')}`);
|
|
113
|
+
}
|
|
114
|
+
function missingPlayer(id) {
|
|
115
|
+
return new ɵRuntimeError(3301 /* MISSING_PLAYER */, NG_DEV_MODE$1 && `Unable to find the timeline player referenced by ${id}`);
|
|
116
|
+
}
|
|
117
|
+
function missingTrigger(phase, name) {
|
|
118
|
+
return new ɵRuntimeError(3302 /* MISSING_TRIGGER */, NG_DEV_MODE$1 &&
|
|
119
|
+
`Unable to listen on the animation trigger event "${phase}" because the animation trigger "${name}" doesn\'t exist!`);
|
|
120
|
+
}
|
|
121
|
+
function missingEvent(name) {
|
|
122
|
+
return new ɵRuntimeError(3303 /* MISSING_EVENT */, NG_DEV_MODE$1 &&
|
|
123
|
+
`Unable to listen on the animation trigger "${name}" because the provided event is undefined!`);
|
|
124
|
+
}
|
|
125
|
+
function unsupportedTriggerEvent(phase, name) {
|
|
126
|
+
return new ɵRuntimeError(3400 /* UNSUPPORTED_TRIGGER_EVENT */, NG_DEV_MODE$1 &&
|
|
127
|
+
`The provided animation trigger event "${phase}" for the animation trigger "${name}" is not supported!`);
|
|
128
|
+
}
|
|
129
|
+
function unregisteredTrigger(name) {
|
|
130
|
+
return new ɵRuntimeError(3401 /* UNREGISTERED_TRIGGER */, NG_DEV_MODE$1 && `The provided animation trigger "${name}" has not been registered!`);
|
|
131
|
+
}
|
|
132
|
+
function triggerTransitionsFailed(errors) {
|
|
133
|
+
return new ɵRuntimeError(3402 /* TRIGGER_TRANSITIONS_FAILED */, NG_DEV_MODE$1 &&
|
|
134
|
+
`Unable to process animations due to the following failed trigger transitions\n ${errors.map(err => err.message).join('\n')}`);
|
|
135
|
+
}
|
|
136
|
+
function triggerParsingFailed(name, errors) {
|
|
137
|
+
return new ɵRuntimeError(3403 /* TRIGGER_PARSING_FAILED */, NG_DEV_MODE$1 &&
|
|
138
|
+
`Animation parsing for the ${name} trigger have failed:${LINE_START}${errors.map(err => err.message).join(LINE_START)}`);
|
|
139
|
+
}
|
|
140
|
+
function transitionFailed(name, errors) {
|
|
141
|
+
return new ɵRuntimeError(3505 /* TRANSITION_FAILED */, NG_DEV_MODE$1 &&
|
|
142
|
+
`@${name} has failed due to:\n ${errors.map(err => err.message).join('\n- ')}`);
|
|
143
|
+
}
|
|
10
144
|
|
|
11
145
|
/**
|
|
12
146
|
* @license
|
|
@@ -72,8 +206,7 @@ function normalizeKeyframes$1(driver, normalizer, element, keyframes, preStyles
|
|
|
72
206
|
previousOffset = offset;
|
|
73
207
|
});
|
|
74
208
|
if (errors.length) {
|
|
75
|
-
|
|
76
|
-
throw new Error(`Unable to animate due to the following errors:${LINE_START}${errors.join(LINE_START)}`);
|
|
209
|
+
throw animationFailed(errors);
|
|
77
210
|
}
|
|
78
211
|
return normalizedKeyframes;
|
|
79
212
|
}
|
|
@@ -120,6 +253,14 @@ let _contains = (elm1, elm2) => false;
|
|
|
120
253
|
let _query = (element, selector, multi) => {
|
|
121
254
|
return [];
|
|
122
255
|
};
|
|
256
|
+
let _documentElement = null;
|
|
257
|
+
function getParentElement(element) {
|
|
258
|
+
const parent = element.parentNode || element.host; // consider host to support shadow DOM
|
|
259
|
+
if (parent === _documentElement) {
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
return parent;
|
|
263
|
+
}
|
|
123
264
|
// Define utility methods for browsers and platform-server(domino) where Element
|
|
124
265
|
// and utility methods exist.
|
|
125
266
|
const _isNode = isNode();
|
|
@@ -128,12 +269,15 @@ if (_isNode || typeof Element !== 'undefined') {
|
|
|
128
269
|
_contains = (elm1, elm2) => elm1.contains(elm2);
|
|
129
270
|
}
|
|
130
271
|
else {
|
|
272
|
+
// Read the document element in an IIFE that's been marked pure to avoid a top-level property
|
|
273
|
+
// read that may prevent tree-shaking.
|
|
274
|
+
_documentElement = /* @__PURE__ */ (() => document.documentElement)();
|
|
131
275
|
_contains = (elm1, elm2) => {
|
|
132
|
-
while (elm2
|
|
276
|
+
while (elm2) {
|
|
133
277
|
if (elm2 === elm1) {
|
|
134
278
|
return true;
|
|
135
279
|
}
|
|
136
|
-
elm2 = elm2
|
|
280
|
+
elm2 = getParentElement(elm2);
|
|
137
281
|
}
|
|
138
282
|
return false;
|
|
139
283
|
};
|
|
@@ -206,6 +350,9 @@ class NoopAnimationDriver {
|
|
|
206
350
|
containsElement(elm1, elm2) {
|
|
207
351
|
return containsElement(elm1, elm2);
|
|
208
352
|
}
|
|
353
|
+
getParentElement(element) {
|
|
354
|
+
return getParentElement(element);
|
|
355
|
+
}
|
|
209
356
|
query(element, selector, multi) {
|
|
210
357
|
return invokeQuery(element, selector, multi);
|
|
211
358
|
}
|
|
@@ -216,9 +363,9 @@ class NoopAnimationDriver {
|
|
|
216
363
|
return new NoopAnimationPlayer(duration, delay);
|
|
217
364
|
}
|
|
218
365
|
}
|
|
219
|
-
NoopAnimationDriver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0-next.
|
|
220
|
-
NoopAnimationDriver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.0-next.
|
|
221
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-next.
|
|
366
|
+
NoopAnimationDriver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0-next.4", ngImport: i0, type: NoopAnimationDriver, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
367
|
+
NoopAnimationDriver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.0-next.4", ngImport: i0, type: NoopAnimationDriver });
|
|
368
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-next.4", ngImport: i0, type: NoopAnimationDriver, decorators: [{
|
|
222
369
|
type: Injectable
|
|
223
370
|
}] });
|
|
224
371
|
/**
|
|
@@ -273,7 +420,7 @@ function parseTimeExpression(exp, errors, allowNegativeValues) {
|
|
|
273
420
|
if (typeof exp === 'string') {
|
|
274
421
|
const matches = exp.match(regex);
|
|
275
422
|
if (matches === null) {
|
|
276
|
-
errors.push(
|
|
423
|
+
errors.push(invalidTimingValue(exp));
|
|
277
424
|
return { duration: 0, delay: 0, easing: '' };
|
|
278
425
|
}
|
|
279
426
|
duration = _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);
|
|
@@ -293,15 +440,15 @@ function parseTimeExpression(exp, errors, allowNegativeValues) {
|
|
|
293
440
|
let containsErrors = false;
|
|
294
441
|
let startIndex = errors.length;
|
|
295
442
|
if (duration < 0) {
|
|
296
|
-
errors.push(
|
|
443
|
+
errors.push(negativeStepValue());
|
|
297
444
|
containsErrors = true;
|
|
298
445
|
}
|
|
299
446
|
if (delay < 0) {
|
|
300
|
-
errors.push(
|
|
447
|
+
errors.push(negativeDelayValue());
|
|
301
448
|
containsErrors = true;
|
|
302
449
|
}
|
|
303
450
|
if (containsErrors) {
|
|
304
|
-
errors.splice(startIndex, 0,
|
|
451
|
+
errors.splice(startIndex, 0, invalidTimingValue(exp));
|
|
305
452
|
}
|
|
306
453
|
}
|
|
307
454
|
return { duration, delay, easing };
|
|
@@ -421,7 +568,7 @@ function validateStyleParams(value, options, errors) {
|
|
|
421
568
|
if (matches.length) {
|
|
422
569
|
matches.forEach(varName => {
|
|
423
570
|
if (!params.hasOwnProperty(varName)) {
|
|
424
|
-
errors.push(
|
|
571
|
+
errors.push(invalidStyleParams(varName));
|
|
425
572
|
}
|
|
426
573
|
});
|
|
427
574
|
}
|
|
@@ -444,7 +591,7 @@ function interpolateParams(value, params, errors) {
|
|
|
444
591
|
let localVal = params[varName];
|
|
445
592
|
// this means that the value was never overridden by the data passed in by the user
|
|
446
593
|
if (!params.hasOwnProperty(varName)) {
|
|
447
|
-
errors.push(
|
|
594
|
+
errors.push(invalidParamValue(varName));
|
|
448
595
|
localVal = '';
|
|
449
596
|
}
|
|
450
597
|
return localVal.toString();
|
|
@@ -519,13 +666,46 @@ function visitDslNode(visitor, node, context) {
|
|
|
519
666
|
case 12 /* Stagger */:
|
|
520
667
|
return visitor.visitStagger(node, context);
|
|
521
668
|
default:
|
|
522
|
-
throw
|
|
669
|
+
throw invalidNodeType(node.type);
|
|
523
670
|
}
|
|
524
671
|
}
|
|
525
672
|
function computeStyle(element, prop) {
|
|
526
673
|
return window.getComputedStyle(element)[prop];
|
|
527
674
|
}
|
|
528
675
|
|
|
676
|
+
/**
|
|
677
|
+
* @license
|
|
678
|
+
* Copyright Google LLC All Rights Reserved.
|
|
679
|
+
*
|
|
680
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
681
|
+
* found in the LICENSE file at https://angular.io/license
|
|
682
|
+
*/
|
|
683
|
+
const NG_DEV_MODE = typeof ngDevMode === 'undefined' || !!ngDevMode;
|
|
684
|
+
function createListOfWarnings(warnings) {
|
|
685
|
+
const LINE_START = '\n - ';
|
|
686
|
+
return `${LINE_START}${warnings.filter(Boolean).map(warning => warning).join(LINE_START)}`;
|
|
687
|
+
}
|
|
688
|
+
function warnValidation(warnings) {
|
|
689
|
+
NG_DEV_MODE && console.warn(`animation validation warnings:${createListOfWarnings(warnings)}`);
|
|
690
|
+
}
|
|
691
|
+
function warnTriggerBuild(name, warnings) {
|
|
692
|
+
NG_DEV_MODE &&
|
|
693
|
+
console.warn(`The animation trigger "${name}" has built with the following warnings:${createListOfWarnings(warnings)}`);
|
|
694
|
+
}
|
|
695
|
+
function warnRegister(warnings) {
|
|
696
|
+
NG_DEV_MODE &&
|
|
697
|
+
console.warn(`Animation built with the following warnings:${createListOfWarnings(warnings)}`);
|
|
698
|
+
}
|
|
699
|
+
function triggerParsingWarnings(name, warnings) {
|
|
700
|
+
NG_DEV_MODE &&
|
|
701
|
+
console.warn(`Animation parsing for the ${name} trigger presents the following warnings:${createListOfWarnings(warnings)}`);
|
|
702
|
+
}
|
|
703
|
+
function pushUnrecognizedPropertiesWarning(warnings, props) {
|
|
704
|
+
if (ngDevMode && props.length) {
|
|
705
|
+
warnings.push(`The provided CSS properties are not recognized properties supported for animations: ${props.join(', ')}`);
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
|
|
529
709
|
/**
|
|
530
710
|
* @license
|
|
531
711
|
* Copyright Google LLC All Rights Reserved.
|
|
@@ -555,7 +735,7 @@ function parseInnerTransitionStr(eventStr, expressions, errors) {
|
|
|
555
735
|
}
|
|
556
736
|
const match = eventStr.match(/^(\*|[-\w]+)\s*(<?[=-]>)\s*(\*|[-\w]+)$/);
|
|
557
737
|
if (match == null || match.length < 4) {
|
|
558
|
-
errors.push(
|
|
738
|
+
errors.push(invalidExpression(eventStr));
|
|
559
739
|
return expressions;
|
|
560
740
|
}
|
|
561
741
|
const fromState = match[1];
|
|
@@ -578,7 +758,7 @@ function parseAnimationAlias(alias, errors) {
|
|
|
578
758
|
case ':decrement':
|
|
579
759
|
return (fromState, toState) => parseFloat(toState) < parseFloat(fromState);
|
|
580
760
|
default:
|
|
581
|
-
errors.push(
|
|
761
|
+
errors.push(invalidTransitionAlias(alias));
|
|
582
762
|
return '* => *';
|
|
583
763
|
}
|
|
584
764
|
}
|
|
@@ -649,18 +829,22 @@ const SELF_TOKEN_REGEX = new RegExp(`\s*${SELF_TOKEN}\s*,?`, 'g');
|
|
|
649
829
|
*
|
|
650
830
|
* Otherwise an error will be thrown.
|
|
651
831
|
*/
|
|
652
|
-
function buildAnimationAst(driver, metadata, errors) {
|
|
653
|
-
return new AnimationAstBuilderVisitor(driver).build(metadata, errors);
|
|
832
|
+
function buildAnimationAst(driver, metadata, errors, warnings) {
|
|
833
|
+
return new AnimationAstBuilderVisitor(driver).build(metadata, errors, warnings);
|
|
654
834
|
}
|
|
655
835
|
const ROOT_SELECTOR = '';
|
|
656
836
|
class AnimationAstBuilderVisitor {
|
|
657
837
|
constructor(_driver) {
|
|
658
838
|
this._driver = _driver;
|
|
659
839
|
}
|
|
660
|
-
build(metadata, errors) {
|
|
840
|
+
build(metadata, errors, warnings) {
|
|
661
841
|
const context = new AnimationAstBuilderContext(errors);
|
|
662
842
|
this._resetContextStyleTimingState(context);
|
|
663
|
-
|
|
843
|
+
const ast = visitDslNode(this, normalizeAnimationEntry(metadata), context);
|
|
844
|
+
if (context.unsupportedCSSPropertiesFound.size) {
|
|
845
|
+
pushUnrecognizedPropertiesWarning(warnings, [...context.unsupportedCSSPropertiesFound.keys()]);
|
|
846
|
+
}
|
|
847
|
+
return ast;
|
|
664
848
|
}
|
|
665
849
|
_resetContextStyleTimingState(context) {
|
|
666
850
|
context.currentQuerySelector = ROOT_SELECTOR;
|
|
@@ -674,7 +858,7 @@ class AnimationAstBuilderVisitor {
|
|
|
674
858
|
const states = [];
|
|
675
859
|
const transitions = [];
|
|
676
860
|
if (metadata.name.charAt(0) == '@') {
|
|
677
|
-
context.errors.push(
|
|
861
|
+
context.errors.push(invalidTrigger());
|
|
678
862
|
}
|
|
679
863
|
metadata.definitions.forEach(def => {
|
|
680
864
|
this._resetContextStyleTimingState(context);
|
|
@@ -694,7 +878,7 @@ class AnimationAstBuilderVisitor {
|
|
|
694
878
|
transitions.push(transition);
|
|
695
879
|
}
|
|
696
880
|
else {
|
|
697
|
-
context.errors.push(
|
|
881
|
+
context.errors.push(invalidDefinition());
|
|
698
882
|
}
|
|
699
883
|
});
|
|
700
884
|
return {
|
|
@@ -726,8 +910,7 @@ class AnimationAstBuilderVisitor {
|
|
|
726
910
|
});
|
|
727
911
|
if (missingSubs.size) {
|
|
728
912
|
const missingSubsArr = iteratorToArray(missingSubs.values());
|
|
729
|
-
context.errors.push(
|
|
730
|
-
.name}", ...) must define default values for all the following style substitutions: ${missingSubsArr.join(', ')}`);
|
|
913
|
+
context.errors.push(invalidState(metadata.name, missingSubsArr));
|
|
731
914
|
}
|
|
732
915
|
}
|
|
733
916
|
return {
|
|
@@ -820,7 +1003,7 @@ class AnimationAstBuilderVisitor {
|
|
|
820
1003
|
styles.push(styleTuple);
|
|
821
1004
|
}
|
|
822
1005
|
else {
|
|
823
|
-
context.errors.push(
|
|
1006
|
+
context.errors.push(invalidStyleValue(styleTuple));
|
|
824
1007
|
}
|
|
825
1008
|
}
|
|
826
1009
|
else {
|
|
@@ -866,7 +1049,8 @@ class AnimationAstBuilderVisitor {
|
|
|
866
1049
|
return;
|
|
867
1050
|
tuple.forEach((value, prop) => {
|
|
868
1051
|
if (!this._driver.validateStyleProperty(prop)) {
|
|
869
|
-
|
|
1052
|
+
tuple.delete(prop);
|
|
1053
|
+
context.unsupportedCSSPropertiesFound.add(prop);
|
|
870
1054
|
return;
|
|
871
1055
|
}
|
|
872
1056
|
// This is guaranteed to have a defined Map at this querySelector location making it
|
|
@@ -877,8 +1061,7 @@ class AnimationAstBuilderVisitor {
|
|
|
877
1061
|
if (collectedEntry) {
|
|
878
1062
|
if (startTime != endTime && startTime >= collectedEntry.startTime &&
|
|
879
1063
|
endTime <= collectedEntry.endTime) {
|
|
880
|
-
context.errors.push(
|
|
881
|
-
.endTime}ms" is also being animated in a parallel animation between the times of "${startTime}ms" and "${endTime}ms"`);
|
|
1064
|
+
context.errors.push(invalidParallelAnimation(prop, collectedEntry.startTime, collectedEntry.endTime, startTime, endTime));
|
|
882
1065
|
updateCollectedStyle = false;
|
|
883
1066
|
}
|
|
884
1067
|
// we always choose the smaller start time value since we
|
|
@@ -898,7 +1081,7 @@ class AnimationAstBuilderVisitor {
|
|
|
898
1081
|
visitKeyframes(metadata, context) {
|
|
899
1082
|
const ast = { type: 5 /* Keyframes */, styles: [], options: null };
|
|
900
1083
|
if (!context.currentAnimateTimings) {
|
|
901
|
-
context.errors.push(
|
|
1084
|
+
context.errors.push(invalidKeyframes());
|
|
902
1085
|
return ast;
|
|
903
1086
|
}
|
|
904
1087
|
const MAX_KEYFRAME_OFFSET = 1;
|
|
@@ -922,15 +1105,15 @@ class AnimationAstBuilderVisitor {
|
|
|
922
1105
|
return style;
|
|
923
1106
|
});
|
|
924
1107
|
if (keyframesOutOfRange) {
|
|
925
|
-
context.errors.push(
|
|
1108
|
+
context.errors.push(invalidOffset());
|
|
926
1109
|
}
|
|
927
1110
|
if (offsetsOutOfOrder) {
|
|
928
|
-
context.errors.push(
|
|
1111
|
+
context.errors.push(keyframeOffsetsOutOfOrder());
|
|
929
1112
|
}
|
|
930
1113
|
const length = metadata.steps.length;
|
|
931
1114
|
let generatedOffset = 0;
|
|
932
1115
|
if (totalKeyframesWithOffsets > 0 && totalKeyframesWithOffsets < length) {
|
|
933
|
-
context.errors.push(
|
|
1116
|
+
context.errors.push(keyframesMissingOffsets());
|
|
934
1117
|
}
|
|
935
1118
|
else if (totalKeyframesWithOffsets == 0) {
|
|
936
1119
|
generatedOffset = MAX_KEYFRAME_OFFSET / (length - 1);
|
|
@@ -996,7 +1179,7 @@ class AnimationAstBuilderVisitor {
|
|
|
996
1179
|
}
|
|
997
1180
|
visitStagger(metadata, context) {
|
|
998
1181
|
if (!context.currentQuery) {
|
|
999
|
-
context.errors.push(
|
|
1182
|
+
context.errors.push(invalidStagger());
|
|
1000
1183
|
}
|
|
1001
1184
|
const timings = metadata.timings === 'full' ?
|
|
1002
1185
|
{ duration: 0, delay: 0, easing: 'full' } :
|
|
@@ -1036,6 +1219,7 @@ class AnimationAstBuilderContext {
|
|
|
1036
1219
|
this.currentTime = 0;
|
|
1037
1220
|
this.collectedStyles = new Map();
|
|
1038
1221
|
this.options = null;
|
|
1222
|
+
this.unsupportedCSSPropertiesFound = new Set();
|
|
1039
1223
|
}
|
|
1040
1224
|
}
|
|
1041
1225
|
function consumeOffset(styles) {
|
|
@@ -1230,6 +1414,8 @@ class AnimationTimelineBuilderVisitor {
|
|
|
1230
1414
|
subInstructions = subInstructions || new ElementInstructionMap();
|
|
1231
1415
|
const context = new AnimationTimelineContext(driver, rootElement, subInstructions, enterClassName, leaveClassName, errors, []);
|
|
1232
1416
|
context.options = options;
|
|
1417
|
+
const delay = options.delay ? resolveTimingValue(options.delay) : 0;
|
|
1418
|
+
context.currentTimeline.delayNextStep(delay);
|
|
1233
1419
|
context.currentTimeline.setStyles([startingStyles], null, context.errors, options);
|
|
1234
1420
|
visitDslNode(this, ast, context);
|
|
1235
1421
|
// this checks to see if an actual animation happened
|
|
@@ -1251,8 +1437,9 @@ class AnimationTimelineBuilderVisitor {
|
|
|
1251
1437
|
lastRootTimeline.setStyles([finalStyles], null, context.errors, options);
|
|
1252
1438
|
}
|
|
1253
1439
|
}
|
|
1254
|
-
return timelines.length ?
|
|
1255
|
-
|
|
1440
|
+
return timelines.length ?
|
|
1441
|
+
timelines.map(timeline => timeline.buildKeyframes()) :
|
|
1442
|
+
[createTimelineInstruction(rootElement, [], [], [], 0, delay, '', false)];
|
|
1256
1443
|
}
|
|
1257
1444
|
visitTrigger(ast, context) {
|
|
1258
1445
|
// these values are not visited in this AST
|
|
@@ -1611,7 +1798,7 @@ class AnimationTimelineContext {
|
|
|
1611
1798
|
results.push(...elements);
|
|
1612
1799
|
}
|
|
1613
1800
|
if (!optional && results.length == 0) {
|
|
1614
|
-
errors.push(
|
|
1801
|
+
errors.push(invalidQuery(originalSelector));
|
|
1615
1802
|
}
|
|
1616
1803
|
return results;
|
|
1617
1804
|
}
|
|
@@ -1889,10 +2076,13 @@ class Animation {
|
|
|
1889
2076
|
constructor(_driver, input) {
|
|
1890
2077
|
this._driver = _driver;
|
|
1891
2078
|
const errors = [];
|
|
1892
|
-
const
|
|
2079
|
+
const warnings = [];
|
|
2080
|
+
const ast = buildAnimationAst(_driver, input, errors, warnings);
|
|
1893
2081
|
if (errors.length) {
|
|
1894
|
-
|
|
1895
|
-
|
|
2082
|
+
throw validationFailed(errors);
|
|
2083
|
+
}
|
|
2084
|
+
if (warnings.length) {
|
|
2085
|
+
warnValidation(warnings);
|
|
1896
2086
|
}
|
|
1897
2087
|
this._animationAst = ast;
|
|
1898
2088
|
}
|
|
@@ -1905,8 +2095,7 @@ class Animation {
|
|
|
1905
2095
|
subInstructions = subInstructions || new ElementInstructionMap();
|
|
1906
2096
|
const result = buildAnimationTimelines(this._driver, element, this._animationAst, ENTER_CLASSNAME, LEAVE_CLASSNAME, start, dest, options, subInstructions, errors);
|
|
1907
2097
|
if (errors.length) {
|
|
1908
|
-
|
|
1909
|
-
throw new Error(errorMessage);
|
|
2098
|
+
throw buildingFailed(errors);
|
|
1910
2099
|
}
|
|
1911
2100
|
return result;
|
|
1912
2101
|
}
|
|
@@ -1988,7 +2177,7 @@ class WebAnimationsStyleNormalizer extends AnimationStyleNormalizer {
|
|
|
1988
2177
|
else {
|
|
1989
2178
|
const valAndSuffixMatch = value.match(/^[+-]?[\d\.]+([a-z]*)$/);
|
|
1990
2179
|
if (valAndSuffixMatch && valAndSuffixMatch[1].length == 0) {
|
|
1991
|
-
errors.push(
|
|
2180
|
+
errors.push(invalidCssUnitValue(userProvidedProperty, value));
|
|
1992
2181
|
}
|
|
1993
2182
|
}
|
|
1994
2183
|
}
|
|
@@ -2050,7 +2239,10 @@ class AnimationTransitionFactory {
|
|
|
2050
2239
|
const preStyleMap = new Map();
|
|
2051
2240
|
const postStyleMap = new Map();
|
|
2052
2241
|
const isRemoval = nextState === 'void';
|
|
2053
|
-
const animationOptions = {
|
|
2242
|
+
const animationOptions = {
|
|
2243
|
+
params: { ...transitionAnimationParams, ...nextAnimationParams },
|
|
2244
|
+
delay: this.ast.options?.delay,
|
|
2245
|
+
};
|
|
2054
2246
|
const timelines = skipAstBuild ?
|
|
2055
2247
|
[] :
|
|
2056
2248
|
buildAnimationTimelines(driver, element, this.ast.animation, enterClassName, leaveClassName, currentStateStyles, nextStateStyles, animationOptions, subInstructions, errors);
|
|
@@ -2184,11 +2376,15 @@ class TimelineAnimationEngine {
|
|
|
2184
2376
|
}
|
|
2185
2377
|
register(id, metadata) {
|
|
2186
2378
|
const errors = [];
|
|
2187
|
-
const
|
|
2379
|
+
const warnings = [];
|
|
2380
|
+
const ast = buildAnimationAst(this._driver, metadata, errors, warnings);
|
|
2188
2381
|
if (errors.length) {
|
|
2189
|
-
throw
|
|
2382
|
+
throw registerFailed(errors);
|
|
2190
2383
|
}
|
|
2191
2384
|
else {
|
|
2385
|
+
if (warnings.length) {
|
|
2386
|
+
warnRegister(warnings);
|
|
2387
|
+
}
|
|
2192
2388
|
this._animations.set(id, ast);
|
|
2193
2389
|
}
|
|
2194
2390
|
}
|
|
@@ -2210,11 +2406,11 @@ class TimelineAnimationEngine {
|
|
|
2210
2406
|
});
|
|
2211
2407
|
}
|
|
2212
2408
|
else {
|
|
2213
|
-
errors.push(
|
|
2409
|
+
errors.push(missingOrDestroyedAnimation());
|
|
2214
2410
|
instructions = [];
|
|
2215
2411
|
}
|
|
2216
2412
|
if (errors.length) {
|
|
2217
|
-
throw
|
|
2413
|
+
throw createAnimationFailed(errors);
|
|
2218
2414
|
}
|
|
2219
2415
|
autoStylesMap.forEach((styles, element) => {
|
|
2220
2416
|
styles.forEach((_, prop) => {
|
|
@@ -2243,7 +2439,7 @@ class TimelineAnimationEngine {
|
|
|
2243
2439
|
_getPlayer(id) {
|
|
2244
2440
|
const player = this._playersById.get(id);
|
|
2245
2441
|
if (!player) {
|
|
2246
|
-
throw
|
|
2442
|
+
throw missingPlayer(id);
|
|
2247
2443
|
}
|
|
2248
2444
|
return player;
|
|
2249
2445
|
}
|
|
@@ -2371,13 +2567,13 @@ class AnimationTransitionNamespace {
|
|
|
2371
2567
|
}
|
|
2372
2568
|
listen(element, name, phase, callback) {
|
|
2373
2569
|
if (!this._triggers.has(name)) {
|
|
2374
|
-
throw
|
|
2570
|
+
throw missingTrigger(phase, name);
|
|
2375
2571
|
}
|
|
2376
2572
|
if (phase == null || phase.length == 0) {
|
|
2377
|
-
throw
|
|
2573
|
+
throw missingEvent(name);
|
|
2378
2574
|
}
|
|
2379
2575
|
if (!isTriggerEventValid(phase)) {
|
|
2380
|
-
throw
|
|
2576
|
+
throw unsupportedTriggerEvent(phase, name);
|
|
2381
2577
|
}
|
|
2382
2578
|
const listeners = getOrSetDefaultValue(this._elementListeners, element, []);
|
|
2383
2579
|
const data = { name, phase, callback };
|
|
@@ -2416,7 +2612,7 @@ class AnimationTransitionNamespace {
|
|
|
2416
2612
|
_getTrigger(name) {
|
|
2417
2613
|
const trigger = this._triggers.get(name);
|
|
2418
2614
|
if (!trigger) {
|
|
2419
|
-
throw
|
|
2615
|
+
throw unregisteredTrigger(name);
|
|
2420
2616
|
}
|
|
2421
2617
|
return trigger;
|
|
2422
2618
|
}
|
|
@@ -2770,25 +2966,37 @@ class TransitionAnimationEngine {
|
|
|
2770
2966
|
return this._namespaceLookup[namespaceId] = ns;
|
|
2771
2967
|
}
|
|
2772
2968
|
_balanceNamespaceList(ns, hostElement) {
|
|
2773
|
-
const
|
|
2969
|
+
const namespaceList = this._namespaceList;
|
|
2970
|
+
const namespacesByHostElement = this.namespacesByHostElement;
|
|
2971
|
+
const limit = namespaceList.length - 1;
|
|
2774
2972
|
if (limit >= 0) {
|
|
2775
2973
|
let found = false;
|
|
2776
|
-
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
|
|
2974
|
+
// Find the closest ancestor with an existing namespace so we can then insert `ns` after it,
|
|
2975
|
+
// establishing a top-down ordering of namespaces in `this._namespaceList`.
|
|
2976
|
+
let ancestor = this.driver.getParentElement(hostElement);
|
|
2977
|
+
while (ancestor) {
|
|
2978
|
+
const ancestorNs = namespacesByHostElement.get(ancestor);
|
|
2979
|
+
if (ancestorNs) {
|
|
2980
|
+
// An animation namespace has been registered for this ancestor, so we insert `ns`
|
|
2981
|
+
// right after it to establish top-down ordering of animation namespaces.
|
|
2982
|
+
const index = namespaceList.indexOf(ancestorNs);
|
|
2983
|
+
namespaceList.splice(index + 1, 0, ns);
|
|
2780
2984
|
found = true;
|
|
2781
2985
|
break;
|
|
2782
2986
|
}
|
|
2987
|
+
ancestor = this.driver.getParentElement(ancestor);
|
|
2783
2988
|
}
|
|
2784
2989
|
if (!found) {
|
|
2785
|
-
|
|
2990
|
+
// No namespace exists that is an ancestor of `ns`, so `ns` is inserted at the front to
|
|
2991
|
+
// ensure that any existing descendants are ordered after `ns`, retaining the desired
|
|
2992
|
+
// top-down ordering.
|
|
2993
|
+
namespaceList.unshift(ns);
|
|
2786
2994
|
}
|
|
2787
2995
|
}
|
|
2788
2996
|
else {
|
|
2789
|
-
|
|
2997
|
+
namespaceList.push(ns);
|
|
2790
2998
|
}
|
|
2791
|
-
|
|
2999
|
+
namespacesByHostElement.set(hostElement, ns);
|
|
2792
3000
|
return ns;
|
|
2793
3001
|
}
|
|
2794
3002
|
register(namespaceId, hostElement) {
|
|
@@ -3052,7 +3260,7 @@ class TransitionAnimationEngine {
|
|
|
3052
3260
|
}
|
|
3053
3261
|
}
|
|
3054
3262
|
reportError(errors) {
|
|
3055
|
-
throw
|
|
3263
|
+
throw triggerTransitionsFailed(errors);
|
|
3056
3264
|
}
|
|
3057
3265
|
_flushAnimations(cleanupFns, microtaskId) {
|
|
3058
3266
|
const subTimelines = new ElementInstructionMap();
|
|
@@ -3214,8 +3422,7 @@ class TransitionAnimationEngine {
|
|
|
3214
3422
|
if (erroneousTransitions.length) {
|
|
3215
3423
|
const errors = [];
|
|
3216
3424
|
erroneousTransitions.forEach(instruction => {
|
|
3217
|
-
errors.push(
|
|
3218
|
-
instruction.errors.forEach(error => errors.push(`- ${error}\n`));
|
|
3425
|
+
errors.push(transitionFailed(instruction.triggerName, instruction.errors));
|
|
3219
3426
|
});
|
|
3220
3427
|
allPlayers.forEach(player => player.destroy());
|
|
3221
3428
|
this.reportError(errors);
|
|
@@ -3814,9 +4021,13 @@ class AnimationEngine {
|
|
|
3814
4021
|
let trigger = this._triggerCache[cacheKey];
|
|
3815
4022
|
if (!trigger) {
|
|
3816
4023
|
const errors = [];
|
|
3817
|
-
const
|
|
4024
|
+
const warnings = [];
|
|
4025
|
+
const ast = buildAnimationAst(this._driver, metadata, errors, warnings);
|
|
3818
4026
|
if (errors.length) {
|
|
3819
|
-
throw
|
|
4027
|
+
throw triggerBuildFailed(name, errors);
|
|
4028
|
+
}
|
|
4029
|
+
if (warnings.length) {
|
|
4030
|
+
warnTriggerBuild(name, warnings);
|
|
3820
4031
|
}
|
|
3821
4032
|
trigger = buildTrigger(name, ast, this._normalizer);
|
|
3822
4033
|
this._triggerCache[cacheKey] = trigger;
|
|
@@ -4137,6 +4348,9 @@ class WebAnimationsDriver {
|
|
|
4137
4348
|
containsElement(elm1, elm2) {
|
|
4138
4349
|
return containsElement(elm1, elm2);
|
|
4139
4350
|
}
|
|
4351
|
+
getParentElement(element) {
|
|
4352
|
+
return getParentElement(element);
|
|
4353
|
+
}
|
|
4140
4354
|
query(element, selector, multi) {
|
|
4141
4355
|
return invokeQuery(element, selector, multi);
|
|
4142
4356
|
}
|
|
@@ -4201,5 +4415,5 @@ class WebAnimationsDriver {
|
|
|
4201
4415
|
* Generated bundle index. Do not edit.
|
|
4202
4416
|
*/
|
|
4203
4417
|
|
|
4204
|
-
export { AnimationDriver, Animation as ɵAnimation, AnimationEngine as ɵAnimationEngine, AnimationStyleNormalizer as ɵAnimationStyleNormalizer, NoopAnimationDriver as ɵNoopAnimationDriver, NoopAnimationStyleNormalizer as ɵNoopAnimationStyleNormalizer, WebAnimationsDriver as ɵWebAnimationsDriver, WebAnimationsPlayer as ɵWebAnimationsPlayer, WebAnimationsStyleNormalizer as ɵWebAnimationsStyleNormalizer, allowPreviousPlayerStylesMerge as ɵallowPreviousPlayerStylesMerge, containsElement as ɵcontainsElement, invokeQuery as ɵinvokeQuery, normalizeKeyframes as ɵnormalizeKeyframes, validateStyleProperty as ɵvalidateStyleProperty };
|
|
4418
|
+
export { AnimationDriver, Animation as ɵAnimation, AnimationEngine as ɵAnimationEngine, AnimationStyleNormalizer as ɵAnimationStyleNormalizer, NoopAnimationDriver as ɵNoopAnimationDriver, NoopAnimationStyleNormalizer as ɵNoopAnimationStyleNormalizer, WebAnimationsDriver as ɵWebAnimationsDriver, WebAnimationsPlayer as ɵWebAnimationsPlayer, WebAnimationsStyleNormalizer as ɵWebAnimationsStyleNormalizer, allowPreviousPlayerStylesMerge as ɵallowPreviousPlayerStylesMerge, containsElement as ɵcontainsElement, getParentElement as ɵgetParentElement, invokeQuery as ɵinvokeQuery, normalizeKeyframes as ɵnormalizeKeyframes, validateStyleProperty as ɵvalidateStyleProperty };
|
|
4205
4419
|
//# sourceMappingURL=browser.mjs.map
|