Select Dropdown select input for picking from a list of options, styled to match the ShellUI design system.
Select renders a styled native <select> element by default. Set UseCustomSelect="true" to build a custom dropdown from SelectTrigger, SelectContent, and SelectItem; shellui add select installs them with Select.
< Select @bind-Value = "_framework" UseCustomSelect = "true" >
< SelectTrigger > @( _framework ?? "Pick a framework..." ) </ SelectTrigger >
< SelectContent >
< SelectItem Value = "blazor" >Blazor</ SelectItem >
< SelectItem Value = "next" >Next.js</ SelectItem >
< SelectItem Value = "nuxt" >Nuxt</ SelectItem >
< SelectItem Value = "sveltekit" >SvelteKit</ SelectItem >
</ SelectContent >
</ Select >
@code {
private string _framework = "" ;
}
< EditForm Model = "_form" >
< div class = "space-y-4 w-60" >
< Label For = "role" >Role</ Label >
< Select @bind-Value = "_form.Role" UseCustomSelect = "true" >
< SelectTrigger > @( _form.Role ?? "Select a role..." ) </ SelectTrigger >
< SelectContent >
< SelectItem Value = "admin" >Admin</ SelectItem >
< SelectItem Value = "editor" >Editor</ SelectItem >
< SelectItem Value = "viewer" >Viewer</ SelectItem >
</ SelectContent >
</ Select >
</ div >
</ EditForm >
@code {
private MyFormModel _form = new ();
public class MyFormModel { public string Role { get ; set ; } = "" ; }
}
< Select @bind-Value = "_language" UseCustomSelect = "true" >
< SelectTrigger > @( _language ?? "Choose a language..." ) </ SelectTrigger >
< SelectContent >
< p class = "px-2 py-1 text-xs font-semibold text-muted-foreground" >.NET</ p >
< SelectItem Value = "csharp" >C#</ SelectItem >
< SelectItem Value = "fsharp" >F#</ SelectItem >
< p class = "mt-1 px-2 py-1 text-xs font-semibold text-muted-foreground" >JavaScript</ p >
< SelectItem Value = "ts" >TypeScript</ SelectItem >
< SelectItem Value = "js" >JavaScript</ SelectItem >
</ SelectContent >
</ Select >
@code {
private string _language = "" ;
}
< Select @bind-Value = "_theme" >
< SelectTrigger />
< SelectContent >
< SelectItem Value = "system" >System</ SelectItem >
< SelectItem Value = "light" >Light</ SelectItem >
< SelectItem Value = "dark" >Dark</ SelectItem >
</ SelectContent >
</ Select >
@code {
private string _theme = "system" ;
}
< Select @bind-Value = "_plan" UseCustomSelect = "true" @bind-Value:after = "OnPlanChanged" >
< SelectTrigger > @( _plan ?? "Select plan..." ) </ SelectTrigger >
< SelectContent >
< SelectItem Value = "free" >Free</ SelectItem >
< SelectItem Value = "pro" >Pro</ SelectItem >
< SelectItem Value = "enterprise" >Enterprise</ SelectItem >
</ SelectContent >
</ Select >
< p class = "text-sm text-muted-foreground" >Selected: @ _plan</ p >
@code {
private string _plan = "" ;
private void OnPlanChanged () => Console. WriteLine ( $"Plan changed to { _plan } " );
}
In v0.2.x Select was a single component with Items and @bind-SelectedValue. Replace it with the new compositional pattern:
@* v0.2.x — OLD *@
< Select Items = "_options" @bind-SelectedValue = "_selected" Placeholder = "Pick one..." / >
@* v0.3.0 *@
< Select @bind-Value = "_selected" UseCustomSelect = "true" >
< SelectTrigger > @( _selected ?? "Pick one..." ) </ SelectTrigger >
< SelectContent >
@foreach ( var opt in _options)
{
< SelectItem Value = " @ opt . Value " > @ opt.Label</ SelectItem >
}
</ SelectContent >
</ Select >
Parameter Type Default Description Valuestring?nullThe currently selected value ValueChangedEventCallback<string?>— Fires when the user selects an item Classstring?nullAdditional CSS classes on the root element
Parameter Type Default Description UseCustomSelectboolfalseRender SelectTrigger / SelectContent / SelectItem instead of a native <select> Classstring?nullAdditional CSS classes
Parameter Type Default Description ChildContentRenderFragment— <SelectItem> elementsClassstring?nullAdditional CSS classes on the dropdown panel
Parameter Type Default Description Valuestring— The raw value submitted when this item is selected ChildContentRenderFragment— Display label Classstring?nullAdditional CSS classes