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,217 +0,0 @@
1
- import PageHeader from '@/components/PageHeader';
2
- import styles from './page.module.scss';
3
-
4
- export default function Grid() {
5
- return (
6
- <>
7
- <PageHeader
8
- title="그리드"
9
- description="Podo UI의 그리드 시스템과 사용법을 안내합니다"
10
- />
11
-
12
- <section className={styles.section}>
13
- <h2>그리드 시스템</h2>
14
- <p>
15
- Podo UI는 반응형 그리드 시스템을 제공합니다.
16
- PC에서는 12칸, 태블릿에서는 6칸, 모바일에서는 4칸으로 자동 조정됩니다.
17
- </p>
18
-
19
- <div className={styles.infoGrid}>
20
- <div className={styles.infoCard}>
21
- <div className={styles.gridPreview} data-cols="12">
22
- {[...Array(12)].map((_, i) => (
23
- <div key={i} className={styles.gridCol}></div>
24
- ))}
25
- </div>
26
- <h3>PC (1280px~)</h3>
27
- <p>12칸 그리드</p>
28
- </div>
29
- <div className={styles.infoCard}>
30
- <div className={styles.gridPreview} data-cols="6">
31
- {[...Array(6)].map((_, i) => (
32
- <div key={i} className={styles.gridCol}></div>
33
- ))}
34
- </div>
35
- <h3>Tablet (768px~1279px)</h3>
36
- <p>6칸 그리드</p>
37
- </div>
38
- <div className={styles.infoCard}>
39
- <div className={styles.gridPreview} data-cols="4">
40
- {[...Array(4)].map((_, i) => (
41
- <div key={i} className={styles.gridCol}></div>
42
- ))}
43
- </div>
44
- <h3>Mobile (~767px)</h3>
45
- <p>4칸 그리드</p>
46
- </div>
47
- </div>
48
- </section>
49
-
50
- <section className={styles.section}>
51
- <h2>기본 그리드</h2>
52
- <p>grid 클래스를 사용하여 자동 반응형 그리드를 생성합니다:</p>
53
-
54
- <div className={styles.codeBlock}>
55
- <div className={styles.codeHeader}>HTML</div>
56
- <pre><code>{`<section class="grid">
57
- <div class="w-4">4칸 (33.33%)</div>
58
- <div class="w-4">4칸 (33.33%)</div>
59
- <div class="w-4">4칸 (33.33%)</div>
60
- <div class="w-6">6칸 (50%)</div>
61
- <div class="w-6">6칸 (50%)</div>
62
- <div class="w-12">12칸 (100%)</div>
63
- </section>`}</code></pre>
64
- </div>
65
-
66
- <div className={styles.demo}>
67
- <div className={styles.demoTitle}>실제 예제:</div>
68
- <section className="grid">
69
- <div className="w-4">
70
- <div className={styles.gridItem}>w-4</div>
71
- </div>
72
- <div className="w-4">
73
- <div className={styles.gridItem}>w-4</div>
74
- </div>
75
- <div className="w-4">
76
- <div className={styles.gridItem}>w-4</div>
77
- </div>
78
- <div className="w-6">
79
- <div className={styles.gridItem}>w-6</div>
80
- </div>
81
- <div className="w-6">
82
- <div className={styles.gridItem}>w-6</div>
83
- </div>
84
- <div className="w-12">
85
- <div className={styles.gridItem}>w-12</div>
86
- </div>
87
- </section>
88
- </div>
89
- </section>
90
-
91
- <section className={styles.section}>
92
- <h2>그리드 칸 크기</h2>
93
- <p>w-1부터 w-12까지 사용 가능합니다:</p>
94
-
95
- <div className={styles.demo}>
96
- <div className={styles.demoTitle}>모든 칸 크기:</div>
97
- <section className="grid">
98
- <div className="w-12"><div className={styles.gridItem}>w-12 (100%)</div></div>
99
- <div className="w-11"><div className={styles.gridItem}>w-11</div></div>
100
- <div className="w-1"><div className={styles.gridItem}>w-1</div></div>
101
- <div className="w-10"><div className={styles.gridItem}>w-10</div></div>
102
- <div className="w-2"><div className={styles.gridItem}>w-2</div></div>
103
- <div className="w-9"><div className={styles.gridItem}>w-9</div></div>
104
- <div className="w-3"><div className={styles.gridItem}>w-3</div></div>
105
- <div className="w-8"><div className={styles.gridItem}>w-8</div></div>
106
- <div className="w-4"><div className={styles.gridItem}>w-4</div></div>
107
- <div className="w-7"><div className={styles.gridItem}>w-7</div></div>
108
- <div className="w-5"><div className={styles.gridItem}>w-5</div></div>
109
- <div className="w-6"><div className={styles.gridItem}>w-6</div></div>
110
- <div className="w-6"><div className={styles.gridItem}>w-6</div></div>
111
- </section>
112
- </div>
113
- </section>
114
-
115
- <section className={styles.section}>
116
- <h2>고정 칼럼 그리드</h2>
117
- <p>grid-fix-N 클래스를 사용하여 고정된 칼럼 수의 그리드를 만들 수 있습니다 (2~6칸):</p>
118
-
119
- <div className={styles.codeBlock}>
120
- <div className={styles.codeHeader}>HTML</div>
121
- <pre><code>{`<!-- 2칸 고정 그리드 -->
122
- <section class="grid grid-fix-2">
123
- <div class="w-1_2">50%</div>
124
- <div class="w-1_2">50%</div>
125
- </section>
126
-
127
- <!-- 3칸 고정 그리드 -->
128
- <section class="grid grid-fix-3">
129
- <div class="w-1_3">33.33%</div>
130
- <div class="w-2_3">66.67%</div>
131
- </section>
132
-
133
- <!-- 4칸 고정 그리드 -->
134
- <section class="grid grid-fix-4">
135
- <div class="w-1_4">25%</div>
136
- <div class="w-3_4">75%</div>
137
- </section>`}</code></pre>
138
- </div>
139
-
140
- <div className={styles.demo}>
141
- <div className={styles.demoTitle}>2칸 고정 (grid-fix-2):</div>
142
- <section className="grid grid-fix-2">
143
- <div className="w-1_2"><div className={styles.gridItem}>w-1_2 (50%)</div></div>
144
- <div className="w-1_2"><div className={styles.gridItem}>w-1_2 (50%)</div></div>
145
- </section>
146
-
147
- <div className={styles.demoTitle}>3칸 고정 (grid-fix-3):</div>
148
- <section className="grid grid-fix-3">
149
- <div className="w-1_3"><div className={styles.gridItem}>w-1_3</div></div>
150
- <div className="w-2_3"><div className={styles.gridItem}>w-2_3</div></div>
151
- </section>
152
-
153
- <div className={styles.demoTitle}>4칸 고정 (grid-fix-4):</div>
154
- <section className="grid grid-fix-4">
155
- <div className="w-1_4"><div className={styles.gridItem}>w-1_4</div></div>
156
- <div className="w-1_4"><div className={styles.gridItem}>w-1_4</div></div>
157
- <div className="w-2_4"><div className={styles.gridItem}>w-2_4</div></div>
158
- </section>
159
-
160
- <div className={styles.demoTitle}>5칸 고정 (grid-fix-5):</div>
161
- <section className="grid grid-fix-5">
162
- <div className="w-2_5"><div className={styles.gridItem}>w-2_5</div></div>
163
- <div className="w-3_5"><div className={styles.gridItem}>w-3_5</div></div>
164
- </section>
165
-
166
- <div className={styles.demoTitle}>6칸 고정 (grid-fix-6):</div>
167
- <section className="grid grid-fix-6">
168
- <div className="w-2_6"><div className={styles.gridItem}>w-2_6</div></div>
169
- <div className="w-4_6"><div className={styles.gridItem}>w-4_6</div></div>
170
- </section>
171
- </div>
172
- </section>
173
-
174
- <section className={styles.section}>
175
- <h2>전체 너비</h2>
176
- <p>w-full 클래스는 현재 그리드의 전체 너비를 차지합니다:</p>
177
-
178
- <div className={styles.codeBlock}>
179
- <div className={styles.codeHeader}>HTML</div>
180
- <pre><code>{`<section class="grid">
181
- <div class="w-4">4칸</div>
182
- <div class="w-4">4칸</div>
183
- <div class="w-4">4칸</div>
184
- <div class="w-full">전체 너비 (PC: 12칸, Tablet: 6칸, Mobile: 4칸)</div>
185
- </section>`}</code></pre>
186
- </div>
187
-
188
- <div className={styles.demo}>
189
- <div className={styles.demoTitle}>실제 예제:</div>
190
- <section className="grid">
191
- <div className="w-4"><div className={styles.gridItem}>w-4</div></div>
192
- <div className="w-4"><div className={styles.gridItem}>w-4</div></div>
193
- <div className="w-4"><div className={styles.gridItem}>w-4</div></div>
194
- <div className="w-full"><div className={styles.gridItem}>w-full</div></div>
195
- </section>
196
- </div>
197
- </section>
198
-
199
- <section className={styles.section}>
200
- <h2>반응형 동작</h2>
201
- <p>그리드는 화면 크기에 따라 자동으로 조정됩니다. 브라우저 창 크기를 조절하여 확인해보세요:</p>
202
-
203
- <div className={styles.note}>
204
- <i className="icon-info"></i>
205
- <div>
206
- <strong>브레이크포인트:</strong>
207
- <ul style={{ margin: '8px 0 0 0', paddingLeft: '20px' }}>
208
- <li>PC: 1280px 이상 (12칸 그리드, 간격 24px)</li>
209
- <li>Tablet: 768px ~ 1279px (6칸 그리드, 간격 16px)</li>
210
- <li>Mobile: 767px 이하 (4칸 그리드, 간격 16px)</li>
211
- </ul>
212
- </div>
213
- </div>
214
- </section>
215
- </>
216
- );
217
- }
@@ -1,237 +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);
10
- }
11
-
12
- h1 {
13
- margin: 0 0 s(4) 0;
14
- }
15
-
16
- p {
17
- @include p2;
18
- color: color(default);
19
- line-height: 1.8;
20
- margin: 0 0 s(5) 0;
21
-
22
- code {
23
- @include p3;
24
- font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
25
- color: color(primary);
26
- background: color(primary-fill);
27
- padding: 2px 6px;
28
- border-radius: r(1);
29
- }
30
- }
31
- }
32
-
33
- .breakpointGrid {
34
- display: grid;
35
- grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
36
- gap: s(5);
37
- margin-top: s(6);
38
- }
39
-
40
- .breakpointCard {
41
- padding: s(6);
42
- background: color(bg-modal);
43
- border: 1px solid color(default-outline);
44
- border-radius: r(4);
45
- text-align: center;
46
- transition: all 0.3s;
47
-
48
- &:hover {
49
- border-color: color(primary);
50
- transform: translateY(-2px);
51
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
52
- }
53
-
54
- h3 {
55
- @include p1;
56
- font-weight: 600;
57
- margin: s(3) 0 s(2) 0;
58
- color: color(default-deep);
59
- }
60
-
61
- code {
62
- @include p4;
63
- font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
64
- color: color(primary);
65
- background: color(primary-fill);
66
- padding: s(2) s(3);
67
- border-radius: r(2);
68
- display: inline-block;
69
- margin-top: s(2);
70
- }
71
- }
72
-
73
- .breakpointIcon {
74
- width: 60px;
75
- height: 60px;
76
- margin: 0 auto;
77
- display: flex;
78
- align-items: center;
79
- justify-content: center;
80
- background: linear-gradient(135deg, #8B5CF6 0%, #6366F1 100%);
81
- border-radius: r(full);
82
- box-shadow: 0 4px 12px rgba(139, 92, 246, 0.25);
83
-
84
- i {
85
- font-size: 28px;
86
- color: white;
87
- }
88
- }
89
-
90
- .breakpointValue {
91
- @include p3;
92
- font-weight: 600;
93
- margin: 0 !important;
94
- color: color(primary);
95
- }
96
-
97
- .codeBlock {
98
- background: color(bg-modal);
99
- border: 1px solid color(default-outline);
100
- border-radius: r(3);
101
- overflow: hidden;
102
- margin-bottom: s(4);
103
-
104
- .codeHeader {
105
- padding: s(3) s(5);
106
- background: color(bg-elevation-1);
107
- border-bottom: 1px solid color(default-outline);
108
- @include p4;
109
- font-weight: 600;
110
- color: color(default-deep);
111
- }
112
-
113
- pre {
114
- margin: 0;
115
- padding: s(5);
116
- overflow-x: auto;
117
- background: color(bg-elevation);
118
-
119
- code {
120
- @include p3;
121
- font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
122
- color: color(default-deep);
123
- white-space: pre;
124
- }
125
- }
126
- }
127
-
128
- .note {
129
- display: flex;
130
- gap: s(4);
131
- padding: s(5);
132
- border-radius: r(4);
133
- margin-top: s(5);
134
- background: color(info-fill);
135
- border: 1px solid color(info-outline);
136
- color: color(info);
137
-
138
- > i {
139
- font-size: 20px;
140
- flex-shrink: 0;
141
- color: color(info);
142
- }
143
-
144
- strong {
145
- display: block;
146
- margin-bottom: s(2);
147
- }
148
- }
149
-
150
- .demo {
151
- margin-top: s(5);
152
- padding: s(5);
153
- background: color(bg-modal);
154
- border: 1px solid color(default-outline);
155
- border-radius: r(4);
156
- }
157
-
158
- .demoTitle {
159
- @include p3-semibold;
160
- margin-bottom: s(4);
161
- color: color(default-deep);
162
- }
163
-
164
- .hideDemo {
165
- display: flex;
166
- flex-direction: column;
167
- gap: s(3);
168
- }
169
-
170
- .demoBox {
171
- padding: s(4);
172
- background: linear-gradient(135deg, rgba(139, 92, 246, 0.1) 0%, rgba(99, 102, 241, 0.1) 100%);
173
- border: 1px solid rgba(139, 92, 246, 0.3);
174
- border-radius: r(2);
175
- text-align: center;
176
- @include p3-semibold;
177
- color: color(primary);
178
- }
179
-
180
- .gridItem {
181
- padding: s(4);
182
- background: linear-gradient(135deg, rgba(139, 92, 246, 0.1) 0%, rgba(99, 102, 241, 0.1) 100%);
183
- border: 1px solid rgba(139, 92, 246, 0.3);
184
- border-radius: r(2);
185
- text-align: center;
186
- @include p3-semibold;
187
- color: color(primary);
188
- min-height: 60px;
189
- display: flex;
190
- align-items: center;
191
- justify-content: center;
192
- }
193
-
194
- .deviceIndicator {
195
- padding: s(6);
196
- background: linear-gradient(135deg, rgba(139, 92, 246, 0.1) 0%, rgba(99, 102, 241, 0.1) 100%);
197
- border: 2px solid color(primary);
198
- border-radius: r(4);
199
- margin-top: s(5);
200
- }
201
-
202
- .deviceInfo {
203
- display: flex;
204
- align-items: center;
205
- gap: s(4);
206
-
207
- strong {
208
- @include p1;
209
- font-weight: 600;
210
- color: color(primary);
211
- display: block;
212
- margin-bottom: s(1);
213
- }
214
-
215
- p {
216
- @include p3;
217
- margin: 0;
218
- color: color(default);
219
- }
220
- }
221
-
222
- .deviceIcon {
223
- width: 60px;
224
- height: 60px;
225
- display: flex;
226
- align-items: center;
227
- justify-content: center;
228
- background: linear-gradient(135deg, #8B5CF6 0%, #6366F1 100%);
229
- border-radius: r(full);
230
- box-shadow: 0 4px 12px rgba(139, 92, 246, 0.25);
231
- flex-shrink: 0;
232
-
233
- i {
234
- font-size: 28px;
235
- color: white;
236
- }
237
- }