MessageForwardedBundle

Collapsed forwarded-message bundle composed inside a MessageItem body.

Preview#

AT
Atlasowner2:24 PM
Forwarded 4 messages
Forwarded4 messages
from #release-notes
@Ada

Rollout is clear for the message reference migration.

@Will

Keep the source case with its attachment context.

release-notes.md· markdown
@Mia

Keep the original context available to reviewers.

@Nia

Follow the same message state contract in the thread.

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>
      <MessageForwardedBundleAttachments>
        <MessageForwardedBundleAttachment>
          <MessageForwardedBundleAttachmentName />
          <MessageForwardedBundleAttachmentMeta />
        </MessageForwardedBundleAttachment>
      </MessageForwardedBundleAttachments>
    </MessageForwardedBundleItem>
  </MessageForwardedBundleItems>
  <MessageForwardedBundleFooter>
    <MessageForwardedBundleFooterAction />
  </MessageForwardedBundleFooter>
</MessageForwardedBundle>

Compact bundle#

One to three short forwarded messages render expanded and omit the footer. A DM, private channel, or missing target also omits the source label.

AT
Atlasowner2:25 PM
Forwarded 2 messages
Forwarded2 messages
@Ada

Rollout is clear for the message reference migration.

@Will

Keep the source case with its attachment context.

Collapsed bundle#

More than three messages begin collapsed. The consumer owns the expanded state and passes it to MessageForwardedBundleItems; the list then clips and renders its own fade. The footer and its action remain caller-owned.

Forwarded4 messages
from #release-notes
@Ada

Rollout is clear for the message reference migration.

@Will

Keep the source case with its attachment context.

release-notes.md· markdown
@Mia

Keep the original context available to reviewers.

@Nia

Follow the same message state contract in the thread.

Long content and attachments#

A single forwarded item also collapses when its content is long. Attachment labels stay caller-owned, including their MIME-derived type text.

AT
Atlasowner2:27 PM
Forwarded 1 message
Forwardedmessage
@Nia

Before we cut over, keep the read model running against both event streams and validate account, workspace, and channel permissions in staging.

The migration needs an explicit rollback checkpoint after the first production cohort, plus a documented handoff for reconciliation and replay.

Review the operational checklist with the owners of notifications, search, and thread state before scheduling the final rollout window.

migration-checklist.md· markdownwebhook-cutover-plan.pdf· pdf

Thread source#

A public thread source is actionable and adds the thread suffix to its label.

AT
Atlasowner2:26 PM
Forwarded 1 message
@Mia

Follow the same message state contract in the thread.

Static source 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.

AT
Atlasowner2:28 PM
Forwarded 1 message
Forwardedmessage
from #release-notes
@Kai

The original message is no longer available to open.

API#WIP

PropTypeDefaultDescription
...propsuseRender.ComponentProps<"div">Forwarded messages card root. Compose inside MessageItemEmbedded; expand/collapse state stays consumer-owned.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"div">Bundle header row.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"div">Leading header region for the forwarded label and count.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"span">Forwarded label.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"span">Forwarded message count label.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"button">Interactive public source link; render as an anchor when navigation is available.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"span">Static public source label when the original message cannot be opened.
PropTypeDefaultDescription
collapsedbooleanfalseConstrain the item-list height and show its bottom fade.
...propsuseRender.ComponentProps<"div">Item list. Set collapsed to constrain height and show its bottom fade.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"article">One forwarded message snapshot.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"div">Author and timestamp row for an item.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"span">Forwarded item author label.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"div">Attachment-chip region for an item.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"span">One forwarded attachment chip.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"span">Truncated attachment filename.
PropTypeDefaultDescription
...propsuseRender.ComponentProps<"span">Attachment type or other compact metadata.