QuickReply
QuickReply는 채팅 UI와 AI 어시스턴트에서 미리 정의된 답변 후보를 칩 형태로 표시하는 컴포넌트입니다. 사용자는 한 번의 탭으로 답변을 전송하여 대화를 자연스럽게 이어갈 수 있습니다.
3
Variants
3
Sizes
2
Layouts
Pure
React
Playground
Preview
outlinescrolldefault
Variant
Layout
Size
Radius
Color
Gap
Options
<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
Outline
보더가 있는 기본 스타일로 대부분의 UI에 자연스럽게 어울립니다
Default
Filled
배경색이 채워진 스타일로 강조가 필요한 선택지에 적합합니다
Emphasis
Ghost
보더와 배경이 없는 최소한의 스타일로 컴팩트한 레이아웃에 최적입니다
Minimal
Sizes
smHeight28px
Font12px
Padding10px
Gap6px
defaultHeight32px
Font13px
Padding12px
Gap6px
lgHeight36px
Font14px
Padding14px
Gap6px
| Size | 높이 | 폰트 | 좌우 패딩 | Gap | 미리보기 |
|---|---|---|---|---|---|
sm | 28px | 12px | 10px | 6px | |
default | 32px | 13px | 12px | 6px | |
lg | 36px | 14px | 14px | 6px |
Features
Layout
scroll(가로 스크롤)과 wrap(줄 바꿈) 두 가지 레이아웃을 제공합니다. 채팅 화면에는 scroll, FAQ 목록에는 wrap이 적합합니다.
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
default와 primary 두 가지 컬러를 제공합니다. primary는 브랜드 컬러로 중요한 액션을 강조합니다.
<QuickReply color="default" aria-label="Quick replies">
<QuickReplyItem>Payment</QuickReplyItem>
</QuickReply>
<QuickReply color="primary" aria-label="Quick replies">
<QuickReplyItem>Payment</QuickReplyItem>
</QuickReply>Icon
icon prop으로 칩 앞에 아이콘을 추가할 수 있습니다. lucide-react 등 임의의 ReactNode를 사용할 수 있습니다.
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
disabled prop으로 개별 칩을 비활성화하여 선택 불가 상태를 시각적으로 표시합니다.
<QuickReply aria-label="Quick replies">
<QuickReplyItem>Payment</QuickReplyItem>
<QuickReplyItem disabled>Shipping</QuickReplyItem>
<QuickReplyItem>Returns</QuickReplyItem>
</QuickReply>API
Component Structure
QuickReply— Compound · Pure ReactQuickReply그룹 컨테이너, Context를 통해 레이아웃과 스타일을 자식 요소에 전파QuickReplyItem개별 칩 버튼, 클릭 가능서브컴포넌트 구성으로, QuickReply(루트)와 QuickReplyItem(개별 칩)으로 구성됩니다.
Props
QuickReply
layout"scroll""scroll" | "wrap"칩 배치 방식(scroll: 가로 스크롤, wrap: 줄 바꿈)
variant"outline""outline" | "filled" | "ghost"시각 스타일(outline: 보더 있음, filled: 배경색, ghost: 최소)
color"default""default" | "primary"컬러 테마(default: 기본, primary: 브랜드 컬러)
size"default""sm" | "default" | "lg"칩 사이즈
radius"full""md" | "lg" | "full"모서리 둥글기(md: 6px, lg: 8px, full: 완전 원형)
gap"default""sm" | "default" | "lg"칩 사이의 간격
aria-labelundefinedstring그룹의 접근성 라벨
classNameundefinedstring추가 CSS 클래스
| Name | Type | Default | Description |
|---|---|---|---|
layout | "scroll" | "wrap" | "scroll" | 칩 배치 방식(scroll: 가로 스크롤, wrap: 줄 바꿈) |
variant | "outline" | "filled" | "ghost" | "outline" | 시각 스타일(outline: 보더 있음, filled: 배경색, ghost: 최소) |
color | "default" | "primary" | "default" | 컬러 테마(default: 기본, primary: 브랜드 컬러) |
size | "sm" | "default" | "lg" | "default" | 칩 사이즈 |
radius | "md" | "lg" | "full" | "full" | 모서리 둥글기(md: 6px, lg: 8px, full: 완전 원형) |
gap | "sm" | "default" | "lg" | "default" | 칩 사이의 간격 |
aria-label | string | undefined | 그룹의 접근성 라벨 |
className | string | undefined | 추가 CSS 클래스 |
QuickReplyItem
iconundefinedReactNode칩 앞에 표시할 아이콘(임의의 ReactNode)
asChildfalseboolean커스텀 요소와 합성(Radix Slot)
disabledfalseboolean칩을 비활성화합니다
onClickundefined() => void클릭 시 콜백
classNameundefinedstring추가 CSS 클래스
| Name | Type | Default | Description |
|---|---|---|---|
icon | ReactNode | undefined | 칩 앞에 표시할 아이콘(임의의 ReactNode) |
asChild | boolean | false | 커스텀 요소와 합성(Radix Slot) |
disabled | boolean | false | 칩을 비활성화합니다 |
onClick | () => void | undefined | 클릭 시 콜백 |
className | string | undefined | 추가 CSS 클래스 |
Anatomy
1
2
3
4ContactShipping
Returns
1
QuickReply
플렉스 컨테이너, role=group으로 그룹화
2
QuickReplyItem
칩 버튼(button 요소)
3
Icon (optional)
선택적 리딩 아이콘
4
Label
칩의 라벨 텍스트
Best Practices
✓
권장
- ✓채팅 UI에서 답변 후보를 제공하여 입력 부담을 줄입니다
- ✓aria-label로 그룹의 목적을 명시합니다
- ✓선택지를 3~7개로 제한합니다
✕
지양
- ✗칩을 10개 이상 나열하지 않습니다
- ✗"예"/"아니오"만 사용하지 않습니다
- ✗내비게이션 메뉴 대신 사용하지 않습니다
Accessibility
키보드 조작
Tab각 칩으로 포커스 이동
Enter / Space포커스된 칩 클릭
ARIA / WCAG
- role="group" + aria-label로 그룹의 목적을 명시합니다
- 각 아이템은 button 요소로 스크린 리더가 역할을 정확히 읽어줍니다
- disabled 상태는 시각적으로도 의미적으로도 구별됩니다(pointer-events-none + opacity-50)