Lynx

Quantity Picker

정수 단위의 수량을 늘리거나 줄일 때 사용하는 컴포넌트입니다.

Engine ≥ 3.6
사용 가능 버전@seed-design/[email protected], @seed-design/[email protected]
Lynx 예제를 불러오는 중입니다.

Installation

npx @seed-design/cli@latest add ui:quantity-picker

Props

QuantityPicker

Registry의 QuantityPicker는 수량 선택에 필요한 감소 버튼, 값, 증가 버튼을 함께 제공합니다.

Prop

Type

layout?"fill" | "hug" | undefined
size?"small" | "medium" | "large" | undefined

min과 max는 필수이며 안전한 정수여야 합니다. step의 기본값은 1이고, defaultValue를 생략하면 min에서 시작합니다. value와 onValueChange를 함께 사용하면 값을 외부 상태로 제어할 수 있습니다.

Examples

Layout

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

Lynx 예제를 불러오는 중입니다.

이 예제에서 사용하는 Quantity Picker recipe는 display: grid를 사용합니다. Android/iOS Lynx engine 2.1 이상과 HarmonyOS Lynx engine 3.4 이상에서 호환됩니다.

Value Text

getValueText를 사용하면 표시되는 수량에 단위나 보조 설명을 덧붙일 수 있습니다. 반환한 값은 Value Display와 접근성 값에 사용할 표시 텍스트이며, 내부 수량 상태나 증감 단위에는 영향을 주지 않습니다.

Lynx 예제를 불러오는 중입니다.

Controlled

value와 onValueChange를 사용해 수량 상태를 앱의 상태로 제어할 수 있습니다. 변경 콜백에서 새 숫자를 저장하고, 저장한 값을 다시 value로 전달하세요.

Lynx 예제를 불러오는 중입니다.

Removable

removable을 사용하면 값이 min에 도달했을 때 Decrement 버튼이 Remove 버튼으로 전환됩니다. 이때 Decrement를 누르면 수량을 변경하지 않고 onRemove만 호출합니다. 삭제나 목록에서 제거하는 동작은 onRemove에서 처리하세요.

Lynx 예제를 불러오는 중입니다.

Loading

loading으로 모든 action 또는 특정 action의 실행을 일시적으로 막고 loading indicator를 표시할 수 있습니다. loading={true}는 Decrement와 Increment 모두에 적용되며, loading={{ increment: true }}처럼 객체를 전달하면 해당 action만 막습니다.

Lynx 예제를 불러오는 중입니다.

disabled, readOnly, loading은 모두 action을 실행하지 못하게 합니다. disabled는 두 action을 비활성화하고 접근성 상태에도 disabled를 전달합니다. readOnly는 수량 변경과 Remove 콜백 호출을 막지만 값을 다른 상태로 바꾸지는 않습니다. loading은 지정된 action만 일시적으로 막으며, 해당 action의 indicator를 표시합니다. 따라서 removable의 최솟값에서도 Decrement가 disabled, readOnly 또는 decrement loading이면 onRemove가 호출되지 않습니다.

Form

Lynx에는 HTML <form>, hidden <input>, FormData 제출 모델이 없으므로 웹의 inputProps와 hidden input 기반 Form 예제를 제공하지 않습니다. 수량을 제출해야 할 때는 value와 onValueChange로 앱 상태를 관리한 뒤, 제출 또는 네트워크 요청을 만드는 코드에서 그 상태를 payload에 직접 넣으세요. 이 방식은 UI 표시용 getValueText와 서버에 보낼 raw 숫자 값을 분리할 수 있습니다.

Accessibility

Quantity Picker의 용도를 설명하는 accessibility-label을 제공하세요. 이 label은 현재 수량을 표시하는 요소의 이름으로 사용되며, getValueText가 반환한 문자열이나 숫자는 접근성 값에도 반영됩니다.

Registry 컴포넌트는 감소, 증가, 삭제 버튼에 기본 접근성 label을 제공합니다. 문맥에 맞게 바꾸려면 decrementAccessibilityLabel, incrementAccessibilityLabel, removeAccessibilityLabel을 사용하세요. 특히 removable을 사용할 때는 삭제 대상을 알 수 있는 label을 제공해야 합니다.

disabled는 접근성 상태에도 반영됩니다. readOnly와 loading으로 동작을 막았다면 주변 label이나 안내 텍스트로 제한 상태를 설명하세요.

웹 버전과의 차이

  • HTML 요소와 버튼 대신 Lynx native <view>와 접근성 요소를 렌더링하고 tap으로 동작합니다.
  • aria-* 대신 accessibility-*와 Registry의 접근성 label props를 사용합니다.
  • HTML form, hidden input, FormData, inputProps를 지원하지 않습니다. 제출할 수량은 value와 onValueChange로 관리해 요청 payload에 직접 넣으세요.
  • 브라우저의 form 검증과 키보드 focus 모델이 없습니다. required 검증과 제출은 앱에서 처리합니다.

Last updated on

목차