UNPKG

@progress/kendo-angular-indicators

Version:

Kendo UI Indicators for Angular

135 lines (134 loc) 4.81 kB
/**----------------------------------------------------------------------------------------- * Copyright © 2025 Progress Software Corporation. All rights reserved. * Licensed under commercial license. See LICENSE.md in the project root for more information *-------------------------------------------------------------------------------------------*/ import { Component, Input, HostBinding, ElementRef, Renderer2 } from '@angular/core'; import { validatePackage } from '@progress/kendo-licensing'; import { packageMetadata } from '../package-metadata'; import * as i0 from "@angular/core"; const SIZE_CLASSES = { 'small': 'k-loader-sm', 'medium': 'k-loader-md', 'large': 'k-loader-lg' }; const SEGMENT_COUNT = { 'pulsing': 2, 'infinite-spinner': 3, 'converging-spinner': 4 }; const TYPE_CLASSES = { 'pulsing': 'k-loader-pulsing-2', 'infinite-spinner': 'k-loader-spinner-3', 'converging-spinner': 'k-loader-spinner-4' }; /** * Represents the [Kendo UI Loader component for Angular]({% slug overview_loader %}). * Displays a Loader that represents an indeterminate wait time. * * Provides configuration options for animation type, theme color, and size. * * @example * ```html * <kendo-loader type="infinite-spinner" themeColor="primary" size="large"></kendo-loader> * ``` */ export class LoaderComponent { element; renderer; hostClass = true; /** * Specifies the Loader animation type. * * @default pulsing */ set type(type) { this.renderer.removeClass(this.loader, TYPE_CLASSES[this.type]); this.renderer.addClass(this.loader, TYPE_CLASSES[type]); this._type = type; } get type() { return this._type; } /** * Specifies the theme color of the Loader. * * @default primary */ set themeColor(themeColor) { this.renderer.removeClass(this.loader, `k-loader-${this.themeColor}`); this.renderer.addClass(this.loader, `k-loader-${themeColor}`); this._themeColor = themeColor; } get themeColor() { return this._themeColor; } /** * Specifies the size of the Loader. * * @default medium */ set size(size) { this.renderer.removeClass(this.loader, SIZE_CLASSES[this.size]); this.renderer.addClass(this.loader, SIZE_CLASSES[size]); this._size = size; } get size() { return this._size; } _type = 'pulsing'; _themeColor = 'primary'; _size = 'medium'; loader; constructor(element, renderer) { this.element = element; this.renderer = renderer; validatePackage(packageMetadata); this.loader = this.element.nativeElement; } ngAfterViewInit() { this.setLoaderClasses(); } /** * @hidden */ get segmentCount() { return new Array(SEGMENT_COUNT[this.type]); } setLoaderClasses() { this.renderer.addClass(this.loader, TYPE_CLASSES[this.type]); this.renderer.addClass(this.loader, `k-loader-${this.themeColor}`); this.renderer.addClass(this.loader, SIZE_CLASSES[this.size]); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LoaderComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LoaderComponent, isStandalone: true, selector: "kendo-loader", inputs: { type: "type", themeColor: "themeColor", size: "size" }, host: { properties: { "class.k-loader": "this.hostClass" } }, ngImport: i0, template: ` <div class="k-loader-canvas"> @for (segment of segmentCount; track $index) { <span class="k-loader-segment"></span> } </div> `, isInline: true }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LoaderComponent, decorators: [{ type: Component, args: [{ selector: 'kendo-loader', template: ` <div class="k-loader-canvas"> @for (segment of segmentCount; track $index) { <span class="k-loader-segment"></span> } </div> `, standalone: true, imports: [] }] }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { hostClass: [{ type: HostBinding, args: ['class.k-loader'] }], type: [{ type: Input }], themeColor: [{ type: Input }], size: [{ type: Input }] } });