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.
- package/package.json +2 -2
- package/react/atom/pagination.module.scss +61 -0
- package/react/atom/pagination.tsx +87 -0
- package/react.ts +2 -1
- package/readme.md +3 -3
- package/scss/color/theme.scss +92 -0
- package/scss/form/checkbox-radio.scss +48 -0
- package/scss/form/toggle.scss +16 -0
- package/scss/layout/bg-elevation.scss +14 -0
- package/scss/reset.scss +2 -0
- package/.prettierignore +0 -9
- package/.prettierrc +0 -8
- package/ARCHITECTURE.md +0 -727
- package/cli/icon-scss.js +0 -56
- package/eslint.config.js +0 -26
- package/index.html +0 -12
- package/next-env.d.ts +0 -5
- package/next.config.mjs +0 -10
- package/public/logo.svg +0 -57
- package/src/app/components/button/page.module.scss +0 -253
- package/src/app/components/button/page.tsx +0 -366
- package/src/app/components/checkbox-radio/page.module.scss +0 -95
- package/src/app/components/checkbox-radio/page.tsx +0 -265
- package/src/app/components/input/page.module.scss +0 -112
- package/src/app/components/input/page.tsx +0 -196
- package/src/app/components/select/page.module.scss +0 -90
- package/src/app/components/select/page.tsx +0 -225
- package/src/app/components/textarea/page.module.scss +0 -81
- package/src/app/components/textarea/page.tsx +0 -103
- package/src/app/foundation/colors/page.module.scss +0 -370
- package/src/app/foundation/colors/page.tsx +0 -200
- package/src/app/foundation/icons/page.module.scss +0 -229
- package/src/app/foundation/icons/page.tsx +0 -229
- package/src/app/foundation/spacing/page.module.scss +0 -258
- package/src/app/foundation/spacing/page.tsx +0 -289
- package/src/app/foundation/typography/page.module.scss +0 -148
- package/src/app/foundation/typography/page.tsx +0 -207
- package/src/app/getting-started/installation/page.module.scss +0 -157
- package/src/app/getting-started/installation/page.tsx +0 -154
- package/src/app/getting-started/usage/page.module.scss +0 -209
- package/src/app/getting-started/usage/page.tsx +0 -242
- package/src/app/home.module.scss +0 -541
- package/src/app/layout/grid/page.module.scss +0 -178
- package/src/app/layout/grid/page.tsx +0 -217
- package/src/app/layout/responsive/page.module.scss +0 -237
- package/src/app/layout/responsive/page.tsx +0 -279
- package/src/app/layout.module.scss +0 -14
- package/src/app/layout.tsx +0 -30
- package/src/app/page.module.scss +0 -71
- package/src/app/page.tsx +0 -284
- package/src/components/CodeBlock.module.scss +0 -29
- package/src/components/CodeBlock.tsx +0 -18
- package/src/components/Navigation.module.scss +0 -104
- package/src/components/Navigation.tsx +0 -96
- package/src/components/PageHeader.module.scss +0 -24
- package/src/components/PageHeader.tsx +0 -17
- package/src/components/ThemeToggle.module.scss +0 -34
- package/src/components/ThemeToggle.tsx +0 -47
- package/src/styles/custom.scss +0 -11
- package/src/styles/doc-common.scss +0 -119
- package/src/styles/font-family.scss +0 -80
- package/src/styles/icon.scss +0 -5
- package/src/vite-env.d.ts +0 -1
- package/tsconfig.json +0 -26
|
@@ -1,265 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import PageHeader from '@/components/PageHeader';
|
|
4
|
-
import styles from './page.module.scss';
|
|
5
|
-
|
|
6
|
-
export default function CheckboxRadio() {
|
|
7
|
-
return (
|
|
8
|
-
<>
|
|
9
|
-
<PageHeader
|
|
10
|
-
title="체크박스 & 라디오"
|
|
11
|
-
description="Podo UI의 Checkbox와 Radio 컴포넌트 사용법을 안내합니다"
|
|
12
|
-
/>
|
|
13
|
-
|
|
14
|
-
<section className={styles.section}>
|
|
15
|
-
<h2>Checkbox 기본 사용법</h2>
|
|
16
|
-
<p>
|
|
17
|
-
HTML checkbox input을 사용하면 Podo UI의 커스텀 스타일이 자동으로 적용됩니다.
|
|
18
|
-
SVG 기반의 체크 아이콘이 포함되어 있습니다.
|
|
19
|
-
</p>
|
|
20
|
-
|
|
21
|
-
<div className={styles.codeBlock}>
|
|
22
|
-
<div className={styles.codeHeader}>HTML</div>
|
|
23
|
-
<pre><code>{`<label>
|
|
24
|
-
<input type="checkbox" />
|
|
25
|
-
체크박스 옵션
|
|
26
|
-
</label>
|
|
27
|
-
|
|
28
|
-
<label>
|
|
29
|
-
<input type="checkbox" checked />
|
|
30
|
-
체크된 상태
|
|
31
|
-
</label>
|
|
32
|
-
|
|
33
|
-
<label>
|
|
34
|
-
<input type="checkbox" disabled />
|
|
35
|
-
비활성화
|
|
36
|
-
</label>
|
|
37
|
-
|
|
38
|
-
<label>
|
|
39
|
-
<input type="checkbox" checked disabled />
|
|
40
|
-
체크됨 + 비활성화
|
|
41
|
-
</label>`}</code></pre>
|
|
42
|
-
</div>
|
|
43
|
-
|
|
44
|
-
<div className={styles.demo}>
|
|
45
|
-
<div className={styles.demoTitle}>실제 예제:</div>
|
|
46
|
-
<div className={styles.checkboxGroup}>
|
|
47
|
-
<label>
|
|
48
|
-
<input type="checkbox" />
|
|
49
|
-
체크박스 옵션
|
|
50
|
-
</label>
|
|
51
|
-
<label>
|
|
52
|
-
<input type="checkbox" defaultChecked />
|
|
53
|
-
체크된 상태
|
|
54
|
-
</label>
|
|
55
|
-
<label>
|
|
56
|
-
<input type="checkbox" disabled />
|
|
57
|
-
비활성화
|
|
58
|
-
</label>
|
|
59
|
-
<label>
|
|
60
|
-
<input type="checkbox" defaultChecked disabled />
|
|
61
|
-
체크됨 + 비활성화
|
|
62
|
-
</label>
|
|
63
|
-
</div>
|
|
64
|
-
</div>
|
|
65
|
-
</section>
|
|
66
|
-
|
|
67
|
-
<section className={styles.section}>
|
|
68
|
-
<h2>Indeterminate 상태</h2>
|
|
69
|
-
<p>
|
|
70
|
-
JavaScript로 <code>indeterminate</code> 상태를 설정할 수 있습니다.
|
|
71
|
-
부분 선택 상태를 나타낼 때 유용합니다.
|
|
72
|
-
</p>
|
|
73
|
-
|
|
74
|
-
<div className={styles.codeBlock}>
|
|
75
|
-
<div className={styles.codeHeader}>JavaScript</div>
|
|
76
|
-
<pre><code>{`const checkbox = document.querySelector('#myCheckbox');
|
|
77
|
-
checkbox.indeterminate = true;`}</code></pre>
|
|
78
|
-
</div>
|
|
79
|
-
|
|
80
|
-
<div className={styles.demo}>
|
|
81
|
-
<div className={styles.demoTitle}>실제 예제:</div>
|
|
82
|
-
<div className={styles.checkboxGroup}>
|
|
83
|
-
<label>
|
|
84
|
-
<input
|
|
85
|
-
type="checkbox"
|
|
86
|
-
ref={(el) => el && (el.indeterminate = true)}
|
|
87
|
-
/>
|
|
88
|
-
Indeterminate 상태
|
|
89
|
-
</label>
|
|
90
|
-
</div>
|
|
91
|
-
</div>
|
|
92
|
-
</section>
|
|
93
|
-
|
|
94
|
-
<section className={styles.section}>
|
|
95
|
-
<h2>Radio 기본 사용법</h2>
|
|
96
|
-
<p>
|
|
97
|
-
Radio 버튼은 여러 옵션 중 하나만 선택할 수 있습니다.
|
|
98
|
-
같은 <code>name</code> 속성을 가진 radio들이 하나의 그룹을 형성합니다.
|
|
99
|
-
</p>
|
|
100
|
-
|
|
101
|
-
<div className={styles.codeBlock}>
|
|
102
|
-
<div className={styles.codeHeader}>HTML</div>
|
|
103
|
-
<pre><code>{`<label>
|
|
104
|
-
<input type="radio" name="option" value="1" checked />
|
|
105
|
-
옵션 1
|
|
106
|
-
</label>
|
|
107
|
-
|
|
108
|
-
<label>
|
|
109
|
-
<input type="radio" name="option" value="2" />
|
|
110
|
-
옵션 2
|
|
111
|
-
</label>
|
|
112
|
-
|
|
113
|
-
<label>
|
|
114
|
-
<input type="radio" name="option" value="3" />
|
|
115
|
-
옵션 3
|
|
116
|
-
</label>
|
|
117
|
-
|
|
118
|
-
<label>
|
|
119
|
-
<input type="radio" name="option" value="4" disabled />
|
|
120
|
-
비활성화된 옵션
|
|
121
|
-
</label>`}</code></pre>
|
|
122
|
-
</div>
|
|
123
|
-
|
|
124
|
-
<div className={styles.demo}>
|
|
125
|
-
<div className={styles.demoTitle}>실제 예제:</div>
|
|
126
|
-
<div className={styles.radioGroup}>
|
|
127
|
-
<label>
|
|
128
|
-
<input type="radio" name="example1" value="1" defaultChecked />
|
|
129
|
-
옵션 1
|
|
130
|
-
</label>
|
|
131
|
-
<label>
|
|
132
|
-
<input type="radio" name="example1" value="2" />
|
|
133
|
-
옵션 2
|
|
134
|
-
</label>
|
|
135
|
-
<label>
|
|
136
|
-
<input type="radio" name="example1" value="3" />
|
|
137
|
-
옵션 3
|
|
138
|
-
</label>
|
|
139
|
-
<label>
|
|
140
|
-
<input type="radio" name="example1" value="4" disabled />
|
|
141
|
-
비활성화된 옵션
|
|
142
|
-
</label>
|
|
143
|
-
</div>
|
|
144
|
-
</div>
|
|
145
|
-
</section>
|
|
146
|
-
|
|
147
|
-
<section className={styles.section}>
|
|
148
|
-
<h2>Checkbox 그룹 예제</h2>
|
|
149
|
-
<p>여러 개의 체크박스를 사용한 실제 예제입니다:</p>
|
|
150
|
-
|
|
151
|
-
<div className={styles.demo}>
|
|
152
|
-
<div className={styles.demoTitle}>관심 분야 선택:</div>
|
|
153
|
-
<div className={styles.checkboxGroup}>
|
|
154
|
-
<label>
|
|
155
|
-
<input type="checkbox" name="interests" value="design" />
|
|
156
|
-
디자인
|
|
157
|
-
</label>
|
|
158
|
-
<label>
|
|
159
|
-
<input type="checkbox" name="interests" value="development" />
|
|
160
|
-
개발
|
|
161
|
-
</label>
|
|
162
|
-
<label>
|
|
163
|
-
<input type="checkbox" name="interests" value="marketing" />
|
|
164
|
-
마케팅
|
|
165
|
-
</label>
|
|
166
|
-
<label>
|
|
167
|
-
<input type="checkbox" name="interests" value="business" />
|
|
168
|
-
비즈니스
|
|
169
|
-
</label>
|
|
170
|
-
</div>
|
|
171
|
-
</div>
|
|
172
|
-
</section>
|
|
173
|
-
|
|
174
|
-
<section className={styles.section}>
|
|
175
|
-
<h2>Radio 그룹 예제</h2>
|
|
176
|
-
<p>여러 개의 라디오 버튼을 사용한 실제 예제입니다:</p>
|
|
177
|
-
|
|
178
|
-
<div className={styles.demo}>
|
|
179
|
-
<div className={styles.demoTitle}>결제 방법 선택:</div>
|
|
180
|
-
<div className={styles.radioGroup}>
|
|
181
|
-
<label>
|
|
182
|
-
<input type="radio" name="payment" value="card" defaultChecked />
|
|
183
|
-
신용카드
|
|
184
|
-
</label>
|
|
185
|
-
<label>
|
|
186
|
-
<input type="radio" name="payment" value="bank" />
|
|
187
|
-
계좌이체
|
|
188
|
-
</label>
|
|
189
|
-
<label>
|
|
190
|
-
<input type="radio" name="payment" value="mobile" />
|
|
191
|
-
휴대폰 결제
|
|
192
|
-
</label>
|
|
193
|
-
<label>
|
|
194
|
-
<input type="radio" name="payment" value="kakao" />
|
|
195
|
-
카카오페이
|
|
196
|
-
</label>
|
|
197
|
-
</div>
|
|
198
|
-
</div>
|
|
199
|
-
</section>
|
|
200
|
-
|
|
201
|
-
<section className={styles.section}>
|
|
202
|
-
<h2>SCSS에서 사용하기</h2>
|
|
203
|
-
<p>체크박스와 라디오의 스타일은 자동으로 적용되지만, 추가 커스터마이징이 가능합니다:</p>
|
|
204
|
-
|
|
205
|
-
<div className={styles.codeBlock}>
|
|
206
|
-
<div className={styles.codeHeader}>component.module.scss</div>
|
|
207
|
-
<pre><code>{`@use 'podo-ui/mixin' as *;
|
|
208
|
-
|
|
209
|
-
.checkboxWrapper {
|
|
210
|
-
display: flex;
|
|
211
|
-
flex-direction: column;
|
|
212
|
-
gap: s(3);
|
|
213
|
-
|
|
214
|
-
label {
|
|
215
|
-
display: flex;
|
|
216
|
-
align-items: center;
|
|
217
|
-
gap: s(2);
|
|
218
|
-
cursor: pointer;
|
|
219
|
-
user-select: none;
|
|
220
|
-
|
|
221
|
-
input[type='checkbox'] {
|
|
222
|
-
margin-right: s(2);
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
&:hover {
|
|
226
|
-
color: color(primary);
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
.radioWrapper {
|
|
232
|
-
display: flex;
|
|
233
|
-
flex-direction: column;
|
|
234
|
-
gap: s(3);
|
|
235
|
-
|
|
236
|
-
label {
|
|
237
|
-
display: flex;
|
|
238
|
-
align-items: center;
|
|
239
|
-
cursor: pointer;
|
|
240
|
-
|
|
241
|
-
input[type='radio'] {
|
|
242
|
-
margin-right: s(2);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
// 커스텀 스타일
|
|
248
|
-
.customCheckbox {
|
|
249
|
-
input[type='checkbox']:focus-visible {
|
|
250
|
-
outline: 4px solid color(primary-outline);
|
|
251
|
-
}
|
|
252
|
-
}`}</code></pre>
|
|
253
|
-
</div>
|
|
254
|
-
</section>
|
|
255
|
-
|
|
256
|
-
<section className={styles.section}>
|
|
257
|
-
<h2>다크 모드</h2>
|
|
258
|
-
<p>
|
|
259
|
-
Podo UI는 체크박스와 라디오 버튼에 대한 다크 모드를 자동으로 지원합니다.
|
|
260
|
-
오른쪽 상단의 테마 토글 버튼으로 확인해보세요.
|
|
261
|
-
</p>
|
|
262
|
-
</section>
|
|
263
|
-
</>
|
|
264
|
-
);
|
|
265
|
-
}
|
|
@@ -1,112 +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
|
-
}
|
|
19
|
-
|
|
20
|
-
.codeBlock {
|
|
21
|
-
background: color(default-deep-base);
|
|
22
|
-
border-radius: r(4);
|
|
23
|
-
overflow: hidden;
|
|
24
|
-
margin-bottom: s(4);
|
|
25
|
-
|
|
26
|
-
.codeHeader {
|
|
27
|
-
padding: s(3) s(5);
|
|
28
|
-
background: rgba(0, 0, 0, 0.2);
|
|
29
|
-
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
|
30
|
-
@include p4-semibold;
|
|
31
|
-
color: rgba(255, 255, 255, 0.7);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
pre {
|
|
35
|
-
margin: 0;
|
|
36
|
-
padding: s(5);
|
|
37
|
-
overflow-x: auto;
|
|
38
|
-
|
|
39
|
-
code {
|
|
40
|
-
@include p3;
|
|
41
|
-
font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
|
|
42
|
-
color: #f8f8f2;
|
|
43
|
-
white-space: pre;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
.demo {
|
|
49
|
-
margin-top: s(5);
|
|
50
|
-
padding: s(5);
|
|
51
|
-
background: color(default-fill);
|
|
52
|
-
border: 1px solid color(default-outline);
|
|
53
|
-
border-radius: r(4);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
.demoTitle {
|
|
57
|
-
@include p3-semibold;
|
|
58
|
-
margin-bottom: s(4);
|
|
59
|
-
color: color(default-deep-base);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
.inputGroup {
|
|
63
|
-
display: flex;
|
|
64
|
-
flex-direction: column;
|
|
65
|
-
gap: s(4);
|
|
66
|
-
|
|
67
|
-
input {
|
|
68
|
-
width: 100%;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
.typeGrid {
|
|
73
|
-
display: grid;
|
|
74
|
-
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
|
75
|
-
gap: s(5);
|
|
76
|
-
margin: s(6) 0;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.typeCard {
|
|
80
|
-
display: flex;
|
|
81
|
-
flex-direction: column;
|
|
82
|
-
gap: s(2);
|
|
83
|
-
|
|
84
|
-
label {
|
|
85
|
-
@include p3-semibold;
|
|
86
|
-
color: color(default-deep-base);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
input {
|
|
90
|
-
width: 100%;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
.inputWrapper {
|
|
95
|
-
position: relative;
|
|
96
|
-
display: flex;
|
|
97
|
-
align-items: center;
|
|
98
|
-
width: 100%;
|
|
99
|
-
|
|
100
|
-
i {
|
|
101
|
-
position: absolute;
|
|
102
|
-
left: s(4);
|
|
103
|
-
font-size: 18px;
|
|
104
|
-
color: color(default-base);
|
|
105
|
-
pointer-events: none;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
input {
|
|
109
|
-
padding-left: s(10);
|
|
110
|
-
width: 100%;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
import PageHeader from '@/components/PageHeader';
|
|
2
|
-
import styles from './page.module.scss';
|
|
3
|
-
|
|
4
|
-
export default function Input() {
|
|
5
|
-
return (
|
|
6
|
-
<>
|
|
7
|
-
<PageHeader
|
|
8
|
-
title="입력"
|
|
9
|
-
description="Podo UI의 Input 컴포넌트와 다양한 변형 사용법을 안내합니다"
|
|
10
|
-
/>
|
|
11
|
-
|
|
12
|
-
<section className={styles.section}>
|
|
13
|
-
<h2>기본 사용법</h2>
|
|
14
|
-
<p>
|
|
15
|
-
HTML input 태그를 사용하여 텍스트 입력 필드를 만들 수 있습니다.
|
|
16
|
-
</p>
|
|
17
|
-
|
|
18
|
-
<div className={styles.codeBlock}>
|
|
19
|
-
<div className={styles.codeHeader}>HTML</div>
|
|
20
|
-
<pre><code>{`<input type="text" placeholder="텍스트를 입력하세요" />
|
|
21
|
-
<input type="email" placeholder="이메일을 입력하세요" />
|
|
22
|
-
<input type="password" placeholder="비밀번호를 입력하세요" />
|
|
23
|
-
<input type="number" placeholder="숫자를 입력하세요" />`}</code></pre>
|
|
24
|
-
</div>
|
|
25
|
-
|
|
26
|
-
<div className={styles.demo}>
|
|
27
|
-
<div className={styles.demoTitle}>실제 예제:</div>
|
|
28
|
-
<div className={styles.inputGroup}>
|
|
29
|
-
<input type="text" placeholder="텍스트를 입력하세요" />
|
|
30
|
-
<input type="email" placeholder="이메일을 입력하세요" />
|
|
31
|
-
<input type="password" placeholder="비밀번호를 입력하세요" />
|
|
32
|
-
<input type="number" placeholder="숫자를 입력하세요" />
|
|
33
|
-
</div>
|
|
34
|
-
</div>
|
|
35
|
-
</section>
|
|
36
|
-
|
|
37
|
-
<section className={styles.section}>
|
|
38
|
-
<h2>Input 타입</h2>
|
|
39
|
-
<p>다양한 input 타입을 지원합니다:</p>
|
|
40
|
-
|
|
41
|
-
<div className={styles.typeGrid}>
|
|
42
|
-
<div className={styles.typeCard}>
|
|
43
|
-
<label>Text</label>
|
|
44
|
-
<input type="text" placeholder="일반 텍스트" />
|
|
45
|
-
</div>
|
|
46
|
-
<div className={styles.typeCard}>
|
|
47
|
-
<label>Email</label>
|
|
48
|
-
<input type="email" placeholder="example@email.com" />
|
|
49
|
-
</div>
|
|
50
|
-
<div className={styles.typeCard}>
|
|
51
|
-
<label>Password</label>
|
|
52
|
-
<input type="password" placeholder="••••••••" />
|
|
53
|
-
</div>
|
|
54
|
-
<div className={styles.typeCard}>
|
|
55
|
-
<label>Number</label>
|
|
56
|
-
<input type="number" placeholder="123" />
|
|
57
|
-
</div>
|
|
58
|
-
<div className={styles.typeCard}>
|
|
59
|
-
<label>Tel</label>
|
|
60
|
-
<input type="tel" placeholder="010-1234-5678" />
|
|
61
|
-
</div>
|
|
62
|
-
<div className={styles.typeCard}>
|
|
63
|
-
<label>URL</label>
|
|
64
|
-
<input type="url" placeholder="https://example.com" />
|
|
65
|
-
</div>
|
|
66
|
-
<div className={styles.typeCard}>
|
|
67
|
-
<label>Date</label>
|
|
68
|
-
<input type="date" />
|
|
69
|
-
</div>
|
|
70
|
-
<div className={styles.typeCard}>
|
|
71
|
-
<label>Time</label>
|
|
72
|
-
<input type="time" />
|
|
73
|
-
</div>
|
|
74
|
-
</div>
|
|
75
|
-
</section>
|
|
76
|
-
|
|
77
|
-
<section className={styles.section}>
|
|
78
|
-
<h2>Input 상태</h2>
|
|
79
|
-
<p>다양한 상태의 input을 사용할 수 있습니다:</p>
|
|
80
|
-
|
|
81
|
-
<div className={styles.codeBlock}>
|
|
82
|
-
<div className={styles.codeHeader}>HTML</div>
|
|
83
|
-
<pre><code>{`<!-- 기본 -->
|
|
84
|
-
<input type="text" placeholder="기본 상태" />
|
|
85
|
-
|
|
86
|
-
<!-- 비활성화 -->
|
|
87
|
-
<input type="text" placeholder="비활성화" disabled />
|
|
88
|
-
|
|
89
|
-
<!-- 읽기 전용 -->
|
|
90
|
-
<input type="text" value="읽기 전용" readonly />
|
|
91
|
-
|
|
92
|
-
<!-- 필수 -->
|
|
93
|
-
<input type="text" placeholder="필수 입력" required />`}</code></pre>
|
|
94
|
-
</div>
|
|
95
|
-
|
|
96
|
-
<div className={styles.demo}>
|
|
97
|
-
<div className={styles.demoTitle}>실제 예제:</div>
|
|
98
|
-
<div className={styles.inputGroup}>
|
|
99
|
-
<input type="text" placeholder="기본 상태" />
|
|
100
|
-
<input type="text" placeholder="비활성화" disabled />
|
|
101
|
-
<input type="text" value="읽기 전용" readOnly />
|
|
102
|
-
<input type="text" placeholder="필수 입력" required />
|
|
103
|
-
</div>
|
|
104
|
-
</div>
|
|
105
|
-
</section>
|
|
106
|
-
|
|
107
|
-
<section className={styles.section}>
|
|
108
|
-
<h2>아이콘과 함께 사용</h2>
|
|
109
|
-
<p>input 필드에 아이콘을 추가하여 더욱 직관적인 UI를 만들 수 있습니다:</p>
|
|
110
|
-
|
|
111
|
-
<div className={styles.codeBlock}>
|
|
112
|
-
<div className={styles.codeHeader}>HTML</div>
|
|
113
|
-
<pre><code>{`<div class="input-wrapper">
|
|
114
|
-
<i class="icon-search"></i>
|
|
115
|
-
<input type="text" placeholder="검색..." />
|
|
116
|
-
</div>
|
|
117
|
-
|
|
118
|
-
<div class="input-wrapper">
|
|
119
|
-
<i class="icon-mail"></i>
|
|
120
|
-
<input type="email" placeholder="이메일" />
|
|
121
|
-
</div>`}</code></pre>
|
|
122
|
-
</div>
|
|
123
|
-
|
|
124
|
-
<div className={styles.demo}>
|
|
125
|
-
<div className={styles.demoTitle}>실제 예제:</div>
|
|
126
|
-
<div className={styles.inputGroup}>
|
|
127
|
-
<div className={styles.inputWrapper}>
|
|
128
|
-
<i className="icon-search"></i>
|
|
129
|
-
<input type="text" placeholder="검색..." />
|
|
130
|
-
</div>
|
|
131
|
-
<div className={styles.inputWrapper}>
|
|
132
|
-
<i className="icon-mail"></i>
|
|
133
|
-
<input type="email" placeholder="이메일" />
|
|
134
|
-
</div>
|
|
135
|
-
<div className={styles.inputWrapper}>
|
|
136
|
-
<i className="icon-user"></i>
|
|
137
|
-
<input type="text" placeholder="사용자명" />
|
|
138
|
-
</div>
|
|
139
|
-
</div>
|
|
140
|
-
</div>
|
|
141
|
-
</section>
|
|
142
|
-
|
|
143
|
-
<section className={styles.section}>
|
|
144
|
-
<h2>SCSS에서 사용하기</h2>
|
|
145
|
-
<p>SCSS 모듈에서 input 스타일을 커스터마이징할 수 있습니다:</p>
|
|
146
|
-
|
|
147
|
-
<div className={styles.codeBlock}>
|
|
148
|
-
<div className={styles.codeHeader}>component.module.scss</div>
|
|
149
|
-
<pre><code>{`@use 'podo-ui/mixin' as *;
|
|
150
|
-
|
|
151
|
-
.inputWrapper {
|
|
152
|
-
position: relative;
|
|
153
|
-
display: inline-flex;
|
|
154
|
-
align-items: center;
|
|
155
|
-
|
|
156
|
-
i {
|
|
157
|
-
position: absolute;
|
|
158
|
-
left: s(4);
|
|
159
|
-
font-size: 18px;
|
|
160
|
-
color: color(default-base);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
input {
|
|
164
|
-
padding-left: s(10);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
.customInput {
|
|
169
|
-
width: 100%;
|
|
170
|
-
padding: s(3) s(4);
|
|
171
|
-
border: 1px solid color(default-outline);
|
|
172
|
-
border-radius: r(3);
|
|
173
|
-
background: color(bg-modal);
|
|
174
|
-
color: color(default-deep-base);
|
|
175
|
-
transition: all 0.3s;
|
|
176
|
-
|
|
177
|
-
&:focus {
|
|
178
|
-
border-color: color(primary-base);
|
|
179
|
-
outline: none;
|
|
180
|
-
box-shadow: 0 0 0 3px color(primary-fill);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
&:disabled {
|
|
184
|
-
opacity: 0.5;
|
|
185
|
-
cursor: not-allowed;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
&::placeholder {
|
|
189
|
-
color: color(default-base);
|
|
190
|
-
}
|
|
191
|
-
}`}</code></pre>
|
|
192
|
-
</div>
|
|
193
|
-
</section>
|
|
194
|
-
</>
|
|
195
|
-
);
|
|
196
|
-
}
|
|
@@ -1,90 +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
|
-
.selectGroup {
|
|
72
|
-
display: flex;
|
|
73
|
-
flex-direction: column;
|
|
74
|
-
gap: s(4);
|
|
75
|
-
|
|
76
|
-
select {
|
|
77
|
-
width: 100%;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
> div {
|
|
81
|
-
display: flex;
|
|
82
|
-
flex-direction: column;
|
|
83
|
-
gap: s(2);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
.label {
|
|
88
|
-
@include p3-semibold;
|
|
89
|
-
color: color(default-deep-base);
|
|
90
|
-
}
|