@angular/animations 14.0.0-next.2 → 14.0.0-next.3
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/fesm2015/browser.mjs
CHANGED
|
@@ -1,12 +1,146 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v14.0.0-next.
|
|
2
|
+
* @license Angular v14.0.0-next.3
|
|
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$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.3", ngImport: i0, type: NoopAnimationDriver, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
367
|
+
NoopAnimationDriver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.0-next.3", ngImport: i0, type: NoopAnimationDriver });
|
|
368
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-next.3", 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,7 +666,7 @@ 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) {
|
|
@@ -555,7 +702,7 @@ function parseInnerTransitionStr(eventStr, expressions, errors) {
|
|
|
555
702
|
}
|
|
556
703
|
const match = eventStr.match(/^(\*|[-\w]+)\s*(<?[=-]>)\s*(\*|[-\w]+)$/);
|
|
557
704
|
if (match == null || match.length < 4) {
|
|
558
|
-
errors.push(
|
|
705
|
+
errors.push(invalidExpression(eventStr));
|
|
559
706
|
return expressions;
|
|
560
707
|
}
|
|
561
708
|
const fromState = match[1];
|
|
@@ -578,7 +725,7 @@ function parseAnimationAlias(alias, errors) {
|
|
|
578
725
|
case ':decrement':
|
|
579
726
|
return (fromState, toState) => parseFloat(toState) < parseFloat(fromState);
|
|
580
727
|
default:
|
|
581
|
-
errors.push(
|
|
728
|
+
errors.push(invalidTransitionAlias(alias));
|
|
582
729
|
return '* => *';
|
|
583
730
|
}
|
|
584
731
|
}
|
|
@@ -674,7 +821,7 @@ class AnimationAstBuilderVisitor {
|
|
|
674
821
|
const states = [];
|
|
675
822
|
const transitions = [];
|
|
676
823
|
if (metadata.name.charAt(0) == '@') {
|
|
677
|
-
context.errors.push(
|
|
824
|
+
context.errors.push(invalidTrigger());
|
|
678
825
|
}
|
|
679
826
|
metadata.definitions.forEach(def => {
|
|
680
827
|
this._resetContextStyleTimingState(context);
|
|
@@ -694,7 +841,7 @@ class AnimationAstBuilderVisitor {
|
|
|
694
841
|
transitions.push(transition);
|
|
695
842
|
}
|
|
696
843
|
else {
|
|
697
|
-
context.errors.push(
|
|
844
|
+
context.errors.push(invalidDefinition());
|
|
698
845
|
}
|
|
699
846
|
});
|
|
700
847
|
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 {
|
|
@@ -866,7 +1012,7 @@ class AnimationAstBuilderVisitor {
|
|
|
866
1012
|
return;
|
|
867
1013
|
tuple.forEach((value, prop) => {
|
|
868
1014
|
if (!this._driver.validateStyleProperty(prop)) {
|
|
869
|
-
context.errors.push(
|
|
1015
|
+
context.errors.push(invalidProperty(prop));
|
|
870
1016
|
return;
|
|
871
1017
|
}
|
|
872
1018
|
// This is guaranteed to have a defined Map at this querySelector location making it
|
|
@@ -877,8 +1023,7 @@ class AnimationAstBuilderVisitor {
|
|
|
877
1023
|
if (collectedEntry) {
|
|
878
1024
|
if (startTime != endTime && startTime >= collectedEntry.startTime &&
|
|
879
1025
|
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"`);
|
|
1026
|
+
context.errors.push(invalidParallelAnimation(prop, collectedEntry.startTime, collectedEntry.endTime, startTime, endTime));
|
|
882
1027
|
updateCollectedStyle = false;
|
|
883
1028
|
}
|
|
884
1029
|
// we always choose the smaller start time value since we
|
|
@@ -898,7 +1043,7 @@ class AnimationAstBuilderVisitor {
|
|
|
898
1043
|
visitKeyframes(metadata, context) {
|
|
899
1044
|
const ast = { type: 5 /* Keyframes */, styles: [], options: null };
|
|
900
1045
|
if (!context.currentAnimateTimings) {
|
|
901
|
-
context.errors.push(
|
|
1046
|
+
context.errors.push(invalidKeyframes());
|
|
902
1047
|
return ast;
|
|
903
1048
|
}
|
|
904
1049
|
const MAX_KEYFRAME_OFFSET = 1;
|
|
@@ -922,15 +1067,15 @@ class AnimationAstBuilderVisitor {
|
|
|
922
1067
|
return style;
|
|
923
1068
|
});
|
|
924
1069
|
if (keyframesOutOfRange) {
|
|
925
|
-
context.errors.push(
|
|
1070
|
+
context.errors.push(invalidOffset());
|
|
926
1071
|
}
|
|
927
1072
|
if (offsetsOutOfOrder) {
|
|
928
|
-
context.errors.push(
|
|
1073
|
+
context.errors.push(keyframeOffsetsOutOfOrder());
|
|
929
1074
|
}
|
|
930
1075
|
const length = metadata.steps.length;
|
|
931
1076
|
let generatedOffset = 0;
|
|
932
1077
|
if (totalKeyframesWithOffsets > 0 && totalKeyframesWithOffsets < length) {
|
|
933
|
-
context.errors.push(
|
|
1078
|
+
context.errors.push(keyframesMissingOffsets());
|
|
934
1079
|
}
|
|
935
1080
|
else if (totalKeyframesWithOffsets == 0) {
|
|
936
1081
|
generatedOffset = MAX_KEYFRAME_OFFSET / (length - 1);
|
|
@@ -996,7 +1141,7 @@ class AnimationAstBuilderVisitor {
|
|
|
996
1141
|
}
|
|
997
1142
|
visitStagger(metadata, context) {
|
|
998
1143
|
if (!context.currentQuery) {
|
|
999
|
-
context.errors.push(
|
|
1144
|
+
context.errors.push(invalidStagger());
|
|
1000
1145
|
}
|
|
1001
1146
|
const timings = metadata.timings === 'full' ?
|
|
1002
1147
|
{ duration: 0, delay: 0, easing: 'full' } :
|
|
@@ -1614,7 +1759,7 @@ class AnimationTimelineContext {
|
|
|
1614
1759
|
results.push(...elements);
|
|
1615
1760
|
}
|
|
1616
1761
|
if (!optional && results.length == 0) {
|
|
1617
|
-
errors.push(
|
|
1762
|
+
errors.push(invalidQuery(originalSelector));
|
|
1618
1763
|
}
|
|
1619
1764
|
return results;
|
|
1620
1765
|
}
|
|
@@ -1894,8 +2039,7 @@ class Animation {
|
|
|
1894
2039
|
const errors = [];
|
|
1895
2040
|
const ast = buildAnimationAst(_driver, input, errors);
|
|
1896
2041
|
if (errors.length) {
|
|
1897
|
-
|
|
1898
|
-
throw new Error(errorMessage);
|
|
2042
|
+
throw validationFailed(errors);
|
|
1899
2043
|
}
|
|
1900
2044
|
this._animationAst = ast;
|
|
1901
2045
|
}
|
|
@@ -1908,8 +2052,7 @@ class Animation {
|
|
|
1908
2052
|
subInstructions = subInstructions || new ElementInstructionMap();
|
|
1909
2053
|
const result = buildAnimationTimelines(this._driver, element, this._animationAst, ENTER_CLASSNAME, LEAVE_CLASSNAME, start, dest, options, subInstructions, errors);
|
|
1910
2054
|
if (errors.length) {
|
|
1911
|
-
|
|
1912
|
-
throw new Error(errorMessage);
|
|
2055
|
+
throw buildingFailed(errors);
|
|
1913
2056
|
}
|
|
1914
2057
|
return result;
|
|
1915
2058
|
}
|
|
@@ -1991,7 +2134,7 @@ class WebAnimationsStyleNormalizer extends AnimationStyleNormalizer {
|
|
|
1991
2134
|
else {
|
|
1992
2135
|
const valAndSuffixMatch = value.match(/^[+-]?[\d\.]+([a-z]*)$/);
|
|
1993
2136
|
if (valAndSuffixMatch && valAndSuffixMatch[1].length == 0) {
|
|
1994
|
-
errors.push(
|
|
2137
|
+
errors.push(invalidCssUnitValue(userProvidedProperty, value));
|
|
1995
2138
|
}
|
|
1996
2139
|
}
|
|
1997
2140
|
}
|
|
@@ -2193,7 +2336,7 @@ class TimelineAnimationEngine {
|
|
|
2193
2336
|
const errors = [];
|
|
2194
2337
|
const ast = buildAnimationAst(this._driver, metadata, errors);
|
|
2195
2338
|
if (errors.length) {
|
|
2196
|
-
throw
|
|
2339
|
+
throw registerFailed(errors);
|
|
2197
2340
|
}
|
|
2198
2341
|
else {
|
|
2199
2342
|
this._animations.set(id, ast);
|
|
@@ -2217,11 +2360,11 @@ class TimelineAnimationEngine {
|
|
|
2217
2360
|
});
|
|
2218
2361
|
}
|
|
2219
2362
|
else {
|
|
2220
|
-
errors.push(
|
|
2363
|
+
errors.push(missingOrDestroyedAnimation());
|
|
2221
2364
|
instructions = [];
|
|
2222
2365
|
}
|
|
2223
2366
|
if (errors.length) {
|
|
2224
|
-
throw
|
|
2367
|
+
throw createAnimationFailed(errors);
|
|
2225
2368
|
}
|
|
2226
2369
|
autoStylesMap.forEach((styles, element) => {
|
|
2227
2370
|
styles.forEach((_, prop) => {
|
|
@@ -2250,7 +2393,7 @@ class TimelineAnimationEngine {
|
|
|
2250
2393
|
_getPlayer(id) {
|
|
2251
2394
|
const player = this._playersById.get(id);
|
|
2252
2395
|
if (!player) {
|
|
2253
|
-
throw
|
|
2396
|
+
throw missingPlayer(id);
|
|
2254
2397
|
}
|
|
2255
2398
|
return player;
|
|
2256
2399
|
}
|
|
@@ -2378,13 +2521,13 @@ class AnimationTransitionNamespace {
|
|
|
2378
2521
|
}
|
|
2379
2522
|
listen(element, name, phase, callback) {
|
|
2380
2523
|
if (!this._triggers.has(name)) {
|
|
2381
|
-
throw
|
|
2524
|
+
throw missingTrigger(phase, name);
|
|
2382
2525
|
}
|
|
2383
2526
|
if (phase == null || phase.length == 0) {
|
|
2384
|
-
throw
|
|
2527
|
+
throw missingEvent(name);
|
|
2385
2528
|
}
|
|
2386
2529
|
if (!isTriggerEventValid(phase)) {
|
|
2387
|
-
throw
|
|
2530
|
+
throw unsupportedTriggerEvent(phase, name);
|
|
2388
2531
|
}
|
|
2389
2532
|
const listeners = getOrSetDefaultValue(this._elementListeners, element, []);
|
|
2390
2533
|
const data = { name, phase, callback };
|
|
@@ -2423,7 +2566,7 @@ class AnimationTransitionNamespace {
|
|
|
2423
2566
|
_getTrigger(name) {
|
|
2424
2567
|
const trigger = this._triggers.get(name);
|
|
2425
2568
|
if (!trigger) {
|
|
2426
|
-
throw
|
|
2569
|
+
throw unregisteredTrigger(name);
|
|
2427
2570
|
}
|
|
2428
2571
|
return trigger;
|
|
2429
2572
|
}
|
|
@@ -2777,25 +2920,52 @@ class TransitionAnimationEngine {
|
|
|
2777
2920
|
return this._namespaceLookup[namespaceId] = ns;
|
|
2778
2921
|
}
|
|
2779
2922
|
_balanceNamespaceList(ns, hostElement) {
|
|
2780
|
-
const
|
|
2923
|
+
const namespaceList = this._namespaceList;
|
|
2924
|
+
const namespacesByHostElement = this.namespacesByHostElement;
|
|
2925
|
+
const limit = namespaceList.length - 1;
|
|
2781
2926
|
if (limit >= 0) {
|
|
2782
2927
|
let found = false;
|
|
2783
|
-
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2788
|
-
|
|
2928
|
+
if (this.driver.getParentElement !== undefined) {
|
|
2929
|
+
// Fast path for when the driver implements `getParentElement`, which allows us to find the
|
|
2930
|
+
// closest ancestor with an existing namespace that we can then insert `ns` after, without
|
|
2931
|
+
// having to inspect all existing namespaces.
|
|
2932
|
+
let ancestor = this.driver.getParentElement(hostElement);
|
|
2933
|
+
while (ancestor) {
|
|
2934
|
+
const ancestorNs = namespacesByHostElement.get(ancestor);
|
|
2935
|
+
if (ancestorNs) {
|
|
2936
|
+
// An animation namespace has been registered for this ancestor, so we insert `ns`
|
|
2937
|
+
// right after it to establish top-down ordering of animation namespaces.
|
|
2938
|
+
const index = namespaceList.indexOf(ancestorNs);
|
|
2939
|
+
namespaceList.splice(index + 1, 0, ns);
|
|
2940
|
+
found = true;
|
|
2941
|
+
break;
|
|
2942
|
+
}
|
|
2943
|
+
ancestor = this.driver.getParentElement(ancestor);
|
|
2944
|
+
}
|
|
2945
|
+
}
|
|
2946
|
+
else {
|
|
2947
|
+
// Slow path for backwards compatibility if the driver does not implement
|
|
2948
|
+
// `getParentElement`, to be removed once `getParentElement` is a required method.
|
|
2949
|
+
for (let i = limit; i >= 0; i--) {
|
|
2950
|
+
const nextNamespace = namespaceList[i];
|
|
2951
|
+
if (this.driver.containsElement(nextNamespace.hostElement, hostElement)) {
|
|
2952
|
+
namespaceList.splice(i + 1, 0, ns);
|
|
2953
|
+
found = true;
|
|
2954
|
+
break;
|
|
2955
|
+
}
|
|
2789
2956
|
}
|
|
2790
2957
|
}
|
|
2791
2958
|
if (!found) {
|
|
2792
|
-
|
|
2959
|
+
// No namespace exists that is an ancestor of `ns`, so `ns` is inserted at the front to
|
|
2960
|
+
// ensure that any existing descendants are ordered after `ns`, retaining the desired
|
|
2961
|
+
// top-down ordering.
|
|
2962
|
+
namespaceList.unshift(ns);
|
|
2793
2963
|
}
|
|
2794
2964
|
}
|
|
2795
2965
|
else {
|
|
2796
|
-
|
|
2966
|
+
namespaceList.push(ns);
|
|
2797
2967
|
}
|
|
2798
|
-
|
|
2968
|
+
namespacesByHostElement.set(hostElement, ns);
|
|
2799
2969
|
return ns;
|
|
2800
2970
|
}
|
|
2801
2971
|
register(namespaceId, hostElement) {
|
|
@@ -3060,7 +3230,7 @@ class TransitionAnimationEngine {
|
|
|
3060
3230
|
}
|
|
3061
3231
|
}
|
|
3062
3232
|
reportError(errors) {
|
|
3063
|
-
throw
|
|
3233
|
+
throw triggerTransitionsFailed(errors);
|
|
3064
3234
|
}
|
|
3065
3235
|
_flushAnimations(cleanupFns, microtaskId) {
|
|
3066
3236
|
const subTimelines = new ElementInstructionMap();
|
|
@@ -3222,8 +3392,7 @@ class TransitionAnimationEngine {
|
|
|
3222
3392
|
if (erroneousTransitions.length) {
|
|
3223
3393
|
const errors = [];
|
|
3224
3394
|
erroneousTransitions.forEach(instruction => {
|
|
3225
|
-
errors.push(
|
|
3226
|
-
instruction.errors.forEach(error => errors.push(`- ${error}\n`));
|
|
3395
|
+
errors.push(transitionFailed(instruction.triggerName, instruction.errors));
|
|
3227
3396
|
});
|
|
3228
3397
|
allPlayers.forEach(player => player.destroy());
|
|
3229
3398
|
this.reportError(errors);
|
|
@@ -3827,7 +3996,7 @@ class AnimationEngine {
|
|
|
3827
3996
|
const errors = [];
|
|
3828
3997
|
const ast = buildAnimationAst(this._driver, metadata, errors);
|
|
3829
3998
|
if (errors.length) {
|
|
3830
|
-
throw
|
|
3999
|
+
throw triggerBuildFailed(name, errors);
|
|
3831
4000
|
}
|
|
3832
4001
|
trigger = buildTrigger(name, ast, this._normalizer);
|
|
3833
4002
|
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
|
}
|
|
@@ -4212,5 +4384,5 @@ class WebAnimationsDriver {
|
|
|
4212
4384
|
* Generated bundle index. Do not edit.
|
|
4213
4385
|
*/
|
|
4214
4386
|
|
|
4215
|
-
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 };
|
|
4387
|
+
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 };
|
|
4216
4388
|
//# sourceMappingURL=browser.mjs.map
|