Selecting a value from a dropdown list of options.
isSearchable) for lists longer than 10 items, where scrolling impedes the experience.withVirtualizer) alongside search for large lists to prevent performance issues.label. When a visible label isn't possible, provide ariaLabel or ariaLabelledby.description to a disabled option explaining why it's unavailable and what would make it selectable.isMulti) — one or more selections, displayed as removable tags in the trigger.isSearchable) — adds a search input inside the dropdown for filtering options.withCreate with isSearchable) — lets users create an option when the typed input doesn't match an existing one. Use for tags or custom attributes the user manages themselves.size="md") — default size for most use cases.size="sm") — use for compact layouts and less prominent lists.icon prop when the field itself needs persistent visual context.icon to options to provide visual context such as categories or avatars.description to options when labels alone do not convey the purpose of each choice.iconComponent to render custom icons (avatars, status indicators) in place of the default icon.optionComponent to render custom option content with metadata, status indicators, or additional layout.valueComponent to customize how the selected value displays in the trigger.elementBefore to render custom content on the left side of the trigger (before the selected value, after any icon) when the icon prop is not expressive enough — for example always-included tokens or a custom badge. Use elementAfter for trailing trigger content; it renders after the clear button and before the chevron.elementBefore and elementAfter. elementBefore renders after the option icon; elementAfter renders beside the selected checkmark. In Ember these are components, because options are plain data rather than blocks.headerComponent or beforeOptionsComponent to add context above the option list in the dropdown.footerComponent to add supplementary actions or context below the option list.canWrap) when truncation would hide important selections.isDisabled) — prevents all interaction; field and text adopt disabled styling.isLoading) — displays a spinner icon indicating options are being loaded.isInvalid + error) — applies critical styling and displays error text below the field.isClearable) — adds a clear button to reset the field after a selection is made. Use for optional Selects.isCollapsible on a group) to let users expand and collapse sections. Use defaultIsCollapsed to start a group collapsed.tooltip to options to surface additional detail on hover or focus without inline descriptions.description or tooltip when more context is needed.searchPlaceholder when search is enabled. Prefix examples with e.g.options as an array of { value, label } objects. Options also accept description, icon, tooltip, tooltipPlacement, withTruncatedTooltip, isDisabled, searchLabel, elementBefore, and elementAfter.{ label: 'Group name', options: [...] }. Groups accept isCollapsible, defaultIsCollapsed, icon, isDisabled, tooltip, and withTruncatedTooltip, and can nest further.value is a string or an option object and onChange receives string | null. Multi-select value is an array of either and onChange receives string[] | null.isClearable calls onChange(null) when cleared — there is no separate onClear callback.withCreate only applies when isSearchable is true. Selecting the create option calls onCreate(value) and not onChange, so update both options and value inside onCreate. Customize the create row with createOptionLabel and gate it with canCreateNewOption.canWrap only applies when isMulti is true.withTruncatedTooltip on the Select applies to all options and group headers, and is overridable per option or group. With a custom optionComponent, forward the labelRef prop to the element that may truncate so detection works.label, description, and error (rendered below the field, with error replacing description); iconComponent, which replaces the default option icon area; optionComponent, which replaces the option row; valueComponent, which replaces the selected value in the trigger; headerComponent (above the search input), beforeOptionsComponent (below the search input, above the list), and footerComponent (below the list).icon prop renders a fixed Pluma icon at the left of the trigger; option-level icon fields change with each option.elementBefore renders in the trigger's leading slot after any icon and before the selected value; elementAfter renders in the trailing slot after the clear button and before the chevron.unsafe_leftSectionComponent is deprecated. Use elementBefore instead — it takes the same content in the same position.size values "medium" and "small" are deprecated. Use "md" and "sm".isOpen, defaultIsOpen, and onOpenChange; onOpen and onCloseComplete fire on open and after the close animation. onActiveChange reports the highlighted option.onLoadMore with shouldLoadMore and isLoadingMore for paginated or infinite-scroll option loading.searchInputValue with onSearchInput to control filtering externally — the component stops filtering on its own when these are provided. searchAriaLabel labels the search input (default "Search").unsafe_popoverClassName, unsafe_popoverStyle, and unsafe_popoverSize customize the floating dropdown element. middlewareOptions and additionalMiddleware customize Floating UI positioning. unsafe_initialSearchValue pre-fills the search input for snapshots and tests only.ReactNode directly for label, description, error, elementBefore, and elementAfter; the *Component props take components.<PlumaSelect> with @argName args, plus the :label, :description, :error, :elementBefore, and :elementAfter named blocks for rich content. Option-level elementBefore/elementAfter are components in Ember, since options are plain data rather than blocks.