@angular/platform-browser 21.2.14 → 21.2.15

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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.2.14
2
+ * @license Angular v21.2.15
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -129,7 +129,7 @@ class BrowserXhr {
129
129
  }
130
130
  static ɵfac = i0.ɵɵngDeclareFactory({
131
131
  minVersion: "12.0.0",
132
- version: "21.2.14",
132
+ version: "21.2.15",
133
133
  ngImport: i0,
134
134
  type: BrowserXhr,
135
135
  deps: [],
@@ -137,14 +137,14 @@ class BrowserXhr {
137
137
  });
138
138
  static ɵprov = i0.ɵɵngDeclareInjectable({
139
139
  minVersion: "12.0.0",
140
- version: "21.2.14",
140
+ version: "21.2.15",
141
141
  ngImport: i0,
142
142
  type: BrowserXhr
143
143
  });
144
144
  }
145
145
  i0.ɵɵngDeclareClassMetadata({
146
146
  minVersion: "12.0.0",
147
- version: "21.2.14",
147
+ version: "21.2.15",
148
148
  ngImport: i0,
149
149
  type: BrowserXhr,
150
150
  decorators: [{
@@ -254,7 +254,7 @@ class KeyEventsPlugin extends EventManagerPlugin {
254
254
  }
255
255
  static ɵfac = i0.ɵɵngDeclareFactory({
256
256
  minVersion: "12.0.0",
257
- version: "21.2.14",
257
+ version: "21.2.15",
258
258
  ngImport: i0,
259
259
  type: KeyEventsPlugin,
260
260
  deps: [{
@@ -264,14 +264,14 @@ class KeyEventsPlugin extends EventManagerPlugin {
264
264
  });
265
265
  static ɵprov = i0.ɵɵngDeclareInjectable({
266
266
  minVersion: "12.0.0",
267
- version: "21.2.14",
267
+ version: "21.2.15",
268
268
  ngImport: i0,
269
269
  type: KeyEventsPlugin
270
270
  });
271
271
  }
272
272
  i0.ɵɵngDeclareClassMetadata({
273
273
  minVersion: "12.0.0",
274
- version: "21.2.14",
274
+ version: "21.2.15",
275
275
  ngImport: i0,
276
276
  type: KeyEventsPlugin,
277
277
  decorators: [{
@@ -390,7 +390,7 @@ class BrowserModule {
390
390
  }
391
391
  static ɵfac = i0.ɵɵngDeclareFactory({
392
392
  minVersion: "12.0.0",
393
- version: "21.2.14",
393
+ version: "21.2.15",
394
394
  ngImport: i0,
395
395
  type: BrowserModule,
396
396
  deps: [],
@@ -398,14 +398,14 @@ class BrowserModule {
398
398
  });
399
399
  static ɵmod = i0.ɵɵngDeclareNgModule({
400
400
  minVersion: "14.0.0",
401
- version: "21.2.14",
401
+ version: "21.2.15",
402
402
  ngImport: i0,
403
403
  type: BrowserModule,
404
404
  exports: [CommonModule, ApplicationModule]
405
405
  });
406
406
  static ɵinj = i0.ɵɵngDeclareInjector({
407
407
  minVersion: "12.0.0",
408
- version: "21.2.14",
408
+ version: "21.2.15",
409
409
  ngImport: i0,
410
410
  type: BrowserModule,
411
411
  providers: [...BROWSER_MODULE_PROVIDERS, ...TESTABILITY_PROVIDERS],
@@ -414,7 +414,7 @@ class BrowserModule {
414
414
  }
415
415
  i0.ɵɵngDeclareClassMetadata({
416
416
  minVersion: "12.0.0",
417
- version: "21.2.14",
417
+ version: "21.2.15",
418
418
  ngImport: i0,
419
419
  type: BrowserModule,
420
420
  decorators: [{
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.2.14
2
+ * @license Angular v21.2.15
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -32,7 +32,7 @@ class DomEventsPlugin extends EventManagerPlugin {
32
32
  }
33
33
  static ɵfac = i0.ɵɵngDeclareFactory({
34
34
  minVersion: "12.0.0",
35
- version: "21.2.14",
35
+ version: "21.2.15",
36
36
  ngImport: i0,
37
37
  type: DomEventsPlugin,
38
38
  deps: [{
@@ -42,14 +42,14 @@ class DomEventsPlugin extends EventManagerPlugin {
42
42
  });
43
43
  static ɵprov = i0.ɵɵngDeclareInjectable({
44
44
  minVersion: "12.0.0",
45
- version: "21.2.14",
45
+ version: "21.2.15",
46
46
  ngImport: i0,
47
47
  type: DomEventsPlugin
48
48
  });
49
49
  }
50
50
  i0.ɵɵngDeclareClassMetadata({
51
51
  minVersion: "12.0.0",
52
- version: "21.2.14",
52
+ version: "21.2.15",
53
53
  ngImport: i0,
54
54
  type: DomEventsPlugin,
55
55
  decorators: [{
@@ -103,7 +103,7 @@ class EventManager {
103
103
  }
104
104
  static ɵfac = i0.ɵɵngDeclareFactory({
105
105
  minVersion: "12.0.0",
106
- version: "21.2.14",
106
+ version: "21.2.15",
107
107
  ngImport: i0,
108
108
  type: EventManager,
109
109
  deps: [{
@@ -115,14 +115,14 @@ class EventManager {
115
115
  });
116
116
  static ɵprov = i0.ɵɵngDeclareInjectable({
117
117
  minVersion: "12.0.0",
118
- version: "21.2.14",
118
+ version: "21.2.15",
119
119
  ngImport: i0,
120
120
  type: EventManager
121
121
  });
122
122
  }
123
123
  i0.ɵɵngDeclareClassMetadata({
124
124
  minVersion: "12.0.0",
125
- version: "21.2.14",
125
+ version: "21.2.15",
126
126
  ngImport: i0,
127
127
  type: EventManager,
128
128
  decorators: [{
@@ -260,7 +260,7 @@ class SharedStylesHost {
260
260
  }
261
261
  static ɵfac = i0.ɵɵngDeclareFactory({
262
262
  minVersion: "12.0.0",
263
- version: "21.2.14",
263
+ version: "21.2.15",
264
264
  ngImport: i0,
265
265
  type: SharedStylesHost,
266
266
  deps: [{
@@ -277,14 +277,14 @@ class SharedStylesHost {
277
277
  });
278
278
  static ɵprov = i0.ɵɵngDeclareInjectable({
279
279
  minVersion: "12.0.0",
280
- version: "21.2.14",
280
+ version: "21.2.15",
281
281
  ngImport: i0,
282
282
  type: SharedStylesHost
283
283
  });
284
284
  }
285
285
  i0.ɵɵngDeclareClassMetadata({
286
286
  minVersion: "12.0.0",
287
- version: "21.2.14",
287
+ version: "21.2.15",
288
288
  ngImport: i0,
289
289
  type: SharedStylesHost,
290
290
  decorators: [{
@@ -440,7 +440,7 @@ class DomRendererFactory2 {
440
440
  }
441
441
  static ɵfac = i0.ɵɵngDeclareFactory({
442
442
  minVersion: "12.0.0",
443
- version: "21.2.14",
443
+ version: "21.2.15",
444
444
  ngImport: i0,
445
445
  type: DomRendererFactory2,
446
446
  deps: [{
@@ -465,14 +465,14 @@ class DomRendererFactory2 {
465
465
  });
466
466
  static ɵprov = i0.ɵɵngDeclareInjectable({
467
467
  minVersion: "12.0.0",
468
- version: "21.2.14",
468
+ version: "21.2.15",
469
469
  ngImport: i0,
470
470
  type: DomRendererFactory2
471
471
  });
472
472
  }
473
473
  i0.ɵɵngDeclareClassMetadata({
474
474
  minVersion: "12.0.0",
475
- version: "21.2.14",
475
+ version: "21.2.15",
476
476
  ngImport: i0,
477
477
  type: DomRendererFactory2,
478
478
  decorators: [{
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.2.14
2
+ * @license Angular v21.2.15
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -92,7 +92,7 @@ class AsyncAnimationRendererFactory {
92
92
  }
93
93
  static ɵfac = i0.ɵɵngDeclareFactory({
94
94
  minVersion: "12.0.0",
95
- version: "21.2.14",
95
+ version: "21.2.15",
96
96
  ngImport: i0,
97
97
  type: AsyncAnimationRendererFactory,
98
98
  deps: "invalid",
@@ -100,14 +100,14 @@ class AsyncAnimationRendererFactory {
100
100
  });
101
101
  static ɵprov = i0.ɵɵngDeclareInjectable({
102
102
  minVersion: "12.0.0",
103
- version: "21.2.14",
103
+ version: "21.2.15",
104
104
  ngImport: i0,
105
105
  type: AsyncAnimationRendererFactory
106
106
  });
107
107
  }
108
108
  i0.ɵɵngDeclareClassMetadata({
109
109
  minVersion: "12.0.0",
110
- version: "21.2.14",
110
+ version: "21.2.15",
111
111
  ngImport: i0,
112
112
  type: AsyncAnimationRendererFactory,
113
113
  decorators: [{
@@ -1 +1 @@
1
- {"version":3,"file":"animations-async.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/animations/async/src/async_animation_renderer.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/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":["ANIMATION_PREFIX","AsyncAnimationRendererFactory","doc","delegate","zone","animationType","moduleImpl","_rendererFactoryPromise","scheduler","injector","inject","Injector","loadingSchedulerFn","ɵASYNC_ANIMATION_LOADING_SCHEDULER_FN","optional","_engine","constructor","ngOnDestroy","flush","loadImpl","loadFn","then","m","moduleImplPromise","catch","e","RuntimeError","ngDevMode","ɵcreateEngine","ɵAnimationRendererFactory","rendererFactory","createRenderer","hostElement","rendererType","renderer","ɵtype","throwOnSyntheticProps","dynamicRenderer","DynamicDelegationRenderer","data","animationRendererFactory","animationRenderer","use","get","ChangeDetectionScheduler","notify","begin","end","whenRenderingDone","Promise","resolve","componentReplaced","componentId","deps","target","i0","ɵɵFactoryTarget","Injectable","decorators","replay","impl","fn","destroy","createElement","name","namespace","createComment","value","createText","destroyNode","appendChild","parent","newChild","insertBefore","refChild","isMove","removeChild","oldChild","isHostElement","requireSynchronousElementRemoval","selectRootElement","selectorOrNode","preserveContent","parentNode","node","nextSibling","setAttribute","el","removeAttribute","addClass","removeClass","setStyle","style","flags","removeStyle","setProperty","shouldReplay","push","setValue","listen","eventName","callback","options","propOrEventName","startsWith","InjectionToken","provideAnimationsAsync","type","performanceMarkFeature","ngServerMode","makeEnvironmentProviders","provide","RendererFactory2","useFactory","DOCUMENT","DomRendererFactory2","NgZone","ANIMATION_MODULE_TYPE","useValue"],"mappings":"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"}
1
+ {"version":3,"file":"animations-async.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/animations/async/src/async_animation_renderer.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/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 implementation (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":["ANIMATION_PREFIX","AsyncAnimationRendererFactory","doc","delegate","zone","animationType","moduleImpl","_rendererFactoryPromise","scheduler","injector","inject","Injector","loadingSchedulerFn","ɵASYNC_ANIMATION_LOADING_SCHEDULER_FN","optional","_engine","constructor","ngOnDestroy","flush","loadImpl","loadFn","then","m","moduleImplPromise","catch","e","RuntimeError","ngDevMode","ɵcreateEngine","ɵAnimationRendererFactory","rendererFactory","createRenderer","hostElement","rendererType","renderer","ɵtype","throwOnSyntheticProps","dynamicRenderer","DynamicDelegationRenderer","data","animationRendererFactory","animationRenderer","use","get","ChangeDetectionScheduler","notify","begin","end","whenRenderingDone","Promise","resolve","componentReplaced","componentId","deps","target","i0","ɵɵFactoryTarget","Injectable","decorators","replay","impl","fn","destroy","createElement","name","namespace","createComment","value","createText","destroyNode","appendChild","parent","newChild","insertBefore","refChild","isMove","removeChild","oldChild","isHostElement","requireSynchronousElementRemoval","selectRootElement","selectorOrNode","preserveContent","parentNode","node","nextSibling","setAttribute","el","removeAttribute","addClass","removeClass","setStyle","style","flags","removeStyle","setProperty","shouldReplay","push","setValue","listen","eventName","callback","options","propOrEventName","startsWith","InjectionToken","provideAnimationsAsync","type","performanceMarkFeature","ngServerMode","makeEnvironmentProviders","provide","RendererFactory2","useFactory","DOCUMENT","DomRendererFactory2","NgZone","ANIMATION_MODULE_TYPE","useValue"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.2.14
2
+ * @license Angular v21.2.15
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -22,7 +22,7 @@ class InjectableAnimationEngine extends _AnimationEngine {
22
22
  }
23
23
  static ɵfac = i0.ɵɵngDeclareFactory({
24
24
  minVersion: "12.0.0",
25
- version: "21.2.14",
25
+ version: "21.2.15",
26
26
  ngImport: i0,
27
27
  type: InjectableAnimationEngine,
28
28
  deps: [{
@@ -36,14 +36,14 @@ class InjectableAnimationEngine extends _AnimationEngine {
36
36
  });
37
37
  static ɵprov = i0.ɵɵngDeclareInjectable({
38
38
  minVersion: "12.0.0",
39
- version: "21.2.14",
39
+ version: "21.2.15",
40
40
  ngImport: i0,
41
41
  type: InjectableAnimationEngine
42
42
  });
43
43
  }
44
44
  i0.ɵɵngDeclareClassMetadata({
45
45
  minVersion: "12.0.0",
46
- version: "21.2.14",
46
+ version: "21.2.15",
47
47
  ngImport: i0,
48
48
  type: InjectableAnimationEngine,
49
49
  decorators: [{
@@ -101,7 +101,7 @@ class BrowserAnimationsModule {
101
101
  }
102
102
  static ɵfac = i0.ɵɵngDeclareFactory({
103
103
  minVersion: "12.0.0",
104
- version: "21.2.14",
104
+ version: "21.2.15",
105
105
  ngImport: i0,
106
106
  type: BrowserAnimationsModule,
107
107
  deps: [],
@@ -109,14 +109,14 @@ class BrowserAnimationsModule {
109
109
  });
110
110
  static ɵmod = i0.ɵɵngDeclareNgModule({
111
111
  minVersion: "14.0.0",
112
- version: "21.2.14",
112
+ version: "21.2.15",
113
113
  ngImport: i0,
114
114
  type: BrowserAnimationsModule,
115
115
  exports: [BrowserModule]
116
116
  });
117
117
  static ɵinj = i0.ɵɵngDeclareInjector({
118
118
  minVersion: "12.0.0",
119
- version: "21.2.14",
119
+ version: "21.2.15",
120
120
  ngImport: i0,
121
121
  type: BrowserAnimationsModule,
122
122
  providers: BROWSER_ANIMATIONS_PROVIDERS,
@@ -125,7 +125,7 @@ class BrowserAnimationsModule {
125
125
  }
126
126
  i0.ɵɵngDeclareClassMetadata({
127
127
  minVersion: "12.0.0",
128
- version: "21.2.14",
128
+ version: "21.2.15",
129
129
  ngImport: i0,
130
130
  type: BrowserAnimationsModule,
131
131
  decorators: [{
@@ -143,7 +143,7 @@ function provideAnimations() {
143
143
  class NoopAnimationsModule {
144
144
  static ɵfac = i0.ɵɵngDeclareFactory({
145
145
  minVersion: "12.0.0",
146
- version: "21.2.14",
146
+ version: "21.2.15",
147
147
  ngImport: i0,
148
148
  type: NoopAnimationsModule,
149
149
  deps: [],
@@ -151,14 +151,14 @@ class NoopAnimationsModule {
151
151
  });
152
152
  static ɵmod = i0.ɵɵngDeclareNgModule({
153
153
  minVersion: "14.0.0",
154
- version: "21.2.14",
154
+ version: "21.2.15",
155
155
  ngImport: i0,
156
156
  type: NoopAnimationsModule,
157
157
  exports: [BrowserModule]
158
158
  });
159
159
  static ɵinj = i0.ɵɵngDeclareInjector({
160
160
  minVersion: "12.0.0",
161
- version: "21.2.14",
161
+ version: "21.2.15",
162
162
  ngImport: i0,
163
163
  type: NoopAnimationsModule,
164
164
  providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS,
@@ -167,7 +167,7 @@ class NoopAnimationsModule {
167
167
  }
168
168
  i0.ɵɵngDeclareClassMetadata({
169
169
  minVersion: "12.0.0",
170
- version: "21.2.14",
170
+ version: "21.2.15",
171
171
  ngImport: i0,
172
172
  type: NoopAnimationsModule,
173
173
  decorators: [{
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.2.14
2
+ * @license Angular v21.2.15
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -35,12 +35,13 @@ class Meta {
35
35
  }
36
36
  getTag(attrSelector) {
37
37
  if (!attrSelector) return null;
38
- return this._doc.querySelector(`meta[${attrSelector}]`) || null;
38
+ const meta = this._doc.querySelector(`meta[${attrSelector}]`);
39
+ return meta?.nodeName.toLowerCase() === 'meta' ? meta : null;
39
40
  }
40
41
  getTags(attrSelector) {
41
42
  if (!attrSelector) return [];
42
43
  const list = this._doc.querySelectorAll(`meta[${attrSelector}]`);
43
- return list ? [].slice.call(list) : [];
44
+ return list ? [].slice.call(list).filter(elem => elem.nodeName.toLowerCase() === 'meta') : [];
44
45
  }
45
46
  updateTag(tag, selector) {
46
47
  if (!tag) return null;
@@ -77,7 +78,10 @@ class Meta {
77
78
  }
78
79
  _parseSelector(tag) {
79
80
  const attr = tag.name ? 'name' : 'property';
80
- return `${attr}="${tag[attr]}"`;
81
+ return `${attr}=${this._escapeSelectorValue(String(tag[attr]))}`;
82
+ }
83
+ _escapeSelectorValue(value) {
84
+ return `"${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
81
85
  }
82
86
  _containsAttributes(tag, elem) {
83
87
  return Object.keys(tag).every(key => elem.getAttribute(this._getMetaKeyMap(key)) === tag[key]);
@@ -87,7 +91,7 @@ class Meta {
87
91
  }
88
92
  static ɵfac = i0.ɵɵngDeclareFactory({
89
93
  minVersion: "12.0.0",
90
- version: "21.2.14",
94
+ version: "21.2.15",
91
95
  ngImport: i0,
92
96
  type: Meta,
93
97
  deps: [{
@@ -97,7 +101,7 @@ class Meta {
97
101
  });
98
102
  static ɵprov = i0.ɵɵngDeclareInjectable({
99
103
  minVersion: "12.0.0",
100
- version: "21.2.14",
104
+ version: "21.2.15",
101
105
  ngImport: i0,
102
106
  type: Meta,
103
107
  providedIn: 'root'
@@ -105,7 +109,7 @@ class Meta {
105
109
  }
106
110
  i0.ɵɵngDeclareClassMetadata({
107
111
  minVersion: "12.0.0",
108
- version: "21.2.14",
112
+ version: "21.2.15",
109
113
  ngImport: i0,
110
114
  type: Meta,
111
115
  decorators: [{
@@ -139,7 +143,7 @@ class Title {
139
143
  }
140
144
  static ɵfac = i0.ɵɵngDeclareFactory({
141
145
  minVersion: "12.0.0",
142
- version: "21.2.14",
146
+ version: "21.2.15",
143
147
  ngImport: i0,
144
148
  type: Title,
145
149
  deps: [{
@@ -149,7 +153,7 @@ class Title {
149
153
  });
150
154
  static ɵprov = i0.ɵɵngDeclareInjectable({
151
155
  minVersion: "12.0.0",
152
- version: "21.2.14",
156
+ version: "21.2.15",
153
157
  ngImport: i0,
154
158
  type: Title,
155
159
  providedIn: 'root'
@@ -157,7 +161,7 @@ class Title {
157
161
  }
158
162
  i0.ɵɵngDeclareClassMetadata({
159
163
  minVersion: "12.0.0",
160
- version: "21.2.14",
164
+ version: "21.2.15",
161
165
  ngImport: i0,
162
166
  type: Title,
163
167
  decorators: [{
@@ -300,7 +304,7 @@ class HammerGestureConfig {
300
304
  }
301
305
  static ɵfac = i0.ɵɵngDeclareFactory({
302
306
  minVersion: "12.0.0",
303
- version: "21.2.14",
307
+ version: "21.2.15",
304
308
  ngImport: i0,
305
309
  type: HammerGestureConfig,
306
310
  deps: [],
@@ -308,14 +312,14 @@ class HammerGestureConfig {
308
312
  });
309
313
  static ɵprov = i0.ɵɵngDeclareInjectable({
310
314
  minVersion: "12.0.0",
311
- version: "21.2.14",
315
+ version: "21.2.15",
312
316
  ngImport: i0,
313
317
  type: HammerGestureConfig
314
318
  });
315
319
  }
316
320
  i0.ɵɵngDeclareClassMetadata({
317
321
  minVersion: "12.0.0",
318
- version: "21.2.14",
322
+ version: "21.2.15",
319
323
  ngImport: i0,
320
324
  type: HammerGestureConfig,
321
325
  decorators: [{
@@ -399,7 +403,7 @@ class HammerGesturesPlugin extends EventManagerPlugin {
399
403
  }
400
404
  static ɵfac = i0.ɵɵngDeclareFactory({
401
405
  minVersion: "12.0.0",
402
- version: "21.2.14",
406
+ version: "21.2.15",
403
407
  ngImport: i0,
404
408
  type: HammerGesturesPlugin,
405
409
  deps: [{
@@ -416,14 +420,14 @@ class HammerGesturesPlugin extends EventManagerPlugin {
416
420
  });
417
421
  static ɵprov = i0.ɵɵngDeclareInjectable({
418
422
  minVersion: "12.0.0",
419
- version: "21.2.14",
423
+ version: "21.2.15",
420
424
  ngImport: i0,
421
425
  type: HammerGesturesPlugin
422
426
  });
423
427
  }
424
428
  i0.ɵɵngDeclareClassMetadata({
425
429
  minVersion: "12.0.0",
426
- version: "21.2.14",
430
+ version: "21.2.15",
427
431
  ngImport: i0,
428
432
  type: HammerGesturesPlugin,
429
433
  decorators: [{
@@ -456,7 +460,7 @@ i0.ɵɵngDeclareClassMetadata({
456
460
  class HammerModule {
457
461
  static ɵfac = i0.ɵɵngDeclareFactory({
458
462
  minVersion: "12.0.0",
459
- version: "21.2.14",
463
+ version: "21.2.15",
460
464
  ngImport: i0,
461
465
  type: HammerModule,
462
466
  deps: [],
@@ -464,13 +468,13 @@ class HammerModule {
464
468
  });
465
469
  static ɵmod = i0.ɵɵngDeclareNgModule({
466
470
  minVersion: "14.0.0",
467
- version: "21.2.14",
471
+ version: "21.2.15",
468
472
  ngImport: i0,
469
473
  type: HammerModule
470
474
  });
471
475
  static ɵinj = i0.ɵɵngDeclareInjector({
472
476
  minVersion: "12.0.0",
473
- version: "21.2.14",
477
+ version: "21.2.15",
474
478
  ngImport: i0,
475
479
  type: HammerModule,
476
480
  providers: [{
@@ -486,7 +490,7 @@ class HammerModule {
486
490
  }
487
491
  i0.ɵɵngDeclareClassMetadata({
488
492
  minVersion: "12.0.0",
489
- version: "21.2.14",
493
+ version: "21.2.15",
490
494
  ngImport: i0,
491
495
  type: HammerModule,
492
496
  decorators: [{
@@ -508,7 +512,7 @@ i0.ɵɵngDeclareClassMetadata({
508
512
  class DomSanitizer {
509
513
  static ɵfac = i0.ɵɵngDeclareFactory({
510
514
  minVersion: "12.0.0",
511
- version: "21.2.14",
515
+ version: "21.2.15",
512
516
  ngImport: i0,
513
517
  type: DomSanitizer,
514
518
  deps: [],
@@ -516,7 +520,7 @@ class DomSanitizer {
516
520
  });
517
521
  static ɵprov = i0.ɵɵngDeclareInjectable({
518
522
  minVersion: "12.0.0",
519
- version: "21.2.14",
523
+ version: "21.2.15",
520
524
  ngImport: i0,
521
525
  type: DomSanitizer,
522
526
  providedIn: 'root',
@@ -525,7 +529,7 @@ class DomSanitizer {
525
529
  }
526
530
  i0.ɵɵngDeclareClassMetadata({
527
531
  minVersion: "12.0.0",
528
- version: "21.2.14",
532
+ version: "21.2.15",
529
533
  ngImport: i0,
530
534
  type: DomSanitizer,
531
535
  decorators: [{
@@ -593,7 +597,7 @@ class DomSanitizerImpl extends DomSanitizer {
593
597
  }
594
598
  static ɵfac = i0.ɵɵngDeclareFactory({
595
599
  minVersion: "12.0.0",
596
- version: "21.2.14",
600
+ version: "21.2.15",
597
601
  ngImport: i0,
598
602
  type: DomSanitizerImpl,
599
603
  deps: [{
@@ -603,7 +607,7 @@ class DomSanitizerImpl extends DomSanitizer {
603
607
  });
604
608
  static ɵprov = i0.ɵɵngDeclareInjectable({
605
609
  minVersion: "12.0.0",
606
- version: "21.2.14",
610
+ version: "21.2.15",
607
611
  ngImport: i0,
608
612
  type: DomSanitizerImpl,
609
613
  providedIn: 'root'
@@ -611,7 +615,7 @@ class DomSanitizerImpl extends DomSanitizer {
611
615
  }
612
616
  i0.ɵɵngDeclareClassMetadata({
613
617
  minVersion: "12.0.0",
614
- version: "21.2.14",
618
+ version: "21.2.15",
615
619
  ngImport: i0,
616
620
  type: DomSanitizerImpl,
617
621
  decorators: [{
@@ -693,7 +697,7 @@ function provideClientHydration(...features) {
693
697
  return makeEnvironmentProviders([typeof ngDevMode !== 'undefined' && ngDevMode ? provideEnabledBlockingInitialNavigationDetector() : [], typeof ngDevMode !== 'undefined' && ngDevMode ? provideStabilityDebugging() : [], _withDomHydration(), featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) || hasHttpTransferCacheOptions ? [] : _withHttpTransferCache({}), providers]);
694
698
  }
695
699
 
696
- const VERSION = /* @__PURE__ */new Version('21.2.14');
700
+ const VERSION = /* @__PURE__ */new Version('21.2.15');
697
701
 
698
702
  export { By, DomSanitizer, EVENT_MANAGER_PLUGINS, EventManagerPlugin, HAMMER_GESTURE_CONFIG, HAMMER_LOADER, HammerGestureConfig, HammerModule, HydrationFeatureKind, Meta, Title, VERSION, disableDebugTools, enableDebugTools, provideClientHydration, withEventReplay, withHttpTransferCacheOptions, withI18nSupport, withIncrementalHydration, withNoHttpTransferCache, DomSanitizerImpl as ɵDomSanitizerImpl, HammerGesturesPlugin as ɵHammerGesturesPlugin };
699
703
  //# sourceMappingURL=platform-browser.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform-browser.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/browser/meta.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/browser/title.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/dom/util.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/browser/tools/common_tools.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/browser/tools/tools.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/dom/debug/by.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/dom/events/hammer_gestures.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/security/dom_sanitization_service.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/hydration.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/version.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 {DOCUMENT, ɵDomAdapter as DomAdapter, ɵgetDOM as getDOM} from '@angular/common';\nimport {Inject, Injectable} from '@angular/core';\n\n/**\n * Represents the attributes of an HTML `<meta>` element. The element itself is\n * represented by the internal `HTMLMetaElement`.\n *\n * @see [HTML meta tag](https://developer.mozilla.org/docs/Web/HTML/Element/meta)\n * @see {@link Meta}\n *\n * @publicApi\n */\nexport type MetaDefinition = {\n charset?: string;\n content?: string;\n httpEquiv?: string;\n id?: string;\n itemprop?: string;\n name?: string;\n property?: string;\n scheme?: string;\n url?: string;\n} & {\n // TODO(IgorMinar): this type looks wrong\n [prop: string]: string;\n};\n\n/**\n * A service for managing HTML `<meta>` tags.\n *\n * Properties of the `MetaDefinition` object match the attributes of the\n * HTML `<meta>` tag. These tags define document metadata that is important for\n * things like configuring a Content Security Policy, defining browser compatibility\n * and security settings, setting HTTP Headers, defining rich content for social sharing,\n * and Search Engine Optimization (SEO).\n *\n * To identify specific `<meta>` tags in a document, use an attribute selection\n * string in the format `\"tag_attribute='value string'\"`.\n * For example, an `attrSelector` value of `\"name='description'\"` matches a tag\n * whose `name` attribute has the value `\"description\"`.\n * Selectors are used with the `querySelector()` Document method,\n * in the format `meta[{attrSelector}]`.\n *\n * @see [HTML meta tag](https://developer.mozilla.org/docs/Web/HTML/Element/meta)\n * @see [Document.querySelector()](https://developer.mozilla.org/docs/Web/API/Document/querySelector)\n *\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class Meta {\n private _dom: DomAdapter;\n constructor(@Inject(DOCUMENT) private _doc: any) {\n this._dom = getDOM();\n }\n /**\n * Retrieves or creates a specific `<meta>` tag element in the current HTML document.\n * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute\n * values in the provided tag definition, and verifies that all other attribute values are equal.\n * If an existing element is found, it is returned and is not modified in any way.\n * @param tag The definition of a `<meta>` element to match or create.\n * @param forceCreation True to create a new element without checking whether one already exists.\n * @returns The existing element with the same attributes and values if found,\n * the new element if no match is found, or `null` if the tag parameter is not defined.\n */\n addTag(tag: MetaDefinition, forceCreation: boolean = false): HTMLMetaElement | null {\n if (!tag) return null;\n return this._getOrCreateElement(tag, forceCreation);\n }\n\n /**\n * Retrieves or creates a set of `<meta>` tag elements in the current HTML document.\n * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute\n * values in the provided tag definition, and verifies that all other attribute values are equal.\n * @param tags An array of tag definitions to match or create.\n * @param forceCreation True to create new elements without checking whether they already exist.\n * @returns The matching elements if found, or the new elements.\n */\n addTags(tags: MetaDefinition[], forceCreation: boolean = false): HTMLMetaElement[] {\n if (!tags) return [];\n return tags.reduce((result: HTMLMetaElement[], tag: MetaDefinition) => {\n if (tag) {\n result.push(this._getOrCreateElement(tag, forceCreation));\n }\n return result;\n }, []);\n }\n\n /**\n * Retrieves a `<meta>` tag element in the current HTML document.\n * @param attrSelector The tag attribute and value to match against, in the format\n * `\"tag_attribute='value string'\"`.\n * @returns The matching element, if any.\n */\n getTag(attrSelector: string): HTMLMetaElement | null {\n if (!attrSelector) return null;\n return this._doc.querySelector(`meta[${attrSelector}]`) || null;\n }\n\n /**\n * Retrieves a set of `<meta>` tag elements in the current HTML document.\n * @param attrSelector The tag attribute and value to match against, in the format\n * `\"tag_attribute='value string'\"`.\n * @returns The matching elements, if any.\n */\n getTags(attrSelector: string): HTMLMetaElement[] {\n if (!attrSelector) return [];\n const list /*NodeList*/ = this._doc.querySelectorAll(`meta[${attrSelector}]`);\n return list ? [].slice.call(list) : [];\n }\n\n /**\n * Modifies an existing `<meta>` tag element in the current HTML document.\n * @param tag The tag description with which to replace the existing tag content.\n * @param selector A tag attribute and value to match against, to identify\n * an existing tag. A string in the format `\"tag_attribute=`value string`\"`.\n * If not supplied, matches a tag with the same `name` or `property` attribute value as the\n * replacement tag.\n * @return The modified element.\n */\n updateTag(tag: MetaDefinition, selector?: string): HTMLMetaElement | null {\n if (!tag) return null;\n selector = selector || this._parseSelector(tag);\n const meta: HTMLMetaElement = this.getTag(selector)!;\n if (meta) {\n return this._setMetaElementAttributes(tag, meta);\n }\n return this._getOrCreateElement(tag, true);\n }\n\n /**\n * Removes an existing `<meta>` tag element from the current HTML document.\n * @param attrSelector A tag attribute and value to match against, to identify\n * an existing tag. A string in the format `\"tag_attribute=`value string`\"`.\n */\n removeTag(attrSelector: string): void {\n this.removeTagElement(this.getTag(attrSelector)!);\n }\n\n /**\n * Removes an existing `<meta>` tag element from the current HTML document.\n * @param meta The tag definition to match against to identify an existing tag.\n */\n removeTagElement(meta: HTMLMetaElement): void {\n if (meta) {\n this._dom.remove(meta);\n }\n }\n\n private _getOrCreateElement(\n meta: MetaDefinition,\n forceCreation: boolean = false,\n ): HTMLMetaElement {\n if (!forceCreation) {\n const selector: string = this._parseSelector(meta);\n // It's allowed to have multiple elements with the same name so it's not enough to\n // just check that element with the same name already present on the page. We also need to\n // check if element has tag attributes\n const elem = this.getTags(selector).filter((elem) => this._containsAttributes(meta, elem))[0];\n if (elem !== undefined) return elem;\n }\n const element: HTMLMetaElement = this._dom.createElement('meta') as HTMLMetaElement;\n this._setMetaElementAttributes(meta, element);\n const head = this._doc.getElementsByTagName('head')[0];\n head.appendChild(element);\n return element;\n }\n\n private _setMetaElementAttributes(tag: MetaDefinition, el: HTMLMetaElement): HTMLMetaElement {\n Object.keys(tag).forEach((prop: string) =>\n el.setAttribute(this._getMetaKeyMap(prop), tag[prop]),\n );\n return el;\n }\n\n private _parseSelector(tag: MetaDefinition): string {\n const attr: string = tag.name ? 'name' : 'property';\n return `${attr}=\"${tag[attr]}\"`;\n }\n\n private _containsAttributes(tag: MetaDefinition, elem: HTMLMetaElement): boolean {\n return Object.keys(tag).every(\n (key: string) => elem.getAttribute(this._getMetaKeyMap(key)) === tag[key],\n );\n }\n\n private _getMetaKeyMap(prop: string): string {\n return META_KEYS_MAP[prop] || prop;\n }\n}\n\n/**\n * Mapping for MetaDefinition properties with their correct meta attribute names\n */\nconst META_KEYS_MAP: {[prop: string]: string} = {\n httpEquiv: 'http-equiv',\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 {Inject, Injectable} from '@angular/core';\n\n/**\n * A service that can be used to get and set the title of a current HTML document.\n *\n * Since an Angular application can't be bootstrapped on the entire HTML document (`<html>` tag)\n * it is not possible to bind to the `text` property of the `HTMLTitleElement` elements\n * (representing the `<title>` tag). Instead, this service can be used to set and get the current\n * title value.\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class Title {\n constructor(@Inject(DOCUMENT) private _doc: any) {}\n /**\n * Get the title of the current HTML document.\n */\n getTitle(): string {\n return this._doc.title;\n }\n\n /**\n * Set the title of the current HTML document.\n * @param newTitle\n */\n setTitle(newTitle: string) {\n this._doc.title = newTitle || '';\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/// <reference path=\"../../../goog.d.ts\" />\n\nimport {ɵglobal as global} from '@angular/core';\n\n/**\n * Exports the value under a given `name` in the global property `ng`. For example `ng.probe` if\n * `name` is `'probe'`.\n * @param name Name under which it will be exported. Keep in mind this will be a property of the\n * global `ng` object.\n * @param value The value to export.\n */\nexport function exportNgVar(name: string, value: any): void {\n if (typeof COMPILED === 'undefined' || !COMPILED) {\n // Note: we can't export `ng` when using closure enhanced optimization as:\n // - closure declares globals itself for minified names, which sometimes clobber our `ng` global\n // - we can't declare a closure extern as the namespace `ng` is already used within Google\n // for typings for angularJS (via `goog.provide('ng....')`).\n const ng = (global['ng'] = (global['ng'] as {[key: string]: any} | undefined) || {});\n ng[name] = value;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ApplicationRef, ComponentRef} from '@angular/core';\n\nexport class ChangeDetectionPerfRecord {\n constructor(\n public msPerTick: number,\n public numTicks: number,\n ) {}\n}\n\n/**\n * Entry point for all Angular profiling-related debug tools. This object\n * corresponds to the `ng.profiler` in the dev console.\n */\nexport class AngularProfiler {\n appRef: ApplicationRef;\n\n constructor(ref: ComponentRef<any>) {\n this.appRef = ref.injector.get(ApplicationRef);\n }\n\n // tslint:disable:no-console\n /**\n * Exercises change detection in a loop and then prints the average amount of\n * time in milliseconds how long a single round of change detection takes for\n * the current state of the UI. It runs a minimum of 5 rounds for a minimum\n * of 500 milliseconds.\n *\n * Optionally, a user may pass a `config` parameter containing a map of\n * options. Supported options are:\n *\n * `record` (boolean) - causes the profiler to record a CPU profile while\n * it exercises the change detector. Example:\n *\n * ```ts\n * ng.profiler.timeChangeDetection({record: true})\n * ```\n */\n timeChangeDetection(config: any): ChangeDetectionPerfRecord {\n const record = config && config['record'];\n const profileName = 'Change Detection';\n // Profiler is not available in Android browsers without dev tools opened\n if (record && 'profile' in console && typeof console.profile === 'function') {\n console.profile(profileName);\n }\n const start = performance.now();\n let numTicks = 0;\n while (numTicks < 5 || performance.now() - start < 500) {\n this.appRef.tick();\n numTicks++;\n }\n const end = performance.now();\n if (record && 'profileEnd' in console && typeof console.profileEnd === 'function') {\n console.profileEnd(profileName);\n }\n const msPerTick = (end - start) / numTicks;\n console.log(`ran ${numTicks} change detection cycles`);\n console.log(`${msPerTick.toFixed(2)} ms per check`);\n\n return new ChangeDetectionPerfRecord(msPerTick, numTicks);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ComponentRef} from '@angular/core';\n\nimport {exportNgVar} from '../../dom/util';\n\nimport {AngularProfiler} from './common_tools';\n\nconst PROFILER_GLOBAL_NAME = 'profiler';\n\n/**\n * Enabled Angular debug tools that are accessible via your browser's\n * developer console.\n *\n * Usage:\n *\n * 1. Open developer console (e.g. in Chrome Ctrl + Shift + j)\n * 1. Type `ng.` (usually the console will show auto-complete suggestion)\n * 1. Try the change detection profiler `ng.profiler.timeChangeDetection()`\n * then hit Enter.\n *\n * @publicApi\n */\nexport function enableDebugTools<T>(ref: ComponentRef<T>): ComponentRef<T> {\n exportNgVar(PROFILER_GLOBAL_NAME, new AngularProfiler(ref));\n return ref;\n}\n\n/**\n * Disables Angular tools.\n *\n * @publicApi\n */\nexport function disableDebugTools(): void {\n exportNgVar(PROFILER_GLOBAL_NAME, null);\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 {ɵgetDOM as getDOM} from '@angular/common';\nimport {DebugElement, DebugNode, Predicate, Type} from '@angular/core';\n\n/**\n * Predicates for use with {@link DebugElement}'s query functions.\n *\n * @publicApi\n */\nexport class By {\n /**\n * Match all nodes.\n *\n * @usageNotes\n * ### Example\n *\n * {@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}\n */\n static all(): Predicate<DebugNode> {\n return () => true;\n }\n\n /**\n * Match elements by the given CSS selector.\n *\n * @usageNotes\n * ### Example\n *\n * {@example platform-browser/dom/debug/ts/by/by.ts region='by_css'}\n */\n static css(selector: string): Predicate<DebugElement> {\n return (debugElement) => {\n return debugElement.nativeElement != null\n ? elementMatches(debugElement.nativeElement, selector)\n : false;\n };\n }\n\n /**\n * Match nodes that have the given directive present.\n *\n * @usageNotes\n * ### Example\n *\n * {@example platform-browser/dom/debug/ts/by/by.ts region='by_directive'}\n */\n static directive(type: Type<any>): Predicate<DebugNode> {\n return (debugNode) => debugNode.providerTokens!.indexOf(type) !== -1;\n }\n}\n\nfunction elementMatches(n: any, selector: string): boolean {\n if (getDOM().isElementNode(n)) {\n return (\n (n.matches && n.matches(selector)) ||\n (n.msMatchesSelector && n.msMatchesSelector(selector)) ||\n (n.webkitMatchesSelector && n.webkitMatchesSelector(selector))\n );\n }\n\n return false;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/// <reference types=\"hammerjs\" />\n\nimport {DOCUMENT} from '@angular/common';\nimport {\n Inject,\n Injectable,\n InjectionToken,\n Injector,\n NgModule,\n Optional,\n ɵConsole as Console,\n} from '@angular/core';\n\nimport {EVENT_MANAGER_PLUGINS} from './event_manager';\nimport {EventManagerPlugin} from './event_manager_plugin';\n\n/**\n * Supported HammerJS recognizer event names.\n */\nconst EVENT_NAMES = {\n // pan\n 'pan': true,\n 'panstart': true,\n 'panmove': true,\n 'panend': true,\n 'pancancel': true,\n 'panleft': true,\n 'panright': true,\n 'panup': true,\n 'pandown': true,\n // pinch\n 'pinch': true,\n 'pinchstart': true,\n 'pinchmove': true,\n 'pinchend': true,\n 'pinchcancel': true,\n 'pinchin': true,\n 'pinchout': true,\n // press\n 'press': true,\n 'pressup': true,\n // rotate\n 'rotate': true,\n 'rotatestart': true,\n 'rotatemove': true,\n 'rotateend': true,\n 'rotatecancel': true,\n // swipe\n 'swipe': true,\n 'swipeleft': true,\n 'swiperight': true,\n 'swipeup': true,\n 'swipedown': true,\n // tap\n 'tap': true,\n 'doubletap': true,\n};\n\n/**\n * DI token for providing [HammerJS](https://hammerjs.github.io/) support to Angular.\n * @see {@link HammerGestureConfig}\n *\n * @ngModule HammerModule\n * @publicApi\n *\n * @deprecated The HammerJS integration is deprecated. Replace it by your own implementation.\n */\nexport const HAMMER_GESTURE_CONFIG = new InjectionToken<HammerGestureConfig>(\n typeof ngDevMode === 'undefined' || ngDevMode ? 'HammerGestureConfig' : '',\n);\n\n/**\n * Function that loads HammerJS, returning a promise that is resolved once HammerJs is loaded.\n *\n * @publicApi\n *\n * @deprecated The hammerjs integration is deprecated. Replace it by your own implementation.\n */\nexport type HammerLoader = () => Promise<void>;\n\n/**\n * Injection token used to provide a HammerLoader to Angular.\n *\n * @see {@link HammerLoader}\n *\n * @publicApi\n *\n * @deprecated The HammerJS integration is deprecated. Replace it by your own implementation.\n */\nexport const HAMMER_LOADER = new InjectionToken<HammerLoader>(\n typeof ngDevMode === 'undefined' || ngDevMode ? 'HammerLoader' : '',\n);\n\nexport interface HammerInstance {\n on(eventName: string, callback?: Function): void;\n off(eventName: string, callback?: Function): void;\n destroy?(): void;\n}\n\n/**\n * An injectable [HammerJS Manager](https://hammerjs.github.io/api/#hammermanager)\n * for gesture recognition. Configures specific event recognition.\n * @publicApi\n *\n * @deprecated The HammerJS integration is deprecated. Replace it by your own implementation.\n */\n@Injectable()\nexport class HammerGestureConfig {\n /**\n * A set of supported event names for gestures to be used in Angular.\n * Angular supports all built-in recognizers, as listed in\n * [HammerJS documentation](https://hammerjs.github.io/).\n */\n events: string[] = [];\n\n /**\n * Maps gesture event names to a set of configuration options\n * that specify overrides to the default values for specific properties.\n *\n * The key is a supported event name to be configured,\n * and the options object contains a set of properties, with override values\n * to be applied to the named recognizer event.\n * For example, to disable recognition of the rotate event, specify\n * `{\"rotate\": {\"enable\": false}}`.\n *\n * Properties that are not present take the HammerJS default values.\n * For information about which properties are supported for which events,\n * and their allowed and default values, see\n * [HammerJS documentation](https://hammerjs.github.io/).\n *\n */\n overrides: {[key: string]: Object} = {};\n\n /**\n * Properties whose default values can be overridden for a given event.\n * Different sets of properties apply to different events.\n * For information about which properties are supported for which events,\n * and their allowed and default values, see\n * [HammerJS documentation](https://hammerjs.github.io/).\n */\n options?: {\n cssProps?: any;\n domEvents?: boolean;\n enable?: boolean | ((manager: any) => boolean);\n preset?: any[];\n touchAction?: string;\n recognizers?: any[];\n inputClass?: any;\n inputTarget?: EventTarget;\n };\n\n /**\n * Creates a [HammerJS Manager](https://hammerjs.github.io/api/#hammermanager)\n * and attaches it to a given HTML element.\n * @param element The element that will recognize gestures.\n * @returns A HammerJS event-manager object.\n */\n buildHammer(element: HTMLElement): HammerInstance {\n const mc = new Hammer!(element, this.options);\n\n mc.get('pinch').set({enable: true});\n mc.get('rotate').set({enable: true});\n\n for (const eventName in this.overrides) {\n mc.get(eventName).set(this.overrides[eventName]);\n }\n\n return mc;\n }\n}\n\n/**\n * Event plugin that adds Hammer support to an application.\n *\n * @ngModule HammerModule\n */\n@Injectable()\nexport class HammerGesturesPlugin extends EventManagerPlugin {\n private _loaderPromise: Promise<void> | null = null;\n\n constructor(\n @Inject(DOCUMENT) doc: any,\n @Inject(HAMMER_GESTURE_CONFIG) private _config: HammerGestureConfig,\n private _injector: Injector,\n @Optional() @Inject(HAMMER_LOADER) private loader?: HammerLoader | null,\n ) {\n super(doc);\n }\n\n override supports(eventName: string): boolean {\n if (!EVENT_NAMES.hasOwnProperty(eventName.toLowerCase()) && !this.isCustomEvent(eventName)) {\n return false;\n }\n\n if (!(window as any).Hammer && !this.loader) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n // Get a `Console` through an injector to tree-shake the\n // class when it is unused in production.\n const _console = this._injector.get(Console);\n _console.warn(\n `The \"${eventName}\" event cannot be bound because Hammer.JS is not ` +\n `loaded and no custom loader has been specified.`,\n );\n }\n return false;\n }\n\n return true;\n }\n\n override addEventListener(element: HTMLElement, eventName: string, handler: Function): Function {\n const zone = this.manager.getZone();\n eventName = eventName.toLowerCase();\n\n // If Hammer is not present but a loader is specified, we defer adding the event listener\n // until Hammer is loaded.\n if (!(window as any).Hammer && this.loader) {\n this._loaderPromise = this._loaderPromise || zone.runOutsideAngular(() => this.loader!());\n // This `addEventListener` method returns a function to remove the added listener.\n // Until Hammer is loaded, the returned function needs to *cancel* the registration rather\n // than remove anything.\n let cancelRegistration = false;\n let deregister: Function = () => {\n cancelRegistration = true;\n };\n\n zone.runOutsideAngular(() =>\n this._loaderPromise!.then(() => {\n // If Hammer isn't actually loaded when the custom loader resolves, give up.\n if (!(window as any).Hammer) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const _console = this._injector.get(Console);\n _console.warn(`The custom HAMMER_LOADER completed, but Hammer.JS is not present.`);\n }\n deregister = () => {};\n return;\n }\n\n if (!cancelRegistration) {\n // Now that Hammer is loaded and the listener is being loaded for real,\n // the deregistration function changes from canceling registration to\n // removal.\n deregister = this.addEventListener(element, eventName, handler);\n }\n }).catch(() => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const _console = this._injector.get(Console);\n _console.warn(\n `The \"${eventName}\" event cannot be bound because the custom ` +\n `Hammer.JS loader failed.`,\n );\n }\n deregister = () => {};\n }),\n );\n\n // Return a function that *executes* `deregister` (and not `deregister` itself) so that we\n // can change the behavior of `deregister` once the listener is added. Using a closure in\n // this way allows us to avoid any additional data structures to track listener removal.\n return () => {\n deregister();\n };\n }\n\n return zone.runOutsideAngular(() => {\n // Creating the manager bind events, must be done outside of angular\n const mc = this._config.buildHammer(element);\n const callback = function (eventObj: HammerInput) {\n zone.runGuarded(function () {\n handler(eventObj);\n });\n };\n mc.on(eventName, callback);\n return () => {\n mc.off(eventName, callback);\n // destroy mc to prevent memory leak\n if (typeof mc.destroy === 'function') {\n mc.destroy();\n }\n };\n });\n }\n\n isCustomEvent(eventName: string): boolean {\n return this._config.events.indexOf(eventName) > -1;\n }\n}\n\n/**\n * Adds support for HammerJS.\n *\n * Import this module at the root of your application so that Angular can work with\n * HammerJS to detect gesture events.\n *\n * Note that applications still need to include the HammerJS script itself. This module\n * simply sets up the coordination layer between HammerJS and Angular's `EventManager`.\n *\n * @publicApi\n *\n * @deprecated The hammer integration is deprecated. Replace it by your own implementation.\n */\n@NgModule({\n providers: [\n {\n provide: EVENT_MANAGER_PLUGINS,\n useClass: HammerGesturesPlugin,\n multi: true,\n deps: [DOCUMENT, HAMMER_GESTURE_CONFIG, Injector, [new Optional(), HAMMER_LOADER]],\n },\n {provide: HAMMER_GESTURE_CONFIG, useClass: HammerGestureConfig},\n ],\n})\nexport class HammerModule {}\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 forwardRef,\n Inject,\n Injectable,\n Sanitizer,\n SecurityContext,\n ɵ_sanitizeHtml as _sanitizeHtml,\n ɵ_sanitizeUrl as _sanitizeUrl,\n ɵallowSanitizationBypassAndThrow as allowSanitizationBypassOrThrow,\n ɵbypassSanitizationTrustHtml as bypassSanitizationTrustHtml,\n ɵbypassSanitizationTrustResourceUrl as bypassSanitizationTrustResourceUrl,\n ɵbypassSanitizationTrustScript as bypassSanitizationTrustScript,\n ɵbypassSanitizationTrustStyle as bypassSanitizationTrustStyle,\n ɵbypassSanitizationTrustUrl as bypassSanitizationTrustUrl,\n ɵBypassType as BypassType,\n ɵRuntimeError as RuntimeError,\n ɵunwrapSafeValue as unwrapSafeValue,\n ɵXSS_SECURITY_URL as XSS_SECURITY_URL,\n} from '@angular/core';\n\nimport {RuntimeErrorCode} from '../errors';\n\nexport {SecurityContext};\n\n/**\n * Marker interface for a value that's safe to use in a particular context.\n *\n * @publicApi\n */\nexport interface SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as HTML.\n *\n * @publicApi\n */\nexport interface SafeHtml extends SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as style (CSS).\n *\n * @publicApi\n */\nexport interface SafeStyle extends SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as JavaScript.\n *\n * @publicApi\n */\nexport interface SafeScript extends SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as a URL linking to a document.\n *\n * @publicApi\n */\nexport interface SafeUrl extends SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as a URL to load executable code from.\n *\n * @publicApi\n */\nexport interface SafeResourceUrl extends SafeValue {}\n\n/**\n * DomSanitizer helps preventing Cross Site Scripting Security bugs (XSS) by sanitizing\n * values to be safe to use in the different DOM contexts.\n *\n * For example, when binding a URL in an `<a [href]=\"someValue\">` hyperlink, `someValue` will be\n * sanitized so that an attacker cannot inject e.g. a `javascript:` URL that would execute code on\n * the website.\n *\n * In specific situations, it might be necessary to disable sanitization, for example if the\n * application genuinely needs to produce a `javascript:` style link with a dynamic value in it.\n * Users can bypass security by constructing a value with one of the `bypassSecurityTrust...`\n * methods, and then binding to that value from the template.\n *\n * These situations should be very rare, and extraordinary care must be taken to avoid creating a\n * Cross Site Scripting (XSS) security bug!\n *\n * When using `bypassSecurityTrust...`, make sure to call the method as early as possible and as\n * close as possible to the source of the value, to make it easy to verify no security bug is\n * created by its use.\n *\n * It is not required (and not recommended) to bypass security if the value is safe, e.g. a URL that\n * does not start with a suspicious protocol, or an HTML snippet that does not contain dangerous\n * code. The sanitizer leaves safe values intact.\n *\n * @security Calling any of the `bypassSecurityTrust...` APIs disables Angular's built-in\n * sanitization for the value passed in. Carefully check and audit all values and code paths going\n * into this call. Make sure any user data is appropriately escaped for this security context.\n * For more detail, see the [Security Guide](https://g.co/ng/security).\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root', useExisting: forwardRef(() => DomSanitizerImpl)})\nexport abstract class DomSanitizer implements Sanitizer {\n /**\n * Gets a safe value from either a known safe value or a value with unknown safety.\n *\n * If the given value is already a `SafeValue`, this method returns the unwrapped value.\n * If the security context is HTML and the given value is a plain string, this method\n * sanitizes the string, removing any potentially unsafe content.\n * For any other security context, this method throws an error if provided\n * with a plain string.\n */\n abstract sanitize(context: SecurityContext, value: SafeValue | string | null): string | null;\n\n /**\n * Bypass security and trust the given value to be safe HTML. Only use this when the bound HTML\n * is unsafe (e.g. contains `<script>` tags) and the code should be executed. The sanitizer will\n * leave safe HTML intact, so in most situations this method should not be used.\n *\n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n */\n abstract bypassSecurityTrustHtml(value: string): SafeHtml;\n\n /**\n * Bypass security and trust the given value to be safe style value (CSS).\n *\n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n */\n abstract bypassSecurityTrustStyle(value: string): SafeStyle;\n\n /**\n * Bypass security and trust the given value to be safe JavaScript.\n *\n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n */\n abstract bypassSecurityTrustScript(value: string): SafeScript;\n\n /**\n * Bypass security and trust the given value to be a safe style URL, i.e. a value that can be used\n * in hyperlinks or `<img src>`.\n *\n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n */\n abstract bypassSecurityTrustUrl(value: string): SafeUrl;\n\n /**\n * Bypass security and trust the given value to be a safe resource URL, i.e. a location that may\n * be used to load executable code from, like `<script src>`, or `<iframe src>`.\n *\n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n */\n abstract bypassSecurityTrustResourceUrl(value: string): SafeResourceUrl;\n}\n\n@Injectable({providedIn: 'root'})\nexport class DomSanitizerImpl extends DomSanitizer {\n constructor(@Inject(DOCUMENT) private _doc: any) {\n super();\n }\n\n override sanitize(ctx: SecurityContext, value: SafeValue | string | null): string | null {\n if (value == null) return null;\n switch (ctx) {\n case SecurityContext.NONE:\n return value as string;\n case SecurityContext.HTML:\n if (allowSanitizationBypassOrThrow(value, BypassType.Html)) {\n return unwrapSafeValue(value);\n }\n return _sanitizeHtml(this._doc, String(value)).toString();\n case SecurityContext.STYLE:\n if (allowSanitizationBypassOrThrow(value, BypassType.Style)) {\n return unwrapSafeValue(value);\n }\n return value as string;\n case SecurityContext.SCRIPT:\n if (allowSanitizationBypassOrThrow(value, BypassType.Script)) {\n return unwrapSafeValue(value);\n }\n throw new RuntimeError(\n RuntimeErrorCode.SANITIZATION_UNSAFE_SCRIPT,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n 'unsafe value used in a script context',\n );\n case SecurityContext.URL:\n if (allowSanitizationBypassOrThrow(value, BypassType.Url)) {\n return unwrapSafeValue(value);\n }\n return _sanitizeUrl(String(value));\n case SecurityContext.RESOURCE_URL:\n if (allowSanitizationBypassOrThrow(value, BypassType.ResourceUrl)) {\n return unwrapSafeValue(value);\n }\n throw new RuntimeError(\n RuntimeErrorCode.SANITIZATION_UNSAFE_RESOURCE_URL,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n `unsafe value used in a resource URL context (see ${XSS_SECURITY_URL})`,\n );\n default:\n throw new RuntimeError(\n RuntimeErrorCode.SANITIZATION_UNEXPECTED_CTX,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n `Unexpected SecurityContext ${ctx} (see ${XSS_SECURITY_URL})`,\n );\n }\n }\n\n override bypassSecurityTrustHtml(value: string): SafeHtml {\n return bypassSanitizationTrustHtml(value);\n }\n override bypassSecurityTrustStyle(value: string): SafeStyle {\n return bypassSanitizationTrustStyle(value);\n }\n override bypassSecurityTrustScript(value: string): SafeScript {\n return bypassSanitizationTrustScript(value);\n }\n override bypassSecurityTrustUrl(value: string): SafeUrl {\n return bypassSanitizationTrustUrl(value);\n }\n override bypassSecurityTrustResourceUrl(value: string): SafeResourceUrl {\n return bypassSanitizationTrustResourceUrl(value);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {HttpTransferCacheOptions, ɵwithHttpTransferCache} from '@angular/common/http';\nimport {\n ENVIRONMENT_INITIALIZER,\n EnvironmentProviders,\n inject,\n makeEnvironmentProviders,\n Provider,\n ɵConsole as Console,\n ɵRuntimeError as RuntimeError,\n ɵformatRuntimeError as formatRuntimeError,\n ɵwithDomHydration as withDomHydration,\n ɵwithEventReplay,\n ɵwithI18nSupport,\n ɵZONELESS_ENABLED as ZONELESS_ENABLED,\n ɵwithIncrementalHydration,\n ɵIS_ENABLED_BLOCKING_INITIAL_NAVIGATION as IS_ENABLED_BLOCKING_INITIAL_NAVIGATION,\n provideStabilityDebugging,\n} from '@angular/core';\nimport {RuntimeErrorCode} from './errors';\n\n/**\n * The list of features as an enum to uniquely type each `HydrationFeature`.\n * @see {@link HydrationFeature}\n *\n * @publicApi\n */\nexport enum HydrationFeatureKind {\n NoHttpTransferCache,\n HttpTransferCacheOptions,\n I18nSupport,\n EventReplay,\n IncrementalHydration,\n}\n\n/**\n * Helper type to represent a Hydration feature.\n *\n * @publicApi\n */\nexport interface HydrationFeature<FeatureKind extends HydrationFeatureKind> {\n ɵkind: FeatureKind;\n ɵproviders: Provider[];\n}\n\n/**\n * Helper function to create an object that represents a Hydration feature.\n */\nfunction hydrationFeature<FeatureKind extends HydrationFeatureKind>(\n ɵkind: FeatureKind,\n ɵproviders: Provider[] = [],\n ɵoptions: unknown = {},\n): HydrationFeature<FeatureKind> {\n return {ɵkind, ɵproviders};\n}\n\n/**\n * Disables HTTP transfer cache. Effectively causes HTTP requests to be performed twice: once on the\n * server and other one on the browser.\n *\n * @see [Disabling Caching](guide/ssr#disabling-caching)\n *\n * @publicApi\n */\nexport function withNoHttpTransferCache(): HydrationFeature<HydrationFeatureKind.NoHttpTransferCache> {\n // This feature has no providers and acts as a flag that turns off\n // HTTP transfer cache (which otherwise is turned on by default).\n return hydrationFeature(HydrationFeatureKind.NoHttpTransferCache);\n}\n\n/**\n * The function accepts an object, which allows to configure cache parameters,\n * such as which headers should be included (no headers are included by default),\n * whether POST requests should be cached or a callback function to determine if a\n * particular request should be cached.\n *\n * @see [Configuring HTTP transfer cache options](guide/ssr#caching-data-when-using-httpclient)\n *\n * @publicApi\n */\nexport function withHttpTransferCacheOptions(\n options: HttpTransferCacheOptions,\n): HydrationFeature<HydrationFeatureKind.HttpTransferCacheOptions> {\n // This feature has no providers and acts as a flag to pass options to the HTTP transfer cache.\n return hydrationFeature(\n HydrationFeatureKind.HttpTransferCacheOptions,\n ɵwithHttpTransferCache(options),\n );\n}\n\n/**\n * Enables support for hydrating i18n blocks.\n *\n * @publicApi 20.0\n */\nexport function withI18nSupport(): HydrationFeature<HydrationFeatureKind.I18nSupport> {\n return hydrationFeature(HydrationFeatureKind.I18nSupport, ɵwithI18nSupport());\n}\n\n/**\n * Enables support for replaying user events (e.g. `click`s) that happened on a page\n * before hydration logic has completed. Once an application is hydrated, all captured\n * events are replayed and relevant event listeners are executed.\n *\n * @usageNotes\n *\n * Basic example of how you can enable event replay in your application when\n * `bootstrapApplication` function is used:\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideClientHydration(withEventReplay())]\n * });\n * ```\n * @publicApi\n * @see {@link provideClientHydration}\n */\nexport function withEventReplay(): HydrationFeature<HydrationFeatureKind.EventReplay> {\n return hydrationFeature(HydrationFeatureKind.EventReplay, ɵwithEventReplay());\n}\n\n/**\n * Enables support for incremental hydration using the `hydrate` trigger syntax.\n *\n * @usageNotes\n *\n * Basic example of how you can enable incremental hydration in your application when\n * the `bootstrapApplication` function is used:\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideClientHydration(withIncrementalHydration())]\n * });\n * ```\n * @publicApi 20.0\n * @see {@link provideClientHydration}\n */\nexport function withIncrementalHydration(): HydrationFeature<HydrationFeatureKind.IncrementalHydration> {\n return hydrationFeature(HydrationFeatureKind.IncrementalHydration, ɵwithIncrementalHydration());\n}\n\n/**\n * Returns an `ENVIRONMENT_INITIALIZER` token setup with a function\n * that verifies whether enabledBlocking initial navigation is used in an application\n * and logs a warning in a console if it's not compatible with hydration.\n */\nfunction provideEnabledBlockingInitialNavigationDetector(): Provider[] {\n return [\n {\n provide: ENVIRONMENT_INITIALIZER,\n useValue: () => {\n const isEnabledBlockingInitialNavigation = inject(IS_ENABLED_BLOCKING_INITIAL_NAVIGATION, {\n optional: true,\n });\n\n if (isEnabledBlockingInitialNavigation) {\n const console = inject(Console);\n const message = formatRuntimeError(\n RuntimeErrorCode.HYDRATION_CONFLICTING_FEATURES,\n 'Configuration error: found both hydration and enabledBlocking initial navigation ' +\n 'in the same application, which is a contradiction.',\n );\n console.warn(message);\n }\n },\n multi: true,\n },\n ];\n}\n\n/**\n * Sets up providers necessary to enable hydration functionality for the application.\n *\n * By default, the function enables the recommended set of features for the optimal\n * performance for most of the applications. It includes the following features:\n *\n * * Reconciling DOM hydration. Learn more about it [here](guide/hydration).\n * * [`HttpClient`](api/common/http/HttpClient) response caching while running on the server and\n * transferring this cache to the client to avoid extra HTTP requests. Learn more about data caching\n * [here](guide/ssr#caching-data-when-using-httpclient).\n *\n * These functions allow you to disable some of the default features or enable new ones:\n *\n * * {@link withNoHttpTransferCache} to disable HTTP transfer cache\n * * {@link withHttpTransferCacheOptions} to configure some HTTP transfer cache options\n * * {@link withI18nSupport} to enable hydration support for i18n blocks\n * * {@link withEventReplay} to enable support for replaying user events\n *\n * @usageNotes\n *\n * Basic example of how you can enable hydration in your application when\n * `bootstrapApplication` function is used:\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideClientHydration()]\n * });\n * ```\n *\n * Alternatively if you are using NgModules, you would add `provideClientHydration`\n * to your root app module's provider list.\n * ```ts\n * @NgModule({\n * declarations: [RootCmp],\n * bootstrap: [RootCmp],\n * providers: [provideClientHydration()],\n * })\n * export class AppModule {}\n * ```\n *\n * @see {@link withNoHttpTransferCache}\n * @see {@link withHttpTransferCacheOptions}\n * @see {@link withI18nSupport}\n * @see {@link withEventReplay}\n *\n * @param features Optional features to configure additional hydration behaviors.\n * @returns A set of providers to enable hydration.\n *\n * @publicApi 17.0\n */\nexport function provideClientHydration(\n ...features: HydrationFeature<HydrationFeatureKind>[]\n): EnvironmentProviders {\n const providers: Provider[] = [];\n const featuresKind = new Set<HydrationFeatureKind>();\n\n for (const {ɵproviders, ɵkind} of features) {\n featuresKind.add(ɵkind);\n\n if (ɵproviders.length) {\n providers.push(ɵproviders);\n }\n }\n\n const hasHttpTransferCacheOptions = featuresKind.has(\n HydrationFeatureKind.HttpTransferCacheOptions,\n );\n\n if (\n typeof ngDevMode !== 'undefined' &&\n ngDevMode &&\n featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) &&\n hasHttpTransferCacheOptions\n ) {\n throw new RuntimeError(\n RuntimeErrorCode.HYDRATION_CONFLICTING_FEATURES,\n 'Configuration error: found both withHttpTransferCacheOptions() and withNoHttpTransferCache() in the same call to provideClientHydration(), which is a contradiction.',\n );\n }\n\n return makeEnvironmentProviders([\n typeof ngDevMode !== 'undefined' && ngDevMode\n ? provideEnabledBlockingInitialNavigationDetector()\n : [],\n typeof ngDevMode !== 'undefined' && ngDevMode ? provideStabilityDebugging() : [],\n withDomHydration(),\n featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) || hasHttpTransferCacheOptions\n ? []\n : ɵwithHttpTransferCache({}),\n providers,\n ]);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the platform-browser package.\n */\n\nimport {Version} from '@angular/core';\n\n/**\n * @publicApi\n */\nexport const VERSION = /* @__PURE__ */ new Version('21.2.14');\n"],"names":["Meta","_doc","_dom","constructor","getDOM","addTag","tag","forceCreation","_getOrCreateElement","addTags","tags","reduce","result","push","getTag","attrSelector","querySelector","getTags","list","querySelectorAll","slice","call","updateTag","selector","_parseSelector","meta","_setMetaElementAttributes","removeTag","removeTagElement","remove","elem","filter","_containsAttributes","undefined","element","createElement","head","getElementsByTagName","appendChild","el","Object","keys","forEach","prop","setAttribute","_getMetaKeyMap","attr","name","every","key","getAttribute","META_KEYS_MAP","ɵfac","i0","ɵɵngDeclareFactory","minVersion","version","ngImport","type","DOCUMENT","target","ɵɵFactoryTarget","Injectable","ɵprov","ɵɵngDeclareInjectable","decorators","providedIn","Inject","httpEquiv","Title","getTitle","title","setTitle","newTitle","exportNgVar","value","COMPILED","ng","global","ChangeDetectionPerfRecord","msPerTick","numTicks","AngularProfiler","appRef","ref","injector","get","ApplicationRef","timeChangeDetection","config","record","profileName","console","profile","start","performance","now","tick","end","profileEnd","log","toFixed","PROFILER_GLOBAL_NAME","enableDebugTools","disableDebugTools","By","all","css","debugElement","nativeElement","elementMatches","directive","debugNode","providerTokens","indexOf","n","isElementNode","matches","msMatchesSelector","webkitMatchesSelector","EVENT_NAMES","HAMMER_GESTURE_CONFIG","InjectionToken","ngDevMode","HAMMER_LOADER","HammerGestureConfig","events","overrides","options","buildHammer","mc","Hammer","set","enable","eventName","deps","HammerGesturesPlugin","EventManagerPlugin","_config","_injector","loader","_loaderPromise","doc","supports","hasOwnProperty","toLowerCase","isCustomEvent","window","_console","Console","warn","addEventListener","handler","zone","manager","getZone","runOutsideAngular","cancelRegistration","deregister","then","catch","callback","eventObj","runGuarded","on","off","destroy","token","optional","Optional","HammerModule","NgModule","ɵinj","ɵɵngDeclareInjector","providers","provide","EVENT_MANAGER_PLUGINS","useClass","multi","Injector","args","DomSanitizer","useExisting","forwardRef","DomSanitizerImpl","sanitize","ctx","SecurityContext","NONE","HTML","allowSanitizationBypassOrThrow","unwrapSafeValue","_sanitizeHtml","String","toString","STYLE","SCRIPT","RuntimeError","URL","_sanitizeUrl","RESOURCE_URL","XSS_SECURITY_URL","bypassSecurityTrustHtml","bypassSanitizationTrustHtml","bypassSecurityTrustStyle","bypassSanitizationTrustStyle","bypassSecurityTrustScript","bypassSanitizationTrustScript","bypassSecurityTrustUrl","bypassSanitizationTrustUrl","bypassSecurityTrustResourceUrl","bypassSanitizationTrustResourceUrl","HydrationFeatureKind","hydrationFeature","ɵkind","ɵproviders","ɵoptions","withNoHttpTransferCache","NoHttpTransferCache","withHttpTransferCacheOptions","HttpTransferCacheOptions","ɵwithHttpTransferCache","withI18nSupport","I18nSupport","ɵwithI18nSupport","withEventReplay","EventReplay","ɵwithEventReplay","withIncrementalHydration","IncrementalHydration","ɵwithIncrementalHydration","provideEnabledBlockingInitialNavigationDetector","ENVIRONMENT_INITIALIZER","useValue","isEnabledBlockingInitialNavigation","inject","IS_ENABLED_BLOCKING_INITIAL_NAVIGATION","message","formatRuntimeError","provideClientHydration","features","featuresKind","Set","add","length","hasHttpTransferCacheOptions","has","makeEnvironmentProviders","provideStabilityDebugging","withDomHydration","VERSION","Version"],"mappings":"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"}
1
+ {"version":3,"file":"platform-browser.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/browser/meta.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/browser/title.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/dom/util.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/browser/tools/common_tools.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/browser/tools/tools.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/dom/debug/by.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/dom/events/hammer_gestures.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/security/dom_sanitization_service.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/hydration.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/version.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 {DOCUMENT, ɵDomAdapter as DomAdapter, ɵgetDOM as getDOM} from '@angular/common';\nimport {Inject, Injectable} from '@angular/core';\n\n/**\n * Represents the attributes of an HTML `<meta>` element. The element itself is\n * represented by the internal `HTMLMetaElement`.\n *\n * @see [HTML meta tag](https://developer.mozilla.org/docs/Web/HTML/Element/meta)\n * @see {@link Meta}\n *\n * @publicApi\n */\nexport type MetaDefinition = {\n charset?: string;\n content?: string;\n httpEquiv?: string;\n id?: string;\n itemprop?: string;\n name?: string;\n property?: string;\n scheme?: string;\n url?: string;\n} & {\n // TODO(IgorMinar): this type looks wrong\n [prop: string]: string;\n};\n\n/**\n * A service for managing HTML `<meta>` tags.\n *\n * Properties of the `MetaDefinition` object match the attributes of the\n * HTML `<meta>` tag. These tags define document metadata that is important for\n * things like configuring a Content Security Policy, defining browser compatibility\n * and security settings, setting HTTP Headers, defining rich content for social sharing,\n * and Search Engine Optimization (SEO).\n *\n * To identify specific `<meta>` tags in a document, use an attribute selection\n * string in the format `\"tag_attribute='value string'\"`.\n * For example, an `attrSelector` value of `\"name='description'\"` matches a tag\n * whose `name` attribute has the value `\"description\"`.\n * Selectors are used with the `querySelector()` Document method,\n * in the format `meta[{attrSelector}]`.\n *\n * @see [HTML meta tag](https://developer.mozilla.org/docs/Web/HTML/Element/meta)\n * @see [Document.querySelector()](https://developer.mozilla.org/docs/Web/API/Document/querySelector)\n *\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class Meta {\n private _dom: DomAdapter;\n constructor(@Inject(DOCUMENT) private _doc: any) {\n this._dom = getDOM();\n }\n /**\n * Retrieves or creates a specific `<meta>` tag element in the current HTML document.\n * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute\n * values in the provided tag definition, and verifies that all other attribute values are equal.\n * If an existing element is found, it is returned and is not modified in any way.\n * @param tag The definition of a `<meta>` element to match or create.\n * @param forceCreation True to create a new element without checking whether one already exists.\n * @returns The existing element with the same attributes and values if found,\n * the new element if no match is found, or `null` if the tag parameter is not defined.\n */\n addTag(tag: MetaDefinition, forceCreation: boolean = false): HTMLMetaElement | null {\n if (!tag) return null;\n return this._getOrCreateElement(tag, forceCreation);\n }\n\n /**\n * Retrieves or creates a set of `<meta>` tag elements in the current HTML document.\n * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute\n * values in the provided tag definition, and verifies that all other attribute values are equal.\n * @param tags An array of tag definitions to match or create.\n * @param forceCreation True to create new elements without checking whether they already exist.\n * @returns The matching elements if found, or the new elements.\n */\n addTags(tags: MetaDefinition[], forceCreation: boolean = false): HTMLMetaElement[] {\n if (!tags) return [];\n return tags.reduce((result: HTMLMetaElement[], tag: MetaDefinition) => {\n if (tag) {\n result.push(this._getOrCreateElement(tag, forceCreation));\n }\n return result;\n }, []);\n }\n\n /**\n * Retrieves a `<meta>` tag element in the current HTML document.\n * @param attrSelector The tag attribute and value to match against, in the format\n * `\"tag_attribute='value string'\"`.\n * @returns The matching element, if any.\n */\n getTag(attrSelector: string): HTMLMetaElement | null {\n if (!attrSelector) return null;\n const meta = this._doc.querySelector(`meta[${attrSelector}]`);\n return meta?.nodeName.toLowerCase() === 'meta' ? meta : null;\n }\n\n /**\n * Retrieves a set of `<meta>` tag elements in the current HTML document.\n * @param attrSelector The tag attribute and value to match against, in the format\n * `\"tag_attribute='value string'\"`.\n * @returns The matching elements, if any.\n */\n getTags(attrSelector: string): HTMLMetaElement[] {\n if (!attrSelector) return [];\n const list /*NodeList*/ = this._doc.querySelectorAll(`meta[${attrSelector}]`);\n return list\n ? (([].slice.call(list) as HTMLElement[]).filter(\n (elem) => elem.nodeName.toLowerCase() === 'meta',\n ) as HTMLMetaElement[])\n : [];\n }\n\n /**\n * Modifies an existing `<meta>` tag element in the current HTML document.\n * @param tag The tag description with which to replace the existing tag content.\n * @param selector A tag attribute and value to match against, to identify\n * an existing tag. A string in the format `\"tag_attribute=`value string`\"`.\n * If not supplied, matches a tag with the same `name` or `property` attribute value as the\n * replacement tag.\n * @return The modified element.\n */\n updateTag(tag: MetaDefinition, selector?: string): HTMLMetaElement | null {\n if (!tag) return null;\n selector = selector || this._parseSelector(tag);\n const meta: HTMLMetaElement = this.getTag(selector)!;\n if (meta) {\n return this._setMetaElementAttributes(tag, meta);\n }\n return this._getOrCreateElement(tag, true);\n }\n\n /**\n * Removes an existing `<meta>` tag element from the current HTML document.\n * @param attrSelector A tag attribute and value to match against, to identify\n * an existing tag. A string in the format `\"tag_attribute=`value string`\"`.\n */\n removeTag(attrSelector: string): void {\n this.removeTagElement(this.getTag(attrSelector)!);\n }\n\n /**\n * Removes an existing `<meta>` tag element from the current HTML document.\n * @param meta The tag definition to match against to identify an existing tag.\n */\n removeTagElement(meta: HTMLMetaElement): void {\n if (meta) {\n this._dom.remove(meta);\n }\n }\n\n private _getOrCreateElement(\n meta: MetaDefinition,\n forceCreation: boolean = false,\n ): HTMLMetaElement {\n if (!forceCreation) {\n const selector: string = this._parseSelector(meta);\n // It's allowed to have multiple elements with the same name so it's not enough to\n // just check that element with the same name already present on the page. We also need to\n // check if element has tag attributes\n const elem = this.getTags(selector).filter((elem) => this._containsAttributes(meta, elem))[0];\n if (elem !== undefined) return elem;\n }\n const element: HTMLMetaElement = this._dom.createElement('meta') as HTMLMetaElement;\n this._setMetaElementAttributes(meta, element);\n const head = this._doc.getElementsByTagName('head')[0];\n head.appendChild(element);\n return element;\n }\n\n private _setMetaElementAttributes(tag: MetaDefinition, el: HTMLMetaElement): HTMLMetaElement {\n Object.keys(tag).forEach((prop: string) =>\n el.setAttribute(this._getMetaKeyMap(prop), tag[prop]),\n );\n return el;\n }\n\n private _parseSelector(tag: MetaDefinition): string {\n const attr: string = tag.name ? 'name' : 'property';\n return `${attr}=${this._escapeSelectorValue(String(tag[attr]))}`;\n }\n\n private _escapeSelectorValue(value: string): string {\n // Escape backslashes and double quotes to prevent CSS selector injection.\n // This securely confines the value inside an attribute selector.\n return `\"${value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"`;\n }\n\n private _containsAttributes(tag: MetaDefinition, elem: HTMLMetaElement): boolean {\n return Object.keys(tag).every(\n (key: string) => elem.getAttribute(this._getMetaKeyMap(key)) === tag[key],\n );\n }\n\n private _getMetaKeyMap(prop: string): string {\n return META_KEYS_MAP[prop] || prop;\n }\n}\n\n/**\n * Mapping for MetaDefinition properties with their correct meta attribute names\n */\nconst META_KEYS_MAP: {[prop: string]: string} = {\n httpEquiv: 'http-equiv',\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 {Inject, Injectable} from '@angular/core';\n\n/**\n * A service that can be used to get and set the title of a current HTML document.\n *\n * Since an Angular application can't be bootstrapped on the entire HTML document (`<html>` tag)\n * it is not possible to bind to the `text` property of the `HTMLTitleElement` elements\n * (representing the `<title>` tag). Instead, this service can be used to set and get the current\n * title value.\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class Title {\n constructor(@Inject(DOCUMENT) private _doc: any) {}\n /**\n * Get the title of the current HTML document.\n */\n getTitle(): string {\n return this._doc.title;\n }\n\n /**\n * Set the title of the current HTML document.\n * @param newTitle\n */\n setTitle(newTitle: string) {\n this._doc.title = newTitle || '';\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/// <reference path=\"../../../goog.d.ts\" />\n\nimport {ɵglobal as global} from '@angular/core';\n\n/**\n * Exports the value under a given `name` in the global property `ng`. For example `ng.probe` if\n * `name` is `'probe'`.\n * @param name Name under which it will be exported. Keep in mind this will be a property of the\n * global `ng` object.\n * @param value The value to export.\n */\nexport function exportNgVar(name: string, value: any): void {\n if (typeof COMPILED === 'undefined' || !COMPILED) {\n // Note: we can't export `ng` when using closure enhanced optimization as:\n // - closure declares globals itself for minified names, which sometimes clobber our `ng` global\n // - we can't declare a closure extern as the namespace `ng` is already used within Google\n // for typings for angularJS (via `goog.provide('ng....')`).\n const ng = (global['ng'] = (global['ng'] as {[key: string]: any} | undefined) || {});\n ng[name] = value;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ApplicationRef, ComponentRef} from '@angular/core';\n\nexport class ChangeDetectionPerfRecord {\n constructor(\n public msPerTick: number,\n public numTicks: number,\n ) {}\n}\n\n/**\n * Entry point for all Angular profiling-related debug tools. This object\n * corresponds to the `ng.profiler` in the dev console.\n */\nexport class AngularProfiler {\n appRef: ApplicationRef;\n\n constructor(ref: ComponentRef<any>) {\n this.appRef = ref.injector.get(ApplicationRef);\n }\n\n // tslint:disable:no-console\n /**\n * Exercises change detection in a loop and then prints the average amount of\n * time in milliseconds how long a single round of change detection takes for\n * the current state of the UI. It runs a minimum of 5 rounds for a minimum\n * of 500 milliseconds.\n *\n * Optionally, a user may pass a `config` parameter containing a map of\n * options. Supported options are:\n *\n * `record` (boolean) - causes the profiler to record a CPU profile while\n * it exercises the change detector. Example:\n *\n * ```ts\n * ng.profiler.timeChangeDetection({record: true})\n * ```\n */\n timeChangeDetection(config: any): ChangeDetectionPerfRecord {\n const record = config && config['record'];\n const profileName = 'Change Detection';\n // Profiler is not available in Android browsers without dev tools opened\n if (record && 'profile' in console && typeof console.profile === 'function') {\n console.profile(profileName);\n }\n const start = performance.now();\n let numTicks = 0;\n while (numTicks < 5 || performance.now() - start < 500) {\n this.appRef.tick();\n numTicks++;\n }\n const end = performance.now();\n if (record && 'profileEnd' in console && typeof console.profileEnd === 'function') {\n console.profileEnd(profileName);\n }\n const msPerTick = (end - start) / numTicks;\n console.log(`ran ${numTicks} change detection cycles`);\n console.log(`${msPerTick.toFixed(2)} ms per check`);\n\n return new ChangeDetectionPerfRecord(msPerTick, numTicks);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ComponentRef} from '@angular/core';\n\nimport {exportNgVar} from '../../dom/util';\n\nimport {AngularProfiler} from './common_tools';\n\nconst PROFILER_GLOBAL_NAME = 'profiler';\n\n/**\n * Enabled Angular debug tools that are accessible via your browser's\n * developer console.\n *\n * Usage:\n *\n * 1. Open developer console (e.g. in Chrome Ctrl + Shift + j)\n * 1. Type `ng.` (usually the console will show auto-complete suggestion)\n * 1. Try the change detection profiler `ng.profiler.timeChangeDetection()`\n * then hit Enter.\n *\n * @publicApi\n */\nexport function enableDebugTools<T>(ref: ComponentRef<T>): ComponentRef<T> {\n exportNgVar(PROFILER_GLOBAL_NAME, new AngularProfiler(ref));\n return ref;\n}\n\n/**\n * Disables Angular tools.\n *\n * @publicApi\n */\nexport function disableDebugTools(): void {\n exportNgVar(PROFILER_GLOBAL_NAME, null);\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 {ɵgetDOM as getDOM} from '@angular/common';\nimport {DebugElement, DebugNode, Predicate, Type} from '@angular/core';\n\n/**\n * Predicates for use with {@link DebugElement}'s query functions.\n *\n * @publicApi\n */\nexport class By {\n /**\n * Match all nodes.\n *\n * @usageNotes\n * ### Example\n *\n * {@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}\n */\n static all(): Predicate<DebugNode> {\n return () => true;\n }\n\n /**\n * Match elements by the given CSS selector.\n *\n * @usageNotes\n * ### Example\n *\n * {@example platform-browser/dom/debug/ts/by/by.ts region='by_css'}\n */\n static css(selector: string): Predicate<DebugElement> {\n return (debugElement) => {\n return debugElement.nativeElement != null\n ? elementMatches(debugElement.nativeElement, selector)\n : false;\n };\n }\n\n /**\n * Match nodes that have the given directive present.\n *\n * @usageNotes\n * ### Example\n *\n * {@example platform-browser/dom/debug/ts/by/by.ts region='by_directive'}\n */\n static directive(type: Type<any>): Predicate<DebugNode> {\n return (debugNode) => debugNode.providerTokens!.indexOf(type) !== -1;\n }\n}\n\nfunction elementMatches(n: any, selector: string): boolean {\n if (getDOM().isElementNode(n)) {\n return (\n (n.matches && n.matches(selector)) ||\n (n.msMatchesSelector && n.msMatchesSelector(selector)) ||\n (n.webkitMatchesSelector && n.webkitMatchesSelector(selector))\n );\n }\n\n return false;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/// <reference types=\"hammerjs\" />\n\nimport {DOCUMENT} from '@angular/common';\nimport {\n Inject,\n Injectable,\n InjectionToken,\n Injector,\n NgModule,\n Optional,\n ɵConsole as Console,\n} from '@angular/core';\n\nimport {EVENT_MANAGER_PLUGINS} from './event_manager';\nimport {EventManagerPlugin} from './event_manager_plugin';\n\n/**\n * Supported HammerJS recognizer event names.\n */\nconst EVENT_NAMES = {\n // pan\n 'pan': true,\n 'panstart': true,\n 'panmove': true,\n 'panend': true,\n 'pancancel': true,\n 'panleft': true,\n 'panright': true,\n 'panup': true,\n 'pandown': true,\n // pinch\n 'pinch': true,\n 'pinchstart': true,\n 'pinchmove': true,\n 'pinchend': true,\n 'pinchcancel': true,\n 'pinchin': true,\n 'pinchout': true,\n // press\n 'press': true,\n 'pressup': true,\n // rotate\n 'rotate': true,\n 'rotatestart': true,\n 'rotatemove': true,\n 'rotateend': true,\n 'rotatecancel': true,\n // swipe\n 'swipe': true,\n 'swipeleft': true,\n 'swiperight': true,\n 'swipeup': true,\n 'swipedown': true,\n // tap\n 'tap': true,\n 'doubletap': true,\n};\n\n/**\n * DI token for providing [HammerJS](https://hammerjs.github.io/) support to Angular.\n * @see {@link HammerGestureConfig}\n *\n * @ngModule HammerModule\n * @publicApi\n *\n * @deprecated The HammerJS integration is deprecated. Replace it by your own implementation.\n */\nexport const HAMMER_GESTURE_CONFIG = new InjectionToken<HammerGestureConfig>(\n typeof ngDevMode === 'undefined' || ngDevMode ? 'HammerGestureConfig' : '',\n);\n\n/**\n * Function that loads HammerJS, returning a promise that is resolved once HammerJs is loaded.\n *\n * @publicApi\n *\n * @deprecated The hammerjs integration is deprecated. Replace it by your own implementation.\n */\nexport type HammerLoader = () => Promise<void>;\n\n/**\n * Injection token used to provide a HammerLoader to Angular.\n *\n * @see {@link HammerLoader}\n *\n * @publicApi\n *\n * @deprecated The HammerJS integration is deprecated. Replace it by your own implementation.\n */\nexport const HAMMER_LOADER = new InjectionToken<HammerLoader>(\n typeof ngDevMode === 'undefined' || ngDevMode ? 'HammerLoader' : '',\n);\n\nexport interface HammerInstance {\n on(eventName: string, callback?: Function): void;\n off(eventName: string, callback?: Function): void;\n destroy?(): void;\n}\n\n/**\n * An injectable [HammerJS Manager](https://hammerjs.github.io/api/#hammermanager)\n * for gesture recognition. Configures specific event recognition.\n * @publicApi\n *\n * @deprecated The HammerJS integration is deprecated. Replace it by your own implementation.\n */\n@Injectable()\nexport class HammerGestureConfig {\n /**\n * A set of supported event names for gestures to be used in Angular.\n * Angular supports all built-in recognizers, as listed in\n * [HammerJS documentation](https://hammerjs.github.io/).\n */\n events: string[] = [];\n\n /**\n * Maps gesture event names to a set of configuration options\n * that specify overrides to the default values for specific properties.\n *\n * The key is a supported event name to be configured,\n * and the options object contains a set of properties, with override values\n * to be applied to the named recognizer event.\n * For example, to disable recognition of the rotate event, specify\n * `{\"rotate\": {\"enable\": false}}`.\n *\n * Properties that are not present take the HammerJS default values.\n * For information about which properties are supported for which events,\n * and their allowed and default values, see\n * [HammerJS documentation](https://hammerjs.github.io/).\n *\n */\n overrides: {[key: string]: Object} = {};\n\n /**\n * Properties whose default values can be overridden for a given event.\n * Different sets of properties apply to different events.\n * For information about which properties are supported for which events,\n * and their allowed and default values, see\n * [HammerJS documentation](https://hammerjs.github.io/).\n */\n options?: {\n cssProps?: any;\n domEvents?: boolean;\n enable?: boolean | ((manager: any) => boolean);\n preset?: any[];\n touchAction?: string;\n recognizers?: any[];\n inputClass?: any;\n inputTarget?: EventTarget;\n };\n\n /**\n * Creates a [HammerJS Manager](https://hammerjs.github.io/api/#hammermanager)\n * and attaches it to a given HTML element.\n * @param element The element that will recognize gestures.\n * @returns A HammerJS event-manager object.\n */\n buildHammer(element: HTMLElement): HammerInstance {\n const mc = new Hammer!(element, this.options);\n\n mc.get('pinch').set({enable: true});\n mc.get('rotate').set({enable: true});\n\n for (const eventName in this.overrides) {\n mc.get(eventName).set(this.overrides[eventName]);\n }\n\n return mc;\n }\n}\n\n/**\n * Event plugin that adds Hammer support to an application.\n *\n * @ngModule HammerModule\n */\n@Injectable()\nexport class HammerGesturesPlugin extends EventManagerPlugin {\n private _loaderPromise: Promise<void> | null = null;\n\n constructor(\n @Inject(DOCUMENT) doc: any,\n @Inject(HAMMER_GESTURE_CONFIG) private _config: HammerGestureConfig,\n private _injector: Injector,\n @Optional() @Inject(HAMMER_LOADER) private loader?: HammerLoader | null,\n ) {\n super(doc);\n }\n\n override supports(eventName: string): boolean {\n if (!EVENT_NAMES.hasOwnProperty(eventName.toLowerCase()) && !this.isCustomEvent(eventName)) {\n return false;\n }\n\n if (!(window as any).Hammer && !this.loader) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n // Get a `Console` through an injector to tree-shake the\n // class when it is unused in production.\n const _console = this._injector.get(Console);\n _console.warn(\n `The \"${eventName}\" event cannot be bound because Hammer.JS is not ` +\n `loaded and no custom loader has been specified.`,\n );\n }\n return false;\n }\n\n return true;\n }\n\n override addEventListener(element: HTMLElement, eventName: string, handler: Function): Function {\n const zone = this.manager.getZone();\n eventName = eventName.toLowerCase();\n\n // If Hammer is not present but a loader is specified, we defer adding the event listener\n // until Hammer is loaded.\n if (!(window as any).Hammer && this.loader) {\n this._loaderPromise = this._loaderPromise || zone.runOutsideAngular(() => this.loader!());\n // This `addEventListener` method returns a function to remove the added listener.\n // Until Hammer is loaded, the returned function needs to *cancel* the registration rather\n // than remove anything.\n let cancelRegistration = false;\n let deregister: Function = () => {\n cancelRegistration = true;\n };\n\n zone.runOutsideAngular(() =>\n this._loaderPromise!.then(() => {\n // If Hammer isn't actually loaded when the custom loader resolves, give up.\n if (!(window as any).Hammer) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const _console = this._injector.get(Console);\n _console.warn(`The custom HAMMER_LOADER completed, but Hammer.JS is not present.`);\n }\n deregister = () => {};\n return;\n }\n\n if (!cancelRegistration) {\n // Now that Hammer is loaded and the listener is being loaded for real,\n // the deregistration function changes from canceling registration to\n // removal.\n deregister = this.addEventListener(element, eventName, handler);\n }\n }).catch(() => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const _console = this._injector.get(Console);\n _console.warn(\n `The \"${eventName}\" event cannot be bound because the custom ` +\n `Hammer.JS loader failed.`,\n );\n }\n deregister = () => {};\n }),\n );\n\n // Return a function that *executes* `deregister` (and not `deregister` itself) so that we\n // can change the behavior of `deregister` once the listener is added. Using a closure in\n // this way allows us to avoid any additional data structures to track listener removal.\n return () => {\n deregister();\n };\n }\n\n return zone.runOutsideAngular(() => {\n // Creating the manager bind events, must be done outside of angular\n const mc = this._config.buildHammer(element);\n const callback = function (eventObj: HammerInput) {\n zone.runGuarded(function () {\n handler(eventObj);\n });\n };\n mc.on(eventName, callback);\n return () => {\n mc.off(eventName, callback);\n // destroy mc to prevent memory leak\n if (typeof mc.destroy === 'function') {\n mc.destroy();\n }\n };\n });\n }\n\n isCustomEvent(eventName: string): boolean {\n return this._config.events.indexOf(eventName) > -1;\n }\n}\n\n/**\n * Adds support for HammerJS.\n *\n * Import this module at the root of your application so that Angular can work with\n * HammerJS to detect gesture events.\n *\n * Note that applications still need to include the HammerJS script itself. This module\n * simply sets up the coordination layer between HammerJS and Angular's `EventManager`.\n *\n * @publicApi\n *\n * @deprecated The hammer integration is deprecated. Replace it by your own implementation.\n */\n@NgModule({\n providers: [\n {\n provide: EVENT_MANAGER_PLUGINS,\n useClass: HammerGesturesPlugin,\n multi: true,\n deps: [DOCUMENT, HAMMER_GESTURE_CONFIG, Injector, [new Optional(), HAMMER_LOADER]],\n },\n {provide: HAMMER_GESTURE_CONFIG, useClass: HammerGestureConfig},\n ],\n})\nexport class HammerModule {}\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 forwardRef,\n Inject,\n Injectable,\n Sanitizer,\n SecurityContext,\n ɵ_sanitizeHtml as _sanitizeHtml,\n ɵ_sanitizeUrl as _sanitizeUrl,\n ɵallowSanitizationBypassAndThrow as allowSanitizationBypassOrThrow,\n ɵbypassSanitizationTrustHtml as bypassSanitizationTrustHtml,\n ɵbypassSanitizationTrustResourceUrl as bypassSanitizationTrustResourceUrl,\n ɵbypassSanitizationTrustScript as bypassSanitizationTrustScript,\n ɵbypassSanitizationTrustStyle as bypassSanitizationTrustStyle,\n ɵbypassSanitizationTrustUrl as bypassSanitizationTrustUrl,\n ɵBypassType as BypassType,\n ɵRuntimeError as RuntimeError,\n ɵunwrapSafeValue as unwrapSafeValue,\n ɵXSS_SECURITY_URL as XSS_SECURITY_URL,\n} from '@angular/core';\n\nimport {RuntimeErrorCode} from '../errors';\n\nexport {SecurityContext};\n\n/**\n * Marker interface for a value that's safe to use in a particular context.\n *\n * @publicApi\n */\nexport interface SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as HTML.\n *\n * @publicApi\n */\nexport interface SafeHtml extends SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as style (CSS).\n *\n * @publicApi\n */\nexport interface SafeStyle extends SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as JavaScript.\n *\n * @publicApi\n */\nexport interface SafeScript extends SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as a URL linking to a document.\n *\n * @publicApi\n */\nexport interface SafeUrl extends SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as a URL to load executable code from.\n *\n * @publicApi\n */\nexport interface SafeResourceUrl extends SafeValue {}\n\n/**\n * DomSanitizer helps preventing Cross Site Scripting Security bugs (XSS) by sanitizing\n * values to be safe to use in the different DOM contexts.\n *\n * For example, when binding a URL in an `<a [href]=\"someValue\">` hyperlink, `someValue` will be\n * sanitized so that an attacker cannot inject e.g. a `javascript:` URL that would execute code on\n * the website.\n *\n * In specific situations, it might be necessary to disable sanitization, for example if the\n * application genuinely needs to produce a `javascript:` style link with a dynamic value in it.\n * Users can bypass security by constructing a value with one of the `bypassSecurityTrust...`\n * methods, and then binding to that value from the template.\n *\n * These situations should be very rare, and extraordinary care must be taken to avoid creating a\n * Cross Site Scripting (XSS) security bug!\n *\n * When using `bypassSecurityTrust...`, make sure to call the method as early as possible and as\n * close as possible to the source of the value, to make it easy to verify no security bug is\n * created by its use.\n *\n * It is not required (and not recommended) to bypass security if the value is safe, e.g. a URL that\n * does not start with a suspicious protocol, or an HTML snippet that does not contain dangerous\n * code. The sanitizer leaves safe values intact.\n *\n * @security Calling any of the `bypassSecurityTrust...` APIs disables Angular's built-in\n * sanitization for the value passed in. Carefully check and audit all values and code paths going\n * into this call. Make sure any user data is appropriately escaped for this security context.\n * For more detail, see the [Security Guide](https://g.co/ng/security).\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root', useExisting: forwardRef(() => DomSanitizerImpl)})\nexport abstract class DomSanitizer implements Sanitizer {\n /**\n * Gets a safe value from either a known safe value or a value with unknown safety.\n *\n * If the given value is already a `SafeValue`, this method returns the unwrapped value.\n * If the security context is HTML and the given value is a plain string, this method\n * sanitizes the string, removing any potentially unsafe content.\n * For any other security context, this method throws an error if provided\n * with a plain string.\n */\n abstract sanitize(context: SecurityContext, value: SafeValue | string | null): string | null;\n\n /**\n * Bypass security and trust the given value to be safe HTML. Only use this when the bound HTML\n * is unsafe (e.g. contains `<script>` tags) and the code should be executed. The sanitizer will\n * leave safe HTML intact, so in most situations this method should not be used.\n *\n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n */\n abstract bypassSecurityTrustHtml(value: string): SafeHtml;\n\n /**\n * Bypass security and trust the given value to be safe style value (CSS).\n *\n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n */\n abstract bypassSecurityTrustStyle(value: string): SafeStyle;\n\n /**\n * Bypass security and trust the given value to be safe JavaScript.\n *\n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n */\n abstract bypassSecurityTrustScript(value: string): SafeScript;\n\n /**\n * Bypass security and trust the given value to be a safe style URL, i.e. a value that can be used\n * in hyperlinks or `<img src>`.\n *\n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n */\n abstract bypassSecurityTrustUrl(value: string): SafeUrl;\n\n /**\n * Bypass security and trust the given value to be a safe resource URL, i.e. a location that may\n * be used to load executable code from, like `<script src>`, or `<iframe src>`.\n *\n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n */\n abstract bypassSecurityTrustResourceUrl(value: string): SafeResourceUrl;\n}\n\n@Injectable({providedIn: 'root'})\nexport class DomSanitizerImpl extends DomSanitizer {\n constructor(@Inject(DOCUMENT) private _doc: any) {\n super();\n }\n\n override sanitize(ctx: SecurityContext, value: SafeValue | string | null): string | null {\n if (value == null) return null;\n switch (ctx) {\n case SecurityContext.NONE:\n return value as string;\n case SecurityContext.HTML:\n if (allowSanitizationBypassOrThrow(value, BypassType.Html)) {\n return unwrapSafeValue(value);\n }\n return _sanitizeHtml(this._doc, String(value)).toString();\n case SecurityContext.STYLE:\n if (allowSanitizationBypassOrThrow(value, BypassType.Style)) {\n return unwrapSafeValue(value);\n }\n return value as string;\n case SecurityContext.SCRIPT:\n if (allowSanitizationBypassOrThrow(value, BypassType.Script)) {\n return unwrapSafeValue(value);\n }\n throw new RuntimeError(\n RuntimeErrorCode.SANITIZATION_UNSAFE_SCRIPT,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n 'unsafe value used in a script context',\n );\n case SecurityContext.URL:\n if (allowSanitizationBypassOrThrow(value, BypassType.Url)) {\n return unwrapSafeValue(value);\n }\n return _sanitizeUrl(String(value));\n case SecurityContext.RESOURCE_URL:\n if (allowSanitizationBypassOrThrow(value, BypassType.ResourceUrl)) {\n return unwrapSafeValue(value);\n }\n throw new RuntimeError(\n RuntimeErrorCode.SANITIZATION_UNSAFE_RESOURCE_URL,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n `unsafe value used in a resource URL context (see ${XSS_SECURITY_URL})`,\n );\n default:\n throw new RuntimeError(\n RuntimeErrorCode.SANITIZATION_UNEXPECTED_CTX,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n `Unexpected SecurityContext ${ctx} (see ${XSS_SECURITY_URL})`,\n );\n }\n }\n\n override bypassSecurityTrustHtml(value: string): SafeHtml {\n return bypassSanitizationTrustHtml(value);\n }\n override bypassSecurityTrustStyle(value: string): SafeStyle {\n return bypassSanitizationTrustStyle(value);\n }\n override bypassSecurityTrustScript(value: string): SafeScript {\n return bypassSanitizationTrustScript(value);\n }\n override bypassSecurityTrustUrl(value: string): SafeUrl {\n return bypassSanitizationTrustUrl(value);\n }\n override bypassSecurityTrustResourceUrl(value: string): SafeResourceUrl {\n return bypassSanitizationTrustResourceUrl(value);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {HttpTransferCacheOptions, ɵwithHttpTransferCache} from '@angular/common/http';\nimport {\n ENVIRONMENT_INITIALIZER,\n EnvironmentProviders,\n inject,\n makeEnvironmentProviders,\n Provider,\n ɵConsole as Console,\n ɵRuntimeError as RuntimeError,\n ɵformatRuntimeError as formatRuntimeError,\n ɵwithDomHydration as withDomHydration,\n ɵwithEventReplay,\n ɵwithI18nSupport,\n ɵZONELESS_ENABLED as ZONELESS_ENABLED,\n ɵwithIncrementalHydration,\n ɵIS_ENABLED_BLOCKING_INITIAL_NAVIGATION as IS_ENABLED_BLOCKING_INITIAL_NAVIGATION,\n provideStabilityDebugging,\n} from '@angular/core';\nimport {RuntimeErrorCode} from './errors';\n\n/**\n * The list of features as an enum to uniquely type each `HydrationFeature`.\n * @see {@link HydrationFeature}\n *\n * @publicApi\n */\nexport enum HydrationFeatureKind {\n NoHttpTransferCache,\n HttpTransferCacheOptions,\n I18nSupport,\n EventReplay,\n IncrementalHydration,\n}\n\n/**\n * Helper type to represent a Hydration feature.\n *\n * @publicApi\n */\nexport interface HydrationFeature<FeatureKind extends HydrationFeatureKind> {\n ɵkind: FeatureKind;\n ɵproviders: Provider[];\n}\n\n/**\n * Helper function to create an object that represents a Hydration feature.\n */\nfunction hydrationFeature<FeatureKind extends HydrationFeatureKind>(\n ɵkind: FeatureKind,\n ɵproviders: Provider[] = [],\n ɵoptions: unknown = {},\n): HydrationFeature<FeatureKind> {\n return {ɵkind, ɵproviders};\n}\n\n/**\n * Disables HTTP transfer cache. Effectively causes HTTP requests to be performed twice: once on the\n * server and other one on the browser.\n *\n * @see [Disabling Caching](guide/ssr#disabling-caching)\n *\n * @publicApi\n */\nexport function withNoHttpTransferCache(): HydrationFeature<HydrationFeatureKind.NoHttpTransferCache> {\n // This feature has no providers and acts as a flag that turns off\n // HTTP transfer cache (which otherwise is turned on by default).\n return hydrationFeature(HydrationFeatureKind.NoHttpTransferCache);\n}\n\n/**\n * The function accepts an object, which allows to configure cache parameters,\n * such as which headers should be included (no headers are included by default),\n * whether POST requests should be cached or a callback function to determine if a\n * particular request should be cached.\n *\n * @see [Configuring HTTP transfer cache options](guide/ssr#caching-data-when-using-httpclient)\n *\n * @publicApi\n */\nexport function withHttpTransferCacheOptions(\n options: HttpTransferCacheOptions,\n): HydrationFeature<HydrationFeatureKind.HttpTransferCacheOptions> {\n // This feature has no providers and acts as a flag to pass options to the HTTP transfer cache.\n return hydrationFeature(\n HydrationFeatureKind.HttpTransferCacheOptions,\n ɵwithHttpTransferCache(options),\n );\n}\n\n/**\n * Enables support for hydrating i18n blocks.\n *\n * @publicApi 20.0\n */\nexport function withI18nSupport(): HydrationFeature<HydrationFeatureKind.I18nSupport> {\n return hydrationFeature(HydrationFeatureKind.I18nSupport, ɵwithI18nSupport());\n}\n\n/**\n * Enables support for replaying user events (e.g. `click`s) that happened on a page\n * before hydration logic has completed. Once an application is hydrated, all captured\n * events are replayed and relevant event listeners are executed.\n *\n * @usageNotes\n *\n * Basic example of how you can enable event replay in your application when\n * `bootstrapApplication` function is used:\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideClientHydration(withEventReplay())]\n * });\n * ```\n * @publicApi\n * @see {@link provideClientHydration}\n */\nexport function withEventReplay(): HydrationFeature<HydrationFeatureKind.EventReplay> {\n return hydrationFeature(HydrationFeatureKind.EventReplay, ɵwithEventReplay());\n}\n\n/**\n * Enables support for incremental hydration using the `hydrate` trigger syntax.\n *\n * @usageNotes\n *\n * Basic example of how you can enable incremental hydration in your application when\n * the `bootstrapApplication` function is used:\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideClientHydration(withIncrementalHydration())]\n * });\n * ```\n * @publicApi 20.0\n * @see {@link provideClientHydration}\n */\nexport function withIncrementalHydration(): HydrationFeature<HydrationFeatureKind.IncrementalHydration> {\n return hydrationFeature(HydrationFeatureKind.IncrementalHydration, ɵwithIncrementalHydration());\n}\n\n/**\n * Returns an `ENVIRONMENT_INITIALIZER` token setup with a function\n * that verifies whether enabledBlocking initial navigation is used in an application\n * and logs a warning in a console if it's not compatible with hydration.\n */\nfunction provideEnabledBlockingInitialNavigationDetector(): Provider[] {\n return [\n {\n provide: ENVIRONMENT_INITIALIZER,\n useValue: () => {\n const isEnabledBlockingInitialNavigation = inject(IS_ENABLED_BLOCKING_INITIAL_NAVIGATION, {\n optional: true,\n });\n\n if (isEnabledBlockingInitialNavigation) {\n const console = inject(Console);\n const message = formatRuntimeError(\n RuntimeErrorCode.HYDRATION_CONFLICTING_FEATURES,\n 'Configuration error: found both hydration and enabledBlocking initial navigation ' +\n 'in the same application, which is a contradiction.',\n );\n console.warn(message);\n }\n },\n multi: true,\n },\n ];\n}\n\n/**\n * Sets up providers necessary to enable hydration functionality for the application.\n *\n * By default, the function enables the recommended set of features for the optimal\n * performance for most of the applications. It includes the following features:\n *\n * * Reconciling DOM hydration. Learn more about it [here](guide/hydration).\n * * [`HttpClient`](api/common/http/HttpClient) response caching while running on the server and\n * transferring this cache to the client to avoid extra HTTP requests. Learn more about data caching\n * [here](guide/ssr#caching-data-when-using-httpclient).\n *\n * These functions allow you to disable some of the default features or enable new ones:\n *\n * * {@link withNoHttpTransferCache} to disable HTTP transfer cache\n * * {@link withHttpTransferCacheOptions} to configure some HTTP transfer cache options\n * * {@link withI18nSupport} to enable hydration support for i18n blocks\n * * {@link withEventReplay} to enable support for replaying user events\n *\n * @usageNotes\n *\n * Basic example of how you can enable hydration in your application when\n * `bootstrapApplication` function is used:\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideClientHydration()]\n * });\n * ```\n *\n * Alternatively if you are using NgModules, you would add `provideClientHydration`\n * to your root app module's provider list.\n * ```ts\n * @NgModule({\n * declarations: [RootCmp],\n * bootstrap: [RootCmp],\n * providers: [provideClientHydration()],\n * })\n * export class AppModule {}\n * ```\n *\n * @see {@link withNoHttpTransferCache}\n * @see {@link withHttpTransferCacheOptions}\n * @see {@link withI18nSupport}\n * @see {@link withEventReplay}\n *\n * @param features Optional features to configure additional hydration behaviors.\n * @returns A set of providers to enable hydration.\n *\n * @publicApi 17.0\n */\nexport function provideClientHydration(\n ...features: HydrationFeature<HydrationFeatureKind>[]\n): EnvironmentProviders {\n const providers: Provider[] = [];\n const featuresKind = new Set<HydrationFeatureKind>();\n\n for (const {ɵproviders, ɵkind} of features) {\n featuresKind.add(ɵkind);\n\n if (ɵproviders.length) {\n providers.push(ɵproviders);\n }\n }\n\n const hasHttpTransferCacheOptions = featuresKind.has(\n HydrationFeatureKind.HttpTransferCacheOptions,\n );\n\n if (\n typeof ngDevMode !== 'undefined' &&\n ngDevMode &&\n featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) &&\n hasHttpTransferCacheOptions\n ) {\n throw new RuntimeError(\n RuntimeErrorCode.HYDRATION_CONFLICTING_FEATURES,\n 'Configuration error: found both withHttpTransferCacheOptions() and withNoHttpTransferCache() in the same call to provideClientHydration(), which is a contradiction.',\n );\n }\n\n return makeEnvironmentProviders([\n typeof ngDevMode !== 'undefined' && ngDevMode\n ? provideEnabledBlockingInitialNavigationDetector()\n : [],\n typeof ngDevMode !== 'undefined' && ngDevMode ? provideStabilityDebugging() : [],\n withDomHydration(),\n featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) || hasHttpTransferCacheOptions\n ? []\n : ɵwithHttpTransferCache({}),\n providers,\n ]);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the platform-browser package.\n */\n\nimport {Version} from '@angular/core';\n\n/**\n * @publicApi\n */\nexport const VERSION = /* @__PURE__ */ new Version('21.2.15');\n"],"names":["Meta","_doc","_dom","constructor","getDOM","addTag","tag","forceCreation","_getOrCreateElement","addTags","tags","reduce","result","push","getTag","attrSelector","meta","querySelector","nodeName","toLowerCase","getTags","list","querySelectorAll","slice","call","filter","elem","updateTag","selector","_parseSelector","_setMetaElementAttributes","removeTag","removeTagElement","remove","_containsAttributes","undefined","element","createElement","head","getElementsByTagName","appendChild","el","Object","keys","forEach","prop","setAttribute","_getMetaKeyMap","attr","name","_escapeSelectorValue","String","value","replace","every","key","getAttribute","META_KEYS_MAP","ɵfac","i0","ɵɵngDeclareFactory","minVersion","version","ngImport","type","DOCUMENT","target","ɵɵFactoryTarget","Injectable","ɵprov","ɵɵngDeclareInjectable","decorators","providedIn","Inject","httpEquiv","Title","getTitle","title","setTitle","newTitle","exportNgVar","COMPILED","ng","global","ChangeDetectionPerfRecord","msPerTick","numTicks","AngularProfiler","appRef","ref","injector","get","ApplicationRef","timeChangeDetection","config","record","profileName","console","profile","start","performance","now","tick","end","profileEnd","log","toFixed","PROFILER_GLOBAL_NAME","enableDebugTools","disableDebugTools","By","all","css","debugElement","nativeElement","elementMatches","directive","debugNode","providerTokens","indexOf","n","isElementNode","matches","msMatchesSelector","webkitMatchesSelector","EVENT_NAMES","HAMMER_GESTURE_CONFIG","InjectionToken","ngDevMode","HAMMER_LOADER","HammerGestureConfig","events","overrides","options","buildHammer","mc","Hammer","set","enable","eventName","deps","HammerGesturesPlugin","EventManagerPlugin","_config","_injector","loader","_loaderPromise","doc","supports","hasOwnProperty","isCustomEvent","window","_console","Console","warn","addEventListener","handler","zone","manager","getZone","runOutsideAngular","cancelRegistration","deregister","then","catch","callback","eventObj","runGuarded","on","off","destroy","token","optional","Optional","HammerModule","NgModule","ɵinj","ɵɵngDeclareInjector","providers","provide","EVENT_MANAGER_PLUGINS","useClass","multi","Injector","args","DomSanitizer","useExisting","forwardRef","DomSanitizerImpl","sanitize","ctx","SecurityContext","NONE","HTML","allowSanitizationBypassOrThrow","unwrapSafeValue","_sanitizeHtml","toString","STYLE","SCRIPT","RuntimeError","URL","_sanitizeUrl","RESOURCE_URL","XSS_SECURITY_URL","bypassSecurityTrustHtml","bypassSanitizationTrustHtml","bypassSecurityTrustStyle","bypassSanitizationTrustStyle","bypassSecurityTrustScript","bypassSanitizationTrustScript","bypassSecurityTrustUrl","bypassSanitizationTrustUrl","bypassSecurityTrustResourceUrl","bypassSanitizationTrustResourceUrl","HydrationFeatureKind","hydrationFeature","ɵkind","ɵproviders","ɵoptions","withNoHttpTransferCache","NoHttpTransferCache","withHttpTransferCacheOptions","HttpTransferCacheOptions","ɵwithHttpTransferCache","withI18nSupport","I18nSupport","ɵwithI18nSupport","withEventReplay","EventReplay","ɵwithEventReplay","withIncrementalHydration","IncrementalHydration","ɵwithIncrementalHydration","provideEnabledBlockingInitialNavigationDetector","ENVIRONMENT_INITIALIZER","useValue","isEnabledBlockingInitialNavigation","inject","IS_ENABLED_BLOCKING_INITIAL_NAVIGATION","message","formatRuntimeError","provideClientHydration","features","featuresKind","Set","add","length","hasHttpTransferCacheOptions","has","makeEnvironmentProviders","provideStabilityDebugging","withDomHydration","VERSION","Version"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.2.14
2
+ * @license Angular v21.2.15
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -37,7 +37,7 @@ class DOMTestComponentRenderer extends TestComponentRenderer {
37
37
  }
38
38
  static ɵfac = i0.ɵɵngDeclareFactory({
39
39
  minVersion: "12.0.0",
40
- version: "21.2.14",
40
+ version: "21.2.15",
41
41
  ngImport: i0,
42
42
  type: DOMTestComponentRenderer,
43
43
  deps: [{
@@ -47,14 +47,14 @@ class DOMTestComponentRenderer extends TestComponentRenderer {
47
47
  });
48
48
  static ɵprov = i0.ɵɵngDeclareInjectable({
49
49
  minVersion: "12.0.0",
50
- version: "21.2.14",
50
+ version: "21.2.15",
51
51
  ngImport: i0,
52
52
  type: DOMTestComponentRenderer
53
53
  });
54
54
  }
55
55
  i0.ɵɵngDeclareClassMetadata({
56
56
  minVersion: "12.0.0",
57
- version: "21.2.14",
57
+ version: "21.2.15",
58
58
  ngImport: i0,
59
59
  type: DOMTestComponentRenderer,
60
60
  decorators: [{
@@ -73,7 +73,7 @@ const platformBrowserTesting = createPlatformFactory(platformBrowser, 'browserTe
73
73
  class BrowserTestingModule {
74
74
  static ɵfac = i0.ɵɵngDeclareFactory({
75
75
  minVersion: "12.0.0",
76
- version: "21.2.14",
76
+ version: "21.2.15",
77
77
  ngImport: i0,
78
78
  type: BrowserTestingModule,
79
79
  deps: [],
@@ -81,14 +81,14 @@ class BrowserTestingModule {
81
81
  });
82
82
  static ɵmod = i0.ɵɵngDeclareNgModule({
83
83
  minVersion: "14.0.0",
84
- version: "21.2.14",
84
+ version: "21.2.15",
85
85
  ngImport: i0,
86
86
  type: BrowserTestingModule,
87
87
  exports: [BrowserModule]
88
88
  });
89
89
  static ɵinj = i0.ɵɵngDeclareInjector({
90
90
  minVersion: "12.0.0",
91
- version: "21.2.14",
91
+ version: "21.2.15",
92
92
  ngImport: i0,
93
93
  type: BrowserTestingModule,
94
94
  providers: [{
@@ -103,7 +103,7 @@ class BrowserTestingModule {
103
103
  }
104
104
  i0.ɵɵngDeclareClassMetadata({
105
105
  minVersion: "12.0.0",
106
- version: "21.2.14",
106
+ version: "21.2.15",
107
107
  ngImport: i0,
108
108
  type: BrowserTestingModule,
109
109
  decorators: [{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@angular/platform-browser",
3
- "version": "21.2.14",
3
+ "version": "21.2.15",
4
4
  "description": "Angular - library for using Angular in a web browser",
5
5
  "author": "angular",
6
6
  "license": "MIT",
@@ -11,9 +11,9 @@
11
11
  "tslib": "^2.3.0"
12
12
  },
13
13
  "peerDependencies": {
14
- "@angular/animations": "21.2.14",
15
- "@angular/core": "21.2.14",
16
- "@angular/common": "21.2.14"
14
+ "@angular/animations": "21.2.15",
15
+ "@angular/core": "21.2.15",
16
+ "@angular/common": "21.2.15"
17
17
  },
18
18
  "peerDependenciesMeta": {
19
19
  "@angular/animations": {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.2.14
2
+ * @license Angular v21.2.15
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.2.14
2
+ * @license Angular v21.2.15
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -52,7 +52,7 @@ declare class AsyncAnimationRendererFactory implements OnDestroy, RendererFactor
52
52
  private _engine?;
53
53
  /**
54
54
  *
55
- * @param moduleImpl allows to provide a mock implmentation (or will load the animation module)
55
+ * @param moduleImpl allows to provide a mock implementation (or will load the animation module)
56
56
  */
57
57
  constructor(doc: Document, delegate: RendererFactory2, zone: NgZone, animationType: 'animations' | 'noop', moduleImpl?: Promise<{
58
58
  ɵcreateEngine: (type: "animations" | "noop", doc: Document) => _AnimationEngine;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.2.14
2
+ * @license Angular v21.2.15
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.2.14
2
+ * @license Angular v21.2.15
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -117,6 +117,7 @@ declare class Meta {
117
117
  private _getOrCreateElement;
118
118
  private _setMetaElementAttributes;
119
119
  private _parseSelector;
120
+ private _escapeSelectorValue;
120
121
  private _containsAttributes;
121
122
  private _getMetaKeyMap;
122
123
  static ɵfac: i0.ɵɵFactoryDeclaration<Meta, never>;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.2.14
2
+ * @license Angular v21.2.15
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */