@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
JavaScript
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