@angular/material
Version:
Angular Material
1 lines • 13.4 kB
Source Map (JSON)
{"version":3,"file":"_ripple-loader-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/core/private/ripple-loader.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 Injectable,\n Injector,\n NgZone,\n OnDestroy,\n RendererFactory2,\n inject,\n DOCUMENT,\n} from '@angular/core';\nimport {\n MAT_RIPPLE_GLOBAL_OPTIONS,\n RippleRenderer,\n RippleTarget,\n defaultRippleAnimationConfig,\n} from '../ripple';\nimport {Platform, _getEventTarget} from '@angular/cdk/platform';\nimport {_CdkPrivateStyleLoader} from '@angular/cdk/private';\nimport {_animationsDisabled} from '../animation/animation';\n\n/** The options for the MatRippleLoader's event listeners. */\nconst eventListenerOptions = {capture: true};\n\n/**\n * The events that should trigger the initialization of the ripple.\n * Note that we use `mousedown`, rather than `click`, for mouse devices because\n * we can't rely on `mouseenter` in the shadow DOM and `click` happens too late.\n */\nconst rippleInteractionEvents = ['focus', 'mousedown', 'mouseenter', 'touchstart'];\n\n/** The attribute attached to a component whose ripple has not yet been initialized. */\nconst matRippleUninitialized = 'mat-ripple-loader-uninitialized';\n\n/** Additional classes that should be added to the ripple when it is rendered. */\nconst matRippleClassName = 'mat-ripple-loader-class-name';\n\n/** Whether the ripple should be centered. */\nconst matRippleCentered = 'mat-ripple-loader-centered';\n\n/** Whether the ripple should be disabled. */\nconst matRippleDisabled = 'mat-ripple-loader-disabled';\n\n/**\n * Handles attaching ripples on demand.\n *\n * This service allows us to avoid eagerly creating & attaching MatRipples.\n * It works by creating & attaching a ripple only when a component is first interacted with.\n *\n * @docs-private\n */\n@Injectable({providedIn: 'root'})\nexport class MatRippleLoader implements OnDestroy {\n private _document = inject(DOCUMENT);\n private _animationsDisabled = _animationsDisabled();\n private _globalRippleOptions = inject(MAT_RIPPLE_GLOBAL_OPTIONS, {optional: true});\n private _platform = inject(Platform);\n private _ngZone = inject(NgZone);\n private _injector = inject(Injector);\n private _eventCleanups: (() => void)[];\n private _hosts = new Map<\n HTMLElement,\n {renderer: RippleRenderer; target: RippleTarget; hasSetUpEvents: boolean}\n >();\n\n constructor() {\n const renderer = inject(RendererFactory2).createRenderer(null, null);\n\n this._eventCleanups = this._ngZone.runOutsideAngular(() =>\n rippleInteractionEvents.map(name =>\n renderer.listen(this._document, name, this._onInteraction, eventListenerOptions),\n ),\n );\n }\n\n ngOnDestroy(): void {\n const hosts = this._hosts.keys();\n\n for (const host of hosts) {\n this.destroyRipple(host);\n }\n\n this._eventCleanups.forEach(cleanup => cleanup());\n }\n\n /**\n * Configures the ripple that will be rendered by the ripple loader.\n *\n * Stores the given information about how the ripple should be configured on the host\n * element so that it can later be retrived & used when the ripple is actually created.\n */\n configureRipple(\n host: HTMLElement,\n config: {\n className?: string;\n centered?: boolean;\n disabled?: boolean;\n },\n ): void {\n // Indicates that the ripple has not yet been rendered for this component.\n host.setAttribute(matRippleUninitialized, this._globalRippleOptions?.namespace ?? '');\n\n // Store the additional class name(s) that should be added to the ripple element.\n if (config.className || !host.hasAttribute(matRippleClassName)) {\n host.setAttribute(matRippleClassName, config.className || '');\n }\n\n // Store whether the ripple should be centered.\n if (config.centered) {\n host.setAttribute(matRippleCentered, '');\n }\n\n if (config.disabled) {\n host.setAttribute(matRippleDisabled, '');\n }\n }\n\n /** Sets the disabled state on the ripple instance corresponding to the given host element. */\n setDisabled(host: HTMLElement, disabled: boolean): void {\n const ripple = this._hosts.get(host);\n\n // If the ripple has already been instantiated, just disable it.\n if (ripple) {\n ripple.target.rippleDisabled = disabled;\n\n if (!disabled && !ripple.hasSetUpEvents) {\n ripple.hasSetUpEvents = true;\n ripple.renderer.setupTriggerEvents(host);\n }\n } else if (disabled) {\n // Otherwise, set an attribute so we know what the\n // disabled state should be when the ripple is initialized.\n host.setAttribute(matRippleDisabled, '');\n } else {\n host.removeAttribute(matRippleDisabled);\n }\n }\n\n /**\n * Handles creating and attaching component internals\n * when a component is initially interacted with.\n */\n private _onInteraction = (event: Event) => {\n const eventTarget = _getEventTarget(event);\n\n if (eventTarget instanceof HTMLElement) {\n // TODO(wagnermaciel): Consider batching these events to improve runtime performance.\n const element = eventTarget.closest(\n `[${matRippleUninitialized}=\"${this._globalRippleOptions?.namespace ?? ''}\"]`,\n );\n\n if (element) {\n this._createRipple(element as HTMLElement);\n }\n }\n };\n\n /** Creates a MatRipple and appends it to the given element. */\n private _createRipple(host: HTMLElement): void {\n if (!this._document || this._hosts.has(host)) {\n return;\n }\n\n // Create the ripple element.\n host.querySelector('.mat-ripple')?.remove();\n const rippleEl = this._document.createElement('span');\n rippleEl.classList.add('mat-ripple', host.getAttribute(matRippleClassName)!);\n host.append(rippleEl);\n\n const globalOptions = this._globalRippleOptions;\n const enterDuration = this._animationsDisabled\n ? 0\n : (globalOptions?.animation?.enterDuration ?? defaultRippleAnimationConfig.enterDuration);\n const exitDuration = this._animationsDisabled\n ? 0\n : (globalOptions?.animation?.exitDuration ?? defaultRippleAnimationConfig.exitDuration);\n const target: RippleTarget = {\n rippleDisabled:\n this._animationsDisabled || globalOptions?.disabled || host.hasAttribute(matRippleDisabled),\n rippleConfig: {\n centered: host.hasAttribute(matRippleCentered),\n terminateOnPointerUp: globalOptions?.terminateOnPointerUp,\n animation: {\n enterDuration,\n exitDuration,\n },\n },\n };\n\n const renderer = new RippleRenderer(\n target,\n this._ngZone,\n rippleEl,\n this._platform,\n this._injector,\n );\n const hasSetUpEvents = !target.rippleDisabled;\n\n if (hasSetUpEvents) {\n renderer.setupTriggerEvents(host);\n }\n\n this._hosts.set(host, {\n target,\n renderer,\n hasSetUpEvents,\n });\n\n host.removeAttribute(matRippleUninitialized);\n }\n\n destroyRipple(host: HTMLElement): void {\n const ripple = this._hosts.get(host);\n\n if (ripple) {\n ripple.renderer._removeTriggerEvents();\n this._hosts.delete(host);\n }\n }\n}\n"],"names":["eventListenerOptions","capture","rippleInteractionEvents","matRippleUninitialized","matRippleClassName","matRippleCentered","matRippleDisabled","MatRippleLoader","_document","inject","DOCUMENT","_animationsDisabled","_globalRippleOptions","MAT_RIPPLE_GLOBAL_OPTIONS","optional","_platform","Platform","_ngZone","NgZone","_injector","Injector","_eventCleanups","_hosts","Map","constructor","renderer","RendererFactory2","createRenderer","runOutsideAngular","map","name","listen","_onInteraction","ngOnDestroy","hosts","keys","host","destroyRipple","forEach","cleanup","configureRipple","config","setAttribute","namespace","className","hasAttribute","centered","disabled","setDisabled","ripple","get","target","rippleDisabled","hasSetUpEvents","setupTriggerEvents","removeAttribute","event","eventTarget","_getEventTarget","HTMLElement","element","closest","_createRipple","has","querySelector","remove","rippleEl","createElement","classList","add","getAttribute","append","globalOptions","enterDuration","animation","defaultRippleAnimationConfig","exitDuration","rippleConfig","terminateOnPointerUp","RippleRenderer","set","_removeTriggerEvents","delete","deps","i0","ɵɵFactoryTarget","Injectable","ɵprov","ɵɵngDeclareInjectable","minVersion","version","ngImport","type","decorators","providedIn"],"mappings":"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"}