Process Center 버튼 규약
프로세스센터의 액션 버튼은 모두 PortalButton(@hohyun94/portal-foundation)을 쓴다. 기준은 프로세스 관리 화면의 버튼이다. 새 화면·새 기능도 이 규약을 따른다.
액션 버튼
| 용도 | 규격 |
|---|---|
| 기본(저장·확인·추가·조회) | <PortalButton variant="primary" size="sm"> |
| 보조(취소·닫기·이전/다음·더 보기) | <PortalButton variant="secondary" size="sm"> 또는 outline |
| 외곽선 액션(내보내기·새로고침·재검사 등) | <PortalButton variant="outline" size="sm"> |
| 아이콘만 있는 액션 | <PortalButton variant="ghost" size="sm" aria-label="..."> + icon |
| 파괴적 액션(삭제 등) | 확인 절차와 함께 variant="danger" 또는 ghost + danger 색 |
| 폼 제출 | type="submit" + loading |
| 페이지 단위 주요 액션 | size="md"(필요할 때만) |
size="sm"은 프로세스 관리와 같은 규격이다.
- 높이 30px
- 폰트 12px / 600
- 좌우 패딩 10px
- 아이콘 14px, 아이콘-라벨 간격 7px
editorial-button이나 화면 전용 배경·테두리·폰트를 가진 원시 <button>을 액션에 쓰지 않는다. 버튼 안의 글자를 임의로 굵게/모노체로 바꾸지 않는다 — 공통 버튼 토큰을 따른다.
예외 (버튼 규약을 적용하지 않는 컨트롤)
아래는 액션이 아니라 선택·탐색·캔버스 조작이므로 원시 <button>을 유지할 수 있다. 대신 aria-label/aria-pressed 등 접근성 계약을 지킨다.
- 탭·세그먼트 토글:
PortalTabs또는 탭 역할 (role="tab") - 색인·필터 칩:
1.1,ㄱ,A, 유형 타일, 상태 필터 - 흐름맵 캔버스: 확대/축소, 노드 카드, 루프 펼치기, 캔버스 팬/휠
- 트리·아코디언의 펼침/접힘 토글
- 사이드바·셸·메뉴의 내비게이션 항목
- 입력 필드 내부의 표시/숨김 토글(비밀번호 보기 등)
- 외부 UI 라이브러리(Ant Design, Radix)가 내부적으로 그리는 버튼
리뷰 체크
- 새 액션 버튼이
PortalButton인가? size가 주변 화면과 같은가? (관리 패널 기본sm)- 아이콘만 있으면
aria-label이 있는가? - 로딩·비활성 상태를 공통 버튼의
loading/disabled로 표현했는가? - 예외 컨트롤이라면 위 예외 목록에 해당하는가?
자동 점검
client/src/components/ButtonConvention.test.ts가 규약을 고정한다.
- 예외 파일 목록에 없는
.tsx에서 원시<button>이 발견되면 실패한다. - 화면 전용
editorial-button클래스가 다시 등장하면 실패한다. - 새 예외가 정말 필요하면 이 문서의 예외 목록과 테스트의
RAW_BUTTON_EXCEPTIONS에 같은 이유로 추가한다.