Get StartedFoundationsComponentsPatternsRulesDevelopAI & ToolsUpdates

Quantity Picker

버튼으로 수치 값을 한 단계씩 늘리거나 줄일 수 있는 입력 컴포넌트예요.

설치

pnpm dlx shadcn@latest add https://rebar.conmarket-landing.workers.dev/r/quantity-picker.json

Anatomy

Quantity Picker는 값을 한 단계 늘리는 Increment Button, 한 단계 줄이는 Decrement Button, 현재 값을 표시하는 Value Display 영역으로 구성돼요.

Properties

Size

Small, Medium, Large 세 가지 사이즈를 제공해요. Action Button, Text Input 등 다른 입력 요소와 함께 배치할 때는 사이즈를 맞춰 일관성을 유지해요.

Value State

min, max 로 입력 가능한 값의 범위를 제한해 범위를 벗어난 값을 입력하지 않도록 해요.

  • Min: 최솟값에 도달해 Decrement가 불가능한 상태
  • InRange: Increment / Decrement 모두 가능한 상태
  • Max: 최댓값에 도달해 Increment가 불가능한 상태

State

Quantity Picker는 Enabled, Disabled, Error 상태를 가져요.

  • Enabled: 값 변경이 가능한 기본 상태
  • Disabled: 값 변경이 불가능한 상태 (disabled)
  • Error: 입력된 값이 허용 범위를 벗어난 상태 (invalid)

Button State

Decrement Button과 Increment Button은 각각 Enabled, Hover/Pressed, Loading, Focused, Disabled 다섯 가지 상태를 가져요.

  • Enabled: 선택 가능한 기본 상태
  • Hover/Pressed: 마우스 오버, 클릭/터치 시 옅은 배경색으로 강조
  • Loading: 수량 변경 요청에 대한 서버 응답을 기다리는 상태
  • Focused: 키보드 포커스 시 포커스 링 표시
  • Disabled: 선택이 불가능한 상태

loading 에 true 를 넘기면 두 버튼 모두, { increment: true } 처럼 넘기면 특정 버튼만 loading 상태가 돼요. 아래 첫 번째 예시에서 버튼을 눌러 보세요.

Removable

removable 을 활성화하면 값이 최솟값에 도달했을 때 Decrement 버튼이 Remove 버튼으로 바뀌어요. 제거 동작은 onRemove 에서 처리해요.

Layout

layout="hug" 는 콘텐츠에 맞는 너비를 유지해요. 부모가 Flex 레이아웃이고 남은 공간을 채워야 한다면 layout="fill" 을 사용해요. 이때 양쪽 버튼 크기는 유지되고 Value Display 영역만 늘어나요.

Value Text

getValueText 로 표시되는 수량에 단위나 보조 설명을 덧붙일 수 있어요. hidden input 으로 제출되는 값에는 영향을 주지 않아요.

Guidelines

Quantity Picker 기본 사용하기

Quantity Picker는 장바구니, 상품 상세, 주문서 등 수량을 바꿔야 하는 화면에서 사용해요.

min, max 로 입력 가능한 값의 범위를 제한해요. 경계에 도달한 버튼은 자동으로 비활성화되어 잘못된 값이 입력되는 것을 미리 막아요.

Removable 활성화하기

Removable은 값이 최솟값에 도달했을 때 Decrement 버튼을 Remove 버튼으로 바꾸는 기능이에요. 값을 더 줄이는 동작이 곧 항목 삭제를 의미하는 맥락(예: 장바구니)에서 사용해요.

Size 선택하기

다른 입력 요소와 함께 배치할 때는 높이를 맞춰요. Medium Quantity Picker는 Medium Action Button과, Large Quantity Picker는 Large Action Button과 함께 써요.

− 1 +담기
Do· 같은 높이로 배치

함께 놓이는 버튼과 사이즈를 맞춰 일관성을 유지해요.

− 1 +담기
Don't· 높이가 다른 배치

서로 다른 높이는 화면을 어수선하게 만들어요.

Quantity Picker 터치 영역

Quantity Picker의 터치 영역은 양쪽 Increment·Decrement 버튼에 한정돼요. Value Display는 터치에 반응하지 않아요.

접근성

Root에는 Quantity Picker의 용도를 설명하는 aria-label 또는 aria-labelledby 를 제공해요. 필요하면 decrementAriaLabel, incrementAriaLabel, removeAriaLabel 로 각 버튼의 접근성 이름을 맥락에 맞게 바꿀 수 있어요. 값이 바뀌면 Value Display가 aria-live 로 스크린 리더에 알려요.

Props

Prop

Type

On this page