podo-ui 0.3.3 → 0.3.5
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.
- package/package.json +1 -1
- package/react/atom/editor.tsx +7 -10
- package/readme.md +24 -496
package/package.json
CHANGED
package/react/atom/editor.tsx
CHANGED
|
@@ -2065,22 +2065,19 @@ const Editor = ({
|
|
|
2065
2065
|
const handleDragStart = (e: DragEvent) => {
|
|
2066
2066
|
if (e.target === selectedImage) {
|
|
2067
2067
|
setIsImageEditPopupOpen(false);
|
|
2068
|
+
// 드래그 시작 시 wrapper를 즉시 제거하여 핸들이 남아있지 않도록 함
|
|
2069
|
+
deselectImage();
|
|
2068
2070
|
}
|
|
2069
2071
|
if (e.target === selectedYoutube) {
|
|
2070
2072
|
setIsYoutubeEditPopupOpen(false);
|
|
2073
|
+
deselectYoutube();
|
|
2071
2074
|
}
|
|
2072
2075
|
};
|
|
2073
2076
|
|
|
2074
|
-
// 드래그 종료 이벤트 핸들러 - 이미지/유튜브 이동 후
|
|
2075
|
-
const handleDragEnd = (
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
// 아니면 선택 해제
|
|
2079
|
-
deselectImage();
|
|
2080
|
-
}
|
|
2081
|
-
if (e.target === selectedYoutube) {
|
|
2082
|
-
deselectYoutube();
|
|
2083
|
-
}
|
|
2077
|
+
// 드래그 종료 이벤트 핸들러 - 이미지/유튜브 이동 후 선택 해제
|
|
2078
|
+
const handleDragEnd = () => {
|
|
2079
|
+
// dragStart에서 이미 선택 해제했으므로 여기서는 추가 작업 불필요
|
|
2080
|
+
// 드래그가 완료되면 자연스럽게 선택 해제 상태 유지
|
|
2084
2081
|
};
|
|
2085
2082
|
|
|
2086
2083
|
// 이벤트 리스너 등록
|
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
|
-
|
|
11
|
-
|
|
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
|
-
###
|
|
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
|
-
###
|
|
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';
|
|
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
|
-
|
|
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
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
42
|
+
- CSS 클래스 기반 디자인 시스템
|
|
43
|
+
- 반응형 그리드 시스템 (PC 12, Tablet 6, Mobile 4)
|
|
44
|
+
- 색상 시스템 및 다크 모드 지원
|
|
45
|
+
- React 컴포넌트 제공 (Input, Textarea, Editor, Field)
|
|
511
46
|
|
|
512
|
-
|
|
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
|
-
|
|
519
|
-
- 색상은 CSS 변수로 제공되며 커스터마이징 가능
|
|
520
|
-
- 필요시 `src/styles/variables.scss`에서 추가 커스터마이징 가능
|
|
49
|
+
상세한 사용법은 [공식 설명서](https://podoui.com)를 참고하세요.
|
|
521
50
|
|
|
522
|
-
|
|
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
|
-
|
|
531
|
-
- Issues: https://github.com/hada0127/podo-ui/issues
|
|
59
|
+
MIT
|