podo-ui 0.3.3 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/readme.md +24 -496
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "podo-ui",
3
- "version": "0.3.3",
3
+ "version": "0.3.4",
4
4
  "type": "module",
5
5
  "author": "hada0127 <work@tarucy.net>",
6
6
  "license": "MIT",
package/readme.md CHANGED
@@ -1,31 +1,24 @@
1
- # Podo UI 사용 가이드
1
+ # Podo UI
2
2
 
3
- > SCSS Module 기반 디자인 시스템
4
- > 설명서 : https://podoui.com
5
- > 저장소: https://github.com/hada0127/podo-ui
3
+ > SCSS Module 기반 디자인 시스템
6
4
 
7
- ---
5
+ ## 설치
8
6
 
9
- ## 목차
10
- 1. [설치 및 기본 설정](#설치-및-기본-설정)
11
- 2. [컴포넌트](#컴포넌트)
12
- 3. [색상 시스템](#색상-시스템)
13
- 4. [레이아웃](#레이아웃)
14
- 5. [그리드 시스템](#그리드-시스템)
15
- 6. [타이포그래피](#타이포그래피)
16
-
17
- ---
7
+ ```bash
8
+ npm install podo-ui
9
+ ```
18
10
 
19
- ## 설치 및 기본 설정
11
+ ## 빠른 시작
20
12
 
21
- ### 1. Global SCSS 적용
13
+ ### Global SCSS 적용
22
14
 
23
15
  ```typescript
24
16
  // main.tsx
25
17
  import 'podo-ui/global.scss';
18
+ import 'podo-ui/vite-fonts.scss'; // Vite 사용 시
26
19
  ```
27
20
 
28
- ### 2. SCSS Module에서 변수/함수/믹스인 사용
21
+ ### SCSS Module에서 사용
29
22
 
30
23
  ```scss
31
24
  // component.module.scss
@@ -38,494 +31,29 @@ import 'podo-ui/global.scss';
38
31
  }
39
32
  ```
40
33
 
41
- ### 3. Vite 프로젝트 설정 (필수)
42
-
43
- ⚠️ **Vite를 사용하는 경우 폰트 경로 재정의가 필요합니다!**
44
-
45
- Vite에서는 node_modules 내의 상대 경로를 올바르게 처리하지 못할 수 있습니다. `podo-ui/vite-fonts.scss`를 추가로 import하세요:
46
-
47
- ```typescript
48
- // main.tsx
49
- import 'podo-ui/global.scss';
50
- import 'podo-ui/vite-fonts.scss'; // Vite용 폰트 경로 재정의
51
- ```
52
-
53
- 이 파일은 아이콘 폰트와 Pretendard 폰트의 경로를 Vite에서 올바르게 로드되도록 재정의합니다.
54
-
55
- **Next.js나 CRA 등 다른 번들러는 `vite-fonts.scss` 없이 사용 가능합니다.**
56
-
57
- ---
58
-
59
- ## 컴포넌트
60
-
61
34
  ### React 컴포넌트
62
35
 
63
- ⚠️ **중요: React 컴포넌트는 `podo-ui/react`에서 import해야 합니다!**
64
-
65
- podo-ui는 주로 CSS 클래스 기반이지만, 몇 가지 React 컴포넌트를 제공합니다:
66
-
67
- #### Input
68
-
69
- ```tsx
70
- import { Input } from 'podo-ui/react'; // ⚠️ 'podo-ui/react' 경로 사용!
71
-
72
- <Input
73
- type="text"
74
- placeholder="입력하세요"
75
- value={value}
76
- onChange={handleChange}
77
- validator={zodSchema} // Zod 스키마로 유효성 검사
78
- withIcon="icon-search" // 왼쪽 아이콘
79
- withRightIcon="icon-clear" // 오른쪽 아이콘
80
- unit="원" // 단위 표시
81
- />
82
- ```
83
-
84
- **Props:**
85
- - `value`: string | number
86
- - `validator`: Zod 스키마 (선택)
87
- - `withIcon`: 왼쪽 아이콘 클래스명
88
- - `withRightIcon`: 오른쪽 아이콘 클래스명
89
- - `unit`: 단위 문자열
90
- - 기타 HTML input 속성 전부 지원
91
-
92
- #### Textarea
93
-
94
36
  ```tsx
95
- import { Textarea } from 'podo-ui/react'; // ⚠️ 'podo-ui/react' 경로 사용!
96
-
97
- <Textarea
98
- placeholder="내용을 입력하세요"
99
- value={value}
100
- onChange={handleChange}
101
- rows={5}
102
- />
103
- ```
104
-
105
- #### Editor (WYSIWYG)
106
-
107
- ```tsx
108
- import { Editor } from 'podo-ui/react'; // ⚠️ 'podo-ui/react' 경로 사용!
109
-
110
- <Editor
111
- value={content}
112
- onChange={handleChange}
113
- />
114
- ```
115
-
116
- #### Field (Form 그룹)
117
-
118
- ```tsx
119
- import { Field, Input } from 'podo-ui/react'; // ⚠️ 'podo-ui/react' 경로 사용!
120
-
121
- <Field
122
- label="이름"
123
- required
124
- error="이름을 입력해주세요"
125
- >
126
- <Input type="text" />
127
- </Field>
128
- ```
129
-
130
- ---
131
-
132
- ## 색상 시스템
133
-
134
- ### 사용 가능한 색상 타입
135
-
136
- - `primary` - 주요 색상
137
- - `default` - 기본 색상
138
- - `default-deep` - 진한 기본 색상
139
- - `info` - 정보 색상
140
- - `link` - 링크 색상
141
- - `success` - 성공 색상
142
- - `warning` - 경고 색상
143
- - `danger` - 위험 색상
144
-
145
- ### 색상 변형
146
-
147
- 각 색상은 다음 변형을 가집니다:
148
- - `{color}` - 기본
149
- - `{color}-hover` - 호버 상태
150
- - `{color}-pressed` - 눌림 상태
151
- - `{color}-focus` - 포커스 상태
152
- - `{color}-fill` - 배경 색상
153
- - `{color}-reverse` - 반전 색상
154
- - `{color}-outline` - 아웃라인 색상
155
-
156
- ### CSS 클래스 사용
157
-
158
- ```html
159
- <!-- 텍스트 색상 -->
160
- <div class="primary">Primary 색상 텍스트</div>
161
-
162
- <!-- 배경 색상 -->
163
- <div class="bg-primary">Primary 배경</div>
164
-
165
- <!-- 테두리 색상 -->
166
- <div class="border-primary">Primary 테두리</div>
167
- ```
168
-
169
- ### SCSS 함수 사용
170
-
171
- ```scss
172
- .myButton {
173
- color: color(primary-reverse);
174
- background-color: color(primary);
175
- border: 1px solid color(primary);
176
-
177
- &:hover {
178
- background-color: color(primary-hover);
179
- }
180
- }
181
- ```
182
-
183
- ### 커스텀 색상 설정 (프로젝트에 이미 적용됨)
184
-
185
- ```scss
186
- // src/styles/variables.scss
187
- :root {
188
- --color-primary: #2D6AF6;
189
- --color-primary-hover: #1F61E6;
190
- --color-primary-pressed: #004AC3;
191
- --color-primary-focus: #1F61E6;
192
- --color-primary-fill: #ECF1FF;
193
- --color-primary-reverse: #FFFFFF;
194
- --color-primary-outline: rgba(31, 97, 230, 0.3);
195
- }
196
-
197
- html[data-color-mode='dark'] {
198
- --color-primary: #4D79FF;
199
- --color-primary-hover: #7393FF;
200
- // ...
201
- }
202
- ```
203
-
204
- ### 다크 모드 설정
205
-
206
- ```typescript
207
- // Light 모드
208
- document.documentElement.setAttribute('data-color-mode', 'light');
209
-
210
- // Dark 모드
211
- document.documentElement.setAttribute('data-color-mode', 'dark');
212
-
213
- // 자동 (브라우저 설정 따름)
214
- document.documentElement.setAttribute('data-color-mode', '');
215
- ```
216
-
217
- ### 색상 톤 설정
218
-
219
- ```typescript
220
- // 기본 톤
221
- document.documentElement.setAttribute('data-color-tone', '');
222
-
223
- // Warm 톤
224
- document.documentElement.setAttribute('data-color-tone', 'warm');
225
- ```
226
-
227
- ---
228
-
229
- ## 버튼
230
-
231
- ### 기본 버튼
232
-
233
- ```html
234
- <button>기본 버튼</button>
235
- <button class="primary">Primary 버튼</button>
236
- <button class="info">Info 버튼</button>
237
- <button class="success">Success 버튼</button>
238
- <button class="warning">Warning 버튼</button>
239
- <button class="danger">Danger 버튼</button>
240
- <button class="default-deep">Default Deep 버튼</button>
241
- <button class="link">Link 버튼</button>
242
- <button disabled>비활성화</button>
243
- ```
244
-
245
- ### 버튼 변형
246
-
247
- ```html
248
- <!-- Fill 스타일 (배경색 연함) -->
249
- <button class="primary-fill">Primary Fill</button>
250
- <button class="info-fill">Info Fill</button>
251
-
252
- <!-- Border 스타일 (테두리만) -->
253
- <button class="primary-border">Primary Border</button>
254
- <button class="info-border">Info Border</button>
255
-
256
- <!-- Text 스타일 (텍스트만) -->
257
- <button class="primary-text">Primary Text</button>
258
- <button class="info-text">Info Text</button>
259
- ```
260
-
261
- ### 버튼 크기 (CSS 직접 지정)
262
-
263
- ```html
264
- <button class="primary" style="padding: 0.5rem 1rem; font-size: 0.875rem">Small</button>
265
- <button class="primary" style="padding: 0.75rem 1.5rem; font-size: 1rem">Medium</button>
266
- <button class="primary" style="padding: 1rem 2rem; font-size: 1.125rem">Large</button>
267
- ```
268
-
269
- ---
270
-
271
- ## 레이아웃
272
-
273
- ### 여백 (Spacing)
274
-
275
- **클래스 사용:**
276
- ```html
277
- <div class="spacing-4">여백 4</div>
278
- <div class="spacing-8">여백 8</div>
279
- ```
280
-
281
- **SCSS 함수 사용:**
282
- ```scss
283
- .container {
284
- margin: s(4);
285
- padding: s(8);
286
- gap: s(2);
287
- }
288
- ```
289
-
290
- **사용 가능한 값:** 0 ~ 13
291
-
292
- ### 테두리 반경 (Border Radius)
293
-
294
- **클래스 사용:**
295
- ```html
296
- <div class="r-2">작은 모서리</div>
297
- <div class="r-4">중간 모서리</div>
298
- <div class="r-full">완전한 원</div>
299
- ```
300
-
301
- **SCSS 함수 사용:**
302
- ```scss
303
- .card {
304
- border-radius: r(4);
305
- }
306
- ```
307
-
308
- **사용 가능한 값:** 0 ~ 6, 'full'
309
-
310
- ### 테두리 두께 (Border)
311
-
312
- **클래스 사용:**
313
- ```html
314
- <div class="border-1">테두리 1px</div>
315
- <div class="border-4">테두리 4px</div>
37
+ import { Input, Textarea, Editor, Field } from 'podo-ui/react';
316
38
  ```
317
39
 
318
- **SCSS 함수 사용:**
319
- ```scss
320
- .box {
321
- border-width: border(2);
322
- }
323
- ```
324
-
325
- **사용 가능한 값:** 0 ~ 4
326
-
327
- ---
328
-
329
- ## 그리드 시스템
330
-
331
- ### 기본 그리드 (Auto Wrap)
332
-
333
- ```html
334
- <section class="grid">
335
- <div class="w-4">4/12 (33.33%)</div>
336
- <div class="w-4">4/12 (33.33%)</div>
337
- <div class="w-4">4/12 (33.33%)</div>
338
- <div class="w-6">6/12 (50%)</div>
339
- <div class="w-6">6/12 (50%)</div>
340
- </section>
341
- ```
342
-
343
- **특징:**
344
- - PC: 12 그리드
345
- - Tablet: 6 그리드
346
- - Mobile: 4 그리드
347
- - 자동 줄바꿈
348
-
349
- **사용 가능한 클래스:** `w-1` ~ `w-12`
350
-
351
- ### 고정 그리드 (Fixed Columns)
352
-
353
- ```html
354
- <!-- 4열 고정 그리드 -->
355
- <section class="grid-fix-4">
356
- <div class="w-1_4">25%</div>
357
- <div class="w-2_4">50%</div>
358
- <div class="w-1_4">25%</div>
359
- </section>
360
-
361
- <!-- 6열 고정 그리드 -->
362
- <section class="grid-fix-6">
363
- <div class="w-2_6">33.33%</div>
364
- <div class="w-4_6">66.67%</div>
365
- </section>
366
- ```
367
-
368
- **사용 가능한 그리드:** `grid-fix-2` ~ `grid-fix-6`
369
-
370
- ---
371
-
372
- ## 폼 요소
373
-
374
- ### 입력 필드
375
-
376
- ```html
377
- <input type="text" placeholder="텍스트 입력">
378
- <input type="email" placeholder="이메일">
379
- <input type="password" placeholder="비밀번호">
380
- ```
381
-
382
- ### Select
383
-
384
- ```html
385
- <select>
386
- <option>옵션 1</option>
387
- <option>옵션 2</option>
388
- <option>옵션 3</option>
389
- </select>
390
- ```
391
-
392
- ### Textarea
393
-
394
- ```html
395
- <textarea rows="5" placeholder="내용을 입력하세요"></textarea>
396
- ```
397
-
398
- ### Checkbox & Radio
399
-
400
- ```html
401
- <input type="checkbox" id="check1">
402
- <label for="check1">체크박스</label>
403
-
404
- <input type="radio" name="radio" id="radio1">
405
- <label for="radio1">라디오 1</label>
406
- ```
407
-
408
- ### Toggle
409
-
410
- ```html
411
- <input type="checkbox" class="toggle" id="toggle1">
412
- <label for="toggle1">토글 스위치</label>
413
- ```
414
-
415
- ---
416
-
417
- ## 분자 컴포넌트 (Molecule)
418
-
419
- ### Pagination
420
-
421
- ```html
422
- <nav class="pagination">
423
- <button class="prev">이전</button>
424
- <button class="active">1</button>
425
- <button>2</button>
426
- <button>3</button>
427
- <button class="next">다음</button>
428
- </nav>
429
- ```
430
-
431
- ### Tab
432
-
433
- ```html
434
- <div class="tab">
435
- <button class="active">탭 1</button>
436
- <button>탭 2</button>
437
- <button>탭 3</button>
438
- </div>
439
- ```
440
-
441
- ### Table
442
-
443
- ```html
444
- <table>
445
- <thead>
446
- <tr>
447
- <th>제목 1</th>
448
- <th>제목 2</th>
449
- </tr>
450
- </thead>
451
- <tbody>
452
- <tr>
453
- <td>데이터 1</td>
454
- <td>데이터 2</td>
455
- </tr>
456
- </tbody>
457
- </table>
458
- ```
459
-
460
- ---
461
-
462
- ## 타이포그래피
463
-
464
- ### 폰트 패밀리 설정
465
-
466
- ```scss
467
- :root {
468
- --base-font-family: 'Pretendard', sans-serif;
469
- }
470
- ```
471
-
472
- ### 헤딩
473
-
474
- ```html
475
- <h1>Heading 1</h1>
476
- <h2>Heading 2</h2>
477
- <h3>Heading 3</h3>
478
- <h4>Heading 4</h4>
479
- <h5>Heading 5</h5>
480
- <h6>Heading 6</h6>
481
- ```
482
-
483
- ---
484
-
485
- ## 주의사항
486
-
487
- 1. **⚠️ Import 경로 (매우 중요!)**
488
- ```tsx
489
- // ✅ 올바른 방법 - React 컴포넌트는 'podo-ui/react'에서
490
- import { Input, Textarea, Editor, Field } from 'podo-ui/react';
491
-
492
- // ❌ 잘못된 방법 - 이렇게 하면 오류 발생!
493
- import { Input } from 'podo-ui';
494
-
495
- // Global SCSS
496
- import 'podo-ui/global.scss';
497
-
498
- // SCSS Module에서 믹스인
499
- @use 'podo-ui/mixin' as *;
500
- ```
501
-
502
- 2. **CSS 클래스 vs React 컴포넌트**
503
- - podo-ui는 주로 CSS 클래스 기반 시스템입니다
504
- - Button, Alert 등은 **컴포넌트가 없습니다** - HTML 요소에 클래스를 적용하여 사용
505
- - React 컴포넌트는 **Input, Textarea, Editor, Field만** 제공됩니다
40
+ ## 주요 기능
506
41
 
507
- ```tsx
508
- // 잘못된 사용 (Button 컴포넌트 없음)
509
- import { Button } from 'podo-ui/react';
510
- <Button color="primary">버튼</Button>
42
+ - CSS 클래스 기반 디자인 시스템
43
+ - 반응형 그리드 시스템 (PC 12, Tablet 6, Mobile 4)
44
+ - 색상 시스템 다크 모드 지원
45
+ - React 컴포넌트 제공 (Input, Textarea, Editor, Field)
511
46
 
512
- // ✅ 올바른 사용 (HTML + CSS 클래스)
513
- <button className="primary">Primary 버튼</button>
514
- <button className="info-fill">Info Fill 버튼</button>
515
- <button className="danger-border">Danger Border 버튼</button>
516
- ```
47
+ ## 문서
517
48
 
518
- 3. **색상 시스템**
519
- - 색상은 CSS 변수로 제공되며 커스터마이징 가능
520
- - 필요시 `src/styles/variables.scss`에서 추가 커스터마이징 가능
49
+ 상세한 사용법은 [공식 설명서](https://podoui.com)를 참고하세요.
521
50
 
522
- 4. **반응형**
523
- - 그리드 시스템은 자동으로 반응형 지원
524
- - PC(12), Tablet(6), Mobile(4) 그리드로 자동 변경
51
+ ## 링크
525
52
 
526
- ---
53
+ - [공식 설명서](https://podoui.com)
54
+ - [GitHub 저장소](https://github.com/hada0127/podo-ui)
55
+ - [이슈 제보](https://github.com/hada0127/podo-ui/issues)
527
56
 
528
- ## 참고 링크
57
+ ## 라이선스
529
58
 
530
- - GitHub: https://github.com/hada0127/podo-ui
531
- - Issues: https://github.com/hada0127/podo-ui/issues
59
+ MIT