Lynx

Tabs

한 화면의 콘텐츠를 탭 단위로 구분하고, 탭 선택이나 좌우 스와이프로 전환하는 컴포넌트입니다.

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

Installation

npx @seed-design/cli add ui:tabs

Props

TabsRoot

Prop

Type

value?string | undefined
defaultValue?string | undefined
onValueChange?((value: string) => void) | undefined

TabsList

Prop

Type

TabsTrigger

Prop

Type

notification?boolean | undefined
disabled?boolean | undefined
childrenstring | number
valuestring

TabsCarousel

Prop

Type

swipeable?boolean | undefined
onSettle?(() => void) | undefined

TabsContent

Prop

Type

valuestring

Usage

import {
  TabsCarousel,
  TabsContent,
  TabsList,
  TabsRoot,
  TabsTrigger,
} from "@/components/ui/tabs";

export function App() {
  return (
    <TabsRoot defaultValue="one" triggerLayout="fill">
      <TabsList>
        <TabsTrigger value="one">첫 번째</TabsTrigger>
        <TabsTrigger value="two">두 번째</TabsTrigger>
      </TabsList>
      <TabsCarousel swipeable className="tabs-carousel">
        <TabsContent value="one">
          <text>첫 번째 콘텐츠</text>
        </TabsContent>
        <TabsContent value="two">
          <text>두 번째 콘텐츠</text>
        </TabsContent>
      </TabsCarousel>
    </TabsRoot>
  );
}

TabsCarousel에는 TabsContent를 자식으로 전달합니다. 앱 레이아웃에 맞는 높이를 지정하고, swipeable을 설정하면 좌우 스와이프로 탭을 바꿀 수 있습니다.

iOS의 화면 왼쪽 가장자리에서 시작하는 뒤로 가기 제스처 범위는 iosBackGestureEdgeWidth로 조절할 수 있습니다.

TabsList의 scrollAlign은 선택한 탭을 가로 목록에 맞추는 방식입니다. "nearest", "start", "center", "end"를 지원하며 기본값은 "start"입니다.

Examples

Layout Fill (Default)

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

Layout Hug

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

Size Medium

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

Size Small (Default)

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

Transition

Lynx의 TabsCarousel은 탭을 선택할 때 native viewpager의 selectTab을 smooth: false로 호출하므로 콘텐츠가 즉시 바뀝니다. 전환 효과가 필요하면 TabsCarousel 대신 선택 값을 기준으로 콘텐츠를 직접 렌더링하고 앱에서 애니메이션을 적용하세요.

Swipeable

Trigger를 탭하거나 콘텐츠를 좌우로 밀면 선택 값과 Indicator가 함께 이동합니다.

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

Lynx는 carouselPreventDrag를 지원하지 않습니다. Carousel 안에서 드래그와 충돌하는 조작 요소는 Carousel 밖에 배치하세요.

Disabled

disabled Trigger는 탭할 수 없습니다. Carousel이 비활성 탭에 도달하면 다음 활성 탭으로 이동합니다.

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

Notification

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

Sticky List

탭이 전체 화면을 차지하고 TabsList가 화면 위에 고정되어야 할 때 사용합니다.

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

Standalone

TabsContent를 사용하지 않고 콘텐츠 영역을 직접 구성할 때 사용합니다.

이 구성에서는 Tabs가 제공하는 스와이프 기능을 사용할 수 없습니다.

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

Dynamic Height

TabsCarousel의 autoHeight, lazyMount, unmountOnExit 없이도 TabsContent를 Carousel 밖에 배치하면 선택된 콘텐츠 높이에 맞춰 아래 콘텐츠의 위치를 바꿀 수 있습니다. 이 구성은 스와이프를 제공하지 않습니다.

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

Scroll to Top

TabsTrigger의 bindtap은 이미 선택된 Trigger를 다시 탭할 때도 호출됩니다. 아래 예시는 네 번째 항목부터 보이도록 시작하며, 선택된 탭을 다시 탭하면 현재 콘텐츠의 scroll-view가 맨 위로 이동합니다.

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

Web Version Differences

  • 탭 이벤트는 onClick 대신 bindtap으로 받습니다.
  • Carousel은 네이티브 <viewpager>, 가로 탭 목록은 <scroll-view>를 사용합니다.
  • 접근성은 ARIA 대신 Lynx의 accessibility-* 속성을 사용합니다.

스와이프와 Indicator 이동은 QR 코드 패널에서 Lynx Explorer로 확인하세요. 브라우저 미리보기와 네이티브 기기의 제스처 결과가 다를 수 있습니다.

Unsupported Lynx Features

  • 세로 orientation
  • 키보드 방향키, Home/End, roving focus
  • RTL 순서와 스와이프 방향 반전
  • asChild
  • lazyMount, unmountOnExit
  • Carousel의 loop, autoHeight, dragThreshold, carouselPreventDrag
  • 콘텐츠 전환 애니메이션

Last updated on

목차