UNPKG

@groupix/groupix-spinner

Version:

A lightweight Angular spinner library with customizable ball count, size, speed, and loading text

95 lines (88 loc) 6.55 kB
import * as i0 from '@angular/core'; import { Injectable, Component, Input, NgModule } from '@angular/core'; import * as i1 from '@angular/common'; import { CommonModule } from '@angular/common'; class GroupixSpinnerService { constructor() { } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GroupixSpinnerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GroupixSpinnerService, providedIn: 'root' }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GroupixSpinnerService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [] }); class GroupixSpinnerComponent { ballCount = 3; size = 'l'; balls = []; sizeClass = 'ball-l'; ngOnInit() { this.updateBallCount(); this.updateSizeClass(); } ngOnChanges() { this.updateBallCount(); this.updateSizeClass(); } updateBallCount() { const count = Math.min(Math.max(this.ballCount, 3), 9); this.balls = Array.from({ length: count }, (_, i) => i); } updateSizeClass() { const allowedSizes = ['sm', 'm', 'l', 'xl', 'xxl']; this.sizeClass = allowedSizes.includes(this.size) ? `ball-${this.size}` : 'ball-l'; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GroupixSpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: GroupixSpinnerComponent, selector: "groupix-spinner", inputs: { ballCount: "ballCount", size: "size" }, usesOnChanges: true, ngImport: i0, template: ` <div class="loader-container"> <div *ngFor="let ball of balls; let i = index" class="ball" [ngClass]="['ball-' + (i + 1), sizeClass]" [ngStyle]="{ 'animation-delay': -0.3 + i * 0.05 + 's' }" ></div> </div> `, isInline: true, styles: [".loader-container{display:flex;justify-content:center;align-items:center;height:100%;gap:8px}.ball{border-radius:50%;box-shadow:0 4px 6px #0000001a;animation:bounce 1.5s infinite ease-in-out;transition:transform .3s ease-in-out}.ball-sm{width:20px;height:20px}.ball-m{width:30px;height:30px}.ball-l{width:40px;height:40px}.ball-xl{width:50px;height:50px}.ball-xxl{width:60px;height:60px}.ball-1{background:linear-gradient(to right,#6366f1,#ec4899)}.ball-2{background:linear-gradient(to right,#facc15,#dc2626)}.ball-3{background:linear-gradient(to right,#a855f7,#2563eb)}.ball-4{background:linear-gradient(to right,#10b981,#3b82f6)}.ball-5{background:linear-gradient(to right,#f97316,#8b5cf6)}.ball-6{background:linear-gradient(to right,#06b6d4,#f43f5e)}.ball-7{background:linear-gradient(to right,#84cc16,#d946ef)}.ball-8{background:linear-gradient(to right,#14b8a6,#f59e0b)}.ball-9{background:linear-gradient(to right,#6366f1,#84cc16)}.ball:hover{transform:scale(1.25)}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-20px)}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GroupixSpinnerComponent, decorators: [{ type: Component, args: [{ selector: 'groupix-spinner', template: ` <div class="loader-container"> <div *ngFor="let ball of balls; let i = index" class="ball" [ngClass]="['ball-' + (i + 1), sizeClass]" [ngStyle]="{ 'animation-delay': -0.3 + i * 0.05 + 's' }" ></div> </div> `, styles: [".loader-container{display:flex;justify-content:center;align-items:center;height:100%;gap:8px}.ball{border-radius:50%;box-shadow:0 4px 6px #0000001a;animation:bounce 1.5s infinite ease-in-out;transition:transform .3s ease-in-out}.ball-sm{width:20px;height:20px}.ball-m{width:30px;height:30px}.ball-l{width:40px;height:40px}.ball-xl{width:50px;height:50px}.ball-xxl{width:60px;height:60px}.ball-1{background:linear-gradient(to right,#6366f1,#ec4899)}.ball-2{background:linear-gradient(to right,#facc15,#dc2626)}.ball-3{background:linear-gradient(to right,#a855f7,#2563eb)}.ball-4{background:linear-gradient(to right,#10b981,#3b82f6)}.ball-5{background:linear-gradient(to right,#f97316,#8b5cf6)}.ball-6{background:linear-gradient(to right,#06b6d4,#f43f5e)}.ball-7{background:linear-gradient(to right,#84cc16,#d946ef)}.ball-8{background:linear-gradient(to right,#14b8a6,#f59e0b)}.ball-9{background:linear-gradient(to right,#6366f1,#84cc16)}.ball:hover{transform:scale(1.25)}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-20px)}}\n"] }] }], propDecorators: { ballCount: [{ type: Input }], size: [{ type: Input }] } }); class GroupixSpinnerModule { static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GroupixSpinnerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: GroupixSpinnerModule, declarations: [GroupixSpinnerComponent], imports: [CommonModule], exports: [GroupixSpinnerComponent] }); static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GroupixSpinnerModule, imports: [CommonModule] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GroupixSpinnerModule, decorators: [{ type: NgModule, args: [{ declarations: [GroupixSpinnerComponent], exports: [GroupixSpinnerComponent], imports: [CommonModule], }] }] }); /* * Public API Surface of groupix-spinner */ /** * Generated bundle index. Do not edit. */ export { GroupixSpinnerComponent, GroupixSpinnerModule, GroupixSpinnerService }; //# sourceMappingURL=groupix-groupix-spinner.mjs.map