Skip to content

Message Scroller ​

A scrollable message list that keeps itself pinned to the newest item, with a jump-to-end button.

Code ​

vue
<script setup lang="ts">
import { ref } from 'vue'
import { MessageScroller, MessageScrollerProvider, MessageScrollerViewport, MessageScrollerContent, MessageScrollerItem, MessageScrollerButton } from '@jaltech/vuejs-ui/message-scroller'

const messages = ref(
  Array.from({ length: 12 }, (_, i) => ({ id: String(i + 1), text: `Message ${i + 1}` }))
)
</script>

<template>
  <MessageScrollerProvider :auto-scroll="true">
    <MessageScroller class="h-64 rounded-md border">
      <MessageScrollerViewport class="p-4">
        <MessageScrollerContent>
          <MessageScrollerItem v-for="m in messages" :key="m.id" :message-id="m.id">
            <div>{{ m.text }}</div>
          </MessageScrollerItem>
        </MessageScrollerContent>
      </MessageScrollerViewport>
      <MessageScrollerButton direction="end" />
    </MessageScroller>
  </MessageScrollerProvider>
</template>

Built on shadcn-vue, Reka UI and Tailwind CSS. @jaltech/vuejs-ui is a layer of complete components on top of shadcn-vue, not a replacement for it.