@angular/animations 13.2.1 → 13.2.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 +19 -7
- package/browser/testing/testing.d.ts +2 -1
- package/esm2020/browser/src/dsl/animation.mjs +4 -5
- package/esm2020/browser/src/dsl/animation_ast_builder.mjs +13 -14
- package/esm2020/browser/src/dsl/animation_timeline_builder.mjs +3 -2
- package/esm2020/browser/src/dsl/animation_transition_expr.mjs +4 -3
- package/esm2020/browser/src/dsl/animation_transition_factory.mjs +1 -1
- 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 +3 -2
- package/esm2020/browser/src/render/shared.mjs +16 -5
- package/esm2020/browser/src/render/timeline_animation_engine.mjs +6 -5
- package/esm2020/browser/src/render/transition_animation_engine.mjs +45 -18
- package/esm2020/browser/src/render/web_animations/web_animations_driver.mjs +5 -2
- package/esm2020/browser/src/util.mjs +9 -8
- 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 +232 -60
- 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 +232 -60
- 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 v13.2.
|
|
2
|
+
* @license Angular v13.2.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 = typeof ngDevMode === 'undefined' || !!ngDevMode;
|
|
19
|
+
const LINE_START = '\n - ';
|
|
20
|
+
function invalidTimingValue(exp) {
|
|
21
|
+
return new ɵRuntimeError(3000 /* INVALID_TIMING_VALUE */, NG_DEV_MODE && `The provided timing value "${exp}" is invalid.`);
|
|
22
|
+
}
|
|
23
|
+
function negativeStepValue() {
|
|
24
|
+
return new ɵRuntimeError(3100 /* NEGATIVE_STEP_VALUE */, NG_DEV_MODE && '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 && '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 &&
|
|
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 && `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 && `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 && `Please provide a CSS unit value for ${userProvidedProperty}:${value}`);
|
|
41
|
+
}
|
|
42
|
+
function invalidTrigger() {
|
|
43
|
+
return new ɵRuntimeError(3006 /* INVALID_TRIGGER */, NG_DEV_MODE &&
|
|
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 && '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 &&
|
|
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 && `The provided style string value ${value} is not allowed.`);
|
|
55
|
+
}
|
|
56
|
+
function invalidProperty(prop) {
|
|
57
|
+
return new ɵRuntimeError(3009 /* INVALID_PROPERTY */, NG_DEV_MODE &&
|
|
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 &&
|
|
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 && `keyframes() must be placed inside of a call to animate()`);
|
|
66
|
+
}
|
|
67
|
+
function invalidOffset() {
|
|
68
|
+
return new ɵRuntimeError(3012 /* INVALID_OFFSET */, NG_DEV_MODE && `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 && `Please ensure that all keyframe offsets are in order`);
|
|
72
|
+
}
|
|
73
|
+
function keyframesMissingOffsets() {
|
|
74
|
+
return new ɵRuntimeError(3202 /* KEYFRAMES_MISSING_OFFSETS */, NG_DEV_MODE && `Not all style() steps within the declared keyframes() contain offsets`);
|
|
75
|
+
}
|
|
76
|
+
function invalidStagger() {
|
|
77
|
+
return new ɵRuntimeError(3013 /* INVALID_STAGGER */, NG_DEV_MODE && `stagger() can only be used inside of query()`);
|
|
78
|
+
}
|
|
79
|
+
function invalidQuery(selector) {
|
|
80
|
+
return new ɵRuntimeError(3014 /* INVALID_QUERY */, NG_DEV_MODE &&
|
|
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 && `The provided transition expression "${expr}" is not supported`);
|
|
85
|
+
}
|
|
86
|
+
function invalidTransitionAlias(alias) {
|
|
87
|
+
return new ɵRuntimeError(3016 /* INVALID_TRANSITION_ALIAS */, NG_DEV_MODE && `The transition alias value "${alias}" is not supported`);
|
|
88
|
+
}
|
|
89
|
+
function validationFailed(errors) {
|
|
90
|
+
return new ɵRuntimeError(3500 /* VALIDATION_FAILED */, NG_DEV_MODE && `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 && `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 &&
|
|
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 &&
|
|
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 &&
|
|
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 && '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 &&
|
|
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 && `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 &&
|
|
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 &&
|
|
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 &&
|
|
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 && `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 &&
|
|
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 &&
|
|
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 &&
|
|
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(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
|
}
|
|
@@ -129,6 +262,14 @@ let _contains = (elm1, elm2) => false;
|
|
|
129
262
|
let _query = (element, selector, multi) => {
|
|
130
263
|
return [];
|
|
131
264
|
};
|
|
265
|
+
let _documentElement = null;
|
|
266
|
+
function getParentElement(element) {
|
|
267
|
+
const parent = element.parentNode || element.host; // consider host to support shadow DOM
|
|
268
|
+
if (parent === _documentElement) {
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
return parent;
|
|
272
|
+
}
|
|
132
273
|
// Define utility methods for browsers and platform-server(domino) where Element
|
|
133
274
|
// and utility methods exist.
|
|
134
275
|
const _isNode = isNode();
|
|
@@ -137,12 +278,15 @@ if (_isNode || typeof Element !== 'undefined') {
|
|
|
137
278
|
_contains = (elm1, elm2) => elm1.contains(elm2);
|
|
138
279
|
}
|
|
139
280
|
else {
|
|
281
|
+
// Read the document element in an IIFE that's been marked pure to avoid a top-level property
|
|
282
|
+
// read that may prevent tree-shaking.
|
|
283
|
+
_documentElement = /* @__PURE__ */ (() => document.documentElement)();
|
|
140
284
|
_contains = (elm1, elm2) => {
|
|
141
|
-
while (elm2
|
|
285
|
+
while (elm2) {
|
|
142
286
|
if (elm2 === elm1) {
|
|
143
287
|
return true;
|
|
144
288
|
}
|
|
145
|
-
elm2 = elm2
|
|
289
|
+
elm2 = getParentElement(elm2);
|
|
146
290
|
}
|
|
147
291
|
return false;
|
|
148
292
|
};
|
|
@@ -215,6 +359,9 @@ class NoopAnimationDriver {
|
|
|
215
359
|
containsElement(elm1, elm2) {
|
|
216
360
|
return containsElement(elm1, elm2);
|
|
217
361
|
}
|
|
362
|
+
getParentElement(element) {
|
|
363
|
+
return getParentElement(element);
|
|
364
|
+
}
|
|
218
365
|
query(element, selector, multi) {
|
|
219
366
|
return invokeQuery(element, selector, multi);
|
|
220
367
|
}
|
|
@@ -225,9 +372,9 @@ class NoopAnimationDriver {
|
|
|
225
372
|
return new NoopAnimationPlayer(duration, delay);
|
|
226
373
|
}
|
|
227
374
|
}
|
|
228
|
-
NoopAnimationDriver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.
|
|
229
|
-
NoopAnimationDriver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.
|
|
230
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.
|
|
375
|
+
NoopAnimationDriver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: NoopAnimationDriver, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
376
|
+
NoopAnimationDriver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: NoopAnimationDriver });
|
|
377
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: NoopAnimationDriver, decorators: [{
|
|
231
378
|
type: Injectable
|
|
232
379
|
}] });
|
|
233
380
|
/**
|
|
@@ -282,7 +429,7 @@ function parseTimeExpression(exp, errors, allowNegativeValues) {
|
|
|
282
429
|
if (typeof exp === 'string') {
|
|
283
430
|
const matches = exp.match(regex);
|
|
284
431
|
if (matches === null) {
|
|
285
|
-
errors.push(
|
|
432
|
+
errors.push(invalidTimingValue(exp));
|
|
286
433
|
return { duration: 0, delay: 0, easing: '' };
|
|
287
434
|
}
|
|
288
435
|
duration = _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);
|
|
@@ -302,15 +449,15 @@ function parseTimeExpression(exp, errors, allowNegativeValues) {
|
|
|
302
449
|
let containsErrors = false;
|
|
303
450
|
let startIndex = errors.length;
|
|
304
451
|
if (duration < 0) {
|
|
305
|
-
errors.push(
|
|
452
|
+
errors.push(negativeStepValue());
|
|
306
453
|
containsErrors = true;
|
|
307
454
|
}
|
|
308
455
|
if (delay < 0) {
|
|
309
|
-
errors.push(
|
|
456
|
+
errors.push(negativeDelayValue());
|
|
310
457
|
containsErrors = true;
|
|
311
458
|
}
|
|
312
459
|
if (containsErrors) {
|
|
313
|
-
errors.splice(startIndex, 0,
|
|
460
|
+
errors.splice(startIndex, 0, invalidTimingValue(exp));
|
|
314
461
|
}
|
|
315
462
|
}
|
|
316
463
|
return { duration, delay, easing };
|
|
@@ -416,7 +563,7 @@ function validateStyleParams(value, options, errors) {
|
|
|
416
563
|
if (matches.length) {
|
|
417
564
|
matches.forEach(varName => {
|
|
418
565
|
if (!params.hasOwnProperty(varName)) {
|
|
419
|
-
errors.push(
|
|
566
|
+
errors.push(invalidStyleParams(varName));
|
|
420
567
|
}
|
|
421
568
|
});
|
|
422
569
|
}
|
|
@@ -439,7 +586,7 @@ function interpolateParams(value, params, errors) {
|
|
|
439
586
|
let localVal = params[varName];
|
|
440
587
|
// this means that the value was never overridden by the data passed in by the user
|
|
441
588
|
if (!params.hasOwnProperty(varName)) {
|
|
442
|
-
errors.push(
|
|
589
|
+
errors.push(invalidParamValue(varName));
|
|
443
590
|
localVal = '';
|
|
444
591
|
}
|
|
445
592
|
return localVal.toString();
|
|
@@ -518,7 +665,7 @@ function visitDslNode(visitor, node, context) {
|
|
|
518
665
|
case 12 /* Stagger */:
|
|
519
666
|
return visitor.visitStagger(node, context);
|
|
520
667
|
default:
|
|
521
|
-
throw
|
|
668
|
+
throw invalidNodeType(node.type);
|
|
522
669
|
}
|
|
523
670
|
}
|
|
524
671
|
function computeStyle(element, prop) {
|
|
@@ -554,7 +701,7 @@ function parseInnerTransitionStr(eventStr, expressions, errors) {
|
|
|
554
701
|
}
|
|
555
702
|
const match = eventStr.match(/^(\*|[-\w]+)\s*(<?[=-]>)\s*(\*|[-\w]+)$/);
|
|
556
703
|
if (match == null || match.length < 4) {
|
|
557
|
-
errors.push(
|
|
704
|
+
errors.push(invalidExpression(eventStr));
|
|
558
705
|
return expressions;
|
|
559
706
|
}
|
|
560
707
|
const fromState = match[1];
|
|
@@ -577,7 +724,7 @@ function parseAnimationAlias(alias, errors) {
|
|
|
577
724
|
case ':decrement':
|
|
578
725
|
return (fromState, toState) => parseFloat(toState) < parseFloat(fromState);
|
|
579
726
|
default:
|
|
580
|
-
errors.push(
|
|
727
|
+
errors.push(invalidTransitionAlias(alias));
|
|
581
728
|
return '* => *';
|
|
582
729
|
}
|
|
583
730
|
}
|
|
@@ -673,7 +820,7 @@ class AnimationAstBuilderVisitor {
|
|
|
673
820
|
const states = [];
|
|
674
821
|
const transitions = [];
|
|
675
822
|
if (metadata.name.charAt(0) == '@') {
|
|
676
|
-
context.errors.push(
|
|
823
|
+
context.errors.push(invalidTrigger());
|
|
677
824
|
}
|
|
678
825
|
metadata.definitions.forEach(def => {
|
|
679
826
|
this._resetContextStyleTimingState(context);
|
|
@@ -693,7 +840,7 @@ class AnimationAstBuilderVisitor {
|
|
|
693
840
|
transitions.push(transition);
|
|
694
841
|
}
|
|
695
842
|
else {
|
|
696
|
-
context.errors.push(
|
|
843
|
+
context.errors.push(invalidDefinition());
|
|
697
844
|
}
|
|
698
845
|
});
|
|
699
846
|
return {
|
|
@@ -726,8 +873,7 @@ class AnimationAstBuilderVisitor {
|
|
|
726
873
|
});
|
|
727
874
|
if (missingSubs.size) {
|
|
728
875
|
const missingSubsArr = iteratorToArray(missingSubs.values());
|
|
729
|
-
context.errors.push(
|
|
730
|
-
.name}", ...) must define default values for all the following style substitutions: ${missingSubsArr.join(', ')}`);
|
|
876
|
+
context.errors.push(invalidState(metadata.name, missingSubsArr));
|
|
731
877
|
}
|
|
732
878
|
}
|
|
733
879
|
return {
|
|
@@ -820,7 +966,7 @@ class AnimationAstBuilderVisitor {
|
|
|
820
966
|
styles.push(styleTuple);
|
|
821
967
|
}
|
|
822
968
|
else {
|
|
823
|
-
context.errors.push(
|
|
969
|
+
context.errors.push(invalidStyleValue(styleTuple));
|
|
824
970
|
}
|
|
825
971
|
}
|
|
826
972
|
else {
|
|
@@ -873,7 +1019,7 @@ class AnimationAstBuilderVisitor {
|
|
|
873
1019
|
return;
|
|
874
1020
|
Object.keys(tuple).forEach(prop => {
|
|
875
1021
|
if (!this._driver.validateStyleProperty(prop)) {
|
|
876
|
-
context.errors.push(
|
|
1022
|
+
context.errors.push(invalidProperty(prop));
|
|
877
1023
|
return;
|
|
878
1024
|
}
|
|
879
1025
|
const collectedStyles = context.collectedStyles[context.currentQuerySelector];
|
|
@@ -882,8 +1028,7 @@ class AnimationAstBuilderVisitor {
|
|
|
882
1028
|
if (collectedEntry) {
|
|
883
1029
|
if (startTime != endTime && startTime >= collectedEntry.startTime &&
|
|
884
1030
|
endTime <= collectedEntry.endTime) {
|
|
885
|
-
context.errors.push(
|
|
886
|
-
.endTime}ms" is also being animated in a parallel animation between the times of "${startTime}ms" and "${endTime}ms"`);
|
|
1031
|
+
context.errors.push(invalidParallelAnimation(prop, collectedEntry.startTime, collectedEntry.endTime, startTime, endTime));
|
|
887
1032
|
updateCollectedStyle = false;
|
|
888
1033
|
}
|
|
889
1034
|
// we always choose the smaller start time value since we
|
|
@@ -903,7 +1048,7 @@ class AnimationAstBuilderVisitor {
|
|
|
903
1048
|
visitKeyframes(metadata, context) {
|
|
904
1049
|
const ast = { type: 5 /* Keyframes */, styles: [], options: null };
|
|
905
1050
|
if (!context.currentAnimateTimings) {
|
|
906
|
-
context.errors.push(
|
|
1051
|
+
context.errors.push(invalidKeyframes());
|
|
907
1052
|
return ast;
|
|
908
1053
|
}
|
|
909
1054
|
const MAX_KEYFRAME_OFFSET = 1;
|
|
@@ -927,15 +1072,15 @@ class AnimationAstBuilderVisitor {
|
|
|
927
1072
|
return style;
|
|
928
1073
|
});
|
|
929
1074
|
if (keyframesOutOfRange) {
|
|
930
|
-
context.errors.push(
|
|
1075
|
+
context.errors.push(invalidOffset());
|
|
931
1076
|
}
|
|
932
1077
|
if (offsetsOutOfOrder) {
|
|
933
|
-
context.errors.push(
|
|
1078
|
+
context.errors.push(keyframeOffsetsOutOfOrder());
|
|
934
1079
|
}
|
|
935
1080
|
const length = metadata.steps.length;
|
|
936
1081
|
let generatedOffset = 0;
|
|
937
1082
|
if (totalKeyframesWithOffsets > 0 && totalKeyframesWithOffsets < length) {
|
|
938
|
-
context.errors.push(
|
|
1083
|
+
context.errors.push(keyframesMissingOffsets());
|
|
939
1084
|
}
|
|
940
1085
|
else if (totalKeyframesWithOffsets == 0) {
|
|
941
1086
|
generatedOffset = MAX_KEYFRAME_OFFSET / (length - 1);
|
|
@@ -1001,7 +1146,7 @@ class AnimationAstBuilderVisitor {
|
|
|
1001
1146
|
}
|
|
1002
1147
|
visitStagger(metadata, context) {
|
|
1003
1148
|
if (!context.currentQuery) {
|
|
1004
|
-
context.errors.push(
|
|
1149
|
+
context.errors.push(invalidStagger());
|
|
1005
1150
|
}
|
|
1006
1151
|
const timings = metadata.timings === 'full' ?
|
|
1007
1152
|
{ duration: 0, delay: 0, easing: 'full' } :
|
|
@@ -1624,7 +1769,7 @@ class AnimationTimelineContext {
|
|
|
1624
1769
|
results.push(...elements);
|
|
1625
1770
|
}
|
|
1626
1771
|
if (!optional && results.length == 0) {
|
|
1627
|
-
errors.push(
|
|
1772
|
+
errors.push(invalidQuery(originalSelector));
|
|
1628
1773
|
}
|
|
1629
1774
|
return results;
|
|
1630
1775
|
}
|
|
@@ -1912,8 +2057,7 @@ class Animation {
|
|
|
1912
2057
|
const errors = [];
|
|
1913
2058
|
const ast = buildAnimationAst(_driver, input, errors);
|
|
1914
2059
|
if (errors.length) {
|
|
1915
|
-
|
|
1916
|
-
throw new Error(errorMessage);
|
|
2060
|
+
throw validationFailed(errors);
|
|
1917
2061
|
}
|
|
1918
2062
|
this._animationAst = ast;
|
|
1919
2063
|
}
|
|
@@ -1926,8 +2070,7 @@ class Animation {
|
|
|
1926
2070
|
subInstructions = subInstructions || new ElementInstructionMap();
|
|
1927
2071
|
const result = buildAnimationTimelines(this._driver, element, this._animationAst, ENTER_CLASSNAME, LEAVE_CLASSNAME, start, dest, options, subInstructions, errors);
|
|
1928
2072
|
if (errors.length) {
|
|
1929
|
-
|
|
1930
|
-
throw new Error(errorMessage);
|
|
2073
|
+
throw buildingFailed(errors);
|
|
1931
2074
|
}
|
|
1932
2075
|
return result;
|
|
1933
2076
|
}
|
|
@@ -1978,7 +2121,7 @@ class WebAnimationsStyleNormalizer extends AnimationStyleNormalizer {
|
|
|
1978
2121
|
else {
|
|
1979
2122
|
const valAndSuffixMatch = value.match(/^[+-]?[\d\.]+([a-z]*)$/);
|
|
1980
2123
|
if (valAndSuffixMatch && valAndSuffixMatch[1].length == 0) {
|
|
1981
|
-
errors.push(
|
|
2124
|
+
errors.push(invalidCssUnitValue(userProvidedProperty, value));
|
|
1982
2125
|
}
|
|
1983
2126
|
}
|
|
1984
2127
|
}
|
|
@@ -2177,7 +2320,7 @@ class TimelineAnimationEngine {
|
|
|
2177
2320
|
const errors = [];
|
|
2178
2321
|
const ast = buildAnimationAst(this._driver, metadata, errors);
|
|
2179
2322
|
if (errors.length) {
|
|
2180
|
-
throw
|
|
2323
|
+
throw registerFailed(errors);
|
|
2181
2324
|
}
|
|
2182
2325
|
else {
|
|
2183
2326
|
this._animations[id] = ast;
|
|
@@ -2201,11 +2344,11 @@ class TimelineAnimationEngine {
|
|
|
2201
2344
|
});
|
|
2202
2345
|
}
|
|
2203
2346
|
else {
|
|
2204
|
-
errors.push(
|
|
2347
|
+
errors.push(missingOrDestroyedAnimation());
|
|
2205
2348
|
instructions = [];
|
|
2206
2349
|
}
|
|
2207
2350
|
if (errors.length) {
|
|
2208
|
-
throw
|
|
2351
|
+
throw createAnimationFailed(errors);
|
|
2209
2352
|
}
|
|
2210
2353
|
autoStylesMap.forEach((styles, element) => {
|
|
2211
2354
|
Object.keys(styles).forEach(prop => {
|
|
@@ -2234,7 +2377,7 @@ class TimelineAnimationEngine {
|
|
|
2234
2377
|
_getPlayer(id) {
|
|
2235
2378
|
const player = this._playersById[id];
|
|
2236
2379
|
if (!player) {
|
|
2237
|
-
throw
|
|
2380
|
+
throw missingPlayer(id);
|
|
2238
2381
|
}
|
|
2239
2382
|
return player;
|
|
2240
2383
|
}
|
|
@@ -2362,13 +2505,13 @@ class AnimationTransitionNamespace {
|
|
|
2362
2505
|
}
|
|
2363
2506
|
listen(element, name, phase, callback) {
|
|
2364
2507
|
if (!this._triggers.hasOwnProperty(name)) {
|
|
2365
|
-
throw
|
|
2508
|
+
throw missingTrigger(phase, name);
|
|
2366
2509
|
}
|
|
2367
2510
|
if (phase == null || phase.length == 0) {
|
|
2368
|
-
throw
|
|
2511
|
+
throw missingEvent(name);
|
|
2369
2512
|
}
|
|
2370
2513
|
if (!isTriggerEventValid(phase)) {
|
|
2371
|
-
throw
|
|
2514
|
+
throw unsupportedTriggerEvent(phase, name);
|
|
2372
2515
|
}
|
|
2373
2516
|
const listeners = getOrSetAsInMap(this._elementListeners, element, []);
|
|
2374
2517
|
const data = { name, phase, callback };
|
|
@@ -2407,7 +2550,7 @@ class AnimationTransitionNamespace {
|
|
|
2407
2550
|
_getTrigger(name) {
|
|
2408
2551
|
const trigger = this._triggers[name];
|
|
2409
2552
|
if (!trigger) {
|
|
2410
|
-
throw
|
|
2553
|
+
throw unregisteredTrigger(name);
|
|
2411
2554
|
}
|
|
2412
2555
|
return trigger;
|
|
2413
2556
|
}
|
|
@@ -2763,25 +2906,52 @@ class TransitionAnimationEngine {
|
|
|
2763
2906
|
return this._namespaceLookup[namespaceId] = ns;
|
|
2764
2907
|
}
|
|
2765
2908
|
_balanceNamespaceList(ns, hostElement) {
|
|
2766
|
-
const
|
|
2909
|
+
const namespaceList = this._namespaceList;
|
|
2910
|
+
const namespacesByHostElement = this.namespacesByHostElement;
|
|
2911
|
+
const limit = namespaceList.length - 1;
|
|
2767
2912
|
if (limit >= 0) {
|
|
2768
2913
|
let found = false;
|
|
2769
|
-
|
|
2770
|
-
|
|
2771
|
-
|
|
2772
|
-
|
|
2773
|
-
|
|
2774
|
-
|
|
2914
|
+
if (this.driver.getParentElement !== undefined) {
|
|
2915
|
+
// Fast path for when the driver implements `getParentElement`, which allows us to find the
|
|
2916
|
+
// closest ancestor with an existing namespace that we can then insert `ns` after, without
|
|
2917
|
+
// having to inspect all existing namespaces.
|
|
2918
|
+
let ancestor = this.driver.getParentElement(hostElement);
|
|
2919
|
+
while (ancestor) {
|
|
2920
|
+
const ancestorNs = namespacesByHostElement.get(ancestor);
|
|
2921
|
+
if (ancestorNs) {
|
|
2922
|
+
// An animation namespace has been registered for this ancestor, so we insert `ns`
|
|
2923
|
+
// right after it to establish top-down ordering of animation namespaces.
|
|
2924
|
+
const index = namespaceList.indexOf(ancestorNs);
|
|
2925
|
+
namespaceList.splice(index + 1, 0, ns);
|
|
2926
|
+
found = true;
|
|
2927
|
+
break;
|
|
2928
|
+
}
|
|
2929
|
+
ancestor = this.driver.getParentElement(ancestor);
|
|
2930
|
+
}
|
|
2931
|
+
}
|
|
2932
|
+
else {
|
|
2933
|
+
// Slow path for backwards compatibility if the driver does not implement
|
|
2934
|
+
// `getParentElement`, to be removed once `getParentElement` is a required method.
|
|
2935
|
+
for (let i = limit; i >= 0; i--) {
|
|
2936
|
+
const nextNamespace = namespaceList[i];
|
|
2937
|
+
if (this.driver.containsElement(nextNamespace.hostElement, hostElement)) {
|
|
2938
|
+
namespaceList.splice(i + 1, 0, ns);
|
|
2939
|
+
found = true;
|
|
2940
|
+
break;
|
|
2941
|
+
}
|
|
2775
2942
|
}
|
|
2776
2943
|
}
|
|
2777
2944
|
if (!found) {
|
|
2778
|
-
|
|
2945
|
+
// No namespace exists that is an ancestor of `ns`, so `ns` is inserted at the front to
|
|
2946
|
+
// ensure that any existing descendants are ordered after `ns`, retaining the desired
|
|
2947
|
+
// top-down ordering.
|
|
2948
|
+
namespaceList.unshift(ns);
|
|
2779
2949
|
}
|
|
2780
2950
|
}
|
|
2781
2951
|
else {
|
|
2782
|
-
|
|
2952
|
+
namespaceList.push(ns);
|
|
2783
2953
|
}
|
|
2784
|
-
|
|
2954
|
+
namespacesByHostElement.set(hostElement, ns);
|
|
2785
2955
|
return ns;
|
|
2786
2956
|
}
|
|
2787
2957
|
register(namespaceId, hostElement) {
|
|
@@ -3047,7 +3217,7 @@ class TransitionAnimationEngine {
|
|
|
3047
3217
|
}
|
|
3048
3218
|
}
|
|
3049
3219
|
reportError(errors) {
|
|
3050
|
-
throw
|
|
3220
|
+
throw triggerTransitionsFailed(errors);
|
|
3051
3221
|
}
|
|
3052
3222
|
_flushAnimations(cleanupFns, microtaskId) {
|
|
3053
3223
|
const subTimelines = new ElementInstructionMap();
|
|
@@ -3209,8 +3379,7 @@ class TransitionAnimationEngine {
|
|
|
3209
3379
|
if (erroneousTransitions.length) {
|
|
3210
3380
|
const errors = [];
|
|
3211
3381
|
erroneousTransitions.forEach(instruction => {
|
|
3212
|
-
errors.push(
|
|
3213
|
-
instruction.errors.forEach(error => errors.push(`- ${error}\n`));
|
|
3382
|
+
errors.push(transitionFailed(instruction.triggerName, instruction.errors));
|
|
3214
3383
|
});
|
|
3215
3384
|
allPlayers.forEach(player => player.destroy());
|
|
3216
3385
|
this.reportError(errors);
|
|
@@ -3825,7 +3994,7 @@ class AnimationEngine {
|
|
|
3825
3994
|
const errors = [];
|
|
3826
3995
|
const ast = buildAnimationAst(this._driver, metadata, errors);
|
|
3827
3996
|
if (errors.length) {
|
|
3828
|
-
throw
|
|
3997
|
+
throw triggerBuildFailed(name, errors);
|
|
3829
3998
|
}
|
|
3830
3999
|
trigger = buildTrigger(name, ast, this._normalizer);
|
|
3831
4000
|
this._triggerCache[cacheKey] = trigger;
|
|
@@ -4148,6 +4317,9 @@ class WebAnimationsDriver {
|
|
|
4148
4317
|
containsElement(elm1, elm2) {
|
|
4149
4318
|
return containsElement(elm1, elm2);
|
|
4150
4319
|
}
|
|
4320
|
+
getParentElement(element) {
|
|
4321
|
+
return getParentElement(element);
|
|
4322
|
+
}
|
|
4151
4323
|
query(element, selector, multi) {
|
|
4152
4324
|
return invokeQuery(element, selector, multi);
|
|
4153
4325
|
}
|
|
@@ -4213,5 +4385,5 @@ class WebAnimationsDriver {
|
|
|
4213
4385
|
* Generated bundle index. Do not edit.
|
|
4214
4386
|
*/
|
|
4215
4387
|
|
|
4216
|
-
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, validateStyleProperty as ɵvalidateStyleProperty };
|
|
4388
|
+
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, validateStyleProperty as ɵvalidateStyleProperty };
|
|
4217
4389
|
//# sourceMappingURL=browser.mjs.map
|