Skip to content
Navigation

Select

Added 14 October 2026

React

Codecomponents/react/select-demo.tsx
import {Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue} from '@stroeer-labs/design-library/react';

const fruits = [
    {label: 'Apple', value: 'apple'},
    {label: 'Banana', value: 'banana'},
    {label: 'Blueberry', value: 'blueberry'},
    {label: 'Grapes', value: 'grapes'},
    {label: 'Pineapple', value: 'pineapple'},
];

export function SelectDemo() {
    return (
        <div className="space-y-6">
            <div className="space-y-2">
                <p className="text-xs font-medium text-muted-foreground">Default</p>
                <Select items={fruits}>
                    <SelectTrigger className="w-56">
                        <SelectValue placeholder="Select a fruit" />
                    </SelectTrigger>
                    <SelectContent>
                        <SelectGroup>
                            <SelectLabel>Fruits</SelectLabel>
                            {fruits.map((f) => (
                                <SelectItem key={f.value} value={f.value}>
                                    {f.label}
                                </SelectItem>
                            ))}
                        </SelectGroup>
                    </SelectContent>
                </Select>
            </div>
            <div className="space-y-2">
                <p className="text-xs font-medium text-muted-foreground">Small</p>
                <Select items={fruits}>
                    <SelectTrigger size="sm" className="w-56">
                        <SelectValue placeholder="Select a fruit" />
                    </SelectTrigger>
                    <SelectContent>
                        {fruits.map((f) => (
                            <SelectItem key={f.value} value={f.value}>
                                {f.label}
                            </SelectItem>
                        ))}
                    </SelectContent>
                </Select>
            </div>
            <div className="space-y-2">
                <p className="text-xs font-medium text-muted-foreground">Disabled</p>
                <Select disabled items={fruits}>
                    <SelectTrigger className="w-56">
                        <SelectValue placeholder="Select a fruit" />
                    </SelectTrigger>
                    <SelectContent>
                        {fruits.map((f) => (
                            <SelectItem key={f.value} value={f.value}>
                                {f.label}
                            </SelectItem>
                        ))}
                    </SelectContent>
                </Select>
            </div>
        </div>
    );
}

Angular

Codecomponents/angular/select-demo.ts
import {Component} from '@angular/core';
import {HlmSelectImports} from '@stroeer-labs/design-library/angular';

@Component({
    selector: 'dl-select-demo',
    standalone: true,
    imports: [HlmSelectImports],
    template: `
    <div class="space-y-6">
      <div class="space-y-2">
        <p class="text-xs font-medium text-muted-foreground">Default</p>
        <hlm-select [itemToString]="itemToString">
          <hlm-select-trigger class="w-56">
            <hlm-select-value placeholder="Select a fruit" />
          </hlm-select-trigger>
          <hlm-select-content *hlmSelectPortal>
            <hlm-select-group>
              <hlm-select-label>Fruits</hlm-select-label>
              @for (item of fruits; track item.value) {
                <hlm-select-item [value]="item.value">{{ item.label }}</hlm-select-item>
              }
            </hlm-select-group>
          </hlm-select-content>
        </hlm-select>
      </div>
      <div class="space-y-2">
        <p class="text-xs font-medium text-muted-foreground">Small</p>
        <hlm-select [itemToString]="itemToString">
          <hlm-select-trigger size="sm" class="w-56">
            <hlm-select-value placeholder="Select a fruit" />
          </hlm-select-trigger>
          <hlm-select-content *hlmSelectPortal>
            @for (item of fruits; track item.value) {
              <hlm-select-item [value]="item.value">{{ item.label }}</hlm-select-item>
            }
          </hlm-select-content>
        </hlm-select>
      </div>
      <div class="space-y-2">
        <p class="text-xs font-medium text-muted-foreground">Disabled</p>
        <hlm-select [disabled]="true" [itemToString]="itemToString">
          <hlm-select-trigger class="w-56">
            <hlm-select-value placeholder="Select a fruit" />
          </hlm-select-trigger>
          <hlm-select-content *hlmSelectPortal>
            @for (item of fruits; track item.value) {
              <hlm-select-item [value]="item.value">{{ item.label }}</hlm-select-item>
            }
          </hlm-select-content>
        </hlm-select>
      </div>
    </div>
  `,
})
export class SelectDemoComponent {
    readonly fruits = [
        {label: 'Apple', value: 'apple'},
        {label: 'Banana', value: 'banana'},
        {label: 'Blueberry', value: 'blueberry'},
        {label: 'Grapes', value: 'grapes'},
        {label: 'Pineapple', value: 'pineapple'},
    ];

    readonly itemToString = (value: string) => this.fruits.find((f) => f.value === value)?.label || '';
}