Skip to content
Twentyfirst UIPro

Chat Launcher

Overlays · AnnouncementBar, ChatLauncher, ChatMessage, Composer, CookieConsent, PromptStarters

View as Markdown

Site-wide chrome for customer-facing apps: ChatLauncher (floating assistant with page context), CookieConsent and AnnouncementBar.

ChatLauncher: title, context (what the assistant is looking at), tint, open / onOpenChange, unread, headerAction, children (the thread), composer, inline (for previews; fixed bottom-right by default). CookieConsent: title, text, policy (link), categories ({id, label, text, required, default}), onSave(choices), open, inline. "Accept all" and "Only necessary" carry equal weight. AnnouncementBar: children, tint, icon, action, onDismiss (false hides the close button).

Free plan: 3 stagings left this month.See plans

Props

AnnouncementBar

PropTypeNotes
childrenReactNodeRequired
tint?Tint
icon?IconName | false
action?ReactNode
onDismiss?(() => void) | false
className?stringExtra class on the root element.
style?CSSPropertiesInline style on the root element.

ChatLauncher

PropTypeNotes
title?string
context?ReactNode
tint?Tint
open?boolean
onOpenChange?(open: boolean) => void
unread?number
headerAction?ReactNode
children?ReactNode
composer?ReactNode
inline?boolean
className?stringExtra class on the root element.
style?CSSPropertiesInline style on the root element.

ChatMessage

PropTypeNotes
role"user" | "assistant" | "system"Required
name?string
time?string
model?string
text?string
streaming?boolean
tint?Tint
sources?Source[]
attachments?{ name: string; size?: string; kind?: string }[]
usage?string
onRetry?() => void
onFeedback?(v: "up" | "down") => void
actions?boolean
before?ReactNode
after?ReactNode
children?ReactNode
feedback?"up" | "down" | null
className?stringExtra class on the root element.
style?CSSPropertiesInline style on the root element.

Composer

PropTypeNotes
value?string
onChange?(v: string) => void
onSend?(text: string, files: (File | { name: string })[]) => void
busy?boolean
onStop?() => void
placeholder?string
label?string
models?ModelOption[]
model?string
onModel?(id: string) => void
commands?ComposerCommand[]
onCommand?(c: ComposerCommand) => void
attachments?(File | { name: string })[]
onAttach?(files: FileList) => void
onRemoveAttachment?(i: number) => void
hint?string
left?ReactNode
disabled?boolean
className?stringExtra class on the root element.
style?CSSPropertiesInline style on the root element.

CookieConsent

PropTypeNotes
title?string
text?ReactNode
policy?ReactNode
categories?{ id: string; label: string; /** What the category covers; may hold a link to the details. */ text?: ReactNode; required?: boolean; default?: boolean; }[]
onSave?(choices: Record<string, boolean>) => void
open?boolean
inline?boolean
equalChoice?boolean"Only necessary" and "Accept all" with the same weight (both secondary buttons), as German data protection authorities expect on the first layer.
id?stringId of the banner (its text is referenced by `aria-describedby`).
className?stringExtra class on the root element.
style?CSSPropertiesInline style on the root element.

PromptStarters

PropTypeNotes
items{ icon?: IconName; tint?: Tint; title: string; text?: string; prompt?: string }[]Required
onPick?(prompt: string) => void
className?stringExtra class on the root element.
style?CSSPropertiesInline style on the root element.