@angular/platform-browser 21.0.0-next.8 → 21.0.0-rc.0
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/_browser-chunk.mjs +361 -501
- package/fesm2022/_browser-chunk.mjs.map +1 -1
- package/fesm2022/_dom_renderer-chunk.mjs +732 -731
- package/fesm2022/_dom_renderer-chunk.mjs.map +1 -1
- package/fesm2022/animations-async.mjs +214 -278
- package/fesm2022/animations-async.mjs.map +1 -1
- package/fesm2022/animations.mjs +154 -167
- package/fesm2022/animations.mjs.map +1 -1
- package/fesm2022/platform-browser.mjs +616 -885
- package/fesm2022/platform-browser.mjs.map +1 -1
- package/fesm2022/testing.mjs +101 -65
- package/fesm2022/testing.mjs.map +1 -1
- package/package.json +4 -4
- package/types/_browser-chunk.d.ts +1 -1
- package/types/animations-async.d.ts +1 -1
- package/types/animations.d.ts +1 -1
- package/types/platform-browser.d.ts +32 -23
- package/types/testing.d.ts +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v21.0.0-
|
|
2
|
+
* @license Angular v21.0.0-rc.0
|
|
3
3
|
* (c) 2010-2025 Google LLC. https://angular.dev/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -11,290 +11,226 @@ import { DomRendererFactory2 } from './_dom_renderer-chunk.mjs';
|
|
|
11
11
|
|
|
12
12
|
const ANIMATION_PREFIX = '@';
|
|
13
13
|
class AsyncAnimationRendererFactory {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
14
|
+
doc;
|
|
15
|
+
delegate;
|
|
16
|
+
zone;
|
|
17
|
+
animationType;
|
|
18
|
+
moduleImpl;
|
|
19
|
+
_rendererFactoryPromise = null;
|
|
20
|
+
scheduler = null;
|
|
21
|
+
injector = inject(Injector);
|
|
22
|
+
loadingSchedulerFn = inject(ɵASYNC_ANIMATION_LOADING_SCHEDULER_FN, {
|
|
23
|
+
optional: true
|
|
24
|
+
});
|
|
25
|
+
_engine;
|
|
26
|
+
constructor(doc, delegate, zone, animationType, moduleImpl) {
|
|
27
|
+
this.doc = doc;
|
|
28
|
+
this.delegate = delegate;
|
|
29
|
+
this.zone = zone;
|
|
30
|
+
this.animationType = animationType;
|
|
31
|
+
this.moduleImpl = moduleImpl;
|
|
32
|
+
}
|
|
33
|
+
ngOnDestroy() {
|
|
34
|
+
this._engine?.flush();
|
|
35
|
+
}
|
|
36
|
+
loadImpl() {
|
|
37
|
+
const loadFn = () => this.moduleImpl ?? import('@angular/animations/browser').then(m => m);
|
|
38
|
+
let moduleImplPromise;
|
|
39
|
+
if (this.loadingSchedulerFn) {
|
|
40
|
+
moduleImplPromise = this.loadingSchedulerFn(loadFn);
|
|
41
|
+
} else {
|
|
42
|
+
moduleImplPromise = loadFn();
|
|
43
|
+
}
|
|
44
|
+
return moduleImplPromise.catch(e => {
|
|
45
|
+
throw new _RuntimeError(5300, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Async loading for animations package was ' + 'enabled, but loading failed. Angular falls back to using regular rendering. ' + "No animations will be displayed and their styles won't be applied.");
|
|
46
|
+
}).then(({
|
|
47
|
+
ɵcreateEngine,
|
|
48
|
+
ɵAnimationRendererFactory
|
|
49
|
+
}) => {
|
|
50
|
+
this._engine = ɵcreateEngine(this.animationType, this.doc);
|
|
51
|
+
const rendererFactory = new ɵAnimationRendererFactory(this.delegate, this._engine, this.zone);
|
|
52
|
+
this.delegate = rendererFactory;
|
|
53
|
+
return rendererFactory;
|
|
24
54
|
});
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* This method is delegating the renderer creation to the factories.
|
|
80
|
-
* It uses default factory while the animation factory isn't loaded
|
|
81
|
-
* and will rely on the animation factory once it is loaded.
|
|
82
|
-
*
|
|
83
|
-
* Calling this method will trigger as side effect the loading of the animation module
|
|
84
|
-
* if the renderered component uses animations.
|
|
85
|
-
*/
|
|
86
|
-
createRenderer(hostElement, rendererType) {
|
|
87
|
-
const renderer = this.delegate.createRenderer(hostElement, rendererType);
|
|
88
|
-
if (renderer.ɵtype === 0 /* AnimationRendererType.Regular */) {
|
|
89
|
-
// The factory is already loaded, this is an animation renderer
|
|
90
|
-
return renderer;
|
|
91
|
-
}
|
|
92
|
-
// We need to prevent the DomRenderer to throw an error because of synthetic properties
|
|
93
|
-
if (typeof renderer.throwOnSyntheticProps === 'boolean') {
|
|
94
|
-
renderer.throwOnSyntheticProps = false;
|
|
95
|
-
}
|
|
96
|
-
// Using a dynamic renderer to switch the renderer implementation once the module is loaded.
|
|
97
|
-
const dynamicRenderer = new DynamicDelegationRenderer(renderer);
|
|
98
|
-
// Kick off the module loading if the component uses animations but the module hasn't been
|
|
99
|
-
// loaded yet.
|
|
100
|
-
if (rendererType?.data?.['animation'] && !this._rendererFactoryPromise) {
|
|
101
|
-
this._rendererFactoryPromise = this.loadImpl();
|
|
102
|
-
}
|
|
103
|
-
this._rendererFactoryPromise
|
|
104
|
-
?.then((animationRendererFactory) => {
|
|
105
|
-
const animationRenderer = animationRendererFactory.createRenderer(hostElement, rendererType);
|
|
106
|
-
dynamicRenderer.use(animationRenderer);
|
|
107
|
-
this.scheduler ??= this.injector.get(_ChangeDetectionScheduler, null, { optional: true });
|
|
108
|
-
this.scheduler?.notify(10 /* NotificationSource.AsyncAnimationsLoaded */);
|
|
109
|
-
})
|
|
110
|
-
.catch((e) => {
|
|
111
|
-
// Permanently use regular renderer when loading fails.
|
|
112
|
-
dynamicRenderer.use(renderer);
|
|
113
|
-
});
|
|
114
|
-
return dynamicRenderer;
|
|
115
|
-
}
|
|
116
|
-
begin() {
|
|
117
|
-
this.delegate.begin?.();
|
|
118
|
-
}
|
|
119
|
-
end() {
|
|
120
|
-
this.delegate.end?.();
|
|
121
|
-
}
|
|
122
|
-
whenRenderingDone() {
|
|
123
|
-
return this.delegate.whenRenderingDone?.() ?? Promise.resolve();
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Used during HMR to clear any cached data about a component.
|
|
127
|
-
* @param componentId ID of the component that is being replaced.
|
|
128
|
-
*/
|
|
129
|
-
componentReplaced(componentId) {
|
|
130
|
-
// Flush the engine since the renderer destruction waits for animations to be done.
|
|
131
|
-
this._engine?.flush();
|
|
132
|
-
this.delegate.componentReplaced?.(componentId);
|
|
133
|
-
}
|
|
134
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0-next.8", ngImport: i0, type: AsyncAnimationRendererFactory, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
|
|
135
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.0-next.8", ngImport: i0, type: AsyncAnimationRendererFactory });
|
|
55
|
+
}
|
|
56
|
+
createRenderer(hostElement, rendererType) {
|
|
57
|
+
const renderer = this.delegate.createRenderer(hostElement, rendererType);
|
|
58
|
+
if (renderer.ɵtype === 0) {
|
|
59
|
+
return renderer;
|
|
60
|
+
}
|
|
61
|
+
if (typeof renderer.throwOnSyntheticProps === 'boolean') {
|
|
62
|
+
renderer.throwOnSyntheticProps = false;
|
|
63
|
+
}
|
|
64
|
+
const dynamicRenderer = new DynamicDelegationRenderer(renderer);
|
|
65
|
+
if (rendererType?.data?.['animation'] && !this._rendererFactoryPromise) {
|
|
66
|
+
this._rendererFactoryPromise = this.loadImpl();
|
|
67
|
+
}
|
|
68
|
+
this._rendererFactoryPromise?.then(animationRendererFactory => {
|
|
69
|
+
const animationRenderer = animationRendererFactory.createRenderer(hostElement, rendererType);
|
|
70
|
+
dynamicRenderer.use(animationRenderer);
|
|
71
|
+
this.scheduler ??= this.injector.get(_ChangeDetectionScheduler, null, {
|
|
72
|
+
optional: true
|
|
73
|
+
});
|
|
74
|
+
this.scheduler?.notify(10);
|
|
75
|
+
}).catch(e => {
|
|
76
|
+
dynamicRenderer.use(renderer);
|
|
77
|
+
});
|
|
78
|
+
return dynamicRenderer;
|
|
79
|
+
}
|
|
80
|
+
begin() {
|
|
81
|
+
this.delegate.begin?.();
|
|
82
|
+
}
|
|
83
|
+
end() {
|
|
84
|
+
this.delegate.end?.();
|
|
85
|
+
}
|
|
86
|
+
whenRenderingDone() {
|
|
87
|
+
return this.delegate.whenRenderingDone?.() ?? Promise.resolve();
|
|
88
|
+
}
|
|
89
|
+
componentReplaced(componentId) {
|
|
90
|
+
this._engine?.flush();
|
|
91
|
+
this.delegate.componentReplaced?.(componentId);
|
|
92
|
+
}
|
|
93
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
94
|
+
minVersion: "12.0.0",
|
|
95
|
+
version: "21.0.0-rc.0",
|
|
96
|
+
ngImport: i0,
|
|
97
|
+
type: AsyncAnimationRendererFactory,
|
|
98
|
+
deps: "invalid",
|
|
99
|
+
target: i0.ɵɵFactoryTarget.Injectable
|
|
100
|
+
});
|
|
101
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({
|
|
102
|
+
minVersion: "12.0.0",
|
|
103
|
+
version: "21.0.0-rc.0",
|
|
104
|
+
ngImport: i0,
|
|
105
|
+
type: AsyncAnimationRendererFactory
|
|
106
|
+
});
|
|
136
107
|
}
|
|
137
|
-
i0.ɵɵngDeclareClassMetadata({
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
108
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
109
|
+
minVersion: "12.0.0",
|
|
110
|
+
version: "21.0.0-rc.0",
|
|
111
|
+
ngImport: i0,
|
|
112
|
+
type: AsyncAnimationRendererFactory,
|
|
113
|
+
decorators: [{
|
|
114
|
+
type: Injectable
|
|
115
|
+
}],
|
|
116
|
+
ctorParameters: () => [{
|
|
117
|
+
type: Document
|
|
118
|
+
}, {
|
|
119
|
+
type: i0.RendererFactory2
|
|
120
|
+
}, {
|
|
121
|
+
type: i0.NgZone
|
|
122
|
+
}, {
|
|
123
|
+
type: undefined
|
|
124
|
+
}, {
|
|
125
|
+
type: Promise
|
|
126
|
+
}]
|
|
127
|
+
});
|
|
144
128
|
class DynamicDelegationRenderer {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
// So we can also register them against the animation renderer
|
|
234
|
-
if (this.shouldReplay(eventName)) {
|
|
235
|
-
this.replay.push((renderer) => renderer.listen(target, eventName, callback, options));
|
|
236
|
-
}
|
|
237
|
-
return this.delegate.listen(target, eventName, callback, options);
|
|
238
|
-
}
|
|
239
|
-
shouldReplay(propOrEventName) {
|
|
240
|
-
//`null` indicates that we no longer need to collect events and properties
|
|
241
|
-
return this.replay !== null && propOrEventName.startsWith(ANIMATION_PREFIX);
|
|
242
|
-
}
|
|
129
|
+
delegate;
|
|
130
|
+
replay = [];
|
|
131
|
+
ɵtype = 1;
|
|
132
|
+
constructor(delegate) {
|
|
133
|
+
this.delegate = delegate;
|
|
134
|
+
}
|
|
135
|
+
use(impl) {
|
|
136
|
+
this.delegate = impl;
|
|
137
|
+
if (this.replay !== null) {
|
|
138
|
+
for (const fn of this.replay) {
|
|
139
|
+
fn(impl);
|
|
140
|
+
}
|
|
141
|
+
this.replay = null;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
get data() {
|
|
145
|
+
return this.delegate.data;
|
|
146
|
+
}
|
|
147
|
+
destroy() {
|
|
148
|
+
this.replay = null;
|
|
149
|
+
this.delegate.destroy();
|
|
150
|
+
}
|
|
151
|
+
createElement(name, namespace) {
|
|
152
|
+
return this.delegate.createElement(name, namespace);
|
|
153
|
+
}
|
|
154
|
+
createComment(value) {
|
|
155
|
+
return this.delegate.createComment(value);
|
|
156
|
+
}
|
|
157
|
+
createText(value) {
|
|
158
|
+
return this.delegate.createText(value);
|
|
159
|
+
}
|
|
160
|
+
get destroyNode() {
|
|
161
|
+
return this.delegate.destroyNode;
|
|
162
|
+
}
|
|
163
|
+
appendChild(parent, newChild) {
|
|
164
|
+
this.delegate.appendChild(parent, newChild);
|
|
165
|
+
}
|
|
166
|
+
insertBefore(parent, newChild, refChild, isMove) {
|
|
167
|
+
this.delegate.insertBefore(parent, newChild, refChild, isMove);
|
|
168
|
+
}
|
|
169
|
+
removeChild(parent, oldChild, isHostElement, requireSynchronousElementRemoval) {
|
|
170
|
+
this.delegate.removeChild(parent, oldChild, isHostElement, requireSynchronousElementRemoval);
|
|
171
|
+
}
|
|
172
|
+
selectRootElement(selectorOrNode, preserveContent) {
|
|
173
|
+
return this.delegate.selectRootElement(selectorOrNode, preserveContent);
|
|
174
|
+
}
|
|
175
|
+
parentNode(node) {
|
|
176
|
+
return this.delegate.parentNode(node);
|
|
177
|
+
}
|
|
178
|
+
nextSibling(node) {
|
|
179
|
+
return this.delegate.nextSibling(node);
|
|
180
|
+
}
|
|
181
|
+
setAttribute(el, name, value, namespace) {
|
|
182
|
+
this.delegate.setAttribute(el, name, value, namespace);
|
|
183
|
+
}
|
|
184
|
+
removeAttribute(el, name, namespace) {
|
|
185
|
+
this.delegate.removeAttribute(el, name, namespace);
|
|
186
|
+
}
|
|
187
|
+
addClass(el, name) {
|
|
188
|
+
this.delegate.addClass(el, name);
|
|
189
|
+
}
|
|
190
|
+
removeClass(el, name) {
|
|
191
|
+
this.delegate.removeClass(el, name);
|
|
192
|
+
}
|
|
193
|
+
setStyle(el, style, value, flags) {
|
|
194
|
+
this.delegate.setStyle(el, style, value, flags);
|
|
195
|
+
}
|
|
196
|
+
removeStyle(el, style, flags) {
|
|
197
|
+
this.delegate.removeStyle(el, style, flags);
|
|
198
|
+
}
|
|
199
|
+
setProperty(el, name, value) {
|
|
200
|
+
if (this.shouldReplay(name)) {
|
|
201
|
+
this.replay.push(renderer => renderer.setProperty(el, name, value));
|
|
202
|
+
}
|
|
203
|
+
this.delegate.setProperty(el, name, value);
|
|
204
|
+
}
|
|
205
|
+
setValue(node, value) {
|
|
206
|
+
this.delegate.setValue(node, value);
|
|
207
|
+
}
|
|
208
|
+
listen(target, eventName, callback, options) {
|
|
209
|
+
if (this.shouldReplay(eventName)) {
|
|
210
|
+
this.replay.push(renderer => renderer.listen(target, eventName, callback, options));
|
|
211
|
+
}
|
|
212
|
+
return this.delegate.listen(target, eventName, callback, options);
|
|
213
|
+
}
|
|
214
|
+
shouldReplay(propOrEventName) {
|
|
215
|
+
return this.replay !== null && propOrEventName.startsWith(ANIMATION_PREFIX);
|
|
216
|
+
}
|
|
243
217
|
}
|
|
244
|
-
/**
|
|
245
|
-
* Provides a custom scheduler function for the async loading of the animation package.
|
|
246
|
-
*
|
|
247
|
-
* Private token for investigation purposes
|
|
248
|
-
*/
|
|
249
218
|
const ɵASYNC_ANIMATION_LOADING_SCHEDULER_FN = new InjectionToken(typeof ngDevMode !== undefined && ngDevMode ? 'async_animation_loading_scheduler_fn' : '');
|
|
250
219
|
|
|
251
|
-
/**
|
|
252
|
-
* Returns the set of dependency-injection providers
|
|
253
|
-
* to enable animations in an application. See [animations guide](guide/animations)
|
|
254
|
-
* to learn more about animations in Angular.
|
|
255
|
-
*
|
|
256
|
-
* When you use this function instead of the eager `provideAnimations()`, animations won't be
|
|
257
|
-
* rendered until the renderer is loaded.
|
|
258
|
-
*
|
|
259
|
-
* @usageNotes
|
|
260
|
-
*
|
|
261
|
-
* The function is useful when you want to enable animations in an application
|
|
262
|
-
* bootstrapped using the `bootstrapApplication` function. In this scenario there
|
|
263
|
-
* is no need to import the `BrowserAnimationsModule` NgModule at all, just add
|
|
264
|
-
* providers returned by this function to the `providers` list as show below.
|
|
265
|
-
*
|
|
266
|
-
* ```ts
|
|
267
|
-
* bootstrapApplication(RootComponent, {
|
|
268
|
-
* providers: [
|
|
269
|
-
* provideAnimationsAsync()
|
|
270
|
-
* ]
|
|
271
|
-
* });
|
|
272
|
-
* ```
|
|
273
|
-
*
|
|
274
|
-
* @param type pass `'noop'` as argument to disable animations.
|
|
275
|
-
*
|
|
276
|
-
* @publicApi
|
|
277
|
-
*
|
|
278
|
-
* @deprecated 20.2 Use `animate.enter` or `animate.leave` instead. Intent to remove in v23
|
|
279
|
-
*/
|
|
280
220
|
function provideAnimationsAsync(type = 'animations') {
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
provide: ANIMATION_MODULE_TYPE,
|
|
295
|
-
useValue: type === 'noop' ? 'NoopAnimations' : 'BrowserAnimations',
|
|
296
|
-
},
|
|
297
|
-
]);
|
|
221
|
+
_performanceMarkFeature('NgAsyncAnimations');
|
|
222
|
+
if (typeof ngServerMode !== 'undefined' && ngServerMode) {
|
|
223
|
+
type = 'noop';
|
|
224
|
+
}
|
|
225
|
+
return makeEnvironmentProviders([{
|
|
226
|
+
provide: RendererFactory2,
|
|
227
|
+
useFactory: () => {
|
|
228
|
+
return new AsyncAnimationRendererFactory(inject(DOCUMENT), inject(DomRendererFactory2), inject(NgZone), type);
|
|
229
|
+
}
|
|
230
|
+
}, {
|
|
231
|
+
provide: ANIMATION_MODULE_TYPE,
|
|
232
|
+
useValue: type === 'noop' ? 'NoopAnimations' : 'BrowserAnimations'
|
|
233
|
+
}]);
|
|
298
234
|
}
|
|
299
235
|
|
|
300
236
|
export { provideAnimationsAsync, ɵASYNC_ANIMATION_LOADING_SCHEDULER_FN, AsyncAnimationRendererFactory as ɵAsyncAnimationRendererFactory };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animations-async.mjs","sources":["../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/packages/platform-browser/animations/async/src/async_animation_renderer.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/packages/platform-browser/animations/async/src/providers.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 {\n ɵAnimationEngine as AnimationEngine,\n ɵAnimationRenderer as AnimationRenderer,\n ɵAnimationRendererFactory as AnimationRendererFactory,\n} from '@angular/animations/browser';\nimport {\n ɵAnimationRendererType as AnimationRendererType,\n ɵChangeDetectionScheduler as ChangeDetectionScheduler,\n inject,\n Injectable,\n InjectionToken,\n Injector,\n NgZone,\n ɵNotificationSource as NotificationSource,\n OnDestroy,\n Renderer2,\n RendererFactory2,\n RendererStyleFlags2,\n RendererType2,\n ɵRuntimeError as RuntimeError,\n type ListenerOptions,\n} from '@angular/core';\nimport {ɵRuntimeErrorCode as RuntimeErrorCode} from '../../../index';\n\nconst ANIMATION_PREFIX = '@';\n\n@Injectable()\nexport class AsyncAnimationRendererFactory implements OnDestroy, RendererFactory2 {\n private _rendererFactoryPromise: Promise<AnimationRendererFactory> | null = null;\n private scheduler: ChangeDetectionScheduler | null = null;\n private readonly injector = inject(Injector);\n private readonly loadingSchedulerFn = inject(ɵASYNC_ANIMATION_LOADING_SCHEDULER_FN, {\n optional: true,\n });\n private _engine?: AnimationEngine;\n\n /**\n *\n * @param moduleImpl allows to provide a mock implmentation (or will load the animation module)\n */\n constructor(\n private doc: Document,\n private delegate: RendererFactory2,\n private zone: NgZone,\n private animationType: 'animations' | 'noop',\n private moduleImpl?: Promise<{\n ɵcreateEngine: (type: 'animations' | 'noop', doc: Document) => AnimationEngine;\n ɵAnimationRendererFactory: typeof AnimationRendererFactory;\n }>,\n ) {}\n\n /** @docs-private */\n ngOnDestroy(): void {\n // When the root view is removed, the renderer defers the actual work to the\n // `TransitionAnimationEngine` to do this, and the `TransitionAnimationEngine` doesn't actually\n // remove the DOM node, but just calls `markElementAsRemoved()`. The actual DOM node is not\n // removed until `TransitionAnimationEngine` \"flushes\".\n // Note: we already flush on destroy within the `InjectableAnimationEngine`. The injectable\n // engine is not provided when async animations are used.\n this._engine?.flush();\n }\n\n /**\n * @internal\n */\n private loadImpl(): Promise<AnimationRendererFactory> {\n // Note on the `.then(m => m)` part below: Closure compiler optimizations in g3 require\n // `.then` to be present for a dynamic import (or an import should be `await`ed) to detect\n // the set of imported symbols.\n const loadFn = () => this.moduleImpl ?? import('@angular/animations/browser').then((m) => m);\n\n let moduleImplPromise: typeof this.moduleImpl;\n if (this.loadingSchedulerFn) {\n moduleImplPromise = this.loadingSchedulerFn(loadFn);\n } else {\n moduleImplPromise = loadFn();\n }\n\n return moduleImplPromise\n .catch((e) => {\n throw new RuntimeError(\n RuntimeErrorCode.ANIMATION_RENDERER_ASYNC_LOADING_FAILURE,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n 'Async loading for animations package was ' +\n 'enabled, but loading failed. Angular falls back to using regular rendering. ' +\n \"No animations will be displayed and their styles won't be applied.\",\n );\n })\n .then(({ɵcreateEngine, ɵAnimationRendererFactory}) => {\n // We can't create the renderer yet because we might need the hostElement and the type\n // Both are provided in createRenderer().\n this._engine = ɵcreateEngine(this.animationType, this.doc);\n const rendererFactory = new ɵAnimationRendererFactory(\n this.delegate,\n this._engine,\n this.zone,\n );\n this.delegate = rendererFactory;\n return rendererFactory;\n });\n }\n\n /**\n * This method is delegating the renderer creation to the factories.\n * It uses default factory while the animation factory isn't loaded\n * and will rely on the animation factory once it is loaded.\n *\n * Calling this method will trigger as side effect the loading of the animation module\n * if the renderered component uses animations.\n */\n createRenderer(hostElement: any, rendererType: RendererType2): Renderer2 {\n const renderer = this.delegate.createRenderer(hostElement, rendererType);\n\n if ((renderer as AnimationRenderer).ɵtype === AnimationRendererType.Regular) {\n // The factory is already loaded, this is an animation renderer\n return renderer;\n }\n\n // We need to prevent the DomRenderer to throw an error because of synthetic properties\n if (typeof (renderer as any).throwOnSyntheticProps === 'boolean') {\n (renderer as any).throwOnSyntheticProps = false;\n }\n\n // Using a dynamic renderer to switch the renderer implementation once the module is loaded.\n const dynamicRenderer = new DynamicDelegationRenderer(renderer);\n\n // Kick off the module loading if the component uses animations but the module hasn't been\n // loaded yet.\n if (rendererType?.data?.['animation'] && !this._rendererFactoryPromise) {\n this._rendererFactoryPromise = this.loadImpl();\n }\n\n this._rendererFactoryPromise\n ?.then((animationRendererFactory) => {\n const animationRenderer = animationRendererFactory.createRenderer(\n hostElement,\n rendererType,\n );\n dynamicRenderer.use(animationRenderer);\n this.scheduler ??= this.injector.get(ChangeDetectionScheduler, null, {optional: true});\n this.scheduler?.notify(NotificationSource.AsyncAnimationsLoaded);\n })\n .catch((e) => {\n // Permanently use regular renderer when loading fails.\n dynamicRenderer.use(renderer);\n });\n\n return dynamicRenderer;\n }\n\n begin(): void {\n this.delegate.begin?.();\n }\n\n end(): void {\n this.delegate.end?.();\n }\n\n whenRenderingDone?(): Promise<any> {\n return this.delegate.whenRenderingDone?.() ?? Promise.resolve();\n }\n\n /**\n * Used during HMR to clear any cached data about a component.\n * @param componentId ID of the component that is being replaced.\n */\n protected componentReplaced(componentId: string) {\n // Flush the engine since the renderer destruction waits for animations to be done.\n this._engine?.flush();\n (this.delegate as {componentReplaced?: (id: string) => void}).componentReplaced?.(componentId);\n }\n}\n\n/**\n * The class allows to dynamicly switch between different renderer implementations\n * by changing the delegate renderer.\n */\nexport class DynamicDelegationRenderer implements Renderer2 {\n // List of callbacks that need to be replayed on the animation renderer once its loaded\n private replay: ((renderer: Renderer2) => void)[] | null = [];\n readonly ɵtype = AnimationRendererType.Delegated;\n\n constructor(private delegate: Renderer2) {}\n\n use(impl: Renderer2) {\n this.delegate = impl;\n\n if (this.replay !== null) {\n // Replay queued actions using the animation renderer to apply\n // all events and properties collected while loading was in progress.\n for (const fn of this.replay) {\n fn(impl);\n }\n // Set to `null` to indicate that the queue was processed\n // and we no longer need to collect events and properties.\n this.replay = null;\n }\n }\n\n get data(): {[key: string]: any} {\n return this.delegate.data;\n }\n\n destroy(): void {\n this.replay = null;\n this.delegate.destroy();\n }\n\n createElement(name: string, namespace?: string | null) {\n return this.delegate.createElement(name, namespace);\n }\n\n createComment(value: string): void {\n return this.delegate.createComment(value);\n }\n\n createText(value: string): any {\n return this.delegate.createText(value);\n }\n\n get destroyNode(): ((node: any) => void) | null {\n return this.delegate.destroyNode;\n }\n\n appendChild(parent: any, newChild: any): void {\n this.delegate.appendChild(parent, newChild);\n }\n\n insertBefore(parent: any, newChild: any, refChild: any, isMove?: boolean | undefined): void {\n this.delegate.insertBefore(parent, newChild, refChild, isMove);\n }\n\n removeChild(parent: any, oldChild: any, isHostElement?: boolean | undefined): void {\n this.delegate.removeChild(parent, oldChild, isHostElement);\n }\n\n selectRootElement(selectorOrNode: any, preserveContent?: boolean | undefined): any {\n return this.delegate.selectRootElement(selectorOrNode, preserveContent);\n }\n\n parentNode(node: any): any {\n return this.delegate.parentNode(node);\n }\n\n nextSibling(node: any): any {\n return this.delegate.nextSibling(node);\n }\n\n setAttribute(el: any, name: string, value: string, namespace?: string | null | undefined): void {\n this.delegate.setAttribute(el, name, value, namespace);\n }\n\n removeAttribute(el: any, name: string, namespace?: string | null | undefined): void {\n this.delegate.removeAttribute(el, name, namespace);\n }\n\n addClass(el: any, name: string): void {\n this.delegate.addClass(el, name);\n }\n\n removeClass(el: any, name: string): void {\n this.delegate.removeClass(el, name);\n }\n\n setStyle(el: any, style: string, value: any, flags?: RendererStyleFlags2 | undefined): void {\n this.delegate.setStyle(el, style, value, flags);\n }\n\n removeStyle(el: any, style: string, flags?: RendererStyleFlags2 | undefined): void {\n this.delegate.removeStyle(el, style, flags);\n }\n\n setProperty(el: any, name: string, value: any): void {\n // We need to keep track of animation properties set on default renderer\n // So we can also set them also on the animation renderer\n if (this.shouldReplay(name)) {\n this.replay!.push((renderer: Renderer2) => renderer.setProperty(el, name, value));\n }\n this.delegate.setProperty(el, name, value);\n }\n\n setValue(node: any, value: string): void {\n this.delegate.setValue(node, value);\n }\n\n listen(\n target: any,\n eventName: string,\n callback: (event: any) => boolean | void,\n options?: ListenerOptions,\n ): () => void {\n // We need to keep track of animation events registred by the default renderer\n // So we can also register them against the animation renderer\n if (this.shouldReplay(eventName)) {\n this.replay!.push((renderer: Renderer2) =>\n renderer.listen(target, eventName, callback, options),\n );\n }\n return this.delegate.listen(target, eventName, callback, options);\n }\n\n private shouldReplay(propOrEventName: string): boolean {\n //`null` indicates that we no longer need to collect events and properties\n return this.replay !== null && propOrEventName.startsWith(ANIMATION_PREFIX);\n }\n}\n\n/**\n * Provides a custom scheduler function for the async loading of the animation package.\n *\n * Private token for investigation purposes\n */\nexport const ɵASYNC_ANIMATION_LOADING_SCHEDULER_FN = new InjectionToken<<T>(loadFn: () => T) => T>(\n typeof ngDevMode !== undefined && ngDevMode ? 'async_animation_loading_scheduler_fn' : '',\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\nimport {DOCUMENT} from '@angular/common';\nimport {\n ANIMATION_MODULE_TYPE,\n EnvironmentProviders,\n makeEnvironmentProviders,\n NgZone,\n RendererFactory2,\n ɵperformanceMarkFeature as performanceMarkFeature,\n inject,\n} from '@angular/core';\nimport {ɵDomRendererFactory2 as DomRendererFactory2} from '../../../index';\n\nimport {AsyncAnimationRendererFactory} from './async_animation_renderer';\n\n/**\n * Returns the set of dependency-injection providers\n * to enable animations in an application. See [animations guide](guide/animations)\n * to learn more about animations in Angular.\n *\n * When you use this function instead of the eager `provideAnimations()`, animations won't be\n * rendered until the renderer is loaded.\n *\n * @usageNotes\n *\n * The function is useful when you want to enable animations in an application\n * bootstrapped using the `bootstrapApplication` function. In this scenario there\n * is no need to import the `BrowserAnimationsModule` NgModule at all, just add\n * providers returned by this function to the `providers` list as show below.\n *\n * ```ts\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideAnimationsAsync()\n * ]\n * });\n * ```\n *\n * @param type pass `'noop'` as argument to disable animations.\n *\n * @publicApi\n *\n * @deprecated 20.2 Use `animate.enter` or `animate.leave` instead. Intent to remove in v23\n */\nexport function provideAnimationsAsync(\n type: 'animations' | 'noop' = 'animations',\n): EnvironmentProviders {\n performanceMarkFeature('NgAsyncAnimations');\n\n // Animations don't work on the server so we switch them over to no-op automatically.\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n type = 'noop';\n }\n\n return makeEnvironmentProviders([\n {\n provide: RendererFactory2,\n useFactory: () => {\n return new AsyncAnimationRendererFactory(\n inject(DOCUMENT),\n inject(DomRendererFactory2),\n inject(NgZone),\n type,\n );\n },\n },\n {\n provide: ANIMATION_MODULE_TYPE,\n useValue: type === 'noop' ? 'NoopAnimations' : 'BrowserAnimations',\n },\n ]);\n}\n"],"names":["RuntimeError","ChangeDetectionScheduler","performanceMarkFeature"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"animations-async.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/packages/platform-browser/animations/async/src/async_animation_renderer.ts","../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/packages/platform-browser/animations/async/src/providers.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 {\n ɵAnimationEngine as AnimationEngine,\n ɵAnimationRenderer as AnimationRenderer,\n ɵAnimationRendererFactory as AnimationRendererFactory,\n} from '@angular/animations/browser';\nimport {\n ɵAnimationRendererType as AnimationRendererType,\n ɵChangeDetectionScheduler as ChangeDetectionScheduler,\n inject,\n Injectable,\n InjectionToken,\n Injector,\n NgZone,\n ɵNotificationSource as NotificationSource,\n OnDestroy,\n Renderer2,\n RendererFactory2,\n RendererStyleFlags2,\n RendererType2,\n ɵRuntimeError as RuntimeError,\n type ListenerOptions,\n} from '@angular/core';\nimport {ɵRuntimeErrorCode as RuntimeErrorCode} from '../../../index';\n\nconst ANIMATION_PREFIX = '@';\n\n@Injectable()\nexport class AsyncAnimationRendererFactory implements OnDestroy, RendererFactory2 {\n private _rendererFactoryPromise: Promise<AnimationRendererFactory> | null = null;\n private scheduler: ChangeDetectionScheduler | null = null;\n private readonly injector = inject(Injector);\n private readonly loadingSchedulerFn = inject(ɵASYNC_ANIMATION_LOADING_SCHEDULER_FN, {\n optional: true,\n });\n private _engine?: AnimationEngine;\n\n /**\n *\n * @param moduleImpl allows to provide a mock implmentation (or will load the animation module)\n */\n constructor(\n private doc: Document,\n private delegate: RendererFactory2,\n private zone: NgZone,\n private animationType: 'animations' | 'noop',\n private moduleImpl?: Promise<{\n ɵcreateEngine: (type: 'animations' | 'noop', doc: Document) => AnimationEngine;\n ɵAnimationRendererFactory: typeof AnimationRendererFactory;\n }>,\n ) {}\n\n /** @docs-private */\n ngOnDestroy(): void {\n // When the root view is removed, the renderer defers the actual work to the\n // `TransitionAnimationEngine` to do this, and the `TransitionAnimationEngine` doesn't actually\n // remove the DOM node, but just calls `markElementAsRemoved()`. The actual DOM node is not\n // removed until `TransitionAnimationEngine` \"flushes\".\n // Note: we already flush on destroy within the `InjectableAnimationEngine`. The injectable\n // engine is not provided when async animations are used.\n this._engine?.flush();\n }\n\n /**\n * @internal\n */\n private loadImpl(): Promise<AnimationRendererFactory> {\n // Note on the `.then(m => m)` part below: Closure compiler optimizations in g3 require\n // `.then` to be present for a dynamic import (or an import should be `await`ed) to detect\n // the set of imported symbols.\n const loadFn = () => this.moduleImpl ?? import('@angular/animations/browser').then((m) => m);\n\n let moduleImplPromise: typeof this.moduleImpl;\n if (this.loadingSchedulerFn) {\n moduleImplPromise = this.loadingSchedulerFn(loadFn);\n } else {\n moduleImplPromise = loadFn();\n }\n\n return moduleImplPromise\n .catch((e) => {\n throw new RuntimeError(\n RuntimeErrorCode.ANIMATION_RENDERER_ASYNC_LOADING_FAILURE,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n 'Async loading for animations package was ' +\n 'enabled, but loading failed. Angular falls back to using regular rendering. ' +\n \"No animations will be displayed and their styles won't be applied.\",\n );\n })\n .then(({ɵcreateEngine, ɵAnimationRendererFactory}) => {\n // We can't create the renderer yet because we might need the hostElement and the type\n // Both are provided in createRenderer().\n this._engine = ɵcreateEngine(this.animationType, this.doc);\n const rendererFactory = new ɵAnimationRendererFactory(\n this.delegate,\n this._engine,\n this.zone,\n );\n this.delegate = rendererFactory;\n return rendererFactory;\n });\n }\n\n /**\n * This method is delegating the renderer creation to the factories.\n * It uses default factory while the animation factory isn't loaded\n * and will rely on the animation factory once it is loaded.\n *\n * Calling this method will trigger as side effect the loading of the animation module\n * if the renderered component uses animations.\n */\n createRenderer(hostElement: any, rendererType: RendererType2): Renderer2 {\n const renderer = this.delegate.createRenderer(hostElement, rendererType);\n\n if ((renderer as AnimationRenderer).ɵtype === AnimationRendererType.Regular) {\n // The factory is already loaded, this is an animation renderer\n return renderer;\n }\n\n // We need to prevent the DomRenderer to throw an error because of synthetic properties\n if (typeof (renderer as any).throwOnSyntheticProps === 'boolean') {\n (renderer as any).throwOnSyntheticProps = false;\n }\n\n // Using a dynamic renderer to switch the renderer implementation once the module is loaded.\n const dynamicRenderer = new DynamicDelegationRenderer(renderer);\n\n // Kick off the module loading if the component uses animations but the module hasn't been\n // loaded yet.\n if (rendererType?.data?.['animation'] && !this._rendererFactoryPromise) {\n this._rendererFactoryPromise = this.loadImpl();\n }\n\n this._rendererFactoryPromise\n ?.then((animationRendererFactory) => {\n const animationRenderer = animationRendererFactory.createRenderer(\n hostElement,\n rendererType,\n );\n dynamicRenderer.use(animationRenderer);\n this.scheduler ??= this.injector.get(ChangeDetectionScheduler, null, {optional: true});\n this.scheduler?.notify(NotificationSource.AsyncAnimationsLoaded);\n })\n .catch((e) => {\n // Permanently use regular renderer when loading fails.\n dynamicRenderer.use(renderer);\n });\n\n return dynamicRenderer;\n }\n\n begin(): void {\n this.delegate.begin?.();\n }\n\n end(): void {\n this.delegate.end?.();\n }\n\n whenRenderingDone?(): Promise<any> {\n return this.delegate.whenRenderingDone?.() ?? Promise.resolve();\n }\n\n /**\n * Used during HMR to clear any cached data about a component.\n * @param componentId ID of the component that is being replaced.\n */\n protected componentReplaced(componentId: string) {\n // Flush the engine since the renderer destruction waits for animations to be done.\n this._engine?.flush();\n (this.delegate as {componentReplaced?: (id: string) => void}).componentReplaced?.(componentId);\n }\n}\n\n/**\n * The class allows to dynamicly switch between different renderer implementations\n * by changing the delegate renderer.\n */\nexport class DynamicDelegationRenderer implements Renderer2 {\n // List of callbacks that need to be replayed on the animation renderer once its loaded\n private replay: ((renderer: Renderer2) => void)[] | null = [];\n readonly ɵtype = AnimationRendererType.Delegated;\n\n constructor(private delegate: Renderer2) {}\n\n use(impl: Renderer2) {\n this.delegate = impl;\n\n if (this.replay !== null) {\n // Replay queued actions using the animation renderer to apply\n // all events and properties collected while loading was in progress.\n for (const fn of this.replay) {\n fn(impl);\n }\n // Set to `null` to indicate that the queue was processed\n // and we no longer need to collect events and properties.\n this.replay = null;\n }\n }\n\n get data(): {[key: string]: any} {\n return this.delegate.data;\n }\n\n destroy(): void {\n this.replay = null;\n this.delegate.destroy();\n }\n\n createElement(name: string, namespace?: string | null) {\n return this.delegate.createElement(name, namespace);\n }\n\n createComment(value: string): void {\n return this.delegate.createComment(value);\n }\n\n createText(value: string): any {\n return this.delegate.createText(value);\n }\n\n get destroyNode(): ((node: any) => void) | null {\n return this.delegate.destroyNode;\n }\n\n appendChild(parent: any, newChild: any): void {\n this.delegate.appendChild(parent, newChild);\n }\n\n insertBefore(parent: any, newChild: any, refChild: any, isMove?: boolean | undefined): void {\n this.delegate.insertBefore(parent, newChild, refChild, isMove);\n }\n\n removeChild(\n parent: any,\n oldChild: any,\n isHostElement?: boolean | undefined,\n requireSynchronousElementRemoval?: boolean,\n ): void {\n this.delegate.removeChild(parent, oldChild, isHostElement, requireSynchronousElementRemoval);\n }\n\n selectRootElement(selectorOrNode: any, preserveContent?: boolean | undefined): any {\n return this.delegate.selectRootElement(selectorOrNode, preserveContent);\n }\n\n parentNode(node: any): any {\n return this.delegate.parentNode(node);\n }\n\n nextSibling(node: any): any {\n return this.delegate.nextSibling(node);\n }\n\n setAttribute(el: any, name: string, value: string, namespace?: string | null | undefined): void {\n this.delegate.setAttribute(el, name, value, namespace);\n }\n\n removeAttribute(el: any, name: string, namespace?: string | null | undefined): void {\n this.delegate.removeAttribute(el, name, namespace);\n }\n\n addClass(el: any, name: string): void {\n this.delegate.addClass(el, name);\n }\n\n removeClass(el: any, name: string): void {\n this.delegate.removeClass(el, name);\n }\n\n setStyle(el: any, style: string, value: any, flags?: RendererStyleFlags2 | undefined): void {\n this.delegate.setStyle(el, style, value, flags);\n }\n\n removeStyle(el: any, style: string, flags?: RendererStyleFlags2 | undefined): void {\n this.delegate.removeStyle(el, style, flags);\n }\n\n setProperty(el: any, name: string, value: any): void {\n // We need to keep track of animation properties set on default renderer\n // So we can also set them also on the animation renderer\n if (this.shouldReplay(name)) {\n this.replay!.push((renderer: Renderer2) => renderer.setProperty(el, name, value));\n }\n this.delegate.setProperty(el, name, value);\n }\n\n setValue(node: any, value: string): void {\n this.delegate.setValue(node, value);\n }\n\n listen(\n target: any,\n eventName: string,\n callback: (event: any) => boolean | void,\n options?: ListenerOptions,\n ): () => void {\n // We need to keep track of animation events registred by the default renderer\n // So we can also register them against the animation renderer\n if (this.shouldReplay(eventName)) {\n this.replay!.push((renderer: Renderer2) =>\n renderer.listen(target, eventName, callback, options),\n );\n }\n return this.delegate.listen(target, eventName, callback, options);\n }\n\n private shouldReplay(propOrEventName: string): boolean {\n //`null` indicates that we no longer need to collect events and properties\n return this.replay !== null && propOrEventName.startsWith(ANIMATION_PREFIX);\n }\n}\n\n/**\n * Provides a custom scheduler function for the async loading of the animation package.\n *\n * Private token for investigation purposes\n */\nexport const ɵASYNC_ANIMATION_LOADING_SCHEDULER_FN = new InjectionToken<<T>(loadFn: () => T) => T>(\n typeof ngDevMode !== undefined && ngDevMode ? 'async_animation_loading_scheduler_fn' : '',\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\nimport {DOCUMENT} from '@angular/common';\nimport {\n ANIMATION_MODULE_TYPE,\n EnvironmentProviders,\n makeEnvironmentProviders,\n NgZone,\n RendererFactory2,\n ɵperformanceMarkFeature as performanceMarkFeature,\n inject,\n} from '@angular/core';\nimport {ɵDomRendererFactory2 as DomRendererFactory2} from '../../../index';\n\nimport {AsyncAnimationRendererFactory} from './async_animation_renderer';\n\n/**\n * Returns the set of dependency-injection providers\n * to enable animations in an application. See [animations guide](guide/animations)\n * to learn more about animations in Angular.\n *\n * When you use this function instead of the eager `provideAnimations()`, animations won't be\n * rendered until the renderer is loaded.\n *\n * @usageNotes\n *\n * The function is useful when you want to enable animations in an application\n * bootstrapped using the `bootstrapApplication` function. In this scenario there\n * is no need to import the `BrowserAnimationsModule` NgModule at all, just add\n * providers returned by this function to the `providers` list as show below.\n *\n * ```ts\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideAnimationsAsync()\n * ]\n * });\n * ```\n *\n * @param type pass `'noop'` as argument to disable animations.\n *\n * @publicApi\n *\n * @deprecated 20.2 Use `animate.enter` or `animate.leave` instead. Intent to remove in v23\n */\nexport function provideAnimationsAsync(\n type: 'animations' | 'noop' = 'animations',\n): EnvironmentProviders {\n performanceMarkFeature('NgAsyncAnimations');\n\n // Animations don't work on the server so we switch them over to no-op automatically.\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n type = 'noop';\n }\n\n return makeEnvironmentProviders([\n {\n provide: RendererFactory2,\n useFactory: () => {\n return new AsyncAnimationRendererFactory(\n inject(DOCUMENT),\n inject(DomRendererFactory2),\n inject(NgZone),\n type,\n );\n },\n },\n {\n provide: ANIMATION_MODULE_TYPE,\n useValue: type === 'noop' ? 'NoopAnimations' : 'BrowserAnimations',\n },\n ]);\n}\n"],"names":["AsyncAnimationRendererFactory","delegate","zone","animationType","moduleImpl","_rendererFactoryPromise","scheduler","loadingSchedulerFn","inject","ɵASYNC_ANIMATION_LOADING_SCHEDULER_FN","optional","_engine","ngOnDestroy","flush","loadFn","then","m","moduleImplPromise","catch","e","RuntimeError","ngDevMode","ɵcreateEngine","ɵAnimationRendererFactory","doc","rendererFactory","createRenderer","hostElement","rendererType","renderer","ɵtype","throwOnSyntheticProps","data","loadImpl","animationRendererFactory","animationRenderer","use","ChangeDetectionScheduler","notify","dynamicRenderer","begin","end","whenRenderingDone","Promise","resolve","componentReplaced","componentId","deps","target","i0","ɵɵFactoryTarget","Injectable","decorators","DynamicDelegationRenderer","replay","impl","fn","destroy","createElement","name","namespace","createComment","value","createText","destroyNode","appendChild","parent","newChild","makeEnvironmentProviders"],"mappings":"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"}
|