UWC Components
  • Default
  • Material
  • Fluent

On this page

Dropdown

A full-featured select/dropdown component with single and multi-select, client-side filter, option groups, clear button, loading state, and full keyboard navigation.

uwc-dropdown is a feature-rich select component driven by a SelectOption[] property. It supports single-select, multi-select with chips, filtering, option groups, badges, and loading states.

Import

All components

import '@uwc/components';

Selected component (Lit / Angular / Vue)

import { UwcDropdown } from '@uwc/components/dropdown';
customElements.define('uwc-dropdown', UwcDropdown);

React

import { UwcDropdown } from '@uwc/components/react';

Usage

Lit

import { LitElement, html } from 'lit';
import { customElement } from 'lit/decorators.js';

@customElement('app-demo')
export class AppDemo extends LitElement {
  options = [
    { label: 'Option A', value: 'a' },
    { label: 'Option B', value: 'b' },
  ];
  render() {
    return html`<uwc-dropdown .options=${this.options} placeholder="Select..."></uwc-dropdown>`;
  }
}

React

import React from 'react';
import { UwcDropdown } from '@uwc/components/react';

const options = [{ label: 'Option A', value: 'a' }, { label: 'Option B', value: 'b' }];

export default function App() {
  return <UwcDropdown options={options} placeholder="Select..." />;
}

Angular

import { Component } from '@angular/core';
import '@uwc/dropdown';

@Component({
  selector: 'app-demo',
  standalone: true,
  template: `<uwc-dropdown [options]="options" placeholder="Select..."></uwc-dropdown>`,
})
export class AppComponent {
  options = [{ label: 'Option A', value: 'a' }, { label: 'Option B', value: 'b' }];
}

Vue

import '@uwc/dropdown';

export default {
  data() {
    return {
      options: [{ label: 'Option A', value: 'a' }, { label: 'Option B', value: 'b' }],
    };
  },
  template: `
    <uwc-dropdown :options="options" placeholder="Select..."></uwc-dropdown>
  `,
};

Basic Usage

import { LitElement, html } from 'lit';
import { customElement, state } from 'lit/decorators.js';

@customElement('app-demo')
export class AppDemo extends LitElement {
  @state() options = [
    { label: 'Apple',  value: 'apple'  },
    { label: 'Banana', value: 'banana' },
    { label: 'Cherry', value: 'cherry' },
    { label: 'Mango',  value: 'mango'  },
  ];
  @state() multiOptions = [
    { label: 'HTML',       value: 'html' },
    { label: 'CSS',        value: 'css'  },
    { label: 'JavaScript', value: 'js'   },
    { label: 'TypeScript', value: 'ts'   },
  ];

  render() {
    return html`
      <div style="display:flex;flex-wrap:wrap;gap:1rem;align-items:flex-start;">
        <uwc-dropdown .options=${this.options} placeholder="Single select..."></uwc-dropdown>
        <uwc-dropdown .options=${this.options} placeholder="With filter..." filter show-clear></uwc-dropdown>
        <uwc-dropdown .options=${this.multiOptions} placeholder="Multi-select..." multiple show-clear filter></uwc-dropdown>
      </div>
    `;
  }
}
import React from 'react';
import { UwcDropdown } from '@uwc/components/react';

export default function App() {
  const options = [
    { label: 'Apple',  value: 'apple'  },
    { label: 'Banana', value: 'banana' },
    { label: 'Cherry', value: 'cherry' },
    { label: 'Mango',  value: 'mango'  },
  ];
  const multiOptions = [
    { label: 'HTML',       value: 'html' },
    { label: 'CSS',        value: 'css'  },
    { label: 'JavaScript', value: 'js'   },
    { label: 'TypeScript', value: 'ts'   },
  ];
  const wrapStyle = { display: 'flex', flexWrap: 'wrap', gap: '1rem', alignItems: 'flex-start' };
  return (
    <div style={wrapStyle}>
      <UwcDropdown options={options} placeholder="Single select..." />
      <UwcDropdown options={options} placeholder="With filter..." filter showClear />
      <UwcDropdown options={multiOptions} placeholder="Multi-select..." multiple showClear filter />
    </div>
  );
}
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  standalone: true,
  template: `
    <div style="display:flex;flex-wrap:wrap;gap:1rem;align-items:flex-start;">
      <uwc-dropdown [options]="options" placeholder="Single select..."></uwc-dropdown>
      <uwc-dropdown [options]="options" placeholder="With filter..." filter show-clear></uwc-dropdown>
      <uwc-dropdown [options]="multiOptions" placeholder="Multi-select..." multiple show-clear filter></uwc-dropdown>
    </div>
  `
})
export class AppComponent {
  options = [
    { label: 'Apple',  value: 'apple'  },
    { label: 'Banana', value: 'banana' },
    { label: 'Cherry', value: 'cherry' },
    { label: 'Mango',  value: 'mango'  },
  ];
  multiOptions = [
    { label: 'HTML',       value: 'html' },
    { label: 'CSS',        value: 'css'  },
    { label: 'JavaScript', value: 'js'   },
    { label: 'TypeScript', value: 'ts'   },
  ];
}
export default {
  data() {
    return {
      options: [
        { label: 'Apple',  value: 'apple'  },
        { label: 'Banana', value: 'banana' },
        { label: 'Cherry', value: 'cherry' },
        { label: 'Mango',  value: 'mango'  },
      ],
      multiOptions: [
        { label: 'HTML',       value: 'html' },
        { label: 'CSS',        value: 'css'  },
        { label: 'JavaScript', value: 'js'   },
        { label: 'TypeScript', value: 'ts'   },
      ],
    };
  },
  template: `
    <div style="display:flex;flex-wrap:wrap;gap:1rem;align-items:flex-start;">
      <uwc-dropdown :options="options" placeholder="Single select..."></uwc-dropdown>
      <uwc-dropdown :options="options" placeholder="With filter..." filter show-clear></uwc-dropdown>
      <uwc-dropdown :options="multiOptions" placeholder="Multi-select..." multiple show-clear filter></uwc-dropdown>
    </div>
  `
};

Basic

Pass SelectOption[] to the options property. The trigger renders its own styled button.

import { LitElement, html } from 'lit';
import { customElement } from 'lit/decorators.js';

@customElement('dropdown-basic-demo')
export class AppDemo extends LitElement {
  options = [
    { label: 'Apple',  value: 'apple'  },
    { label: 'Banana', value: 'banana' },
    { label: 'Cherry', value: 'cherry' },
    { label: 'Durian', value: 'durian' },
    { label: 'Fig',    value: 'fig'    },
  ];
  render() {
    return html`
      <uwc-dropdown .options=${this.options} placeholder="Pick a fruit..."></uwc-dropdown>
    `;
  }
}
import React from 'react';
import { UwcDropdown } from '@uwc/components/react';

export default function App() {
  const options = [
    { label: 'Apple',  value: 'apple'  },
    { label: 'Banana', value: 'banana' },
    { label: 'Cherry', value: 'cherry' },
    { label: 'Durian', value: 'durian' },
    { label: 'Fig',    value: 'fig'    },
  ];
  return <UwcDropdown options={options} placeholder="Pick a fruit..." />;
}
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  standalone: true,
  template: `
    <uwc-dropdown [options]="options" placeholder="Pick a fruit..."></uwc-dropdown>
  `
})
export class AppComponent {
  options = [
    { label: 'Apple',  value: 'apple'  },
    { label: 'Banana', value: 'banana' },
    { label: 'Cherry', value: 'cherry' },
  ];
}
export default {
  data() {
    return {
      options: [
        { label: 'Apple',  value: 'apple'  },
        { label: 'Banana', value: 'banana' },
        { label: 'Cherry', value: 'cherry' },
      ],
    };
  },
  template: `
    <uwc-dropdown :options="options" placeholder="Pick a fruit..."></uwc-dropdown>
  `
};

Controlled value

Bind value two-ways by listening to the uwc-change event and updating state.

import { LitElement, html, css } from 'lit';
import { customElement, state } from 'lit/decorators.js';

@customElement('dropdown-controlled-demo')
export class AppDemo extends LitElement {
  static styles = css`
    :host { display: block; }
    p { margin: .75rem 0 0; font-size: .875rem; color: #374151; }
    strong { color: #6366f1; }
  `;

  @state() value = null;

  options = [
    { label: 'Designer',  value: 'designer'  },
    { label: 'Developer', value: 'developer' },
    { label: 'Manager',   value: 'manager'   },
    { label: 'Marketing', value: 'marketing' },
  ];

  render() {
    return html`
      <uwc-dropdown
        .options=${this.options}
        .value=${this.value}
        placeholder="Select role..."
        @uwc-change=${(e) => { this.value = e.detail.value; }}>
      </uwc-dropdown>
      <p>Selected: <strong>${this.value ?? 'none'}</strong></p>
    `;
  }
}
import React, { useState } from 'react';
import { UwcDropdown } from '@uwc/components/react';

export default function App() {
  const [value, setValue] = useState(null);
  const options = [
    { label: 'Designer',  value: 'designer'  },
    { label: 'Developer', value: 'developer' },
    { label: 'Manager',   value: 'manager'   },
  ];
  return (
    <>
      <UwcDropdown
        options={options}
        value={value}
        placeholder="Select role..."
        onUwcChange={(e) => setValue(e.detail.value)}
      />
      <p>Selected: <strong>{value ?? 'none'}</strong></p>
    </>
  );
}
import { Component, signal } from '@angular/core';

@Component({
  selector: 'app-root',
  standalone: true,
  template: `
    <uwc-dropdown
      [options]="options"
      [value]="value()"
      placeholder="Select role..."
      (uwc-change)="value.set($event.detail.value)">
    </uwc-dropdown>
    <p>Selected: <strong>{{ value() ?? 'none' }}</strong></p>
  `
})
export class AppComponent {
  readonly value = signal<string | null>(null);
  options = [
    { label: 'Designer',  value: 'designer'  },
    { label: 'Developer', value: 'developer' },
    { label: 'Manager',   value: 'manager'   },
  ];
}
export default {
  data() {
    return {
      value: null,
      options: [
        { label: 'Designer',  value: 'designer'  },
        { label: 'Developer', value: 'developer' },
        { label: 'Manager',   value: 'manager'   },
      ],
    };
  },
  template: `
    <uwc-dropdown
      :options="options"
      :value="value"
      placeholder="Select role..."
      @uwc-change="value = $event.detail.value"
    ></uwc-dropdown>
    <p>Selected: <strong>{{ value ?? 'none' }}</strong></p>
  `
};

With filter

Add filter to show a search input inside the panel.

import { LitElement, html } from 'lit';
import { customElement } from 'lit/decorators.js';

@customElement('dropdown-filter-demo')
export class AppDemo extends LitElement {
  options = [
    { label: 'United States', value: 'us' },
    { label: 'United Kingdom', value: 'uk' },
    { label: 'Canada',         value: 'ca' },
    { label: 'Germany',        value: 'de' },
    { label: 'France',         value: 'fr' },
    { label: 'Japan',          value: 'jp' },
    { label: 'Australia',      value: 'au' },
  ];
  render() {
    return html`
      <uwc-dropdown
        .options=${this.options}
        placeholder="Select country..."
        filter
        filter-placeholder="Search countries...">
      </uwc-dropdown>
    `;
  }
}
import React from 'react';
import { UwcDropdown } from '@uwc/components/react';

export default function App() {
  const options = [
    { label: 'United States', value: 'us' },
    { label: 'Canada',        value: 'ca' },
    { label: 'Germany',       value: 'de' },
    { label: 'Japan',         value: 'jp' },
  ];
  return (
    <UwcDropdown
      options={options}
      placeholder="Select country..."
      filter
      filterPlaceholder="Search countries..."
    />
  );
}
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  standalone: true,
  template: `
    <uwc-dropdown
      [options]="options"
      placeholder="Select country..."
      filter
      filter-placeholder="Search countries...">
    </uwc-dropdown>
  `
})
export class AppComponent {
  options = [
    { label: 'United States', value: 'us' },
    { label: 'Canada',        value: 'ca' },
    { label: 'Germany',       value: 'de' },
    { label: 'France',        value: 'fr' },
    { label: 'Japan',         value: 'jp' },
  ];
}
export default {
  data() {
    return {
      options: [
        { label: 'United States', value: 'us' },
        { label: 'Canada',        value: 'ca' },
        { label: 'Germany',       value: 'de' },
        { label: 'Japan',         value: 'jp' },
      ],
    };
  },
  template: `
    <uwc-dropdown
      :options="options"
      placeholder="Select country..."
      filter
      filter-placeholder="Search countries..."
    ></uwc-dropdown>
  `
};

With clear button

Add show-clear to render a × button when a value is selected.

import { LitElement, html, css } from 'lit';
import { customElement, state } from 'lit/decorators.js';

@customElement('dropdown-clear-demo')
export class AppDemo extends LitElement {
  static styles = css`
    :host { display: block; }
    p { margin: .75rem 0 0; font-size: .8rem; color: #6b7280; font-family: monospace; }
  `;

  @state() value = null;
  @state() private _event = '';

  options = [
    { label: 'Draft',     value: 'draft'     },
    { label: 'Published', value: 'published' },
    { label: 'Archived',  value: 'archived'  },
  ];

  render() {
    return html`
      <uwc-dropdown
        .options=${this.options}
        .value=${this.value}
        placeholder="Select status..."
        show-clear
        @uwc-change=${(e) => { this.value = e.detail.value; this._event = 'uwc-change'; }}
        @uwc-clear=${()  => { this.value = null;            this._event = 'uwc-clear';  }}>
      </uwc-dropdown>
      <p>${this._event ? 'Last event: ' + this._event + ' / value: ' + JSON.stringify(this.value) : 'Interact to see events'}</p>
    `;
  }
}
import React, { useState } from 'react';
import { UwcDropdown } from '@uwc/components/react';

export default function App() {
  const [value, setValue] = useState(null);
  const options = [
    { label: 'Draft',     value: 'draft'     },
    { label: 'Published', value: 'published' },
    { label: 'Archived',  value: 'archived'  },
  ];
  return (
    <UwcDropdown
      options={options}
      value={value}
      placeholder="Select status..."
      showClear
      onUwcChange={(e) => setValue(e.detail.value)}
      onUwcClear={() => setValue(null)}
    />
  );
}
import { Component, signal } from '@angular/core';

@Component({
  selector: 'app-root',
  standalone: true,
  template: `
    <uwc-dropdown
      [options]="options"
      [value]="value()"
      placeholder="Select status..."
      show-clear
      (uwc-change)="value.set($event.detail.value)"
      (uwc-clear)="value.set(null)">
    </uwc-dropdown>
  `
})
export class AppComponent {
  readonly value = signal<string | null>(null);
  options = [
    { label: 'Draft',     value: 'draft'     },
    { label: 'Published', value: 'published' },
    { label: 'Archived',  value: 'archived'  },
  ];
}
export default {
  data() {
    return {
      value: null,
      options: [
        { label: 'Draft',     value: 'draft'     },
        { label: 'Published', value: 'published' },
        { label: 'Archived',  value: 'archived'  },
      ],
    };
  },
  template: `
    <uwc-dropdown
      :options="options"
      :value="value"
      placeholder="Select status..."
      show-clear
      @uwc-change="value = $event.detail.value"
      @uwc-clear="value = null"
    ></uwc-dropdown>
  `
};

Multi-select

Add multiple to enable chip-based multi-selection.

import { LitElement, html, css } from 'lit';
import { customElement, state } from 'lit/decorators.js';

@customElement('dropdown-multi-demo')
export class AppDemo extends LitElement {
  static styles = css`
    :host { display: block; }
    p { margin: .75rem 0 0; font-size: .875rem; color: #374151; }
  `;

  @state() value = [];

  options = [
    { label: 'HTML',       value: 'html'    },
    { label: 'CSS',        value: 'css'     },
    { label: 'JavaScript', value: 'js'      },
    { label: 'TypeScript', value: 'ts'      },
    { label: 'React',      value: 'react'   },
    { label: 'Vue',        value: 'vue'     },
    { label: 'Angular',    value: 'angular' },
  ];

  render() {
    return html`
      <uwc-dropdown
        .options=${this.options}
        .value=${this.value}
        placeholder="Select technologies..."
        multiple
        show-clear
        filter
        @uwc-change=${(e) => { this.value = e.detail.value; }}>
      </uwc-dropdown>
      <p>Selected: <strong>${this.value && this.value.length ? this.value.join(', ') : 'none'}</strong></p>
    `;
  }
}
import React, { useState } from 'react';
import { UwcDropdown } from '@uwc/components/react';

export default function App() {
  const [value, setValue] = useState([]);
  const options = [
    { label: 'HTML',       value: 'html'    },
    { label: 'CSS',        value: 'css'     },
    { label: 'JavaScript', value: 'js'      },
    { label: 'TypeScript', value: 'ts'      },
    { label: 'React',      value: 'react'   },
    { label: 'Vue',        value: 'vue'     },
  ];
  return (
    <>
      <UwcDropdown
        options={options}
        value={value}
        placeholder="Select technologies..."
        multiple
        showClear
        filter
        onUwcChange={(e) => setValue(e.detail.value)}
      />
      <p>Selected: <strong>{value.length ? value.join(', ') : 'none'}</strong></p>
    </>
  );
}
import { Component, signal } from '@angular/core';

@Component({
  selector: 'app-root',
  standalone: true,
  template: `
    <uwc-dropdown
      [options]="options"
      [value]="value()"
      placeholder="Select technologies..."
      multiple
      show-clear
      filter
      (uwc-change)="value.set($event.detail.value)">
    </uwc-dropdown>
  `
})
export class AppComponent {
  readonly value = signal<string[]>([]);
  options = [
    { label: 'HTML',       value: 'html'    },
    { label: 'CSS',        value: 'css'     },
    { label: 'JavaScript', value: 'js'      },
    { label: 'TypeScript', value: 'ts'      },
    { label: 'React',      value: 'react'   },
    { label: 'Vue',        value: 'vue'     },
  ];
}
export default {
  data() {
    return {
      value: [],
      options: [
        { label: 'HTML',       value: 'html'    },
        { label: 'CSS',        value: 'css'     },
        { label: 'JavaScript', value: 'js'      },
        { label: 'TypeScript', value: 'ts'      },
        { label: 'React',      value: 'react'   },
        { label: 'Vue',        value: 'vue'     },
      ],
    };
  },
  template: `
    <uwc-dropdown
      :options="options"
      :value="value"
      placeholder="Select technologies..."
      multiple
      show-clear
      filter
      @uwc-change="value = $event.detail.value"
    ></uwc-dropdown>
  `
};

Option groups

Set the group field on an option to render it as a non-selectable section header.

import { LitElement, html } from 'lit';
import { customElement } from 'lit/decorators.js';

@customElement('dropdown-groups-demo')
export class AppDemo extends LitElement {
  options = [
    { group: 'Fruits',     label: 'Fruits',     value: null },
    { label: 'Apple',      value: 'apple'   },
    { label: 'Banana',     value: 'banana'  },
    { label: 'Cherry',     value: 'cherry'  },
    { group: 'Vegetables', label: 'Vegetables', value: null },
    { label: 'Carrot',     value: 'carrot'  },
    { label: 'Broccoli',   value: 'broccoli'},
  ];
  render() {
    return html`
      <uwc-dropdown .options=${this.options} placeholder="Select food..." filter></uwc-dropdown>
    `;
  }
}
import React from 'react';
import { UwcDropdown } from '@uwc/components/react';

export default function App() {
  const options = [
    { group: 'Fruits',     label: 'Fruits',     value: null },
    { label: 'Apple',      value: 'apple'   },
    { label: 'Banana',     value: 'banana'  },
    { group: 'Vegetables', label: 'Vegetables', value: null },
    { label: 'Carrot',     value: 'carrot'  },
  ];
  return <UwcDropdown options={options} placeholder="Select food..." filter />;
}
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  standalone: true,
  template: `<uwc-dropdown [options]="options" placeholder="Select food..." filter></uwc-dropdown>`
})
export class AppComponent {
  options = [
    { group: 'Fruits',     label: 'Fruits',     value: null },
    { label: 'Apple',      value: 'apple'   },
    { label: 'Banana',     value: 'banana'  },
    { group: 'Vegetables', label: 'Vegetables', value: null },
    { label: 'Carrot',     value: 'carrot'  },
  ];
}
export default {
  data() {
    return {
      options: [
        { group: 'Fruits',     label: 'Fruits',     value: null },
        { label: 'Apple',      value: 'apple'   },
        { label: 'Banana',     value: 'banana'  },
        { group: 'Vegetables', label: 'Vegetables', value: null },
        { label: 'Carrot',     value: 'carrot'  },
      ],
    };
  },
  template: `
    <uwc-dropdown :options="options" placeholder="Select food..." filter></uwc-dropdown>
  `
};

Loading state

Set loading to show a spinner and block interaction during async data fetching.

import { LitElement, html, css } from 'lit';
import { customElement, state } from 'lit/decorators.js';

@customElement('dropdown-loading-demo')
export class AppDemo extends LitElement {
  static styles = css`
    :host { display: block; }
    .row { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; }
  `;

  @state() private _loading = false;
  @state() private _options = [];

  async _load() {
    this._loading = true;
    this._options = [];
    await new Promise(r => setTimeout(r, 1500));
    this._options = [
      { label: 'Result A', value: 'a' },
      { label: 'Result B', value: 'b' },
      { label: 'Result C', value: 'c' },
    ];
    this._loading = false;
  }

  render() {
    return html`
      <div class="row">
        <uwc-dropdown .options=${this._options} ?loading=${this._loading} placeholder="Select..."></uwc-dropdown>
        <uwc-button label="Fetch options" @click=${this._load}></uwc-button>
      </div>
    `;
  }
}
import React, { useState } from 'react';
import { UwcDropdown, UwcButton } from '@uwc/components/react';

export default function App() {
  const [loading, setLoading] = useState(false);
  const [options, setOptions] = useState([]);

  async function load() {
    setLoading(true);
    setOptions([]);
    await new Promise(r => setTimeout(r, 1500));
    setOptions([
      { label: 'Result A', value: 'a' },
      { label: 'Result B', value: 'b' },
    ]);
    setLoading(false);
  }

  return (
    <div style={{ display: 'flex', gap: '1rem', alignItems: 'center' }}>
      <UwcDropdown options={options} loading={loading} placeholder="Select..." />
      <UwcButton label="Fetch options" onUwcClick={load} />
    </div>
  );
}
import { Component, signal } from '@angular/core';

@Component({
  selector: 'app-root',
  standalone: true,
  template: `
    <div style="display:flex;gap:1rem;align-items:center">
      <uwc-dropdown [options]="options()" [loading]="loading()" placeholder="Select..."></uwc-dropdown>
      <uwc-button label="Fetch options" (click)="load()"></uwc-button>
    </div>
  `
})
export class AppComponent {
  readonly loading = signal(false);
  readonly options = signal<any[]>([]);

  async load() {
    this.loading.set(true);
    this.options.set([]);
    await new Promise(r => setTimeout(r, 1500));
    this.options.set([{ label: 'Result A', value: 'a' }, { label: 'Result B', value: 'b' }]);
    this.loading.set(false);
  }
}
export default {
  data() {
    return {
      loading: false,
      options: [],
    };
  },
  methods: {
    async load() {
      this.loading = true;
      this.options = [];
      await new Promise(r => setTimeout(r, 1500));
      this.options = [{ label: 'Result A', value: 'a' }, { label: 'Result B', value: 'b' }];
      this.loading = false;
    }
  },
  template: `
    <div style="display:flex;gap:1rem;align-items:center">
      <uwc-dropdown :options="options" :loading="loading" placeholder="Select..."></uwc-dropdown>
      <uwc-button label="Fetch options" @click="load"></uwc-button>
    </div>
  `
};

Attributes

Name Type Default Description
options SelectOption[] — the option model.
value Currently selected value (single) or value[] (multiple).
placeholder Trigger placeholder text.
multiple Enable multi-select (chips UI).
filter Show filter input inside panel.
filter-placeholder Placeholder for the filter input. Default: "Search…"
show-clear Show clear (×) button when a value is selected.
loading Show spinner and disable interaction.
disabled Disable the entire component.
scroll-height Max panel height (CSS value). Default: 220px.
auto-display-first Select first option automatically on mount.
empty-message Message shown when filter yields no results.
placement Default: bottom-start.
offset Gap px. Default: 4.
max-selected-labels Max chips shown before collapse label. Default: 3.

Properties

Name Type Default Description
options SelectOption[] []
value unknown null
placement Placement 'bottom-start'
offset number 4
placeholder string 'Select…'
multiple boolean false
filter boolean false
filterPlaceholder string 'Search…'
showClear boolean false
loading boolean false
disabled boolean false
scrollHeight number 220
autoDisplayFirst boolean false
emptyMessage string 'No results found.'
maxSelectedLabels number 3
styles array [styles]

Events

Name Type Description
uwc-change CustomEvent — detail: { value, label, originalEvent }
uwc-filter CustomEvent — detail: { query, originalEvent }
uwc-clear CustomEvent — detail: { previousValue }
uwc-focus CustomEvent
uwc-blur CustomEvent
uwc-show CustomEvent
uwc-hide CustomEvent

CSS Custom Properties

Name Default Description
--uwc-dd-trigger-bg
--uwc-dd-trigger-border
--uwc-dd-trigger-radius
--uwc-dd-trigger-color
--uwc-dd-trigger-placeholder-color
--uwc-dd-trigger-focus-border
--uwc-dd-trigger-open-border
--uwc-dd-trigger-disabled-bg
--uwc-dd-chip-bg
--uwc-dd-chip-color
--uwc-dd-panel-bg
--uwc-dd-panel-border
--uwc-dd-panel-radius
--uwc-dd-panel-shadow
--uwc-dd-option-hover-bg
--uwc-dd-option-selected-bg
--uwc-dd-option-selected-color
--uwc-dd-option-disabled-color
--uwc-dd-group-color
--uwc-dd-z
--uwc-dd-duration

CSS Parts

Name Description
trigger
label
chip
clear-btn
caret
panel
filter-input
option
group-header
empty
loading-icon