@@ -5,71 +5,132 @@ import { Meta } from "@storybook/blocks";
55# ** MOTIMO Design System**
66
77<br />
8- ## 사용가이드
98
10- [ 스토리북 배포 주소 나중에 설정 ]
9+ ## 1. 스토리북 둘러보기
1110
12- < br />
11+ ### 배포
1312
14- ## 작성법
13+ < a href = " 10th-motimo-storybook.vercel.app " >10th-motimo-storybook.vercel.app</ a >
1514
16- #### 스토리
15+ ### 사용법
1716
18- - 기본 스토리 사용 방식을 따른다 .
17+ - 사이드바에서 원하는 컴포넌트를 선택합니다 .
1918
20- - title을 통해 사이드바의 디렉토리를 구성한다 .
19+ - ** Docs ** 를 통해 컴포넌트 전체 정보를 한 눈에 볼 수 있습니다 .
2120
22- - 사용법은 다음과 같다.
21+ - 스토리별 탭은 Control, Actions, Design, Interactions, Visual tests가
22+ 존재합니다.
2323
24- ``` typescript
25- // Test.stories.tsx
26- import Test from " ./Test" ;
27- import { StoryObj } from " @storybook/react" ;
24+ - ** Controls 탭** 에서 Props 값을 확인 또는 변경해볼 수 있습니다. 각 Prop에
25+ 대한 설명도 이곳에서 볼 수 있습니다.
2826
29- // meta는 공통 옵션.
30- const meta = {
31- title: " Example/Test" ,
32- component: Test ,
33- args: {
34- children: " asdf" ,
35- },
36- };
37- export default meta ;
38-
39- type Story = StoryObj <typeof meta >;
40-
41- // Primary는 공통. argTypes를 사용해 상호작용 가능하도록 한다.
42- export const Primary: Story = {
43- argTypes: {
44- children: {
45- control: " text" ,
46- description: " 보통은 텍스트를 입력하겠지" ,
47- table: {
48- category: " 이야호" ,
49- },
50- },
51- },
52- args: {
53- children: " 버튼" ,
54- },
55- };
27+ - ** Actions 탭** 에서 이벤트 핸들러(콜백 함수)가 호출될 때 발생하는 동작을
28+ 기록하고 시각적으로 볼 수 있습니다.
5629
57- // 기타 스토리들은 args를 기본으로 간단히 처리함
58- export const Ex1: Story = {
59- args: {
60- children: " 기본값" ,
61- },
62- };
63- ```
30+ - ** Design 탭** 에서 실제 figma에 작성된 컴포넌트 디자인을 볼 수 있습니다.
31+ 스토리북에 등록된 컴포넌트와 비교해보세요.
6432
65- #### 자동화
33+ - ** Interactions 탭** 에서 각 스토리별 play함수에 등록된 상호작용 테스트 결과를
34+ 확인할 수 있습니다.
6635
67- plop.js를 사용해서 추후 story들 자동 생성 예정.
36+ - ** Visual test 탭** 에서 Chromatic과 연결해 컴포넌트 디자인 변경을 리뷰받을 수
37+ 있습니다. 변화가 unreviewed시 PR되지 않으니 주의하세요.
38+
39+ <br />
40+ 사용을 위해선 Story작성 시 이벤트 핸들러 props에 함수를 주입하면 됩니다.
41+ <br />
42+
43+ ## 2. 스토리 작성 가이드 (기여자를 위한 안내)
44+
45+ ### 스토리 파일 작성법 (` *.stories.tsx ` )
46+
47+ - ` npm run generate:story ` 혹은 ` npm run generate:story {컴포넌트 경로} ` 를 통해 컴포넌트의 스토리북 템플릿을 생성한다.
48+
49+ - ** 필수로, meta의 title을 스토리북 사이드바에 맞게 적절히 수정해야 한다**
50+
51+ - argTypes 필드를 직접 작성하지 않으면, 컴포넌트 props에 대한 type 및 interface를 보고 자동 등록됩니다.
52+
53+ ``` typescript
54+ interface TestProps {
55+ /** discription입니다*/
56+ children: ReactNode ;
57+ }
58+
59+ const Test = ({children }: TestProps )=> {
60+ ...
61+ }
62+ ```
63+
64+ - 선택적으로 커스텀 할 수 있으며, 이를 위한 내부 코드는 아래와 같이 구성된다.
65+
66+ ``` typescript
67+ // Test.stories.tsx
68+ import Test from " ./Test" ;
69+ import { StoryObj } from " @storybook/react" ;
70+
71+ /**
72+ * 1. meta는 컴포넌트별 공통 옵션입니다.
73+ */
74+ const meta = {
75+ title: " Components/Test" , // Storybook 사이드바 경로 (프로젝트 규칙에 맞게 수정)
76+ component: Test , // 컴포넌트 등록
77+ parameters: {
78+ // Canvas 레이아웃을 중앙으로 정렬하거나 패딩을 추가할 수 있습니다.
79+ layout: " centered" ,
80+ },
81+ // Docs 탭 자동 생성을 위해 필요합니다.
82+ tags: [" autodocs" ],
83+ // Controls Addon에서 Props를 어떻게 제어할지, 설명을 추가합니다.
84+ // 모든 스토리에 적용될 기본 Props (선택 사항)
85+ args: {
86+ // 예시: label: '라벨',
87+ },
88+ } satisfies Meta <typeof Test >;
89+
90+ export default meta ;
91+
92+ type Story = StoryObj <typeof meta >;
93+
94+ /**
95+ * 2. 개별 스토리 작성: 컴포넌트의 다양한 상태와 예시를 보여줍니다.
96+
97+ * 기본 UI variants들을 스토리로 작성하지만, edge case들을 작성할 수도 있습니다.
98+
99+ * 각 스토리에 맞는 args를 작성하는 것을 기본으로 합니다.
100+ */
101+
102+ // Primary: 가장 기본적인 스토리, 필수로 존재해야 합니다.
103+ // 반드시 argTypes가 존재해야 합니다. (수기로 작성하든, 비워서 자동완성 시키든)
104+ export const Primary: Story = {
105+ argTypes: {
106+ children: {
107+ control: " text" ,
108+ description: " 텍스트로 입력 될 것임." ,
109+ table: {
110+ category: " 이야호" ,
111+ },
112+ },
113+ },
114+
115+ // argTypes가 존재할 때, args는 기본값의 역할을 합니다.
116+ args: {
117+ children: " 버튼" ,
118+ },
119+ };
120+
121+ // UI variatns들을 스토리로 생성합니다.
122+ // 추가적인 스토리 예시:
123+ export const LongText: Story = {
124+ args: {
125+ children: " 동해물과백두산이마르고닳도록하느님이보우하사우리나라만세" ,
126+ },
127+ };
128+ ```
68129
69130## 디자인 토큰
70131
71- 디자인 토큰 스토리북 반영 추후 예정
132+ 디자인 토큰 스토리북 Introduction 소개에 반영 추후 예정
72133
73134## 버전
74135
75- [ 0.0.1 ] - 2025-05-21
136+ [ 0.1.0 ] - 2025-06-10
0 commit comments