데이터 테이블
선택, 정렬, 필터, 열 설정, 페이지네이션을 연결합니다.
미리보기
로컬 미리보기입니다. 실제 계정, 환경, 실행 데이터에는 영향을 주지 않습니다.
1–3 / 9 리소스. 헤더 선택은 이 페이지의 관리 가능한 행에만 적용됩니다.
사용법
- 비교 작업에 Table, FilterBar, Checkbox, Menu, Pagination을 조합하세요. 표는 Table 가이드라인을 따릅니다.
- 데이터를 필터 → 안정 정렬 → 페이지네이션 순서로 처리하세요. 검색, 정렬, 페이지 크기를 바꾸면 첫 페이지로 돌아갑니다.
- Table.SortHeader로 정렬하세요. 텍스트는 오름차순, 숫자는 내림차순이 먼저이며, 상태 줄이 바뀐 순서를 알립니다.
- useTableSelection으로 선택을 행 ID로 유지하세요. 헤더 checkbox는 현재 페이지의 관리 가능한 행만 선택합니다.
- 모든 상태에서 헤더와 열 너비를 유지하세요. 로딩 중에는 aria-busy와 함께 페이지 크기만큼 skeleton 행을 보여 주고, 오류·접근 권한 없음·빈 결과는 Table.Message 행에 둡니다.
- 현재 페이지 밖에 있는 선택 수를 알리세요. 일괄 액션은 숨겨진 선택을 포함한 명시적 선택 집합에 적용됩니다.
- Columns 메뉴는 필수 name 열을 항상 유지합니다. 정렬된 열을 숨기면 정렬이 name 오름차순으로 재설정됩니다.
- 전체 테이블을 ARIA grid로 만들지 마세요. 네이티브 테이블 의미를 유지하세요.
- 전체 행 클릭에 내비게이션을 숨기지 마세요. Checkbox, name 링크, 정렬 버튼은 각자 독립적으로 작동합니다.
- 보이지 않는 서버 결과를 자동 선택하지 마세요.
- 가상화나 서버 전체 선택을 가정하지 마세요. 둘 다 구현되지 않았으며 예시는 작은 로컬 데이터만 다룹니다.
- 큰 데이터셋을 로컬에서 필터링, 정렬, 페이지네이션하지 마세요. 서버 측 필터링, 정렬, 페이지네이션과 URL 상태, 요청 취소, 권한, 멱등 일괄 변경, 선택 검증은 제품이 소유합니다.
구성
Preview mode → FilterBar(query, product, reset, result summary) → bulk actions + Columns menu → Table.Container(caption, fixed column widths, SortHeader columns, page selection, row headers with native links, numeric instances, state; skeleton or Message rows) → page size + Pagination → status line
키보드와 접근성
- Tab, Shift+Tab, Enter, Space는 컨트롤을 작동시킵니다. 각 정렬 컨트롤은 헤더 셀 안의 버튼입니다.
- 검색과 페이지 변경은 사용 중인 컨트롤에 포커스를 유지합니다. 로딩이 끝나거나, 재시도, 복원된 접근, 지워진 검색 후에는 검색 입력으로 포커스가 돌아갑니다.
- Columns 메뉴는 Base UI의 화살표 키와 Escape를 따르며, 트리거로 포커스를 돌려보냅니다.
- 모바일에서는 공유 ScrollArea가 가로 오버플로를 처리합니다.
- 테이블은 scope=col과 scope=row로 네이티브 의미를 유지합니다. 정렬된 열만 aria-sort를 가지며, 표에 행이 없는 동안 정렬 버튼은 비활성화됩니다.
각 컨트롤에 목적을 설명하는 이름을 지정하세요. 오류 메시지를 해당 컨트롤에 연결하고, 상태를 색만으로 알리지 마세요. 자동 검사는 수동 키보드 및 보조 기술 테스트를 대신하지 않습니다.
예시 코드
공유 컴포넌트는 디자인 토큰에서 스타일을 가져옵니다. 각 예시는 자체 구성과 접근성 속성을 설정합니다. 호출하는 화면이 콜백, ref, 제품 데이터를 정의합니다.
주요 API
표는 공통 래퍼의 주요 props를 나열합니다. 전체 타입은 패키지 타입 선언을 참조하세요.