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

...props
section props
Full-height thread panel surface. It does not own thread data, routing, responsive placement, or document scroll behavior.
...props
div props
Fixed thread header region.
...props
h2 props
Primary thread title. Truncates within the header.
...props
span props
Secondary title metadata, such as the parent channel name.
...props
div props
Action cluster for header or search controls.
...props
div props
Thread surface below the header, including search, messages, and composer slots.
...props
div props
Right-aligned cluster for match count and PanelAction controls. Stays flush to the row end when the input is narrower than the row.
...props
div props
Match-count label in the trailing cluster, formatted as a/b.
...props
div props
Original message region above the scroll body. Place a MessageItem inside it.
...props
div props
Aligns the reply notice and count with the thread panel content gutter.
...props
div props
Labels the reply count above the message list.
...props
div props
Scrollable message body.
...props
div props
Day-boundary marker in the message list.
...props
div props
Inline notice in the message list.
...props
mark props
Inline matched-text part that also applies the search-result surface to its containing MessageItem.