reopt designreopt design
DocsExploreToolsPricingBuilder
Start
Overview
Start
Core Concepts
Core Concepts
데이터 모델
데이터 모델
Build & Operate
Production readiness
opt-charts · Charts
ChartContainer
ChartTooltip
ChartLegend
LineChart
BarChart
AreaChart
Sparkline
PieChart
ScatterChart
ComparisonChart
GaugeChart
FunnelChart
RetentionHeatmap
SankeyChart
CalendarHeatmap
WaterfallChart
BubbleChart
MetricsCard
TrendChart
EventSparkline
ReportWidget
Oopt-charts
reopt designreopt design

A design system for the AI era

  • Docs
  • Pricing
  • Releases
  • GitHub
  • Terms of Service
  • Privacy Policy

© 2026 reopt-ai. All rights reserved.

Core Concepts
  1. Docs
  2. /
  3. Core Concepts
  4. /
  5. Core Concepts

핵심 개념

opt-charts를 opt-ui 내부 visuals의 부속물이 아니라 독립 데이터 시각화 패키지로 운영하기 위한 책임 경계와 구성 원칙입니다.

reopt design · Updated Jun 26, 2026

개요시작하기핵심 개념데이터 모델Production readiness

1. 패키지 구조

opt-charts는 opt-ui의 Core/Shells/Surfaces 계층과 분리된 데이터 시각화 패키지입니다. Recharts 의존성과 chart-specific shell을 이 패키지 안에서 끝내면 opt-ui가 일반 인터페이스 컴포넌트와 차트 엔진을 동시에 소유하는 문제가 줄어듭니다.

text
@reopt-ai/opt-charts
├─ visuals
│  ├─ ChartContainer, ChartTooltipContent, ChartLegendContent
│  ├─ LineChart, BarChart, AreaChart, PieChart, ScatterChart, BubbleChart
│  └─ GaugeChart, FunnelChart, RetentionHeatmap, SankeyChart, CalendarHeatmap
├─ shells
│  ├─ MetricsCard, TrendChart, EventSparkline
│  └─ ReportWidget
└─ lib
   ├─ ChartDataPoint, ChartSeriesDef, ChartConfig, ChartMargin
   └─ chart color and token constants
경계소유피해야 할 것
visuals차트 렌더링, 축/그리드/tooltip/legend, SVG/table 기반 분석 시각화카드 헤더, 비즈니스 상태, report builder 설정 화면
shellsMetricsCard, TrendChart, EventSparkline, ReportWidget처럼 제품 화면 조합새 chart primitive 추가, 데이터 정규화 책임
consumer app원천 데이터 fetch, 단위/통화 formatter, empty/error/loading 정책opt-charts 내부 palette나 Recharts DOM 구조에 직접 의존

2. ChartContainer

ChartContainer는 모든 Recharts 기반 chart의 sizing과 accessibility root입니다. 직접 Recharts 컴포넌트를 감싸야 할 때도 이 컨테이너를 사용하면 기존 token, height, ResponsiveContainer 초기 dimension 동작을 유지할 수 있습니다.

tsx
import { ChartContainer } from "@reopt-ai/opt-charts";
import { LineChart as RechartsLineChart, Line } from "recharts";

export function CustomChart() {
  return (
    <ChartContainer height={300} aria-label="주간 활성 사용자">
      <RechartsLineChart data={data} accessibilityLayer>
        <Line dataKey="activeUsers" />
      </RechartsLineChart>
    </ChartContainer>
  );
}

3. Visuals vs Shells

visuals는 data와 series를 받아 차트를 그립니다. shells는 화면 안에서 제목, 설명, 지표 값, 카드 chrome, lazy chart loading 같은 제품 조합을 제공합니다. 같은 차트라도 상세 분석 페이지는 visual을 직접 쓰고, 운영 대시보드 카드에서는 shell을 선택합니다.

tsx
import { MetricsCard, TrendChart } from "@reopt-ai/opt-charts";

export function RevenuePanel() {
  return (
    <section className="grid gap-4 lg:grid-cols-[18rem_1fr]">
      <MetricsCard
        title="ARR"
        value="₩18.4억"
        change="+12.8%"
        trend="up"
        sparklineData={[20, 24, 23, 31, 36, 42]}
      />
      <TrendChart
        title="월별 매출"
        data={data}
        series={series}
        chartProps={{ showTooltip: true, showLegend: true }}
      />
    </section>
  );
}

4. 운영 개념

ChartContainer

Recharts ResponsiveContainer 래퍼입니다. width는 100%, height 기본값은 300이며 role="img"와 aria 속성을 root div에 전달합니다.

accessibilityLayer

LineChart, BarChart, AreaChart, PieChart, ScatterChart, BubbleChart 등 Recharts 기반 차트는 accessibilityLayer를 켭니다.

formatter boundary

단위, 통화, 퍼센트 표기는 tooltipOptions, legendOptions, valueFormatter, labelFormatter에서 주입합니다.

token boundary

차트 색상은 series.color가 우선이고, 없으면 CHART_COLOR_PALETTE가 순서대로 적용됩니다.

5. 선택 기준

데이터 shape가 고민일 때

공통 Cartesian 모델과 특수 차트 타입을 먼저 비교합니다.

설정 기반 widget이 필요할 때

ReportWidget은 type별 동적 import와 empty/loading label을 제공합니다.

시각적 선택이 필요할 때

카탈로그에서 실제 렌더링과 예제 코드를 확인합니다.

PreviousStartopt-charts 설치, import boundary, 첫 차트 렌더링, opt-ui compatibility re-export에서 직접 import로 옮기는 기준Start
Go to Start
Next데이터 모델ChartDataPoint, ChartSeriesDef, 특수 차트 타입, formatter, empty state, 색상 할당 전략데이터 모델