Chat
Create a custom chat feed or AI prompt interface.
Jane
Yesterday @ 2:30pmLorem, ipsum dolor sit amet consectetur adipisicing elit. Provident blanditiis quidem dolorum ab similique. Voluptatibus quibusdam unde mollitia corrupti assumenda libero. Quibusdam culpa illum unde asperiores accusantium! Unde, cupiditate tenetur.
Michael
Yesterday @ 2:45pmLorem, ipsum dolor sit amet consectetur adipisicing elit. Provident blanditiis quidem dolorum ab similique. Voluptatibus quibusdam unde mollitia corrupti assumenda libero. Quibusdam culpa illum unde asperiores accusantium! Unde, cupiditate tenetur.
Jane
Yesterday @ 2:50pmLorem, ipsum dolor sit amet consectetur adipisicing elit. Provident blanditiis quidem dolorum ab similique. Voluptatibus quibusdam unde mollitia corrupti assumenda libero. Quibusdam culpa illum unde asperiores accusantium! Unde, cupiditate tenetur.
Michael
Yesterday @ 2:52pmLorem, ipsum dolor sit amet consectetur adipisicing elit. Provident blanditiis quidem dolorum ab similique. Voluptatibus quibusdam unde mollitia corrupti assumenda libero. Quibusdam culpa illum unde asperiores accusantium! Unde, cupiditate tenetur.
Layout Columns
Use Tailwindβs grid column utility classes to define horizontal columns for your layout.
Layout Rows
Use Tailwindβs grid row utility classes to define vertical layout rows for your layout.
(feed)
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Reprehenderit dolor ullam, qui et itaque quam distinctio dicta nostrum veritatis harum iure hic sequi aperiam, explicabo earum totam deserunt. Fugiat, temporibus.
Message Feed
The feed simply loops through the available feed data. Each <pre>
tag represents a single bubble element.
{ "role": "host", "id": 0, "host": true, "avatar": 48, "name": "Jane", "timestamp": "Yesterday @ 2:30pm", "message": "Some message text.", "color": "variant-soft-primary" }
{ "role": "guest", "id": 1, "host": false, "avatar": 14, "name": "Michael", "timestamp": "Yesterday @ 2:45pm", "message": "Some message text.", "color": "variant-soft-primary" }
Message Bubbles
Provide styling to each bubble element.
Jane
Yesterday @ 2:30pmSome message text.
Michael
Yesterday @ 2:45pmSome message text.
Prompt
Use Skeletonβs input group styles to create a custom text prompt.
Scroll to Bottom
Bind your scrollable feed panel element reference (Svelte | React), then use scrollTo to scroll the panel to the bottom on demand. Scroll behavior can be set via behavior: 'smooth'
.
function scrollChatBottom(behavior?: 'auto' | 'instant' | 'smooth' = 'smooth') { // `elemChat` represents our scrollable panel element elemChat.scrollTo({ top: elemChat.scrollHeight, behavior });}
Add a Message
Below weβll cover how to append the message feed with a new message from the host user. Per our above examples, weβll use the same messageFeed
data structure.
let messageFeed = [ /* ...*/];
Then bind to the textarea for your prompt in order to capture any message typed by the user.
tsx let elemPrompt: HTMLElement = useRef();
<textarea ref={elemPrompt} ... />
Hereβs an example of how we might append a new message to the messageFeed
array.
function addMessage(): void { const newMessage = { id: messageFeed.length, host: true, avatar: 48, name: 'Jane', timestamp: new date(), message: elemPrompt.value, color: 'preset-tonal-primary', }; // Append the new message to the message feed messageFeed = [...messageFeed, newMessage]; // Clear the textarea message elemPrompt.value = ''; // Smoothly scroll to the bottom of the feed setTimeout(() => { scrollChatBottom('smooth'); }, 0);}
This can be triggered when the promptβs SEND button is clicked.
<button ... onclick={addMessage}>Send</button>