MessageForwardedBundle
Collapsed forwarded-message bundle composed inside a MessageItem body.
import {
MessageForwardedBundle,
MessageForwardedBundleAttachment,
MessageForwardedBundleAttachmentMeta,
MessageForwardedBundleAttachmentName,
MessageForwardedBundleAttachments,
MessageForwardedBundleFooter,
MessageForwardedBundleFooterAction,
MessageForwardedBundleHeader,
MessageForwardedBundleHeaderContent,
MessageForwardedBundleHeaderCount,
MessageForwardedBundleHeaderLabel,
MessageForwardedBundleItem,
MessageForwardedBundleItemAuthor,
MessageForwardedBundleItemMeta,
MessageForwardedBundleItems,
MessageForwardedBundleSource,
} from "raft-ui";
<MessageForwardedBundle>
<MessageForwardedBundleHeader>
<MessageForwardedBundleHeaderContent>
<MessageForwardedBundleHeaderLabel />
<MessageForwardedBundleHeaderCount />
</MessageForwardedBundleHeaderContent>
<MessageForwardedBundleSource />
</MessageForwardedBundleHeader>
<MessageForwardedBundleItems collapsed>
<MessageForwardedBundleItem>
<MessageForwardedBundleItemMeta>
<MessageForwardedBundleItemAuthor />
</MessageForwardedBundleItemMeta>
<MessageForwardedBundleItemContent />
<MessageForwardedBundleAttachments>
<MessageForwardedBundleAttachment>
<MessageForwardedBundleAttachmentName />
<MessageForwardedBundleAttachmentMeta />
</MessageForwardedBundleAttachment>
</MessageForwardedBundleAttachments>
</MessageForwardedBundleItem>
</MessageForwardedBundleItems>
<MessageForwardedBundleFooter>
<MessageForwardedBundleFooterAction />
</MessageForwardedBundleFooter>
</MessageForwardedBundle>One to three short forwarded messages render expanded and omit the footer. A DM, private channel, or missing target also omits the source label.
A bundle folds when the items' text together renders beyond eight lines, and folds down to that many lines (both adjustable via `foldLineLimit`). When MessageForwardedBundleItems renders without a collapsed prop the component measures this itself: the list clips with its own fade and the footer appears only while the content actually folds. Passing collapsed keeps the consumer-owned mode. The measurement reads the MessageForwardedBundleItemContent slots, so wrap each item's text body in one — unwrapped text is never measured.
Rollout is clear for the message reference migration.
Keep the source case with its attachment context.
Keep the original context available to reviewers.
Follow the same message state contract in the thread.
A single forwarded item folds under the same eight-line rule, and the action labels both states through expandedContent (children render while folded). Attachment labels stay caller-owned, including their MIME-derived type text.
A public thread source is actionable and adds the thread suffix to its label.
Render a static source label when the original message cannot be opened, such as unavailable provenance or a composer preview. An empty forwarded-items list has no rendered bundle.
...props| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Forwarded messages card root. Compose inside MessageItemEmbedded. By default the bundle folds when the items' text together renders beyond eight lines (adjustable via foldLineLimit); pass collapsed on the items to take full control. |
...props| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Bundle header row. |
...props| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Leading header region for the forwarded label and count. |
...props| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"span"> | — | Forwarded label. |
...props| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"span"> | — | Forwarded message count label. |
...props| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"button"> | — | Interactive public source link; render as an anchor when navigation is available. |
...props| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"span"> | — | Static public source label when the original message cannot be opened. |
collapsedfoldLineLimitdefault: 8...props| Prop | Type | Default | Description |
|---|---|---|---|
collapsed | boolean | — | Omit to keep the default fold: the component measures its item-content slots and folds when the items' text together renders beyond the fold line limit (eight by default). Pass true/false to control the fold yourself — the item list constrains to its folded height and shows its bottom fade, and the measurement is skipped (the detail view pins it open). |
foldLineLimit | number | 8 | How many rendered text lines the default fold allows before folding (only used when collapsed is omitted). |
...props | useRender.ComponentProps<"div"> | — | Item list. Without `collapsed` the surface measures its item-content slots and owns the fold. |
...props| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"article"> | — | One forwarded message snapshot. |
...props| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Author and timestamp row for an item. |
...props| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | The item's text body. The component-owned fold measures these slots: their combined content beyond eight lines folds the card. |
...props| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"div"> | — | Attachment-chip region for an item. |
...props| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"span"> | — | One forwarded attachment chip. |
...props| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"span"> | — | Truncated attachment filename. |
...props| Prop | Type | Default | Description |
|---|---|---|---|
...props | useRender.ComponentProps<"span"> | — | Attachment type or other compact metadata. |