ThreadPanel

Thread side-panel chrome for the right panel stack: header, title, action cluster, scroll body, and composer/footer slot.

Preview#

Controls
<ThreadPanelRoot>
  <ThreadPanelHeader>
    <Button className="mr-1 lg:hidden" variant="outline" size="icon-sm" aria-label="Back">
      <ChevronLeft />
    </Button>
    <ThreadPanelTitle>
      Thread
      <ThreadPanelTitleMeta> — #acme-design</ThreadPanelTitleMeta>
    </ThreadPanelTitle>
    <ThreadPanelActions>
      <PanelAction aria-label="Search thread">
        <Search />
      </PanelAction>
      <PanelAction aria-label="View in channel">
        <ExternalLink />
        <span className="hidden md:inline">View in channel</span>
      </PanelAction>
      <PanelAction className="max-lg:hidden" aria-label="Close thread">
        <X />
      </PanelAction>
    </ThreadPanelActions>
  </ThreadPanelHeader>
  <ThreadPanelContent>
    <ThreadPanelSearch>
      <InputGroup />
      <ThreadPanelSearchTrailing>
        <ThreadPanelSearchCount />
        <ThreadPanelActions>
          <PanelAction aria-label="Previous match">
            <ChevronUp />
          </PanelAction>
          <PanelAction aria-label="Next match">
            <ChevronDown />
          </PanelAction>
          <PanelAction aria-label="Close search">
            <X />
          </PanelAction>
        </ThreadPanelActions>
      </ThreadPanelSearchTrailing>
    </ThreadPanelSearch>
    <ThreadPanelOriginalMessage>
      <MessageItem />
    </ThreadPanelOriginalMessage>
    <ThreadPanelBody>
      <MessageList>
        <ThreadPanelReplySummary>
          <MessageListNotice />
          <ThreadPanelReplyCount />
        </ThreadPanelReplySummary>
        <MessageListDateDivider />
        <MessageItem />
        <MessageItem>
          <MessageItemBody>
            <MessageItemSearchMatch>Matching text</MessageItemSearchMatch>
          </MessageItemBody>
        </MessageItem>
      </MessageList>
    </ThreadPanelBody>
    <ThreadPanelFooter>
      <ComposerRoot>
        <Composer>
          <ComposerInput />
          <ComposerToolbar>
            <ComposerActions />
            <ComposerMeta>
              <ComposerSubmit />
            </ComposerMeta>
          </ComposerToolbar>
        </Composer>
      </ComposerRoot>
    </ThreadPanelFooter>
  </ThreadPanelContent>
</ThreadPanelRoot>

API#WIP

PropTypeDefaultDescription
...propssection propsFull-height thread panel surface. It does not own thread data, routing, responsive placement, or document scroll behavior.
PropTypeDefaultDescription
...propsdiv propsFixed thread header region.
PropTypeDefaultDescription
...propsh2 propsPrimary thread title. Truncates within the header.
PropTypeDefaultDescription
...propsspan propsSecondary title metadata, such as the parent channel name.
PropTypeDefaultDescription
...propsdiv propsAction cluster for header or search controls.
PropTypeDefaultDescription
...propsdiv propsThread surface below the header, including search, messages, and composer slots.
PropTypeDefaultDescription
...propsdiv propsRight-aligned cluster for match count and PanelAction controls. Stays flush to the row end when the input is narrower than the row.
PropTypeDefaultDescription
...propsdiv propsMatch-count label in the trailing cluster, formatted as a/b.
PropTypeDefaultDescription
...propsdiv propsOriginal message region above the scroll body. Place a MessageItem inside it.
PropTypeDefaultDescription
...propsdiv propsAligns the reply notice and count with the thread panel content gutter for the active theme.
PropTypeDefaultDescription
...propsdiv propsLabels the reply count above the message list.
PropTypeDefaultDescription
...propsdiv propsScrollable message body.
PropTypeDefaultDescription
...propsdiv propsDay-boundary marker in the message list.
PropTypeDefaultDescription
...propsdiv propsInline notice in the message list.
PropTypeDefaultDescription
...propsmark propsInline matched-text part that also applies the search-result surface to its containing MessageItem.