Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
aria-required="@Required"
aria-disabled="@(IsEnabled is false)"
aria-expanded=@(IsOpen ? "true" : "false")
aria-labelledby="@GetDropdownAriaLabelledby"
aria-labelledby="@GetDropdownAriaLabelledby()"
aria-controls="@(IsOpen? _calloutId : null)">

@if (PrefixTemplate is not null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
namespace Bit.BlazorUI;

/// <summary>
/// A dropdown is a list in which the selected item is always visible while other items are visible on demand by clicking a dropdown button. Dropdowns are typically used for forms.
/// A dropdown is a list in which the selected item is always visible while other items are
/// visible on demand by clicking a dropdown button. Dropdowns are typically used for forms.
/// </summary>
public partial class BitDropdown<TItem, TValue> : BitInputBase<TValue> where TItem : class, new()
{
Expand Down Expand Up @@ -106,6 +107,12 @@ namespace Bit.BlazorUI;
/// </summary>
[Parameter] public BitDropdownClassStyles? Classes { get; set; }

/// <summary>
/// The general color of the dropdown.
/// </summary>
[Parameter, ResetClassBuilder]
public BitColor? Color { get; set; }
Comment thread
msynk marked this conversation as resolved.

/// <summary>
/// The icon of the clear button of the dropdown.
/// Takes precedence over <see cref="ClearButtonIconName"/> when both are set.
Expand Down Expand Up @@ -920,6 +927,8 @@ protected override void RegisterCssClasses()
{
ClassBuilder.Register(() => Classes?.Root);

ClassBuilder.Register(() => GetColorClass());

ClassBuilder.Register(() => Required ? "bit-drp-req" : string.Empty);

ClassBuilder.Register(() => _selectedItems?.Count > 0 ? "bit-drp-hvl" : string.Empty);
Expand Down Expand Up @@ -1182,13 +1191,25 @@ private async Task HandleOnClick(MouseEventArgs e)
await FocusOnSearchBox();
}

private void HandleOnValueChanged(object? sender, EventArgs args) => UpdateSelectedItemsFromValues();
private void HandleOnValueChanged(object? sender, EventArgs args)
{
UpdateSelectedItemsFromValues();
}

private void HandleSearchBoxFocusIn() => _inputSearchHasFocus = true;
private void HandleSearchBoxFocusIn()
{
_inputSearchHasFocus = true;
}

private void HandleSearchBoxFocusOut() => _inputSearchHasFocus = false;
private void HandleSearchBoxFocusOut()
{
_inputSearchHasFocus = false;
}

private Task HandleSearchBoxOnClear() => ClearSearchBox();
private Task HandleSearchBoxOnClear()
{
return ClearSearchBox();
}

private async Task HandleFilterChange(ChangeEventArgs e)
{
Expand Down Expand Up @@ -1278,7 +1299,10 @@ private string GetSearchBoxClasses()
return className.ToString();
}

private string GetDropdownAriaLabelledby => Label.HasValue() ? $"{_labelId} {_dropdownTextContainerId}" : _dropdownTextContainerId;
private string GetDropdownAriaLabelledby()
{
return Label.HasValue() ? $"{_labelId} {_dropdownTextContainerId}" : _dropdownTextContainerId;
}

private async Task SearchVirtualized()
{
Expand Down Expand Up @@ -1445,7 +1469,10 @@ private async Task HandleOnKeyDown(KeyboardEventArgs eventArgs)
}
}

private Task HandleOnClickUnselectItem(TItem? item) => UnselectItem(item);
private Task HandleOnClickUnselectItem(TItem? item)
{
return UnselectItem(item);
}

private async Task HandleOnComboInput(ChangeEventArgs e)
{
Expand Down Expand Up @@ -1646,10 +1673,35 @@ private string GetCalloutCssClasses()
classes.Add("bit-drp-rtl");
}

classes.Add(GetColorClass());

return string.Join(' ', classes).Trim();
}


private string GetColorClass()
{
return Color switch
{
BitColor.Primary => "bit-drp-pri",
BitColor.Secondary => "bit-drp-sec",
BitColor.Tertiary => "bit-drp-ter",
BitColor.Info => "bit-drp-inf",
BitColor.Success => "bit-drp-suc",
BitColor.Warning => "bit-drp-wrn",
BitColor.SevereWarning => "bit-drp-swr",
BitColor.Error => "bit-drp-err",
BitColor.PrimaryBackground => "bit-drp-pbg",
BitColor.SecondaryBackground => "bit-drp-sbg",
BitColor.TertiaryBackground => "bit-drp-tbg",
BitColor.PrimaryForeground => "bit-drp-pfg",
BitColor.SecondaryForeground => "bit-drp-sfg",
BitColor.TertiaryForeground => "bit-drp-tfg",
BitColor.PrimaryBorder => "bit-drp-pbr",
BitColor.SecondaryBorder => "bit-drp-sbr",
BitColor.TertiaryBorder => "bit-drp-tbr",
_ => "bit-drp-pri"
};
}

protected override async ValueTask DisposeAsync(bool disposing)
{
Expand Down
136 changes: 121 additions & 15 deletions src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdown.scss
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
position: relative;
flex-direction: column;
font-family: $tg-font-family;
--bit-drp-clr: #{$clr-pri};
--bit-drp-clr-hover: #{$clr-pri-hover};
--bit-drp-clr-text: #{$clr-pri-text};

&.bit-drp-req {
.bit-drp-lbl {
Expand Down Expand Up @@ -173,7 +176,7 @@
pointer-events: none;
inset: spacing(-0.125);
border-radius: $shp-border-radius;
border: spacing(0.25) $shp-border-style $clr-pri;
border: spacing(0.25) $shp-border-style var(--bit-drp-clr);
}
}
}
Expand Down Expand Up @@ -257,12 +260,12 @@
background-color: $clr-bg-sec;

.bit-drp-chb {
border-color: $clr-pri;
background-color: $clr-pri;
border-color: var(--bit-drp-clr);
background-color: var(--bit-drp-clr);

.bit-drp-chm {
opacity: 1;
color: $clr-pri-text;
color: var(--bit-drp-clr-text);
}
}

Expand All @@ -271,8 +274,8 @@
background-color: $clr-bg-pri-hover;

.bit-drp-chb {
border-color: $clr-pri-hover;
background-color: $clr-pri-hover;
border-color: var(--bit-drp-clr-hover);
background-color: var(--bit-drp-clr-hover);
}
}
}
Expand Down Expand Up @@ -420,7 +423,7 @@

.bit-drp-sic {
i {
color: $clr-pri-hover;
color: var(--bit-drp-clr-hover);
}
}
}
Expand Down Expand Up @@ -453,7 +456,7 @@

.bit-drp-sic {
i {
color: $clr-pri-hover;
color: var(--bit-drp-clr-hover);
}
}
}
Expand All @@ -464,7 +467,7 @@
&:hover {
.bit-drp-sic {
width: spacing(0.5);
color: $clr-pri-hover;
color: var(--bit-drp-clr-hover);

i {
opacity: 0;
Expand All @@ -475,7 +478,7 @@
}

&.bit-drp-shf {
border-bottom: spacing(0.25) $shp-border-style $clr-pri;
border-bottom: spacing(0.25) $shp-border-style var(--bit-drp-clr);

.bit-drp-sic {
width: spacing(0.5);
Expand All @@ -488,7 +491,7 @@
@media (hover: hover) {
&:hover {
border-width: 0 0 $shp-border-width;
border-bottom: spacing(0.25) $shp-border-style $clr-pri;
border-bottom: spacing(0.25) $shp-border-style var(--bit-drp-clr);
}
}
}
Expand All @@ -503,7 +506,7 @@
font-size: spacing(2);
flex-direction: column;
justify-content: center;
color: $clr-pri;
color: var(--bit-drp-clr);
transition: width 0.167s ease 0s;

i {
Expand All @@ -512,7 +515,7 @@
width: unset;
height: unset;
display: inline-block;
color: $clr-pri;
color: var(--bit-drp-clr);
transition: opacity 0.167s ease 0s;
}
}
Expand Down Expand Up @@ -573,7 +576,7 @@
box-sizing: border-box;
padding: 0 spacing(0.5);
font-size: spacing(1.75);
color: $clr-pri;
color: var(--bit-drp-clr);
background-color: transparent;
font-family: $tg-font-family;
border-radius: 0 spacing(0.125) spacing(0.125) 0;
Expand Down Expand Up @@ -649,7 +652,7 @@

.bit-drp-ihd {
width: 100%;
color: $clr-pri;
color: var(--bit-drp-clr);
cursor: default;
font-weight: 600;
user-select: none;
Expand Down Expand Up @@ -796,3 +799,106 @@
transform: translateX(-100%);
}
}


.bit-drp-pri {
--bit-drp-clr: #{$clr-pri};
--bit-drp-clr-hover: #{$clr-pri-hover};
--bit-drp-clr-text: #{$clr-pri-text};
}

.bit-drp-sec {
--bit-drp-clr: #{$clr-sec};
--bit-drp-clr-hover: #{$clr-sec-hover};
--bit-drp-clr-text: #{$clr-sec-text};
}

.bit-drp-ter {
--bit-drp-clr: #{$clr-ter};
--bit-drp-clr-hover: #{$clr-ter-hover};
--bit-drp-clr-text: #{$clr-ter-text};
}

.bit-drp-inf {
--bit-drp-clr: #{$clr-inf};
--bit-drp-clr-hover: #{$clr-inf-hover};
--bit-drp-clr-text: #{$clr-inf-text};
}

.bit-drp-suc {
--bit-drp-clr: #{$clr-suc};
--bit-drp-clr-hover: #{$clr-suc-hover};
--bit-drp-clr-text: #{$clr-suc-text};
}

.bit-drp-wrn {
--bit-drp-clr: #{$clr-wrn};
--bit-drp-clr-hover: #{$clr-wrn-hover};
--bit-drp-clr-text: #{$clr-wrn-text};
}

.bit-drp-swr {
--bit-drp-clr: #{$clr-swr};
--bit-drp-clr-hover: #{$clr-swr-hover};
--bit-drp-clr-text: #{$clr-swr-text};
}

.bit-drp-err {
--bit-drp-clr: #{$clr-err};
--bit-drp-clr-hover: #{$clr-err-hover};
--bit-drp-clr-text: #{$clr-err-text};
}

.bit-drp-pbg {
--bit-drp-clr: #{$clr-bg-pri};
--bit-drp-clr-hover: #{$clr-bg-pri-hover};
--bit-drp-clr-text: #{$clr-fg-pri};
}

.bit-drp-sbg {
--bit-drp-clr: #{$clr-bg-sec};
--bit-drp-clr-hover: #{$clr-bg-sec-hover};
--bit-drp-clr-text: #{$clr-fg-sec};
}

.bit-drp-tbg {
--bit-drp-clr: #{$clr-bg-ter};
--bit-drp-clr-hover: #{$clr-bg-ter-hover};
--bit-drp-clr-text: #{$clr-fg-ter};
}

.bit-drp-pfg {
--bit-drp-clr: #{$clr-fg-pri};
--bit-drp-clr-hover: #{$clr-fg-pri-hover};
--bit-drp-clr-text: #{$clr-bg-pri};
}

.bit-drp-sfg {
--bit-drp-clr: #{$clr-fg-sec};
--bit-drp-clr-hover: #{$clr-fg-sec-hover};
--bit-drp-clr-text: #{$clr-bg-sec};
}

.bit-drp-tfg {
--bit-drp-clr: #{$clr-fg-ter};
--bit-drp-clr-hover: #{$clr-fg-ter-hover};
--bit-drp-clr-text: #{$clr-bg-ter};
}

.bit-drp-pbr {
--bit-drp-clr: #{$clr-brd-pri};
--bit-drp-clr-hover: #{$clr-brd-pri-hover};
--bit-drp-clr-text: #{$clr-fg-pri};
}

.bit-drp-sbr {
--bit-drp-clr: #{$clr-brd-sec};
--bit-drp-clr-hover: #{$clr-brd-sec-hover};
--bit-drp-clr-text: #{$clr-fg-sec};
}

.bit-drp-tbr {
--bit-drp-clr: #{$clr-brd-ter};
--bit-drp-clr-hover: #{$clr-brd-ter-hover};
--bit-drp-clr-text: #{$clr-fg-ter};
}
Loading
Loading