Displays a list of options for the user to pick from—triggered by a button.
import { Component } from '@angular/core'; import { RdxSelectComponent, RdxSelectContentDirective, RdxSelectGroupDirective, RdxSelectIconDirective, RdxSelectItemDirective, RdxSelectItemIndicatorDirective, RdxSelectLabelDirective, RdxSelectSeparatorDirective, RdxSelectTriggerDirective, RdxSelectValueDirective } from '@radix-ng/primitives/select'; import { Check, ChevronDown, LucideAngularModule } from 'lucide-angular'; @Component({ selector: 'radix-select-demo', standalone: true, imports: [ RdxSelectComponent, RdxSelectSeparatorDirective, RdxSelectLabelDirective, RdxSelectItemIndicatorDirective, RdxSelectItemDirective, RdxSelectGroupDirective, RdxSelectContentDirective, RdxSelectTriggerDirective, RdxSelectValueDirective, RdxSelectIconDirective, LucideAngularModule ], template: ` <span rdxSelect> <button class="SelectTrigger" rdxSelectTrigger> <span rdxSelectValue placeholder="Select a fruit…"></span> <lucide-icon class="SelectIcon" [img]="LucideChevronDownIcon" size="16" rdxSelectIcon /> </button> <div class="SelectContent SelectViewport" rdxSelectContent> @for (group of foodGroups; track group; let last = $last) { <div class="SelectGroup" rdxSelectGroup> <div class="SelectLabel" rdxSelectLabel>{{ group.label }}</div> @for (food of group.foods; track food) { <div class="SelectItem" [value]="food.value" [disabled]="food.disabled" rdxSelectItem> <lucide-icon class="SelectItemIndicator" [img]="LucideCheckIcon" rdxSelectItemIndicator size="16" /> {{ food.label }} </div> } </div> @if (!last) { <div class="SelectSeparator" rdxSelectSeparator></div> } } </div> </span> `, styleUrl: 'select-demo.css' }) export class SelectDemoComponent { readonly LucideChevronDownIcon = ChevronDown; readonly LucideCheckIcon = Check; readonly foodGroups: FoodArray = [ { label: 'Fruits', foods: [ { value: 'apple', label: 'Apple' }, { value: 'banana', label: 'Banana' }, { value: 'blueberry', label: 'Blueberry' }, { value: 'grapes', label: 'Grapes' }, { value: 'pineapple', label: 'Pineapple' } ] }, { label: 'Vegetables', foods: [ { value: 'aubergine', label: 'Aubergine' }, { value: 'broccoli', label: 'Broccoli' }, { value: 'carrot', label: 'Carrot', disabled: true }, { value: 'courgette', label: 'Courgette' }, { value: 'leek', label: 'Leek' } ] }, { label: 'Meat', foods: [ { value: 'beef', label: 'Beef' }, { value: 'beef-with-sauce', label: 'Beef with sauce' }, { value: 'chicken', label: 'Chicken' }, { value: 'lamb', label: 'Lamb' }, { value: 'pork', label: 'Pork' } ] }, { foods: [ { value: 'candies', label: 'Candies' }, { value: 'chocolates', label: 'Chocolates' } ] } ]; item: any; } type FoodItem = { value: string; label: string; disabled?: boolean; }; type Category = { label?: string; foods: FoodItem[]; }; type FoodArray = Category[];
/* reset */ :host { button { all: unset; } } .SelectTrigger { display: inline-flex; align-items: center; justify-content: center; border-radius: 4px; padding: 0 15px; font-size: 13px; line-height: 1; height: 35px; gap: 5px; background-color: white; color: var(--violet-11); box-shadow: 0 2px 10px var(--black-a7); } .SelectTrigger:hover { background-color: var(--mauve-3); } .SelectTrigger:focus { box-shadow: 0 0 0 2px black; } .SelectTrigger[data-placeholder] { color: var(--violet-9); } .SelectIcon { color: Var(--violet-11); } .SelectContent { overflow: hidden; background-color: white; border-radius: 6px; box-shadow: 0px 10px 38px -10px rgba(22, 23, 24, 0.35), 0px 10px 20px -15px rgba(22, 23, 24, 0.2); } .SelectViewport { padding: 5px; } .SelectItem { font-size: 13px; line-height: 1; color: var(--violet-11); border-radius: 3px; display: flex; align-items: center; height: 25px; padding: 0 35px 0 25px; position: relative; user-select: none; } .SelectItem[data-disabled] { color: var(--mauve-8); pointer-events: none; } .SelectItem[data-highlighted] { outline: none; background-color: var(--violet-9); color: var(--violet-1); } .SelectLabel { padding: 0 25px; font-size: 12px; line-height: 25px; color: var(--mauve-11); } .SelectSeparator { height: 1px; background-color: var(--violet-6); margin: 5px; } .SelectItemIndicator { position: absolute; left: 0; width: 25px; display: inline-flex; align-items: center; justify-content: center; } .SelectScrollButton { display: flex; align-items: center; justify-content: center; height: 25px; background-color: white; color: var(--violet-11); cursor: default; }
<div rdxSelectRoot> <div rdxSelectContent> <div rdxSelectItem></div> </div> </div>