import { Component } from '@angular/core'; import { CommonModule } from '@angular/common'; import { BackdropComponent } from '../../../../../ui-essentials/src/lib/components/overlays/backdrop/backdrop.component'; @Component({ selector: 'ui-backdrop-demo', standalone: true, imports: [CommonModule, BackdropComponent], template: `

Backdrop Demo

Basic Backdrop

Variants

@for (variant of variants; track variant) { }
@if (currentVariant) {

{{ currentVariant | titlecase }} Backdrop

Click backdrop to close

}

Blur Effect

Blur Backdrop

Notice the blur effect behind this content

Opacity Control

Opacity: {{ currentOpacity }}

Adjust the opacity using the slider above

Z-Index & Stacking

First Backdrop (z-index: 1000)

This is behind the second backdrop

Second Backdrop (z-index: 1010)

This is in front of the first backdrop

Non-clickable Backdrop

Non-clickable Backdrop

This backdrop cannot be clicked to close

Event Log

@for (event of eventLog; track $index) {
{{ event }}
} @empty {
No events yet. Interact with backdrops above.
}
`, styleUrl: './backdrop-demo.component.scss' }) export class BackdropDemoComponent { // Basic backdrop showBasicBackdrop = false; // Variant backdrop variants = ['default', 'blur', 'dark', 'light'] as const; currentVariant: typeof this.variants[number] | null = null; showVariant = false; // Blur backdrop showBlurBackdrop = false; // Opacity backdrop showOpacityBackdrop = false; currentOpacity = 0.5; // Stacked backdrops showFirstBackdrop = false; showSecondBackdrop = false; // Non-clickable backdrop showNonClickableBackdrop = false; // Event log eventLog: string[] = []; toggleBasicBackdrop(): void { this.showBasicBackdrop = !this.showBasicBackdrop; this.logEvent(`Basic backdrop ${this.showBasicBackdrop ? 'opened' : 'closed'}`); } showVariantBackdrop(variant: typeof this.variants[number]): void { this.currentVariant = variant; this.showVariant = true; this.logEvent(`${variant} backdrop opened`); } handleVariantVisibilityChange(visible: boolean): void { this.showVariant = visible; if (!visible && this.currentVariant) { this.logEvent(`${this.currentVariant} backdrop closed`); this.currentVariant = null; } } toggleBlurBackdrop(): void { this.showBlurBackdrop = !this.showBlurBackdrop; this.logEvent(`Blur backdrop ${this.showBlurBackdrop ? 'opened' : 'closed'}`); } updateOpacity(event: Event): void { const target = event.target as HTMLInputElement; this.currentOpacity = parseFloat(target.value); } toggleOpacityBackdrop(): void { this.showOpacityBackdrop = !this.showOpacityBackdrop; this.logEvent(`Opacity backdrop ${this.showOpacityBackdrop ? 'opened' : 'closed'} with opacity ${this.currentOpacity}`); } showStackedBackdrops(): void { this.showFirstBackdrop = true; this.showSecondBackdrop = true; this.logEvent('Stacked backdrops opened'); } hideStackedBackdrops(): void { this.showFirstBackdrop = false; this.showSecondBackdrop = false; this.logEvent('Stacked backdrops closed'); } handleStackedBackdropChange(visible: boolean): void { if (!visible) { this.hideStackedBackdrops(); } } toggleNonClickableBackdrop(): void { this.showNonClickableBackdrop = !this.showNonClickableBackdrop; this.logEvent(`Non-clickable backdrop ${this.showNonClickableBackdrop ? 'opened' : 'closed'}`); } handleBackdropClick(message: string): void { this.logEvent(message); } private logEvent(message: string): void { const timestamp = new Date().toLocaleTimeString(); this.eventLog.unshift(`[${timestamp}] ${message}`); // Keep only last 10 events if (this.eventLog.length > 10) { this.eventLog = this.eventLog.slice(0, 10); } } clearEventLog(): void { this.eventLog = []; this.logEvent('Event log cleared'); } }