Skip to content

Button

액션을 실행하는 컨트롤입니다. Base UI의 Button 프리미티브 위에 Neba의 아크릴 표면을 올렸습니다.

tsx
import { Button } from 'neba';

<Button onClick={save}>저장</Button>;

Props

Prop타입기본값설명
variant공통'solid' | 'outline' | 'text''solid'표면의 무게. 채움 / 하이라인 / 없음
size공통'xs' | 'sm' | 'md' | 'lg' | 'xl''md'높이와 타입 스케일. xs 22px · sm 26px · md 32px · lg 40px · xl 48px
color공통'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info''primary'의미론적 색 역할. 임의 색상값은 받지 않습니다
density공통'default' | 'compact''default'여백만 바꿉니다. 높이와 글자 크기는 그대로
elevation공통0 | 1 | 2 | 30그림자 깊이. 0은 그림자 없음. 호버는 한 단계 올리고, 누르면 한 단계 내립니다
startIconReactNode라벨 앞에 놓이는 내용. 1.2em으로 그려져 라벨 크기를 따라갑니다
endIconReactNode라벨 뒤에 놓이는 내용
loadingbooleanfalsestartIcon 자리에 스피너를 띄우고 활성화를 막습니다. 포커스는 유지됩니다
readOnlybooleanfalse비활성이되 흐려지지 않음. 액션은 존재하지만 여기서는 쓸 수 없다는 뜻
disabledbooleanfalse사용 불가. 색 계열을 버리고 중립 회색이 되며, 포커스 순서에서 빠집니다
fullWidthbooleanfalse컨테이너 너비만큼 확장
childrenReactNode라벨. 생략하면 정사각형 아이콘 버튼이 됩니다

<button>의 네이티브 속성은 그대로 전달됩니다. color만 예외로, 위 표의 color와 이름이 겹쳐 제외되어 있습니다.

공통 축(variant size color density elevation)이 컴포넌트 전반에서 뜻하는 바는 Prop 규약에 있습니다.

예시

변형

한 화면에 solid는 하나만 두세요. 주 액션이 둘이면 어느 쪽도 주 액션이 아닙니다.

여섯 가지 역할이 전부입니다. 임의의 색상값은 받지 않습니다 — 색은 값이 아니라 역할입니다.

크기

md(32px)가 데스크톱 기본입니다. xs sm은 툴바와 표 안쪽에, lg xl은 그 화면이 실제로 요구하는 하나의 액션에 씁니다.

밀도

density는 좌우 여백만 바꿉니다. 같은 size라면 밀도가 달라도 높이가 같아서, 섞어 놓아도 기준선이 흐트러지지 않습니다.

아이콘

아이콘은 1.2em으로 그려져 라벨 크기를 따라갑니다. 크기를 따로 줄 필요가 없습니다. 라벨 없이 아이콘만 넘기면 정사각형이 되며, 이때는 aria-label이 필요합니다.

상태

상태겉모습포커스네이티브 disabled
loading그대로. 스피너가 startIcon 자리를 대신유지아니오
readOnly색은 유지, 평평해지고 채도가 빠짐유지아니오
disabled색 계열을 버리고 중립 회색빠짐

세 상태 모두 클릭이 부모로 전파되지 않습니다.

Elevation

기본값 0은 그림자가 전혀 없다는 뜻입니다. 표면을 배경에서 떼어 놓는 것은 아크릴 가장자리입니다. 호버하면 한 단계 오르고 누르면 한 단계 내려가므로, 평평한 버튼도 움직이지 않고 눌린 것을 표현합니다.

전체 너비

접근성

  • 항상 네이티브 <button>으로 렌더링됩니다. type도 그대로 전달되므로 폼 안에서 type="submit"이 동작합니다.
  • 아이콘 전용 버튼에는 aria-label을 주세요.
  • 포커스 링은 :focus-visible에서만 나타납니다. 마우스 클릭에는 보이지 않습니다.
  • loadingreadOnly는 포커스를 유지합니다. 포커스 순서에서 사라지면 키보드 사용자가 페이지 구조를 잃기 때문입니다.
  • 모든 색 조합이 채움 위 글자 4.5:1을 만족합니다.

Released under the MIT License