UNPKG

@progress/kendo-angular-ripple

Version:
99 lines (98 loc) 3.88 kB
/**----------------------------------------------------------------------------------------- * Copyright © 2025 Progress Software Corporation. All rights reserved. * Licensed under commercial license. See LICENSE.md in the project root for more information *-------------------------------------------------------------------------------------------*/ import { ElementRef, HostBinding, Directive, Renderer2, Input, NgZone } from '@angular/core'; import { register } from '@progress/kendo-ripple'; import { isDocumentAvailable } from '@progress/kendo-angular-common'; import { validatePackage } from '@progress/kendo-licensing'; import { packageMetadata } from './package-metadata'; import * as i0 from "@angular/core"; /** * Represents the Ripple container component. * * Apply this directive to any container element. * The ripple effect will show on the following elements: * - Buttons * - Checkboxes * - Radio buttons * * @example * ```html * <div kendoRippleContainer> * <button kendoButton>Default Button</button> * <button kendoButton [primary]="true">Primary Button</button> * </div> * ``` */ export class RippleContainerDirective { renderer; element; ngZone; /** * Disables the ripple effect for the `kendoRippleContainer` element. * * @default false */ set disabled(disabled) { this.isDisabled = disabled; if (this.isDisabled) { this.removeListeners(); } else { this.registerListeners(); } this.renderer.setProperty(this.element.nativeElement, 'disabled', disabled); } isDisabled = false; get containerClass() { return true; } constructor(renderer, element, ngZone) { this.renderer = renderer; this.element = element; this.ngZone = ngZone; validatePackage(packageMetadata); } ngOnDestroy() { this.removeListeners(); } ngAfterViewInit() { if (!this.isDisabled) { this.ngZone.runOutsideAngular(() => { this.registerListeners(); }); } } removeListeners = () => { }; registerListeners() { if (!isDocumentAvailable()) { return; } this.removeListeners(); const callback = register(this.element.nativeElement, [ { selector: ".k-button:not(li)" }, { selector: ".k-list>.k-item", options: { global: true } }, { selector: ".k-checkbox,.k-radio", options: { events: ["focusin", "animationend", "click"] } } ]); this.removeListeners = callback; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RippleContainerDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: RippleContainerDirective, isStandalone: true, selector: "[kendoRippleContainer]", inputs: { disabled: "disabled" }, host: { properties: { "class.k-ripple-container": "this.containerClass" } }, ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RippleContainerDirective, decorators: [{ type: Directive, args: [{ selector: '[kendoRippleContainer]', standalone: true }] }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { disabled: [{ type: Input }], containerClass: [{ type: HostBinding, args: ['class.k-ripple-container'] }] } });