Table
정렬된 행과 열로 정보를 비교합니다.
미리보기
로컬 미리보기입니다. 실제 계정, 환경, 실행 데이터에는 영향을 주지 않습니다.
0개 선택됨.
사용법
행과 열의 관계를 비교하세요. 네이티브 테이블을 렌더링합니다: Caption, scope=col 또는 scope=row의 HeaderCell, Cell. 라벨이 있는 스크롤 영역인 Container로 감쌉니다. 숫자 열에는 numeric을, 정렬할 수 있는 열에는 SortHeader를 쓰고, 포인터로 훑어보는 콘솔에는 density="compact"를 설정하세요. 정렬, 검색, 선택 상태는 호출하는 화면이 소유하며, useTableSelection이 행 ID로 선택을 기억합니다. 규칙마다 동작하는 시안은 아래 가이드라인에 있습니다. 행이 바뀌어도 열이 움직이지 않게 하려면 layout="fixed"와 Column 너비를, 콘솔처럼 한 줄짜리 행에는 nowrap과 긴 이름용 Truncate를, Container가 좁아질 때 비켜도 되는 열에는 hideBelow를 쓰세요.
- 일반 테이블에 grid role이나 화살표 키 셀 내비게이션을 추가하지 마세요. 대신 네이티브 테이블 의미를 유지하세요.
- 전체 행 클릭에 의존하지 마세요. 대신 셀 안에 링크, 버튼, checkbox를 두세요.
- Row.selected만 믿지 마세요. 시각적일 뿐입니다. 선택 의미를 담는 이름 있는 checkbox와 함께 쓰세요.
- 모든 셀에 단위를 쓰지 마세요. 대신 헤더에 단위를 적고 numeric을 설정하세요.
크기: SizeProvider size="small" 포털까지 포함해 구성 전체의 크기를 바꿉니다. 기본 크기는 Default입니다. 크기 안내 및 비교
구성
Container(ScrollArea) → Root(table, density, layout, stickyHeader) → Caption + Columns(Column)? + Head(Row/HeaderCell or SortHeader) + Body(Row/Cell, Truncate, or Message)
가이드라인
실제 화면에 적용하는 규칙과, 규칙마다 동작하는 시안입니다. 시안은 배포되는 부품을 사용하며 로컬에서만 동작합니다.
플랫폼 콘솔의 표, 즉 서비스 인벤토리, 사용량, 배포, 감사 기록에 적용하는 규칙입니다. 모든 미리보기는 배포되는 Table 부품을 그대로 사용합니다.
표 선택
- 서비스, 배포, 감사 기록처럼 많은 레코드의 같은 속성을 비교할 때 Table을 사용하세요.
- 레코드를 하나씩 읽고 속성이 세 개 이하이면 List를 사용하세요.
- 레코드 하나의 속성은 설명 목록으로 보여 주세요.
- 셀을 그 자리에서 편집하지 마세요. 대신 각 행을 상세 페이지로 연결하거나 대화상자에서 폼을 여세요.
밀도
- 텍스트, 컨트롤, 상태가 섞인 행과 터치 화면에서는 기본 밀도를 사용하세요.
- 포인터로 수십 개 행을 훑어보는 콘솔에서는 density="compact"를 사용하세요. 셀 여백이 4px, 행 사이가 2px로 줄어듭니다.
- 촘촘한 행에는 작은 크기의 컨트롤을 넣어 모든 행의 높이를 같게 유지하세요.
정렬과 숫자
- 텍스트, 상태, 링크는 시작 쪽에 맞추세요.
- 숫자 열과 그 헤더에 numeric을 설정하세요. 끝 쪽에 맞추고 고정폭 숫자를 써서 자릿수가 세로로 맞습니다.
- 단위는 메모리 (GiB)처럼 헤더에 쓰고 셀에서는 빼세요.
- 한 열의 소수 자릿수는 하나로 맞추고, 숫자는 읽는 사람의 로캘로 표시하세요.
- 가운데 정렬은 아이콘이나 체크박스 하나만 있는 열에만 사용하세요.
정렬
- 이름, 날짜, 숫자, 심각도처럼 순서가 판단에 도움이 되는 열을 정렬할 수 있게 하세요.
- SortHeader를 사용하세요. 정렬할 수 있는 모든 열에 아이콘이 보이고, 정렬 중인 열에만 aria-sort가 붙습니다.
- 텍스트는 오름차순부터, 숫자와 날짜는 내림차순부터 정렬해 가장 크거나 최신인 항목이 먼저 오게 하세요. 한 번 더 누르면 순서가 뒤집힙니다.
- 값이 같은 행은 고정된 ID로 순서를 정해, 같은 행끼리 자리가 바뀌지 않게 하세요.
- 바뀐 순서는 polite 상태 줄로 알리세요.
p95 지연 시간 (ms) 기준 내림차순으로 정렬했습니다.
긴 값
- 이름과 설명 문장은 줄바꿈되게 두세요.
- 식별자, 이미지 참조, 경로는 Truncate로 한 줄로 줄이세요. 전체 값은 접근 가능한 이름과 title에 남습니다.
- 줄인 식별자에는 복사 동작을 붙여 다시 입력할 일이 없게 하세요.
- 숫자와 상태는 줄이지 마세요. 대신 단위를 짧게 쓰거나 열을 빼세요.
선택과 일괄 작업
- 체크박스는 첫 열에 두고 행 이름을 붙이세요: "checkout-api 선택".
- 헤더 체크박스는 이 페이지에서 선택할 수 있는 행만 선택합니다. 일부만 선택되면 대시를 표시합니다.
- 선택은 ID로 기억해 페이지, 정렬, 필터가 바뀌어도 유지하고, 선택한 행 중 몇 개가 다른 페이지에 있는지 알려 주세요.
- 일괄 작업은 선택 개수와 함께 보여 주세요. 선택한 행이 없으면 비활성화하세요.
- 바꿀 수 없는 행은 비활성화하고, 그 이유를 행 안에 적으세요.
행 작업
- 이름을 상세 페이지로 가는 행의 링크로 만드세요. 행 전체를 클릭할 수 있게 만들지 마세요.
- 행에는 작업을 하나까지만 보여 주세요. 나머지는 행 이름을 붙인 메뉴에 넣으세요: "checkout-api 작업".
- 작업 열은 끝 쪽에 맞추세요.
- 삭제처럼 되돌릴 수 없는 작업은 확인을 받고, 확인 화면에 대상 이름을 적으세요.
로딩, 빈 상태, 오류
- 로딩 중에도 헤더와 열 너비를 유지하세요. 페이지 크기만큼 스켈레톤 행을 보여 주고, 표에 aria-busy를 설정하세요.
- 결과 없음과 데이터 없음을 구분하세요. 앞의 경우에는 필터 지우기를, 뒤의 경우에는 생성 작업을 제시하세요.
- 오류는 그 자리에서 다시 시도와 함께 보여 주고, 필터와 선택은 유지하세요.
- 각 메시지는 Message에 넣어 모든 열에 걸치고 hover 강조가 생기지 않게 하세요.
스크롤
- 기본적으로는 페이지가 스크롤되게 두세요.
- 표 옆의 다른 내용이 계속 보여야 할 때만 높이를 제한하세요. 그때 stickyHeader를 설정하고 Container에 orientation="both"를 주세요.
- 스크롤 영역에는 Container의 label로 이름을 붙이세요.
- 좁은 화면에서는 표가 자기 영역 안에서 가로로 스크롤됩니다. 이름 열을 첫 열로 유지하고, 행이 화면보다 넓으면 stickyColumn을 설정하세요.
- 열을 묶을 때는 그룹 헤더 줄을 따로 두세요. 그룹 셀은 colSpan으로 자기 열을 덮고, 그룹 밖의 열은 rowSpan으로 두 줄을 차지합니다. 고정 헤더는 두 줄을 모두 각자 자리에 고정합니다.
키보드와 접근성
Tab은 정렬 버튼, 행 선택 checkbox, 액션을 순서대로 이동합니다. 행은 포커스 대상이 아닙니다. 작은 화면에서는 라벨이 있는 영역이 포커스를 받고 가로로 스크롤됩니다. SortHeader는 정렬 중인 열에만 aria-sort를 설정하고, 버튼은 열에 보이는 이름을 그대로 씁니다.
각 컨트롤에 목적을 설명하는 이름을 지정하세요. 오류 메시지를 해당 컨트롤에 연결하고, 상태를 색만으로 알리지 마세요. 자동 검사는 수동 키보드 및 보조 기술 테스트를 대신하지 않습니다.
예시 코드
공유 컴포넌트는 디자인 토큰에서 스타일을 가져옵니다. 각 예시는 자체 구성과 접근성 속성을 설정합니다. 호출하는 화면이 콜백, ref, 제품 데이터를 정의합니다.
주요 API
표는 공통 래퍼의 주요 props를 나열합니다. 전체 타입은 패키지 타입 선언을 참조하세요.