组合框

一个输入框,搭配一组预定义选项供用户选择。

安装

pnpm dlx shadcn@latest add @lumi-ui/combobox

组件结构

<Combobox>
  <ComboboxTrigger />
  <ComboboxInputGroupContent />
 
  <ComboboxChips>
    <ComboboxChip />
  </ComboboxChips>
 
  <ComboboxContent>
    <ComboboxStatus />
    <ComboboxEmpty />
    <ComboboxList>
      <ComboboxRow>
        <ComboboxItemContent />
      </ComboboxRow>
      <ComboboxSeparator />
      <ComboboxGroup>
        <ComboboxGroupLabel />
      </ComboboxGroup>
      <ComboboxCollection />
    </ComboboxList>
  </ComboboxContent>
</Combobox>

功能特性

带清除按钮、触发按钮和图标

输入框置于弹窗内

使用 ComboboxTrigger 替代 ComboboxInputGroup,可将输入框放入弹窗内。在 ComboboxInput 上设置 variant="ghost" 以去除边框和聚焦样式。

Team Member

修改指示器图标及位置

分组

自定义锚点 (positionerAnchor)

ComboboxContent 默认以 ComboboxTrigger 作为锚点。如果你希望弹窗宽度与外层容器一致,可以手动将该容器指定为锚点。

实用示例

配合滚动区域

多选

可创建选项

异步加载(单选)

异步加载(多选)

自定义样式

表单集成

Select your favorite framework

API 参考

ComboboxInputGroup

一个高阶的输入组件,它将 ComboboxInputIconComboboxClearComboboxTrigger 整合为一个带样式的单一元素。

属性类型描述
showTriggerboolean是否显示触发器图标。
showClearboolean是否显示清除图标。
addonIconReact.ReactNode是否显示附加图标。
variant"ghost" | "default" | "transparent"输入框组的视觉变体。
inputSize"default" | "sm" | "lg"输入框的尺寸。
classNamestring额外的 CSS 类名。
...propsComboboxInput.Props将所有其他属性传递给底层的 ComboboxInput.Props

ComboboxContent

一个高阶的容器组件,它将 ComboboxPortalComboboxPositionerComboboxPopup 整合为一个带样式的下拉内容元素。

属性类型描述
sideOffsetnumber相对于锚点的偏移距离。
align"start" | "center" | "end"相对于锚点的对齐方式。
matchAnchorWidthboolean弹窗宽度是否与锚点宽度保持一致。
positionerAnchorReact.RefObject<HTMLDivElement | null>传递给定位器的 ref,用于自定义锚定。
classNamestring额外的 CSS 类名。
...propsComboboxPopup.Props将所有其他属性传递给底层的 ComboboxPopup.Props

ComboboxItemContent

一个高阶的选项组件,它将 ItemItemIndicator 整合为一个带样式的单一元素,并可配置图标位置。

属性类型描述
indicatorPlacement"start" | "end" | "none"指示器图标相对于内容的位置。
indicatorIconReact.ReactNode用作选项指示器的图标。
classNamestring额外的 CSS 类名。
...propsComboboxItem.Props将所有其他属性传递给底层的 ComboboxItem.Props