Container
반응형 레이아웃 컨테이너 컴포넌트입니다.
개요
Container는 콘텐츠를 중앙 정렬하고 최대 너비를 제한하는 레이아웃 컴포넌트입니다. iCignal Container는 iCignal 제품에 최적화된 반응형 디자인을 제공하며, Foundation Container의 모든 기능을 상속합니다.
주요 특징:
- 반응형 최대 너비
- 중앙 정렬
- 패딩 옵션
- Breakpoint 기반 너비
- iCignal 대시보드 최적화
사용 사례:
- iCignal Analytics 페이지 레이아웃
- 리포트 뷰어 컨테이너
- 대시보드 섹션 래퍼
- 캠페인 관리 페이지
알림: 이 컴포넌트는 현재 구현 중입니다. 임시로 다음 패턴을 사용할 수 있습니다.
설치
# Coming Soon
# npx @vortex/cli add container --package icignal기본 사용법
import "@vortex/ui-icignal/theme"; // iCignal 테마 적용
import { Container } from "@vortex/ui-icignal";
export default function Example() {
return (
<Container>
<h1>Page Title</h1>
<p>Content goes here</p>
</Container>
);
}Variants (변형)
최대 너비 옵션
<Container maxWidth="sm">Small Container</Container>
<Container maxWidth="md">Medium Container</Container>
<Container maxWidth="lg">Large Container</Container>
<Container maxWidth="xl">Extra Large Container</Container>패딩 옵션
<Container padding="none">No Padding</Container>
<Container padding="sm">Small Padding</Container>
<Container padding="md">Medium Padding</Container>
<Container padding="lg">Large Padding</Container>iCignal 브랜딩
iCignal 특화 사용 가이드
Analytics 대시보드 레이아웃:
import { Container } from "@vortex/ui-icignal";
<Container maxWidth="xl" padding="lg">
<div className="mb-lg">
<h1 className="text-3xl font-bold">Analytics Dashboard</h1>
<p className="text-gray-600">실시간 데이터 분석</p>
</div>
{/* KPI Cards */}
<div className="grid grid-cols-4 gap-md mb-lg">{/* ... KPI cards ... */}</div>
{/* Charts */}
<div className="grid grid-cols-2 gap-lg">{/* ... chart cards ... */}</div>
</Container>;리포트 뷰어 레이아웃:
<Container maxWidth="lg" padding="md">
<div className="bg-white rounded-lg shadow-sm p-lg">
<h2 className="text-2xl font-bold mb-md">월간 분석 리포트</h2>
<div className="prose max-w-none">{/* Report content */}</div>
</div>
</Container>캠페인 관리 페이지:
<Container maxWidth="xl">
<div className="flex justify-between items-center mb-lg">
<div>
<h1 className="text-2xl font-bold">캠페인 관리</h1>
<p className="text-sm text-gray-600">진행 중인 마케팅 캠페인</p>
</div>
<Button variant="primary">새 캠페인</Button>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-md">
{/* Campaign cards */}
</div>
</Container>Foundation과의 차이점
| 속성 | Foundation | iCignal |
|---|---|---|
| 기본 maxWidth | xl | xl (대시보드 최적화) |
| 브랜드 적용 | 없음 | iCignal 페이지 헤더 스타일 |
| 사용 맥락 | 범용 | Analytics/Dashboard 특화 |
| 여백 설정 | 표준 | 대시보드 여백 최적화 |
| 테마 | 중립적 테마 | iCignal 테마 (@vortex/ui-icignal/theme) |
import 경로 차이:
// Foundation
import { Container } from "@vortex/ui-foundation";
// iCignal
import "@vortex/ui-icignal/theme"; // 테마 import 필수
import { Container } from "@vortex/ui-icignal";Props API
| Prop | Type | Default | Description |
|---|---|---|---|
| maxWidth | ’sm’ | ‘md’ | ‘lg’ | ‘xl’ | ‘full' | 'xl’ | 최대 너비 |
| padding | ’none’ | ‘sm’ | ‘md’ | ‘lg' | 'md’ | 패딩 크기 |
| className | string | - | 추가 CSS 클래스 |
| children | ReactNode | - | 컨테이너 내용 |
접근성
Container 컴포넌트는 WCAG 2.1 AA 기준을 준수합니다.
예제
예제 1: iCignal Analytics 대시보드
import "@vortex/ui-icignal/theme";
import { Container } from "@vortex/ui-icignal";
import { Card, CardHeader, CardContent } from "@vortex/ui-icignal";
import { BarChart, LineChart, PieChart, Activity } from "lucide-react";
export default function AnalyticsDashboard() {
return (
<Container maxWidth="xl" padding="lg">
{/* Header */}
<div className="mb-xl">
<h1 className="text-3xl font-bold text-gray-900">
Analytics Dashboard
</h1>
<p className="text-gray-600 mt-xs">실시간 데이터 모니터링 및 분석</p>
</div>
{/* KPI Cards */}
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-md mb-xl">
<Card>
<CardContent className="pt-lg">
<Activity size={20} className="text-icignal-blue mb-sm" />
<p className="text-sm text-gray-600">실시간 방문자</p>
<p className="text-2xl font-bold">1,234</p>
</CardContent>
</Card>
{/* More KPI cards */}
</div>
{/* Charts */}
<div className="grid grid-cols-1 lg:grid-cols-2 gap-lg">
<Card>
<CardHeader>
<h3 className="font-semibold">트래픽 추이</h3>
</CardHeader>
<CardContent>
<LineChart size={200} />
</CardContent>
</Card>
<Card>
<CardHeader>
<h3 className="font-semibold">방문 경로</h3>
</CardHeader>
<CardContent>
<PieChart size={200} />
</CardContent>
</Card>
</div>
</Container>
);
}예제 2: iCignal 리포트 페이지
import "@vortex/ui-icignal/theme";
import { Container } from "@vortex/ui-icignal";
import { Button } from "@vortex/ui-icignal";
import { Download, Share2, Print } from "lucide-react";
export default function ReportPage() {
return (
<Container maxWidth="lg" padding="lg">
{/* Report Header */}
<div className="bg-white rounded-lg shadow-sm p-lg mb-lg">
<div className="flex justify-between items-start mb-md">
<div>
<h1 className="text-2xl font-bold">월간 분석 리포트</h1>
<p className="text-sm text-gray-600">2024년 1월 1일 - 1월 31일</p>
</div>
<div className="flex gap-sm">
<Button variant="ghost" size="sm">
<Print size={16} className="mr-xs" />
인쇄
</Button>
<Button variant="outline" size="sm">
<Share2 size={16} className="mr-xs" />
공유
</Button>
<Button variant="primary" size="sm">
<Download size={16} className="mr-xs" />
다운로드
</Button>
</div>
</div>
{/* Report Content */}
<div className="prose max-w-none">
<h2>개요</h2>
<p>이번 달 웹사이트 트래픽은 전월 대비 12.5% 증가했습니다...</p>
<h2>주요 지표</h2>
<ul>
<li>총 방문자: 45,231 (+12.5%)</li>
<li>페이지뷰: 123,456 (+8.9%)</li>
<li>전환율: 3.24% (+0.8%)</li>
</ul>
</div>
</div>
</Container>
);
}임시 구현
Container 컴포넌트가 구현될 때까지 다음 코드를 사용할 수 있습니다:
// components/Container.tsx
export function Container({
maxWidth = "xl",
padding = "md",
className = "",
children,
}) {
const maxWidths = {
sm: "max-w-screen-sm",
md: "max-w-screen-md",
lg: "max-w-screen-lg",
xl: "max-w-screen-xl",
full: "max-w-full",
};
const paddings = {
none: "",
sm: "px-sm",
md: "px-md",
lg: "px-lg",
};
return (
<div
className={`${maxWidths[maxWidth]} ${paddings[padding]} mx-auto ${className}`}
>
{children}
</div>
);
}관련 컴포넌트
- Foundation Container - 기본 버전 참조
- Grid - 그리드 레이아웃
- Stack - 스택 레이아웃
- Card - 콘텐츠 카드
Last updated on