@angular/animations
Version:
Angular - animations integration with web-animations
1 lines • 13.1 kB
Source Map (JSON)
{"version":3,"file":"animations.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/animations/src/animation_builder.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 */\nimport {\n ANIMATION_MODULE_TYPE,\n ɵAnimationRendererType as AnimationRendererType,\n DOCUMENT,\n Inject,\n inject,\n Injectable,\n Renderer2,\n RendererFactory2,\n RendererType2,\n ɵRuntimeError as RuntimeError,\n Service,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport {AnimationMetadata, AnimationOptions, sequence} from './animation_metadata';\nimport {RuntimeErrorCode} from './errors';\nimport {AnimationPlayer} from './players/animation_player';\n\n/**\n * An injectable service that produces an animation sequence programmatically within an\n * Angular component or directive.\n * Provided by the `BrowserAnimationsModule` or `NoopAnimationsModule`.\n *\n * @usageNotes\n *\n * To use this service, add it to your component or directive as a dependency.\n * The service is instantiated along with your component.\n *\n * Apps do not typically need to create their own animation players, but if you\n * do need to, follow these steps:\n *\n * 1. Use the <code>[AnimationBuilder.build](api/animations/AnimationBuilder#build)()</code> method\n * to create a programmatic animation. The method returns an `AnimationFactory` instance.\n *\n * 2. Use the factory object to create an `AnimationPlayer` and attach it to a DOM element.\n *\n * 3. Use the player object to control the animation programmatically.\n *\n * For example:\n *\n * ```ts\n * // import the service from BrowserAnimationsModule\n * import {AnimationBuilder} from '@angular/animations';\n * // require the service as a dependency\n * class MyCmp {\n * constructor(private _builder: AnimationBuilder) {}\n *\n * makeAnimation(element: any) {\n * // first define a reusable animation\n * const myAnimation = this._builder.build([\n * style({ width: 0 }),\n * animate(1000, style({ width: '100px' }))\n * ]);\n *\n * // use the returned factory object to create a player\n * const player = myAnimation.create(element);\n *\n * player.play();\n * }\n * }\n * ```\n *\n * @publicApi\n *\n * @deprecated 20.2 Use `animate.enter` or `animate.leave` instead. Intent to remove in v23\n */\n@Service({factory: () => inject(BrowserAnimationBuilder)})\nexport abstract class AnimationBuilder {\n /**\n * Builds a factory for producing a defined animation.\n * @param animation A reusable animation definition.\n * @returns A factory object that can create a player for the defined animation.\n * @see {@link animate}\n */\n abstract build(animation: AnimationMetadata | AnimationMetadata[]): AnimationFactory;\n}\n\n/**\n * A factory object returned from the\n * <code>[AnimationBuilder.build](api/animations/AnimationBuilder#build)()</code>\n * method.\n *\n * @publicApi\n *\n * @deprecated 20.2 Use `animate.enter` or `animate.leave` instead. Intent to remove in v23\n */\nexport abstract class AnimationFactory {\n /**\n * Creates an `AnimationPlayer` instance for the reusable animation defined by\n * the <code>[AnimationBuilder.build](api/animations/AnimationBuilder#build)()</code>\n * method that created this factory and attaches the new player a DOM element.\n *\n * @param element The DOM element to which to attach the player.\n * @param options A set of options that can include a time delay and\n * additional developer-defined parameters.\n */\n abstract create(element: any, options?: AnimationOptions): AnimationPlayer;\n}\n\n@Injectable({providedIn: 'root'})\nexport class BrowserAnimationBuilder extends AnimationBuilder {\n private animationModuleType = inject(ANIMATION_MODULE_TYPE, {optional: true});\n private _nextAnimationId = 0;\n private _renderer: Renderer2;\n\n constructor(rootRenderer: RendererFactory2, @Inject(DOCUMENT) doc: Document) {\n super();\n const typeData: RendererType2 = {\n id: '0',\n encapsulation: ViewEncapsulation.None,\n styles: [],\n data: {animation: []},\n };\n this._renderer = rootRenderer.createRenderer(doc.body, typeData);\n\n if (this.animationModuleType === null && !isAnimationRenderer(this._renderer)) {\n // We only support AnimationRenderer & DynamicDelegationRenderer for this AnimationBuilder\n\n throw new RuntimeError(\n RuntimeErrorCode.BROWSER_ANIMATION_BUILDER_INJECTED_WITHOUT_ANIMATIONS,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n 'Angular detected that the `AnimationBuilder` was injected, but animation support was not enabled. ' +\n 'Please make sure that you enable animations in your application by calling `provideAnimations()` or `provideAnimationsAsync()` function.',\n );\n }\n }\n\n override build(animation: AnimationMetadata | AnimationMetadata[]): AnimationFactory {\n const id = this._nextAnimationId;\n this._nextAnimationId++;\n const entry = Array.isArray(animation) ? sequence(animation) : animation;\n issueAnimationCommand(this._renderer, null, id, 'register', [entry]);\n return new BrowserAnimationFactory(id, this._renderer);\n }\n}\n\nclass BrowserAnimationFactory extends AnimationFactory {\n constructor(\n private _id: number,\n private _renderer: Renderer2,\n ) {\n super();\n }\n\n override create(element: any, options?: AnimationOptions): AnimationPlayer {\n return new RendererAnimationPlayer(this._id, element, options || {}, this._renderer);\n }\n}\n\nclass RendererAnimationPlayer implements AnimationPlayer {\n public parentPlayer: AnimationPlayer | null = null;\n private _started = false;\n\n constructor(\n public id: number,\n public element: any,\n options: AnimationOptions,\n private _renderer: Renderer2,\n ) {\n this._command('create', options);\n }\n\n private _listen(eventName: string, callback: (event: any) => any): () => void {\n return this._renderer.listen(this.element, `@@${this.id}:${eventName}`, callback);\n }\n\n private _command(command: string, ...args: any[]): void {\n issueAnimationCommand(this._renderer, this.element, this.id, command, args);\n }\n\n onDone(fn: () => void): void {\n this._listen('done', fn);\n }\n\n onStart(fn: () => void): void {\n this._listen('start', fn);\n }\n\n onDestroy(fn: () => void): void {\n this._listen('destroy', fn);\n }\n\n init(): void {\n this._command('init');\n }\n\n hasStarted(): boolean {\n return this._started;\n }\n\n play(): void {\n this._command('play');\n this._started = true;\n }\n\n pause(): void {\n this._command('pause');\n }\n\n restart(): void {\n this._command('restart');\n }\n\n finish(): void {\n this._command('finish');\n }\n\n destroy(): void {\n this._command('destroy');\n }\n\n reset(): void {\n this._command('reset');\n this._started = false;\n }\n\n setPosition(p: number): void {\n this._command('setPosition', p);\n }\n\n getPosition(): number {\n return unwrapAnimationRenderer(this._renderer)?.engine?.players[this.id]?.getPosition() ?? 0;\n }\n\n public totalTime = 0;\n}\n\nfunction issueAnimationCommand(\n renderer: Renderer2,\n element: any,\n id: number,\n command: string,\n args: any[],\n): void {\n renderer.setProperty(element, `@@${id}:${command}`, args);\n}\n\n/**\n * The following 2 methods cannot reference their correct types (AnimationRenderer &\n * DynamicDelegationRenderer) since this would introduce a import cycle.\n */\n\nfunction unwrapAnimationRenderer(\n renderer: Renderer2,\n): {engine: {players: AnimationPlayer[]}} | null {\n const type = (renderer as unknown as {ɵtype: AnimationRendererType}).ɵtype;\n if (type === AnimationRendererType.Regular) {\n return renderer as any;\n } else if (type === AnimationRendererType.Delegated) {\n return (renderer as any).animationRenderer;\n }\n\n return null;\n}\n\nfunction isAnimationRenderer(renderer: Renderer2): boolean {\n const type = (renderer as unknown as {ɵtype: AnimationRendererType}).ɵtype;\n return type === AnimationRendererType.Regular || type === AnimationRendererType.Delegated;\n}\n"],"names":["RuntimeError"],"mappings":"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"}