Chip
M3 칩 시스템 — assist·filter·input·suggestion 4변형의 인터랙션 칩. 단순 라벨/제거 칩 Tag와 별개의 컴포넌트입니다(ADR-012 Track C).
마지막 업데이트 2026-06-12
한눈에#
assist·filter·input·suggestion 4변형의 상호작용 칩 체계(M3)입니다 — 변형마다 인터랙션 종류가 다릅니다.
- assist·filter·input·suggestion
- 판별 합집합 타입
- 2 크기(md·sm)
- sm 44px 히트
단순 라벨/제거 칩은 Tag — Chip은 액션·토글·제거·제안의 상호작용 체계입니다
사용 시점#
칩에 상호작용(액션·토글·제거·제안)이 있으면 Chip — 단순 라벨이나 단일 선택 필터 줄은 다른 컴포넌트입니다.
assist/suggestion 액션·filter 토글·input 제거처럼 상호작용이 있는 M3 칩
플레이그라운드#
컨트롤로 props를 조작하면 미리보기와 코드가 실시간 갱신됩니다.
import { Chip } from '@wds/ui-web';
<Chip>필터</Chip>변형#
variant가 인터랙션 종류를 가릅니다.
- assist / suggestion:
<button>+onClick. 작은 액션 버튼처럼 동작합니다(suggestion은 더 가벼운 아웃라인). - filter:
aria-pressed토글 — 제어selected또는 비제어defaultSelected+onChange(boolean), 선택 시 선행 체크 + primary 채움. - input: 라벨 + 제거
<button>(aria-label, 기본 '제거') +onRemove. 칩 자체는 비-버튼입니다.
크기#
size로 2단 — md(기본)·sm.
상태#
filter는 비제어(defaultSelected)와 제어(selected)를 모두 지원합니다 —
defaultSelected로 시작하면 컴포넌트가 선택 상태를 소유하고, selected를 주면 그 값이
진실의 원천이라 클릭은 onChange로만 통지합니다(소비자가 selected를 갱신해야 반영).
disabled는 4변형 모두에서 상호작용을 차단합니다. Hover/Focus/Disabled는 CSS
의사클래스로 표현됩니다.
sm 인터랙티브 칩(assist·suggestion·filter 버튼, input 제거 버튼)은 시각 크기를
유지하면서 ::after로 히트 영역을 ≥44px까지 확장합니다(터치 타깃).
Props#
| Prop | 타입 | 기본값 | 설명 |
|---|---|---|---|
variant | 'assist' | 'filter' | 'input' | 'suggestion' | — | 인터랙션 종류 — 필수 |
children | ReactNode | — | 라벨 콘텐츠 |
leadingIcon | ReactNode | — | 라벨 앞 선행 아이콘 (filter 선택 시 체크로 대체) |
size | 'sm' | 'md' | 'md' | 칩 크기 |
disabled | boolean | false | 상호작용 차단 |
onClick | () => void | — | assist·suggestion 액션 콜백 |
selected | boolean | — | filter 제어 선택 — 주면 selected가 권위(onChange로만 통지) |
defaultSelected | boolean | false | filter 초기 선택(비제어) |
onChange | (selected: boolean) => void | — | filter 토글 콜백 |
onRemove | () => void | — | input 제거 콜백 |
removeLabel | string | '제거' | input 제거 버튼 aria-label |
variant별로 허용되는 prop이 타입(판별 합집합)으로 강제됩니다 — 예: filter에 onRemove를
넘기면 컴파일 오류입니다.
접근성#
| 변형 | 계약 |
|---|---|
| assist / suggestion | <button> — 네이티브 클릭·키보드(Space/Enter) |
| filter | <button aria-pressed> 토글 — 선택 상태를 보조기술에 보고, 선행 체크는 장식(aria-hidden) |
| input | 칩은 비-버튼, 제거 <button>이 aria-label(기본 '제거')을 가지는 단일 액션 |
| 공통 | :focus-visible 2px primary 아웃라인 · disabled 차단 · 등장 전환은 prefers-reduced-motion 존중 |
토큰#
component 토큰 없이 semantic을 직접 소비합니다(신설 기준 §4 미충족).
| 속성 | 토큰 |
|---|---|
| 칩 | color.surface · color.border(hover surface-hover) · radius.full |
| filter 선택 | color.primary-subtle 배경 · color.primary-text · 체크 |
눌림(:active) | color.surface-pressed — 액션 칩·제거 버튼 (filter 선택은 유지) |
| 크기 | control.height-md / 축소 · font.size-body-2 |
| sm 히트 영역 | 액션 칩 space.3(12px) 블록축 확장 · input 제거 버튼 space.3 → ≥44px 터치 |
| 포커스 | color.focus-ring 2px 아웃라인 |
| 모션 | duration.fast + ease.standard |