podo-ui 0.1.46 → 0.2.0

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 (64) hide show
  1. package/package.json +2 -2
  2. package/react/atom/pagination.module.scss +61 -0
  3. package/react/atom/pagination.tsx +87 -0
  4. package/react.ts +2 -1
  5. package/readme.md +3 -3
  6. package/scss/color/theme.scss +92 -0
  7. package/scss/form/checkbox-radio.scss +48 -0
  8. package/scss/form/toggle.scss +16 -0
  9. package/scss/layout/bg-elevation.scss +14 -0
  10. package/scss/reset.scss +2 -0
  11. package/.prettierignore +0 -9
  12. package/.prettierrc +0 -8
  13. package/ARCHITECTURE.md +0 -727
  14. package/cli/icon-scss.js +0 -56
  15. package/eslint.config.js +0 -26
  16. package/index.html +0 -12
  17. package/next-env.d.ts +0 -5
  18. package/next.config.mjs +0 -10
  19. package/public/logo.svg +0 -57
  20. package/src/app/components/button/page.module.scss +0 -253
  21. package/src/app/components/button/page.tsx +0 -366
  22. package/src/app/components/checkbox-radio/page.module.scss +0 -95
  23. package/src/app/components/checkbox-radio/page.tsx +0 -265
  24. package/src/app/components/input/page.module.scss +0 -112
  25. package/src/app/components/input/page.tsx +0 -196
  26. package/src/app/components/select/page.module.scss +0 -90
  27. package/src/app/components/select/page.tsx +0 -225
  28. package/src/app/components/textarea/page.module.scss +0 -81
  29. package/src/app/components/textarea/page.tsx +0 -103
  30. package/src/app/foundation/colors/page.module.scss +0 -370
  31. package/src/app/foundation/colors/page.tsx +0 -200
  32. package/src/app/foundation/icons/page.module.scss +0 -229
  33. package/src/app/foundation/icons/page.tsx +0 -229
  34. package/src/app/foundation/spacing/page.module.scss +0 -258
  35. package/src/app/foundation/spacing/page.tsx +0 -289
  36. package/src/app/foundation/typography/page.module.scss +0 -148
  37. package/src/app/foundation/typography/page.tsx +0 -207
  38. package/src/app/getting-started/installation/page.module.scss +0 -157
  39. package/src/app/getting-started/installation/page.tsx +0 -154
  40. package/src/app/getting-started/usage/page.module.scss +0 -209
  41. package/src/app/getting-started/usage/page.tsx +0 -242
  42. package/src/app/home.module.scss +0 -541
  43. package/src/app/layout/grid/page.module.scss +0 -178
  44. package/src/app/layout/grid/page.tsx +0 -217
  45. package/src/app/layout/responsive/page.module.scss +0 -237
  46. package/src/app/layout/responsive/page.tsx +0 -279
  47. package/src/app/layout.module.scss +0 -14
  48. package/src/app/layout.tsx +0 -30
  49. package/src/app/page.module.scss +0 -71
  50. package/src/app/page.tsx +0 -284
  51. package/src/components/CodeBlock.module.scss +0 -29
  52. package/src/components/CodeBlock.tsx +0 -18
  53. package/src/components/Navigation.module.scss +0 -104
  54. package/src/components/Navigation.tsx +0 -96
  55. package/src/components/PageHeader.module.scss +0 -24
  56. package/src/components/PageHeader.tsx +0 -17
  57. package/src/components/ThemeToggle.module.scss +0 -34
  58. package/src/components/ThemeToggle.tsx +0 -47
  59. package/src/styles/custom.scss +0 -11
  60. package/src/styles/doc-common.scss +0 -119
  61. package/src/styles/font-family.scss +0 -80
  62. package/src/styles/icon.scss +0 -5
  63. package/src/vite-env.d.ts +0 -1
  64. package/tsconfig.json +0 -26
@@ -1,366 +0,0 @@
1
- import PageHeader from '@/components/PageHeader';
2
- import styles from './page.module.scss';
3
-
4
- export default function Button() {
5
- const variants = [
6
- { name: 'primary', label: 'Primary', description: '주요 액션' },
7
- { name: 'default', label: 'Default', description: '기본 버튼' },
8
- { name: 'info', label: 'Info', description: '정보성 액션' },
9
- { name: 'link', label: 'Link', description: '링크형 액션' },
10
- { name: 'success', label: 'Success', description: '성공/완료 액션' },
11
- { name: 'warning', label: 'Warning', description: '경고 액션' },
12
- { name: 'danger', label: 'Danger', description: '위험/삭제 액션' },
13
- ];
14
-
15
- const buttonStyles = [
16
- { suffix: '', label: 'Solid', description: '기본 스타일' },
17
- { suffix: '-fill', label: 'Fill', description: '연한 배경' },
18
- { suffix: '-border', label: 'Border', description: '테두리만' },
19
- { suffix: '-text', label: 'Text', description: '텍스트만' },
20
- ];
21
-
22
- return (
23
- <>
24
- <PageHeader
25
- title="버튼"
26
- description="Podo UI의 버튼 컴포넌트와 다양한 변형 사용법을 안내합니다"
27
- />
28
-
29
- <section className={styles.section}>
30
- <h2>기본 사용법</h2>
31
- <p>
32
- HTML button 태그에 컬러 클래스를 추가하여 버튼을 만들 수 있습니다.
33
- 클래스명만으로 다양한 스타일의 버튼을 구현할 수 있습니다.
34
- </p>
35
-
36
- <div className={styles.codeBlock}>
37
- <div className={styles.codeHeader}>HTML</div>
38
- <pre><code>{`<button>기본 버튼</button>
39
- <button class="primary">Primary 버튼</button>
40
- <button class="danger">Danger 버튼</button>
41
- <button disabled>비활성화 버튼</button>`}</code></pre>
42
- </div>
43
-
44
- <div className={styles.demo}>
45
- <div className={styles.demoTitle}>실제 예제:</div>
46
- <div className={styles.buttonGroup}>
47
- <button>기본 버튼</button>
48
- <button className="primary">Primary 버튼</button>
49
- <button className="danger">Danger 버튼</button>
50
- <button disabled>비활성화 버튼</button>
51
- </div>
52
- </div>
53
- </section>
54
-
55
- <section className={styles.section}>
56
- <h2>버튼 변형</h2>
57
- <p>7가지 시맨틱 컬러로 다양한 목적의 버튼을 만들 수 있습니다:</p>
58
-
59
- <div className={styles.variantsShowcase}>
60
- {variants.map((variant) => (
61
- <div key={variant.name} className={styles.variantCard}>
62
- <div className={styles.variantHeader}>
63
- <h3>{variant.label}</h3>
64
- <p>{variant.description}</p>
65
- </div>
66
- <button className={variant.name}>{variant.label} 버튼</button>
67
- </div>
68
- ))}
69
- </div>
70
-
71
- <div className={styles.codeBlock}>
72
- <div className={styles.codeHeader}>HTML</div>
73
- <pre><code>{`<button class="primary">Primary</button>
74
- <button class="default">Default</button>
75
- <button class="info">Info</button>
76
- <button class="link">Link</button>
77
- <button class="success">Success</button>
78
- <button class="warning">Warning</button>
79
- <button class="danger">Danger</button>`}</code></pre>
80
- </div>
81
- </section>
82
-
83
- <section className={styles.section}>
84
- <h2>버튼 스타일</h2>
85
- <p>각 컬러 변형마다 4가지 스타일(Solid, Fill, Border, Text)을 사용할 수 있습니다:</p>
86
-
87
- {buttonStyles.map((style) => (
88
- <div key={style.suffix} className={styles.styleSection}>
89
- <h3>{style.label} Style</h3>
90
- <p>{style.description}</p>
91
-
92
- <div className={styles.buttonGroup}>
93
- {variants.map((variant) => (
94
- <button key={variant.name} className={`${variant.name}${style.suffix}`}>
95
- {variant.label}
96
- </button>
97
- ))}
98
- </div>
99
-
100
- <div className={styles.codeBlock}>
101
- <pre><code>{`<button class="primary${style.suffix}">${style.label}</button>
102
- <button class="success${style.suffix}">${style.label}</button>
103
- <button class="danger${style.suffix}">${style.label}</button>`}</code></pre>
104
- </div>
105
- </div>
106
- ))}
107
- </section>
108
-
109
- <section className={styles.section}>
110
- <h2>버튼 크기</h2>
111
- <p>CSS를 사용하여 버튼의 크기를 조절할 수 있습니다:</p>
112
-
113
- <div className={styles.codeBlock}>
114
- <div className={styles.codeHeader}>HTML</div>
115
- <pre><code>{`<!-- Small -->
116
- <button class="primary xs">
117
- xs Button
118
- </button>
119
-
120
- <button class="primary sm">
121
- sm Button
122
- </button>
123
-
124
- <button class="primary md">
125
- md Button
126
- </button>
127
-
128
- <button class="primary lg">
129
- lg Button
130
- </button>
131
-
132
- `}</code></pre>
133
- </div>
134
-
135
- <div className={styles.demo}>
136
- <div className={styles.demoTitle}>실제 예제:</div>
137
- <div className={styles.sizeDemo}>
138
- <button className="primary xs">
139
- xs Button
140
- </button>
141
-
142
- <button className="primary sm">
143
- sm Button
144
- </button>
145
-
146
- <button className="primary md">
147
- md Button
148
- </button>
149
-
150
- <button className="primary lg">
151
- lg Button
152
- </button>
153
- </div>
154
- </div>
155
- </section>
156
-
157
- <section className={styles.section}>
158
- <h2>아이콘과 함께 사용</h2>
159
- <p>버튼 내부에 아이콘을 추가하여 더욱 직관적인 UI를 만들 수 있습니다:</p>
160
-
161
- <div className={styles.codeBlock}>
162
- <div className={styles.codeHeader}>HTML</div>
163
- <pre><code>{`<button class="primary">
164
- <i class="icon-plus"></i>
165
- 새로 만들기
166
- </button>
167
-
168
- <button class="success">
169
- <i class="icon-check"></i>
170
- 확인
171
- </button>
172
-
173
- <button class="danger">
174
- <i class="icon-trash"></i>
175
- 삭제
176
- </button>
177
-
178
- <!-- 아이콘만 -->
179
- <button class="primary">
180
- <i class="icon-search"></i>
181
- </button>`}</code></pre>
182
- </div>
183
-
184
- <div className={styles.demo}>
185
- <div className={styles.demoTitle}>실제 예제:</div>
186
- <div className={styles.iconButtonDemo}>
187
- <button className="primary">
188
- <i className="icon-plus"></i>
189
- 새로 만들기
190
- </button>
191
- <button className="success">
192
- <i className="icon-check"></i>
193
- 확인
194
- </button>
195
- <button className="danger">
196
- <i className="icon-trash"></i>
197
- 삭제
198
- </button>
199
- <button className="info">
200
- <i className="icon-download"></i>
201
- 다운로드
202
- </button>
203
- <button className="primary">
204
- <i className="icon-search"></i>
205
- </button>
206
- <button className="danger">
207
- <i className="icon-close"></i>
208
- </button>
209
- </div>
210
- </div>
211
- </section>
212
-
213
- <section className={styles.section}>
214
- <h2>비활성화 상태</h2>
215
- <p>disabled 속성을 추가하여 버튼을 비활성화할 수 있습니다:</p>
216
-
217
- <div className={styles.codeBlock}>
218
- <div className={styles.codeHeader}>HTML</div>
219
- <pre><code>{`<button class="primary" disabled>Disabled</button>
220
- <button class="success" disabled>Disabled</button>
221
- <button class="danger" disabled>Disabled</button>`}</code></pre>
222
- </div>
223
-
224
- <div className={styles.demo}>
225
- <div className={styles.demoTitle}>실제 예제:</div>
226
- <div className={styles.buttonGroup}>
227
- <button className="primary" disabled>Primary</button>
228
- <button className="default" disabled>Default</button>
229
- <button className="success" disabled>Success</button>
230
- <button className="danger" disabled>Danger</button>
231
- </div>
232
- </div>
233
- </section>
234
-
235
- <section className={styles.section}>
236
- <h2>버튼 그룹</h2>
237
- <p>여러 버튼을 그룹으로 묶어 사용할 수 있습니다:</p>
238
-
239
- <div className={styles.codeBlock}>
240
- <div className={styles.codeHeader}>HTML</div>
241
- <pre><code>{`<div style="display: flex; gap: 0.5rem;">
242
- <button class="primary">저장</button>
243
- <button class="default">취소</button>
244
- </div>
245
-
246
- <div style="display: flex; gap: 0.5rem;">
247
- <button class="primary">
248
- <i class="icon-arrow-left"></i>
249
- 이전
250
- </button>
251
- <button class="primary">
252
- 다음
253
- <i class="icon-arrow-right"></i>
254
- </button>
255
- </div>`}</code></pre>
256
- </div>
257
-
258
- <div className={styles.demo}>
259
- <div className={styles.demoTitle}>실제 예제:</div>
260
- <div className={styles.groupDemo}>
261
- <div className={styles.buttonRow}>
262
- <button className="primary">저장</button>
263
- <button className="default">취소</button>
264
- </div>
265
- <div className={styles.buttonRow}>
266
- <button className="primary">
267
- <i className="icon-arrow-left"></i>
268
- 이전
269
- </button>
270
- <button className="primary">
271
- 다음
272
- <i className="icon-arrow-right"></i>
273
- </button>
274
- </div>
275
- </div>
276
- </div>
277
- </section>
278
-
279
- <section className={styles.section}>
280
- <h2>SCSS에서 사용하기</h2>
281
- <p>SCSS 모듈에서 버튼 스타일을 커스터마이징할 수 있습니다:</p>
282
-
283
- <div className={styles.codeBlock}>
284
- <div className={styles.codeHeader}>component.module.scss</div>
285
- <pre><code>{`@use 'podo-ui/mixin' as *;
286
-
287
- .customButton {
288
- display: flex;
289
- align-items: center;
290
- gap: s(2);
291
- padding: s(3) s(5);
292
- background: color(primary-base);
293
- color: color(primary-reverse);
294
- border: none;
295
- border-radius: r(3);
296
- cursor: pointer;
297
- transition: all 0.3s;
298
-
299
- &:hover {
300
- background: color(primary-hover);
301
- transform: translateY(-2px);
302
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
303
- }
304
-
305
- &:active {
306
- background: color(primary-pressed);
307
- transform: translateY(0);
308
- }
309
-
310
- &:disabled {
311
- opacity: 0.5;
312
- cursor: not-allowed;
313
- transform: none;
314
- }
315
-
316
- i {
317
- font-size: 16px;
318
- }
319
- }
320
-
321
- .iconOnlyButton {
322
- width: 40px;
323
- height: 40px;
324
- display: flex;
325
- align-items: center;
326
- justify-content: center;
327
- padding: 0;
328
- background: color(primary-fill);
329
- color: color(primary-base);
330
- border: 1px solid color(primary-outline);
331
- border-radius: r(2);
332
- cursor: pointer;
333
- transition: all 0.3s;
334
-
335
- &:hover {
336
- background: color(primary-base);
337
- color: color(primary-reverse);
338
- }
339
- }`}</code></pre>
340
- </div>
341
- </section>
342
-
343
- <section className={styles.section}>
344
- <h2>전체 변형 쇼케이스</h2>
345
- <p>모든 컬러 변형과 스타일을 한눈에 확인하세요:</p>
346
-
347
- <div className={styles.showcase}>
348
- {variants.map((variant) => (
349
- <div key={variant.name} className={styles.showcaseRow}>
350
- <div className={styles.showcaseLabel}>
351
- <strong>{variant.label}</strong>
352
- <span>{variant.description}</span>
353
- </div>
354
- <div className={styles.showcaseButtons}>
355
- <button className={variant.name}>Solid</button>
356
- <button className={`${variant.name}-fill`}>Fill</button>
357
- <button className={`${variant.name}-border`}>Border</button>
358
- <button className={`${variant.name}-text`}>Text</button>
359
- </div>
360
- </div>
361
- ))}
362
- </div>
363
- </section>
364
- </>
365
- );
366
- }
@@ -1,95 +0,0 @@
1
- @use '../../../../mixin' as *;
2
-
3
- .section {
4
- margin-bottom: s(10);
5
-
6
- h2 {
7
- @include display5;
8
- margin: 0 0 s(5) 0;
9
- color: color(default-deep-base);
10
- }
11
-
12
- p {
13
- @include p2;
14
- color: color(default-base);
15
- line-height: 1.8;
16
- margin: 0 0 s(5) 0;
17
-
18
- code {
19
- @include p3;
20
- font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
21
- color: color(primary);
22
- background: color(primary-fill);
23
- padding: 2px 6px;
24
- border-radius: r(1);
25
- }
26
- }
27
- }
28
-
29
- .codeBlock {
30
- background: color(default-deep-base);
31
- border-radius: r(4);
32
- overflow: hidden;
33
- margin-bottom: s(4);
34
-
35
- .codeHeader {
36
- padding: s(3) s(5);
37
- background: rgba(0, 0, 0, 0.2);
38
- border-bottom: 1px solid rgba(255, 255, 255, 0.1);
39
- @include p4-semibold;
40
- color: rgba(255, 255, 255, 0.7);
41
- }
42
-
43
- pre {
44
- margin: 0;
45
- padding: s(5);
46
- overflow-x: auto;
47
-
48
- code {
49
- @include p3;
50
- font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
51
- color: #f8f8f2;
52
- white-space: pre;
53
- }
54
- }
55
- }
56
-
57
- .demo {
58
- margin-top: s(5);
59
- padding: s(5);
60
- background: color(default-fill);
61
- border: 1px solid color(default-outline);
62
- border-radius: r(4);
63
- }
64
-
65
- .demoTitle {
66
- @include p3-semibold;
67
- margin-bottom: s(4);
68
- color: color(default-deep-base);
69
- }
70
-
71
- .checkboxGroup {
72
- display: flex;
73
- flex-direction: column;
74
- gap: s(3);
75
-
76
- label {
77
- display: flex;
78
- align-items: center;
79
- @include p3;
80
- color: color(default-deep-base);
81
- }
82
- }
83
-
84
- .radioGroup {
85
- display: flex;
86
- flex-direction: column;
87
- gap: s(3);
88
-
89
- label {
90
- display: flex;
91
- align-items: center;
92
- @include p3;
93
- color: color(default-deep-base);
94
- }
95
- }