// Copyright (c) MudBlazor 2021 // MudBlazor licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using Connected.Annotations; using Connected.Extensions; using Connected.Utilities; using Microsoft.AspNetCore.Components; namespace Connected.Components; public partial class Timeline : ItemsControlBase { [CascadingParameter(Name = "RightToLeft")] public bool RightToLeft { get; set; } /// /// Sets the orientation of the timeline and its timeline items. /// [Parameter] [Category(CategoryTypes.Timeline.Behavior)] public TimelineOrientation TimelineOrientation { get; set; } = TimelineOrientation.Vertical; /// /// The position the timeline itself and how the timeline items should be displayed. /// [Parameter] [Category(CategoryTypes.Timeline.Behavior)] public TimelinePosition TimelinePosition { get; set; } = TimelinePosition.Alternate; /// /// Aligns the dot and any item modifiers is changed, in default mode they are centered to the item. /// [Parameter] [Category(CategoryTypes.Timeline.Behavior)] public TimelineAlign TimelineAlign { get; set; } = TimelineAlign.Default; /// /// Reverse the order of TimelineItems when TimelinePosition is set to Alternate. /// [Parameter] [Category(CategoryTypes.Timeline.Behavior)] public bool Reverse { get; set; } = false; /// /// If true, disables all TimelineItem modifiers, like adding a caret to a MudCard. /// [Parameter] [Category(CategoryTypes.Timeline.Behavior)] public bool DisableModifiers { get; set; } = false; protected string Classnames => new CssBuilder("mud-timeline") .AddClass($"mud-timeline-{TimelineOrientation.ToDescriptionString()}") .AddClass($"mud-timeline-position-{ConvertTimelinePosition().ToDescriptionString()}") .AddClass($"mud-timeline-reverse", Reverse && TimelinePosition == TimelinePosition.Alternate) .AddClass($"mud-timeline-align-{TimelineAlign.ToDescriptionString()}") .AddClass($"mud-timeline-modifiers", !DisableModifiers) .AddClass($"mud-timeline-rtl", RightToLeft) .AddClass(Class) .Build(); private TimelinePosition ConvertTimelinePosition() { if (TimelineOrientation == TimelineOrientation.Vertical) { return TimelinePosition switch { TimelinePosition.Left => RightToLeft ? TimelinePosition.End : TimelinePosition.Start, TimelinePosition.Right => RightToLeft ? TimelinePosition.Start : TimelinePosition.End, TimelinePosition.Top => TimelinePosition.Alternate, TimelinePosition.Bottom => TimelinePosition.Alternate, _ => TimelinePosition }; } else { return TimelinePosition switch { TimelinePosition.Start => TimelinePosition.Alternate, TimelinePosition.Left => TimelinePosition.Alternate, TimelinePosition.Right => TimelinePosition.Alternate, TimelinePosition.End => TimelinePosition.Alternate, _ => TimelinePosition }; } } }