UNPKG

@omnedia/ngx-background-beams

Version:

<a href="https://ngxui.com" target="_blank" style="display: flex;gap: .5rem;align-items: center;cursor: pointer; padding: 0 0 0 0; height: fit-content;"> <img src="https://ngxui.com/assets/img/ngxui-logo.png" style="width: 64px;height: 64px;"> </a>

1 lines 19.5 kB
{"version":3,"file":"omnedia-ngx-background-beams.mjs","sources":["../../../projects/ngx-background-beams/src/lib/ngx-background-beams.component.ts","../../../projects/ngx-background-beams/src/lib/ngx-background-beams.component.html","../../../projects/ngx-background-beams/src/public-api.ts","../../../projects/ngx-background-beams/src/omnedia-ngx-background-beams.ts"],"sourcesContent":["import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n PLATFORM_ID, signal,\r\n ViewChild, WritableSignal\r\n} from '@angular/core';\r\nimport {CommonModule, isPlatformBrowser} from \"@angular/common\";\r\n\r\n@Component({\r\n selector: 'om-background-beams',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: \"./ngx-background-beams.component.html\",\r\n styleUrl: \"./ngx-background-beams.component.scss\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgxBackgroundBeamsComponent implements AfterViewInit, OnDestroy {\r\n @ViewChild('OmBackgroundBeams') componentRef!: ElementRef<HTMLElement>;\r\n\r\n @Input()\r\n set gradientColorValues(colors: string[]) {\r\n if (colors.length !== 3) {\r\n throw new Error('om-background-beams: gradient colors need to be exactly 3 values.');\r\n }\r\n\r\n this.gradientColors.set(colors);\r\n }\r\n\r\n @Input()\r\n pathColor: string = '#00000025';\r\n\r\n @Input() pathQuantity: number = 50;\r\n\r\n readonly gradientColors: WritableSignal<string[]> = signal(['#18CCFC', '#6344F5', '#AE48FF']);\r\n readonly paths: WritableSignal<string[]> = signal([]);\r\n readonly x1: WritableSignal<string[]> = signal([]);\r\n readonly x2: WritableSignal<string[]> = signal([]);\r\n readonly y1: WritableSignal<string[]> = signal([]);\r\n readonly y2: WritableSignal<string[]> = signal([]);\r\n readonly delays: WritableSignal<number[]> = signal([]);\r\n readonly durations: WritableSignal<number[]> = signal([]);\r\n readonly inViewport: WritableSignal<boolean> = signal(false);\r\n\r\n private animationFrameId?: number;\r\n private observer?: IntersectionObserver;\r\n\r\n constructor(\r\n @Inject(PLATFORM_ID) private platformId: object\r\n ) {\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.generatePaths();\r\n this.initializeIntersectionObserver();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.observer && this.componentRef.nativeElement) {\r\n this.observer.unobserve(this.componentRef.nativeElement);\r\n }\r\n }\r\n\r\n generatePaths(): void {\r\n this.paths.set([]);\r\n this.x1.set([]);\r\n this.x2.set([]);\r\n this.y1.set([]);\r\n this.y2.set([]);\r\n this.delays.set([]);\r\n this.durations.set([]);\r\n\r\n const firstPath = {\r\n mX1: -380, mY1: -189, cX1: -380, cY1: -189, cX2: -312, cY2: 216,\r\n cX3: 152, cY3: 343, cX4: 616, cY4: 470, cX5: 684, cY5: 875\r\n };\r\n\r\n const lastPath = {\r\n mX1: -37, mY1: -581, cX1: -37, cY1: -581, cX2: 31, cY2: -176,\r\n cX3: 495, cY3: -49, cX4: 959, cY4: 78, cX5: 1027, cY5: 483\r\n };\r\n\r\n const paths: string[] = [];\r\n const x1: string[] = [];\r\n const x2: string[] = [];\r\n const y1: string[] = [];\r\n const y2: string[] = [];\r\n const delays: number[] = [];\r\n const durations: number[] = [];\r\n\r\n for (let i = 0; i < this.pathQuantity; i++) {\r\n const t = i / (this.pathQuantity - 1);\r\n\r\n const mX1 = firstPath.mX1 + t * (lastPath.mX1 - firstPath.mX1);\r\n const mY1 = firstPath.mY1 + t * (lastPath.mY1 - firstPath.mY1);\r\n const cX1 = firstPath.cX1 + t * (lastPath.cX1 - firstPath.cX1);\r\n const cY1 = firstPath.cY1 + t * (lastPath.cY1 - firstPath.cY1);\r\n const cX2 = firstPath.cX2 + t * (lastPath.cX2 - firstPath.cX2);\r\n const cY2 = firstPath.cY2 + t * (lastPath.cY2 - firstPath.cY2);\r\n const cX3 = firstPath.cX3 + t * (lastPath.cX3 - firstPath.cX3);\r\n const cY3 = firstPath.cY3 + t * (lastPath.cY3 - firstPath.cY3);\r\n const cX4 = firstPath.cX4 + t * (lastPath.cX4 - firstPath.cX4);\r\n const cY4 = firstPath.cY4 + t * (lastPath.cY4 - firstPath.cY4);\r\n const cX5 = firstPath.cX5 + t * (lastPath.cX5 - firstPath.cX5);\r\n const cY5 = firstPath.cY5 + t * (lastPath.cY5 - firstPath.cY5);\r\n\r\n const path = `M${mX1} ${mY1}` +\r\n `C${cX1} ${cY1} ${cX2} ${cY2} ${cX3} ${cY3}` +\r\n `C${cX4} ${cY4} ${cX5} ${cY5} ${cX5} ${cY5}`;\r\n\r\n paths.push(path);\r\n\r\n x1.push('0%');\r\n x2.push('0%');\r\n y1.push('0%');\r\n y2.push('0%');\r\n\r\n delays.push(Math.random() * 10);\r\n durations.push(Math.random() * 10 + 10);\r\n }\r\n\r\n this.paths.set(paths);\r\n this.x1.set(x1);\r\n this.x2.set(x2);\r\n this.y1.set(y1);\r\n this.y2.set(y2);\r\n this.delays.set(delays);\r\n this.durations.set(durations);\r\n }\r\n\r\n initializeIntersectionObserver() {\r\n let observerTimeout: any;\r\n this.observer = new IntersectionObserver(([entry]) => {\r\n clearTimeout(observerTimeout);\r\n observerTimeout = setTimeout(() => {\r\n if (entry.isIntersecting) {\r\n this.inViewport.set(true);\r\n this.startAnimations();\r\n } else {\r\n this.inViewport.set(false);\r\n this.generatePaths();\r\n }\r\n }, 100);\r\n });\r\n\r\n // Observe the component\r\n if (this.observer && this.componentRef.nativeElement) {\r\n this.observer.observe(this.componentRef.nativeElement);\r\n }\r\n\r\n if (this.animationFrameId) {\r\n cancelAnimationFrame(this.animationFrameId);\r\n }\r\n }\r\n\r\n startAnimations(): void {\r\n this.paths().forEach((_, index) => {\r\n const delay = this.delays()[index] * 1000;\r\n const duration = this.durations()[index] * 1000;\r\n\r\n setTimeout(() => {\r\n this.animateGradient(index, duration);\r\n }, delay);\r\n });\r\n }\r\n\r\n animateGradient(index: number, duration: number): void {\r\n const startTime = performance.now();\r\n const randomY2Value = 93 + Math.random() * 8;\r\n\r\n const animate = (currentTime: number) => {\r\n if (!this.inViewport()) {\r\n return;\r\n }\r\n\r\n const elapsed = currentTime - startTime;\r\n const progress = Math.min(elapsed / duration, 1);\r\n\r\n this.x1.update(a => (a[index] = `${progress*100}%`, a));\r\n this.x2.update(a => (a[index] = `${progress*95}%`, a));\r\n this.y1.update(a => (a[index] = `${progress*100}%`, a));\r\n this.y2.update(a => (a[index] = `${progress*randomY2Value}%`, a));\r\n\r\n this.updateGradientAttributes(index);\r\n\r\n if (progress < 1) {\r\n this.animationFrameId = requestAnimationFrame(animate);\r\n } else {\r\n this.restartAnimation(index, duration);\r\n }\r\n };\r\n\r\n this.animationFrameId = requestAnimationFrame(animate);\r\n }\r\n\r\n updateGradientAttributes(index: number): void {\r\n const gradientElement = document.getElementById(`linearGradient-${index}`);\r\n if (gradientElement) {\r\n gradientElement.setAttribute('x1', this.x1()[index]);\r\n gradientElement.setAttribute('x2', this.x2()[index]);\r\n gradientElement.setAttribute('y1', this.y1()[index]);\r\n gradientElement.setAttribute('y2', this.y2()[index]);\r\n }\r\n }\r\n\r\n restartAnimation(index: number, duration: number): void {\r\n setTimeout(() => {\r\n this.x1.update(a => (a[index] = `0%`, a));\r\n this.x2.update(a => (a[index] = `0%`, a));\r\n this.y1.update(a => (a[index] = `0%`, a));\r\n this.y2.update(a => (a[index] = `0%`, a));\r\n\r\n this.animateGradient(index, duration);\r\n }, Math.random() * 10000);\r\n }\r\n}\r\n","<div class=\"om-background-beams\" #OmBackgroundBeams>\r\n <div class=\"om-background-beams-background\">\r\n <div class=\"custom-svg-wrapper\">\r\n <svg\r\n class=\"custom-svg\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n viewBox=\"0 0 696 316\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M-380 -189C-380 -189 -312 216 152 343C616 470 684 875 684 875\"\r\n stroke=\"url(#paint0_radial_242_278)\"\r\n stroke-opacity=\"0.05\"\r\n stroke-width=\"0.5\"\r\n ></path>\r\n\r\n <!-- Dynamic motion path generation with Angular -->\r\n @for (path of paths(); track $index) {\r\n <path\r\n [attr.d]=\"path\"\r\n [attr.stroke]=\"pathColor\"\r\n stroke-opacity=\"1\"\r\n stroke-width=\"0.5\"\r\n ></path>\r\n\r\n <path\r\n [attr.d]=\"path\"\r\n [attr.stroke]=\"'url(#linearGradient-' + $index + ')'\"\r\n stroke-opacity=\"1\"\r\n stroke-width=\"0.5\"\r\n [attr.id]=\"'path-' + $index\"\r\n ></path>\r\n }\r\n\r\n <!-- Definitions for gradients -->\r\n <defs>\r\n @for (path of paths(); track $index) {\r\n <linearGradient\r\n [attr.id]=\"'linearGradient-' + $index\"\r\n [attr.x1]=\"x1()[$index]\"\r\n [attr.x2]=\"x2()[$index]\"\r\n [attr.y1]=\"y1()[$index]\"\r\n [attr.y2]=\"y2()[$index]\"\r\n >\r\n <stop [attr.stop-color]=\"gradientColors()[0]\" stop-opacity=\"0\"></stop>\r\n <stop [attr.stop-color]=\"gradientColors()[0]\"></stop>\r\n <stop offset=\"32.5%\" [attr.stop-color]=\"gradientColors()[1]\"></stop>\r\n <stop offset=\"100%\" [attr.stop-color]=\"gradientColors()[2]\" stop-opacity=\"0\"></stop>\r\n </linearGradient>\r\n }\r\n\r\n <!-- Radial Gradient -->\r\n <radialGradient\r\n id=\"paint0_radial_242_278\"\r\n cx=\"0\"\r\n cy=\"0\"\r\n r=\"1\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n gradientTransform=\"translate(352 34) rotate(90) scale(555 1560.62)\"\r\n >\r\n <stop offset=\"0.0666667\" stop-color=\"#d1d5db\"></stop>\r\n <stop offset=\"0.243243\" stop-color=\"#d1d5db\"></stop>\r\n <stop offset=\"0.43594\" stop-color=\"white\" stop-opacity=\"0\"></stop>\r\n </radialGradient>\r\n </defs>\r\n </svg>\r\n </div>\r\n </div>\r\n <ng-content></ng-content>\r\n</div>\r\n","/*\r\n * Public API Surface of ngx-background-beams\r\n */\r\n\r\nexport * from './lib/ngx-background-beams.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}