@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;
}
@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();
}
}