React 기반 디자인 시스템 컴포넌트 라이브러리입니다. Tailwind CSS v4를 사용하여 스타일링됩니다.
npm install @team-numberone/daepiro-design-system
# 또는
pnpm add @team-numberone/daepiro-design-system
# 또는
yarn add @team-numberone/daepiro-design-system.npmrc 파일에 다음을 추가하세요:
@team-numberone:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=YOUR_TOKEN
import { Button, Modal, Icons } from "@team-numberone/daepiro-design-system";
import "@team-numberone/daepiro-design-system/dist/index.css";
function App() {
return (
<div>
<Button variant="primary">버튼</Button>
<Icons.Close />
</div>
);
}다양한 variant와 크기를 지원하는 버튼 컴포넌트입니다.
import { Button } from "@team-numberone/daepiro-design-system";
<Button variant="primary">Primary 버튼</Button>
<Button variant="default">Default 버튼</Button>
<Button variant="gray">Gray 버튼</Button>
<Button disabled>비활성화</Button>
<Button full>전체 너비</Button>Props:
variant:"primary" | "default" | "gray"(기본값:"default")disabled:boolean(기본값:false)full:boolean(기본값:false)leftIcon:ReactNoderightIcon:ReactNodetype:"button" | "submit" | "reset"(기본값:"button")
모달 다이얼로그 컴포넌트입니다. 기본 사용법과 컴파운드 패턴을 지원합니다.
import { Modal } from "@team-numberone/daepiro-design-system";
// 기본 사용법
<Modal
open={isOpen}
onOpenChange={setIsOpen}
actionButton={{
label: "확인",
onClick: () => console.log("확인 클릭"),
}}
>
<h2>모달 제목</h2>
<p>모달 내용</p>
</Modal>
// 컴파운드 패턴
<Modal.Root open={isOpen} onOpenChange={setIsOpen}>
<Modal.Overlay>
<Modal.Content>
<Modal.Header>제목</Modal.Header>
<Modal.CloseButton />
<div>내용</div>
</Modal.Content>
</Modal.Overlay>
</Modal.Root>Props:
open:boolean- 모달 열림/닫힘 상태onOpenChange:(isOpen: boolean) => void- 상태 변경 핸들러size:"small" | "medium" | "large"(기본값:"medium")closeOnOverlayClick:boolean(기본값:true)closeOnEscape:boolean(기본값:true)showCloseButton:boolean(기본값:true)actionButton:{ label: string; onClick?: () => void }- 하단 액션 버튼
아이콘 컴포넌트입니다. 정적 컴포넌트와 동적 컴포넌트를 모두 지원합니다.
import { Icon, Icons } from "@team-numberone/daepiro-design-system";
// 정적 컴포넌트
<Icons.Close />
<Icons.ArrowDown size="lg" />
<Icons.Plus decorative={false} aria-label="추가" />
// 동적 컴포넌트
<Icon name="Close" size="md" />
<Icon name="ArrowDown" size={24} />사이즈:
xs: 12pxsm: 16pxmd: 24px (기본값)lg: 32pxxl: 48px- 또는 숫자로 직접 지정
Props:
size:"xs" | "sm" | "md" | "lg" | "xl" | number(기본값:"md")color:string- 아이콘 색상decorative:boolean(기본값:true) - 장식용 아이콘 여부aria-label:string-decorative={false}일 때 필요
import { colors } from "@team-numberone/daepiro-design-system";
// 실제 색상 팔레트 (디자인 토큰)
colors.O[500]; // Orange 500 - #FF6929
colors.Gre[300]; // Green 300 - #6ACF98
colors.R[500]; // Red 500 - #FA2C1F
colors.G[900]; // Gray 900 - #222530CSS 변수로 사용:
/* 실제 색상 이름 */
background-color: var(--color-orange-500);
color: var(--color-green-300);
/* 시멘틱 색상 이름 */
background-color: var(--color-primary-500); /* Orange */
color: var(--color-secondary-300); /* Green */@theme에 정의된 색상은 Tailwind 유틸리티 클래스로 바로 사용할 수 있습니다:
// 실제 색상 이름으로 사용
<div className="bg-orange-500 text-white">Orange 배경</div>
<div className="bg-green-500 text-white">Green 배경</div>
<div className="bg-red-500 text-white">Red 배경</div>
// 시멘틱 색상 이름으로 사용 (Orange → Primary, Green → Secondary, Red → Tertiary)
<div className="bg-primary-500 text-white">Primary(Orange) 배경</div>
<div className="bg-secondary-500 text-white">Secondary(Green) 배경</div>
<div className="bg-tertiary-500 text-white">Tertiary(Red) 배경</div>
// Gray 색상
<div className="bg-gray-50 text-gray-900">Gray 배경</div>
<div className="bg-gray-75">Gray-75 배경</div>
<div className="text-gray-600">Gray 텍스트</div>
// 모든 색상 스케일 사용 가능 (50-900)
<div className="bg-primary-100 hover:bg-primary-200">호버 효과</div>
<div className="bg-orange-100 hover:bg-orange-200">Orange 호버 효과</div>색상 매핑:
orange-*=primary-*(Orange → Primary)green-*=secondary-*(Green → Secondary)red-*=tertiary-*(Red → Tertiary)
import { typography } from "@team-numberone/daepiro-design-system";
typography.h1; // h1 스타일
typography["body-1"]; // body-1 스타일
typography.caption; // caption 스타일import { shadows } from "@team-numberone/daepiro-design-system";
shadows.small;
shadows.medium;
shadows.large;이 디자인 시스템은 Tailwind CSS v4를 사용하며, @theme 문법을 통해 테마를 커스터마이징할 수 있습니다.
// 색상 사용
<div className="bg-primary-500 text-white p-4 rounded-lg">
Primary 배경
</div>
// 타이포그래피 사용
<h1 className="text-h1">제목 1</h1>
<p className="text-body-1">본문 텍스트</p>디자인 시스템의 색상을 커스터마이징할 수 있습니다. 예를 들어, Primary 색상을 그린(Secondary)으로 변경:
/* globals.css */
@import "@team-numberone/daepiro-design-system/dist/index.css";
@import "tailwindcss";
/* Primary 색상을 Green으로 오버라이드 */
@theme {
--color-primary-50: var(--color-green-50);
--color-primary-100: var(--color-green-100);
--color-primary-200: var(--color-green-200);
--color-primary-300: var(--color-green-300);
--color-primary-400: var(--color-green-400);
--color-primary-500: var(--color-green-500);
--color-primary-600: var(--color-green-600);
--color-primary-700: var(--color-green-700);
--color-primary-800: var(--color-green-800);
--color-primary-900: var(--color-green-900);
}
/* 디자인 시스템 컴포넌트의 CSS 변수도 오버라이드 */
:root {
--color-primary-50: var(--color-green-50);
--color-primary-100: var(--color-green-100);
--color-primary-200: var(--color-green-200);
--color-primary-300: var(--color-green-300);
--color-primary-400: var(--color-green-400);
--color-primary-500: var(--color-green-500);
--color-primary-600: var(--color-green-600);
--color-primary-700: var(--color-green-700);
--color-primary-800: var(--color-green-800);
--color-primary-900: var(--color-green-900);
}이렇게 하면:
- 사용처의
bg-primary-500클래스가 Green 색상으로 적용됩니다 - 디자인 시스템의 Button 컴포넌트도 Green 색상을 사용합니다
- 디자인 시스템이 제공하는
--color-green-*,--color-orange-*,--color-red-*CSS 변수를 참조할 수 있습니다
@theme {
/* 완전히 새로운 색상 정의 */
--color-primary-500: #ff0000;
--color-gray-900: #1a1a1a;
/* 타이포그래피 커스터마이징 */
--font-family-sans: "Your Font", sans-serif;
}- Node.js 18 이상
- pnpm 10.25.0 이상
pnpm install# 개발 서버 실행
pnpm dev
# Storybook 실행
pnpm storybook
# 빌드
pnpm build
# 테스트 실행
pnpm test
# 테스트 커버리지
pnpm test:coverage
# 린트 및 포맷 체크
pnpm check
# 린트 및 포맷 자동 수정
pnpm check:fix
# 아이콘 생성 (SVG → React 컴포넌트)
pnpm iconssrc/
├── components/ # React 컴포넌트
├── hooks/ # 커스텀 훅
├── icons/ # 아이콘 컴포넌트
├── styles/ # Tailwind CSS 스타일 (tailwind.css)
├── tokens/ # 디자인 토큰 (colors, typography, shadows)
├── utils/ # 유틸리티 함수 (cn 등)
└── core/ # 핵심 유틸리티
컴포넌트 문서와 예제는 Storybook에서 확인할 수 있습니다.
pnpm storybook프로젝트는 Vitest를 사용하여 테스트를 작성합니다.
# 테스트 실행
pnpm test
# 테스트 감시 모드
pnpm test:watch
# 테스트 UI
pnpm test:ui
# 커버리지 리포트
pnpm test:coverage- 이슈를 생성하거나 기존 이슈를 확인하세요
- 기능 브랜치를 생성하세요 (
git checkout -b feature/amazing-feature) - 변경사항을 커밋하세요 (
git commit -m 'feat: Add amazing feature') - 브랜치에 푸시하세요 (
git push origin feature/amazing-feature) - Pull Request를 생성하세요
이 프로젝트는 Conventional Commits를 따릅니다.
feat: 새로운 기능fix: 버그 수정docs: 문서 변경style: 코드 스타일 변경 (포맷팅 등)refactor: 리팩토링test: 테스트 추가/수정chore: 빌드 설정, 의존성 등
이 프로젝트는 비공개 프로젝트입니다.
이슈나 질문이 있으시면 GitHub Issues를 통해 문의해주세요.