reopt design
DocsExploreTemplatesCanvasToolsPricing
Login
Start
Overview
Start
Core Concepts
Core Concepts
Data model
Data model
Build & Operate
Production readiness
opt-charts · Charts
ChartContainer
ChartTooltip
ChartLegend
LineChart
BarChart
AreaChart
Sparkline
PieChart
ScatterChart
ComparisonChart
GaugeChart
FunnelChart
RetentionHeatmap
SankeyChart
PathFlowChart
CalendarHeatmap
WaterfallChart
BubbleChart
ComposedChart
RadarChart
RadialBarChart
Treemap
Histogram
BoxPlot
BulletChart
Heatmap
DataBar
GanttChart
Sunburst
CandlestickChart
TimeSeriesChart
TimeSeriesTooltip
LoadingChart
SmallMultiples
TraceWaterfall
VennDiagram
MetricsCard
TrendChart
EventSparkline
ReportWidget
Oopt-charts
reopt designreopt design

A design system for the AI era

  • Docs
  • Pricing
  • Releases
  • About
  • Contact
  • Terms of Service
  • Privacy Policy

reopt Inc.Business registration no. 217-88-02453contact@reopt.ai

© 2026 reopt Inc. All rights reserved.

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

핵심 개념

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

reopt design · Updated Nov 1, 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
│  ├─ Heatmap, RetentionHeatmap, CalendarHeatmap, Treemap, Sunburst, VennDiagram
│  ├─ SankeyChart, PathFlowChart, FunnelChart, WaterfallChart
│  └─ TimeSeriesChart, SmallMultiples, TraceWaterfall, GanttChart, CandlestickChart
├─ shells
│  ├─ MetricsCard, TrendChart, EventSparkline
│  └─ ReportWidget
├─ time (server-safe)
│  └─ date math, time range, bucket and tick helpers
└─ shared exports
   ├─ ChartDataPoint, ChartSeriesDef, ChartConfig, ChartMargin
   └─ seriesColor, CHART_COLOR_DOMAINS, locale formatters
경계소유피해야 할 것
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는 행·시리즈, 행렬, 계층, 그래프, 구간 또는 스칼라 등 각 유형의 데이터 모델을 받아 차트를 그립니다. 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에 전달합니다. interactive이면 role="group"으로 범례 버튼 같은 자식 컨트롤을 보존합니다.

accessibilityLayer

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

formatter boundary

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

token boundary

명시적 color가 우선입니다. seriesColor는 16개 테마 categorical 토큰을 차례로 쓰고 이후에는 중립색을 사용합니다. 크기와 양극성은 sequential/diverging 색상 도메인으로 구분합니다.

5. 선택 기준

슬라이드에 차트를 넣을 때

opt-deck의 선택적 확장으로 등록하고 편집 가능한 JSON과 발표용 스냅샷을 함께 저장합니다.

데이터 shape가 고민일 때

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

설정 기반 widget이 필요할 때

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

시각적 선택이 필요할 때

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

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