Skip to content

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에 같은 이유로 추가한다.