QuickReply
QuickReply displays suggested reply chips in chat UIs and AI assistants — users tap once to send a response, keeping conversations flowing.
Playground
<QuickReply aria-label="Quick replies">
<QuickReplyItem>About payment</QuickReplyItem>
<QuickReplyItem>Shipping info</QuickReplyItem>
<QuickReplyItem>Return policy</QuickReplyItem>
<QuickReplyItem>Contact us</QuickReplyItem>
<QuickReplyItem>Track order</QuickReplyItem>
</QuickReply>Variants
Sizes
smdefaultlg| Size | Height | Font | H-Padding | Gap | Preview |
|---|---|---|---|---|---|
sm | 28px | 12px | 10px | 6px | |
default | 32px | 13px | 12px | 6px | |
lg | 36px | 14px | 14px | 6px |
Features
Layout
Two layout modes: scroll (horizontal overflow) for chat UIs, and wrap (multi-row) for FAQ lists and topic chips.
scroll
wrap
{/* scroll */}
<QuickReply layout="scroll" aria-label="Quick replies">
<QuickReplyItem>About payment</QuickReplyItem>
<QuickReplyItem>Shipping info</QuickReplyItem>
<QuickReplyItem>Return policy</QuickReplyItem>
<QuickReplyItem>Contact us</QuickReplyItem>
<QuickReplyItem>Track order</QuickReplyItem>
</QuickReply>
{/* wrap */}
<QuickReply layout="wrap" aria-label="Quick replies">
<QuickReplyItem>About payment</QuickReplyItem>
<QuickReplyItem>Shipping info</QuickReplyItem>
<QuickReplyItem>Return policy</QuickReplyItem>
<QuickReplyItem>Contact us</QuickReplyItem>
<QuickReplyItem>Track order</QuickReplyItem>
</QuickReply>Color
Two color themes — default for neutral contexts, primary to highlight brand-colored actions.
<QuickReply color="default" aria-label="Quick replies">
<QuickReplyItem>Payment</QuickReplyItem>
</QuickReply>
<QuickReply color="primary" aria-label="Quick replies">
<QuickReplyItem>Payment</QuickReplyItem>
</QuickReply>Icon
Add a leading icon to any item via the icon prop. Accepts any ReactNode, including lucide-react icons.
import { QuickReply, QuickReplyItem } from '@7onic-ui/react'
import { CreditCard, Truck, RotateCcw } from 'lucide-react'
<QuickReply aria-label="Quick replies">
<QuickReplyItem
icon={<CreditCard />}
>
About payment
</QuickReplyItem>
<QuickReplyItem
icon={<Truck />}
>
Shipping info
</QuickReplyItem>
<QuickReplyItem
icon={<RotateCcw />}
>
Return policy
</QuickReplyItem>
</QuickReply>Disabled
Disable individual chips with the disabled prop to visually indicate unavailable options.
<QuickReply aria-label="Quick replies">
<QuickReplyItem>Payment</QuickReplyItem>
<QuickReplyItem disabled>Shipping</QuickReplyItem>
<QuickReplyItem>Returns</QuickReplyItem>
</QuickReply>API
Component Structure
QuickReply— Compound · Pure ReactQuickReplyGroup container — propagates layout and style to children via ContextQuickReplyItemIndividual chip button — clickableMulti-part component. Composed of QuickReply (Root) and QuickReplyItem (individual chips).
Props
QuickReply
layout"scroll""scroll" | "wrap"Chip layout — scroll: horizontal overflow, wrap: multi-row
variant"outline""outline" | "filled" | "ghost"Visual style — outline: bordered, filled: background, ghost: minimal
color"default""default" | "primary"Color theme — default: neutral, primary: brand color
size"default""sm" | "default" | "lg"Chip size
radius"full""md" | "lg" | "full"Border radius — md: 6px, lg: 8px, full: pill
gap"default""sm" | "default" | "lg"Spacing between chips
aria-labelundefinedstringAccessible label for the group
classNameundefinedstringAdditional CSS classes
| Name | Type | Default | Description |
|---|---|---|---|
layout | "scroll" | "wrap" | "scroll" | Chip layout — scroll: horizontal overflow, wrap: multi-row |
variant | "outline" | "filled" | "ghost" | "outline" | Visual style — outline: bordered, filled: background, ghost: minimal |
color | "default" | "primary" | "default" | Color theme — default: neutral, primary: brand color |
size | "sm" | "default" | "lg" | "default" | Chip size |
radius | "md" | "lg" | "full" | "full" | Border radius — md: 6px, lg: 8px, full: pill |
gap | "sm" | "default" | "lg" | "default" | Spacing between chips |
aria-label | string | undefined | Accessible label for the group |
className | string | undefined | Additional CSS classes |
QuickReplyItem
iconundefinedReactNodeLeading icon for the chip (any ReactNode)
asChildfalsebooleanCompose with a custom element (Radix Slot)
disabledfalsebooleanDisable the chip
onClickundefined() => voidClick callback
classNameundefinedstringAdditional CSS classes
| Name | Type | Default | Description |
|---|---|---|---|
icon | ReactNode | undefined | Leading icon for the chip (any ReactNode) |
asChild | boolean | false | Compose with a custom element (Radix Slot) |
disabled | boolean | false | Disable the chip |
onClick | () => void | undefined | Click callback |
className | string | undefined | Additional CSS classes |
Anatomy
Best Practices
Recommended
- ✓Offer reply shortcuts in chat UIs to reduce typing
- ✓Set aria-label to identify the group's purpose
- ✓Limit to 3–7 chips for scannable choices
Don't
- ✗Don't show more than 10 chips
- ✗Don't use only generic labels like "Yes" / "No"
- ✗Don't use as a navigation menu — conversational UI only
Accessibility
Keyboard
ARIA / WCAG
- role="group" + aria-label communicates the group's purpose
- Each item is a button element — screen readers announce role correctly
- Disabled state is both visual and semantic (pointer-events-none + opacity-50)