Lynx

Radio Group

사용자가 여러 옵션 중 하나만 선택할 수 있게 하는 라디오 그룹 컴포넌트입니다.

Engine ≥ 3.6
사용 가능 버전@seed-design/lynx-react@0.1.0, @seed-design/lynx-css@0.1.0
Lynx 예제를 불러오는 중입니다.

Installation

npx @seed-design/cli add ui:radio-group

Usage

RadioGroup은 선택 상태와 함께 Field의 안내 정보를 표시합니다. label, labelWeight, indicator, showRequiredIndicator, description, errorMessage를 사용할 수 있습니다.

import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group";

export function ContactMethod() {
  return (
    <RadioGroup
      label="선호하는 연락 방법"
      indicator="필수"
      description="연락받을 방법을 선택해 주세요."
      defaultValue="chat"
    >
      <RadioGroupItem value="chat" label="채팅" />
      <RadioGroupItem value="phone" label="전화" />
    </RadioGroup>
  );
}

invalidtrue이고 errorMessage가 있으면 화면에는 description 대신 오류 메시지를 표시합니다.

Props

RadioGroup

Prop

Type

label?React.ReactNode
indicator?React.ReactNode
showRequiredIndicator?boolean | undefined
description?React.ReactNode
errorMessage?React.ReactNode
value?string | undefined
defaultValue?string | undefined
onValueChange?((value: string) => void) | undefined
style?CSSProperties | undefined
children?React.ReactNode
className?string | undefined
required?boolean | undefined
readOnly?boolean | undefined

RadioGroupItem

Prop

Type

label?React.ReactNode
valuestring
disabled?boolean | undefined
style?CSSProperties | undefined
children?React.ReactNode
className?string | undefined

Radiomark

Prop

Type

className?string | undefined
style?CSSProperties | undefined

접근성

RadioGroup은 기본적으로 접근성 요소이며 accessibility-role-description="radiogroup"을 사용합니다. 그룹이 비활성 상태이면 accessibility-traits="disabled"도 전달합니다. Registry RadioGroup에 문자열 label을 전달하면 같은 내용을 accessibility-label에도 연결합니다.

RadioGroupItem은 기본적으로 accessibility-role-description="radio"를 사용합니다. 선택 상태는 accessibility-valueselected 또는 not selected로 전달하며, 비활성 상태는 accessibility-traits="disabled"로 전달합니다.

문자열 label을 사용하면 Registry 래퍼가 그 값을 항목의 accessibility-label로 연결합니다. label에 문자열이 아닌 콘텐츠를 넣거나 컴파운드 API를 직접 조합할 때는 각 항목에 accessibility-label을 명시하세요. 필요하면 모든 기본 접근성 prop을 직접 덮어쓸 수 있습니다.

Examples

Sizes

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

Tones

Brand

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

Neutral

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

Weights

React의 항목별 weight와 달리 Lynx의 weight는 그룹 단위 prop입니다. 아래 예제는 굵기마다 그룹을 나눕니다. 두 그룹은 같은 제어 값을 공유하므로 두 항목 중 하나만 선택됩니다.

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

Long Label

Lynx의 size도 그룹 단위 prop입니다. 아래 예제는 크기마다 그룹을 나눕니다. 두 그룹은 같은 제어 값을 공유하므로 두 항목 중 하나만 선택됩니다.

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

Disabled

RadioGroupdisabled는 그룹 전체를 비활성화합니다. 개별 RadioGroupItem도 따로 비활성화할 수 있습니다.

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

Listening to Value Changes

RadioGrouponValueChange로 선택 값 변경을 감지할 수 있습니다. Controlled 모드에서는 valueonValueChange를 함께 사용합니다.

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

Use Cases

React Hook Form

React Hook Form은 HTML 폼과 input을 전제로 하므로 Lynx에서는 같은 예제를 실행할 수 없습니다. Lynx에서는 valueonValueChange로 선택 값을 제어하세요. 제출과 검증은 앱의 상태 관리와 요청 흐름에서 처리합니다.

Using Radiomark

Registry의 Radiomark@seed-design/lynx-react의 컴파운드 API를 함께 사용하면 선택 상태를 공유하면서 항목의 배치를 바꿀 수 있습니다. RadiomarkRadioGroup.Item 안에서만 사용할 수 있습니다.

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

RadioGroupField Integration

label, description, errorMessage 등의 RadioGroupField 관련 prop을 사용할 수 있습니다.

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

Scale Feedback

Lynx RadioGroupItem은 누르는 동안 Radiomark의 배경색을 바꿉니다. React처럼 크기를 줄이지 않으므로 --seed-radiomark-feedback-scale CSS 변수도 사용하지 않습니다.

웹 버전과의 차이

Lynx RadioGroup은 React RadioGroup과 다음과 같은 차이가 있습니다.

  • 오류 안내 렌더링: React는 오류가 표시될 때 description을 접근성 트리에 남기지만, Lynx에는 DOM의 visually hidden 처리 방식이 없어 화면과 접근성 트리에서 description을 제외하고 errorMessage만 렌더링합니다.
  • 아이콘 렌더링 방식: 기본 RadioGroup.ItemIndicator<view> 점으로 렌더됩니다. 사용자 지정 아이콘을 전달하려면 @karrotmarket/lynx-monochrome-icon을 별도로 설치하고 단색 아이콘 컴포넌트를 사용하세요. <svg>를 직접 주입하는 방식은 Lynx에서 지원하지 않습니다.
  • 이벤트 핸들링: onChange 대신 onValueChange(value: string)만 노출합니다. tap 핸들러는 item 내부에서 소유합니다.
  • Pressed 상태: 웹의 크기 축소 대신 내부 press state가 Radiomark의 배경색을 바꿉니다.
  • 렌더링 요소: HTML <label> / <input type="radio"> 대신 네이티브 <view> / <text> 요소를 렌더링합니다.
  • Strict containment: RadioGroupItem, Radiomark, RadioGroup.ItemControl, RadioGroup.ItemIndicator, RadioGroup.ItemLabel은 반드시 RadioGroup.RootRadioGroup.Item의 적절한 context 안에서 사용해야 합니다. Radiomark는 standalone primitive가 아니라 item context 안에서 ItemControlItemIndicator를 묶는 snippet helper입니다.

사용자 지정 아이콘 패키지는 Registry 기본 설치에 포함되지 않습니다.

bun add @karrotmarket/lynx-monochrome-icon@^1.20.0

Lynx 미지원 기능

현재 Lynx 플랫폼 제약으로 다음 기능이 지원되지 않습니다.

런타임 모델 차이로 제외

기능웹 대응설명
React Hook FormHTML form 라이브러리valueonValueChange 및 앱 수준 제출 로직으로 대체
RadioGroupItemHiddenInput<input type="radio">Lynx에 HTML form 제출 모델 없음
namenative form field nameLynx에 native form 제출 모델 없음
focus / focusVisible키보드 포커스Lynx에 키보드 포커스 개념 없음
onChange (raw DOM event)React.ChangeEvent의미 없음. onValueChange로 대체

Last updated on

목차