UNPKG

@angular/platform-browser

Version:

Angular - library for using Angular in a web browser

1 lines 21.1 kB
{"version":3,"file":"animations-async.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/animations/async/src/async_animation_renderer.ts","../../../../../k8-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":["RuntimeError","ChangeDetectionScheduler","performanceMarkFeature"],"mappings":"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"}