@@ -488,7 +509,9 @@
aria-disabled="@(IsEnabled is false)"
style="@Styles?.TimePickerIncreaseMinuteButton"
class="bit-cal-tbt @Classes?.TimePickerIncreaseMinuteButton">
-
+
-
+
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Calendar/BitCalendar.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Calendar/BitCalendar.razor.cs
index adec01d13d..031b349f59 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Calendar/BitCalendar.razor.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Calendar/BitCalendar.razor.cs
@@ -136,6 +136,22 @@ private int _minuteView
///
[Parameter] public string GoToNextYearTitle { get; set; } = "Go to next year {0}";
+ ///
+ /// Gets or sets the icon to display in the GoToNow button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? GoToNowIcon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon to display in the GoToNow button from the built-in Fluent UI icons.
+ ///
+ [Parameter] public string? GoToNowIconName { get; set; }
+
+ ///
+ /// The title of the GoToNow button (tooltip).
+ ///
+ [Parameter] public string GoToNowTitle { get; set; } = "Go to now";
+
///
/// The title of the Go to previous month button (tooltip).
///
@@ -151,20 +167,32 @@ private int _minuteView
///
[Parameter] public string GoToPrevYearTitle { get; set; } = "Go to previous year {0}";
+ ///
+ /// Gets or sets the icon to display in the GoToToday button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? GoToTodayIcon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon to display in the GoToToday button from the built-in Fluent UI icons.
+ ///
+ [Parameter] public string? GoToTodayIconName { get; set; }
+
///
/// The title of the GoToToday button (tooltip).
///
[Parameter] public string GoToTodayTitle { get; set; } = "Go to today";
///
- /// The title of the GoToNow button (tooltip).
+ /// Gets or sets the icon to display in the HideTimePicker button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
///
- [Parameter] public string GoToNowTitle { get; set; } = "Go to now";
+ [Parameter] public BitIconInfo? HideTimePickerIcon { get; set; }
///
- /// The title of the ShowTimePicker button (tooltip).
+ /// Gets or sets the name of the icon to display in the HideTimePicker button from the built-in Fluent UI icons.
///
- [Parameter] public string ShowTimePickerTitle { get; set; } = "Show time picker";
+ [Parameter] public string? HideTimePickerIconName { get; set; }
///
/// The title of the HideTimePicker button (tooltip).
@@ -182,16 +210,14 @@ private int _minuteView
[Parameter] public bool HighlightSelectedMonth { get; set; }
///
- /// The custom validation error message for the invalid value.
+ /// Determines increment/decrement steps for calendar's hour.
///
- [Parameter] public string? InvalidErrorMessage { get; set; }
+ [Parameter] public int HourStep { get; set; } = 1;
///
- /// Whether the month picker is shown or hidden.
+ /// The custom validation error message for the invalid value.
///
- [Parameter]
- [CallOnSet(nameof(OnSetParameters))]
- public bool ShowMonthPicker { get; set; } = true;
+ [Parameter] public string? InvalidErrorMessage { get; set; }
///
/// The maximum allowable date of the calendar.
@@ -207,6 +233,11 @@ private int _minuteView
[CallOnSet(nameof(OnSetParameters))]
public DateTimeOffset? MinDate { get; set; }
+ ///
+ /// Determines increment/decrement steps for calendar's minute.
+ ///
+ [Parameter] public int MinuteStep { get; set; } = 1;
+
///
/// Used to customize how content inside the month cell is rendered.
///
@@ -218,29 +249,102 @@ private int _minuteView
[Parameter] public string MonthPickerToggleTitle { get; set; } = "{0}, change month";
///
- /// Show month picker on top of date picker when visible.
+ /// Gets or sets the icon to display in the Go to next month button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
///
- [Parameter] public bool ShowMonthPickerAsOverlay { get; set; }
+ [Parameter] public BitIconInfo? NextMonthNavIcon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon to display in the Go to next month button from the built-in Fluent UI icons.
+ ///
+ [Parameter] public string? NextMonthNavIconName { get; set; }
+
+ ///
+ /// Gets or sets the icon to display in the Go to next year button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? NextYearNavIcon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon to display in the Go to next year button from the built-in Fluent UI icons.
+ ///
+ [Parameter] public string? NextYearNavIconName { get; set; }
+
+ ///
+ /// Gets or sets the icon to display in the Go to next year range button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? NextYearRangeNavIcon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon to display in the Go to next year range button from the built-in Fluent UI icons.
+ ///
+ [Parameter] public string? NextYearRangeNavIconName { get; set; }
///
/// Callback for when the user selects a date.
///
[Parameter] public EventCallback OnSelectDate { get; set; }
+ ///
+ /// Gets or sets the icon to display in the Go to previous month button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? PrevMonthNavIcon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon to display in the Go to previous month button from the built-in Fluent UI icons.
+ ///
+ [Parameter] public string? PrevMonthNavIconName { get; set; }
+
+ ///
+ /// Gets or sets the icon to display in the Go to previous year button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? PrevYearNavIcon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon to display in the Go to previous year button from the built-in Fluent UI icons.
+ ///
+ [Parameter] public string? PrevYearNavIconName { get; set; }
+
+ ///
+ /// Gets or sets the icon to display in the Go to previous year range button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? PrevYearRangeNavIcon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon to display in the Go to previous year range button from the built-in Fluent UI icons.
+ ///
+ [Parameter] public string? PrevYearRangeNavIconName { get; set; }
+
///
/// The text of selected date aria-atomic of the calendar.
///
[Parameter] public string SelectedDateAriaAtomic { get; set; } = "Selected date {0}";
+ ///
+ /// Whether the GoToNow button should be shown or not.
+ ///
+ [Parameter] public bool ShowGoToNow { get; set; } = true;
+
///
/// Whether the GoToToday button should be shown or not.
///
[Parameter] public bool ShowGoToToday { get; set; } = true;
///
- /// Whether the GoToNow button should be shown or not.
+ /// Whether the month picker is shown or hidden.
///
- [Parameter] public bool ShowGoToNow { get; set; } = true;
+ [Parameter]
+ [CallOnSet(nameof(OnSetParameters))]
+ public bool ShowMonthPicker { get; set; } = true;
+
+ ///
+ /// Show month picker on top of date picker when visible.
+ ///
+ [Parameter] public bool ShowMonthPickerAsOverlay { get; set; }
///
/// Whether the time picker should be shown or not.
@@ -250,68 +354,118 @@ private int _minuteView
public bool ShowTimePicker { get; set; }
///
- /// The time format of the time-picker, 24H or 12H.
+ /// Show time picker on top of date picker when visible.
///
- [Parameter] public BitTimeFormat TimeFormat { get; set; }
+ [Parameter] public bool ShowTimePickerAsOverlay { get; set; }
///
- /// TimeZone for the DatePicker.
+ /// Gets or sets the icon to display in the ShowTimePicker button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
///
- [Parameter]
- [CallOnSet(nameof(OnSetParameters))]
- public TimeZoneInfo? TimeZone { get; set; }
+ [Parameter] public BitIconInfo? ShowTimePickerIcon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon to display in the ShowTimePicker button from the built-in Fluent UI icons.
+ ///
+ [Parameter] public string? ShowTimePickerIconName { get; set; }
+
+ ///
+ /// The title of the ShowTimePicker button (tooltip).
+ ///
+ [Parameter] public string ShowTimePickerTitle { get; set; } = "Show time picker";
///
/// Whether the week number (weeks 1 to 53) should be shown before each week row.
///
[Parameter] public bool ShowWeekNumbers { get; set; }
+ ///
+ /// Specifies the date and time of the calendar when it is showing without any selected value.
+ ///
+ [Parameter]
+ [CallOnSet(nameof(OnSetParameters))]
+ public DateTimeOffset? StartingValue { get; set; }
+
///
/// Custom CSS styles for different parts of the BitCalendar component.
///
[Parameter] public BitCalendarClassStyles? Styles { get; set; }
///
- /// The title of the week number (tooltip).
+ /// The time format of the time-picker, 24H or 12H.
///
- [Parameter] public string WeekNumberTitle { get; set; } = "Week number {0}";
+ [Parameter] public BitTimeFormat TimeFormat { get; set; }
///
- /// Used to customize how content inside the year cell is rendered.
+ /// Gets or sets the icon to display in the decrease-hour button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
///
- [Parameter] public RenderFragment? YearCellTemplate { get; set; }
+ [Parameter] public BitIconInfo? TimePickerDecreaseHourIcon { get; set; }
///
- /// The title of the year picker's toggle (tooltip).
+ /// Gets or sets the name of the icon to display in the decrease-hour button from the built-in Fluent UI icons.
///
- [Parameter] public string YearPickerToggleTitle { get; set; } = "{0}, change year";
+ [Parameter] public string? TimePickerDecreaseHourIconName { get; set; }
///
- /// The title of the year range picker's toggle (tooltip).
+ /// Gets or sets the icon to display in the decrease-minute button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
///
- [Parameter] public string YearRangePickerToggleTitle { get; set; } = "{0} - {1}, change month";
+ [Parameter] public BitIconInfo? TimePickerDecreaseMinuteIcon { get; set; }
///
- /// Show month picker on top of date picker when visible.
+ /// Gets or sets the name of the icon to display in the decrease-minute button from the built-in Fluent UI icons.
///
- [Parameter] public bool ShowTimePickerAsOverlay { get; set; }
+ [Parameter] public string? TimePickerDecreaseMinuteIconName { get; set; }
///
- /// Determines increment/decrement steps for calendar's hour.
+ /// Gets or sets the icon to display in the increase-hour button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
///
- [Parameter] public int HourStep { get; set; } = 1;
+ [Parameter] public BitIconInfo? TimePickerIncreaseHourIcon { get; set; }
///
- /// Determines increment/decrement steps for calendar's minute.
+ /// Gets or sets the name of the icon to display in the increase-hour button from the built-in Fluent UI icons.
///
- [Parameter] public int MinuteStep { get; set; } = 1;
+ [Parameter] public string? TimePickerIncreaseHourIconName { get; set; }
///
- /// Specifies the date and time of the calendar when it is showing without any selected value.
+ /// Gets or sets the icon to display in the increase-minute button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? TimePickerIncreaseMinuteIcon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon to display in the increase-minute button from the built-in Fluent UI icons.
+ ///
+ [Parameter] public string? TimePickerIncreaseMinuteIconName { get; set; }
+
+ ///
+ /// TimeZone for the DatePicker.
///
[Parameter]
[CallOnSet(nameof(OnSetParameters))]
- public DateTimeOffset? StartingValue { get; set; }
+ public TimeZoneInfo? TimeZone { get; set; }
+
+ ///
+ /// The title of the week number (tooltip).
+ ///
+ [Parameter] public string WeekNumberTitle { get; set; } = "Week number {0}";
+
+ ///
+ /// Used to customize how content inside the year cell is rendered.
+ ///
+ [Parameter] public RenderFragment? YearCellTemplate { get; set; }
+
+ ///
+ /// The title of the year picker's toggle (tooltip).
+ ///
+ [Parameter] public string YearPickerToggleTitle { get; set; } = "{0}, change year";
+
+ ///
+ /// The title of the year range picker's toggle (tooltip).
+ ///
+ [Parameter] public string YearRangePickerToggleTitle { get; set; } = "{0} - {1}, change month";
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Calendar/BitCalendar.scss b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Calendar/BitCalendar.scss
index f7fcfeeb6a..1fae265f32 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Calendar/BitCalendar.scss
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Calendar/BitCalendar.scss
@@ -1,4 +1,4 @@
-@import "../../../Styles/functions.scss";
+@import "../../../Styles/functions.scss";
.bit-cal {
margin: 0;
@@ -275,7 +275,7 @@
background-color: transparent;
.bit-icon,
- .bit-cal-gti {
+ .bit-cal-ico {
color: $clr-fg-dis;
}
}
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Checkbox/BitCheckbox.razor b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Checkbox/BitCheckbox.razor
index f64dc50535..e087795231 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Checkbox/BitCheckbox.razor
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Checkbox/BitCheckbox.razor
@@ -1,4 +1,4 @@
-@namespace Bit.BlazorUI
+@namespace Bit.BlazorUI
@inherits BitInputBase
@@ -593,7 +623,9 @@
aria-disabled="@(IsEnabled is false)"
style="@Styles?.TimePickerIncreaseMinuteButton"
class="bit-dtp-tbt @Classes?.TimePickerIncreaseMinuteButton">
-
+
-
+
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/DatePicker/BitDatePicker.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/DatePicker/BitDatePicker.razor.cs
index 186d313710..adf9eec359 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/DatePicker/BitDatePicker.razor.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/DatePicker/BitDatePicker.razor.cs
@@ -134,6 +134,33 @@ private int _minuteView
///
[Parameter] public BitDatePickerClassStyles? Classes { get; set; }
+ ///
+ /// The icon to display inside the clear button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? ClearButtonIcon { get; set; }
+
+ ///
+ /// The name of the clear button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? ClearButtonIconName { get; set; }
+
+ ///
+ /// The icon to display inside the close button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? CloseButtonIcon { get; set; }
+
+ ///
+ /// The name of the close button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? CloseButtonIconName { get; set; }
+
+ ///
+ /// The title of the CloseDatePicker button (tooltip).
+ ///
+ [Parameter] public string CloseDatePickerTitle { get; set; } = "Close date picker";
+
///
/// CultureInfo for the DatePicker.
///
@@ -166,6 +193,22 @@ private int _minuteView
///
[Parameter] public string GoToNextYearTitle { get; set; } = "Go to next year {0}";
+ ///
+ /// The icon to display inside the GoToNow button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? GoToNowIcon { get; set; }
+
+ ///
+ /// The name of the GoToNow button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? GoToNowIconName { get; set; }
+
+ ///
+ /// The title of the GoToNow button (tooltip).
+ ///
+ [Parameter] public string GoToNowTitle { get; set; } = "Go to now";
+
///
/// The title of the Go to previous month button (tooltip).
///
@@ -182,35 +225,42 @@ private int _minuteView
[Parameter] public string GoToPrevYearTitle { get; set; } = "Go to previous year {0}";
///
- /// The title of the GoToToday button (tooltip).
+ /// The icon to display inside the GoToToday button.
+ /// Takes precedence over when both are set.
///
- [Parameter] public string GoToTodayTitle { get; set; } = "Go to today";
+ [Parameter] public BitIconInfo? GoToTodayIcon { get; set; }
///
- /// The title of the GoToNow button (tooltip).
+ /// The name of the GoToToday button's icon from the built-in Fluent UI icon set.
///
- [Parameter] public string GoToNowTitle { get; set; } = "Go to now";
+ [Parameter] public string? GoToTodayIconName { get; set; }
///
- /// The title of the ShowTimePicker button (tooltip).
+ /// The title of the GoToToday button (tooltip).
///
- [Parameter] public string ShowTimePickerTitle { get; set; } = "Show time picker";
+ [Parameter] public string GoToTodayTitle { get; set; } = "Go to today";
///
- /// The title of the HideTimePicker button (tooltip).
+ /// Determines if the DatePicker has a border.
///
- [Parameter] public string HideTimePickerTitle { get; set; } = "Hide time picker";
+ [Parameter, ResetClassBuilder]
+ public bool HasBorder { get; set; } = true;
///
- /// The title of the CloseDatePicker button (tooltip).
+ /// The icon to display inside the HideTimePicker button.
+ /// Takes precedence over when both are set.
///
- [Parameter] public string CloseDatePickerTitle { get; set; } = "Close date picker";
+ [Parameter] public BitIconInfo? HideTimePickerIcon { get; set; }
///
- /// Determines if the DatePicker has a border.
+ /// The name of the HideTimePicker button's icon from the built-in Fluent UI icon set.
///
- [Parameter, ResetClassBuilder]
- public bool HasBorder { get; set; } = true;
+ [Parameter] public string? HideTimePickerIconName { get; set; }
+
+ ///
+ /// The title of the HideTimePicker button (tooltip).
+ ///
+ [Parameter] public string HideTimePickerTitle { get; set; } = "Hide time picker";
///
/// Whether the month picker should highlight the current month.
@@ -223,9 +273,24 @@ private int _minuteView
[Parameter] public bool HighlightSelectedMonth { get; set; }
///
- /// Custom template for the DatePicker's icon.
+ /// Determines increment/decrement steps for date-picker's hour.
///
- [Parameter] public RenderFragment? IconTemplate { get; set; }
+ [Parameter] public int HourStep { get; set; } = 1;
+
+ ///
+ /// The icon to display in the DatePicker input.
+ /// Takes precedence over when both are set.
+ ///
+ ///
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ ///
+ /// Bootstrap: Icon="BitIconInfo.Bi("calendar3")"
+ /// FontAwesome: Icon="BitIconInfo.Fa("solid calendar")"
+ /// Custom CSS: Icon="BitIconInfo.Css("my-icon-class")"
+ ///
+ [Parameter] public BitIconInfo? Icon { get; set; }
///
/// Determines the location of the DatePicker's icon.
@@ -234,9 +299,18 @@ private int _minuteView
public BitIconLocation IconLocation { get; set; } = BitIconLocation.Right;
///
- /// The name of the DatePicker's icon.
+ /// The name of the DatePicker's icon from the built-in Fluent UI icon set.
///
- [Parameter] public string IconName { get; set; } = "CalendarMirrored";
+ ///
+ /// The icon name should be from the Fluent UI icon set (e.g., BitIconName.CalendarMirrored).
+ /// For external icon libraries, use instead.
+ ///
+ [Parameter] public string? IconName { get; set; }
+
+ ///
+ /// Custom template for the DatePicker's icon.
+ ///
+ [Parameter] public RenderFragment? IconTemplate { get; set; }
///
/// The custom validation error message for the invalid value.
@@ -278,6 +352,11 @@ private int _minuteView
[CallOnSet(nameof(OnSetParameters))]
public DateTimeOffset? MinDate { get; set; }
+ ///
+ /// Determines increment/decrement steps for date-picker's minute.
+ ///
+ [Parameter] public int MinuteStep { get; set; } = 1;
+
///
/// The selection mode of the DatePicker (DatePicker or MonthPicker).
///
@@ -295,6 +374,39 @@ private int _minuteView
///
[Parameter] public string MonthPickerToggleTitle { get; set; } = "{0}, change month";
+ ///
+ /// The icon to display inside the next-month navigation button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? NextMonthNavIcon { get; set; }
+
+ ///
+ /// The name of the next-month navigation button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? NextMonthNavIconName { get; set; }
+
+ ///
+ /// The icon to display inside the next-year navigation button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? NextYearNavIcon { get; set; }
+
+ ///
+ /// The name of the next-year navigation button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? NextYearNavIconName { get; set; }
+
+ ///
+ /// The icon to display inside the next-year-range navigation button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? NextYearRangeNavIcon { get; set; }
+
+ ///
+ /// The name of the next-year-range navigation button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? NextYearRangeNavIconName { get; set; }
+
///
/// The callback for clicking on the DatePicker's input.
///
@@ -316,14 +428,42 @@ private int _minuteView
[Parameter] public EventCallback OnFocusOut { get; set; }
///
- /// The text of selected date aria-atomic of the DatePicker.
+ /// The placeholder text of the DatePicker's input.
///
- [Parameter] public string SelectedDateAriaAtomic { get; set; } = "Selected date {0}";
+ [Parameter] public string Placeholder { get; set; } = string.Empty;
///
- /// The placeholder text of the DatePicker's input.
+ /// The icon to display inside the previous-month navigation button.
+ /// Takes precedence over when both are set.
///
- [Parameter] public string Placeholder { get; set; } = string.Empty;
+ [Parameter] public BitIconInfo? PrevMonthNavIcon { get; set; }
+
+ ///
+ /// The name of the previous-month navigation button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? PrevMonthNavIconName { get; set; }
+
+ ///
+ /// The icon to display inside the previous-year navigation button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? PrevYearNavIcon { get; set; }
+
+ ///
+ /// The name of the previous-year navigation button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? PrevYearNavIconName { get; set; }
+
+ ///
+ /// The icon to display inside the previous-year-range navigation button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? PrevYearRangeNavIcon { get; set; }
+
+ ///
+ /// The name of the previous-year-range navigation button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? PrevYearRangeNavIconName { get; set; }
///
/// Enables the responsive mode in small screens.
@@ -331,20 +471,30 @@ private int _minuteView
[Parameter] public bool Responsive { get; set; }
///
- /// Whether the DatePicker's close button should be shown or not.
+ /// The text of selected date aria-atomic of the DatePicker.
///
- [Parameter] public bool ShowCloseButton { get; set; }
+ [Parameter] public string SelectedDateAriaAtomic { get; set; } = "Selected date {0}";
///
- /// Whether the GoToToday button should be shown or not.
+ /// Whether the clear button should be shown or not when the BitDatePicker has a value.
///
- [Parameter] public bool ShowGoToToday { get; set; } = true;
+ [Parameter] public bool ShowClearButton { get; set; }
+
+ ///
+ /// Whether the DatePicker's close button should be shown or not.
+ ///
+ [Parameter] public bool ShowCloseButton { get; set; }
///
/// Whether the GoToNow button should be shown or not.
///
[Parameter] public bool ShowGoToNow { get; set; } = true;
+ ///
+ /// Whether the GoToToday button should be shown or not.
+ ///
+ [Parameter] public bool ShowGoToToday { get; set; } = true;
+
///
/// Show month picker on top of date picker when visible.
///
@@ -359,11 +509,48 @@ private int _minuteView
[CallOnSet(nameof(OnSetParameters))]
public bool ShowTimePicker { get; set; }
+ ///
+ /// Show the time picker as an overlay on top of the date picker when visible.
+ ///
+ [Parameter]
+ [CallOnSet(nameof(OnSetParameters))]
+ public bool ShowTimePickerAsOverlay { get; set; }
+
+ ///
+ /// The icon to display inside the ShowTimePicker button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? ShowTimePickerIcon { get; set; }
+
+ ///
+ /// The name of the ShowTimePicker button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? ShowTimePickerIconName { get; set; }
+
+ ///
+ /// The title of the ShowTimePicker button (tooltip).
+ ///
+ [Parameter] public string ShowTimePickerTitle { get; set; } = "Show time picker";
+
///
/// Whether the week number (weeks 1 to 53) should be shown before each week row.
///
[Parameter] public bool ShowWeekNumbers { get; set; }
+ ///
+ /// Whether the date-picker is rendered standalone or with the input component and callout.
+ ///
+ [Parameter, ResetClassBuilder]
+ [CallOnSet(nameof(OnSetParameters))]
+ public bool Standalone { get; set; }
+
+ ///
+ /// Specifies the date and time of the date-picker when it is opened without any selected value.
+ ///
+ [Parameter]
+ [CallOnSet(nameof(OnSetParameters))]
+ public DateTimeOffset? StartingValue { get; set; }
+
///
/// Custom CSS styles for different parts of the BitDatePicker component.
///
@@ -375,73 +562,81 @@ private int _minuteView
[Parameter] public BitTimeFormat TimeFormat { get; set; }
///
- /// TimeZone for the DatePicker.
+ /// The icon to display inside the time-picker's decrease-hour button.
+ /// Takes precedence over when both are set.
///
- [Parameter]
- [CallOnSet(nameof(OnSetParameters))]
- public TimeZoneInfo? TimeZone { get; set; }
+ [Parameter] public BitIconInfo? TimePickerDecreaseHourIcon { get; set; }
///
- /// Whether or not the text field of the DatePicker is underlined.
+ /// The name of the time-picker's decrease-hour button icon from the built-in Fluent UI icon set.
///
- [Parameter, ResetClassBuilder]
- public bool Underlined { get; set; }
+ [Parameter] public string? TimePickerDecreaseHourIconName { get; set; }
///
- /// The title of the week number (tooltip).
+ /// The icon to display inside the time-picker's decrease-minute button.
+ /// Takes precedence over when both are set.
///
- [Parameter] public string WeekNumberTitle { get; set; } = "Week number {0}";
+ [Parameter] public BitIconInfo? TimePickerDecreaseMinuteIcon { get; set; }
///
- /// Custom template to render the year cells of the DatePicker.
+ /// The name of the time-picker's decrease-minute button icon from the built-in Fluent UI icon set.
///
- [Parameter] public RenderFragment? YearCellTemplate { get; set; }
+ [Parameter] public string? TimePickerDecreaseMinuteIconName { get; set; }
///
- /// The title of the year picker's toggle (tooltip).
+ /// The icon to display inside the time-picker's increase-hour button.
+ /// Takes precedence over when both are set.
///
- [Parameter] public string YearPickerToggleTitle { get; set; } = "{0}, change year";
+ [Parameter] public BitIconInfo? TimePickerIncreaseHourIcon { get; set; }
///
- /// The title of the year range picker's toggle (tooltip).
+ /// The name of the time-picker's increase-hour button icon from the built-in Fluent UI icon set.
///
- [Parameter] public string YearRangePickerToggleTitle { get; set; } = "{0} - {1}, change month";
+ [Parameter] public string? TimePickerIncreaseHourIconName { get; set; }
///
- /// Show month picker on top of date picker when visible.
+ /// The icon to display inside the time-picker's increase-minute button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? TimePickerIncreaseMinuteIcon { get; set; }
+
+ ///
+ /// The name of the time-picker's increase-minute button icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? TimePickerIncreaseMinuteIconName { get; set; }
+
+ ///
+ /// TimeZone for the DatePicker.
///
[Parameter]
[CallOnSet(nameof(OnSetParameters))]
- public bool ShowTimePickerAsOverlay { get; set; }
+ public TimeZoneInfo? TimeZone { get; set; }
///
- /// Whether the clear button should be shown or not when the BitDatePicker has a value.
+ /// Whether or not the text field of the DatePicker is underlined.
///
- [Parameter] public bool ShowClearButton { get; set; }
+ [Parameter, ResetClassBuilder]
+ public bool Underlined { get; set; }
///
- /// Determines increment/decrement steps for date-picker's hour.
+ /// The title of the week number (tooltip).
///
- [Parameter] public int HourStep { get; set; } = 1;
+ [Parameter] public string WeekNumberTitle { get; set; } = "Week number {0}";
///
- /// Determines increment/decrement steps for date-picker's minute.
+ /// Custom template to render the year cells of the DatePicker.
///
- [Parameter] public int MinuteStep { get; set; } = 1;
+ [Parameter] public RenderFragment? YearCellTemplate { get; set; }
///
- /// Specifies the date and time of the date-picker when it is opened without any selected value.
+ /// The title of the year picker's toggle (tooltip).
///
- [Parameter]
- [CallOnSet(nameof(OnSetParameters))]
- public DateTimeOffset? StartingValue { get; set; }
+ [Parameter] public string YearPickerToggleTitle { get; set; } = "{0}, change year";
///
- /// Whether the date-picker is rendered standalone or with the input component and callout.
+ /// The title of the year range picker's toggle (tooltip).
///
- [Parameter, ResetClassBuilder]
- [CallOnSet(nameof(OnSetParameters))]
- public bool Standalone { get; set; }
+ [Parameter] public string YearRangePickerToggleTitle { get; set; } = "{0} - {1}, change month";
@@ -1318,46 +1513,18 @@ private void ResetCts()
private async Task ChangeHour(bool isNext)
{
- if (isNext)
- {
- _hour += HourStep;
- }
- else
- {
- _hour -= HourStep;
- }
+ var hourStep = Math.Clamp(Math.Abs(HourStep), 1, 23);
- if (_hour > 23)
- {
- _hour -= 24;
- }
- else if (_hour < 0)
- {
- _hour += 24;
- }
+ _hour = (_hour + (isNext ? hourStep : -hourStep) + 24) % 24;
await UpdateCurrentValue();
}
private async Task ChangeMinute(bool isNext)
{
- if (isNext)
- {
- _minute += MinuteStep;
- }
- else
- {
- _minute -= MinuteStep;
- }
+ var minuteStep = Math.Clamp(Math.Abs(MinuteStep), 1, 59);
- if (_minute > 59)
- {
- _minute -= 60;
- }
- else if (_minute < 0)
- {
- _minute += 60;
- }
+ _minute = (_minute + (isNext ? minuteStep : -minuteStep) + 60) % 60;
await UpdateCurrentValue();
}
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/DatePicker/BitDatePicker.scss b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/DatePicker/BitDatePicker.scss
index cd98fd27b1..26049d10d2 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/DatePicker/BitDatePicker.scss
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/DatePicker/BitDatePicker.scss
@@ -1,4 +1,4 @@
-@import "../../../Styles/functions.scss";
+@import "../../../Styles/functions.scss";
@import "../../../Styles/media-queries.scss";
.bit-dtp {
@@ -396,7 +396,7 @@
pointer-events: none;
background-color: transparent;
- .bit-dtp-gti,
+ .bit-dtp-cic,
.bit-icon {
color: $clr-fg-dis;
}
@@ -443,7 +443,7 @@
pointer-events: none;
background-color: transparent;
- .bit-dtp-gti,
+ .bit-dtp-cic,
.bit-icon {
color: $clr-fg-dis;
}
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/DateRangePicker/BitDateRangePicker.razor b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/DateRangePicker/BitDateRangePicker.razor
index 8ef5318401..876077bd6c 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/DateRangePicker/BitDateRangePicker.razor
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/DateRangePicker/BitDateRangePicker.razor
@@ -1,6 +1,28 @@
-@namespace Bit.BlazorUI
+@namespace Bit.BlazorUI
@inherits BitInputBase
+@{
+ var clearBtnIconCss = BitIconInfo.From(ClearButtonIcon, ClearButtonIconName ?? "Cancel")?.GetCssClasses();
+ var closeButtonIconCss = BitIconInfo.From(CloseButtonIcon, CloseButtonIconName ?? "Cancel")?.GetCssClasses();
+ var prevMonthNavIconCss = BitIconInfo.From(PrevMonthNavIcon, PrevMonthNavIconName ?? "Up")?.GetCssClasses();
+ var nextMonthNavIconCss = BitIconInfo.From(NextMonthNavIcon, NextMonthNavIconName ?? "Up bit-ico-r180")?.GetCssClasses();
+ var goToTodayIconCss = BitIconInfo.From(GoToTodayIcon, GoToTodayIconName ?? "GotoToday")?.GetCssClasses();
+ var showTimePickerIconCss = BitIconInfo.From(ShowTimePickerIcon, ShowTimePickerIconName ?? "Clock")?.GetCssClasses();
+ var prevYearNavIconCss = BitIconInfo.From(PrevYearNavIcon, PrevYearNavIconName ?? "Up")?.GetCssClasses();
+ var nextYearNavIconCss = BitIconInfo.From(NextYearNavIcon, NextYearNavIconName ?? "Up bit-ico-r180")?.GetCssClasses();
+ var prevYearRangeNavIconCss = BitIconInfo.From(PrevYearRangeNavIcon, PrevYearRangeNavIconName ?? "Up")?.GetCssClasses();
+ var nextYearRangeNavIconCss = BitIconInfo.From(NextYearRangeNavIcon, NextYearRangeNavIconName ?? "Up bit-ico-r180")?.GetCssClasses();
+ var hideTimePickerIconCss = BitIconInfo.From(HideTimePickerIcon, HideTimePickerIconName ?? "CalendarMirrored")?.GetCssClasses();
+ var startIncreaseHourIconCss = BitIconInfo.From(StartTimeIncreaseHourIcon, StartTimeIncreaseHourIconName ?? "ChevronDownSmall bit-ico-r180")?.GetCssClasses();
+ var startDecreaseHourIconCss = BitIconInfo.From(StartTimeDecreaseHourIcon, StartTimeDecreaseHourIconName ?? "ChevronDownSmall")?.GetCssClasses();
+ var startIncreaseMinuteIconCss = BitIconInfo.From(StartTimeIncreaseMinuteIcon, StartTimeIncreaseMinuteIconName ?? "ChevronDownSmall bit-ico-r180")?.GetCssClasses();
+ var startDecreaseMinuteIconCss = BitIconInfo.From(StartTimeDecreaseMinuteIcon, StartTimeDecreaseMinuteIconName ?? "ChevronDownSmall")?.GetCssClasses();
+ var endIncreaseHourIconCss = BitIconInfo.From(EndTimeIncreaseHourIcon, EndTimeIncreaseHourIconName ?? "ChevronDownSmall bit-ico-r180")?.GetCssClasses();
+ var endDecreaseHourIconCss = BitIconInfo.From(EndTimeDecreaseHourIcon, EndTimeDecreaseHourIconName ?? "ChevronDownSmall")?.GetCssClasses();
+ var endIncreaseMinuteIconCss = BitIconInfo.From(EndTimeIncreaseMinuteIcon, EndTimeIncreaseMinuteIconName ?? "ChevronDownSmall bit-ico-r180")?.GetCssClasses();
+ var endDecreaseMinuteIconCss = BitIconInfo.From(EndTimeDecreaseMinuteIcon, EndTimeDecreaseMinuteIconName ?? "ChevronDownSmall")?.GetCssClasses();
+}
+
@@ -689,7 +730,9 @@
class="bit-dtrp-tbt @Classes?.EndTimeIncreaseMinuteButton"
disabled="@endTimeIncreaseMinuteDisabled"
aria-disabled="@endTimeIncreaseMinuteDisabled">
-
+
-
+
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/DateRangePicker/BitDateRangePicker.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/DateRangePicker/BitDateRangePicker.razor.cs
index 2ecdd960d9..362cc455fc 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/DateRangePicker/BitDateRangePicker.razor.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/DateRangePicker/BitDateRangePicker.razor.cs
@@ -201,6 +201,28 @@ private int _endTimeMinuteView
///
[Parameter] public BitDateRangePickerClassStyles? Classes { get; set; }
+ ///
+ /// The icon to display inside the clear button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? ClearButtonIcon { get; set; }
+
+ ///
+ /// The name of the clear button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? ClearButtonIconName { get; set; }
+
+ ///
+ /// The icon to display inside the close button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? CloseButtonIcon { get; set; }
+
+ ///
+ /// The name of the close button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? CloseButtonIconName { get; set; }
+
///
/// The title of the close button (tooltip).
///
@@ -253,15 +275,32 @@ private int _endTimeMinuteView
///
[Parameter] public string GoToPrevYearTitle { get; set; } = "Go to previous year {0}";
+ ///
+ /// The icon to display inside the GoToToday button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? GoToTodayIcon { get; set; }
+
+ ///
+ /// The name of the GoToToday button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? GoToTodayIconName { get; set; }
+
///
/// The title of the GoToToday button (tooltip).
///
[Parameter] public string GoToTodayTitle { get; set; } = "Go to today";
///
- /// The title of the ShowTimePicker button (tooltip).
+ /// The icon to display inside the HideTimePicker button.
+ /// Takes precedence over when both are set.
///
- [Parameter] public string ShowTimePickerTitle { get; set; } = "Show time picker";
+ [Parameter] public BitIconInfo? HideTimePickerIcon { get; set; }
+
+ ///
+ /// The name of the HideTimePicker button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? HideTimePickerIconName { get; set; }
///
/// The title of the HideTimePicker button (tooltip).
@@ -296,9 +335,32 @@ private int _endTimeMinuteView
public BitIconLocation IconLocation { get; set; } = BitIconLocation.Right;
///
- /// The name of the DateRangePicker's icon.
+ /// Gets or sets the icon to display using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
///
- [Parameter] public string IconName { get; set; } = "CalendarMirrored";
+ ///
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ ///
+ /// Bootstrap: Icon="BitIconInfo.Bi("calendar3")"
+ /// FontAwesome: Icon="BitIconInfo.Fa("solid calendar")"
+ /// Custom CSS: Icon="BitIconInfo.Css("my-icon-class")"
+ ///
+ [Parameter] public BitIconInfo? Icon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon to display from the built-in Fluent UI icons.
+ ///
+ ///
+ /// The icon name should be from the Fluent UI icon set (e.g., BitIconName.CalendarMirrored).
+ ///
+ /// Browse available names in BitIconName of the Bit.BlazorUI.Icons nuget package or the gallery:
+ /// .
+ ///
+ /// For external icon libraries, use instead.
+ ///
+ [Parameter] public string? IconName { get; set; }
///
/// The custom validation error message for the invalid value.
@@ -350,6 +412,39 @@ private int _endTimeMinuteView
///
[Parameter] public string MonthPickerToggleTitle { get; set; } = "{0}, change month";
+ ///
+ /// The icon to display inside the next-month navigation button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? NextMonthNavIcon { get; set; }
+
+ ///
+ /// The name of the next-month navigation button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? NextMonthNavIconName { get; set; }
+
+ ///
+ /// The icon to display inside the next-year navigation button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? NextYearNavIcon { get; set; }
+
+ ///
+ /// The name of the next-year navigation button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? NextYearNavIconName { get; set; }
+
+ ///
+ /// The icon to display inside the next-year-range navigation button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? NextYearRangeNavIcon { get; set; }
+
+ ///
+ /// The name of the next-year-range navigation button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? NextYearRangeNavIconName { get; set; }
+
///
/// The callback for clicking on the DateRangePicker's input.
///
@@ -375,6 +470,39 @@ private int _endTimeMinuteView
///
[Parameter] public string Placeholder { get; set; } = string.Empty;
+ ///
+ /// The icon to display inside the previous-month navigation button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? PrevMonthNavIcon { get; set; }
+
+ ///
+ /// The name of the previous-month navigation button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? PrevMonthNavIconName { get; set; }
+
+ ///
+ /// The icon to display inside the previous-year navigation button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? PrevYearNavIcon { get; set; }
+
+ ///
+ /// The name of the previous-year navigation button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? PrevYearNavIconName { get; set; }
+
+ ///
+ /// The icon to display inside the previous-year-range navigation button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? PrevYearRangeNavIcon { get; set; }
+
+ ///
+ /// The name of the previous-year-range navigation button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? PrevYearRangeNavIconName { get; set; }
+
///
/// Enables the responsive mode in small screens.
///
@@ -404,65 +532,119 @@ private int _endTimeMinuteView
[CallOnSet(nameof(OnSetParameters))]
public bool ShowTimePicker { get; set; }
+ ///
+ /// The icon to display inside the ShowTimePicker button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? ShowTimePickerIcon { get; set; }
+
+ ///
+ /// The name of the ShowTimePicker button's icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? ShowTimePickerIconName { get; set; }
+
+ ///
+ /// The title of the ShowTimePicker button (tooltip).
+ ///
+ [Parameter] public string ShowTimePickerTitle { get; set; } = "Show time picker";
+
///
/// Whether the week number (weeks 1 to 53) should be shown before each week row.
///
[Parameter] public bool ShowWeekNumbers { get; set; }
///
- /// Custom CSS styles for different parts of the BitDateRangePicker component.
+ /// The icon to display inside the start time-picker's decrease-hour button.
+ /// Takes precedence over when both are set.
///
- [Parameter] public BitDateRangePickerClassStyles? Styles { get; set; }
+ [Parameter] public BitIconInfo? StartTimeDecreaseHourIcon { get; set; }
///
- /// Time format of the time-pickers, 24H or 12H.
+ /// The name of the start time-picker's decrease-hour button icon from the built-in Fluent UI icon set.
///
- [Parameter] public BitTimeFormat TimeFormat { get; set; }
+ [Parameter] public string? StartTimeDecreaseHourIconName { get; set; }
///
- /// TimeZone for the DateRangePicker.
+ /// The icon to display inside the start time-picker's decrease-minute button.
+ /// Takes precedence over when both are set.
///
- [Parameter]
- [CallOnSet(nameof(OnSetParameters))]
- public TimeZoneInfo? TimeZone { get; set; }
+ [Parameter] public BitIconInfo? StartTimeDecreaseMinuteIcon { get; set; }
///
- /// Whether or not the Text field of the DateRangePicker is underlined.
+ /// The name of the start time-picker's decrease-minute button icon from the built-in Fluent UI icon set.
///
- [Parameter, ResetClassBuilder]
- public bool Underlined { get; set; }
+ [Parameter] public string? StartTimeDecreaseMinuteIconName { get; set; }
///
- /// The string format used to show the DateRangePicker's value in its input.
+ /// The icon to display inside the start time-picker's increase-hour button.
+ /// Takes precedence over when both are set.
///
- [Parameter] public string ValueFormat { get; set; } = "Start: {0} - End: {1}";
+ [Parameter] public BitIconInfo? StartTimeIncreaseHourIcon { get; set; }
///
- /// The title of the week number (tooltip).
+ /// The name of the start time-picker's increase-hour button icon from the built-in Fluent UI icon set.
///
- [Parameter] public string WeekNumberTitle { get; set; } = "Week number {0}";
+ [Parameter] public string? StartTimeIncreaseHourIconName { get; set; }
///
- /// Custom template to render the year cells of the DateRangePicker.
+ /// The icon to display inside the start time-picker's increase-minute button.
+ /// Takes precedence over when both are set.
///
- [Parameter] public RenderFragment? YearCellTemplate { get; set; }
+ [Parameter] public BitIconInfo? StartTimeIncreaseMinuteIcon { get; set; }
///
- /// The title of the year picker's toggle (tooltip).
+ /// The name of the start time-picker's increase-minute button icon from the built-in Fluent UI icon set.
///
- [Parameter] public string YearPickerToggleTitle { get; set; } = "{0}, change year";
+ [Parameter] public string? StartTimeIncreaseMinuteIconName { get; set; }
///
- /// The title of the year range picker's toggle (tooltip).
+ /// The icon to display inside the end time-picker's decrease-hour button.
+ /// Takes precedence over when both are set.
///
- [Parameter] public string YearRangePickerToggleTitle { get; set; } = "{0} - {1}, change month";
+ [Parameter] public BitIconInfo? EndTimeDecreaseHourIcon { get; set; }
///
- /// Show month picker on top of date range picker when visible.
+ /// The name of the end time-picker's decrease-hour button icon from the built-in Fluent UI icon set.
///
- [Parameter]
- [CallOnSet(nameof(OnSetParameters))]
- public bool ShowTimePickerAsOverlay { get; set; }
+ [Parameter] public string? EndTimeDecreaseHourIconName { get; set; }
+
+ ///
+ /// The icon to display inside the end time-picker's decrease-minute button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? EndTimeDecreaseMinuteIcon { get; set; }
+
+ ///
+ /// The name of the end time-picker's decrease-minute button icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? EndTimeDecreaseMinuteIconName { get; set; }
+
+ ///
+ /// The icon to display inside the end time-picker's increase-hour button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? EndTimeIncreaseHourIcon { get; set; }
+
+ ///
+ /// The name of the end time-picker's increase-hour button icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? EndTimeIncreaseHourIconName { get; set; }
+
+ ///
+ /// The icon to display inside the end time-picker's increase-minute button.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? EndTimeIncreaseMinuteIcon { get; set; }
+
+ ///
+ /// The name of the end time-picker's increase-minute button icon from the built-in Fluent UI icon set.
+ ///
+ [Parameter] public string? EndTimeIncreaseMinuteIconName { get; set; }
+
+ ///
+ /// Determines increment/decrement steps for DateRangePicker's hour.
+ ///
+ [Parameter] public int HourStep { get; set; } = 1;
///
/// The maximum range of day and times allowed for selection in DateRangePicker.
@@ -475,14 +657,18 @@ private int _endTimeMinuteView
[Parameter] public bool ShowClearButton { get; set; }
///
- /// Determines increment/decrement steps for DateRangePicker's hour.
+ /// Show the time picker as an overlay on top of the date range picker when visible.
///
- [Parameter] public int HourStep { get; set; } = 1;
+ [Parameter]
+ [CallOnSet(nameof(OnSetParameters))]
+ public bool ShowTimePickerAsOverlay { get; set; }
///
- /// Determines increment/decrement steps for DateRangePicker's minute.
+ /// Whether the DateRangePicker is rendered standalone or with the input component and callout.
///
- [Parameter] public int MinuteStep { get; set; } = 1;
+ [Parameter, ResetClassBuilder]
+ [CallOnSet(nameof(OnSetParameters))]
+ public bool Standalone { get; set; }
///
/// Specifies the date and time of the date and time picker when it is opened without any selected value.
@@ -492,11 +678,57 @@ private int _endTimeMinuteView
public BitDateRangePickerValue? StartingValue { get; set; }
///
- /// Whether the DateRangePicker is rendered standalone or with the input component and callout.
+ /// Custom CSS styles for different parts of the BitDateRangePicker component.
///
- [Parameter, ResetClassBuilder]
+ [Parameter] public BitDateRangePickerClassStyles? Styles { get; set; }
+
+ ///
+ /// Time format of the time-pickers, 24H or 12H.
+ ///
+ [Parameter] public BitTimeFormat TimeFormat { get; set; }
+
+ ///
+ /// TimeZone for the DateRangePicker.
+ ///
+ [Parameter]
[CallOnSet(nameof(OnSetParameters))]
- public bool Standalone { get; set; }
+ public TimeZoneInfo? TimeZone { get; set; }
+
+ ///
+ /// Whether or not the Text field of the DateRangePicker is underlined.
+ ///
+ [Parameter, ResetClassBuilder]
+ public bool Underlined { get; set; }
+
+ ///
+ /// The string format used to show the DateRangePicker's value in its input.
+ ///
+ [Parameter] public string ValueFormat { get; set; } = "Start: {0} - End: {1}";
+
+ ///
+ /// The title of the week number (tooltip).
+ ///
+ [Parameter] public string WeekNumberTitle { get; set; } = "Week number {0}";
+
+ ///
+ /// Custom template to render the year cells of the DateRangePicker.
+ ///
+ [Parameter] public RenderFragment? YearCellTemplate { get; set; }
+
+ ///
+ /// The title of the year picker's toggle (tooltip).
+ ///
+ [Parameter] public string YearPickerToggleTitle { get; set; } = "{0}, change year";
+
+ ///
+ /// The title of the year range picker's toggle (tooltip).
+ ///
+ [Parameter] public string YearRangePickerToggleTitle { get; set; } = "{0} - {1}, change month";
+
+ ///
+ /// Determines increment/decrement steps for DateRangePicker's minute.
+ ///
+ [Parameter] public int MinuteStep { get; set; } = 1;
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/DateRangePicker/BitDateRangePicker.scss b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/DateRangePicker/BitDateRangePicker.scss
index b86aef62ed..616c5d84dd 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/DateRangePicker/BitDateRangePicker.scss
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/DateRangePicker/BitDateRangePicker.scss
@@ -1,4 +1,4 @@
-@import "../../../Styles/functions.scss";
+@import "../../../Styles/functions.scss";
@import "../../../Styles/media-queries.scss";
.bit-dtrp {
@@ -18,8 +18,8 @@
.bit-dtrp-icn {
cursor: default;
- pointer-events: none;
color: $clr-fg-dis;
+ pointer-events: none;
background: none $clr-bg-dis;
border: $shp-border-width $shp-border-style $clr-brd-dis;
}
@@ -88,8 +88,8 @@
flex-flow: row nowrap;
padding: 0 spacing(1);
box-sizing: border-box;
- border-radius: $shp-border-radius;
background-color: $clr-bg-pri;
+ border-radius: $shp-border-radius;
border: $shp-border-width $shp-border-style $clr-brd-pri;
}
@@ -101,20 +101,20 @@
.bit-dtrp-clr {
display: flex;
+ cursor: pointer;
+ align-items: center;
width: spacing(3.75);
height: spacing(3.75);
justify-content: center;
- align-items: center;
background-color: $clr-bg-sec;
- cursor: pointer;
i {
speak: none;
width: unset;
+ color: $clr-fg-sec;
pointer-events: none;
display: inline-block;
font-size: spacing(1.5);
- color: $clr-fg-sec;
}
@media (hover: hover) {
@@ -136,11 +136,11 @@
box-shadow: none;
font-weight: 400;
border-radius: 0;
+ color: $clr-fg-pri;
box-sizing: border-box;
text-overflow: ellipsis;
font-size: spacing(1.75);
background: none transparent;
- color: $clr-fg-pri;
font-family: $tg-font-family;
}
@@ -269,6 +269,7 @@
display: flex;
cursor: pointer;
overflow: visible;
+ color: $clr-fg-pri;
position: relative;
width: spacing(3.5);
align-items: center;
@@ -280,7 +281,6 @@
line-height: spacing(3);
justify-content: center;
background-color: transparent;
- color: $clr-fg-pri;
border-radius: $shp-border-radius;
@media (hover: hover) {
@@ -294,9 +294,9 @@
}
&:disabled {
+ color: $clr-fg-dis;
pointer-events: none;
background-color: transparent;
- color: $clr-fg-dis;
}
}
@@ -324,9 +324,9 @@
.bit-dtrp-dss {
color: $clr-pri-text;
- background-color: $clr-pri;
border-end-end-radius: 0;
border-start-end-radius: 0;
+ background-color: $clr-pri;
border-end-start-radius: spacing(1);
border-start-start-radius: spacing(1);
@@ -340,10 +340,10 @@
.bit-dtrp-dse {
color: $clr-pri-text;
background-color: $clr-pri;
- border-end-end-radius: spacing(1);
- border-start-end-radius: spacing(1);
border-end-start-radius: 0;
border-start-start-radius: 0;
+ border-end-end-radius: spacing(1);
+ border-start-end-radius: spacing(1);
@media (hover: hover) {
&:hover {
@@ -371,6 +371,7 @@
.bit-dtrp-wnm {
display: flex;
font-weight: 400;
+ color: $clr-fg-sec;
width: spacing(3.5);
align-items: center;
height: spacing(3.5);
@@ -378,7 +379,6 @@
font-size: spacing(1.5);
justify-content: center;
padding: spacing(0.375) 0 0 0;
- color: $clr-fg-sec;
background-color: $clr-bg-sec;
border-inline-end: $shp-border-width $shp-border-style $clr-brd-sec;
}
@@ -433,7 +433,7 @@
pointer-events: none;
background-color: transparent;
- .bit-dtrp-gti,
+ .bit-dtrp-cic,
.bit-icon {
color: $clr-fg-dis;
}
@@ -453,6 +453,7 @@
display: block;
cursor: pointer;
overflow: visible;
+ color: $clr-fg-pri;
position: relative;
text-align: center;
width: spacing(3.5);
@@ -463,7 +464,6 @@
min-height: spacing(3.5);
line-height: spacing(3.5);
background-color: transparent;
- color: $clr-fg-pri;
border-radius: $shp-border-radius;
@media (hover: hover) {
@@ -476,7 +476,7 @@
pointer-events: none;
background-color: transparent;
- .bit-dtrp-gti,
+ .bit-dtrp-cic,
.bit-icon {
color: $clr-fg-dis;
}
@@ -487,17 +487,17 @@
padding: 0;
border: none;
cursor: pointer;
+ aspect-ratio: 1;
overflow: visible;
+ color: $clr-fg-pri;
position: relative;
text-align: center;
width: spacing(3.75);
outline: transparent;
- line-height: spacing(3.75);
font-size: spacing(1.5);
+ line-height: spacing(3.75);
background-color: transparent;
- color: $clr-fg-pri;
border-radius: $shp-border-radius;
- aspect-ratio: 1;
@media (hover: hover) {
&:hover {
@@ -519,9 +519,9 @@
}
&:disabled {
+ color: $clr-fg-dis;
pointer-events: none;
background-color: transparent;
- color: $clr-fg-dis;
i {
color: $clr-fg-dis;
@@ -567,6 +567,7 @@
cursor: pointer;
overflow: hidden;
width: spacing(6);
+ color: $clr-fg-pri;
position: relative;
white-space: nowrap;
outline: transparent;
@@ -575,7 +576,6 @@
line-height: spacing(5);
text-overflow: ellipsis;
background-color: transparent;
- color: $clr-fg-pri;
border-radius: $shp-border-radius;
@media (hover: hover) {
@@ -585,9 +585,9 @@
}
&:disabled {
+ color: $clr-fg-dis;
pointer-events: none;
background-color: transparent;
- color: $clr-fg-dis;
}
}
@@ -666,28 +666,28 @@
padding: 0;
border: none;
cursor: pointer;
+ aspect-ratio: 1;
+ overflow: hidden;
text-align: center;
align-items: center;
width: spacing(3.75);
box-sizing: border-box;
justify-content: center;
- -moz-appearance: textfield; // Firefox
- background-color: $clr-bg-pri;
font-size: spacing(2.28);
+ -moz-appearance: textfield; // Firefox
font-weight: $tg-font-weight;
- overflow: hidden;
- aspect-ratio: 1;
+ background-color: $clr-bg-pri;
&::-webkit-inner-spin-button, // Chrome, Safari, Edge, Opera
&::-webkit-outer-spin-button {
- -webkit-appearance: none;
margin: 0;
+ -webkit-appearance: none;
}
&:focus {
border: none;
- border-bottom: $shp-border-width $shp-border-style $clr-brd-pri-active;
outline: none;
+ border-bottom: $shp-border-width $shp-border-style $clr-brd-pri-active;
}
&:disabled {
@@ -778,9 +778,9 @@
}
.bit-dtrp-sta {
- width: fit-content;
display: flex;
flex-flow: column;
+ width: fit-content;
align-items: flex-start;
.bit-dtrp-cal {
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdown.razor b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdown.razor
index 047d0c4269..a15621e626 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdown.razor
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdown.razor
@@ -1,8 +1,18 @@
-@namespace Bit.BlazorUI
+@namespace Bit.BlazorUI
@inherits BitInputBase
@typeparam TItem
@typeparam TValue
+@{
+ var chipsRemoveIconCss = BitIconInfo.From(ChipsRemoveIcon, ChipsRemoveIconName ?? "Cancel")?.GetCssClasses();
+ var clearButtonIconCss = BitIconInfo.From(ClearButtonIcon, ClearButtonIconName ?? "Cancel")?.GetCssClasses();
+ var caretDownIconCss = BitIconInfo.From(CaretDownIcon, CaretDownIconName ?? "ChevronRight bit-ico-r90")?.GetCssClasses();
+ var responsiveCloseIconCss = BitIconInfo.From(ResponsiveCloseIcon, ResponsiveCloseIconName ?? "Cancel")?.GetCssClasses();
+ var searchBoxIconCss = BitIconInfo.From(SearchBoxIcon, SearchBoxIconName ?? "Search")?.GetCssClasses();
+ var searchBoxClearIconCss = BitIconInfo.From(SearchBoxClearIcon, SearchBoxClearIconName ?? "Cancel")?.GetCssClasses();
+ var comboBoxAddButtonIconCss = BitIconInfo.From(ComboBoxAddButtonIcon, ComboBoxAddButtonIconName ?? "Add")?.GetCssClasses();
+}
+
@if ((Options ?? ChildContent) is not null)
{
@@ -15,8 +25,7 @@
style="@StyleBuilder.Value"
class="@ClassBuilder.Value"
dir="@Dir?.ToString().ToLower()"
- aria-owns="@(IsOpen ? _calloutId : null)">
-
+ aria-owns="@(IsOpen? _calloutId : null)">
@if (LabelTemplate is not null)
{
[Parameter] public bool AutoFocusSearchBox { get; set; }
+ ///
+ /// Custom template to render as a footer in the callout.
+ ///
+ [Parameter] public RenderFragment? CalloutFooterTemplate { get; set; }
+
///
/// Custom template to render as a header in the callout.
///
[Parameter] public RenderFragment? CalloutHeaderTemplate { get; set; }
///
- /// Custom template to render as a footer in the callout.
+ /// The icon of the chevron down element of the dropdown.
+ /// Takes precedence over when both are set.
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
///
- [Parameter] public RenderFragment? CalloutFooterTemplate { get; set; }
+ ///
+ /// Bootstrap: CaretDownIcon="BitIconInfo.Bi("chevron-down")"
+ /// FontAwesome: CaretDownIcon="BitIconInfo.Fa("solid chevron-down")"
+ /// Custom CSS: CaretDownIcon="BitIconInfo.Css("my-chevron-class")"
+ ///
+ [Parameter] public BitIconInfo? CaretDownIcon { get; set; }
///
- /// The icon name of the chevron down element of the dropdown.
+ /// The icon name of the chevron down element of the dropdown from the Fluent UI icon set.
+ /// For external icon libraries, use instead.
///
[Parameter] public string? CaretDownIconName { get; set; }
@@ -72,16 +86,58 @@ namespace Bit.BlazorUI;
[Parameter, ResetClassBuilder]
public bool Chips { get; set; }
+ ///
+ /// The icon of the remove button in the chips display.
+ /// Takes precedence over when both are set.
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ [Parameter] public BitIconInfo? ChipsRemoveIcon { get; set; }
+
+ ///
+ /// The icon name of the remove button in the chips display from the Fluent UI icon set.
+ /// For external icon libraries, use instead.
+ ///
+ [Parameter] public string? ChipsRemoveIconName { get; set; }
+
///
/// Custom CSS classes for different parts of the BitDropdown.
///
[Parameter] public BitDropdownClassStyles? Classes { get; set; }
+ ///
+ /// The icon of the clear button of the dropdown.
+ /// Takes precedence over when both are set.
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ [Parameter] public BitIconInfo? ClearButtonIcon { get; set; }
+
+ ///
+ /// The icon name of the clear button of the dropdown from the Fluent UI icon set.
+ /// For external icon libraries, use instead.
+ ///
+ [Parameter] public string? ClearButtonIconName { get; set; }
+
///
/// Activates the ComboBox feature in BitDropDown component.
///
[Parameter] public bool Combo { get; set; }
+ ///
+ /// The icon of the add button in the responsive ComboBox mode.
+ /// Takes precedence over when both are set.
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ [Parameter] public BitIconInfo? ComboBoxAddButtonIcon { get; set; }
+
+ ///
+ /// The icon name of the add button in the responsive ComboBox mode from the Fluent UI icon set.
+ /// For external icon libraries, use instead.
+ ///
+ [Parameter] public string? ComboBoxAddButtonIconName { get; set; }
+
///
/// The default value that will be initially used to set selected item if the Value parameter is not set.
///
@@ -262,6 +318,48 @@ namespace Bit.BlazorUI;
///
[Parameter] public bool Responsive { get; set; }
+ ///
+ /// The icon of the close button in the responsive mode callout.
+ /// Takes precedence over when both are set.
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ [Parameter] public BitIconInfo? ResponsiveCloseIcon { get; set; }
+
+ ///
+ /// The icon name of the close button in the responsive mode callout from the Fluent UI icon set.
+ /// For external icon libraries, use instead.
+ ///
+ [Parameter] public string? ResponsiveCloseIconName { get; set; }
+
+ ///
+ /// The icon of the clear icon in the SearchBox.
+ /// Takes precedence over when both are set.
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ [Parameter] public BitIconInfo? SearchBoxClearIcon { get; set; }
+
+ ///
+ /// The icon name of the clear icon in the SearchBox from the Fluent UI icon set.
+ /// For external icon libraries, use instead.
+ ///
+ [Parameter] public string? SearchBoxClearIconName { get; set; }
+
+ ///
+ /// The icon of the search icon in the SearchBox.
+ /// Takes precedence over when both are set.
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ [Parameter] public BitIconInfo? SearchBoxIcon { get; set; }
+
+ ///
+ /// The icon name of the search icon in the SearchBox from the Fluent UI icon set.
+ /// For external icon libraries, use instead.
+ ///
+ [Parameter] public string? SearchBoxIconName { get; set; }
+
///
/// The placeholder text of the SearchBox input.
///
@@ -737,6 +835,43 @@ internal BitDropdownItemType GetItemType(TItem item)
return item.GetValueFromProperty(NameSelectors.Title.Name);
}
+ internal BitIconInfo? GetIcon(TItem item)
+ {
+ if (item is BitDropdownItem dropdownItem)
+ {
+ return BitIconInfo.From(dropdownItem.Icon, dropdownItem.IconName);
+ }
+
+ if (item is BitDropdownOption dropdownOption)
+ {
+ return BitIconInfo.From(dropdownOption.Icon, dropdownOption.IconName);
+ }
+
+ if (NameSelectors is null) return null;
+
+ BitIconInfo? icon = null;
+ if (NameSelectors.Icon.Selector is not null)
+ {
+ icon = NameSelectors.Icon.Selector!(item);
+ }
+ else
+ {
+ icon = item.GetValueFromProperty(NameSelectors.Icon.Name);
+ }
+
+ string? iconName = null;
+ if (NameSelectors.IconName.Selector is not null)
+ {
+ iconName = NameSelectors.IconName.Selector!(item);
+ }
+ else
+ {
+ iconName = item.GetValueFromProperty(NameSelectors.IconName.Name);
+ }
+
+ return BitIconInfo.From(icon, iconName);
+ }
+
internal TValue? GetValue(TItem? item)
{
if (item is null) return default;
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdown.scss b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdown.scss
index 867ceb74d8..b1b32f8a41 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdown.scss
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdown.scss
@@ -1,9 +1,11 @@
-@import "../../../Styles/functions.scss";
+@import "../../../Styles/functions.scss";
@import "../../../Styles/media-queries.scss";
.bit-drp {
width: 100%;
+ display: flex;
position: relative;
+ flex-direction: column;
font-family: $tg-font-family;
&.bit-drp-req {
@@ -115,12 +117,12 @@
.bit-drp-lbl {
margin: 0;
- display: block;
font-weight: 600;
+ color: $clr-fg-pri;
box-sizing: border-box;
font-size: spacing(1.75);
padding: spacing(0.625) 0;
- color: $clr-fg-pri;
+ line-height: spacing(2.75);
}
.bit-drp-wrp {
@@ -130,6 +132,7 @@
user-select: none;
color: $clr-fg-sec;
position: relative;
+ min-height: spacing(4);
box-sizing: border-box;
background-color: $clr-bg-pri;
border-radius: $shp-border-radius;
@@ -661,12 +664,14 @@
.bit-drp-itm {
width: 100%;
display: flex;
+ gap: spacing(1);
cursor: pointer;
overflow: hidden;
font-weight: 400;
text-align: start;
user-select: none;
position: relative;
+ color: $clr-fg-pri;
white-space: nowrap;
align-items: center;
height: spacing(4.5);
@@ -678,7 +683,6 @@
font-size: spacing(1.875);
line-height: spacing(2.5);
background-color: transparent;
- color: $clr-fg-pri;
border: $shp-border-width $shp-border-style transparent;
@media (hover: hover) {
@@ -688,16 +692,16 @@
}
}
-.bit-drp-itm[disabled] {
- cursor: default;
- color: $clr-fg-dis;
+ .bit-drp-itm[disabled] {
+ cursor: default;
+ color: $clr-fg-dis;
- @media (hover: hover) {
- &:hover {
- background-color: transparent;
+ @media (hover: hover) {
+ &:hover {
+ background-color: transparent;
+ }
}
}
-}
.bit-drp-sel {
background-color: $clr-bg-sec;
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdownClassStyles.cs b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdownClassStyles.cs
index 0a045cea18..d2ced9f963 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdownClassStyles.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdownClassStyles.cs
@@ -142,6 +142,11 @@ public class BitDropdownClassStyles
///
public string? ItemCheckIcon { get; set; }
+ ///
+ /// Custom CSS classes/styles for the item icon of the BitDropdown.
+ ///
+ public string? ItemIcon { get; set; }
+
///
/// Custom CSS classes/styles for the item text of the BitDropdown.
///
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdownItem.cs b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdownItem.cs
index 606fe962e6..8eb52c77dd 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdownItem.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdownItem.cs
@@ -1,4 +1,4 @@
-namespace Bit.BlazorUI;
+namespace Bit.BlazorUI;
public class BitDropdownItem
{
@@ -12,6 +12,20 @@ public class BitDropdownItem
///
public string? Class { get; set; }
+ ///
+ /// The icon to display using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ public BitIconInfo? Icon { get; set; }
+
+ ///
+ /// The icon name from the Fluent UI icon set to display for the dropdown item.
+ /// For external icon libraries, use instead.
+ ///
+ public string? IconName { get; set; }
+
///
/// The id for the dropdown item.
///
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdownNameSelectors.cs b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdownNameSelectors.cs
index c502c95e61..87c9bbf392 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdownNameSelectors.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdownNameSelectors.cs
@@ -1,4 +1,4 @@
-namespace Bit.BlazorUI;
+namespace Bit.BlazorUI;
public class BitDropdownNameSelectors
{
@@ -12,6 +12,16 @@ public class BitDropdownNameSelectors
///
public BitNameSelectorPair Class { get; set; } = new(nameof(BitDropdownItem.Class));
+ ///
+ /// The Icon field name and selector of the custom input class.
+ ///
+ public BitNameSelectorPair Icon { get; set; } = new(nameof(BitDropdownItem.Icon));
+
+ ///
+ /// The IconName field name and selector of the custom input class.
+ ///
+ public BitNameSelectorPair IconName { get; set; } = new(nameof(BitDropdownItem.IconName));
+
///
/// The Id field name and selector of the custom input class.
///
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdownOption.cs b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdownOption.cs
index 017dfdf522..087f5ad981 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdownOption.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdownOption.cs
@@ -1,4 +1,4 @@
-namespace Bit.BlazorUI;
+namespace Bit.BlazorUI;
public partial class BitDropdownOption : ComponentBase, IDisposable
{
@@ -17,6 +17,20 @@ public partial class BitDropdownOption : ComponentBase, IDisposable
///
[Parameter] public string? Class { get; set; }
+ ///
+ /// The icon to display using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ [Parameter] public BitIconInfo? Icon { get; set; }
+
+ ///
+ /// The icon name from the Fluent UI icon set to display for the dropdown option.
+ /// For external icon libraries, use instead.
+ ///
+ [Parameter] public string? IconName { get; set; }
+
///
/// The id for the dropdown option.
///
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/_BitDropdownItem.razor b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/_BitDropdownItem.razor
index 36feec0168..3fe0d50c9a 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/_BitDropdownItem.razor
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/_BitDropdownItem.razor
@@ -53,6 +53,11 @@
}
else
{
+ var itemIcon = Dropdown.GetIcon(Item);
+ @if (itemIcon is not null)
+ {
+
+ }
@text
@@ -83,6 +88,11 @@
}
else
{
+ var itemIcon = Dropdown.GetIcon(Item);
+ @if (itemIcon is not null)
+ {
+
+ }
@text
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/FileInput/BitFileInput.razor b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/FileInput/BitFileInput.razor
index 827f25fe96..8d92063c89 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/FileInput/BitFileInput.razor
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/FileInput/BitFileInput.razor
@@ -62,15 +62,17 @@
@if (file.IsValid is false)
{
-
+
@file.Message
}
@if (ShowRemoveButton)
{
-
-
+
:
@@ -122,7 +131,7 @@
style="@Styles?.IncreaseMinuteButton"
class="bit-tpc-tbt @Classes?.IncreaseMinuteButton"
disabled="@(IsEnabled is false)">
-
+
-
+
@@ -178,7 +187,7 @@
class="bit-tpc-tbt bit-tpc-cbn @Classes?.CloseButton"
title="@CloseButtonTitle"
aria-label="@CloseButtonTitle">
-
+
}
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/TimePicker/BitTimePicker.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/TimePicker/BitTimePicker.razor.cs
index 502ff2fc7a..1fca701c90 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/TimePicker/BitTimePicker.razor.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/TimePicker/BitTimePicker.razor.cs
@@ -1,4 +1,4 @@
-using System.Globalization;
+using System.Globalization;
using System.Diagnostics.CodeAnalysis;
namespace Bit.BlazorUI;
@@ -115,6 +115,17 @@ private string? _minuteView
///
[Parameter] public BitTimePickerClassStyles? Classes { get; set; }
+ ///
+ /// Gets or sets the close button icon using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? CloseButtonIcon { get; set; }
+
+ ///
+ /// Gets or sets the name of the close button icon from the built-in Fluent UI icons.
+ ///
+ [Parameter] public string? CloseButtonIconName { get; set; }
+
///
/// The title of the close button (tooltip).
///
@@ -127,6 +138,28 @@ private string? _minuteView
[CallOnSet(nameof(OnSetCulture))]
public CultureInfo? Culture { get; set; }
+ ///
+ /// Gets or sets the decrease hour button icon using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? DecreaseHourIcon { get; set; }
+
+ ///
+ /// Gets or sets the name of the decrease hour button icon from the built-in Fluent UI icons.
+ ///
+ [Parameter] public string? DecreaseHourIconName { get; set; }
+
+ ///
+ /// Gets or sets the decrease minute button icon using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? DecreaseMinuteIcon { get; set; }
+
+ ///
+ /// Gets or sets the name of the decrease minute button icon from the built-in Fluent UI icons.
+ ///
+ [Parameter] public string? DecreaseMinuteIconName { get; set; }
+
///
/// Determines the allowed drop directions of the callout.
///
@@ -144,9 +177,35 @@ private string? _minuteView
[Parameter] public int HourStep { get; set; } = 1;
///
- /// Optional TimePicker icon
+ /// Gets or sets the icon to display using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ ///
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ ///
+ /// Bootstrap: Icon="BitIconInfo.Bi("gear-fill")"
+ /// FontAwesome: Icon="BitIconInfo.Fa("solid house")"
+ /// Custom CSS: Icon="BitIconInfo.Css("my-icon-class")"
+ ///
+ [Parameter] public BitIconInfo? Icon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon to display from the built-in Fluent UI icons.
///
- [Parameter] public string IconName { get; set; } = "Clock";
+ ///
+ /// The icon name should be from the Fluent UI icon set (e.g., BitIconName.Clock).
+ ///
+ /// Browse available names in BitIconName of the Bit.BlazorUI.Icons nuget package or the gallery:
+ /// .
+ ///
+ /// The value is case-sensitive and must match a valid icon identifier.
+ /// If not set or set to null, the default Clock icon will be rendered.
+ ///
+ /// For external icon libraries, use instead.
+ ///
+ [Parameter] public string? IconName { get; set; }
///
/// TimePicker icon location
@@ -159,6 +218,28 @@ private string? _minuteView
///
[Parameter] public RenderFragment? IconTemplate { get; set; }
+ ///
+ /// Gets or sets the increase hour button icon using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? IncreaseHourIcon { get; set; }
+
+ ///
+ /// Gets or sets the name of the increase hour button icon from the built-in Fluent UI icons.
+ ///
+ [Parameter] public string? IncreaseHourIconName { get; set; }
+
+ ///
+ /// Gets or sets the increase minute button icon using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? IncreaseMinuteIcon { get; set; }
+
+ ///
+ /// Gets or sets the name of the increase minute button icon from the built-in Fluent UI icons.
+ ///
+ [Parameter] public string? IncreaseMinuteIconName { get; set; }
+
///
/// The custom validation error message for the invalid value.
///
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Lists/Carousel/BitCarousel.razor b/src/BlazorUI/Bit.BlazorUI/Components/Lists/Carousel/BitCarousel.razor
index e66d3424cf..327d693cda 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Lists/Carousel/BitCarousel.razor
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Lists/Carousel/BitCarousel.razor
@@ -1,4 +1,4 @@
-@namespace Bit.BlazorUI
+@namespace Bit.BlazorUI
@inherits BitComponentBase
}
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Lists/Carousel/BitCarousel.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Lists/Carousel/BitCarousel.razor.cs
index 08d5bc260d..f68593940a 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Lists/Carousel/BitCarousel.razor.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Lists/Carousel/BitCarousel.razor.cs
@@ -1,4 +1,4 @@
-namespace Bit.BlazorUI;
+namespace Bit.BlazorUI;
///
/// Carousel (slide-show) let people show their items in separate slides from two or more items.
@@ -59,14 +59,54 @@ public partial class BitCarousel : BitComponentBase
[Parameter] public BitCarouselClassStyles? Classes { get; set; }
///
- /// The custom icon name for the go to left button at the right side of the carousel.
+ /// Gets or sets the icon for the go to left button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
///
- [Parameter] public string? GoLeftIcon { get; set; }
+ ///
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ ///
+ /// Bootstrap: GoLeftIcon="BitIconInfo.Bi("chevron-left")"
+ /// FontAwesome: GoLeftIcon="BitIconInfo.Fa("solid chevron-left")"
+ /// Custom CSS: GoLeftIcon="BitIconInfo.Css("my-icon-class")"
+ ///
+ [Parameter] public BitIconInfo? GoLeftIcon { get; set; }
///
- /// The custom icon name for the go to right button at the left side of the carousel.
+ /// Gets or sets the name of the icon for the go to left button from the built-in Fluent UI icons.
///
- [Parameter] public string? GoRightIcon { get; set; }
+ ///
+ /// The icon name should be from the Fluent UI icon set (e.g., BitIconName.ChevronLeft).
+ ///
+ /// For external icon libraries, use instead.
+ ///
+ [Parameter] public string? GoLeftIconName { get; set; }
+
+ ///
+ /// Gets or sets the icon for the go to right button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ ///
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ ///
+ /// Bootstrap: GoRightIcon="BitIconInfo.Bi("chevron-right")"
+ /// FontAwesome: GoRightIcon="BitIconInfo.Fa("solid chevron-right")"
+ /// Custom CSS: GoRightIcon="BitIconInfo.Css("my-icon-class")"
+ ///
+ [Parameter] public BitIconInfo? GoRightIcon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon for the go to right button from the built-in Fluent UI icons.
+ ///
+ ///
+ /// The icon name should be from the Fluent UI icon set (e.g., BitIconName.ChevronRight).
+ ///
+ /// For external icon libraries, use instead.
+ ///
+ [Parameter] public string? GoRightIconName { get; set; }
///
/// Hides the Dots indicator at the bottom of the BitCarousel.
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Lists/Carousel/BitCarousel.scss b/src/BlazorUI/Bit.BlazorUI/Components/Lists/Carousel/BitCarousel.scss
index d8dff6a986..76fc2d89e1 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Lists/Carousel/BitCarousel.scss
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Lists/Carousel/BitCarousel.scss
@@ -1,4 +1,4 @@
-@import "../../../Styles/functions.scss";
+@import "../../../Styles/functions.scss";
.bit-csl {
display: flex;
@@ -67,10 +67,6 @@
left: 0;
}
-.bit-csl-rbi {
- transform: scaleX(-1);
-}
-
.bit-csl-dcn {
text-align: center;
margin-top: spacing(1.25);
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Lists/Timeline/BitTimeline.razor b/src/BlazorUI/Bit.BlazorUI/Components/Lists/Timeline/BitTimeline.razor
index c4bf36d4e4..4c9bdf90a5 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Lists/Timeline/BitTimeline.razor
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Lists/Timeline/BitTimeline.razor
@@ -1,4 +1,4 @@
-@namespace Bit.BlazorUI
+@namespace Bit.BlazorUI
@inherits BitComponentBase
@typeparam TItem
@@ -15,6 +15,7 @@
{
var item = _items[i];
+ var icon = GetIcon(item);
var hideDot = GetHideDot(item);
var iconName = GetIconName(item);
var dotTemplate = GetDotTemplate(item);
@@ -22,6 +23,8 @@
var isEnabled = IsEnabled && GetIsEnabled(item);
var secondaryContent = GetSecondaryContent(item);
+ icon = BitIconInfo.From(icon, iconName);
+
- @if (iconName.HasValue())
+ @if (icon is not null)
{
-
+
}
}
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Lists/Timeline/BitTimeline.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Lists/Timeline/BitTimeline.razor.cs
index f099106d8d..ff759181b9 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Lists/Timeline/BitTimeline.razor.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Lists/Timeline/BitTimeline.razor.cs
@@ -265,6 +265,30 @@ private async Task HandleOnItemClick(TItem item)
return item.GetValueFromProperty(NameSelectors.Class.Name);
}
+ private BitIconInfo? GetIcon(TItem? item)
+ {
+ if (item is null) return null;
+
+ if (item is BitTimelineItem timelineItem)
+ {
+ return timelineItem.Icon;
+ }
+
+ if (item is BitTimelineOption timelineOption)
+ {
+ return timelineOption.Icon;
+ }
+
+ if (NameSelectors is null) return null;
+
+ if (NameSelectors.Icon.Selector is not null)
+ {
+ return NameSelectors.Icon.Selector!(item);
+ }
+
+ return item.GetValueFromProperty(NameSelectors.Icon.Name);
+ }
+
private string? GetIconName(TItem? item)
{
if (item is null) return null;
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Lists/Timeline/BitTimelineItem.cs b/src/BlazorUI/Bit.BlazorUI/Components/Lists/Timeline/BitTimelineItem.cs
index ba7f8157f0..25fa790638 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Lists/Timeline/BitTimelineItem.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Lists/Timeline/BitTimelineItem.cs
@@ -1,4 +1,4 @@
-namespace Bit.BlazorUI;
+namespace Bit.BlazorUI;
public class BitTimelineItem
{
@@ -22,6 +22,21 @@ public class BitTimelineItem
///
public bool HideDot { get; set; }
+ ///
+ /// Gets or sets the icon to display using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ ///
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ ///
+ /// Bootstrap: Icon="BitIconInfo.Bi("gear-fill")"
+ /// FontAwesome: Icon = BitIconInfo.Fa("solid house")
+ /// Custom CSS: Icon = BitIconInfo.Css("my-icon-class")
+ ///
+ public BitIconInfo? Icon { get; set; }
+
///
/// Name of an icon to render in the timeline item.
///
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Lists/Timeline/BitTimelineNameSelectors.cs b/src/BlazorUI/Bit.BlazorUI/Components/Lists/Timeline/BitTimelineNameSelectors.cs
index 9df2aace6e..25daffe5b4 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Lists/Timeline/BitTimelineNameSelectors.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Lists/Timeline/BitTimelineNameSelectors.cs
@@ -22,6 +22,11 @@ public class BitTimelineNameSelectors
///
public BitNameSelectorPair HideDot { get; set; } = new(nameof(BitTimelineItem.HideDot));
+ ///
+ /// Icon field name and selector of the custom input class.
+ ///
+ public BitNameSelectorPair Icon { get; set; } = new(nameof(BitTimelineItem.Icon));
+
///
/// IconName field name and selector of the custom input class.
///
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Lists/Timeline/BitTimelineOption.cs b/src/BlazorUI/Bit.BlazorUI/Components/Lists/Timeline/BitTimelineOption.cs
index d051b6ffc3..34702f580b 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Lists/Timeline/BitTimelineOption.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Lists/Timeline/BitTimelineOption.cs
@@ -1,4 +1,4 @@
-namespace Bit.BlazorUI;
+namespace Bit.BlazorUI;
public partial class BitTimelineOption : ComponentBase, IDisposable
{
@@ -28,6 +28,21 @@ public partial class BitTimelineOption : ComponentBase, IDisposable
///
[Parameter] public bool HideDot { get; set; }
+ ///
+ /// Gets or sets the icon to display using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ ///
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ ///
+ /// Bootstrap: Icon="BitIconInfo.Bi("gear-fill")"
+ /// FontAwesome: Icon="BitIconInfo.Fa("solid house")"
+ /// Custom CSS: Icon="BitIconInfo.Css("my-icon-class")"
+ ///
+ [Parameter] public BitIconInfo? Icon { get; set; }
+
///
/// Name of an icon to render in the timeline option.
///
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Breadcrumb/BitBreadcrumb.razor b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Breadcrumb/BitBreadcrumb.razor
index cb7df53ec3..a9b437ed90 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Breadcrumb/BitBreadcrumb.razor
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Breadcrumb/BitBreadcrumb.razor
@@ -1,4 +1,4 @@
-@namespace Bit.BlazorUI
+@namespace Bit.BlazorUI
@inherits BitComponentBase
@typeparam TItem
@@ -35,7 +35,8 @@
}
else
{
-
+ var overflowIcon = BitIconInfo.From(OverflowIcon, OverflowIconName ?? "More");
+
}
}
@@ -58,10 +59,10 @@
}
else
{
- var iconName = GetIconName(item);
- @if (iconName.HasValue())
+ var icon = GetIcon(item);
+ @if (icon is not null)
{
-
+
}
@GetItemText(item)
}
@@ -84,10 +85,10 @@
}
else
{
- var iconName = GetIconName(item);
- @if (iconName.HasValue())
+ var icon = GetIcon(item);
+ @if (icon is not null)
{
-
+
}
@GetItemText(item)
}
@@ -108,10 +109,10 @@
}
else
{
- var iconName = GetIconName(item);
- @if (iconName.HasValue())
+ var icon = GetIcon(item);
+ @if (icon is not null)
{
-
+
}
@GetItemText(item)
}
@@ -129,8 +130,9 @@
}
else
{
+ var dividerIcon = BitIconInfo.From(DividerIcon, DividerIconName ?? "ChevronRight bit-brc-trd");
+ class="bit-brc-div @dividerIcon?.GetCssClasses() @Classes?.DividerIcon" />
}
}
@@ -163,10 +165,10 @@
}
else
{
- var iconName = GetIconName(item);
- @if (iconName.HasValue())
+ var icon = GetIcon(item);
+ @if (icon is not null)
{
-
+
}
@GetItemText(item)
}
@@ -189,10 +191,10 @@
}
else
{
- var iconName = GetIconName(item);
- @if (iconName.HasValue())
+ var icon = GetIcon(item);
+ @if (icon is not null)
{
-
+
}
@GetItemText(item)
}
@@ -213,10 +215,10 @@
}
else
{
- var iconName = GetIconName(item);
- @if (iconName.HasValue())
+ var icon = GetIcon(item);
+ @if (icon is not null)
{
-
+
}
@GetItemText(item)
}
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Breadcrumb/BitBreadcrumb.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Breadcrumb/BitBreadcrumb.razor.cs
index 005c033b18..813ebfa115 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Breadcrumb/BitBreadcrumb.razor.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Breadcrumb/BitBreadcrumb.razor.cs
@@ -1,4 +1,4 @@
-namespace Bit.BlazorUI;
+namespace Bit.BlazorUI;
///
/// Breadcrumbs should be used as a navigational aid in your app or site. They indicate the current page’s location within a hierarchy and help the user understand where they are in relation to the rest of that hierarchy.
@@ -34,6 +34,11 @@ public partial class BitBreadcrumb : BitComponentBase where TItem : class
///
[Parameter] public BitBreadcrumbClassStyles? Classes { get; set; }
+ ///
+ /// Render a custom divider icon in place of the default chevron >
+ ///
+ [Parameter] public BitIconInfo? DividerIcon { get; set; }
+
///
/// Render a custom divider in place of the default chevron >
///
@@ -85,6 +90,11 @@ public partial class BitBreadcrumb : BitComponentBase where TItem : class
///
[Parameter] public uint OverflowIndex { get; set; }
+ ///
+ /// Render a custom overflow icon in place of the default icon.
+ ///
+ [Parameter] public BitIconInfo? OverflowIcon { get; set; }
+
///
/// Render a custom overflow icon in place of the default icon.
///
@@ -453,26 +463,41 @@ private string GetStyles(TItem item, bool isOverflowItem)
return item.GetValueFromProperty(NameSelectors.Text.Name);
}
- private string? GetIconName(TItem item)
+ private BitIconInfo? GetIcon(TItem item)
{
if (item is BitBreadcrumbItem breadcrumbItem)
{
- return breadcrumbItem.IconName;
+ return BitIconInfo.From(breadcrumbItem.Icon, breadcrumbItem.IconName);
}
if (item is BitBreadcrumbOption bitBreadcrumbOption)
{
- return bitBreadcrumbOption.IconName;
+ return BitIconInfo.From(bitBreadcrumbOption.Icon, bitBreadcrumbOption.IconName);
}
if (NameSelectors is null) return null;
+ BitIconInfo? icon = null;
+ if (NameSelectors.Icon.Selector is not null)
+ {
+ icon = NameSelectors.Icon.Selector!(item);
+ }
+ else
+ {
+ icon = item.GetValueFromProperty(NameSelectors.Icon.Name);
+ }
+
+ string? iconName = null;
if (NameSelectors.IconName.Selector is not null)
{
- return NameSelectors.IconName.Selector!(item);
+ iconName = NameSelectors.IconName.Selector!(item);
+ }
+ else
+ {
+ iconName = item.GetValueFromProperty(NameSelectors.IconName.Name);
}
- return item.GetValueFromProperty(NameSelectors.IconName.Name);
+ return BitIconInfo.From(icon, iconName);
}
private bool GetReversedIcon(TItem item)
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Breadcrumb/BitBreadcrumbItem.cs b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Breadcrumb/BitBreadcrumbItem.cs
index d4856e8b51..9e66ab98f8 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Breadcrumb/BitBreadcrumbItem.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Breadcrumb/BitBreadcrumbItem.cs
@@ -13,6 +13,11 @@ public class BitBreadcrumbItem
///
public string? Href { get; set; }
+ ///
+ /// Icon to render next to the item text.
+ ///
+ public BitIconInfo? Icon { get; set; }
+
///
/// Name of an icon to render next to the item text.
///
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Breadcrumb/BitBreadcrumbNameSelectors.cs b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Breadcrumb/BitBreadcrumbNameSelectors.cs
index 5c64263c6b..7c2b27a65f 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Breadcrumb/BitBreadcrumbNameSelectors.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Breadcrumb/BitBreadcrumbNameSelectors.cs
@@ -12,6 +12,11 @@ public class BitBreadcrumbNameSelectors where TItem : class
///
public BitNameSelectorPair Href { get; set; } = new(nameof(BitBreadcrumbItem.Href));
+ ///
+ /// The Icon field name and selector of the custom input class.
+ ///
+ public BitNameSelectorPair Icon { get; set; } = new(nameof(BitBreadcrumbItem.Icon));
+
///
/// The IconName field name and selector of the custom input class.
///
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Breadcrumb/BitBreadcrumbOption.cs b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Breadcrumb/BitBreadcrumbOption.cs
index 366954ca95..0624b25992 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Breadcrumb/BitBreadcrumbOption.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Breadcrumb/BitBreadcrumbOption.cs
@@ -21,6 +21,11 @@ public partial class BitBreadcrumbOption : ComponentBase, IDisposable
///
[Parameter] public string? Href { get; set; }
+ ///
+ /// Icon to render next to the item text.
+ ///
+ [Parameter] public BitIconInfo? Icon { get; set; }
+
///
/// Name of an icon to render next to the item text.
///
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/DropMenu/BitDropMenu.razor b/src/BlazorUI/Bit.BlazorUI/Components/Navs/DropMenu/BitDropMenu.razor
index 6e47497bae..8bda87aba3 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/DropMenu/BitDropMenu.razor
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/DropMenu/BitDropMenu.razor
@@ -19,9 +19,11 @@
}
else
{
- @if (IconName.HasValue())
+ var icon = BitIconInfo.From(Icon, IconName);
+
+ if (icon is not null)
{
-
+
}
@if (Text.HasValue())
@@ -31,8 +33,10 @@
}
+ var chevronIcon = BitIconInfo.From(ChevronDownIcon, ChevronDownIconName ?? "ChevronRight bit-ico-r90");
+
+ class="@chevronIcon?.GetCssClasses() @Classes?.ChevronDown" />
}
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/DropMenu/BitDropMenu.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Navs/DropMenu/BitDropMenu.razor.cs
index 4927eafe02..e3c765e94c 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/DropMenu/BitDropMenu.razor.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/DropMenu/BitDropMenu.razor.cs
@@ -1,4 +1,4 @@
-namespace Bit.BlazorUI;
+namespace Bit.BlazorUI;
///
/// DropMenu component is a versatile dropdown menu used in Blazor applications. It allows you to create a button that, when clicked, opens a callout or dropdown menu.
@@ -20,9 +20,30 @@ public partial class BitDropMenu : BitComponentBase
[Parameter] public RenderFragment? Body { get; set; }
///
- /// The icon name of the chevron down part of the drop menu.
+ /// Gets or sets the icon for the chevron down part of the drop menu using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
///
- [Parameter] public string? ChevronDownIcon { get; set; }
+ ///
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ ///
+ /// Bootstrap: ChevronDownIcon="BitIconInfo.Bi("chevron-down")"
+ /// FontAwesome: ChevronDownIcon="BitIconInfo.Fa("solid chevron-down")"
+ /// Custom CSS: ChevronDownIcon="BitIconInfo.Css("my-chevron-class")"
+ ///
+ [Parameter] public BitIconInfo? ChevronDownIcon { get; set; }
+
+ ///
+ /// Gets or sets the icon name for the chevron down part of the drop menu from the built-in Fluent UI icons.
+ ///
+ ///
+ /// The icon name should be from the Fluent UI icon set. When null, defaults to "ChevronRight bit-ico-r90".
+ /// Browse available names in BitIconName of the Bit.BlazorUI.Icons nuget package or the gallery:
+ /// .
+ /// For external icon libraries, use instead.
+ ///
+ [Parameter] public string? ChevronDownIconName { get; set; }
///
/// The content of the callout of the drop menu.
@@ -35,8 +56,29 @@ public partial class BitDropMenu : BitComponentBase
[Parameter] public BitDropMenuClassStyles? Classes { get; set; }
///
- /// The icon to show inside the header of the drop menu.
+ /// Gets or sets the icon to display inside the header of the drop menu using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ ///
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ ///
+ /// Bootstrap: Icon="BitIconInfo.Bi("gear-fill")"
+ /// FontAwesome: Icon="BitIconInfo.Fa("solid house")"
+ /// Custom CSS: Icon="BitIconInfo.Css("my-icon-class")"
+ ///
+ [Parameter] public BitIconInfo? Icon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon to display inside the header of the drop menu from the built-in Fluent UI icons.
///
+ ///
+ /// The icon name should be from the Fluent UI icon set (e.g., BitIconName.AddFriend).
+ /// Browse available names in BitIconName of the Bit.BlazorUI.Icons nuget package or the gallery:
+ /// .
+ /// For external icon libraries, use instead.
+ ///
[Parameter] public string? IconName { get; set; }
///
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNav.razor.internal.cs b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNav.razor.internal.cs
index 4752100592..b22316c812 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNav.razor.internal.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNav.razor.internal.cs
@@ -1,4 +1,4 @@
-namespace Bit.BlazorUI;
+namespace Bit.BlazorUI;
public partial class BitNav
{
@@ -217,6 +217,43 @@ internal bool GetForceAnchor(TItem item)
return item.GetValueFromProperty(NameSelectors.ForceAnchor.Name, false);
}
+ internal BitIconInfo? GetIcon(TItem item)
+ {
+ if (item is BitNavItem navItem)
+ {
+ return BitIconInfo.From(navItem.Icon, navItem.IconName);
+ }
+
+ if (item is BitNavOption navOption)
+ {
+ return BitIconInfo.From(navOption.Icon, navOption.IconName);
+ }
+
+ if (NameSelectors is null) return null;
+
+ BitIconInfo? icon = null;
+ if (NameSelectors.Icon.Selector is not null)
+ {
+ icon = NameSelectors.Icon.Selector!(item);
+ }
+ else
+ {
+ icon = item.GetValueFromProperty(NameSelectors.Icon.Name);
+ }
+
+ string? iconName = null;
+ if (NameSelectors.IconName.Selector is not null)
+ {
+ iconName = NameSelectors.IconName.Selector!(item);
+ }
+ else
+ {
+ iconName = item.GetValueFromProperty(NameSelectors.IconName.Name);
+ }
+
+ return BitIconInfo.From(icon, iconName);
+ }
+
internal string? GetIconName(TItem item)
{
if (item is BitNavItem navItem)
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNav.razor.parameters.cs b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNav.razor.parameters.cs
index f9eb458d98..9e646a62a8 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNav.razor.parameters.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNav.razor.parameters.cs
@@ -1,4 +1,4 @@
-namespace Bit.BlazorUI;
+namespace Bit.BlazorUI;
public partial class BitNav
{
@@ -13,10 +13,18 @@ public partial class BitNav
///
[Parameter] public bool AllExpanded { get; set; }
+ ///
+ /// The icon for the chevron-down element of each nav item.
+ /// Takes precedence over when both are set.
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ [Parameter] public BitIconInfo? ChevronDownIcon { get; set; }
+
///
/// The custom icon name of the chevron-down element of each nav item.
///
- [Parameter] public string? ChevronDownIcon { get; set; }
+ [Parameter] public string? ChevronDownIconName { get; set; }
///
/// Items to render as children.
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNavItem.cs b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNavItem.cs
index 635f43e122..99c5b6b4c5 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNavItem.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNavItem.cs
@@ -47,6 +47,19 @@ public class BitNavItem
///
public bool ForceAnchor { get; set; }
+ ///
+ /// Icon to render next to the nav item.
+ /// Takes precedence over when both are set.
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ ///
+ /// Bootstrap: Icon=BitIconInfo.Bi("gear-fill")
+ /// FontAwesome: Icon=BitIconInfo.Fa("solid house")
+ /// Custom CSS: Icon=BitIconInfo.Css("my-icon-class")
+ ///
+ public BitIconInfo? Icon { get; set; }
+
///
/// Name of an icon to render next to the nav item.
///
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNavNameSelectors.cs b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNavNameSelectors.cs
index 3d3a816801..2d8d21926d 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNavNameSelectors.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNavNameSelectors.cs
@@ -47,6 +47,11 @@ public class BitNavNameSelectors
///
public BitNameSelectorPair ForceAnchor { get; set; } = new(nameof(BitNavItem.ForceAnchor));
+ ///
+ /// The Icon field name and selector of the custom input class (see ).
+ ///
+ public BitNameSelectorPair Icon { get; set; } = new(nameof(BitNavItem.Icon));
+
///
/// The IconName field name and selector of the custom input class (see ).
///
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNavOption.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNavOption.razor.cs
index c553645173..e48897a683 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNavOption.razor.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNavOption.razor.cs
@@ -61,6 +61,19 @@ public partial class BitNavOption : ComponentBase, IDisposable
///
[Parameter] public bool ForceAnchor { get; set; }
+ ///
+ /// Icon to render next to the nav option.
+ /// Takes precedence over when both are set.
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ ///
+ /// Bootstrap: Icon=BitIconInfo.Bi("gear-fill")
+ /// FontAwesome: Icon=BitIconInfo.Fa("solid house")
+ /// Custom CSS: Icon=BitIconInfo.Css("my-icon-class")
+ ///
+ [Parameter] public BitIconInfo? Icon { get; set; }
+
///
/// Name of an icon to render next to the nav option.
///
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/_BitNavChild.razor b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/_BitNavChild.razor
index 13b479a432..3ee519234e 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/_BitNavChild.razor
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/_BitNavChild.razor
@@ -1,4 +1,4 @@
-@namespace Bit.BlazorUI
+@namespace Bit.BlazorUI
@typeparam TItem
@@ -13,7 +13,8 @@
var text = Nav.GetText(Item);
var childItems = Nav.GetChildItems(Item);
var description = Nav.GetDescription(Item);
- var iconName = Nav.GetIconName(Item);
+ var chevronIcon = BitIconInfo.From(Nav.ChevronDownIcon, Nav.ChevronDownIconName ?? $"ChevronRight {(isExpanded ? "bit-nav-exp" : "bit-ico-r90")}");
+ var icon = Nav.GetIcon(Item);
var url = Nav.GetUrl(Item);
var title = Nav.GetTitle(Item);
var target = Nav.GetTarget(Item);
@@ -66,7 +67,7 @@
@if (Nav.NoCollapse is false)
{
-
+
}
@text
@@ -82,7 +83,7 @@
@if (Nav.NoCollapse is false)
{
-
+
}
@text
@@ -144,7 +145,7 @@
class="bit-nav-cbt @Nav.Classes?.ToggleButton"
aria-expanded="@(isExpanded ? "true" : "false")"
aria-label="@(isExpanded ? colAriaLabel : expAriaLabel)">
-
+
}
+
}
@text
}
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/NavBar/BitNavBar.razor b/src/BlazorUI/Bit.BlazorUI/Components/Navs/NavBar/BitNavBar.razor
index 5eee9d83fa..68aac3dd4a 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/NavBar/BitNavBar.razor
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/NavBar/BitNavBar.razor
@@ -1,4 +1,4 @@
-@namespace Bit.BlazorUI
+@namespace Bit.BlazorUI
@inherits BitComponentBase
@typeparam TItem
@@ -41,7 +41,16 @@
}
else
{
-
+ var icon = GetIcon(item);
+ var iconName = GetIconName(item);
+
+ icon = BitIconInfo.From(icon, iconName);
+
+ @if (icon is not null)
+ {
+
+ }
+
@if (IconOnly is false)
{
@GetText(item)
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/NavBar/BitNavBar.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Navs/NavBar/BitNavBar.razor.cs
index 4953681af4..ad7742ec35 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/NavBar/BitNavBar.razor.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/NavBar/BitNavBar.razor.cs
@@ -80,7 +80,7 @@ public partial class BitNavBar : BitComponentBase where TItem : class
///
/// Names and selectors of the custom input type properties.
///
- [Parameter] public BitNavNameSelectors? NameSelectors { get; set; }
+ [Parameter] public BitNavBarNameSelectors? NameSelectors { get; set; }
///
/// Callback invoked when an item is clicked.
@@ -304,6 +304,28 @@ private string GetItemCssClass(TItem item, bool isEnabled)
return item.GetValueFromProperty(NameSelectors.Class.Name);
}
+ private BitIconInfo? GetIcon(TItem item)
+ {
+ if (item is BitNavBarItem navItem)
+ {
+ return navItem.Icon;
+ }
+
+ if (item is BitNavBarOption navOption)
+ {
+ return navOption.Icon;
+ }
+
+ if (NameSelectors is null) return null;
+
+ if (NameSelectors.Icon.Selector is not null)
+ {
+ return NameSelectors.Icon.Selector!(item);
+ }
+
+ return item.GetValueFromProperty(NameSelectors.Icon.Name);
+ }
+
private string? GetIconName(TItem item)
{
if (item is BitNavBarItem navItem)
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/NavBar/BitNavBarItem.cs b/src/BlazorUI/Bit.BlazorUI/Components/Navs/NavBar/BitNavBarItem.cs
index 9794c9aa7c..809e0a6c8a 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/NavBar/BitNavBarItem.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/NavBar/BitNavBarItem.cs
@@ -1,4 +1,4 @@
-namespace Bit.BlazorUI;
+namespace Bit.BlazorUI;
public class BitNavBarItem
{
@@ -13,8 +13,28 @@ public class BitNavBarItem
public object? Data { get; set; }
///
- /// Name of an icon to render next to the navbar item.
+ /// Gets or sets the icon to display using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
///
+ ///
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ ///
+ /// FontAwesome: Icon = BitIconInfo.Fa("solid house")
+ /// Bootstrap: Icon = BitIconInfo.Bi("gear-fill")
+ /// Custom CSS: Icon = BitIconInfo.Css("my-icon-class")
+ ///
+ public BitIconInfo? Icon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon to display from the built-in Fluent UI icons.
+ ///
+ ///
+ /// The icon name should be from the Fluent UI icon set (e.g., BitIconName.Home).
+ ///
+ /// For external icon libraries, use instead.
+ ///
public string? IconName { get; set; }
///
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/NavBar/BitNavBarNameSelectors.cs b/src/BlazorUI/Bit.BlazorUI/Components/Navs/NavBar/BitNavBarNameSelectors.cs
index 3f245993aa..934cd8fa5d 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/NavBar/BitNavBarNameSelectors.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/NavBar/BitNavBarNameSelectors.cs
@@ -1,4 +1,4 @@
-namespace Bit.BlazorUI;
+namespace Bit.BlazorUI;
public class BitNavBarNameSelectors
{
@@ -12,8 +12,15 @@ public class BitNavBarNameSelectors
///
public BitNameSelectorPair Data { get; set; } = new(nameof(BitNavBarItem.Data));
+ ///
+ /// The Icon field name and selector of the custom input class.
+ /// Maps to for external icon libraries.
+ ///
+ public BitNameSelectorPair Icon { get; set; } = new(nameof(BitNavBarItem.Icon));
+
///
/// The IconName field name and selector of the custom input class.
+ /// Maps to for built-in Fluent UI icons.
///
public BitNameSelectorPair IconName { get; set; } = new(nameof(BitNavBarItem.IconName));
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/NavBar/BitNavBarOption.cs b/src/BlazorUI/Bit.BlazorUI/Components/Navs/NavBar/BitNavBarOption.cs
index a9993528e9..b4c63bb15e 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/NavBar/BitNavBarOption.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/NavBar/BitNavBarOption.cs
@@ -1,4 +1,4 @@
-namespace Bit.BlazorUI;
+namespace Bit.BlazorUI;
public partial class BitNavBarOption : ComponentBase, IDisposable
{
@@ -21,8 +21,28 @@ public partial class BitNavBarOption : ComponentBase, IDisposable
[Parameter] public object? Data { get; set; }
///
- /// Name of an icon to render next to the navbar option.
+ /// Gets or sets the icon to display using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
///
+ ///
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ ///
+ /// FontAwesome: Icon=BitIconInfo.Fa("solid house")
+ /// Bootstrap: Icon=BitIconInfo.Bi("gear-fill")
+ /// Custom CSS: Icon=BitIconInfo.Css("my-icon-class")
+ ///
+ [Parameter] public BitIconInfo? Icon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon to display from the built-in Fluent UI icons.
+ ///
+ ///
+ /// The icon name should be from the Fluent UI icon set (e.g., BitIconName.Home).
+ ///
+ /// For external icon libraries, use instead.
+ ///
[Parameter] public string? IconName { get; set; }
///
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pagination/BitPagination.razor b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pagination/BitPagination.razor
index 4c360b58c6..7197f079ed 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pagination/BitPagination.razor
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pagination/BitPagination.razor
@@ -1,4 +1,4 @@
-@namespace Bit.BlazorUI
+@namespace Bit.BlazorUI
@inherits BitComponentBase
\ No newline at end of file
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pagination/BitPagination.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pagination/BitPagination.razor.cs
index c0dab66469..b11dd4ebab 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pagination/BitPagination.razor.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pagination/BitPagination.razor.cs
@@ -1,4 +1,4 @@
-using System.Text;
+using System.Text;
namespace Bit.BlazorUI;
@@ -44,14 +44,28 @@ public partial class BitPagination : BitComponentBase
[Parameter] public int DefaultSelectedPage { get; set; }
///
- /// The icon name of the first button.
+ /// The icon for the first button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
///
- [Parameter] public string? FirstIcon { get; set; }
+ [Parameter] public BitIconInfo? FirstButtonIcon { get; set; }
///
- /// The icon name of the last button.
+ /// The built-in icon name for the first button.
+ /// For external icon libraries, use instead.
///
- [Parameter] public string? LastIcon { get; set; }
+ [Parameter] public string? FirstButtonIconName { get; set; }
+
+ ///
+ /// The icon for the last button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? LastButtonIcon { get; set; }
+
+ ///
+ /// The built-in icon name for the last button.
+ /// For external icon libraries, use instead.
+ ///
+ [Parameter] public string? LastButtonIconName { get; set; }
///
/// The number of items to render in the middle of the pagination.
@@ -61,9 +75,16 @@ public partial class BitPagination : BitComponentBase
public int MiddleCount { get; set; }
///
- /// The icon name of the next button.
+ /// The icon for the next button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
///
- [Parameter] public string? NextIcon { get; set; }
+ [Parameter] public BitIconInfo? NextButtonIcon { get; set; }
+
+ ///
+ /// The built-in icon name for the next button.
+ /// For external icon libraries, use instead.
+ ///
+ [Parameter] public string? NextButtonIconName { get; set; }
///
/// The event callback for when selected page changes.
@@ -71,9 +92,16 @@ public partial class BitPagination : BitComponentBase
[Parameter] public EventCallback OnChange { get; set; }
///
- /// The icon name of the previous button.
+ /// The icon for the previous button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? PreviousButtonIcon { get; set; }
+
+ ///
+ /// The built-in icon name for the previous button.
+ /// For external icon libraries, use instead.
///
- [Parameter] public string? PreviousIcon { get; set; }
+ [Parameter] public string? PreviousButtonIconName { get; set; }
///
/// The selected page number.
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pivot/BitPivot.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pivot/BitPivot.razor.cs
index 7644a02eb8..eac89132f5 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pivot/BitPivot.razor.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pivot/BitPivot.razor.cs
@@ -1,4 +1,4 @@
-namespace Bit.BlazorUI;
+namespace Bit.BlazorUI;
///
/// The Pivot control and related tabs pattern are used for navigating frequently accessed, distinct content categories. Pivots allow for navigation between two or more contentviews and relies on text headers to articulate the different sections of content.
@@ -26,6 +26,12 @@ public partial class BitPivot : BitComponentBase
///
[Parameter] public BitPivotClassStyles? Classes { get; set; }
+ ///
+ /// The general color of the pivot.
+ ///
+ [Parameter, ResetClassBuilder]
+ public BitColor? Color { get; set; }
+
///
/// Default selected key for the pivot.
///
@@ -104,6 +110,28 @@ protected override void RegisterCssClasses()
_ => "bit-pvt-md"
});
+ ClassBuilder.Register(() => Color switch
+ {
+ BitColor.Primary => "bit-pvt-pri",
+ BitColor.Secondary => "bit-pvt-sec",
+ BitColor.Tertiary => "bit-pvt-ter",
+ BitColor.Info => "bit-pvt-inf",
+ BitColor.Success => "bit-pvt-suc",
+ BitColor.Warning => "bit-pvt-wrn",
+ BitColor.SevereWarning => "bit-pvt-swr",
+ BitColor.Error => "bit-pvt-err",
+ BitColor.PrimaryBackground => "bit-pvt-pbg",
+ BitColor.SecondaryBackground => "bit-pvt-sbg",
+ BitColor.TertiaryBackground => "bit-pvt-tbg",
+ BitColor.PrimaryForeground => "bit-pvt-pfg",
+ BitColor.SecondaryForeground => "bit-pvt-sfg",
+ BitColor.TertiaryForeground => "bit-pvt-tfg",
+ BitColor.PrimaryBorder => "bit-pvt-pbr",
+ BitColor.SecondaryBorder => "bit-pvt-sbr",
+ BitColor.TertiaryBorder => "bit-pvt-tbr",
+ _ => "bit-pvt-pri"
+ });
+
ClassBuilder.Register(() => HeaderType switch
{
BitPivotHeaderType.Link => "bit-pvt-lnk",
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pivot/BitPivot.scss b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pivot/BitPivot.scss
index abfc47b687..a74b4e844e 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pivot/BitPivot.scss
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pivot/BitPivot.scss
@@ -1,4 +1,4 @@
-@import "../../../Styles/functions.scss";
+@import "../../../Styles/functions.scss";
.bit-pvt {
gap: 1rem;
@@ -82,7 +82,7 @@
.bit-pvti-sel {
&::before {
- background-color: $clr-pri;
+ background-color: var(--bit-pvt-clr);
}
@media(hover:hover) {
@@ -99,16 +99,16 @@
.bit-pvti {
@media(hover:hover) {
&:hover {
- color: $clr-pri-text;
- background-color: $clr-pri-hover;
+ color: var(--bit-pvt-clr-text);
+ background-color: var(--bit-pvt-clr-hover);
}
}
}
.bit-pvti-sel {
font-weight: 400;
- color: $clr-pri-text;
- background-color: $clr-pri;
+ color: var(--bit-pvt-clr-text);
+ background-color: var(--bit-pvt-clr);
}
}
@@ -245,3 +245,106 @@
}
}
}
+
+.bit-pvt-pri {
+ --bit-pvt-clr: #{$clr-pri};
+ --bit-pvt-clr-hover: #{$clr-pri-hover};
+ --bit-pvt-clr-text: #{$clr-pri-text};
+}
+
+.bit-pvt-sec {
+ --bit-pvt-clr: #{$clr-sec};
+ --bit-pvt-clr-hover: #{$clr-sec-hover};
+ --bit-pvt-clr-text: #{$clr-sec-text};
+}
+
+.bit-pvt-ter {
+ --bit-pvt-clr: #{$clr-ter};
+ --bit-pvt-clr-hover: #{$clr-ter-hover};
+ --bit-pvt-clr-text: #{$clr-ter-text};
+}
+
+.bit-pvt-inf {
+ --bit-pvt-clr: #{$clr-inf};
+ --bit-pvt-clr-hover: #{$clr-inf-hover};
+ --bit-pvt-clr-text: #{$clr-inf-text};
+}
+
+.bit-pvt-suc {
+ --bit-pvt-clr: #{$clr-suc};
+ --bit-pvt-clr-hover: #{$clr-suc-hover};
+ --bit-pvt-clr-text: #{$clr-suc-text};
+}
+
+.bit-pvt-wrn {
+ --bit-pvt-clr: #{$clr-wrn};
+ --bit-pvt-clr-hover: #{$clr-wrn-hover};
+ --bit-pvt-clr-text: #{$clr-wrn-text};
+}
+
+.bit-pvt-swr {
+ --bit-pvt-clr: #{$clr-swr};
+ --bit-pvt-clr-hover: #{$clr-swr-hover};
+ --bit-pvt-clr-text: #{$clr-swr-text};
+}
+
+.bit-pvt-err {
+ --bit-pvt-clr: #{$clr-err};
+ --bit-pvt-clr-hover: #{$clr-err-hover};
+ --bit-pvt-clr-text: #{$clr-err-text};
+}
+
+
+.bit-pvt-pbg {
+ --bit-pvt-clr: #{$clr-bg-pri};
+ --bit-pvt-clr-hover: #{$clr-bg-pri-hover};
+ --bit-pvt-clr-text: #{$clr-fg-pri};
+}
+
+.bit-pvt-sbg {
+ --bit-pvt-clr: #{$clr-bg-sec};
+ --bit-pvt-clr-hover: #{$clr-bg-sec-hover};
+ --bit-pvt-clr-text: #{$clr-fg-pri};
+}
+
+.bit-pvt-tbg {
+ --bit-pvt-clr: #{$clr-bg-ter};
+ --bit-pvt-clr-hover: #{$clr-bg-ter-hover};
+ --bit-pvt-clr-text: #{$clr-fg-pri};
+}
+
+.bit-pvt-pfg {
+ --bit-pvt-clr: #{$clr-fg-pri};
+ --bit-pvt-clr-hover: #{$clr-fg-pri-hover};
+ --bit-pvt-clr-text: #{$clr-bg-pri};
+}
+
+.bit-pvt-sfg {
+ --bit-pvt-clr: #{$clr-fg-sec};
+ --bit-pvt-clr-hover: #{$clr-fg-sec-hover};
+ --bit-pvt-clr-text: #{$clr-bg-pri};
+}
+
+.bit-pvt-tfg {
+ --bit-pvt-clr: #{$clr-fg-ter};
+ --bit-pvt-clr-hover: #{$clr-fg-ter-hover};
+ --bit-pvt-clr-text: #{$clr-bg-pri};
+}
+
+.bit-pvt-pbr {
+ --bit-pvt-clr: #{$clr-brd-pri};
+ --bit-pvt-clr-hover: #{$clr-brd-pri-hover};
+ --bit-pvt-clr-text: #{$clr-fg-pri};
+}
+
+.bit-pvt-sbr {
+ --bit-pvt-clr: #{$clr-brd-sec};
+ --bit-pvt-clr-hover: #{$clr-brd-sec-hover};
+ --bit-pvt-clr-text: #{$clr-fg-pri};
+}
+
+.bit-pvt-tbr {
+ --bit-pvt-clr: #{$clr-brd-ter};
+ --bit-pvt-clr-hover: #{$clr-brd-ter-hover};
+ --bit-pvt-clr-text: #{$clr-fg-pri};
+}
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pivot/BitPivotItem.razor b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pivot/BitPivotItem.razor
index 1d350fad5d..a7619a2215 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pivot/BitPivotItem.razor
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pivot/BitPivotItem.razor
@@ -13,10 +13,13 @@
tabindex="@Parent?.GetPivotItemTabIndex(this)"
aria-selected="@(IsSelected ? "true": "false")">
- @if (@IconName.HasValue())
+ @{
+ var icon = BitIconInfo.From(Icon, IconName);
+ }
+ @if (icon is not null)
{
-
+
}
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pivot/BitPivotItem.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pivot/BitPivotItem.razor.cs
index b936a0c636..f5c9826da1 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pivot/BitPivotItem.razor.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Navs/Pivot/BitPivotItem.razor.cs
@@ -1,4 +1,4 @@
-namespace Bit.BlazorUI;
+namespace Bit.BlazorUI;
public partial class BitPivotItem : BitComponentBase
{
@@ -41,7 +41,14 @@ public partial class BitPivotItem : BitComponentBase
[Parameter] public string? HeaderText { get; set; }
///
- /// The icon name for the icon shown next to the pivot link.
+ /// Gets or sets the icon to display next to the pivot link using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ [Parameter] public BitIconInfo? Icon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon to display next to the pivot link from the built-in Fluent UI icons.
+ /// For external icon libraries, use instead.
///
[Parameter] public string? IconName { get; set; }
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Badge/BitBadge.razor b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Badge/BitBadge.razor
index b0c43c7e87..fd9094b903 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Badge/BitBadge.razor
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Badge/BitBadge.razor
@@ -1,4 +1,4 @@
-@namespace Bit.BlazorUI
+@namespace Bit.BlazorUI
@inherits BitComponentBase
@if (Dot is false)
{
- if (IconName.HasValue())
+ var icon = BitIconInfo.From(Icon, IconName);
+ if (icon is not null)
{
-
+
}
if (_content.HasValue())
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Badge/BitBadge.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Badge/BitBadge.razor.cs
index b4e4a52303..17c9b82b86 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Badge/BitBadge.razor.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Badge/BitBadge.razor.cs
@@ -1,4 +1,4 @@
-namespace Bit.BlazorUI;
+namespace Bit.BlazorUI;
///
/// Badge component is a small visual element used to highlight or indicate specific information within a user interface.
@@ -44,8 +44,31 @@ public partial class BitBadge : BitComponentBase
[Parameter] public bool Hidden { get; set; }
///
- /// Sets the Icon to use in the badge.
+ /// Gets or sets the icon to display using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
///
+ ///
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ ///
+ /// Bootstrap: Icon="BitIconInfo.Bi(\"gear-fill\")"
+ /// FontAwesome: Icon="BitIconInfo.Fa(\"solid house\")"
+ /// Custom CSS: Icon="BitIconInfo.Css(\"my-icon-class\")"
+ ///
+ [Parameter] public BitIconInfo? Icon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon to display from the built-in Fluent UI icons.
+ ///
+ ///
+ /// The icon name should be from the Fluent UI icon set (e.g., BitIconName.Emoji).
+ ///
+ /// Browse available names in BitIconName of the Bit.BlazorUI.Icons nuget package or the gallery:
+ /// .
+ ///
+ /// For external icon libraries, use instead.
+ ///
[Parameter] public string? IconName { get; set; }
///
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Badge/BitBadge.scss b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Badge/BitBadge.scss
index 98965e4560..fbcc96f71e 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Badge/BitBadge.scss
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Badge/BitBadge.scss
@@ -1,4 +1,4 @@
-@import "../../../Styles/functions.scss";
+@import "../../../Styles/functions.scss";
.bit-bdg {
position: relative;
@@ -25,6 +25,7 @@
.bit-bdg-ctn {
cursor: default;
font-weight: 600;
+ gap: spacing(0.5);
position: absolute;
align-items: center;
display: inline-flex;
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Message/BitMessage.razor b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Message/BitMessage.razor
index 6d14fcece6..a6cf9d20ed 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Message/BitMessage.razor
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Message/BitMessage.razor
@@ -1,4 +1,4 @@
-@namespace Bit.BlazorUI
+@namespace Bit.BlazorUI
@inherits BitComponentBase
-
+
}
@@ -32,14 +32,22 @@
@if (Truncate && Multiline is false)
{
-
+ @{
+ var expanderIcon = _isExpanded
+ ? BitIconInfo.From(CollapseIcon, CollapseIconName ?? "DoubleChevronUp")
+ : BitIconInfo.From(ExpandIcon, ExpandIconName ?? "DoubleChevronUp bit-ico-r180");
+ }
+
}
@if (OnDismiss.HasDelegate)
{
-
+ @{
+ var dismissIcon = BitIconInfo.From(DismissIcon, DismissIconName ?? "Cancel");
+ }
+
}
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Message/BitMessage.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Message/BitMessage.razor.cs
index 357e37b19c..be59ea5ccc 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Message/BitMessage.razor.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Message/BitMessage.razor.cs
@@ -37,9 +37,32 @@ public partial class BitMessage : BitComponentBase
[Parameter] public BitMessageClassStyles? Classes { get; set; }
///
- /// Custom Fabric icon name for the collapse icon in Truncate mode.
+ /// Gets or sets the icon for the collapse button in Truncate mode using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
///
- [Parameter] public string? CollapseIcon { get; set; }
+ ///
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ ///
+ /// Bootstrap: CollapseIcon="BitIconInfo.Bi(\"gear-fill\")"
+ /// FontAwesome: CollapseIcon="BitIconInfo.Fa(\"solid house\")"
+ /// Custom CSS: CollapseIcon="BitIconInfo.Css(\"my-icon-class\")"
+ ///
+ [Parameter] public BitIconInfo? CollapseIcon { get; set; }
+
+ ///
+ /// Gets or sets the name of the collapse icon in Truncate mode from the built-in Fluent UI icons.
+ ///
+ ///
+ /// The icon name should be from the Fluent UI icon set (e.g., BitIconName.ChevronUp).
+ ///
+ /// Browse available names in BitIconName of the Bit.BlazorUI.Icons nuget package or the gallery:
+ /// .
+ ///
+ /// For external icon libraries, use instead.
+ ///
+ [Parameter] public string? CollapseIconName { get; set; }
///
/// The general color of the message.
@@ -53,9 +76,32 @@ public partial class BitMessage : BitComponentBase
[Parameter] public RenderFragment? Content { get; set; }
///
- /// Custom Fabric icon name to replace the dismiss icon. If unset, default will be the Fabric Cancel icon.
+ /// The icon for the dismiss button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
///
- [Parameter] public string? DismissIcon { get; set; }
+ ///
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ ///
+ /// Bootstrap: DismissIcon="BitIconInfo.Bi(\"x-circle-fill\")"
+ /// FontAwesome: DismissIcon="BitIconInfo.Fa(\"solid xmark\")"
+ /// Custom CSS: DismissIcon="BitIconInfo.Css(\"my-dismiss-icon\")"
+ ///
+ [Parameter] public BitIconInfo? DismissIcon { get; set; }
+
+ ///
+ /// Gets or sets the name of the dismiss icon from the built-in Fluent UI icons. If unset, default will be the Fluent UI Cancel icon.
+ ///
+ ///
+ /// The icon name should be from the Fluent UI icon set (e.g., BitIconName.Blocked2Solid).
+ ///
+ /// Browse available names in BitIconName of the Bit.BlazorUI.Icons nuget package or the gallery:
+ /// .
+ ///
+ /// For external icon libraries, use instead.
+ ///
+ [Parameter] public string? DismissIconName { get; set; }
///
/// Determines the elevation of the message, a scale from 1 to 24.
@@ -64,9 +110,32 @@ public partial class BitMessage : BitComponentBase
public int? Elevation { get; set; }
///
- /// Custom Fabric icon name for the expand icon in Truncate mode.
+ /// Gets or sets the icon for the expand button in Truncate mode using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
///
- [Parameter] public string? ExpandIcon { get; set; }
+ ///
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ ///
+ /// Bootstrap: ExpandIcon="BitIconInfo.Bi(\"chevron-double-down\")"
+ /// FontAwesome: ExpandIcon="BitIconInfo.Fa(\"solid chevron-down\")"
+ /// Custom CSS: ExpandIcon="BitIconInfo.Css(\"my-expand-icon\")"
+ ///
+ [Parameter] public BitIconInfo? ExpandIcon { get; set; }
+
+ ///
+ /// Gets or sets the name of the expand icon in Truncate mode from the built-in Fluent UI icons.
+ ///
+ ///
+ /// The icon name should be from the Fluent UI icon set (e.g., BitIconName.ChevronDown).
+ ///
+ /// Browse available names in BitIconName of the Bit.BlazorUI.Icons nuget package or the gallery:
+ /// .
+ ///
+ /// For external icon libraries, use instead.
+ ///
+ [Parameter] public string? ExpandIconName { get; set; }
///
/// Prevents rendering the icon of the message.
@@ -74,8 +143,33 @@ public partial class BitMessage : BitComponentBase
[Parameter] public bool HideIcon { get; set; }
///
- /// Custom icon to replace the message icon. If unset, default will be the icon set by Type.
+ /// Gets or sets the icon to display using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ ///
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ ///
+ /// Bootstrap: Icon="BitIconInfo.Bi(\"info-circle-fill\")"
+ /// FontAwesome: Icon="BitIconInfo.Fa(\"solid circle-info\")"
+ /// Custom CSS: Icon="BitIconInfo.Css(\"my-message-icon\")"
+ ///
+ [Parameter] public BitIconInfo? Icon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon to display from the built-in Fluent UI icons.
///
+ ///
+ /// The icon name should be from the Fluent UI icon set (e.g., BitIconName.Info).
+ ///
+ /// Browse available names in BitIconName of the Bit.BlazorUI.Icons nuget package or the gallery:
+ /// .
+ ///
+ /// If unset, the icon will be selected automatically based on .
+ ///
+ /// For external icon libraries, use instead.
+ ///
[Parameter] public string? IconName { get; set; }
///
@@ -216,6 +310,8 @@ private async Task AutoDismissAsync(TimeSpan delay, CancellationToken ct)
private string GetTextRole() => Role ?? (Color is BitColor.Success or BitColor.Info ? "status" : "alert");
+ private BitIconInfo? GetIcon() => BitIconInfo.From(Icon, GetIconName());
+
private string GetIconName() => IconName ?? _IconMap[Color ?? BitColor.Info];
@@ -232,7 +328,7 @@ protected override async ValueTask DisposeAsync(bool disposing)
- private static Dictionary _IconMap = new()
+ private static readonly Dictionary _IconMap = new()
{
[BitColor.Primary] = "Info",
[BitColor.Secondary] = "Info",
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Message/BitMessage.scss b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Message/BitMessage.scss
index 66cc53f798..8a40e8283d 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Message/BitMessage.scss
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Message/BitMessage.scss
@@ -1,4 +1,4 @@
-@import "../../../Styles/functions.scss";
+@import "../../../Styles/functions.scss";
.bit-msg {
width: 100%;
@@ -84,6 +84,7 @@
cursor: pointer;
min-width: spacing(4);
min-height: spacing(4);
+ color: var(--bit-msg-clr);
background-color: transparent;
}
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Persona/BitPersona.razor b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Persona/BitPersona.razor
index d5b4cad271..57406f1597 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Persona/BitPersona.razor
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Persona/BitPersona.razor
@@ -1,8 +1,11 @@
-@namespace Bit.BlazorUI
+@namespace Bit.BlazorUI
@inherits BitComponentBase
@{
+ var presentationIconName = GetPresentationIconName();
var presentationIcon = GetPresentationIcon();
+
+ var presenceIconInfo = BitIconInfo.From(presentationIcon, presentationIconName);
}
+ @if (presenceIconInfo is not null)
+ {
+
+ }
}
else
{
-
+
}
}
else
@@ -64,14 +74,14 @@
{
var dimension = GetPersonaImageDimension();
-
+ class="bit-prs-img @Classes?.Image"
+ style="display:@(_isLoaded ? "unset" : "none");@Styles?.Image" />
}
}
}
@@ -91,17 +101,28 @@
}
else
{
-
-
+ var actionIcon = BitIconInfo.From(ActionIcon, ActionIconName ?? "Edit");
+
+ @if (actionIcon is not null)
+ {
+
+ }
}
}
else if (Presence is not BitPersonaPresence.None)
{
- @if (presentationIcon.HasValue())
+ @if (presenceIconInfo is not null)
{
-
+
}
}
@@ -111,7 +132,9 @@
@if (HidePersonaDetails is false || Size is BitPersonaSize.Size8)
{
-
+
@if (PrimaryTextTemplate is not null)
{
@PrimaryTextTemplate
@@ -121,7 +144,9 @@
@PrimaryText
}
-
+
@if (SecondaryTextTemplate is not null)
{
@SecondaryTextTemplate
@@ -131,7 +156,9 @@
@SecondaryText
}
-
+
@if (TertiaryTextTemplate is not null)
{
@TertiaryTextTemplate
@@ -141,7 +168,9 @@
@TertiaryText
}
-
+
@if (OptionalTextTemplate is not null)
{
@OptionalTextTemplate
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Persona/BitPersona.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Persona/BitPersona.razor.cs
index 976235ffca..dee9dfb4f6 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Persona/BitPersona.razor.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Persona/BitPersona.razor.cs
@@ -15,10 +15,23 @@ public partial class BitPersona : BitComponentBase
///
[Parameter] public string ActionButtonTitle { get; set; } = "Edit image";
+ ///
+ /// Icon for the icon button of the custom action.
+ ///
+ ///
+ /// When both and are provided, takes precedence.
+ /// Use this property when you need to configure an external or custom icon (for example, when using a custom icon font or SVG).
+ ///
+ [Parameter] public BitIconInfo? ActionIcon { get; set; }
+
///
/// Icon name for the icon button of the custom action.
///
- [Parameter] public string? ActionIconName { get; set; } = "Edit";
+ ///
+ /// This is a convenience property for specifying an icon from the built-in icon set.
+ /// If is specified, this property is ignored and the value of will be used instead.
+ ///
+ [Parameter] public string? ActionIconName { get; set; }
///
/// Optional Custom template for the custom action element.
@@ -123,9 +136,45 @@ public partial class BitPersona : BitComponentBase
[Parameter] public BitPersonaPresence Presence { get; set; }
///
- /// The icons to be used for the presence status.
- ///
- [Parameter] public Dictionary? PresenceIcons { get; set; }
+ /// The icons to be used for the presence status with .
+ ///
+ ///
+ /// When both and are provided, entries in
+ /// take precedence for the same key.
+ /// Use this dictionary when you need to configure presence icons using full metadata
+ /// (for example, to use custom icon sources or other advanced icon settings supported by ).
+ ///
+ /// Example:
+ ///
+ /// PresenceIcons = new()
+ /// {
+ /// [BitPersonaPresence.Online] = new BitIconInfo { Name = "SkypeCircleCheck" },
+ /// [BitPersonaPresence.Offline] = new BitIconInfo { Name = "SkypeCircleMinus" }
+ /// };
+ ///
+ ///
+ ///
+ [Parameter] public Dictionary? PresenceIcons { get; set; }
+
+ ///
+ /// The icon names to be used for the presence status.
+ ///
+ ///
+ /// This dictionary is intended for simple scenarios where built-in icon names are sufficient.
+ /// For any value that also exists in ,
+ /// the corresponding entry in is ignored.
+ ///
+ /// Example:
+ ///
+ /// PresenceIconNames = new()
+ /// {
+ /// [BitPersonaPresence.Online] = "SkypeCircleCheck",
+ /// [BitPersonaPresence.Away] = "SkypeCircleClock"
+ /// };
+ ///
+ ///
+ ///
+ [Parameter] public Dictionary? PresenceIconNames { get; set; }
///
/// Presence title to be shown as a tooltip on hover over the presence icon.
@@ -287,16 +336,18 @@ protected override void RegisterCssStyles()
return FormattableString.Invariant($"width:{presentationSize}px;height:{presentationSize}px;{position}{Styles?.Presence?.Trim(';')}");
}
- private string? GetPresentationIcon()
+ private BitIconInfo? GetPresentationIcon()
{
if (Size is BitPersonaSize.Size8 or BitPersonaSize.Size24 or BitPersonaSize.Size32) return null;
- if (PresenceIcons?.ContainsKey(Presence) ?? false)
- {
- return PresenceIcons[Presence];
- }
+ return PresenceIcons?.TryGetValue(Presence, out var icon) is true ? icon : null;
+ }
+
+ private string? GetPresentationIconName()
+ {
+ if (Size is BitPersonaSize.Size8 or BitPersonaSize.Size24 or BitPersonaSize.Size32) return null;
- return null;
+ return PresenceIconNames?.TryGetValue(Presence, out var iconName) is true ? iconName : null;
}
private string? GetCoinClass()
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/SnackBar/BitSnackBar.razor b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/SnackBar/BitSnackBar.razor
index 490a40529a..752f7eeb53 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/SnackBar/BitSnackBar.razor
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/SnackBar/BitSnackBar.razor
@@ -1,4 +1,4 @@
-@namespace Bit.BlazorUI
+@namespace Bit.BlazorUI
@inherits BitComponentBase
-
+ @{
+ var dismissIcon = BitIconInfo.From(DismissIcon, DismissIconName ?? "Cancel");
+ }
+
}
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/SnackBar/BitSnackBar.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/SnackBar/BitSnackBar.razor.cs
index 37dad24f1d..3e49eb46ed 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/SnackBar/BitSnackBar.razor.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/SnackBar/BitSnackBar.razor.cs
@@ -29,6 +29,11 @@ public partial class BitSnackBar : BitComponentBase
///
[Parameter] public BitSnackBarClassStyles? Classes { get; set; }
+ ///
+ /// The icon of the dismiss button.
+ ///
+ [Parameter] public BitIconInfo? DismissIcon { get; set; }
+
///
/// The icon name of the dismiss button.
///
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Tag/BitTag.razor b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Tag/BitTag.razor
index 285148027d..1e1fbebac0 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Tag/BitTag.razor
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Tag/BitTag.razor
@@ -1,4 +1,4 @@
-@namespace Bit.BlazorUI
+@namespace Bit.BlazorUI
@inherits BitComponentBase
+
}
@if (Text is not null)
@@ -26,15 +28,15 @@
@if (OnDismiss.HasDelegate)
{
+ var dismissIcon = BitIconInfo.From(DismissIcon, DismissIconName ?? "Cancel");
+
-
+ aria-label="Dismiss">
+
}
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Tag/BitTag.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Tag/BitTag.razor.cs
index 53f299bd02..844d912b9b 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Tag/BitTag.razor.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Tag/BitTag.razor.cs
@@ -37,8 +37,56 @@ public partial class BitTag : BitComponentBase
public BitColor? Color { get; set; }
///
- /// The icon to show inside the tag.
+ /// Gets or sets the icon to use for the dismiss button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ /// Defaults to the built-in Cancel icon when neither is set.
///
+ ///
+ /// Use this property to render a custom dismiss icon from external libraries like FontAwesome or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ [Parameter] public BitIconInfo? DismissIcon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon to use for the dismiss button from the built-in Fluent UI icons.
+ /// Defaults to Cancel when not set.
+ ///
+ ///
+ /// The icon name should be from the Fluent UI icon set (e.g., BitIconName.ChromeClose).
+ ///
+ /// For external icon libraries, use instead.
+ ///
+ [Parameter] public string? DismissIconName { get; set; }
+
+ ///
+ /// Gets or sets the icon to display using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ ///
+ /// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
+ /// For built-in Fluent UI icons, use instead.
+ ///
+ ///
+ /// Bootstrap: Icon="BitIconInfo.Bi("gear-fill")"
+ /// FontAwesome: Icon="BitIconInfo.Fa("solid house")"
+ /// Custom CSS: Icon="BitIconInfo.Css("my-icon-class")"
+ ///
+ [Parameter] public BitIconInfo? Icon { get; set; }
+
+ ///
+ /// Gets or sets the name of the icon to display from the built-in Fluent UI icons.
+ ///
+ ///
+ /// The icon name should be from the Fluent UI icon set (e.g., BitIconName.AddFriend).
+ ///
+ /// Browse available names in BitIconName of the Bit.BlazorUI.Icons nuget package or the gallery:
+ /// .
+ ///
+ /// The value is case-sensitive and must match a valid icon identifier.
+ /// If not set or set to null, no icon will be rendered.
+ ///
+ /// For external icon libraries, use instead.
+ ///
[Parameter] public string? IconName { get; set; }
///
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Tag/BitTagParams.cs b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Tag/BitTagParams.cs
index 9da43e75ac..d080d8282e 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Tag/BitTagParams.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Tag/BitTagParams.cs
@@ -31,11 +31,28 @@ public class BitTagParams : BitComponentBaseParams, IBitComponentParams
///
public BitColor? Color { get; set; }
+ ///
+ /// The icon to show inside the tag using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ public BitIconInfo? Icon { get; set; }
+
///
/// The icon to show inside the tag.
///
public string? IconName { get; set; }
+ ///
+ /// The icon to use for the dismiss button using custom CSS classes for external icon libraries.
+ /// Takes precedence over when both are set.
+ ///
+ public BitIconInfo? DismissIcon { get; set; }
+
+ ///
+ /// The name of the icon to use for the dismiss button from the built-in Fluent UI icons.
+ ///
+ public string? DismissIconName { get; set; }
+
///
/// Reverses the direction flow of the content of the tag.
///
@@ -92,6 +109,21 @@ public void UpdateParameters(BitTag bitTag)
bitTag.Color = Color.Value;
}
+ if (DismissIcon is not null && bitTag.HasNotBeenSet(nameof(DismissIcon)))
+ {
+ bitTag.DismissIcon = DismissIcon;
+ }
+
+ if (DismissIconName.HasValue() && bitTag.HasNotBeenSet(nameof(DismissIconName)))
+ {
+ bitTag.DismissIconName = DismissIconName;
+ }
+
+ if (Icon is not null && bitTag.HasNotBeenSet(nameof(Icon)))
+ {
+ bitTag.Icon = Icon;
+ }
+
if (IconName.HasValue() && bitTag.HasNotBeenSet(nameof(IconName)))
{
bitTag.IconName = IconName;
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Surfaces/Accordion/BitAccordion.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Surfaces/Accordion/BitAccordion.razor.cs
index aa2792c05d..d5cd02ec37 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Surfaces/Accordion/BitAccordion.razor.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Surfaces/Accordion/BitAccordion.razor.cs
@@ -1,10 +1,22 @@
-namespace Bit.BlazorUI;
+namespace Bit.BlazorUI;
///
/// The Accordion component allows the user to show and hide sections of related content on a page.
///
public partial class BitAccordion : BitComponentBase
{
+ ///
+ /// The color kind of the background of the accordion.
+ ///
+ [Parameter, ResetClassBuilder]
+ public BitColorKind? Background { get; set; }
+
+ ///
+ /// The color kind of the border of the accordion.
+ ///
+ [Parameter, ResetClassBuilder]
+ public BitColorKind? Border { get; set; }
+
///
/// Alias for the ChildContent parameter.
///
@@ -78,6 +90,24 @@ protected override void RegisterCssClasses()
ClassBuilder.Register(() => IsExpanded ? Classes?.Expanded : string.Empty);
ClassBuilder.Register(() => NoBorder ? "bit-acd-nbd" : string.Empty);
+
+ ClassBuilder.Register(() => Background switch
+ {
+ BitColorKind.Primary => "bit-acd-pbg",
+ BitColorKind.Secondary => "bit-acd-sbg",
+ BitColorKind.Tertiary => "bit-acd-tbg",
+ BitColorKind.Transparent => "bit-acd-rbg",
+ _ => string.Empty
+ });
+
+ ClassBuilder.Register(() => Border switch
+ {
+ BitColorKind.Primary => "bit-acd-pbr",
+ BitColorKind.Secondary => "bit-acd-sbr",
+ BitColorKind.Tertiary => "bit-acd-tbr",
+ BitColorKind.Transparent => "bit-acd-rbr",
+ _ => string.Empty
+ });
}
protected override void RegisterCssStyles()
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Surfaces/Accordion/BitAccordion.scss b/src/BlazorUI/Bit.BlazorUI/Components/Surfaces/Accordion/BitAccordion.scss
index 6fa72c4218..95673884b0 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Surfaces/Accordion/BitAccordion.scss
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Surfaces/Accordion/BitAccordion.scss
@@ -1,4 +1,4 @@
-@import "../../../Styles/functions.scss";
+@import "../../../Styles/functions.scss";
.bit-acd {
width: 100%;
@@ -33,6 +33,41 @@
}
}
+
+.bit-acd-pbg {
+ background-color: $clr-bg-pri;
+}
+
+.bit-acd-sbg {
+ background-color: $clr-bg-sec;
+}
+
+.bit-acd-tbg {
+ background-color: $clr-bg-ter;
+}
+
+.bit-acd-rbg {
+ background-color: transparent;
+}
+
+
+.bit-acd-pbr {
+ border-color: $clr-brd-pri;
+}
+
+.bit-acd-sbr {
+ border-color: $clr-brd-sec;
+}
+
+.bit-acd-tbr {
+ border-color: $clr-brd-ter;
+}
+
+.bit-acd-rbr {
+ border-color: transparent;
+}
+
+
.bit-acd-hdr {
display: flex;
cursor: pointer;
diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Surfaces/Splitter/BitSplitter.razor b/src/BlazorUI/Bit.BlazorUI/Components/Surfaces/Splitter/BitSplitter.razor
index 60c5b2c334..23eb8af9cd 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Surfaces/Splitter/BitSplitter.razor
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Surfaces/Splitter/BitSplitter.razor
@@ -1,4 +1,4 @@
-@namespace Bit.BlazorUI
+@namespace Bit.BlazorUI
@inherits BitComponentBase
The Button offers three style variants: Fill (default), Outline, and Text.
+
Using the Variant parameter and its value of type BitVariant enum:
Fill
@@ -58,8 +59,19 @@
-
-
BitButton has an icon slot that, if specified, renders an icon that can be set at the start (default) or revered positioned at the end of component.
+
+
The Title parameter sets a tooltip that appears when hovering over the button.
+
+
+ Hover me
+ Hover me
+ Hover me
+
+
+
+
+
BitButton has an icon slot that, if specified, renders an icon at the start (default) or end of the component using IconPosition.
+
Using the IconPosition parameter and BitIconPosition enum as its value:
@@ -80,15 +92,15 @@
- End
- End
- End
+ End
+ End
+ End
- End
- End
- End
+ End
+ End
+ End
@@ -98,13 +110,13 @@
- End
- End
- End
+ End
+ End
+ End
-
+
Demonstrate the dynamic loading state of buttons using the "IsLoading" property. Customize the loading label to provide users with feedback on ongoing processes.
@@ -147,8 +159,9 @@
-
+
Explore customizing the loading label and its different positions, including start, end, bottom, and top.
+
Using the LoadingLabelPosition parameter and its value of type BitLabelPosition enum:
-
+
Use BitButton as a hyperlink to external URLs, opening either in a new tab or the same tab.
@@ -201,8 +214,9 @@
-
+
Use BitButton as a hyperlink to external URLs, with a rel attribute.
+
The actual rel attribute value is generated using the provided BitLinkRels and Href value.
@@ -215,8 +229,9 @@
-
+
Demonstrates a floating button with adjustable float modes and customizable positions.
+
Using the FloatPosition parameter and its value of type BitPosition enum:
@@ -268,8 +283,9 @@
-
+
BitButton supports three different types, 'Submit' for sending form data, 'Reset' to clear form inputs, and 'Button' to provide flexibility for different interaction purposes.
+
Using the ButtonType parameter and its value of type BitButtonType enum:
@if (formIsValidSubmit is false)
@@ -298,7 +314,7 @@
-
+
Here are some examples of customizing the button content.
@@ -307,7 +323,9 @@
A primary template
-
+
+
+
Primary text
@@ -316,7 +334,9 @@
-
+
+
+
@@ -331,10 +351,10 @@
-
Utilize the "LoadingTemplate" feature to design personalized loading indicators and messages, providing a unique visual experience during loading states.
+
Utilize the LoadingTemplate feature to design personalized loading indicators and messages, providing a unique visual experience during loading states.
-
+ Click me
@@ -346,7 +366,7 @@
-
+
Managing button click event (OnClick).
@@ -356,8 +376,9 @@
-
+
Varying sizes for buttons tailored to meet diverse design needs, ensuring flexibility and visual hierarchy within your interface.
+
Using the Size parameter and its value of type BitSize enum:
Small:
@@ -433,14 +454,15 @@
Text
-
+
Setting the FullWidth makes the button occupy 100% of its container's width.
Full Width Button
-
+
FixedColor flag parameter makes the foreground color to be fixed regardless of its hovering state.
+
Using the Color parameter and its value of type BitColor enum:
-
+
Offering a range of specialized color variants with Primary being the default, providing visual cues for specific actions or states within your application.
+
Using the Color parameter and its value of type BitColor enum:
Primary
@@ -567,8 +590,9 @@
-
+
Use icons from external libraries like FontAwesome, Material Icons, and Bootstrap Icons with the Icon parameter.
+
See the BitIconInfo section in the parameters table for usage.
@@ -634,8 +658,9 @@
-
+
Empower customization by overriding default styles and classes, allowing tailored design modifications to suit specific UI requirements.
+
Using the Styles and Classes parameters and their value of BitButtonClassStyles class:
Component's Style & Class:
@@ -675,7 +700,7 @@
-
+
Use BitButton in right-to-left (RTL).
diff --git a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/Button/BitButtonDemo.razor.cs b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/Button/BitButtonDemo.razor.cs
index a53ad46010..adab405526 100644
--- a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/Button/BitButtonDemo.razor.cs
+++ b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/Button/BitButtonDemo.razor.cs
@@ -1,4 +1,4 @@
-namespace Bit.BlazorUI.Demo.Client.Core.Pages.Components.Buttons.Button;
+namespace Bit.BlazorUI.Demo.Client.Core.Pages.Components.Buttons.Button;
public partial class BitButtonDemo
{
@@ -9,21 +9,21 @@ public partial class BitButtonDemo
Name = "AllowDisabledFocus",
Type = "bool",
DefaultValue = "true",
- Description = "Whether the button can have focus in disabled mode.",
+ Description = "Keeps the disabled button focusable by not forcing a negative tabindex when IsEnabled is false.",
},
new()
{
Name = "AriaDescription",
Type = "string?",
DefaultValue = "null",
- Description = "Detailed description of the button for the benefit of screen readers.",
+ Description = "Detailed description of the button for the benefit of screen readers (rendered into aria-describedby).",
},
new()
{
Name = "AriaHidden",
Type = "bool",
DefaultValue = "false",
- Description = "If true, adds an aria-hidden attribute instructing screen readers to ignore the element.",
+ Description = "If true, adds an aria-hidden attribute instructing screen readers to ignore the button.",
},
new()
{
@@ -37,7 +37,7 @@ public partial class BitButtonDemo
Name = "ButtonType",
Type = "BitButtonType?",
DefaultValue = "null",
- Description = "The value of the type attribute of the button.",
+ Description = "The type of the button element; defaults to submit inside an EditForm otherwise button.",
LinkType = LinkType.Link,
Href = "#button-type-enum",
},
@@ -138,7 +138,9 @@ public partial class BitButtonDemo
Name = "IconName",
Type = "string?",
DefaultValue = "null",
- Description = "The name of the icon to render inside the button from the built-in Fluent UI icons."
+ Description = "Gets or sets the name of the icon to display from the built-in Fluent UI icons.",
+ LinkType = LinkType.Link,
+ Href = "https://blazorui.bitplatform.dev/iconography",
},
new()
{
@@ -148,6 +150,15 @@ public partial class BitButtonDemo
Description = "Determines that only the icon should be rendered."
},
new()
+ {
+ Name = "IconPosition",
+ Type = "BitIconPosition?",
+ DefaultValue = "null",
+ Description = "Gets or sets the position of the icon relative to the component's content.",
+ LinkType = LinkType.Link,
+ Href = "#icon-position-enum",
+ },
+ new()
{
Name = "IconUrl",
Type = "string?",
@@ -189,7 +200,7 @@ public partial class BitButtonDemo
Name = "OnClick",
Type = "EventCallback",
DefaultValue = "",
- Description = "The callback for the click event of the button with a bool argument passing the current loading state.",
+ Description = "Raised when the button is clicked; receives a bool indicating the current loading state.",
},
new()
{
@@ -206,18 +217,11 @@ public partial class BitButtonDemo
Description = "Enables re-clicking in loading state when AutoLoading is enabled.",
},
new()
- {
- Name = "ReversedIcon",
- Type = "bool",
- DefaultValue = "false",
- Description = "Reverses the positions of the icon and the main content of the button.",
- },
- new()
{
Name = "Rel",
Type = "BitLinkRels?",
DefaultValue = "null",
- Description = "If Href provided, specifies the relationship between the current document and the linked document.",
+ Description = "Sets the rel attribute for link-rendered buttons when Href is a non-anchor URL; ignored for empty or hash-only hrefs.",
LinkType = LinkType.Link,
Href = "#link-rels",
},
@@ -240,7 +244,7 @@ public partial class BitButtonDemo
Name = "Size",
Type = "BitSize?",
DefaultValue = "null",
- Description = "The size of the button.",
+ Description = "Sets the preset size for typography and padding of the button.",
LinkType = LinkType.Link,
Href = "#size-enum",
},
@@ -249,7 +253,7 @@ public partial class BitButtonDemo
Name = "Styles",
Type = "BitButtonClassStyles?",
DefaultValue = "null",
- Description = "Custom CSS styles for different parts of the button.",
+ Description = "Custom inline styles for different parts of the button.",
LinkType = LinkType.Link,
Href = "#button-class-styles",
},
@@ -284,6 +288,7 @@ public partial class BitButtonDemo
{
Id = "button-class-styles",
Title = "BitButtonClassStyles",
+ Description = "Defines per-part CSS class/style values for BitButton.",
Parameters =
[
new()
@@ -291,56 +296,56 @@ public partial class BitButtonDemo
Name = "Root",
Type = "string?",
DefaultValue = "null",
- Description = "Custom CSS classes/styles for the root element of the BitButton."
+ Description = "Custom class or style applied to the root element."
},
new()
{
Name = "Icon",
Type = "string?",
DefaultValue = "null",
- Description = "Custom CSS classes/styles for the icon of the BitButton."
+ Description = "Custom class or style applied to the icon element."
},
new()
{
Name = "Container",
Type = "string?",
DefaultValue = "null",
- Description = "Custom CSS classes/styles for the internal container of the BitButton."
+ Description = "Custom class or style applied to the internal container."
},
new()
{
Name = "Primary",
Type = "string?",
DefaultValue = "null",
- Description = "Custom CSS classes/styles for the primary section of the BitButton."
+ Description = "Custom class or style applied to the primary section."
},
new()
{
Name = "Secondary",
Type = "string?",
DefaultValue = "null",
- Description = "Custom CSS classes/styles for the secondary section of the BitButton."
+ Description = "Custom class or style applied to the secondary section."
},
new()
{
Name = "LoadingContainer",
Type = "string?",
DefaultValue = "null",
- Description = "Custom CSS classes/styles for the loading container of the BitButton."
+ Description = "Custom class or style applied to the loading container."
},
new()
{
Name = "Spinner",
Type = "string?",
DefaultValue = "null",
- Description = "Custom CSS classes/styles for the spinner section of the BitButton."
+ Description = "Custom class or style applied to the spinner element."
},
new()
{
Name = "LoadingLabel",
Type = "string?",
DefaultValue = "null",
- Description = "Custom CSS classes/styles for the loading label section of the BitButton."
+ Description = "Custom class or style applied to the loading label."
},
]
},
@@ -570,6 +575,27 @@ public partial class BitButtonDemo
]
},
new()
+ {
+ Id = "icon-position-enum",
+ Name = "BitIconPosition",
+ Description = "Describes the placement of an icon relative to other content.",
+ Items =
+ [
+ new()
+ {
+ Name = "Start",
+ Description = "Icon renders before the content (default).",
+ Value = "0",
+ },
+ new()
+ {
+ Name = "End",
+ Description = "Icon renders after the content.",
+ Value = "1",
+ }
+ ]
+ },
+ new()
{
Id = "label-position-enum",
Name = "BitLabelPosition",
@@ -894,5 +920,5 @@ private void HandleInvalidSubmit()
}
[Inject] private IJSRuntime _js { get; set; } = default!;
- private async Task ScrollToFloat() => await _js.ScrollToElement("example9");
+ private async Task ScrollToFloat() => await _js.ScrollToElement("example10");
}
diff --git a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/Button/BitButtonDemo.razor.samples.cs b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/Button/BitButtonDemo.razor.samples.cs
index 0dc74da841..b38e3bf9c1 100644
--- a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/Button/BitButtonDemo.razor.samples.cs
+++ b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/Button/BitButtonDemo.razor.samples.cs
@@ -1,4 +1,4 @@
-namespace Bit.BlazorUI.Demo.Client.Core.Pages.Components.Buttons.Button;
+namespace Bit.BlazorUI.Demo.Client.Core.Pages.Components.Buttons.Button;
public partial class BitButtonDemo
{
@@ -30,6 +30,11 @@ public partial class BitButtonDemo
Text";
private readonly string example4RazorCode = @"
+Hover me
+Hover me
+Hover me";
+
+ private readonly string example5RazorCode = @"
@@ -42,23 +47,23 @@ public partial class BitButtonDemo
StartStart
-End
-End
-End
+End
+End
+End
-End
-End
-End
+End
+End
+EndStartStartStart
-End
-End
-End";
+End
+End
+End";
- private readonly string example5RazorCode = @"
+ private readonly string example6RazorCode = @"
Click me
@@ -90,7 +95,7 @@ Click me
Reclickable
";
- private readonly string example5CsharpCode = @"
+ private readonly string example6CsharpCode = @"
private bool fillIsLoading;
private bool outlineIsLoading;
private bool textIsLoading;
@@ -148,7 +153,7 @@ private Task AutoLoadingReclick(bool isLoading)
return clickTsc.Task;
}";
- private readonly string example6RazorCode = @"
+ private readonly string example7RazorCode = @"
";
- private readonly string example7RazorCode = @"
+ private readonly string example8RazorCode = @"
Open bitplatform.dev
@@ -190,7 +195,7 @@ Open bitplatform.dev
Go to bitplatform GitHub
";
- private readonly string example8RazorCode = @"
+ private readonly string example9RazorCode = @"
Open bitplatform.dev with a rel attribute (nofollow)
@@ -199,7 +204,7 @@ Open bitplatform.dev with a rel attribute (nofollow)
Open bitplatform.dev with a rel attribute (nofollow & noreferrer)
";
- private readonly string example9RazorCode = @"
+ private readonly string example10RazorCode = @"
@@ -246,7 +251,7 @@ each word has the power to transform into something extraordinary. Here lies the
begins here, in this quiet moment where everything is possible.
";
- private readonly string example9CsharpCode = @"
+ private readonly string example10CsharpCode = @"
private string? floatOffset;
private BitPosition floatPosition = BitPosition.BottomRight;
@@ -259,7 +264,7 @@ each word has the power to transform into something extraordinary. Here lies the
})
.ToList();";
- private readonly string example10RazorCode = @"
+ private readonly string example11RazorCode = @"
@@ -271,7 +276,7 @@ each word has the power to transform into something extraordinary. Here lies the
Button
+ Once upon a time, stories wove connections between people, a symphony of voices crafting shared dreams.
+ Each word carried meaning, each pause brought understanding. Placeholder text reminds us of that moment
+ when possibilities are limitless, waiting for content to emerge. The spaces here are open for growth,
+ for ideas that change minds and spark emotions. This is where the journey begins—your words will lead the way.
+
+
+
+
Pivot #2: Secondary
+
+ Every story starts with a blank canvas, a quiet space waiting to be filled with ideas, emotions, and dreams.
+ These placeholder words symbolize the beginning—a moment of possibility where creativity has yet to take shape.
+ Imagine this text as the scaffolding of something remarkable, a foundation upon which connections and
+ inspirations will be built. Soon, these lines will transform into narratives that provoke thought,
+ spark emotion, and resonate with those who encounter them. Until then, they remind us of the beauty
+ in potential—the quiet magic of beginnings, where everything is still to come, and the possibilities
+ are boundless. This space is yours to craft, yours to shape, yours to bring to life.
+
+
+
+
Pivot #3: Info
+
+ In the beginning, there is silence—a blank canvas yearning to be filled, a quiet space where creativity waits
+ to awaken. These words are temporary, standing in place of ideas yet to come, a glimpse into the infinite
+ possibilities that lie ahead. Think of this text as a bridge, connecting the empty spaces of now with the
+ vibrant narratives of tomorrow. It whispers of the stories waiting to be told, of the thoughts yet to be
+ shaped into meaning, and the emotions ready to resonate with every reader.
+
+
+
+
+
+
+
+
+
Pivot #1: Primary background
+
+ Once upon a time, stories wove connections between people, a symphony of voices crafting shared dreams.
+ Each word carried meaning, each pause brought understanding. Placeholder text reminds us of that moment
+ when possibilities are limitless, waiting for content to emerge. The spaces here are open for growth,
+ for ideas that change minds and spark emotions. This is where the journey begins—your words will lead the way.
+
+
+
+
Pivot #2: Secondary background
+
+ Every story starts with a blank canvas, a quiet space waiting to be filled with ideas, emotions, and dreams.
+ These placeholder words symbolize the beginning—a moment of possibility where creativity has yet to take shape.
+ Imagine this text as the scaffolding of something remarkable, a foundation upon which connections and
+ inspirations will be built. Soon, these lines will transform into narratives that provoke thought,
+ spark emotion, and resonate with those who encounter them. Until then, they remind us of the beauty
+ in potential—the quiet magic of beginnings, where everything is still to come, and the possibilities
+ are boundless. This space is yours to craft, yours to shape, yours to bring to life.
+
+
+
+
Pivot #3: Tertiary foreground
+
+ In the beginning, there is silence—a blank canvas yearning to be filled, a quiet space where creativity waits
+ to awaken. These words are temporary, standing in place of ideas yet to come, a glimpse into the infinite
+ possibilities that lie ahead. Think of this text as a bridge, connecting the empty spaces of now with the
+ vibrant narratives of tomorrow. It whispers of the stories waiting to be told, of the thoughts yet to be
+ shaped into meaning, and the emotions ready to resonate with every reader.
+
+
+
+
+
+
+
+
Use icons from external libraries like FontAwesome, and Bootstrap Icons with the Icon parameter.
+
See the BitIconInfo section in the parameters table for usage.
+
+
+
+
+
+
+
FontAwesome:
+
+
+
+
Pivot #1: Home
+
+ Once upon a time, stories wove connections between people, a symphony of voices crafting shared dreams.
+ Each word carried meaning, each pause brought understanding. Placeholder text reminds us of that moment
+ when possibilities are limitless, waiting for content to emerge.
+
+
+
+
Pivot #2: Heart
+
+ Every story starts with a blank canvas, a quiet space waiting to be filled with ideas, emotions, and dreams.
+ These placeholder words symbolize the beginning—a moment of possibility where creativity has yet to take shape.
+
+
+
+
Pivot #3: Rocket
+
+ In the beginning, there is silence—a blank canvas yearning to be filled, a quiet space where creativity waits
+ to awaken. These words are temporary, standing in place of ideas yet to come, a glimpse into the infinite
+ possibilities that lie ahead.
+
+
+
+
+
+
+
+
+
Bootstrap:
+
+
+
+
Pivot #1: Home
+
+ Once upon a time, stories wove connections between people, a symphony of voices crafting shared dreams.
+ Each word carried meaning, each pause brought understanding. Placeholder text reminds us of that moment
+ when possibilities are limitless, waiting for content to emerge.
+
+
+
+
Pivot #2: Heart
+
+ Every story starts with a blank canvas, a quiet space waiting to be filled with ideas, emotions, and dreams.
+ These placeholder words symbolize the beginning—a moment of possibility where creativity has yet to take shape.
+
+
+
+
Pivot #3: Gear
+
+ In the beginning, there is silence—a blank canvas yearning to be filled, a quiet space where creativity waits
+ to awaken. These words are temporary, standing in place of ideas yet to come, a glimpse into the infinite
+ possibilities that lie ahead.
+
+
+
+
+
+
Component's Style & Class:
@@ -676,7 +820,7 @@
-
+
diff --git a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Navs/Pivot/BitPivotDemo.razor.cs b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Navs/Pivot/BitPivotDemo.razor.cs
index cb9db5bff7..647b8dafe3 100644
--- a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Navs/Pivot/BitPivotDemo.razor.cs
+++ b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Navs/Pivot/BitPivotDemo.razor.cs
@@ -30,6 +30,15 @@ public partial class BitPivotDemo
Href = "#pivot-class-styles",
},
new()
+ {
+ Name = "Color",
+ Type = "BitColor?",
+ DefaultValue = "null",
+ Description = "The general color of the pivot.",
+ LinkType = LinkType.Link,
+ Href = "#color-enum",
+ },
+ new()
{
Name = "DefaultSelectedKey",
Type = "string?",
@@ -171,11 +180,22 @@ public partial class BitPivotDemo
Description = "The text of the pivot item header, The text displayed of each pivot link.",
},
new()
+ {
+ Name = "Icon",
+ Type = "BitIconInfo?",
+ DefaultValue = "null",
+ Description = "Gets or sets the icon to display next to the pivot link using custom CSS classes for external icon libraries. Takes precedence over IconName when both are set.",
+ LinkType = LinkType.Link,
+ Href = "#bit-icon-info",
+ },
+ new()
{
Name = "IconName",
Type = "string?",
DefaultValue = "null",
- Description = "The icon name for the icon shown next to the pivot link.",
+ Description = "Gets or sets the name of the icon to display next to the pivot link from the built-in Fluent UI icons.",
+ LinkType = LinkType.Link,
+ Href = "https://blazorui.bitplatform.dev/iconography",
},
new()
{
@@ -270,6 +290,35 @@ public partial class BitPivotDemo
Description = "Custom CSS classes/styles for the header item count of the BitPivot."
}
]
+ },
+ new()
+ {
+ Id = "bit-icon-info",
+ Title = "BitIconInfo",
+ Parameters =
+ [
+ new()
+ {
+ Name = "Name",
+ Type = "string?",
+ DefaultValue = "null",
+ Description = "Gets or sets the name of the icon."
+ },
+ new()
+ {
+ Name = "BaseClass",
+ Type = "string?",
+ DefaultValue = "null",
+ Description = "Gets or sets the base CSS class for the icon. For built-in Fluent UI icons, this defaults to \"bit-icon\". For external icon libraries like FontAwesome, you might set this to \"fa\" or leave empty."
+ },
+ new()
+ {
+ Name = "Prefix",
+ Type = "string?",
+ DefaultValue = "null",
+ Description = "Gets or sets the CSS class prefix used before the icon name. For built-in Fluent UI icons, this defaults to \"bit-icon--\". For external icon libraries, you might set this to \"fa-\" or leave empty."
+ },
+ ]
}
];
@@ -432,6 +481,117 @@ public partial class BitPivotDemo
},
]
},
+ new()
+ {
+ Id = "color-enum",
+ Name = "BitColor",
+ Description = "",
+ Items =
+ [
+ new()
+ {
+ Name = "Primary",
+ Description = "Primary general color.",
+ Value = "0",
+ },
+ new()
+ {
+ Name = "Secondary",
+ Description = "Secondary general color.",
+ Value = "1",
+ },
+ new()
+ {
+ Name = "Tertiary",
+ Description = "Tertiary general color.",
+ Value = "2",
+ },
+ new()
+ {
+ Name = "Info",
+ Description = "Info general color.",
+ Value = "3",
+ },
+ new()
+ {
+ Name = "Success",
+ Description = "Success general color.",
+ Value = "4",
+ },
+ new()
+ {
+ Name = "Warning",
+ Description = "Warning general color.",
+ Value = "5",
+ },
+ new()
+ {
+ Name = "SevereWarning",
+ Description = "SevereWarning general color.",
+ Value = "6",
+ },
+ new()
+ {
+ Name = "Error",
+ Description = "Error general color.",
+ Value = "7",
+ },
+ new()
+ {
+ Name = "PrimaryBackground",
+ Description = "Primary background color.",
+ Value = "8",
+ },
+ new()
+ {
+ Name = "SecondaryBackground",
+ Description = "Secondary background color.",
+ Value = "9",
+ },
+ new()
+ {
+ Name = "TertiaryBackground",
+ Description = "Tertiary background color.",
+ Value = "10",
+ },
+ new()
+ {
+ Name = "PrimaryForeground",
+ Description = "Primary foreground color.",
+ Value = "11",
+ },
+ new()
+ {
+ Name = "SecondaryForeground",
+ Description = "Secondary foreground color.",
+ Value = "12",
+ },
+ new()
+ {
+ Name = "TertiaryForeground",
+ Description = "Tertiary foreground color.",
+ Value = "13",
+ },
+ new()
+ {
+ Name = "PrimaryBorder",
+ Description = "Primary border color.",
+ Value = "14",
+ },
+ new()
+ {
+ Name = "SecondaryBorder",
+ Description = "Secondary border color.",
+ Value = "15",
+ },
+ new()
+ {
+ Name = "TertiaryBorder",
+ Description = "Tertiary border color.",
+ Value = "16",
+ },
+ ]
+ },
];
@@ -947,6 +1107,133 @@ These placeholder words symbolize the beginning—a moment of possibility where
";
private readonly string example11RazorCode = @"
+
+
+
Pivot #1: Primary
+
+ Once upon a time, stories wove connections between people, a symphony of voices crafting shared dreams.
+ Each word carried meaning, each pause brought understanding. Placeholder text reminds us of that moment
+ when possibilities are limitless, waiting for content to emerge. The spaces here are open for growth,
+ for ideas that change minds and spark emotions. This is where the journey begins—your words will lead the way.
+
+
+
+
Pivot #2: Secondary
+
+ Every story starts with a blank canvas, a quiet space waiting to be filled with ideas, emotions, and dreams.
+ These placeholder words symbolize the beginning—a moment of possibility where creativity has yet to take shape.
+ Imagine this text as the scaffolding of something remarkable, a foundation upon which connections and
+ inspirations will be built. Soon, these lines will transform into narratives that provoke thought,
+ spark emotion, and resonate with those who encounter them. Until then, they remind us of the beauty
+ in potential—the quiet magic of beginnings, where everything is still to come, and the possibilities
+ are boundless. This space is yours to craft, yours to shape, yours to bring to life.
+
+
+
+
Pivot #3: Info
+
+ In the beginning, there is silence—a blank canvas yearning to be filled, a quiet space where creativity waits
+ to awaken. These words are temporary, standing in place of ideas yet to come, a glimpse into the infinite
+ possibilities that lie ahead. Think of this text as a bridge, connecting the empty spaces of now with the
+ vibrant narratives of tomorrow. It whispers of the stories waiting to be told, of the thoughts yet to be
+ shaped into meaning, and the emotions ready to resonate with every reader.
+
+
+
+
+
+
+
Pivot #1: Primary background
+
+ Once upon a time, stories wove connections between people, a symphony of voices crafting shared dreams.
+ Each word carried meaning, each pause brought understanding. Placeholder text reminds us of that moment
+ when possibilities are limitless, waiting for content to emerge. The spaces here are open for growth,
+ for ideas that change minds and spark emotions. This is where the journey begins—your words will lead the way.
+
+
+
+
Pivot #2: Secondary background
+
+ Every story starts with a blank canvas, a quiet space waiting to be filled with ideas, emotions, and dreams.
+ These placeholder words symbolize the beginning—a moment of possibility where creativity has yet to take shape.
+ Imagine this text as the scaffolding of something remarkable, a foundation upon which connections and
+ inspirations will be built. Soon, these lines will transform into narratives that provoke thought,
+ spark emotion, and resonate with those who encounter them. Until then, they remind us of the beauty
+ in potential—the quiet magic of beginnings, where everything is still to come, and the possibilities
+ are boundless. This space is yours to craft, yours to shape, yours to bring to life.
+
+
+
+
Pivot #3: Tertiary foreground
+
+ In the beginning, there is silence—a blank canvas yearning to be filled, a quiet space where creativity waits
+ to awaken. These words are temporary, standing in place of ideas yet to come, a glimpse into the infinite
+ possibilities that lie ahead. Think of this text as a bridge, connecting the empty spaces of now with the
+ vibrant narratives of tomorrow. It whispers of the stories waiting to be told, of the thoughts yet to be
+ shaped into meaning, and the emotions ready to resonate with every reader.
+
+ Once upon a time, stories wove connections between people, a symphony of voices crafting shared dreams.
+ Each word carried meaning, each pause brought understanding. Placeholder text reminds us of that moment
+ when possibilities are limitless, waiting for content to emerge.
+
+
+
+
Pivot #2: Heart
+
+ Every story starts with a blank canvas, a quiet space waiting to be filled with ideas, emotions, and dreams.
+ These placeholder words symbolize the beginning—a moment of possibility where creativity has yet to take shape.
+
+
+
+
Pivot #3: Rocket
+
+ In the beginning, there is silence—a blank canvas yearning to be filled, a quiet space where creativity waits
+ to awaken. These words are temporary, standing in place of ideas yet to come, a glimpse into the infinite
+ possibilities that lie ahead.
+
+
+
+
+
+
+
+
+
+
Pivot #1: Home
+
+ Once upon a time, stories wove connections between people, a symphony of voices crafting shared dreams.
+ Each word carried meaning, each pause brought understanding. Placeholder text reminds us of that moment
+ when possibilities are limitless, waiting for content to emerge.
+
+
+
+
Pivot #2: Heart
+
+ Every story starts with a blank canvas, a quiet space waiting to be filled with ideas, emotions, and dreams.
+ These placeholder words symbolize the beginning—a moment of possibility where creativity has yet to take shape.
+
+
+
+
Pivot #3: Gear
+
+ In the beginning, there is silence—a blank canvas yearning to be filled, a quiet space where creativity waits
+ to awaken. These words are temporary, standing in place of ideas yet to come, a glimpse into the infinite
+ possibilities that lie ahead.
+