hiip/ui
14 items

Components / Chat

Message Scroller

A bottom-anchored message list with a jump-to-latest button.

Message 1
Message 2
Message 3
Message 4
Message 5
Message 6
Message 7
Message 8
Message 9
Message 10
Message 11
Message 12
Message 13
Message 14
demos.tsx
import {
  Message,
  MessageBubble,
  MessageBubbleContent,
} from "@/components/ui/hiip-ui/message";
import {
  MessageScroller,
  MessageScrollerButton,
  MessageScrollerContent,
  MessageScrollerItem,
  MessageScrollerProvider,
  MessageScrollerViewport,
} from "@/components/ui/hiip-ui/message-scroller";

const MESSAGE_SCROLLER_ROWS = Array.from(
  { length: 14 },
  (_, i) => `Message ${i + 1}`,
);

function MessageScrollerDemo() {
  return (
    <div className="h-64 w-full max-w-sm rounded-lg border">
      <MessageScrollerProvider>
        <MessageScroller>
          <MessageScrollerViewport className="p-3">
            <MessageScrollerContent className="gap-2">
              {MESSAGE_SCROLLER_ROWS.map((row, i) => (
                <MessageScrollerItem
                  key={row}
                  scrollAnchor={i === MESSAGE_SCROLLER_ROWS.length - 1}
                >
                  <Message
                    variant={i % 3 === 0 ? "sent" : "received"}
                    align={i % 3 === 0 ? "end" : "start"}
                  >
                    <MessageBubble>
                      <MessageBubbleContent>{row}</MessageBubbleContent>
                    </MessageBubble>
                  </Message>
                </MessageScrollerItem>
              ))}
            </MessageScrollerContent>
          </MessageScrollerViewport>
          <MessageScrollerButton />
        </MessageScroller>
      </MessageScrollerProvider>
    </div>
  );
}

Install — needs @hiip registered in components.json

bunx shadcn@latest add @hiip/message-scroller

Or by URL, with the token in the query

bunx shadcn@latest add "https://ui.hiip.ai/r/message-scroller.json?token=$HIIP_REGISTRY_TOKEN"

Both need a token — set one up.

Anatomy

Import from components/ui/hiip-ui/message-scroller.

<MessageScrollerProvider>
  <MessageScroller>
    <MessageScrollerViewport>
      <MessageScrollerContent>
        <MessageScrollerItem />
      </MessageScrollerContent>
    </MessageScrollerViewport>
    <MessageScrollerButton direction="end" />
  </MessageScroller>
</MessageScrollerProvider>

API Reference

Generated from the source. Props forwarded to the underlying element are not listed.

MessageScrollerProvider

No props of its own.

MessageScroller

No props of its own.

MessageScrollerViewport

No props of its own.

MessageScrollerContent

No props of its own.

MessageScrollerItem

No props of its own.

MessageScrollerButton

PropTypeDefault
size"default" | "sm" | "xs" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined"icon-sm"
variant"link" | "default" | "outline" | "secondary" | "ghost" | "destructive" | null | undefined"secondary"
Type
registry:ui
Pulls in
buttonshadcn installs these for you if they are missing.
npm packages
@shadcn/react @hugeicons/react @hugeicons/core-free-icons
Files written
  • components/ui/hiip-ui/message-scroller.tsx