ComposerSuggestions

Headless inline @/# autocomplete behavior paired with composable suggestion parts.

Preview#

Use @ to mention people or # to find channels.

A
AtlasDesign@atlas
A
Avery@avery
陈
陈默产品设计@chenmo
J
Jordan LeePlatform@jordan
林
林澈客户成功@linche
M
Mia ChenMobile@mia
周
周然工程效能@zhouran
S
Sora KimResearch@sora
王
王一数据分析@wangyi
M
Morgan BellPartnerships@morgan
import {
  Composer,
  ComposerActions,
  ComposerInput,
  ComposerMeta,
  ComposerRoot,
  ComposerSubmit,
  ComposerSuggestionAside,
  ComposerSuggestionContent,
  ComposerSuggestionGroup,
  ComposerSuggestionGroupLabel,
  ComposerSuggestionIcon,
  ComposerSuggestionList,
  ComposerSuggestionMeta,
  ComposerSuggestionOption,
  ComposerSuggestionTitle,
  ComposerToolbar,
  ComposerToolbarLabel,
} from "raft-ui";

<ComposerRoot>
  <ComposerSuggestionList>
    <ComposerSuggestionGroup>
      <ComposerSuggestionGroupLabel />
      <ComposerSuggestionOption>
        <ComposerSuggestionIcon />
        <ComposerSuggestionContent>
          <ComposerSuggestionTitle />
          <ComposerSuggestionMeta />
          <ComposerSuggestionAside />
        </ComposerSuggestionContent>
      </ComposerSuggestionOption>
    </ComposerSuggestionGroup>
  </ComposerSuggestionList>
  <Composer>
    <ComposerInput />
    <ComposerToolbar>
      <ComposerActions />
      <ComposerMeta>
        <ComposerToolbarLabel />
        <ComposerSubmit />
      </ComposerMeta>
    </ComposerToolbar>
  </Composer>
</ComposerRoot>

People#

A
AtlasDesign@atlas
A
Avery@avery
陈
陈默产品设计@chenmo
J
Jordan LeePlatform@jordan
林
林澈客户成功@linche
M
Mia ChenMobile@mia
周
周然工程效能@zhouran
S
Sora KimResearch@sora
王
王一数据分析@wangyi
M
Morgan BellPartnerships@morgan

Channels#

proj-uiuxProduct design#proj-uiux
eng-platformEngineering updates#eng-platform
产品设计产品设计讨论#产品设计
design-systemDesign system#design-system
工程公告研发公告#工程公告
客户反馈Customer feedback#客户反馈
研发周报Weekly planning#研发周报
growth-labExperiment tracking#growth-lab
开发者社区开发者交流#开发者社区
launch-2025Past launcharchived

Every row stays one line with the same height. Space goes to the name first; the description only uses what is left and truncates (or disappears) first. The name truncates only when it alone cannot fit, with the full name on hover. Handles show in full up to a third of the row, then truncate.

Wide
P
PengProduction-minded software engineer: architecture, debugging, performance and incident response across web, desktop and mobile@peng
C
crossPragmatic engineer for code, infrastructure debugging, PR review and release hygiene@cross
W
WugA wug for work: I turn fuzzy intent into named, checked, shipped changes with evidence@Wug
A
Alexandra Montgomery-FitzgeraldOwns the design system, theme tokens and every component review before a release goes out@alexandra
产
产品体验设计师 Product UX Designer负责产品体验走查、设计评审、跨团队需求梳理以及每周的用户反馈汇总与优先级排序@product-ux-designer
R
release-automation-coordinator-for-desktop-and-mobile-buildsRelease automation@release-bot
K
KaiCI triage@kai-the-extremely-long-handle-for-release-automation-and-ci-triage
M
Maximilian Alexander Konstantin von Hohenzollern-Sigmaringen the ThirdWorst case: long nickname, long handle and long description together, all competing for one row in the suggestion list@maximilian-alexander-konstantin-von-hohenzollern-sigmaringen
超
超级无敌长的中文昵称用来测试列表在最坏情况下是否依然能保持整洁不被撑破而且还要再长一点点这是一个没有任何标点和空格的超长中文描述用来确认在最坏情况下描述依然只在剩余空间里截断而不会把名字或者句柄挤出列表之外@chaoji-changde-zhongwen-nicheng-ceshi-yong-de-handle
Z
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
336px · composer in a 360px thread panel
P
PengProduction-minded software engineer: architecture, debugging, performance and incident response across web, desktop and mobile@peng
C
crossPragmatic engineer for code, infrastructure debugging, PR review and release hygiene@cross
W
WugA wug for work: I turn fuzzy intent into named, checked, shipped changes with evidence@Wug
A
Alexandra Montgomery-FitzgeraldOwns the design system, theme tokens and every component review before a release goes out@alexandra
产
产品体验设计师 Product UX Designer负责产品体验走查、设计评审、跨团队需求梳理以及每周的用户反馈汇总与优先级排序@product-ux-designer
R
release-automation-coordinator-for-desktop-and-mobile-buildsRelease automation@release-bot
K
KaiCI triage@kai-the-extremely-long-handle-for-release-automation-and-ci-triage
M
Maximilian Alexander Konstantin von Hohenzollern-Sigmaringen the ThirdWorst case: long nickname, long handle and long description together, all competing for one row in the suggestion list@maximilian-alexander-konstantin-von-hohenzollern-sigmaringen
超
超级无敌长的中文昵称用来测试列表在最坏情况下是否依然能保持整洁不被撑破而且还要再长一点点这是一个没有任何标点和空格的超长中文描述用来确认在最坏情况下描述依然只在剩余空间里截断而不会把名字或者句柄挤出列表之外@chaoji-changde-zhongwen-nicheng-ceshi-yong-de-handle
Z
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
288px · narrow phone
P
PengProduction-minded software engineer: architecture, debugging, performance and incident response across web, desktop and mobile@peng
C
crossPragmatic engineer for code, infrastructure debugging, PR review and release hygiene@cross
W
WugA wug for work: I turn fuzzy intent into named, checked, shipped changes with evidence@Wug
A
Alexandra Montgomery-FitzgeraldOwns the design system, theme tokens and every component review before a release goes out@alexandra
产
产品体验设计师 Product UX Designer负责产品体验走查、设计评审、跨团队需求梳理以及每周的用户反馈汇总与优先级排序@product-ux-designer
R
release-automation-coordinator-for-desktop-and-mobile-buildsRelease automation@release-bot
K
KaiCI triage@kai-the-extremely-long-handle-for-release-automation-and-ci-triage
M
Maximilian Alexander Konstantin von Hohenzollern-Sigmaringen the ThirdWorst case: long nickname, long handle and long description together, all competing for one row in the suggestion list@maximilian-alexander-konstantin-von-hohenzollern-sigmaringen
超
超级无敌长的中文昵称用来测试列表在最坏情况下是否依然能保持整洁不被撑破而且还要再长一点点这是一个没有任何标点和空格的超长中文描述用来确认在最坏情况下描述依然只在剩余空间里截断而不会把名字或者句柄挤出列表之外@chaoji-changde-zhongwen-nicheng-ceshi-yong-de-handle
Z
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
A
Avery@avery

API#WIP

value
string
Controlled composer draft.
onValueChange
(value: string) => void
Called when typing or insertion changes the draft.
detectTrigger
(textBeforeCaret: string) => ComposerSuggestionTriggerMatch | null
Caller-owned trigger parser. The match identifies the marker, query, and marker start index before the caret.
getItems
(match: ComposerSuggestionTriggerMatch) => readonly TItem[]
Returns items for the active trigger. An empty list closes the popup.
getItemText
(item: TItem) => string
Returns the insertion text for a selected item.
isItemDisabled
(item: TItem) => boolean
Optional disabled predicate. Disabled items remain visible but are skipped by keyboard navigation and cannot be selected.
getInputProps
(props?) => textarea props
Merges textarea value, keyboard handling, refs, and combobox semantics.
getListProps
(props) => listbox props
Merges listbox role, id, and ref.
getOptionProps
(item, index, props?) => option props
Merges option identity, highlight state, selection, and pointer behavior.
open
boolean
Whether an active trigger has suggestion items.
items
readonly TItem[]
Items for the active trigger.
highlightedIndex
number
Keyboard-highlighted item index, or -1.
activeItem
TItem | undefined
Currently highlighted item, when one exists.
select
(item: TItem) => void
Inserts a selectable item's text in place of the trigger.
insert
(text: string) => void
Inserts text at the current caret.
clear
() => void
Clears the draft and closes suggestions.
...props
useRender.ComponentProps<"div">
Popup container. Spread getListProps onto it.
separateddefault: false
boolean
Adds top spacing when stacking multiple groups.
...props
useRender.ComponentProps<"div">
Optional visual group of suggestion options.
...props
useRender.ComponentProps<"div">
Optional label for a suggestion group.
...props
useRender.ComponentProps<"div">
Visual option root. Spread getOptionProps onto it so highlighted and disabled states remain keyboard-complete.
...props
useRender.ComponentProps<"div">
Flexible content row for title, metadata, and trailing content.
variantdefault: "avatar"
"avatar" | "framed" | "auxiliary" | "inline"
Leading icon treatment for avatar, framed glyph, or auxiliary affordance; inline is a text-sized glyph inside the row (e.g. human vs agent) that never shrinks.
...props
useRender.ComponentProps<"span">
Leading icon or avatar slot.
...props
useRender.ComponentProps<"span">
Primary option label.
variantdefault: "text"
"text" | "code"
Secondary option text style.
...props
useRender.ComponentProps<"span">
Secondary option text.
...props
useRender.ComponentProps<"span">
Trailing option content slot.