@angular/animations 21.0.0-next.0 → 21.0.0-next.10
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/fesm2022/_private_export-chunk.mjs +338 -0
- package/fesm2022/_private_export-chunk.mjs.map +1 -0
- package/fesm2022/_util-chunk.mjs +475 -0
- package/fesm2022/_util-chunk.mjs.map +1 -0
- package/fesm2022/animations.mjs +181 -190
- package/fesm2022/animations.mjs.map +1 -1
- package/fesm2022/browser-testing.mjs +114 -0
- package/fesm2022/browser-testing.mjs.map +1 -0
- package/fesm2022/browser.mjs +3371 -3931
- package/fesm2022/browser.mjs.map +1 -1
- package/package.json +7 -8
- package/{animation_driver.d.d.ts → types/_animation_driver-chunk.d.ts} +3 -3
- package/{animation_player.d.d.ts → types/_animation_player-chunk.d.ts} +2 -2
- package/{index.d.ts → types/animations.d.ts} +4 -4
- package/{browser/testing/index.d.ts → types/browser-testing.d.ts} +4 -4
- package/{browser/index.d.ts → types/browser.d.ts} +7 -7
- package/fesm2022/browser/testing.mjs +0 -130
- package/fesm2022/browser/testing.mjs.map +0 -1
- package/fesm2022/private_export.mjs +0 -1208
- package/fesm2022/private_export.mjs.map +0 -1
- package/fesm2022/util.mjs +0 -697
- package/fesm2022/util.mjs.map +0 -1
|
@@ -0,0 +1,475 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Angular v21.0.0-next.10
|
|
3
|
+
* (c) 2010-2025 Google LLC. https://angular.dev/
|
|
4
|
+
* License: MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { AnimationGroupPlayer, NoopAnimationPlayer, AUTO_STYLE, ɵPRE_STYLE as _PRE_STYLE, AnimationMetadataType, sequence } from './_private_export-chunk.mjs';
|
|
8
|
+
import { ɵRuntimeError as _RuntimeError } from '@angular/core';
|
|
9
|
+
|
|
10
|
+
const LINE_START = '\n - ';
|
|
11
|
+
function invalidTimingValue(exp) {
|
|
12
|
+
return new _RuntimeError(3000, ngDevMode && `The provided timing value "${exp}" is invalid.`);
|
|
13
|
+
}
|
|
14
|
+
function negativeStepValue() {
|
|
15
|
+
return new _RuntimeError(3100, ngDevMode && 'Duration values below 0 are not allowed for this animation step.');
|
|
16
|
+
}
|
|
17
|
+
function negativeDelayValue() {
|
|
18
|
+
return new _RuntimeError(3101, ngDevMode && 'Delay values below 0 are not allowed for this animation step.');
|
|
19
|
+
}
|
|
20
|
+
function invalidStyleParams(varName) {
|
|
21
|
+
return new _RuntimeError(3001, ngDevMode && `Unable to resolve the local animation param ${varName} in the given list of values`);
|
|
22
|
+
}
|
|
23
|
+
function invalidParamValue(varName) {
|
|
24
|
+
return new _RuntimeError(3003, ngDevMode && `Please provide a value for the animation param ${varName}`);
|
|
25
|
+
}
|
|
26
|
+
function invalidNodeType(nodeType) {
|
|
27
|
+
return new _RuntimeError(3004, ngDevMode && `Unable to resolve animation metadata node #${nodeType}`);
|
|
28
|
+
}
|
|
29
|
+
function invalidCssUnitValue(userProvidedProperty, value) {
|
|
30
|
+
return new _RuntimeError(3005, ngDevMode && `Please provide a CSS unit value for ${userProvidedProperty}:${value}`);
|
|
31
|
+
}
|
|
32
|
+
function invalidTrigger() {
|
|
33
|
+
return new _RuntimeError(3006, ngDevMode && "animation triggers cannot be prefixed with an `@` sign (e.g. trigger('@foo', [...]))");
|
|
34
|
+
}
|
|
35
|
+
function invalidDefinition() {
|
|
36
|
+
return new _RuntimeError(3007, ngDevMode && 'only state() and transition() definitions can sit inside of a trigger()');
|
|
37
|
+
}
|
|
38
|
+
function invalidState(metadataName, missingSubs) {
|
|
39
|
+
return new _RuntimeError(3008, ngDevMode && `state("${metadataName}", ...) must define default values for all the following style substitutions: ${missingSubs.join(', ')}`);
|
|
40
|
+
}
|
|
41
|
+
function invalidStyleValue(value) {
|
|
42
|
+
return new _RuntimeError(3002, ngDevMode && `The provided style string value ${value} is not allowed.`);
|
|
43
|
+
}
|
|
44
|
+
function invalidParallelAnimation(prop, firstStart, firstEnd, secondStart, secondEnd) {
|
|
45
|
+
return new _RuntimeError(3010, ngDevMode && `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"`);
|
|
46
|
+
}
|
|
47
|
+
function invalidKeyframes() {
|
|
48
|
+
return new _RuntimeError(3011, ngDevMode && `keyframes() must be placed inside of a call to animate()`);
|
|
49
|
+
}
|
|
50
|
+
function invalidOffset() {
|
|
51
|
+
return new _RuntimeError(3012, ngDevMode && `Please ensure that all keyframe offsets are between 0 and 1`);
|
|
52
|
+
}
|
|
53
|
+
function keyframeOffsetsOutOfOrder() {
|
|
54
|
+
return new _RuntimeError(3200, ngDevMode && `Please ensure that all keyframe offsets are in order`);
|
|
55
|
+
}
|
|
56
|
+
function keyframesMissingOffsets() {
|
|
57
|
+
return new _RuntimeError(3202, ngDevMode && `Not all style() steps within the declared keyframes() contain offsets`);
|
|
58
|
+
}
|
|
59
|
+
function invalidStagger() {
|
|
60
|
+
return new _RuntimeError(3013, ngDevMode && `stagger() can only be used inside of query()`);
|
|
61
|
+
}
|
|
62
|
+
function invalidQuery(selector) {
|
|
63
|
+
return new _RuntimeError(3014, ngDevMode && `\`query("${selector}")\` returned zero elements. (Use \`query("${selector}", { optional: true })\` if you wish to allow this.)`);
|
|
64
|
+
}
|
|
65
|
+
function invalidExpression(expr) {
|
|
66
|
+
return new _RuntimeError(3015, ngDevMode && `The provided transition expression "${expr}" is not supported`);
|
|
67
|
+
}
|
|
68
|
+
function invalidTransitionAlias(alias) {
|
|
69
|
+
return new _RuntimeError(3016, ngDevMode && `The transition alias value "${alias}" is not supported`);
|
|
70
|
+
}
|
|
71
|
+
function validationFailed(errors) {
|
|
72
|
+
return new _RuntimeError(3500, ngDevMode && `animation validation failed:\n${errors.map(err => err.message).join('\n')}`);
|
|
73
|
+
}
|
|
74
|
+
function buildingFailed(errors) {
|
|
75
|
+
return new _RuntimeError(3501, ngDevMode && `animation building failed:\n${errors.map(err => err.message).join('\n')}`);
|
|
76
|
+
}
|
|
77
|
+
function triggerBuildFailed(name, errors) {
|
|
78
|
+
return new _RuntimeError(3404, ngDevMode && `The animation trigger "${name}" has failed to build due to the following errors:\n - ${errors.map(err => err.message).join('\n - ')}`);
|
|
79
|
+
}
|
|
80
|
+
function animationFailed(errors) {
|
|
81
|
+
return new _RuntimeError(3502, ngDevMode && `Unable to animate due to the following errors:${LINE_START}${errors.map(err => err.message).join(LINE_START)}`);
|
|
82
|
+
}
|
|
83
|
+
function registerFailed(errors) {
|
|
84
|
+
return new _RuntimeError(3503, ngDevMode && `Unable to build the animation due to the following errors: ${errors.map(err => err.message).join('\n')}`);
|
|
85
|
+
}
|
|
86
|
+
function missingOrDestroyedAnimation() {
|
|
87
|
+
return new _RuntimeError(3300, ngDevMode && "The requested animation doesn't exist or has already been destroyed");
|
|
88
|
+
}
|
|
89
|
+
function createAnimationFailed(errors) {
|
|
90
|
+
return new _RuntimeError(3504, ngDevMode && `Unable to create the animation due to the following errors:${errors.map(err => err.message).join('\n')}`);
|
|
91
|
+
}
|
|
92
|
+
function missingPlayer(id) {
|
|
93
|
+
return new _RuntimeError(3301, ngDevMode && `Unable to find the timeline player referenced by ${id}`);
|
|
94
|
+
}
|
|
95
|
+
function missingTrigger(phase, name) {
|
|
96
|
+
return new _RuntimeError(3302, ngDevMode && `Unable to listen on the animation trigger event "${phase}" because the animation trigger "${name}" doesn\'t exist!`);
|
|
97
|
+
}
|
|
98
|
+
function missingEvent(name) {
|
|
99
|
+
return new _RuntimeError(3303, ngDevMode && `Unable to listen on the animation trigger "${name}" because the provided event is undefined!`);
|
|
100
|
+
}
|
|
101
|
+
function unsupportedTriggerEvent(phase, name) {
|
|
102
|
+
return new _RuntimeError(3400, ngDevMode && `The provided animation trigger event "${phase}" for the animation trigger "${name}" is not supported!`);
|
|
103
|
+
}
|
|
104
|
+
function unregisteredTrigger(name) {
|
|
105
|
+
return new _RuntimeError(3401, ngDevMode && `The provided animation trigger "${name}" has not been registered!`);
|
|
106
|
+
}
|
|
107
|
+
function triggerTransitionsFailed(errors) {
|
|
108
|
+
return new _RuntimeError(3402, ngDevMode && `Unable to process animations due to the following failed trigger transitions\n ${errors.map(err => err.message).join('\n')}`);
|
|
109
|
+
}
|
|
110
|
+
function transitionFailed(name, errors) {
|
|
111
|
+
return new _RuntimeError(3505, ngDevMode && `@${name} has failed due to:\n ${errors.map(err => err.message).join('\n- ')}`);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const ANIMATABLE_PROP_SET = new Set(['-moz-outline-radius', '-moz-outline-radius-bottomleft', '-moz-outline-radius-bottomright', '-moz-outline-radius-topleft', '-moz-outline-radius-topright', '-ms-grid-columns', '-ms-grid-rows', '-webkit-line-clamp', '-webkit-text-fill-color', '-webkit-text-stroke', '-webkit-text-stroke-color', 'accent-color', 'all', 'backdrop-filter', 'background', 'background-color', 'background-position', 'background-size', 'block-size', 'border', 'border-block-end', 'border-block-end-color', 'border-block-end-width', 'border-block-start', 'border-block-start-color', 'border-block-start-width', 'border-bottom', 'border-bottom-color', 'border-bottom-left-radius', 'border-bottom-right-radius', 'border-bottom-width', 'border-color', 'border-end-end-radius', 'border-end-start-radius', 'border-image-outset', 'border-image-slice', 'border-image-width', 'border-inline-end', 'border-inline-end-color', 'border-inline-end-width', 'border-inline-start', 'border-inline-start-color', 'border-inline-start-width', 'border-left', 'border-left-color', 'border-left-width', 'border-radius', 'border-right', 'border-right-color', 'border-right-width', 'border-start-end-radius', 'border-start-start-radius', 'border-top', 'border-top-color', 'border-top-left-radius', 'border-top-right-radius', 'border-top-width', 'border-width', 'bottom', 'box-shadow', 'caret-color', 'clip', 'clip-path', 'color', 'column-count', 'column-gap', 'column-rule', 'column-rule-color', 'column-rule-width', 'column-width', 'columns', 'filter', 'flex', 'flex-basis', 'flex-grow', 'flex-shrink', 'font', 'font-size', 'font-size-adjust', 'font-stretch', 'font-variation-settings', 'font-weight', 'gap', 'grid-column-gap', 'grid-gap', 'grid-row-gap', 'grid-template-columns', 'grid-template-rows', 'height', 'inline-size', 'input-security', 'inset', 'inset-block', 'inset-block-end', 'inset-block-start', 'inset-inline', 'inset-inline-end', 'inset-inline-start', 'left', 'letter-spacing', 'line-clamp', 'line-height', 'margin', 'margin-block-end', 'margin-block-start', 'margin-bottom', 'margin-inline-end', 'margin-inline-start', 'margin-left', 'margin-right', 'margin-top', 'mask', 'mask-border', 'mask-position', 'mask-size', 'max-block-size', 'max-height', 'max-inline-size', 'max-lines', 'max-width', 'min-block-size', 'min-height', 'min-inline-size', 'min-width', 'object-position', 'offset', 'offset-anchor', 'offset-distance', 'offset-path', 'offset-position', 'offset-rotate', 'opacity', 'order', 'outline', 'outline-color', 'outline-offset', 'outline-width', 'padding', 'padding-block-end', 'padding-block-start', 'padding-bottom', 'padding-inline-end', 'padding-inline-start', 'padding-left', 'padding-right', 'padding-top', 'perspective', 'perspective-origin', 'right', 'rotate', 'row-gap', 'scale', 'scroll-margin', 'scroll-margin-block', 'scroll-margin-block-end', 'scroll-margin-block-start', 'scroll-margin-bottom', 'scroll-margin-inline', 'scroll-margin-inline-end', 'scroll-margin-inline-start', 'scroll-margin-left', 'scroll-margin-right', 'scroll-margin-top', 'scroll-padding', 'scroll-padding-block', 'scroll-padding-block-end', 'scroll-padding-block-start', 'scroll-padding-bottom', 'scroll-padding-inline', 'scroll-padding-inline-end', 'scroll-padding-inline-start', 'scroll-padding-left', 'scroll-padding-right', 'scroll-padding-top', 'scroll-snap-coordinate', 'scroll-snap-destination', 'scrollbar-color', 'shape-image-threshold', 'shape-margin', 'shape-outside', 'tab-size', 'text-decoration', 'text-decoration-color', 'text-decoration-thickness', 'text-emphasis', 'text-emphasis-color', 'text-indent', 'text-shadow', 'text-underline-offset', 'top', 'transform', 'transform-origin', 'translate', 'vertical-align', 'visibility', 'width', 'word-spacing', 'z-index', 'zoom']);
|
|
115
|
+
|
|
116
|
+
function optimizeGroupPlayer(players) {
|
|
117
|
+
switch (players.length) {
|
|
118
|
+
case 0:
|
|
119
|
+
return new NoopAnimationPlayer();
|
|
120
|
+
case 1:
|
|
121
|
+
return players[0];
|
|
122
|
+
default:
|
|
123
|
+
return new AnimationGroupPlayer(players);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
function normalizeKeyframes$1(normalizer, keyframes, preStyles = new Map(), postStyles = new Map()) {
|
|
127
|
+
const errors = [];
|
|
128
|
+
const normalizedKeyframes = [];
|
|
129
|
+
let previousOffset = -1;
|
|
130
|
+
let previousKeyframe = null;
|
|
131
|
+
keyframes.forEach(kf => {
|
|
132
|
+
const offset = kf.get('offset');
|
|
133
|
+
const isSameOffset = offset == previousOffset;
|
|
134
|
+
const normalizedKeyframe = isSameOffset && previousKeyframe || new Map();
|
|
135
|
+
kf.forEach((val, prop) => {
|
|
136
|
+
let normalizedProp = prop;
|
|
137
|
+
let normalizedValue = val;
|
|
138
|
+
if (prop !== 'offset') {
|
|
139
|
+
normalizedProp = normalizer.normalizePropertyName(normalizedProp, errors);
|
|
140
|
+
switch (normalizedValue) {
|
|
141
|
+
case _PRE_STYLE:
|
|
142
|
+
normalizedValue = preStyles.get(prop);
|
|
143
|
+
break;
|
|
144
|
+
case AUTO_STYLE:
|
|
145
|
+
normalizedValue = postStyles.get(prop);
|
|
146
|
+
break;
|
|
147
|
+
default:
|
|
148
|
+
normalizedValue = normalizer.normalizeStyleValue(prop, normalizedProp, normalizedValue, errors);
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
normalizedKeyframe.set(normalizedProp, normalizedValue);
|
|
153
|
+
});
|
|
154
|
+
if (!isSameOffset) {
|
|
155
|
+
normalizedKeyframes.push(normalizedKeyframe);
|
|
156
|
+
}
|
|
157
|
+
previousKeyframe = normalizedKeyframe;
|
|
158
|
+
previousOffset = offset;
|
|
159
|
+
});
|
|
160
|
+
if (errors.length) {
|
|
161
|
+
throw animationFailed(errors);
|
|
162
|
+
}
|
|
163
|
+
return normalizedKeyframes;
|
|
164
|
+
}
|
|
165
|
+
function listenOnPlayer(player, eventName, event, callback) {
|
|
166
|
+
switch (eventName) {
|
|
167
|
+
case 'start':
|
|
168
|
+
player.onStart(() => callback(event && copyAnimationEvent(event, 'start', player)));
|
|
169
|
+
break;
|
|
170
|
+
case 'done':
|
|
171
|
+
player.onDone(() => callback(event && copyAnimationEvent(event, 'done', player)));
|
|
172
|
+
break;
|
|
173
|
+
case 'destroy':
|
|
174
|
+
player.onDestroy(() => callback(event && copyAnimationEvent(event, 'destroy', player)));
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function copyAnimationEvent(e, phaseName, player) {
|
|
179
|
+
const totalTime = player.totalTime;
|
|
180
|
+
const disabled = player.disabled ? true : false;
|
|
181
|
+
const event = makeAnimationEvent(e.element, e.triggerName, e.fromState, e.toState, phaseName || e.phaseName, totalTime == undefined ? e.totalTime : totalTime, disabled);
|
|
182
|
+
const data = e['_data'];
|
|
183
|
+
if (data != null) {
|
|
184
|
+
event['_data'] = data;
|
|
185
|
+
}
|
|
186
|
+
return event;
|
|
187
|
+
}
|
|
188
|
+
function makeAnimationEvent(element, triggerName, fromState, toState, phaseName = '', totalTime = 0, disabled) {
|
|
189
|
+
return {
|
|
190
|
+
element,
|
|
191
|
+
triggerName,
|
|
192
|
+
fromState,
|
|
193
|
+
toState,
|
|
194
|
+
phaseName,
|
|
195
|
+
totalTime,
|
|
196
|
+
disabled: !!disabled
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
function getOrSetDefaultValue(map, key, defaultValue) {
|
|
200
|
+
let value = map.get(key);
|
|
201
|
+
if (!value) {
|
|
202
|
+
map.set(key, value = defaultValue);
|
|
203
|
+
}
|
|
204
|
+
return value;
|
|
205
|
+
}
|
|
206
|
+
function parseTimelineCommand(command) {
|
|
207
|
+
const separatorPos = command.indexOf(':');
|
|
208
|
+
const id = command.substring(1, separatorPos);
|
|
209
|
+
const action = command.slice(separatorPos + 1);
|
|
210
|
+
return [id, action];
|
|
211
|
+
}
|
|
212
|
+
const documentElement = /* @__PURE__ */(() => typeof document === 'undefined' ? null : document.documentElement)();
|
|
213
|
+
function getParentElement(element) {
|
|
214
|
+
const parent = element.parentNode || element.host || null;
|
|
215
|
+
if (parent === documentElement) {
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
return parent;
|
|
219
|
+
}
|
|
220
|
+
function containsVendorPrefix(prop) {
|
|
221
|
+
return prop.substring(1, 6) == 'ebkit';
|
|
222
|
+
}
|
|
223
|
+
let _CACHED_BODY = null;
|
|
224
|
+
let _IS_WEBKIT = false;
|
|
225
|
+
function validateStyleProperty(prop) {
|
|
226
|
+
if (!_CACHED_BODY) {
|
|
227
|
+
_CACHED_BODY = getBodyNode() || {};
|
|
228
|
+
_IS_WEBKIT = _CACHED_BODY.style ? 'WebkitAppearance' in _CACHED_BODY.style : false;
|
|
229
|
+
}
|
|
230
|
+
let result = true;
|
|
231
|
+
if (_CACHED_BODY.style && !containsVendorPrefix(prop)) {
|
|
232
|
+
result = prop in _CACHED_BODY.style;
|
|
233
|
+
if (!result && _IS_WEBKIT) {
|
|
234
|
+
const camelProp = 'Webkit' + prop.charAt(0).toUpperCase() + prop.slice(1);
|
|
235
|
+
result = camelProp in _CACHED_BODY.style;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return result;
|
|
239
|
+
}
|
|
240
|
+
function validateWebAnimatableStyleProperty(prop) {
|
|
241
|
+
return ANIMATABLE_PROP_SET.has(prop);
|
|
242
|
+
}
|
|
243
|
+
function getBodyNode() {
|
|
244
|
+
if (typeof document != 'undefined') {
|
|
245
|
+
return document.body;
|
|
246
|
+
}
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
function containsElement(elm1, elm2) {
|
|
250
|
+
while (elm2) {
|
|
251
|
+
if (elm2 === elm1) {
|
|
252
|
+
return true;
|
|
253
|
+
}
|
|
254
|
+
elm2 = getParentElement(elm2);
|
|
255
|
+
}
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
function invokeQuery(element, selector, multi) {
|
|
259
|
+
if (multi) {
|
|
260
|
+
return Array.from(element.querySelectorAll(selector));
|
|
261
|
+
}
|
|
262
|
+
const elem = element.querySelector(selector);
|
|
263
|
+
return elem ? [elem] : [];
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
const ONE_SECOND = 1000;
|
|
267
|
+
const SUBSTITUTION_EXPR_START = '{{';
|
|
268
|
+
const SUBSTITUTION_EXPR_END = '}}';
|
|
269
|
+
const ENTER_CLASSNAME = 'ng-enter';
|
|
270
|
+
const LEAVE_CLASSNAME = 'ng-leave';
|
|
271
|
+
const NG_TRIGGER_CLASSNAME = 'ng-trigger';
|
|
272
|
+
const NG_TRIGGER_SELECTOR = '.ng-trigger';
|
|
273
|
+
const NG_ANIMATING_CLASSNAME = 'ng-animating';
|
|
274
|
+
const NG_ANIMATING_SELECTOR = '.ng-animating';
|
|
275
|
+
function resolveTimingValue(value) {
|
|
276
|
+
if (typeof value == 'number') return value;
|
|
277
|
+
const matches = value.match(/^(-?[\.\d]+)(m?s)/);
|
|
278
|
+
if (!matches || matches.length < 2) return 0;
|
|
279
|
+
return _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);
|
|
280
|
+
}
|
|
281
|
+
function _convertTimeValueToMS(value, unit) {
|
|
282
|
+
switch (unit) {
|
|
283
|
+
case 's':
|
|
284
|
+
return value * ONE_SECOND;
|
|
285
|
+
default:
|
|
286
|
+
return value;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
function resolveTiming(timings, errors, allowNegativeValues) {
|
|
290
|
+
return timings.hasOwnProperty('duration') ? timings : parseTimeExpression(timings, errors, allowNegativeValues);
|
|
291
|
+
}
|
|
292
|
+
const PARSE_TIME_EXPRESSION_REGEX = /^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i;
|
|
293
|
+
function parseTimeExpression(exp, errors, allowNegativeValues) {
|
|
294
|
+
let duration;
|
|
295
|
+
let delay = 0;
|
|
296
|
+
let easing = '';
|
|
297
|
+
if (typeof exp === 'string') {
|
|
298
|
+
const matches = exp.match(PARSE_TIME_EXPRESSION_REGEX);
|
|
299
|
+
if (matches === null) {
|
|
300
|
+
errors.push(invalidTimingValue(exp));
|
|
301
|
+
return {
|
|
302
|
+
duration: 0,
|
|
303
|
+
delay: 0,
|
|
304
|
+
easing: ''
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
duration = _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);
|
|
308
|
+
const delayMatch = matches[3];
|
|
309
|
+
if (delayMatch != null) {
|
|
310
|
+
delay = _convertTimeValueToMS(parseFloat(delayMatch), matches[4]);
|
|
311
|
+
}
|
|
312
|
+
const easingVal = matches[5];
|
|
313
|
+
if (easingVal) {
|
|
314
|
+
easing = easingVal;
|
|
315
|
+
}
|
|
316
|
+
} else {
|
|
317
|
+
duration = exp;
|
|
318
|
+
}
|
|
319
|
+
if (!allowNegativeValues) {
|
|
320
|
+
let containsErrors = false;
|
|
321
|
+
let startIndex = errors.length;
|
|
322
|
+
if (duration < 0) {
|
|
323
|
+
errors.push(negativeStepValue());
|
|
324
|
+
containsErrors = true;
|
|
325
|
+
}
|
|
326
|
+
if (delay < 0) {
|
|
327
|
+
errors.push(negativeDelayValue());
|
|
328
|
+
containsErrors = true;
|
|
329
|
+
}
|
|
330
|
+
if (containsErrors) {
|
|
331
|
+
errors.splice(startIndex, 0, invalidTimingValue(exp));
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return {
|
|
335
|
+
duration,
|
|
336
|
+
delay,
|
|
337
|
+
easing
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
function normalizeKeyframes(keyframes) {
|
|
341
|
+
if (!keyframes.length) {
|
|
342
|
+
return [];
|
|
343
|
+
}
|
|
344
|
+
if (keyframes[0] instanceof Map) {
|
|
345
|
+
return keyframes;
|
|
346
|
+
}
|
|
347
|
+
return keyframes.map(kf => new Map(Object.entries(kf)));
|
|
348
|
+
}
|
|
349
|
+
function normalizeStyles(styles) {
|
|
350
|
+
return Array.isArray(styles) ? new Map(...styles) : new Map(styles);
|
|
351
|
+
}
|
|
352
|
+
function setStyles(element, styles, formerStyles) {
|
|
353
|
+
styles.forEach((val, prop) => {
|
|
354
|
+
const camelProp = dashCaseToCamelCase(prop);
|
|
355
|
+
if (formerStyles && !formerStyles.has(prop)) {
|
|
356
|
+
formerStyles.set(prop, element.style[camelProp]);
|
|
357
|
+
}
|
|
358
|
+
element.style[camelProp] = val;
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
function eraseStyles(element, styles) {
|
|
362
|
+
styles.forEach((_, prop) => {
|
|
363
|
+
const camelProp = dashCaseToCamelCase(prop);
|
|
364
|
+
element.style[camelProp] = '';
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
function normalizeAnimationEntry(steps) {
|
|
368
|
+
if (Array.isArray(steps)) {
|
|
369
|
+
if (steps.length == 1) return steps[0];
|
|
370
|
+
return sequence(steps);
|
|
371
|
+
}
|
|
372
|
+
return steps;
|
|
373
|
+
}
|
|
374
|
+
function validateStyleParams(value, options, errors) {
|
|
375
|
+
const params = options.params || {};
|
|
376
|
+
const matches = extractStyleParams(value);
|
|
377
|
+
if (matches.length) {
|
|
378
|
+
matches.forEach(varName => {
|
|
379
|
+
if (!params.hasOwnProperty(varName)) {
|
|
380
|
+
errors.push(invalidStyleParams(varName));
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
const PARAM_REGEX = /* @__PURE__ */new RegExp(`${SUBSTITUTION_EXPR_START}\\s*(.+?)\\s*${SUBSTITUTION_EXPR_END}`, 'g');
|
|
386
|
+
function extractStyleParams(value) {
|
|
387
|
+
let params = [];
|
|
388
|
+
if (typeof value === 'string') {
|
|
389
|
+
let match;
|
|
390
|
+
while (match = PARAM_REGEX.exec(value)) {
|
|
391
|
+
params.push(match[1]);
|
|
392
|
+
}
|
|
393
|
+
PARAM_REGEX.lastIndex = 0;
|
|
394
|
+
}
|
|
395
|
+
return params;
|
|
396
|
+
}
|
|
397
|
+
function interpolateParams(value, params, errors) {
|
|
398
|
+
const original = `${value}`;
|
|
399
|
+
const str = original.replace(PARAM_REGEX, (_, varName) => {
|
|
400
|
+
let localVal = params[varName];
|
|
401
|
+
if (localVal == null) {
|
|
402
|
+
errors.push(invalidParamValue(varName));
|
|
403
|
+
localVal = '';
|
|
404
|
+
}
|
|
405
|
+
return localVal.toString();
|
|
406
|
+
});
|
|
407
|
+
return str == original ? value : str;
|
|
408
|
+
}
|
|
409
|
+
const DASH_CASE_REGEXP = /-+([a-z0-9])/g;
|
|
410
|
+
function dashCaseToCamelCase(input) {
|
|
411
|
+
return input.replace(DASH_CASE_REGEXP, (...m) => m[1].toUpperCase());
|
|
412
|
+
}
|
|
413
|
+
function camelCaseToDashCase(input) {
|
|
414
|
+
return input.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
|
|
415
|
+
}
|
|
416
|
+
function allowPreviousPlayerStylesMerge(duration, delay) {
|
|
417
|
+
return duration === 0 || delay === 0;
|
|
418
|
+
}
|
|
419
|
+
function balancePreviousStylesIntoKeyframes(element, keyframes, previousStyles) {
|
|
420
|
+
if (previousStyles.size && keyframes.length) {
|
|
421
|
+
let startingKeyframe = keyframes[0];
|
|
422
|
+
let missingStyleProps = [];
|
|
423
|
+
previousStyles.forEach((val, prop) => {
|
|
424
|
+
if (!startingKeyframe.has(prop)) {
|
|
425
|
+
missingStyleProps.push(prop);
|
|
426
|
+
}
|
|
427
|
+
startingKeyframe.set(prop, val);
|
|
428
|
+
});
|
|
429
|
+
if (missingStyleProps.length) {
|
|
430
|
+
for (let i = 1; i < keyframes.length; i++) {
|
|
431
|
+
let kf = keyframes[i];
|
|
432
|
+
missingStyleProps.forEach(prop => kf.set(prop, computeStyle(element, prop)));
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
return keyframes;
|
|
437
|
+
}
|
|
438
|
+
function visitDslNode(visitor, node, context) {
|
|
439
|
+
switch (node.type) {
|
|
440
|
+
case AnimationMetadataType.Trigger:
|
|
441
|
+
return visitor.visitTrigger(node, context);
|
|
442
|
+
case AnimationMetadataType.State:
|
|
443
|
+
return visitor.visitState(node, context);
|
|
444
|
+
case AnimationMetadataType.Transition:
|
|
445
|
+
return visitor.visitTransition(node, context);
|
|
446
|
+
case AnimationMetadataType.Sequence:
|
|
447
|
+
return visitor.visitSequence(node, context);
|
|
448
|
+
case AnimationMetadataType.Group:
|
|
449
|
+
return visitor.visitGroup(node, context);
|
|
450
|
+
case AnimationMetadataType.Animate:
|
|
451
|
+
return visitor.visitAnimate(node, context);
|
|
452
|
+
case AnimationMetadataType.Keyframes:
|
|
453
|
+
return visitor.visitKeyframes(node, context);
|
|
454
|
+
case AnimationMetadataType.Style:
|
|
455
|
+
return visitor.visitStyle(node, context);
|
|
456
|
+
case AnimationMetadataType.Reference:
|
|
457
|
+
return visitor.visitReference(node, context);
|
|
458
|
+
case AnimationMetadataType.AnimateChild:
|
|
459
|
+
return visitor.visitAnimateChild(node, context);
|
|
460
|
+
case AnimationMetadataType.AnimateRef:
|
|
461
|
+
return visitor.visitAnimateRef(node, context);
|
|
462
|
+
case AnimationMetadataType.Query:
|
|
463
|
+
return visitor.visitQuery(node, context);
|
|
464
|
+
case AnimationMetadataType.Stagger:
|
|
465
|
+
return visitor.visitStagger(node, context);
|
|
466
|
+
default:
|
|
467
|
+
throw invalidNodeType(node.type);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
function computeStyle(element, prop) {
|
|
471
|
+
return window.getComputedStyle(element)[prop];
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
export { ENTER_CLASSNAME, LEAVE_CLASSNAME, NG_ANIMATING_CLASSNAME, NG_ANIMATING_SELECTOR, NG_TRIGGER_CLASSNAME, NG_TRIGGER_SELECTOR, SUBSTITUTION_EXPR_START, allowPreviousPlayerStylesMerge, balancePreviousStylesIntoKeyframes, buildingFailed, camelCaseToDashCase, computeStyle, containsElement, createAnimationFailed, dashCaseToCamelCase, eraseStyles, extractStyleParams, getOrSetDefaultValue, getParentElement, interpolateParams, invalidCssUnitValue, invalidDefinition, invalidExpression, invalidKeyframes, invalidOffset, invalidParallelAnimation, invalidQuery, invalidStagger, invalidState, invalidStyleValue, invalidTransitionAlias, invalidTrigger, invokeQuery, keyframeOffsetsOutOfOrder, keyframesMissingOffsets, listenOnPlayer, makeAnimationEvent, missingEvent, missingOrDestroyedAnimation, missingPlayer, missingTrigger, normalizeAnimationEntry, normalizeKeyframes$1 as normalizeKeyframes, normalizeKeyframes as normalizeKeyframes$1, normalizeStyles, optimizeGroupPlayer, parseTimelineCommand, registerFailed, resolveTiming, resolveTimingValue, setStyles, transitionFailed, triggerBuildFailed, triggerTransitionsFailed, unregisteredTrigger, unsupportedTriggerEvent, validateStyleParams, validateStyleProperty, validateWebAnimatableStyleProperty, validationFailed, visitDslNode };
|
|
475
|
+
//# sourceMappingURL=_util-chunk.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_util-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/packages/animations/browser/src/error_helpers.ts","../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/packages/animations/browser/src/render/web_animations/animatable_props_set.ts","../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/packages/animations/browser/src/render/shared.ts","../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/packages/animations/browser/src/util.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {RuntimeErrorCode} from '../../src/errors';\nimport {ɵRuntimeError as RuntimeError} from '@angular/core';\n\nconst LINE_START = '\\n - ';\n\nexport function invalidTimingValue(exp: string | number): Error {\n return new RuntimeError(\n RuntimeErrorCode.INVALID_TIMING_VALUE,\n ngDevMode && `The provided timing value \"${exp}\" is invalid.`,\n );\n}\n\nexport function negativeStepValue(): Error {\n return new RuntimeError(\n RuntimeErrorCode.NEGATIVE_STEP_VALUE,\n ngDevMode && 'Duration values below 0 are not allowed for this animation step.',\n );\n}\n\nexport function negativeDelayValue(): Error {\n return new RuntimeError(\n RuntimeErrorCode.NEGATIVE_DELAY_VALUE,\n ngDevMode && 'Delay values below 0 are not allowed for this animation step.',\n );\n}\n\nexport function invalidStyleParams(varName: string): Error {\n return new RuntimeError(\n RuntimeErrorCode.INVALID_STYLE_PARAMS,\n ngDevMode &&\n `Unable to resolve the local animation param ${varName} in the given list of values`,\n );\n}\n\nexport function invalidParamValue(varName: string): Error {\n return new RuntimeError(\n RuntimeErrorCode.INVALID_PARAM_VALUE,\n ngDevMode && `Please provide a value for the animation param ${varName}`,\n );\n}\n\nexport function invalidNodeType(nodeType: string): Error {\n return new RuntimeError(\n RuntimeErrorCode.INVALID_NODE_TYPE,\n ngDevMode && `Unable to resolve animation metadata node #${nodeType}`,\n );\n}\n\nexport function invalidCssUnitValue(userProvidedProperty: string, value: string): Error {\n return new RuntimeError(\n RuntimeErrorCode.INVALID_CSS_UNIT_VALUE,\n ngDevMode && `Please provide a CSS unit value for ${userProvidedProperty}:${value}`,\n );\n}\n\nexport function invalidTrigger(): Error {\n return new RuntimeError(\n RuntimeErrorCode.INVALID_TRIGGER,\n ngDevMode &&\n \"animation triggers cannot be prefixed with an `@` sign (e.g. trigger('@foo', [...]))\",\n );\n}\n\nexport function invalidDefinition(): Error {\n return new RuntimeError(\n RuntimeErrorCode.INVALID_DEFINITION,\n ngDevMode && 'only state() and transition() definitions can sit inside of a trigger()',\n );\n}\n\nexport function invalidState(metadataName: string, missingSubs: string[]): Error {\n return new RuntimeError(\n RuntimeErrorCode.INVALID_STATE,\n ngDevMode &&\n `state(\"${metadataName}\", ...) must define default values for all the following style substitutions: ${missingSubs.join(\n ', ',\n )}`,\n );\n}\n\nexport function invalidStyleValue(value: string): Error {\n return new RuntimeError(\n RuntimeErrorCode.INVALID_STYLE_VALUE,\n ngDevMode && `The provided style string value ${value} is not allowed.`,\n );\n}\n\nexport function invalidProperty(prop: string): Error {\n return new RuntimeError(\n RuntimeErrorCode.INVALID_PROPERTY,\n ngDevMode &&\n `The provided animation property \"${prop}\" is not a supported CSS property for animations`,\n );\n}\n\nexport function invalidParallelAnimation(\n prop: string,\n firstStart: number,\n firstEnd: number,\n secondStart: number,\n secondEnd: number,\n): Error {\n return new RuntimeError(\n RuntimeErrorCode.INVALID_PARALLEL_ANIMATION,\n ngDevMode &&\n `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\"`,\n );\n}\n\nexport function invalidKeyframes(): Error {\n return new RuntimeError(\n RuntimeErrorCode.INVALID_KEYFRAMES,\n ngDevMode && `keyframes() must be placed inside of a call to animate()`,\n );\n}\n\nexport function invalidOffset(): Error {\n return new RuntimeError(\n RuntimeErrorCode.INVALID_OFFSET,\n ngDevMode && `Please ensure that all keyframe offsets are between 0 and 1`,\n );\n}\n\nexport function keyframeOffsetsOutOfOrder(): Error {\n return new RuntimeError(\n RuntimeErrorCode.KEYFRAME_OFFSETS_OUT_OF_ORDER,\n ngDevMode && `Please ensure that all keyframe offsets are in order`,\n );\n}\n\nexport function keyframesMissingOffsets(): Error {\n return new RuntimeError(\n RuntimeErrorCode.KEYFRAMES_MISSING_OFFSETS,\n ngDevMode && `Not all style() steps within the declared keyframes() contain offsets`,\n );\n}\n\nexport function invalidStagger(): Error {\n return new RuntimeError(\n RuntimeErrorCode.INVALID_STAGGER,\n ngDevMode && `stagger() can only be used inside of query()`,\n );\n}\n\nexport function invalidQuery(selector: string): Error {\n return new RuntimeError(\n RuntimeErrorCode.INVALID_QUERY,\n ngDevMode &&\n `\\`query(\"${selector}\")\\` returned zero elements. (Use \\`query(\"${selector}\", { optional: true })\\` if you wish to allow this.)`,\n );\n}\n\nexport function invalidExpression(expr: string): Error {\n return new RuntimeError(\n RuntimeErrorCode.INVALID_EXPRESSION,\n ngDevMode && `The provided transition expression \"${expr}\" is not supported`,\n );\n}\n\nexport function invalidTransitionAlias(alias: string): Error {\n return new RuntimeError(\n RuntimeErrorCode.INVALID_TRANSITION_ALIAS,\n ngDevMode && `The transition alias value \"${alias}\" is not supported`,\n );\n}\n\nexport function validationFailed(errors: Error[]): Error {\n return new RuntimeError(\n RuntimeErrorCode.VALIDATION_FAILED,\n ngDevMode && `animation validation failed:\\n${errors.map((err) => err.message).join('\\n')}`,\n );\n}\n\nexport function buildingFailed(errors: Error[]): Error {\n return new RuntimeError(\n RuntimeErrorCode.BUILDING_FAILED,\n ngDevMode && `animation building failed:\\n${errors.map((err) => err.message).join('\\n')}`,\n );\n}\n\nexport function triggerBuildFailed(name: string, errors: Error[]): Error {\n return new RuntimeError(\n RuntimeErrorCode.TRIGGER_BUILD_FAILED,\n ngDevMode &&\n `The animation trigger \"${name}\" has failed to build due to the following errors:\\n - ${errors\n .map((err) => err.message)\n .join('\\n - ')}`,\n );\n}\n\nexport function animationFailed(errors: Error[]): Error {\n return new RuntimeError(\n RuntimeErrorCode.ANIMATION_FAILED,\n ngDevMode &&\n `Unable to animate due to the following errors:${LINE_START}${errors\n .map((err) => err.message)\n .join(LINE_START)}`,\n );\n}\n\nexport function registerFailed(errors: Error[]): Error {\n return new RuntimeError(\n RuntimeErrorCode.REGISTRATION_FAILED,\n ngDevMode &&\n `Unable to build the animation due to the following errors: ${errors\n .map((err) => err.message)\n .join('\\n')}`,\n );\n}\n\nexport function missingOrDestroyedAnimation(): Error {\n return new RuntimeError(\n RuntimeErrorCode.MISSING_OR_DESTROYED_ANIMATION,\n ngDevMode && \"The requested animation doesn't exist or has already been destroyed\",\n );\n}\n\nexport function createAnimationFailed(errors: Error[]): Error {\n return new RuntimeError(\n RuntimeErrorCode.CREATE_ANIMATION_FAILED,\n ngDevMode &&\n `Unable to create the animation due to the following errors:${errors\n .map((err) => err.message)\n .join('\\n')}`,\n );\n}\n\nexport function missingPlayer(id: string): Error {\n return new RuntimeError(\n RuntimeErrorCode.MISSING_PLAYER,\n ngDevMode && `Unable to find the timeline player referenced by ${id}`,\n );\n}\n\nexport function missingTrigger(phase: string, name: string): Error {\n return new RuntimeError(\n RuntimeErrorCode.MISSING_TRIGGER,\n ngDevMode &&\n `Unable to listen on the animation trigger event \"${phase}\" because the animation trigger \"${name}\" doesn\\'t exist!`,\n );\n}\n\nexport function missingEvent(name: string): Error {\n return new RuntimeError(\n RuntimeErrorCode.MISSING_EVENT,\n ngDevMode &&\n `Unable to listen on the animation trigger \"${name}\" because the provided event is undefined!`,\n );\n}\n\nexport function unsupportedTriggerEvent(phase: string, name: string): Error {\n return new RuntimeError(\n RuntimeErrorCode.UNSUPPORTED_TRIGGER_EVENT,\n ngDevMode &&\n `The provided animation trigger event \"${phase}\" for the animation trigger \"${name}\" is not supported!`,\n );\n}\n\nexport function unregisteredTrigger(name: string): Error {\n return new RuntimeError(\n RuntimeErrorCode.UNREGISTERED_TRIGGER,\n ngDevMode && `The provided animation trigger \"${name}\" has not been registered!`,\n );\n}\n\nexport function triggerTransitionsFailed(errors: Error[]): Error {\n return new RuntimeError(\n RuntimeErrorCode.TRIGGER_TRANSITIONS_FAILED,\n ngDevMode &&\n `Unable to process animations due to the following failed trigger transitions\\n ${errors\n .map((err) => err.message)\n .join('\\n')}`,\n );\n}\n\nexport function triggerParsingFailed(name: string, errors: Error[]): Error {\n return new RuntimeError(\n RuntimeErrorCode.TRIGGER_PARSING_FAILED,\n ngDevMode &&\n `Animation parsing for the ${name} trigger have failed:${LINE_START}${errors\n .map((err) => err.message)\n .join(LINE_START)}`,\n );\n}\n\nexport function transitionFailed(name: string, errors: Error[]): Error {\n return new RuntimeError(\n RuntimeErrorCode.TRANSITION_FAILED,\n ngDevMode && `@${name} has failed due to:\\n ${errors.map((err) => err.message).join('\\n- ')}`,\n );\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/**\n * Set of all animatable CSS properties\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties\n */\nexport const ANIMATABLE_PROP_SET = new Set([\n '-moz-outline-radius',\n '-moz-outline-radius-bottomleft',\n '-moz-outline-radius-bottomright',\n '-moz-outline-radius-topleft',\n '-moz-outline-radius-topright',\n '-ms-grid-columns',\n '-ms-grid-rows',\n '-webkit-line-clamp',\n '-webkit-text-fill-color',\n '-webkit-text-stroke',\n '-webkit-text-stroke-color',\n 'accent-color',\n 'all',\n 'backdrop-filter',\n 'background',\n 'background-color',\n 'background-position',\n 'background-size',\n 'block-size',\n 'border',\n 'border-block-end',\n 'border-block-end-color',\n 'border-block-end-width',\n 'border-block-start',\n 'border-block-start-color',\n 'border-block-start-width',\n 'border-bottom',\n 'border-bottom-color',\n 'border-bottom-left-radius',\n 'border-bottom-right-radius',\n 'border-bottom-width',\n 'border-color',\n 'border-end-end-radius',\n 'border-end-start-radius',\n 'border-image-outset',\n 'border-image-slice',\n 'border-image-width',\n 'border-inline-end',\n 'border-inline-end-color',\n 'border-inline-end-width',\n 'border-inline-start',\n 'border-inline-start-color',\n 'border-inline-start-width',\n 'border-left',\n 'border-left-color',\n 'border-left-width',\n 'border-radius',\n 'border-right',\n 'border-right-color',\n 'border-right-width',\n 'border-start-end-radius',\n 'border-start-start-radius',\n 'border-top',\n 'border-top-color',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-top-width',\n 'border-width',\n 'bottom',\n 'box-shadow',\n 'caret-color',\n 'clip',\n 'clip-path',\n 'color',\n 'column-count',\n 'column-gap',\n 'column-rule',\n 'column-rule-color',\n 'column-rule-width',\n 'column-width',\n 'columns',\n 'filter',\n 'flex',\n 'flex-basis',\n 'flex-grow',\n 'flex-shrink',\n 'font',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-variation-settings',\n 'font-weight',\n 'gap',\n 'grid-column-gap',\n 'grid-gap',\n 'grid-row-gap',\n 'grid-template-columns',\n 'grid-template-rows',\n 'height',\n 'inline-size',\n 'input-security',\n 'inset',\n 'inset-block',\n 'inset-block-end',\n 'inset-block-start',\n 'inset-inline',\n 'inset-inline-end',\n 'inset-inline-start',\n 'left',\n 'letter-spacing',\n 'line-clamp',\n 'line-height',\n 'margin',\n 'margin-block-end',\n 'margin-block-start',\n 'margin-bottom',\n 'margin-inline-end',\n 'margin-inline-start',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'mask',\n 'mask-border',\n 'mask-position',\n 'mask-size',\n 'max-block-size',\n 'max-height',\n 'max-inline-size',\n 'max-lines',\n 'max-width',\n 'min-block-size',\n 'min-height',\n 'min-inline-size',\n 'min-width',\n 'object-position',\n 'offset',\n 'offset-anchor',\n 'offset-distance',\n 'offset-path',\n 'offset-position',\n 'offset-rotate',\n 'opacity',\n 'order',\n 'outline',\n 'outline-color',\n 'outline-offset',\n 'outline-width',\n 'padding',\n 'padding-block-end',\n 'padding-block-start',\n 'padding-bottom',\n 'padding-inline-end',\n 'padding-inline-start',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'perspective',\n 'perspective-origin',\n 'right',\n 'rotate',\n 'row-gap',\n 'scale',\n 'scroll-margin',\n 'scroll-margin-block',\n 'scroll-margin-block-end',\n 'scroll-margin-block-start',\n 'scroll-margin-bottom',\n 'scroll-margin-inline',\n 'scroll-margin-inline-end',\n 'scroll-margin-inline-start',\n 'scroll-margin-left',\n 'scroll-margin-right',\n 'scroll-margin-top',\n 'scroll-padding',\n 'scroll-padding-block',\n 'scroll-padding-block-end',\n 'scroll-padding-block-start',\n 'scroll-padding-bottom',\n 'scroll-padding-inline',\n 'scroll-padding-inline-end',\n 'scroll-padding-inline-start',\n 'scroll-padding-left',\n 'scroll-padding-right',\n 'scroll-padding-top',\n 'scroll-snap-coordinate',\n 'scroll-snap-destination',\n 'scrollbar-color',\n 'shape-image-threshold',\n 'shape-margin',\n 'shape-outside',\n 'tab-size',\n 'text-decoration',\n 'text-decoration-color',\n 'text-decoration-thickness',\n 'text-emphasis',\n 'text-emphasis-color',\n 'text-indent',\n 'text-shadow',\n 'text-underline-offset',\n 'top',\n 'transform',\n 'transform-origin',\n 'translate',\n 'vertical-align',\n 'visibility',\n 'width',\n 'word-spacing',\n 'z-index',\n 'zoom',\n]);\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\nimport {\n AnimationEvent,\n AnimationPlayer,\n AUTO_STYLE,\n NoopAnimationPlayer,\n ɵAnimationGroupPlayer,\n ɵPRE_STYLE as PRE_STYLE,\n ɵStyleDataMap,\n} from '../../../src/animations';\n\nimport {AnimationStyleNormalizer} from '../../src/dsl/style_normalization/animation_style_normalizer';\nimport {animationFailed} from '../error_helpers';\n\nimport {ANIMATABLE_PROP_SET} from './web_animations/animatable_props_set';\n\nexport function optimizeGroupPlayer(players: AnimationPlayer[]): AnimationPlayer {\n switch (players.length) {\n case 0:\n return new NoopAnimationPlayer();\n case 1:\n return players[0];\n default:\n return new ɵAnimationGroupPlayer(players);\n }\n}\n\nexport function normalizeKeyframes(\n normalizer: AnimationStyleNormalizer,\n keyframes: Array<ɵStyleDataMap>,\n preStyles: ɵStyleDataMap = new Map(),\n postStyles: ɵStyleDataMap = new Map(),\n): Array<ɵStyleDataMap> {\n const errors: Error[] = [];\n const normalizedKeyframes: Array<ɵStyleDataMap> = [];\n let previousOffset = -1;\n let previousKeyframe: ɵStyleDataMap | null = null;\n keyframes.forEach((kf) => {\n const offset = kf.get('offset') as number;\n const isSameOffset = offset == previousOffset;\n const normalizedKeyframe: ɵStyleDataMap = (isSameOffset && previousKeyframe) || new Map();\n kf.forEach((val, prop) => {\n let normalizedProp = prop;\n let normalizedValue = val;\n if (prop !== 'offset') {\n normalizedProp = normalizer.normalizePropertyName(normalizedProp, errors);\n switch (normalizedValue) {\n case PRE_STYLE:\n normalizedValue = preStyles.get(prop)!;\n break;\n\n case AUTO_STYLE:\n normalizedValue = postStyles.get(prop)!;\n break;\n\n default:\n normalizedValue = normalizer.normalizeStyleValue(\n prop,\n normalizedProp,\n normalizedValue,\n errors,\n );\n break;\n }\n }\n normalizedKeyframe.set(normalizedProp, normalizedValue);\n });\n if (!isSameOffset) {\n normalizedKeyframes.push(normalizedKeyframe);\n }\n previousKeyframe = normalizedKeyframe;\n previousOffset = offset;\n });\n if (errors.length) {\n throw animationFailed(errors);\n }\n\n return normalizedKeyframes;\n}\n\nexport function listenOnPlayer(\n player: AnimationPlayer,\n eventName: string,\n event: AnimationEvent | undefined,\n callback: (event: any) => any,\n) {\n switch (eventName) {\n case 'start':\n player.onStart(() => callback(event && copyAnimationEvent(event, 'start', player)));\n break;\n case 'done':\n player.onDone(() => callback(event && copyAnimationEvent(event, 'done', player)));\n break;\n case 'destroy':\n player.onDestroy(() => callback(event && copyAnimationEvent(event, 'destroy', player)));\n break;\n }\n}\n\nexport function copyAnimationEvent(\n e: AnimationEvent,\n phaseName: string,\n player: AnimationPlayer,\n): AnimationEvent {\n const totalTime = player.totalTime;\n const disabled = (player as any).disabled ? true : false;\n const event = makeAnimationEvent(\n e.element,\n e.triggerName,\n e.fromState,\n e.toState,\n phaseName || e.phaseName,\n totalTime == undefined ? e.totalTime : totalTime,\n disabled,\n );\n const data = (e as any)['_data'];\n if (data != null) {\n (event as any)['_data'] = data;\n }\n return event;\n}\n\nexport function makeAnimationEvent(\n element: any,\n triggerName: string,\n fromState: string,\n toState: string,\n phaseName: string = '',\n totalTime: number = 0,\n disabled?: boolean,\n): AnimationEvent {\n return {element, triggerName, fromState, toState, phaseName, totalTime, disabled: !!disabled};\n}\n\nexport function getOrSetDefaultValue<T, V>(map: Map<T, V>, key: T, defaultValue: V) {\n let value = map.get(key);\n if (!value) {\n map.set(key, (value = defaultValue));\n }\n return value;\n}\n\nexport function parseTimelineCommand(command: string): [string, string] {\n const separatorPos = command.indexOf(':');\n const id = command.substring(1, separatorPos);\n const action = command.slice(separatorPos + 1);\n return [id, action];\n}\n\nconst documentElement: HTMLElement | null = /* @__PURE__ */ (() =>\n typeof document === 'undefined' ? null : document.documentElement)();\n\nexport function getParentElement(element: any): unknown | null {\n const parent = element.parentNode || element.host || null; // consider host to support shadow DOM\n if (parent === documentElement) {\n return null;\n }\n return parent;\n}\n\nfunction containsVendorPrefix(prop: string): boolean {\n // Webkit is the only real popular vendor prefix nowadays\n // cc: http://shouldiprefix.com/\n return prop.substring(1, 6) == 'ebkit'; // webkit or Webkit\n}\n\nlet _CACHED_BODY: {style: any} | null = null;\nlet _IS_WEBKIT = false;\nexport function validateStyleProperty(prop: string): boolean {\n if (!_CACHED_BODY) {\n _CACHED_BODY = getBodyNode() || {};\n _IS_WEBKIT = _CACHED_BODY!.style ? 'WebkitAppearance' in _CACHED_BODY!.style : false;\n }\n\n let result = true;\n if (_CACHED_BODY!.style && !containsVendorPrefix(prop)) {\n result = prop in _CACHED_BODY!.style;\n if (!result && _IS_WEBKIT) {\n const camelProp = 'Webkit' + prop.charAt(0).toUpperCase() + prop.slice(1);\n result = camelProp in _CACHED_BODY!.style;\n }\n }\n\n return result;\n}\n\nexport function validateWebAnimatableStyleProperty(prop: string): boolean {\n return ANIMATABLE_PROP_SET.has(prop);\n}\n\nexport function getBodyNode(): any | null {\n if (typeof document != 'undefined') {\n return document.body;\n }\n return null;\n}\n\nexport function containsElement(elm1: any, elm2: any): boolean {\n while (elm2) {\n if (elm2 === elm1) {\n return true;\n }\n elm2 = getParentElement(elm2);\n }\n return false;\n}\n\nexport function invokeQuery(element: any, selector: string, multi: boolean): any[] {\n if (multi) {\n return Array.from(element.querySelectorAll(selector));\n }\n const elem = element.querySelector(selector);\n return elem ? [elem] : [];\n}\n\nexport function hypenatePropsKeys(original: ɵStyleDataMap): ɵStyleDataMap {\n const newMap: ɵStyleDataMap = new Map();\n original.forEach((val, prop) => {\n const newProp = prop.replace(/([a-z])([A-Z])/g, '$1-$2');\n newMap.set(newProp, val);\n });\n return newMap;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\nimport {\n AnimateTimings,\n AnimationMetadata,\n AnimationMetadataType,\n AnimationOptions,\n sequence,\n ɵStyleData,\n ɵStyleDataMap,\n} from '../../src/animations';\n\nimport {Ast as AnimationAst, AstVisitor as AnimationAstVisitor} from './dsl/animation_ast';\nimport {AnimationDslVisitor} from './dsl/animation_dsl_visitor';\nimport {\n invalidNodeType,\n invalidParamValue,\n invalidStyleParams,\n invalidTimingValue,\n negativeDelayValue,\n negativeStepValue,\n} from './error_helpers';\n\nconst ONE_SECOND = 1000;\n\nexport const SUBSTITUTION_EXPR_START = '{{';\nexport const SUBSTITUTION_EXPR_END = '}}';\nexport const ENTER_CLASSNAME = 'ng-enter';\nexport const LEAVE_CLASSNAME = 'ng-leave';\nexport const NG_TRIGGER_CLASSNAME = 'ng-trigger';\nexport const NG_TRIGGER_SELECTOR = '.ng-trigger';\nexport const NG_ANIMATING_CLASSNAME = 'ng-animating';\nexport const NG_ANIMATING_SELECTOR = '.ng-animating';\n\nexport function resolveTimingValue(value: string | number) {\n if (typeof value == 'number') return value;\n\n const matches = value.match(/^(-?[\\.\\d]+)(m?s)/);\n if (!matches || matches.length < 2) return 0;\n\n return _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);\n}\n\nfunction _convertTimeValueToMS(value: number, unit: string): number {\n switch (unit) {\n case 's':\n return value * ONE_SECOND;\n default: // ms or something else\n return value;\n }\n}\n\nexport function resolveTiming(\n timings: string | number | AnimateTimings,\n errors: Error[],\n allowNegativeValues?: boolean,\n) {\n return timings.hasOwnProperty('duration')\n ? <AnimateTimings>timings\n : parseTimeExpression(<string | number>timings, errors, allowNegativeValues);\n}\n\nconst PARSE_TIME_EXPRESSION_REGEX =\n /^(-?[\\.\\d]+)(m?s)(?:\\s+(-?[\\.\\d]+)(m?s))?(?:\\s+([-a-z]+(?:\\(.+?\\))?))?$/i;\nfunction parseTimeExpression(\n exp: string | number,\n errors: Error[],\n allowNegativeValues?: boolean,\n): AnimateTimings {\n let duration: number;\n let delay: number = 0;\n let easing: string = '';\n if (typeof exp === 'string') {\n const matches = exp.match(PARSE_TIME_EXPRESSION_REGEX);\n if (matches === null) {\n errors.push(invalidTimingValue(exp));\n return {duration: 0, delay: 0, easing: ''};\n }\n\n duration = _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);\n\n const delayMatch = matches[3];\n if (delayMatch != null) {\n delay = _convertTimeValueToMS(parseFloat(delayMatch), matches[4]);\n }\n\n const easingVal = matches[5];\n if (easingVal) {\n easing = easingVal;\n }\n } else {\n duration = exp;\n }\n\n if (!allowNegativeValues) {\n let containsErrors = false;\n let startIndex = errors.length;\n if (duration < 0) {\n errors.push(negativeStepValue());\n containsErrors = true;\n }\n if (delay < 0) {\n errors.push(negativeDelayValue());\n containsErrors = true;\n }\n if (containsErrors) {\n errors.splice(startIndex, 0, invalidTimingValue(exp));\n }\n }\n\n return {duration, delay, easing};\n}\n\nexport function normalizeKeyframes(\n keyframes: Array<ɵStyleData> | Array<ɵStyleDataMap>,\n): Array<ɵStyleDataMap> {\n if (!keyframes.length) {\n return [];\n }\n if (keyframes[0] instanceof Map) {\n return keyframes as Array<ɵStyleDataMap>;\n }\n return keyframes.map((kf) => new Map(Object.entries(kf)));\n}\n\nexport function normalizeStyles(styles: ɵStyleDataMap | Array<ɵStyleDataMap>): ɵStyleDataMap {\n return Array.isArray(styles) ? new Map(...styles) : new Map(styles);\n}\n\nexport function setStyles(element: any, styles: ɵStyleDataMap, formerStyles?: ɵStyleDataMap) {\n styles.forEach((val, prop) => {\n const camelProp = dashCaseToCamelCase(prop);\n if (formerStyles && !formerStyles.has(prop)) {\n formerStyles.set(prop, element.style[camelProp]);\n }\n element.style[camelProp] = val;\n });\n}\n\nexport function eraseStyles(element: any, styles: ɵStyleDataMap) {\n styles.forEach((_, prop) => {\n const camelProp = dashCaseToCamelCase(prop);\n element.style[camelProp] = '';\n });\n}\n\nexport function normalizeAnimationEntry(\n steps: AnimationMetadata | AnimationMetadata[],\n): AnimationMetadata {\n if (Array.isArray(steps)) {\n if (steps.length == 1) return steps[0];\n return sequence(steps);\n }\n return steps as AnimationMetadata;\n}\n\nexport function validateStyleParams(\n value: string | number | null | undefined,\n options: AnimationOptions,\n errors: Error[],\n) {\n const params = options.params || {};\n const matches = extractStyleParams(value);\n if (matches.length) {\n matches.forEach((varName) => {\n if (!params.hasOwnProperty(varName)) {\n errors.push(invalidStyleParams(varName));\n }\n });\n }\n}\n\nconst PARAM_REGEX = /* @__PURE__ */ new RegExp(\n `${SUBSTITUTION_EXPR_START}\\\\s*(.+?)\\\\s*${SUBSTITUTION_EXPR_END}`,\n 'g',\n);\nexport function extractStyleParams(value: string | number | null | undefined): string[] {\n let params: string[] = [];\n if (typeof value === 'string') {\n let match: any;\n while ((match = PARAM_REGEX.exec(value))) {\n params.push(match[1] as string);\n }\n PARAM_REGEX.lastIndex = 0;\n }\n return params;\n}\n\nexport function interpolateParams(\n value: string | number,\n params: {[name: string]: any},\n errors: Error[],\n): string | number {\n const original = `${value}`;\n const str = original.replace(PARAM_REGEX, (_, varName) => {\n let localVal = params[varName];\n // this means that the value was never overridden by the data passed in by the user\n if (localVal == null) {\n errors.push(invalidParamValue(varName));\n localVal = '';\n }\n return localVal.toString();\n });\n\n // we do this to assert that numeric values stay as they are\n return str == original ? value : str;\n}\n\nconst DASH_CASE_REGEXP = /-+([a-z0-9])/g;\nexport function dashCaseToCamelCase(input: string): string {\n return input.replace(DASH_CASE_REGEXP, (...m: any[]) => m[1].toUpperCase());\n}\n\nexport function camelCaseToDashCase(input: string): string {\n return input.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\nexport function allowPreviousPlayerStylesMerge(duration: number, delay: number) {\n return duration === 0 || delay === 0;\n}\n\nexport function balancePreviousStylesIntoKeyframes(\n element: any,\n keyframes: Array<ɵStyleDataMap>,\n previousStyles: ɵStyleDataMap,\n) {\n if (previousStyles.size && keyframes.length) {\n let startingKeyframe = keyframes[0];\n let missingStyleProps: string[] = [];\n previousStyles.forEach((val, prop) => {\n if (!startingKeyframe.has(prop)) {\n missingStyleProps.push(prop);\n }\n startingKeyframe.set(prop, val);\n });\n\n if (missingStyleProps.length) {\n for (let i = 1; i < keyframes.length; i++) {\n let kf = keyframes[i];\n missingStyleProps.forEach((prop) => kf.set(prop, computeStyle(element, prop)));\n }\n }\n }\n return keyframes;\n}\n\nexport function visitDslNode(\n visitor: AnimationDslVisitor,\n node: AnimationMetadata,\n context: any,\n): any;\nexport function visitDslNode(\n visitor: AnimationAstVisitor,\n node: AnimationAst<AnimationMetadataType>,\n context: any,\n): any;\nexport function visitDslNode(visitor: any, node: any, context: any): any {\n switch (node.type) {\n case AnimationMetadataType.Trigger:\n return visitor.visitTrigger(node, context);\n case AnimationMetadataType.State:\n return visitor.visitState(node, context);\n case AnimationMetadataType.Transition:\n return visitor.visitTransition(node, context);\n case AnimationMetadataType.Sequence:\n return visitor.visitSequence(node, context);\n case AnimationMetadataType.Group:\n return visitor.visitGroup(node, context);\n case AnimationMetadataType.Animate:\n return visitor.visitAnimate(node, context);\n case AnimationMetadataType.Keyframes:\n return visitor.visitKeyframes(node, context);\n case AnimationMetadataType.Style:\n return visitor.visitStyle(node, context);\n case AnimationMetadataType.Reference:\n return visitor.visitReference(node, context);\n case AnimationMetadataType.AnimateChild:\n return visitor.visitAnimateChild(node, context);\n case AnimationMetadataType.AnimateRef:\n return visitor.visitAnimateRef(node, context);\n case AnimationMetadataType.Query:\n return visitor.visitQuery(node, context);\n case AnimationMetadataType.Stagger:\n return visitor.visitStagger(node, context);\n default:\n throw invalidNodeType(node.type);\n }\n}\n\nexport function computeStyle(element: any, prop: string): string {\n return (<any>window.getComputedStyle(element))[prop];\n}\n"],"names":["RuntimeError","ngDevMode","negativeDelayValue","invalidStyleParams","varName","invalidParamValue","invalidNodeType","nodeType","userProvidedProperty","value","invalidTrigger","invalidDefinition","invalidState","metadataName","missingSubs","join","invalidStyleValue","invalidParallelAnimation","prop","firstStart","firstEnd","secondStart","secondEnd","invalidKeyframes","invalidOffset","keyframeOffsetsOutOfOrder","keyframesMissingOffsets","invalidQuery","selector","players","normalizeKeyframes","normalizer","keyframes","preStyles","Map","postStyles","previousOffset","offset","kf","get","normalizedKeyframe","isSameOffset","previousKeyframe","forEach","val","normalizedValue","normalizedProp","normalizePropertyName","errors","PRE_STYLE","AUTO_STYLE","normalizeStyleValue","set","push","length","animationFailed","normalizedKeyframes","listenOnPlayer","player","eventName","event","callback","onStart","copyAnimationEvent","onDone","onDestroy","e","phaseName","totalTime","disabled","makeAnimationEvent","element","triggerName","fromState","toState","undefined","data","getOrSetDefaultValue","map","key","defaultValue","parseTimelineCommand","command","indexOf","id","substring","separatorPos","action","slice","documentElement","document","parent","parentNode","host","LEAVE_CLASSNAME","NG_TRIGGER_CLASSNAME","NG_ANIMATING_CLASSNAME","resolveTimingValue","matches","_convertTimeValueToMS","parseFloat","unit","ONE_SECOND","resolveTiming","timings","allowNegativeValues","hasOwnProperty","parseTimeExpression","easing","exp","invalidTimingValue","duration","delay","delayMatch","easingVal","containsErrors","startIndex","negativeStepValue","splice","Object","entries","normalizeStyles","styles","Array","isArray","setStyles","formerStyles","camelProp","dashCaseToCamelCase","style","eraseStyles","steps","sequence","validateStyleParams","options","params","extractStyleParams","RegExp","SUBSTITUTION_EXPR_START","SUBSTITUTION_EXPR_END","match","PARAM_REGEX","exec","lastIndex","interpolateParams","localVal","toString","str","original","input","replace","DASH_CASE_REGEXP","m","toUpperCase"],"mappings":"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"}
|