@angular/animations 19.0.0-next.1 → 19.0.0-next.11
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/LICENSE +21 -0
- package/browser/index.d.ts +1 -1
- package/browser/testing/index.d.ts +1 -1
- package/fesm2022/animations.mjs +7 -7
- package/fesm2022/animations.mjs.map +1 -1
- package/fesm2022/browser/testing.mjs +1 -1
- package/fesm2022/browser/testing.mjs.map +1 -1
- package/fesm2022/browser.mjs +4 -4
- package/fesm2022/browser.mjs.map +1 -1
- package/index.d.ts +1 -1
- package/package.json +2 -8
- package/esm2022/animations.mjs +0 -5
- package/esm2022/browser/browser.mjs +0 -5
- package/esm2022/browser/index.mjs +0 -13
- package/esm2022/browser/public_api.mjs +0 -14
- package/esm2022/browser/src/browser.mjs +0 -15
- package/esm2022/browser/src/create_engine.mjs +0 -20
- package/esm2022/browser/src/dsl/animation.mjs +0 -37
- package/esm2022/browser/src/dsl/animation_ast.mjs +0 -3
- package/esm2022/browser/src/dsl/animation_ast_builder.mjs +0 -514
- package/esm2022/browser/src/dsl/animation_dsl_visitor.mjs +0 -2
- package/esm2022/browser/src/dsl/animation_timeline_builder.mjs +0 -780
- package/esm2022/browser/src/dsl/animation_timeline_instruction.mjs +0 -15
- package/esm2022/browser/src/dsl/animation_transition_expr.mjs +0 -82
- package/esm2022/browser/src/dsl/animation_transition_factory.mjs +0 -152
- package/esm2022/browser/src/dsl/animation_transition_instruction.mjs +0 -26
- package/esm2022/browser/src/dsl/animation_trigger.mjs +0 -65
- package/esm2022/browser/src/dsl/element_instruction_map.mjs +0 -22
- package/esm2022/browser/src/dsl/style_normalization/animation_style_normalizer.mjs +0 -18
- package/esm2022/browser/src/dsl/style_normalization/web_animations_style_normalizer.mjs +0 -63
- package/esm2022/browser/src/error_helpers.mjs +0 -145
- package/esm2022/browser/src/private_export.mjs +0 -19
- package/esm2022/browser/src/render/animation_driver.mjs +0 -71
- package/esm2022/browser/src/render/animation_engine_instruction.mjs +0 -2
- package/esm2022/browser/src/render/animation_engine_next.mjs +0 -83
- package/esm2022/browser/src/render/animation_renderer.mjs +0 -99
- package/esm2022/browser/src/render/renderer.mjs +0 -165
- package/esm2022/browser/src/render/shared.mjs +0 -162
- package/esm2022/browser/src/render/special_cased_styles.mjs +0 -97
- package/esm2022/browser/src/render/timeline_animation_engine.mjs +0 -140
- package/esm2022/browser/src/render/transition_animation_engine.mjs +0 -1516
- package/esm2022/browser/src/render/web_animations/animatable_props_set.mjs +0 -214
- package/esm2022/browser/src/render/web_animations/web_animations_driver.mjs +0 -54
- package/esm2022/browser/src/render/web_animations/web_animations_player.mjs +0 -177
- package/esm2022/browser/src/util.mjs +0 -217
- package/esm2022/browser/src/warning_helpers.mjs +0 -36
- package/esm2022/browser/testing/index.mjs +0 -13
- package/esm2022/browser/testing/public_api.mjs +0 -14
- package/esm2022/browser/testing/src/mock_animation_driver.mjs +0 -117
- package/esm2022/browser/testing/src/testing.mjs +0 -9
- package/esm2022/browser/testing/testing.mjs +0 -5
- package/esm2022/index.mjs +0 -13
- package/esm2022/public_api.mjs +0 -14
- package/esm2022/src/animation_builder.mjs +0 -200
- package/esm2022/src/animation_event.mjs +0 -9
- package/esm2022/src/animation_metadata.mjs +0 -934
- package/esm2022/src/animations.mjs +0 -17
- package/esm2022/src/errors.mjs +0 -9
- package/esm2022/src/players/animation_group_player.mjs +0 -147
- package/esm2022/src/players/animation_player.mjs +0 -104
- package/esm2022/src/private_export.mjs +0 -11
- package/esm2022/src/version.mjs +0 -15
@@ -1,165 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @license
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
4
|
-
*
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
7
|
-
*/
|
8
|
-
const ANIMATION_PREFIX = '@';
|
9
|
-
const DISABLE_ANIMATIONS_FLAG = '@.disabled';
|
10
|
-
export class BaseAnimationRenderer {
|
11
|
-
constructor(namespaceId, delegate, engine, _onDestroy) {
|
12
|
-
this.namespaceId = namespaceId;
|
13
|
-
this.delegate = delegate;
|
14
|
-
this.engine = engine;
|
15
|
-
this._onDestroy = _onDestroy;
|
16
|
-
// We need to explicitly type this property because of an api-extractor bug
|
17
|
-
// See https://github.com/microsoft/rushstack/issues/4390
|
18
|
-
this.ɵtype = 0 /* AnimationRendererType.Regular */;
|
19
|
-
}
|
20
|
-
get data() {
|
21
|
-
return this.delegate.data;
|
22
|
-
}
|
23
|
-
destroyNode(node) {
|
24
|
-
this.delegate.destroyNode?.(node);
|
25
|
-
}
|
26
|
-
destroy() {
|
27
|
-
this.engine.destroy(this.namespaceId, this.delegate);
|
28
|
-
this.engine.afterFlushAnimationsDone(() => {
|
29
|
-
// Call the renderer destroy method after the animations has finished as otherwise
|
30
|
-
// styles will be removed too early which will cause an unstyled animation.
|
31
|
-
queueMicrotask(() => {
|
32
|
-
this.delegate.destroy();
|
33
|
-
});
|
34
|
-
});
|
35
|
-
this._onDestroy?.();
|
36
|
-
}
|
37
|
-
createElement(name, namespace) {
|
38
|
-
return this.delegate.createElement(name, namespace);
|
39
|
-
}
|
40
|
-
createComment(value) {
|
41
|
-
return this.delegate.createComment(value);
|
42
|
-
}
|
43
|
-
createText(value) {
|
44
|
-
return this.delegate.createText(value);
|
45
|
-
}
|
46
|
-
appendChild(parent, newChild) {
|
47
|
-
this.delegate.appendChild(parent, newChild);
|
48
|
-
this.engine.onInsert(this.namespaceId, newChild, parent, false);
|
49
|
-
}
|
50
|
-
insertBefore(parent, newChild, refChild, isMove = true) {
|
51
|
-
this.delegate.insertBefore(parent, newChild, refChild);
|
52
|
-
// If `isMove` true than we should animate this insert.
|
53
|
-
this.engine.onInsert(this.namespaceId, newChild, parent, isMove);
|
54
|
-
}
|
55
|
-
removeChild(parent, oldChild, isHostElement) {
|
56
|
-
// Prior to the changes in #57203, this method wasn't being called at all by `core` if the child
|
57
|
-
// doesn't have a parent. There appears to be some animation-specific downstream logic that
|
58
|
-
// depends on the null check happening before the animation engine. This check keeps the old
|
59
|
-
// behavior while allowing `core` to not have to check for the parent element anymore.
|
60
|
-
if (this.parentNode(oldChild)) {
|
61
|
-
this.engine.onRemove(this.namespaceId, oldChild, this.delegate);
|
62
|
-
}
|
63
|
-
}
|
64
|
-
selectRootElement(selectorOrNode, preserveContent) {
|
65
|
-
return this.delegate.selectRootElement(selectorOrNode, preserveContent);
|
66
|
-
}
|
67
|
-
parentNode(node) {
|
68
|
-
return this.delegate.parentNode(node);
|
69
|
-
}
|
70
|
-
nextSibling(node) {
|
71
|
-
return this.delegate.nextSibling(node);
|
72
|
-
}
|
73
|
-
setAttribute(el, name, value, namespace) {
|
74
|
-
this.delegate.setAttribute(el, name, value, namespace);
|
75
|
-
}
|
76
|
-
removeAttribute(el, name, namespace) {
|
77
|
-
this.delegate.removeAttribute(el, name, namespace);
|
78
|
-
}
|
79
|
-
addClass(el, name) {
|
80
|
-
this.delegate.addClass(el, name);
|
81
|
-
}
|
82
|
-
removeClass(el, name) {
|
83
|
-
this.delegate.removeClass(el, name);
|
84
|
-
}
|
85
|
-
setStyle(el, style, value, flags) {
|
86
|
-
this.delegate.setStyle(el, style, value, flags);
|
87
|
-
}
|
88
|
-
removeStyle(el, style, flags) {
|
89
|
-
this.delegate.removeStyle(el, style, flags);
|
90
|
-
}
|
91
|
-
setProperty(el, name, value) {
|
92
|
-
if (name.charAt(0) == ANIMATION_PREFIX && name == DISABLE_ANIMATIONS_FLAG) {
|
93
|
-
this.disableAnimations(el, !!value);
|
94
|
-
}
|
95
|
-
else {
|
96
|
-
this.delegate.setProperty(el, name, value);
|
97
|
-
}
|
98
|
-
}
|
99
|
-
setValue(node, value) {
|
100
|
-
this.delegate.setValue(node, value);
|
101
|
-
}
|
102
|
-
listen(target, eventName, callback) {
|
103
|
-
return this.delegate.listen(target, eventName, callback);
|
104
|
-
}
|
105
|
-
disableAnimations(element, value) {
|
106
|
-
this.engine.disableAnimations(element, value);
|
107
|
-
}
|
108
|
-
}
|
109
|
-
export class AnimationRenderer extends BaseAnimationRenderer {
|
110
|
-
constructor(factory, namespaceId, delegate, engine, onDestroy) {
|
111
|
-
super(namespaceId, delegate, engine, onDestroy);
|
112
|
-
this.factory = factory;
|
113
|
-
this.namespaceId = namespaceId;
|
114
|
-
}
|
115
|
-
setProperty(el, name, value) {
|
116
|
-
if (name.charAt(0) == ANIMATION_PREFIX) {
|
117
|
-
if (name.charAt(1) == '.' && name == DISABLE_ANIMATIONS_FLAG) {
|
118
|
-
value = value === undefined ? true : !!value;
|
119
|
-
this.disableAnimations(el, value);
|
120
|
-
}
|
121
|
-
else {
|
122
|
-
this.engine.process(this.namespaceId, el, name.slice(1), value);
|
123
|
-
}
|
124
|
-
}
|
125
|
-
else {
|
126
|
-
this.delegate.setProperty(el, name, value);
|
127
|
-
}
|
128
|
-
}
|
129
|
-
listen(target, eventName, callback) {
|
130
|
-
if (eventName.charAt(0) == ANIMATION_PREFIX) {
|
131
|
-
const element = resolveElementFromTarget(target);
|
132
|
-
let name = eventName.slice(1);
|
133
|
-
let phase = '';
|
134
|
-
// @listener.phase is for trigger animation callbacks
|
135
|
-
// @@listener is for animation builder callbacks
|
136
|
-
if (name.charAt(0) != ANIMATION_PREFIX) {
|
137
|
-
[name, phase] = parseTriggerCallbackName(name);
|
138
|
-
}
|
139
|
-
return this.engine.listen(this.namespaceId, element, name, phase, (event) => {
|
140
|
-
const countId = event['_data'] || -1;
|
141
|
-
this.factory.scheduleListenerCallback(countId, callback, event);
|
142
|
-
});
|
143
|
-
}
|
144
|
-
return this.delegate.listen(target, eventName, callback);
|
145
|
-
}
|
146
|
-
}
|
147
|
-
function resolveElementFromTarget(target) {
|
148
|
-
switch (target) {
|
149
|
-
case 'body':
|
150
|
-
return document.body;
|
151
|
-
case 'document':
|
152
|
-
return document;
|
153
|
-
case 'window':
|
154
|
-
return window;
|
155
|
-
default:
|
156
|
-
return target;
|
157
|
-
}
|
158
|
-
}
|
159
|
-
function parseTriggerCallbackName(triggerName) {
|
160
|
-
const dotIndex = triggerName.indexOf('.');
|
161
|
-
const trigger = triggerName.substring(0, dotIndex);
|
162
|
-
const phase = triggerName.slice(dotIndex + 1);
|
163
|
-
return [trigger, phase];
|
164
|
-
}
|
165
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmltYXRpb25zL2Jyb3dzZXIvc3JjL3JlbmRlci9yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztBQUM3QixNQUFNLHVCQUF1QixHQUFHLFlBQVksQ0FBQztBQWM3QyxNQUFNLE9BQU8scUJBQXFCO0lBS2hDLFlBQ1ksV0FBbUIsRUFDdEIsUUFBbUIsRUFDbkIsTUFBdUIsRUFDdEIsVUFBdUI7UUFIckIsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUN0QixlQUFVLEdBQVYsVUFBVSxDQUFhO1FBUmpDLDJFQUEyRTtRQUMzRSx5REFBeUQ7UUFDaEQsVUFBSyx5Q0FBZ0U7SUFPM0UsQ0FBQztJQUVKLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFTO1FBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsRUFBRTtZQUN4QyxrRkFBa0Y7WUFDbEYsMkVBQTJFO1lBQzNFLGNBQWMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMs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QUM7QUFFRCxTQUFTLHdCQUF3QixDQUFDLFdBQW1CO0lBQ25ELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkQsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmNvbnN0IEFOSU1BVElPTl9QUkVGSVggPSAnQCc7XG5jb25zdCBESVNBQkxFX0FOSU1BVElPTlNfRkxBRyA9ICdALmRpc2FibGVkJztcblxuaW1wb3J0IHtcbiAgUmVuZGVyZXIyLFxuICBSZW5kZXJlckZhY3RvcnkyLFxuICBSZW5kZXJlclN0eWxlRmxhZ3MyLFxuICDJtUFuaW1hdGlvblJlbmRlcmVyVHlwZSBhcyBBbmltYXRpb25SZW5kZXJlclR5cGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUge0FuaW1hdGlvbkVuZ2luZX0gZnJvbSAnLi9hbmltYXRpb25fZW5naW5lX25leHQnO1xuXG50eXBlIEFuaW1hdGlvbkZhY3RvcnlXaXRoTGlzdGVuZXJDYWxsYmFjayA9IFJlbmRlcmVyRmFjdG9yeTIgJiB7XG4gIHNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjazogKGNvdW50OiBudW1iZXIsIGZuOiAoZTogYW55KSA9PiBhbnksIGRhdGE6IGFueSkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBjbGFzcyBCYXNlQW5pbWF0aW9uUmVuZGVyZXIgaW1wbGVtZW50cyBSZW5kZXJlcjIge1xuICAvLyBXZSBuZWVkIHRvIGV4cGxpY2l0bHkgdHlwZSB0aGlzIHByb3BlcnR5IGJlY2F1c2Ugb2YgYW4gYXBpLWV4dHJhY3RvciBidWdcbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvcnVzaHN0YWNrL2lzc3Vlcy80MzkwXG4gIHJlYWRvbmx5IMm1dHlwZTogQW5pbWF0aW9uUmVuZGVyZXJUeXBlLlJlZ3VsYXIgPSBBbmltYXRpb25SZW5kZXJlclR5cGUuUmVndWxhcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgbmFtZXNwYWNlSWQ6IHN0cmluZyxcbiAgICBwdWJsaWMgZGVsZWdhdGU6IFJlbmRlcmVyMixcbiAgICBwdWJsaWMgZW5naW5lOiBBbmltYXRpb25FbmdpbmUsXG4gICAgcHJpdmF0ZSBfb25EZXN0cm95PzogKCkgPT4gdm9pZCxcbiAgKSB7fVxuXG4gIGdldCBkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmRhdGE7XG4gIH1cblxuICBkZXN0cm95Tm9kZShub2RlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlPy4obm9kZSk7XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCwgdGhpcy5kZWxlZ2F0ZSk7XG4gICAgdGhpcy5lbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpID0+IHtcbiAgICAgIC8vIENhbGwgdGhlIHJlbmRlcmVyIGRlc3Ryb3kgbWV0aG9kIGFmdGVyIHRoZSBhbmltYXRpb25zIGhhcyBmaW5pc2hlZCBhcyBvdGhlcndpc2VcbiAgICAgIC8vIHN0eWxlcyB3aWxsIGJlIHJlbW92ZWQgdG9vIGVhcmx5IHdoaWNoIHdpbGwgY2F1c2UgYW4gdW5zdHlsZWQgYW5pbWF0aW9uLlxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fb25EZXN0cm95Py4oKTtcbiAgfVxuXG4gIGNyZWF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCBuYW1lc3BhY2U/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudChuYW1lLCBuYW1lc3BhY2UpO1xuICB9XG5cbiAgY3JlYXRlQ29tbWVudCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCh2YWx1ZSk7XG4gIH1cblxuICBjcmVhdGVUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGFwcGVuZENoaWxkKHBhcmVudDogYW55LCBuZXdDaGlsZDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcbiAgICB0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLCBuZXdDaGlsZCwgcGFyZW50LCBmYWxzZSk7XG4gIH1cblxuICBpbnNlcnRCZWZvcmUocGFyZW50OiBhbnksIG5ld0NoaWxkOiBhbnksIHJlZkNoaWxkOiBhbnksIGlzTW92ZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZShwYXJlbnQsIG5ld0NoaWxkLCByZWZDaGlsZCk7XG4gICAgLy8gSWYgYGlzTW92ZWAgdHJ1ZSB0aGFuIHdlIHNob3VsZCBhbmltYXRlIHRoaXMgaW5zZXJ0LlxuICAgIHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsIG5ld0NoaWxkLCBwYXJlbnQsIGlzTW92ZSk7XG4gIH1cblxuICByZW1vdmVDaGlsZChwYXJlbnQ6IGFueSwgb2xkQ2hpbGQ6IGFueSwgaXNIb3N0RWxlbWVudD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBQcmlvciB0byB0aGUgY2hhbmdlcyBpbiAjNTcyMDMsIHRoaXMgbWV0aG9kIHdhc24ndCBiZWluZyBjYWxsZWQgYXQgYWxsIGJ5IGBjb3JlYCBpZiB0aGUgY2hpbGRcbiAgICAvLyBkb2Vzbid0IGhhdmUgYSBwYXJlbnQuIFRoZXJlIGFwcGVhcnMgdG8gYmUgc29tZSBhbmltYXRpb24tc3BlY2lmaWMgZG93bnN0cmVhbSBsb2dpYyB0aGF0XG4gICAgLy8gZGVwZW5kcyBvbiB0aGUgbnVsbCBjaGVjayBoYXBwZW5pbmcgYmVmb3JlIHRoZSBhbmltYXRpb24gZW5naW5lLiBUaGlzIGNoZWNrIGtlZXBzIHRoZSBvbGRcbiAgICAvLyBiZWhhdmlvciB3aGlsZSBhbGxvd2luZyBgY29yZWAgdG8gbm90IGhhdmUgdG8gY2hlY2sgZm9yIHRoZSBwYXJlbnQgZWxlbWVudCBhbnltb3JlLlxuICAgIGlmICh0aGlzLnBhcmVudE5vZGUob2xkQ2hpbGQpKSB7XG4gICAgICB0aGlzLmVuZ2luZS5vblJlbW92ZSh0aGlzLm5hbWVzcGFjZUlkLCBvbGRDaGlsZCwgdGhpcy5kZWxlZ2F0ZSk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0Um9vdEVsZW1lbnQoc2VsZWN0b3JPck5vZGU6IGFueSwgcHJlc2VydmVDb250ZW50PzogYm9vbGVhbikge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KHNlbGVjdG9yT3JOb2RlLCBwcmVzZXJ2ZUNvbnRlbnQpO1xuICB9XG5cbiAgcGFyZW50Tm9kZShub2RlOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKG5vZGUpO1xuICB9XG5cbiAgbmV4dFNpYmxpbmcobm9kZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcobm9kZSk7XG4gIH1cblxuICBzZXRBdHRyaWJ1dGUoZWw6IGFueSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBuYW1lc3BhY2U/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUoZWwsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2UpO1xuICB9XG5cbiAgcmVtb3ZlQXR0cmlidXRlKGVsOiBhbnksIG5hbWU6IHN0cmluZywgbmFtZXNwYWNlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKGVsLCBuYW1lLCBuYW1lc3BhY2UpO1xuICB9XG5cbiAgYWRkQ2xhc3MoZWw6IGFueSwgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyhlbCwgbmFtZSk7XG4gIH1cblxuICByZW1vdmVDbGFzcyhlbDogYW55LCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKGVsLCBuYW1lKTtcbiAgfVxuXG4gIHNldFN0eWxlKGVsOiBhbnksIHN0eWxlOiBzdHJpbmcsIHZhbHVlOiBhbnksIGZsYWdzPzogUmVuZGVyZXJTdHlsZUZsYWdzMiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuZGVsZWdhdGUuc2V0U3R5bGUoZWwsIHN0eWxlLCB2YWx1ZSwgZmxhZ3MpO1xuICB9XG5cbiAgcmVtb3ZlU3R5bGUoZWw6IGFueSwgc3R5bGU6IHN0cmluZywgZmxhZ3M/OiBSZW5kZXJlclN0eWxlRmxhZ3MyIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZShlbCwgc3R5bGUsIGZsYWdzKTtcbiAgfVxuXG4gIHNldFByb3BlcnR5KGVsOiBhbnksIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PSBBTklNQVRJT05fUFJFRklYICYmIG5hbWUgPT0gRElTQUJMRV9BTklNQVRJT05TX0ZMQUcpIHtcbiAgICAgIHRoaXMuZGlzYWJsZUFuaW1hdGlvbnMoZWwsICEhdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KGVsLCBuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgc2V0VmFsdWUobm9kZTogYW55LCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZShub2RlLCB2YWx1ZSk7XG4gIH1cblxuICBsaXN0ZW4odGFyZ2V0OiBhbnksIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IGJvb2xlYW4gfCB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHRhcmdldCwgZXZlbnROYW1lLCBjYWxsYmFjayk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGlzYWJsZUFuaW1hdGlvbnMoZWxlbWVudDogYW55LCB2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZW5naW5lLmRpc2FibGVBbmltYXRpb25zKGVsZW1lbnQsIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQW5pbWF0aW9uUmVuZGVyZXIgZXh0ZW5kcyBCYXNlQW5pbWF0aW9uUmVuZGVyZXIgaW1wbGVtZW50cyBSZW5kZXJlcjIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZmFjdG9yeTogQW5pbWF0aW9uRmFjdG9yeVdpdGhMaXN0ZW5lckNhbGxiYWNrLFxuICAgIG5hbWVzcGFjZUlkOiBzdHJpbmcsXG4gICAgZGVsZWdhdGU6IFJlbmRlcmVyMixcbiAgICBlbmdpbmU6IEFuaW1hdGlvbkVuZ2luZSxcbiAgICBvbkRlc3Ryb3k/OiAoKSA9PiB2b2lkLFxuICApIHtcbiAgICBzdXBlcihuYW1lc3BhY2VJZCwgZGVsZWdhdGUsIGVuZ2luZSwgb25EZXN0cm95KTtcbiAgICB0aGlzLm5hbWVzcGFjZUlkID0gbmFtZXNwYWNlSWQ7XG4gIH1cblxuICBvdmVycmlkZSBzZXRQcm9wZXJ0eShlbDogYW55LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT0gQU5JTUFUSU9OX1BSRUZJWCkge1xuICAgICAgaWYgKG5hbWUuY2hhckF0KDEpID09ICcuJyAmJiBuYW1lID09IERJU0FCTEVfQU5JTUFUSU9OU19GTEFHKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiAhIXZhbHVlO1xuICAgICAgICB0aGlzLmRpc2FibGVBbmltYXRpb25zKGVsLCB2YWx1ZSBhcyBib29sZWFuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW5naW5lLnByb2Nlc3ModGhpcy5uYW1lc3BhY2VJZCwgZWwsIG5hbWUuc2xpY2UoMSksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eShlbCwgbmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIGxpc3RlbihcbiAgICB0YXJnZXQ6ICd3aW5kb3cnIHwgJ2RvY3VtZW50JyB8ICdib2R5JyB8IGFueSxcbiAgICBldmVudE5hbWU6IHN0cmluZyxcbiAgICBjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IGFueSxcbiAgKTogKCkgPT4gdm9pZCB7XG4gICAgaWYgKGV2ZW50TmFtZS5jaGFyQXQoMCkgPT0gQU5JTUFUSU9OX1BSRUZJWCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHJlc29sdmVFbGVtZW50RnJvbVRhcmdldCh0YXJnZXQpO1xuICAgICAgbGV0IG5hbWUgPSBldmVudE5hbWUuc2xpY2UoMSk7XG4gICAgICBsZXQgcGhhc2UgPSAnJztcbiAgICAgIC8vIEBsaXN0ZW5lci5waGFzZSBpcyBmb3IgdHJpZ2dlciBhbmltYXRpb24gY2FsbGJhY2tzXG4gICAgICAvLyBAQGxpc3RlbmVyIGlzIGZvciBhbmltYXRpb24gYnVpbGRlciBjYWxsYmFja3NcbiAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSAhPSBBTklNQVRJT05fUFJFRklYKSB7XG4gICAgICAgIFtuYW1lLCBwaGFzZV0gPSBwYXJzZVRyaWdnZXJDYWxsYmFja05hbWUobmFtZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5lbmdpbmUubGlzdGVuKHRoaXMubmFtZXNwYWNlSWQsIGVsZW1lbnQsIG5hbWUsIHBoYXNlLCAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgY291bnRJZCA9IChldmVudCBhcyBhbnkpWydfZGF0YSddIHx8IC0xO1xuICAgICAgICB0aGlzLmZhY3Rvcnkuc2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKGNvdW50SWQsIGNhbGxiYWNrLCBldmVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHRhcmdldCwgZXZlbnROYW1lLCBjYWxsYmFjayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUVsZW1lbnRGcm9tVGFyZ2V0KHRhcmdldDogJ3dpbmRvdycgfCAnZG9jdW1lbnQnIHwgJ2JvZHknIHwgYW55KTogYW55IHtcbiAgc3dpdGNoICh0YXJnZXQpIHtcbiAgICBjYXNlICdib2R5JzpcbiAgICAgIHJldHVybiBkb2N1bWVudC5ib2R5O1xuICAgIGNhc2UgJ2RvY3VtZW50JzpcbiAgICAgIHJldHVybiBkb2N1bWVudDtcbiAgICBjYXNlICd3aW5kb3cnOlxuICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVRyaWdnZXJDYWxsYmFja05hbWUodHJpZ2dlck5hbWU6IHN0cmluZykge1xuICBjb25zdCBkb3RJbmRleCA9IHRyaWdnZXJOYW1lLmluZGV4T2YoJy4nKTtcbiAgY29uc3QgdHJpZ2dlciA9IHRyaWdnZXJOYW1lLnN1YnN0cmluZygwLCBkb3RJbmRleCk7XG4gIGNvbnN0IHBoYXNlID0gdHJpZ2dlck5hbWUuc2xpY2UoZG90SW5kZXggKyAxKTtcbiAgcmV0dXJuIFt0cmlnZ2VyLCBwaGFzZV07XG59XG4iXX0=
|
@@ -1,162 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @license
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
4
|
-
*
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
7
|
-
*/
|
8
|
-
import { AUTO_STYLE, NoopAnimationPlayer, ɵAnimationGroupPlayer, ɵPRE_STYLE as PRE_STYLE, } from '@angular/animations';
|
9
|
-
import { animationFailed } from '../error_helpers';
|
10
|
-
import { ANIMATABLE_PROP_SET } from './web_animations/animatable_props_set';
|
11
|
-
export function optimizeGroupPlayer(players) {
|
12
|
-
switch (players.length) {
|
13
|
-
case 0:
|
14
|
-
return new NoopAnimationPlayer();
|
15
|
-
case 1:
|
16
|
-
return players[0];
|
17
|
-
default:
|
18
|
-
return new ɵAnimationGroupPlayer(players);
|
19
|
-
}
|
20
|
-
}
|
21
|
-
export function normalizeKeyframes(normalizer, keyframes, preStyles = new Map(), postStyles = new Map()) {
|
22
|
-
const errors = [];
|
23
|
-
const normalizedKeyframes = [];
|
24
|
-
let previousOffset = -1;
|
25
|
-
let previousKeyframe = null;
|
26
|
-
keyframes.forEach((kf) => {
|
27
|
-
const offset = kf.get('offset');
|
28
|
-
const isSameOffset = offset == previousOffset;
|
29
|
-
const normalizedKeyframe = (isSameOffset && previousKeyframe) || new Map();
|
30
|
-
kf.forEach((val, prop) => {
|
31
|
-
let normalizedProp = prop;
|
32
|
-
let normalizedValue = val;
|
33
|
-
if (prop !== 'offset') {
|
34
|
-
normalizedProp = normalizer.normalizePropertyName(normalizedProp, errors);
|
35
|
-
switch (normalizedValue) {
|
36
|
-
case PRE_STYLE:
|
37
|
-
normalizedValue = preStyles.get(prop);
|
38
|
-
break;
|
39
|
-
case AUTO_STYLE:
|
40
|
-
normalizedValue = postStyles.get(prop);
|
41
|
-
break;
|
42
|
-
default:
|
43
|
-
normalizedValue = normalizer.normalizeStyleValue(prop, normalizedProp, normalizedValue, errors);
|
44
|
-
break;
|
45
|
-
}
|
46
|
-
}
|
47
|
-
normalizedKeyframe.set(normalizedProp, normalizedValue);
|
48
|
-
});
|
49
|
-
if (!isSameOffset) {
|
50
|
-
normalizedKeyframes.push(normalizedKeyframe);
|
51
|
-
}
|
52
|
-
previousKeyframe = normalizedKeyframe;
|
53
|
-
previousOffset = offset;
|
54
|
-
});
|
55
|
-
if (errors.length) {
|
56
|
-
throw animationFailed(errors);
|
57
|
-
}
|
58
|
-
return normalizedKeyframes;
|
59
|
-
}
|
60
|
-
export function listenOnPlayer(player, eventName, event, callback) {
|
61
|
-
switch (eventName) {
|
62
|
-
case 'start':
|
63
|
-
player.onStart(() => callback(event && copyAnimationEvent(event, 'start', player)));
|
64
|
-
break;
|
65
|
-
case 'done':
|
66
|
-
player.onDone(() => callback(event && copyAnimationEvent(event, 'done', player)));
|
67
|
-
break;
|
68
|
-
case 'destroy':
|
69
|
-
player.onDestroy(() => callback(event && copyAnimationEvent(event, 'destroy', player)));
|
70
|
-
break;
|
71
|
-
}
|
72
|
-
}
|
73
|
-
export function copyAnimationEvent(e, phaseName, player) {
|
74
|
-
const totalTime = player.totalTime;
|
75
|
-
const disabled = player.disabled ? true : false;
|
76
|
-
const event = makeAnimationEvent(e.element, e.triggerName, e.fromState, e.toState, phaseName || e.phaseName, totalTime == undefined ? e.totalTime : totalTime, disabled);
|
77
|
-
const data = e['_data'];
|
78
|
-
if (data != null) {
|
79
|
-
event['_data'] = data;
|
80
|
-
}
|
81
|
-
return event;
|
82
|
-
}
|
83
|
-
export function makeAnimationEvent(element, triggerName, fromState, toState, phaseName = '', totalTime = 0, disabled) {
|
84
|
-
return { element, triggerName, fromState, toState, phaseName, totalTime, disabled: !!disabled };
|
85
|
-
}
|
86
|
-
export function getOrSetDefaultValue(map, key, defaultValue) {
|
87
|
-
let value = map.get(key);
|
88
|
-
if (!value) {
|
89
|
-
map.set(key, (value = defaultValue));
|
90
|
-
}
|
91
|
-
return value;
|
92
|
-
}
|
93
|
-
export function parseTimelineCommand(command) {
|
94
|
-
const separatorPos = command.indexOf(':');
|
95
|
-
const id = command.substring(1, separatorPos);
|
96
|
-
const action = command.slice(separatorPos + 1);
|
97
|
-
return [id, action];
|
98
|
-
}
|
99
|
-
const documentElement = /* @__PURE__ */ (() => typeof document === 'undefined' ? null : document.documentElement)();
|
100
|
-
export function getParentElement(element) {
|
101
|
-
const parent = element.parentNode || element.host || null; // consider host to support shadow DOM
|
102
|
-
if (parent === documentElement) {
|
103
|
-
return null;
|
104
|
-
}
|
105
|
-
return parent;
|
106
|
-
}
|
107
|
-
function containsVendorPrefix(prop) {
|
108
|
-
// Webkit is the only real popular vendor prefix nowadays
|
109
|
-
// cc: http://shouldiprefix.com/
|
110
|
-
return prop.substring(1, 6) == 'ebkit'; // webkit or Webkit
|
111
|
-
}
|
112
|
-
let _CACHED_BODY = null;
|
113
|
-
let _IS_WEBKIT = false;
|
114
|
-
export function validateStyleProperty(prop) {
|
115
|
-
if (!_CACHED_BODY) {
|
116
|
-
_CACHED_BODY = getBodyNode() || {};
|
117
|
-
_IS_WEBKIT = _CACHED_BODY.style ? 'WebkitAppearance' in _CACHED_BODY.style : false;
|
118
|
-
}
|
119
|
-
let result = true;
|
120
|
-
if (_CACHED_BODY.style && !containsVendorPrefix(prop)) {
|
121
|
-
result = prop in _CACHED_BODY.style;
|
122
|
-
if (!result && _IS_WEBKIT) {
|
123
|
-
const camelProp = 'Webkit' + prop.charAt(0).toUpperCase() + prop.slice(1);
|
124
|
-
result = camelProp in _CACHED_BODY.style;
|
125
|
-
}
|
126
|
-
}
|
127
|
-
return result;
|
128
|
-
}
|
129
|
-
export function validateWebAnimatableStyleProperty(prop) {
|
130
|
-
return ANIMATABLE_PROP_SET.has(prop);
|
131
|
-
}
|
132
|
-
export function getBodyNode() {
|
133
|
-
if (typeof document != 'undefined') {
|
134
|
-
return document.body;
|
135
|
-
}
|
136
|
-
return null;
|
137
|
-
}
|
138
|
-
export function containsElement(elm1, elm2) {
|
139
|
-
while (elm2) {
|
140
|
-
if (elm2 === elm1) {
|
141
|
-
return true;
|
142
|
-
}
|
143
|
-
elm2 = getParentElement(elm2);
|
144
|
-
}
|
145
|
-
return false;
|
146
|
-
}
|
147
|
-
export function invokeQuery(element, selector, multi) {
|
148
|
-
if (multi) {
|
149
|
-
return Array.from(element.querySelectorAll(selector));
|
150
|
-
}
|
151
|
-
const elem = element.querySelector(selector);
|
152
|
-
return elem ? [elem] : [];
|
153
|
-
}
|
154
|
-
export function hypenatePropsKeys(original) {
|
155
|
-
const newMap = new Map();
|
156
|
-
original.forEach((val, prop) => {
|
157
|
-
const newProp = prop.replace(/([a-z])([A-Z])/g, '$1-$2');
|
158
|
-
newMap.set(newProp, val);
|
159
|
-
});
|
160
|
-
return newMap;
|
161
|
-
}
|
162
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5pbWF0aW9ucy9icm93c2VyL3NyYy9yZW5kZXIvc2hhcmVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFHTCxVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixVQUFVLElBQUksU0FBUyxHQUV4QixNQUFNLHFCQUFxQixDQUFDO0FBRzdCLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUUxRSxNQUFNLFVBQVUsbUJBQW1CLENBQUMsT0FBMEI7SUFDNUQsUUFBUSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDO1lBQ0osT0FBTyxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDbkMsS0FBSyxDQUFDO1lBQ0osT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEI7WUFDRSxPQUFPLElBQUkscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUMsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLFVBQW9DLEVBQ3BDLFNBQStCLEVBQy9CLFlBQTJCLElBQUksR0FBRyxFQUFFLEVBQ3BDLGFBQTRCLElBQUksR0FBRyxFQUFFO0lBRXJDLE1BQU0sTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUMzQixNQUFNLG1CQUFtQixHQUF5QixFQUFFLENBQUM7SUFDckQsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEIsSUFBSSxnQkFBZ0IsR0FBeUIsSUFBSSxDQUFDO0lBQ2xELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtRQUN2QixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMs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QUVELE1BQU0sVUFBVSxXQUFXLENBQUMsT0FBWSxFQUFFLFFBQWdCLEVBQUUsS0FBYztJQUN4RSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1YsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDNUIsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxRQUF1QjtJQUN2RCxNQUFNLE1BQU0sR0FBa0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN4QyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDekQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge1xuICBBbmltYXRpb25FdmVudCxcbiAgQW5pbWF0aW9uUGxheWVyLFxuICBBVVRPX1NUWUxFLFxuICBOb29wQW5pbWF0aW9uUGxheWVyLFxuICDJtUFuaW1hdGlvbkdyb3VwUGxheWVyLFxuICDJtVBSRV9TVFlMRSBhcyBQUkVfU1RZTEUsXG4gIMm1U3R5bGVEYXRhTWFwLFxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcblxuaW1wb3J0IHtBbmltYXRpb25TdHlsZU5vcm1hbGl6ZXJ9IGZyb20gJy4uLy4uL3NyYy9kc2wvc3R5bGVfbm9ybWFsaXphdGlvbi9hbmltYXRpb25fc3R5bGVfbm9ybWFsaXplcic7XG5pbXBvcnQge2FuaW1hdGlvbkZhaWxlZH0gZnJvbSAnLi4vZXJyb3JfaGVscGVycyc7XG5cbmltcG9ydCB7QU5JTUFUQUJMRV9QUk9QX1NFVH0gZnJvbSAnLi93ZWJfYW5pbWF0aW9ucy9hbmltYXRhYmxlX3Byb3BzX3NldCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBvcHRpbWl6ZUdyb3VwUGxheWVyKHBsYXllcnM6IEFuaW1hdGlvblBsYXllcltdKTogQW5pbWF0aW9uUGxheWVyIHtcbiAgc3dpdGNoIChwbGF5ZXJzLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBuZXcgTm9vcEFuaW1hdGlvblBsYXllcigpO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBwbGF5ZXJzWzBdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbmV3IMm1QW5pbWF0aW9uR3JvdXBQbGF5ZXIocGxheWVycyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUtleWZyYW1lcyhcbiAgbm9ybWFsaXplcjogQW5pbWF0aW9uU3R5bGVOb3JtYWxpemVyLFxuICBrZXlmcmFtZXM6IEFycmF5PMm1U3R5bGVEYXRhTWFwPixcbiAgcHJlU3R5bGVzOiDJtVN0eWxlRGF0YU1hcCA9IG5ldyBNYXAoKSxcbiAgcG9zdFN0eWxlczogybVTdHlsZURhdGFNYXAgPSBuZXcgTWFwKCksXG4pOiBBcnJheTzJtVN0eWxlRGF0YU1hcD4ge1xuICBjb25zdCBlcnJvcnM6IEVycm9yW10gPSBbXTtcbiAgY29uc3Qgbm9ybWFsaXplZEtleWZyYW1lczogQXJyYXk8ybVTdHlsZURhdGFNYXA+ID0gW107XG4gIGxldCBwcmV2aW91c09mZnNldCA9IC0xO1xuICBsZXQgcHJldmlvdXNLZXlmcmFtZTogybVTdHlsZURhdGFNYXAgfCBudWxsID0gbnVsbDtcbiAga2V5ZnJhbWVzLmZvckVhY2goKGtmKSA9PiB7XG4gICAgY29uc3Qgb2Zmc2V0ID0ga2YuZ2V0KCdvZmZzZXQnKSBhcyBudW1iZXI7XG4gICAgY29uc3QgaXNTYW1lT2Zmc2V0ID0gb2Zmc2V0ID09IHByZXZpb3VzT2Zmc2V0O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRLZXlmcmFtZTogybVTdHlsZURhdGFNYXAgPSAoaXNTYW1lT2Zmc2V0ICYmIHByZXZpb3VzS2V5ZnJhbWUpIHx8IG5ldyBNYXAoKTtcbiAgICBrZi5mb3JFYWNoKCh2YWwsIHByb3ApID0+IHtcbiAgICAgIGxldCBub3JtYWxpemVkUHJvcCA9IHByb3A7XG4gICAgICBsZXQgbm9ybWFsaXplZFZhbHVlID0gdmFsO1xuICAgICAgaWYgKHByb3AgIT09ICdvZmZzZXQnKSB7XG4gICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplci5ub3JtYWxpemVQcm9wZXJ0eU5hbWUobm9ybWFsaXplZFByb3AsIGVycm9ycyk7XG4gICAgICAgIHN3aXRjaCAobm9ybWFsaXplZFZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBQUkVfU1RZTEU6XG4gICAgICAgICAgICBub3JtYWxpemVkVmFsdWUgPSBwcmVTdHlsZXMuZ2V0KHByb3ApITtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBBVVRPX1NUWUxFOlxuICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gcG9zdFN0eWxlcy5nZXQocHJvcCkhO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplci5ub3JtYWxpemVTdHlsZVZhbHVlKFxuICAgICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgICBub3JtYWxpemVkUHJvcCxcbiAgICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlLFxuICAgICAgICAgICAgICBlcnJvcnMsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5vcm1hbGl6ZWRLZXlmcmFtZS5zZXQobm9ybWFsaXplZFByb3AsIG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgfSk7XG4gICAgaWYgKCFpc1NhbWVPZmZzZXQpIHtcbiAgICAgIG5vcm1hbGl6ZWRLZXlmcmFtZXMucHVzaChub3JtYWxpemVkS2V5ZnJhbWUpO1xuICAgIH1cbiAgICBwcmV2aW91c0tleWZyYW1lID0gbm9ybWFsaXplZEtleWZyYW1lO1xuICAgIHByZXZpb3VzT2Zmc2V0ID0gb2Zmc2V0O1xuICB9KTtcbiAgaWYgKGVycm9ycy5sZW5ndGgpIHtcbiAgICB0aHJvdyBhbmltYXRpb25GYWlsZWQoZXJyb3JzKTtcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkS2V5ZnJhbWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlzdGVuT25QbGF5ZXIoXG4gIHBsYXllcjogQW5pbWF0aW9uUGxheWVyLFxuICBldmVudE5hbWU6IHN0cmluZyxcbiAgZXZlbnQ6IEFuaW1hdGlvbkV2ZW50IHwgdW5kZWZpbmVkLFxuICBjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IGFueSxcbikge1xuICBzd2l0Y2ggKGV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgIHBsYXllci5vblN0YXJ0KCgpID0+IGNhbGxiYWNrKGV2ZW50ICYmIGNvcHlBbmltYXRpb25FdmVudChldmVudCwgJ3N0YXJ0JywgcGxheWVyKSkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZG9uZSc6XG4gICAgICBwbGF5ZXIub25Eb25lKCgpID0+IGNhbGxiYWNrKGV2ZW50ICYmIGNvcHlBbmltYXRpb25FdmVudChldmVudCwgJ2RvbmUnLCBwbGF5ZXIpKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdkZXN0cm95JzpcbiAgICAgIHBsYXllci5vbkRlc3Ryb3koKCkgPT4gY2FsbGJhY2soZXZlbnQgJiYgY29weUFuaW1hdGlvbkV2ZW50KGV2ZW50LCAnZGVzdHJveScsIHBsYXllcikpKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5QW5pbWF0aW9uRXZlbnQoXG4gIGU6IEFuaW1hdGlvbkV2ZW50LFxuICBwaGFzZU5hbWU6IHN0cmluZyxcbiAgcGxheWVyOiBBbmltYXRpb25QbGF5ZXIsXG4pOiBBbmltYXRpb25FdmVudCB7XG4gIGNvbnN0IHRvdGFsVGltZSA9IHBsYXllci50b3RhbFRpbWU7XG4gIGNvbnN0IGRpc2FibGVkID0gKHBsYXllciBhcyBhbnkpLmRpc2FibGVkID8gdHJ1ZSA6IGZhbHNlO1xuICBjb25zdCBldmVudCA9IG1ha2VBbmltYXRpb25FdmVudChcbiAgICBlLmVsZW1lbnQsXG4gICAgZS50cmlnZ2VyTmFtZSxcbiAgICBlLmZyb21TdGF0ZSxcbiAgICBlLnRvU3RhdGUsXG4gICAgcGhhc2VOYW1lIHx8IGUucGhhc2VOYW1lLFxuICAgIHRvdGFsVGltZSA9PSB1bmRlZmluZWQgPyBlLnRvdGFsVGltZSA6IHRvdGFsVGltZSxcbiAgICBkaXNhYmxlZCxcbiAgKTtcbiAgY29uc3QgZGF0YSA9IChlIGFzIGFueSlbJ19kYXRhJ107XG4gIGlmIChkYXRhICE9IG51bGwpIHtcbiAgICAoZXZlbnQgYXMgYW55KVsnX2RhdGEnXSA9IGRhdGE7XG4gIH1cbiAgcmV0dXJuIGV2ZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUFuaW1hdGlvbkV2ZW50KFxuICBlbGVtZW50OiBhbnksXG4gIHRyaWdnZXJOYW1lOiBzdHJpbmcsXG4gIGZyb21TdGF0ZTogc3RyaW5nLFxuICB0b1N0YXRlOiBzdHJpbmcsXG4gIHBoYXNlTmFtZTogc3RyaW5nID0gJycsXG4gIHRvdGFsVGltZTogbnVtYmVyID0gMCxcbiAgZGlzYWJsZWQ/OiBib29sZWFuLFxuKTogQW5pbWF0aW9uRXZlbnQge1xuICByZXR1cm4ge2VsZW1lbnQsIHRyaWdnZXJOYW1lLCBmcm9tU3RhdGUsIHRvU3RhdGUsIHBoYXNlTmFtZSwgdG90YWxUaW1lLCBkaXNhYmxlZDogISFkaXNhYmxlZH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPclNldERlZmF1bHRWYWx1ZTxULCBWPihtYXA6IE1hcDxULCBWPiwga2V5OiBULCBkZWZhdWx0VmFsdWU6IFYpIHtcbiAgbGV0IHZhbHVlID0gbWFwLmdldChrZXkpO1xuICBpZiAoIXZhbHVlKSB7XG4gICAgbWFwLnNldChrZXksICh2YWx1ZSA9IGRlZmF1bHRWYWx1ZSkpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVGltZWxpbmVDb21tYW5kKGNvbW1hbmQ6IHN0cmluZyk6IFtzdHJpbmcsIHN0cmluZ10ge1xuICBjb25zdCBzZXBhcmF0b3JQb3MgPSBjb21tYW5kLmluZGV4T2YoJzonKTtcbiAgY29uc3QgaWQgPSBjb21tYW5kLnN1YnN0cmluZygxLCBzZXBhcmF0b3JQb3MpO1xuICBjb25zdCBhY3Rpb24gPSBjb21tYW5kLnNsaWNlKHNlcGFyYXRvclBvcyArIDEpO1xuICByZXR1cm4gW2lkLCBhY3Rpb25dO1xufVxuXG5jb25zdCBkb2N1bWVudEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT5cbiAgdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRFbGVtZW50KGVsZW1lbnQ6IGFueSk6IHVua25vd24gfCBudWxsIHtcbiAgY29uc3QgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlIHx8IGVsZW1lbnQuaG9zdCB8fCBudWxsOyAvLyBjb25zaWRlciBob3N0IHRvIHN1cHBvcnQgc2hhZG93IERPTVxuICBpZiAocGFyZW50ID09PSBkb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gcGFyZW50O1xufVxuXG5mdW5jdGlvbiBjb250YWluc1ZlbmRvclByZWZpeChwcm9wOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gV2Via2l0IGlzIHRoZSBvbmx5IHJlYWwgcG9wdWxhciB2ZW5kb3IgcHJlZml4IG5vd2FkYXlzXG4gIC8vIGNjOiBodHRwOi8vc2hvdWxkaXByZWZpeC5jb20vXG4gIHJldHVybiBwcm9wLnN1YnN0cmluZygxLCA2KSA9PSAnZWJraXQnOyAvLyB3ZWJraXQgb3IgV2Via2l0XG59XG5cbmxldCBfQ0FDSEVEX0JPRFk6IHtzdHlsZTogYW55fSB8IG51bGwgPSBudWxsO1xubGV0IF9JU19XRUJLSVQgPSBmYWxzZTtcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVN0eWxlUHJvcGVydHkocHJvcDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghX0NBQ0hFRF9CT0RZKSB7XG4gICAgX0NBQ0hFRF9CT0RZID0gZ2V0Qm9keU5vZGUoKSB8fCB7fTtcbiAgICBfSVNfV0VCS0lUID0gX0NBQ0hFRF9CT0RZIS5zdHlsZSA/ICdXZWJraXRBcHBlYXJhbmNlJyBpbiBfQ0FDSEVEX0JPRFkhLnN0eWxlIDogZmFsc2U7XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gdHJ1ZTtcbiAgaWYgKF9DQUNIRURfQk9EWSEuc3R5bGUgJiYgIWNvbnRhaW5zVmVuZG9yUHJlZml4KHByb3ApKSB7XG4gICAgcmVzdWx0ID0gcHJvcCBpbiBfQ0FDSEVEX0JPRFkhLnN0eWxlO1xuICAgIGlmICghcmVzdWx0ICYmIF9JU19XRUJLSVQpIHtcbiAgICAgIGNvbnN0IGNhbWVsUHJvcCA9ICdXZWJraXQnICsgcHJvcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHByb3Auc2xpY2UoMSk7XG4gICAgICByZXN1bHQgPSBjYW1lbFByb3AgaW4gX0NBQ0hFRF9CT0RZIS5zdHlsZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVXZWJBbmltYXRhYmxlU3R5bGVQcm9wZXJ0eShwcm9wOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEFOSU1BVEFCTEVfUFJPUF9TRVQuaGFzKHByb3ApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qm9keU5vZGUoKTogYW55IHwgbnVsbCB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuYm9keTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zRWxlbWVudChlbG0xOiBhbnksIGVsbTI6IGFueSk6IGJvb2xlYW4ge1xuICB3aGlsZSAoZWxtMikge1xuICAgIGlmIChlbG0yID09PSBlbG0xKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZWxtMiA9IGdldFBhcmVudEVsZW1lbnQoZWxtMik7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlUXVlcnkoZWxlbWVudDogYW55LCBzZWxlY3Rvcjogc3RyaW5nLCBtdWx0aTogYm9vbGVhbik6IGFueVtdIHtcbiAgaWYgKG11bHRpKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSk7XG4gIH1cbiAgY29uc3QgZWxlbSA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gIHJldHVybiBlbGVtID8gW2VsZW1dIDogW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBlbmF0ZVByb3BzS2V5cyhvcmlnaW5hbDogybVTdHlsZURhdGFNYXApOiDJtVN0eWxlRGF0YU1hcCB7XG4gIGNvbnN0IG5ld01hcDogybVTdHlsZURhdGFNYXAgPSBuZXcgTWFwKCk7XG4gIG9yaWdpbmFsLmZvckVhY2goKHZhbCwgcHJvcCkgPT4ge1xuICAgIGNvbnN0IG5ld1Byb3AgPSBwcm9wLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csICckMS0kMicpO1xuICAgIG5ld01hcC5zZXQobmV3UHJvcCwgdmFsKTtcbiAgfSk7XG4gIHJldHVybiBuZXdNYXA7XG59XG4iXX0=
|
@@ -1,97 +0,0 @@
|
|
1
|
-
import { eraseStyles, setStyles } from '../util';
|
2
|
-
/**
|
3
|
-
* Returns an instance of `SpecialCasedStyles` if and when any special (non animateable) styles are
|
4
|
-
* detected.
|
5
|
-
*
|
6
|
-
* In CSS there exist properties that cannot be animated within a keyframe animation
|
7
|
-
* (whether it be via CSS keyframes or web-animations) and the animation implementation
|
8
|
-
* will ignore them. This function is designed to detect those special cased styles and
|
9
|
-
* return a container that will be executed at the start and end of the animation.
|
10
|
-
*
|
11
|
-
* @returns an instance of `SpecialCasedStyles` if any special styles are detected otherwise `null`
|
12
|
-
*/
|
13
|
-
export function packageNonAnimatableStyles(element, styles) {
|
14
|
-
let startStyles = null;
|
15
|
-
let endStyles = null;
|
16
|
-
if (Array.isArray(styles) && styles.length) {
|
17
|
-
startStyles = filterNonAnimatableStyles(styles[0]);
|
18
|
-
if (styles.length > 1) {
|
19
|
-
endStyles = filterNonAnimatableStyles(styles[styles.length - 1]);
|
20
|
-
}
|
21
|
-
}
|
22
|
-
else if (styles instanceof Map) {
|
23
|
-
startStyles = filterNonAnimatableStyles(styles);
|
24
|
-
}
|
25
|
-
return startStyles || endStyles ? new SpecialCasedStyles(element, startStyles, endStyles) : null;
|
26
|
-
}
|
27
|
-
/**
|
28
|
-
* Designed to be executed during a keyframe-based animation to apply any special-cased styles.
|
29
|
-
*
|
30
|
-
* When started (when the `start()` method is run) then the provided `startStyles`
|
31
|
-
* will be applied. When finished (when the `finish()` method is called) the
|
32
|
-
* `endStyles` will be applied as well any any starting styles. Finally when
|
33
|
-
* `destroy()` is called then all styles will be removed.
|
34
|
-
*/
|
35
|
-
export class SpecialCasedStyles {
|
36
|
-
static { this.initialStylesByElement = new WeakMap(); }
|
37
|
-
constructor(_element, _startStyles, _endStyles) {
|
38
|
-
this._element = _element;
|
39
|
-
this._startStyles = _startStyles;
|
40
|
-
this._endStyles = _endStyles;
|
41
|
-
this._state = 0 /* SpecialCasedStylesState.Pending */;
|
42
|
-
let initialStyles = SpecialCasedStyles.initialStylesByElement.get(_element);
|
43
|
-
if (!initialStyles) {
|
44
|
-
SpecialCasedStyles.initialStylesByElement.set(_element, (initialStyles = new Map()));
|
45
|
-
}
|
46
|
-
this._initialStyles = initialStyles;
|
47
|
-
}
|
48
|
-
start() {
|
49
|
-
if (this._state < 1 /* SpecialCasedStylesState.Started */) {
|
50
|
-
if (this._startStyles) {
|
51
|
-
setStyles(this._element, this._startStyles, this._initialStyles);
|
52
|
-
}
|
53
|
-
this._state = 1 /* SpecialCasedStylesState.Started */;
|
54
|
-
}
|
55
|
-
}
|
56
|
-
finish() {
|
57
|
-
this.start();
|
58
|
-
if (this._state < 2 /* SpecialCasedStylesState.Finished */) {
|
59
|
-
setStyles(this._element, this._initialStyles);
|
60
|
-
if (this._endStyles) {
|
61
|
-
setStyles(this._element, this._endStyles);
|
62
|
-
this._endStyles = null;
|
63
|
-
}
|
64
|
-
this._state = 1 /* SpecialCasedStylesState.Started */;
|
65
|
-
}
|
66
|
-
}
|
67
|
-
destroy() {
|
68
|
-
this.finish();
|
69
|
-
if (this._state < 3 /* SpecialCasedStylesState.Destroyed */) {
|
70
|
-
SpecialCasedStyles.initialStylesByElement.delete(this._element);
|
71
|
-
if (this._startStyles) {
|
72
|
-
eraseStyles(this._element, this._startStyles);
|
73
|
-
this._endStyles = null;
|
74
|
-
}
|
75
|
-
if (this._endStyles) {
|
76
|
-
eraseStyles(this._element, this._endStyles);
|
77
|
-
this._endStyles = null;
|
78
|
-
}
|
79
|
-
setStyles(this._element, this._initialStyles);
|
80
|
-
this._state = 3 /* SpecialCasedStylesState.Destroyed */;
|
81
|
-
}
|
82
|
-
}
|
83
|
-
}
|
84
|
-
function filterNonAnimatableStyles(styles) {
|
85
|
-
let result = null;
|
86
|
-
styles.forEach((val, prop) => {
|
87
|
-
if (isNonAnimatableStyle(prop)) {
|
88
|
-
result = result || new Map();
|
89
|
-
result.set(prop, val);
|
90
|
-
}
|
91
|
-
});
|
92
|
-
return result;
|
93
|
-
}
|
94
|
-
function isNonAnimatableStyle(prop) {
|
95
|
-
return prop === 'display' || prop === 'position';
|
96
|
-
}
|
97
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY2lhbF9jYXNlZF9zdHlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmltYXRpb25zL2Jyb3dzZXIvc3JjL3JlbmRlci9zcGVjaWFsX2Nhc2VkX3N0eWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxPQUFPLEVBQUMsV0FBVyxFQUFFLFNBQVMsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUUvQzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUN4QyxPQUFZLEVBQ1osTUFBNEM7SUFFNUMsSUFBSSxXQUFXLEdBQXlCLElBQUksQ0FBQztJQUM3QyxJQUFJLFNBQVMsR0FBeUIsSUFBSSxDQUFDO0lBQzNDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0MsV0FBVyxHQUFHLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25ELElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QixTQUFTLEdBQUcseUJBQXlCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRSxDQUFDO0lBQ0gsQ0FBQztTQUFNLElBQUksTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLFdBQVcsR0FBRyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsT0FBTyxXQUFXLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNuRyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7YUFDdEIsMkJBQXNC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LENBQUMsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxJQUFZO0lBQ3hDLE9BQU8sSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssVUFBVSxDQUFDO0FBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7ybVTdHlsZURhdGFNYXB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG5pbXBvcnQge2VyYXNlU3R5bGVzLCBzZXRTdHlsZXN9IGZyb20gJy4uL3V0aWwnO1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgYFNwZWNpYWxDYXNlZFN0eWxlc2AgaWYgYW5kIHdoZW4gYW55IHNwZWNpYWwgKG5vbiBhbmltYXRlYWJsZSkgc3R5bGVzIGFyZVxuICogZGV0ZWN0ZWQuXG4gKlxuICogSW4gQ1NTIHRoZXJlIGV4aXN0IHByb3BlcnRpZXMgdGhhdCBjYW5ub3QgYmUgYW5pbWF0ZWQgd2l0aGluIGEga2V5ZnJhbWUgYW5pbWF0aW9uXG4gKiAod2hldGhlciBpdCBiZSB2aWEgQ1NTIGtleWZyYW1lcyBvciB3ZWItYW5pbWF0aW9ucykgYW5kIHRoZSBhbmltYXRpb24gaW1wbGVtZW50YXRpb25cbiAqIHdpbGwgaWdub3JlIHRoZW0uIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IHRob3NlIHNwZWNpYWwgY2FzZWQgc3R5bGVzIGFuZFxuICogcmV0dXJuIGEgY29udGFpbmVyIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgYW5pbWF0aW9uLlxuICpcbiAqIEByZXR1cm5zIGFuIGluc3RhbmNlIG9mIGBTcGVjaWFsQ2FzZWRTdHlsZXNgIGlmIGFueSBzcGVjaWFsIHN0eWxlcyBhcmUgZGV0ZWN0ZWQgb3RoZXJ3aXNlIGBudWxsYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFja2FnZU5vbkFuaW1hdGFibGVTdHlsZXMoXG4gIGVsZW1lbnQ6IGFueSxcbiAgc3R5bGVzOiDJtVN0eWxlRGF0YU1hcCB8IEFycmF5PMm1U3R5bGVEYXRhTWFwPixcbik6IFNwZWNpYWxDYXNlZFN0eWxlcyB8IG51bGwge1xuICBsZXQgc3RhcnRTdHlsZXM6IMm1U3R5bGVEYXRhTWFwIHwgbnVsbCA9IG51bGw7XG4gIGxldCBlbmRTdHlsZXM6IMm1U3R5bGVEYXRhTWFwIHwgbnVsbCA9IG51bGw7XG4gIGlmIChBcnJheS5pc0FycmF5KHN0eWxlcykgJiYgc3R5bGVzLmxlbmd0aCkge1xuICAgIHN0YXJ0U3R5bGVzID0gZmlsdGVyTm9uQW5pbWF0YWJsZVN0eWxlcyhzdHlsZXNbMF0pO1xuICAgIGlmIChzdHlsZXMubGVuZ3RoID4gMSkge1xuICAgICAgZW5kU3R5bGVzID0gZmlsdGVyTm9uQW5pbWF0YWJsZVN0eWxlcyhzdHlsZXNbc3R5bGVzLmxlbmd0aCAtIDFdKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc3R5bGVzIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgc3RhcnRTdHlsZXMgPSBmaWx0ZXJOb25BbmltYXRhYmxlU3R5bGVzKHN0eWxlcyk7XG4gIH1cblxuICByZXR1cm4gc3RhcnRTdHlsZXMgfHwgZW5kU3R5bGVzID8gbmV3IFNwZWNpYWxDYXNlZFN0eWxlcyhlbGVtZW50LCBzdGFydFN0eWxlcywgZW5kU3R5bGVzKSA6IG51bGw7XG59XG5cbi8qKlxuICogRGVzaWduZWQgdG8gYmUgZXhlY3V0ZWQgZHVyaW5nIGEga2V5ZnJhbWUtYmFzZWQgYW5pbWF0aW9uIHRvIGFwcGx5IGFueSBzcGVjaWFsLWNhc2VkIHN0eWxlcy5cbiAqXG4gKiBXaGVuIHN0YXJ0ZWQgKHdoZW4gdGhlIGBzdGFydCgpYCBtZXRob2QgaXMgcnVuKSB0aGVuIHRoZSBwcm92aWRlZCBgc3RhcnRTdHlsZXNgXG4gKiB3aWxsIGJlIGFwcGxpZWQuIFdoZW4gZmluaXNoZWQgKHdoZW4gdGhlIGBmaW5pc2goKWAgbWV0aG9kIGlzIGNhbGxlZCkgdGhlXG4gKiBgZW5kU3R5bGVzYCB3aWxsIGJlIGFwcGxpZWQgYXMgd2VsbCBhbnkgYW55IHN0YXJ0aW5nIHN0eWxlcy4gRmluYWxseSB3aGVuXG4gKiBgZGVzdHJveSgpYCBpcyBjYWxsZWQgdGhlbiBhbGwgc3R5bGVzIHdpbGwgYmUgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNwZWNpYWxDYXNlZFN0eWxlcyB7XG4gIHN0YXRpYyBpbml0aWFsU3R5bGVzQnlFbGVtZW50ID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwPGFueSwgybVTdHlsZURhdGFNYXA+KCk7XG5cbiAgcHJpdmF0ZSBfc3RhdGUgPSBTcGVjaWFsQ2FzZWRTdHlsZXNTdGF0ZS5QZW5kaW5nO1xuICBwcml2YXRlIF9pbml0aWFsU3R5bGVzITogybVTdHlsZURhdGFNYXA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogYW55LFxuICAgIHByaXZhdGUgX3N0YXJ0U3R5bGVzOiDJtVN0eWxlRGF0YU1hcCB8IG51bGwsXG4gICAgcHJpdmF0ZSBfZW5kU3R5bGVzOiDJtVN0eWxlRGF0YU1hcCB8IG51bGwsXG4gICkge1xuICAgIGxldCBpbml0aWFsU3R5bGVzID0gU3BlY2lhbENhc2VkU3R5bGVzLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZ2V0KF9lbGVtZW50KTtcbiAgICBpZiAoIWluaXRpYWxTdHlsZXMpIHtcbiAgICAgIFNwZWNpYWxDYXNlZFN0eWxlcy5pbml0aWFsU3R5bGVzQnlFbGVtZW50LnNldChfZWxlbWVudCwgKGluaXRpYWxTdHlsZXMgPSBuZXcgTWFwKCkpKTtcbiAgICB9XG4gICAgdGhpcy5faW5pdGlhbFN0eWxlcyA9IGluaXRpYWxTdHlsZXM7XG4gIH1cblxuICBzdGFydCgpIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgPCBTcGVjaWFsQ2FzZWRTdHlsZXNTdGF0ZS5TdGFydGVkKSB7XG4gICAgICBpZiAodGhpcy5fc3RhcnRTdHlsZXMpIHtcbiAgICAgICAgc2V0U3R5bGVzKHRoaXMuX2VsZW1lbnQsIHRoaXMuX3N0YXJ0U3R5bGVzLCB0aGlzLl9pbml0aWFsU3R5bGVzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3N0YXRlID0gU3BlY2lhbENhc2VkU3R5bGVzU3RhdGUuU3RhcnRlZDtcbiAgICB9XG4gIH1cblxuICBmaW5pc2goKSB7XG4gICAgdGhpcy5zdGFydCgpO1xuICAgIGlmICh0aGlzLl9zdGF0ZSA8IFNwZWNpYWxDYXNlZFN0eWxlc1N0YXRlLkZpbmlzaGVkKSB7XG4gICAgICBzZXRTdHlsZXModGhpcy5fZWxlbWVudCwgdGhpcy5faW5pdGlhbFN0eWxlcyk7XG4gICAgICBpZiAodGhpcy5fZW5kU3R5bGVzKSB7XG4gICAgICAgIHNldFN0eWxlcyh0aGlzLl9lbGVtZW50LCB0aGlzLl9lbmRTdHlsZXMpO1xuICAgICAgICB0aGlzLl9lbmRTdHlsZXMgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy5fc3RhdGUgPSBTcGVjaWFsQ2FzZWRTdHlsZXNTdGF0ZS5TdGFydGVkO1xuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5maW5pc2goKTtcbiAgICBpZiAodGhpcy5fc3RhdGUgPCBTcGVjaWFsQ2FzZWRTdHlsZXNTdGF0ZS5EZXN0cm95ZWQpIHtcbiAgICAgIFNwZWNpYWxDYXNlZFN0eWxlcy5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmRlbGV0ZSh0aGlzLl9lbGVtZW50KTtcbiAgICAgIGlmICh0aGlzLl9zdGFydFN0eWxlcykge1xuICAgICAgICBlcmFzZVN0eWxlcyh0aGlzLl9lbGVtZW50LCB0aGlzLl9zdGFydFN0eWxlcyk7XG4gICAgICAgIHRoaXMuX2VuZFN0eWxlcyA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fZW5kU3R5bGVzKSB7XG4gICAgICAgIGVyYXNlU3R5bGVzKHRoaXMuX2VsZW1lbnQsIHRoaXMuX2VuZFN0eWxlcyk7XG4gICAgICAgIHRoaXMuX2VuZFN0eWxlcyA9IG51bGw7XG4gICAgICB9XG4gICAgICBzZXRTdHlsZXModGhpcy5fZWxlbWVudCwgdGhpcy5faW5pdGlhbFN0eWxlcyk7XG4gICAgICB0aGlzLl9zdGF0ZSA9IFNwZWNpYWxDYXNlZFN0eWxlc1N0YXRlLkRlc3Ryb3llZDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBbiBlbnVtIG9mIHN0YXRlcyByZWZsZWN0aXZlIG9mIHdoYXQgdGhlIHN0YXR1cyBvZiBgU3BlY2lhbENhc2VkU3R5bGVzYCBpcy5cbiAqXG4gKiBEZXBlbmRpbmcgb24gaG93IGBTcGVjaWFsQ2FzZWRTdHlsZXNgIGlzIGludGVyYWN0ZWQgd2l0aCwgdGhlIHN0YXJ0IGFuZCBlbmRcbiAqIHN0eWxlcyBtYXkgbm90IGJlIGFwcGxpZWQgaW4gdGhlIHNhbWUgd2F5LiBUaGlzIGVudW0gZW5zdXJlcyB0aGF0IGlmIGFuZCB3aGVuXG4gKiB0aGUgZW5kaW5nIHN0eWxlcyBhcmUgYXBwbGllZCB0aGVuIHRoZSBzdGFydGluZyBzdHlsZXMgYXJlIGFwcGxpZWQuIEl0IGlzXG4gKiBhbHNvIHVzZWQgdG8gcmVmbGVjdCB3aGF0IHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgc3BlY2lhbCBjYXNlZCBzdHlsZXMgYXJlXG4gKiB3aGljaCBoZWxwcyBwcmV2ZW50IHRoZSBzdGFydGluZy9lbmRpbmcgc3R5bGVzIG5vdCBiZSBhcHBsaWVkIHR3aWNlLiBJdCBpc1xuICogYWxzbyB1c2VkIHRvIGNsZWFudXAgdGhlIHN0eWxlcyBvbmNlIGBTcGVjaWFsQ2FzZWRTdHlsZXNgIGlzIGRlc3Ryb3llZC5cbiAqL1xuY29uc3QgZW51bSBTcGVjaWFsQ2FzZWRTdHlsZXNTdGF0ZSB7XG4gIFBlbmRpbmcgPSAwLFxuICBTdGFydGVkID0gMSxcbiAgRmluaXNoZWQgPSAyLFxuICBEZXN0cm95ZWQgPSAzLFxufVxuXG5mdW5jdGlvbiBmaWx0ZXJOb25BbmltYXRhYmxlU3R5bGVzKHN0eWxlczogybVTdHlsZURhdGFNYXApOiDJtVN0eWxlRGF0YU1hcCB8IG51bGwge1xuICBsZXQgcmVzdWx0OiDJtVN0eWxlRGF0YU1hcCB8IG51bGwgPSBudWxsO1xuICBzdHlsZXMuZm9yRWFjaCgodmFsLCBwcm9wKSA9PiB7XG4gICAgaWYgKGlzTm9uQW5pbWF0YWJsZVN0eWxlKHByb3ApKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwgbmV3IE1hcCgpO1xuICAgICAgcmVzdWx0LnNldChwcm9wLCB2YWwpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGlzTm9uQW5pbWF0YWJsZVN0eWxlKHByb3A6IHN0cmluZykge1xuICByZXR1cm4gcHJvcCA9PT0gJ2Rpc3BsYXknIHx8IHByb3AgPT09ICdwb3NpdGlvbic7XG59XG4iXX0=
|