# AppBar URL: /react/components/app-bar Source: https://github.com/daangn/seed-design/blob/dev/docs/content/react/components/app-bar.mdx 화면 상단에서 현재 화면의 제목과 탐색 액션을 보여주는 내비게이션 바 컴포넌트입니다. 사용 가능 버전: @seed-design/stackflow@0.0.1, @seed-design/css@0.0.1 ## Preview ```tsx import { IconBellLine, IconChevronLeftLine } from "@karrotmarket/react-monochrome-icon"; import { basicRendererPlugin } from "@stackflow/plugin-renderer-basic"; import { Box, Flex } from "@seed-design/react"; import { seedPlugin } from "@seed-design/stackflow"; import { stackflow } from "@stackflow/react"; import { AppBar, AppBarIconButton, AppBarLeft, AppBarMain, AppBarRight, } from "seed-design/ui/app-bar"; import { AppScreen, AppScreenContent } from "seed-design/ui/app-screen"; function Activity() { return ( 화면 콘텐츠 ); } const { Stack } = stackflow({ activities: { Activity }, initialActivity: () => "Activity", plugins: [basicRendererPlugin(), seedPlugin({ theme: "cupertino" })], transitionDuration: 0, }); export default function Preview() { return ( ); } ``` ## Installation - npm: npx @seed-design/cli@latest add ui:app-screen - pnpm: pnpm dlx @seed-design/cli@latest add ui:app-screen - yarn: yarn dlx @seed-design/cli@latest add ui:app-screen - bun: bun x @seed-design/cli@latest add ui:app-screen React Registry는 AppBar를 AppScreen과 함께 설치합니다. AppBar는 Stackflow Activity 안에서 AppScreen과 함께 사용하세요. Stackflow 설정은 [Getting Started](/react/stackflow/getting-started)를 참고하세요. ## Props ### `AppBar` ### `AppBarLeft` ### `AppBarMain` ### `AppBarRight` ### `AppBarSlot` ### `AppBarIconButton` ## Usage 설치한 snippet은 Root와 주요 슬롯을 `AppBar`, `AppBarLeft`, `AppBarMain`, `AppBarRight`로 내보냅니다. `AppBarBackButton`은 현재 Activity가 루트가 아닐 때 나타나며, 클릭하면 이전 Activity로 이동합니다. ```tsx import { AppBar, AppBarBackButton, AppBarLeft, AppBarMain, AppBarRight, } from "@/components/ui/app-bar"; export function Header() { return ( ); } ``` ### Title / Subtitle `AppBarMain`에 `title`, `subtitle`을 전달하면 제목과 부제목을 조립합니다. `subtitle`이 있으면 `layout="withSubtitle"`을 자동으로 적용합니다. ```tsx import { basicRendererPlugin } from "@stackflow/plugin-renderer-basic"; import { Box, Flex } from "@seed-design/react"; import { seedPlugin } from "@seed-design/stackflow"; import { stackflow } from "@stackflow/react"; import { AppBar, AppBarMain } from "seed-design/ui/app-bar"; import { AppScreen, AppScreenContent } from "seed-design/ui/app-screen"; function Activity() { return ( 제목과 부제목을 함께 표시한 AppBar ); } const { Stack } = stackflow({ activities: { Activity }, initialActivity: () => "Activity", plugins: [basicRendererPlugin(), seedPlugin({ theme: "cupertino" })], transitionDuration: 0, }); export default function TitleAndSubtitle() { return ( ); } ``` ### Left / Right Action 왼쪽과 오른쪽에는 아이콘 버튼이나 커스텀 슬롯을 배치할 수 있습니다. Cupertino theme에서는 좌우 슬롯 폭을 기준으로 가운데 제목의 padding을 조정합니다. ```tsx "use client"; import { IconChevronLeftLine, IconXmarkLine } from "@karrotmarket/react-monochrome-icon"; import { basicRendererPlugin } from "@stackflow/plugin-renderer-basic"; import { Box, Flex } from "@seed-design/react"; import { seedPlugin } from "@seed-design/stackflow"; import { stackflow } from "@stackflow/react"; import { AppBar, AppBarIconButton, AppBarLeft, AppBarMain, AppBarRight, AppBarSlot, } from "seed-design/ui/app-bar"; import { AppScreen, AppScreenContent } from "seed-design/ui/app-screen"; import { useState } from "react"; function Activity() { const [lastAction, setLastAction] = useState("없음"); return ( setLastAction("뒤로")}> setLastAction("닫기")}> 마지막 액션: {lastAction} ); } const { Stack } = stackflow({ activities: { Activity }, initialActivity: () => "Activity", plugins: [basicRendererPlugin(), seedPlugin({ theme: "cupertino" })], transitionDuration: 0, }); export default function LeftAndRightActions() { return ( ); } ``` ### Accessibility 아이콘만 있는 버튼에는 동작을 설명하는 `aria-label`을 지정하세요. `AppBarBackButton`과 `AppBarCloseButton`은 각각 `"뒤로"`, `"닫기"`를 기본값으로 제공합니다. ### Theme `theme`은 `"cupertino"` 또는 `"android"`를 사용할 수 있습니다. `AppScreen`과 같은 theme을 사용하세요. ```tsx import { IconChevronLeftLine, IconXmarkLine } from "@karrotmarket/react-monochrome-icon"; import { basicRendererPlugin } from "@stackflow/plugin-renderer-basic"; import { Box, HStack, VStack } from "@seed-design/react"; import { seedPlugin } from "@seed-design/stackflow"; import { stackflow } from "@stackflow/react"; import { AppBar, AppBarIconButton, AppBarLeft, AppBarMain, AppBarRight, } from "seed-design/ui/app-bar"; import { AppScreen } from "seed-design/ui/app-screen"; import type { ReactNode } from "react"; function CupertinoActivity() { return ( ); } function AndroidActivity() { return ( ); } const { Stack: CupertinoStack } = stackflow({ activities: { CupertinoActivity }, initialActivity: () => "CupertinoActivity", plugins: [basicRendererPlugin(), seedPlugin({ theme: "cupertino" })], transitionDuration: 0, }); const { Stack: AndroidStack } = stackflow({ activities: { AndroidActivity }, initialActivity: () => "AndroidActivity", plugins: [basicRendererPlugin(), seedPlugin({ theme: "android" })], transitionDuration: 0, }); function ExampleFrame({ children }: { children: ReactNode }) { return ( {children} ); } export default function PlatformLayouts() { return ( Cupertino Android ); } ```