自动完成

一个在输入时智能提示选项的输入框组件。

安装

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

组件结构

<Autocomplete>
  <AutocompleteInputGroupContent />
  <AutocompleteValue />
  <AutocompleteContent>
    <AutocompleteStatus />
    <AutocompleteEmpty />
    <AutocompleteList>
      <AutocompleteRow>
        <AutocompleteItem />
      </AutocompleteRow>
      <AutocompleteSeparator />
      <AutocompleteGroup>
        <AutocompleteGroupLabel />
      </AutocompleteGroup>
      <AutocompleteCollection />
    </AutocompleteList>
  </AutocompleteContent>
</Autocomplete>

实用示例

异步加载

在用户输入时异步加载选项,并渲染自定义的状态内容。

内联补全

通过 mode 属性,让用户使用方向键导航时,将高亮项自动填充到输入框中。可接受 aria-autocomplete 的取值:listbothinlinenone

分组

使用 <AutocompleteGroup><AutocompleteGroupLabel> 在弹窗内添加分区标题,将相关选项组织在一起。

分组数据由一个对象数组表示,每个对象包含 items 属性(即该组的选项数组)。你可以额外提供一个字段(例如 value)作为分组标签的标题文本。

模糊匹配

即便查询内容与选项文本并不完全匹配,模糊匹配也能帮你找到相关结果。

限制结果数量

通过 limit 属性限制可见选项的数量,并使用 <AutocompleteStatus> 引导用户优化查询条件。

自动高亮

<Autocomplete> 上设置 autoHighlight 属性,用户输入时第一个匹配项会被自动高亮。如果希望高亮始终存在(例如列表内嵌在对话框中时),可将该属性的值设为 always

这个属性可以和 keepHighlighthighlightItemOnHover 组合使用,以配置鼠标交互时高亮的行为方式。

网格布局

通过将每一行用 <AutocompleteRow> 包裹,可以让选项以网格布局展示。

表单集成

在表单中使用自动完成。

Select your favorite framework

API 参考

AutocompleteInputGroupContent

一个复合组件,将 AutocompleteInputIconAutocompleteClearAutocompleteTrigger 整合为一个带样式的单一元素。

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

AutocompleteContent

一个复合组件,将 AutocompletePortalAutocompletePositionerAutocompletePopup 整合为一个带样式的下拉内容元素。

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