@namespace Frontend.Libs.Generic.Carousel.Components @using System.Timers @using Frontend.Libs.Generic.Carousel.Components
@if (Items != null && Items.Any()) { var currentItem = Items[CurrentIndex]; var isEven = CurrentIndex % 2 == 0;

@_displayedText

}
@code { [Parameter] public List Items { get; set; } = new(); [Parameter] public int DurationSeconds { get; set; } = 3; private int CurrentIndex { get; set; } = 0; private string _displayedText = ""; private bool _underlineExpanded = false; private Timer? _timer; protected override void OnInitialized() { if (Items.Any()) { StartSlideTimer(); StartAnimationSequence(Items[CurrentIndex].Text); } } private void StartSlideTimer() { _timer = new Timer(DurationSeconds * 1000); _timer.Elapsed += OnSlideTimerElapsed; _timer.AutoReset = true; _timer.Start(); } private void OnSlideTimerElapsed(object? sender, ElapsedEventArgs e) { InvokeAsync(() => { CurrentIndex = (CurrentIndex + 1) % Items.Count; StartAnimationSequence(Items[CurrentIndex].Text); StateHasChanged(); }); } private async void StartAnimationSequence(string text) { // Reset state _displayedText = ""; _underlineExpanded = false; StateHasChanged(); // Typing Effect foreach (var c in text) { _displayedText += c; StateHasChanged(); await Task.Delay(50); // Typing speed } // Expand Underline _underlineExpanded = true; StateHasChanged(); } public void Dispose() { _timer?.Dispose(); } }