ScopeCapsule
상단 가운데 캡슐에서 보기 범위를 고름.
- 출시 화면에서 사용
개요
미리보기
예시
상태
닫힘
열림
범위 바뀜
가장 긴 문구 (es)
이렇게 · 이렇게 하지 않기
- 이렇게 캡슐 글자는 지금 보고 있는 범위를 그대로 말한다(“모든 출처 · 지난 30일”).
- 이렇게 하지 않기 범위를 바꿔도 읽지 않은 기간이 “기록 없음”처럼 보이지 않게 한다.
- 이렇게 열면 Popover 안으로 초점이 옮겨간다(선택된 radio).
- 이렇게 하지 않기 role=menu로 만들지 않는다. 범위 고르기는 선택이다.
토큰과 속성
| 이름 | 타입 | 기본값 | 설명 |
|---|---|---|---|
options | readonly { value, label, description? }[] | — | 범위 선택지(2–6개). 미리보기는 출처 4개. |
value? | string | all | 처음 값 / 바깥에서 바뀐 값(all · mail · calendar · docs). 사용자 선택은 onValueChange로 알린다. |
label? | string | | 패널 안 fieldset의 legend. 비우면 “보기 범위”. |
open? | boolean | false | 패널을 연다. 카탈로그 프리셋은 무대 안에 정적으로 그린다. |
onValueChange?: (value) => void | — | — | radio를 바꾸면 즉시 호출(즉시 적용). URL ?scope=는 replaceState로 소비자가 쓴다. |
onOpenChange?: (open) => void | — | — | 열기·닫기(Enter, Esc, 바깥 클릭) 때 호출. |
popover="auto" | — | — | 패널은 네이티브 popover(top layer, 바깥 클릭으로 닫힘). 포털 없음. |
| 그 밖의 속성 | — | — | id, data-* 등 네이티브 div 속성은 바깥 래퍼로 간다. ref는 트리거 <button>. className·style·children은 받지 않는다. |
접근성
키보드: 트리거 Enter·Space → 열고 선택된 radio에 초점 · 화살표로 선택(즉시 적용) · Enter·Esc로 닫고 트리거로 복귀.
- 트리거는 aria-haspopup="dialog", aria-expanded, aria-controls. 라벨 = 현재 범위.
- 범위를 바꾸면 결과 수는 목록 쪽이 알린다(500ms 뒤 한 번).
- 패널: opacity + 4px, base. 동작 줄이기면 opacity만. 좁은 화면에서는 전체 폭.