@ceed/ads 1.13.4 → 1.15.0-next.1

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 (70) hide show
  1. package/dist/Overview.md +11 -0
  2. package/dist/components/Menu/Menu.d.ts +2 -5
  3. package/dist/components/Stepper/Stepper.d.ts +6 -0
  4. package/dist/components/data-display/Avatar.md +428 -0
  5. package/dist/components/data-display/Badge.md +315 -0
  6. package/dist/components/data-display/Chip.md +301 -0
  7. package/dist/components/data-display/DataTable.md +452 -0
  8. package/dist/components/data-display/InfoSign.md +160 -0
  9. package/dist/components/data-display/Markdown.md +17 -0
  10. package/dist/components/data-display/Table.md +1330 -0
  11. package/dist/components/data-display/Tooltip.md +444 -0
  12. package/dist/components/data-display/Typography.md +271 -0
  13. package/dist/components/data-display/llms.txt +17 -0
  14. package/dist/components/feedback/Alert.md +663 -0
  15. package/dist/components/feedback/Dialog.md +33 -0
  16. package/dist/components/feedback/Modal.md +39 -0
  17. package/dist/components/feedback/llms.txt +11 -0
  18. package/dist/components/inputs/Autocomplete.md +103 -0
  19. package/dist/components/inputs/Button.md +334 -0
  20. package/dist/components/inputs/ButtonGroup.md +382 -0
  21. package/dist/components/inputs/Calendar.md +19 -0
  22. package/dist/components/inputs/Checkbox.md +649 -0
  23. package/dist/components/inputs/CurrencyInput.md +91 -0
  24. package/dist/components/inputs/DatePicker.md +67 -0
  25. package/dist/components/inputs/DateRangePicker.md +55 -0
  26. package/dist/components/inputs/FilterMenu.md +210 -0
  27. package/dist/components/inputs/IconButton.md +361 -0
  28. package/dist/components/inputs/Input.md +283 -0
  29. package/dist/components/inputs/MonthPicker.md +72 -0
  30. package/dist/components/inputs/MonthRangePicker.md +70 -0
  31. package/dist/components/inputs/PercentageInput.md +116 -0
  32. package/dist/components/inputs/RadioButton.md +350 -0
  33. package/dist/components/inputs/RadioTileGroup.md +418 -0
  34. package/dist/components/inputs/Select.md +56 -0
  35. package/dist/components/inputs/Switch.md +577 -0
  36. package/dist/components/inputs/Textarea.md +64 -0
  37. package/dist/components/inputs/Uploader/Uploader.md +238 -0
  38. package/dist/components/inputs/Uploader/llms.txt +9 -0
  39. package/dist/components/inputs/llms.txt +31 -0
  40. package/dist/components/layout/Box.md +997 -0
  41. package/dist/components/layout/Container.md +23 -0
  42. package/dist/components/layout/Grid.md +728 -0
  43. package/dist/components/layout/Stack.md +937 -0
  44. package/dist/components/layout/llms.txt +12 -0
  45. package/dist/components/llms.txt +14 -0
  46. package/dist/components/navigation/Breadcrumbs.md +51 -0
  47. package/dist/components/navigation/Dropdown.md +768 -0
  48. package/dist/components/navigation/IconMenuButton.md +35 -0
  49. package/dist/components/navigation/InsetDrawer.md +133 -0
  50. package/dist/components/navigation/Link.md +24 -0
  51. package/dist/components/navigation/Menu.md +957 -0
  52. package/dist/components/navigation/MenuButton.md +39 -0
  53. package/dist/components/navigation/NavigationGroup.md +17 -0
  54. package/dist/components/navigation/NavigationItem.md +17 -0
  55. package/dist/components/navigation/Navigator.md +17 -0
  56. package/dist/components/navigation/Pagination.md +17 -0
  57. package/dist/components/navigation/ProfileMenu.md +34 -0
  58. package/dist/components/navigation/Stepper.md +108 -0
  59. package/dist/components/navigation/Tabs.md +34 -0
  60. package/dist/components/navigation/llms.txt +22 -0
  61. package/dist/components/surfaces/Accordions.md +96 -0
  62. package/dist/components/surfaces/Card.md +786 -0
  63. package/dist/components/surfaces/Divider.md +762 -0
  64. package/dist/components/surfaces/Sheet.md +900 -0
  65. package/dist/components/surfaces/llms.txt +12 -0
  66. package/dist/index.cjs +22 -10
  67. package/dist/index.js +22 -10
  68. package/dist/llms.txt +75 -0
  69. package/framer/index.js +36 -36
  70. package/package.json +8 -4
@@ -0,0 +1,997 @@
1
+ # Box
2
+
3
+ ## Introduction
4
+
5
+ Box는 가장 기본적이고 중요한 레이아웃 컴포넌트입니다. 다른 컴포넌트들을 감싸는 범용 컨테이너 역할을 하며, CSS-in-JS를 통해 스타일을 직접 적용할 수 있습니다. Framer Motion이 내장되어 있어 애니메이션 효과도 쉽게 추가할 수 있습니다. 모든 HTML 요소로 변환 가능한 다형성(polymorphic) 컴포넌트이기도 합니다.
6
+
7
+ ```tsx
8
+ <Box {...args} sx={{
9
+ width: 200,
10
+ height: 200,
11
+ backgroundColor: 'primary.50',
12
+ border: '2px solid',
13
+ borderColor: 'primary.200',
14
+ borderRadius: 'md',
15
+ display: 'flex',
16
+ alignItems: 'center',
17
+ justifyContent: 'center'
18
+ }}>
19
+ <Typography>Box 컴포넌트</Typography>
20
+ </Box>
21
+ ```
22
+
23
+ | Field | Description | Default |
24
+ | --------- | ----------- | ------- |
25
+ | component | HTML 요소 타입 | "div" |
26
+
27
+ ## Usage
28
+
29
+ ```tsx
30
+ import { Box } from '@ceed/ads';
31
+
32
+ function MyComponent() {
33
+ return (
34
+ <Box
35
+ sx={{
36
+ p: 2,
37
+ bgcolor: 'primary.50',
38
+ borderRadius: 'md',
39
+ }}
40
+ >
41
+ 콘텐츠가 들어갑니다
42
+ </Box>
43
+ );
44
+ }
45
+ ```
46
+
47
+ ## Examples
48
+
49
+ ### Basic Usage
50
+
51
+ 가장 기본적인 Box 사용법입니다.
52
+
53
+ ```tsx
54
+ <div style={{
55
+ display: 'flex',
56
+ gap: '1rem',
57
+ flexWrap: 'wrap'
58
+ }}>
59
+ <Box sx={{
60
+ p: 2,
61
+ bgcolor: 'background.body',
62
+ border: '1px solid',
63
+ borderColor: 'divider'
64
+ }}>
65
+ <Typography>기본 Box</Typography>
66
+ </Box>
67
+
68
+ <Box sx={{
69
+ p: 2,
70
+ bgcolor: 'primary.50',
71
+ borderRadius: 'sm'
72
+ }}>
73
+ <Typography>배경색과 둥근 모서리</Typography>
74
+ </Box>
75
+
76
+ <Box sx={{
77
+ p: 2,
78
+ border: '2px solid',
79
+ borderColor: 'primary.main',
80
+ borderRadius: 'md'
81
+ }}>
82
+ <Typography>테두리가 있는 Box</Typography>
83
+ </Box>
84
+ </div>
85
+ ```
86
+
87
+ ### Colors
88
+
89
+ 다양한 배경색을 적용할 수 있습니다.
90
+
91
+ ```tsx
92
+ <div style={{
93
+ display: 'flex',
94
+ gap: '1rem',
95
+ flexWrap: 'wrap'
96
+ }}>
97
+ <Box sx={{
98
+ p: 2,
99
+ bgcolor: 'primary.50',
100
+ borderRadius: 'sm'
101
+ }}>
102
+ <Typography level="body-sm">Primary</Typography>
103
+ </Box>
104
+
105
+ <Box sx={{
106
+ p: 2,
107
+ bgcolor: 'neutral.50',
108
+ borderRadius: 'sm'
109
+ }}>
110
+ <Typography level="body-sm">Neutral</Typography>
111
+ </Box>
112
+
113
+ <Box sx={{
114
+ p: 2,
115
+ bgcolor: 'danger.50',
116
+ borderRadius: 'sm'
117
+ }}>
118
+ <Typography level="body-sm">Danger</Typography>
119
+ </Box>
120
+
121
+ <Box sx={{
122
+ p: 2,
123
+ bgcolor: 'success.50',
124
+ borderRadius: 'sm'
125
+ }}>
126
+ <Typography level="body-sm">Success</Typography>
127
+ </Box>
128
+
129
+ <Box sx={{
130
+ p: 2,
131
+ bgcolor: 'warning.50',
132
+ borderRadius: 'sm'
133
+ }}>
134
+ <Typography level="body-sm">Warning</Typography>
135
+ </Box>
136
+ </div>
137
+ ```
138
+
139
+ ### Spacing
140
+
141
+ 패딩과 마진을 조절할 수 있습니다.
142
+
143
+ ```tsx
144
+ <div style={{
145
+ display: 'flex',
146
+ flexDirection: 'column',
147
+ gap: '1rem'
148
+ }}>
149
+ <Box sx={{
150
+ p: 1,
151
+ bgcolor: 'neutral.100',
152
+ borderRadius: 'sm'
153
+ }}>
154
+ <Typography level="body-sm">패딩 1 (8px)</Typography>
155
+ </Box>
156
+
157
+ <Box sx={{
158
+ p: 2,
159
+ bgcolor: 'neutral.100',
160
+ borderRadius: 'sm'
161
+ }}>
162
+ <Typography level="body-sm">패딩 2 (16px)</Typography>
163
+ </Box>
164
+
165
+ <Box sx={{
166
+ p: 3,
167
+ bgcolor: 'neutral.100',
168
+ borderRadius: 'sm'
169
+ }}>
170
+ <Typography level="body-sm">패딩 3 (24px)</Typography>
171
+ </Box>
172
+
173
+ <Box sx={{
174
+ p: 4,
175
+ bgcolor: 'neutral.100',
176
+ borderRadius: 'sm'
177
+ }}>
178
+ <Typography level="body-sm">패딩 4 (32px)</Typography>
179
+ </Box>
180
+
181
+ <div style={{
182
+ display: 'flex',
183
+ gap: '1rem',
184
+ marginTop: '2rem'
185
+ }}>
186
+ <Box sx={{
187
+ m: 1,
188
+ p: 2,
189
+ bgcolor: 'primary.50',
190
+ borderRadius: 'sm'
191
+ }}>
192
+ <Typography level="body-sm">마진 1</Typography>
193
+ </Box>
194
+
195
+ <Box sx={{
196
+ m: 2,
197
+ p: 2,
198
+ bgcolor: 'primary.50',
199
+ borderRadius: 'sm'
200
+ }}>
201
+ <Typography level="body-sm">마진 2</Typography>
202
+ </Box>
203
+
204
+ <Box sx={{
205
+ m: 3,
206
+ p: 2,
207
+ bgcolor: 'primary.50',
208
+ borderRadius: 'sm'
209
+ }}>
210
+ <Typography level="body-sm">마진 3</Typography>
211
+ </Box>
212
+ </div>
213
+ </div>
214
+ ```
215
+
216
+ ### Border Radius
217
+
218
+ 모서리 둥글기를 다양하게 설정할 수 있습니다.
219
+
220
+ ```tsx
221
+ <div style={{
222
+ display: 'flex',
223
+ gap: '1rem',
224
+ flexWrap: 'wrap',
225
+ alignItems: 'center'
226
+ }}>
227
+ <Box sx={{
228
+ width: 100,
229
+ height: 100,
230
+ bgcolor: 'primary.100',
231
+ display: 'flex',
232
+ alignItems: 'center',
233
+ justifyContent: 'center'
234
+ }}>
235
+ <Typography level="body-xs">None</Typography>
236
+ </Box>
237
+
238
+ <Box sx={{
239
+ width: 100,
240
+ height: 100,
241
+ bgcolor: 'primary.100',
242
+ borderRadius: 'xs',
243
+ display: 'flex',
244
+ alignItems: 'center',
245
+ justifyContent: 'center'
246
+ }}>
247
+ <Typography level="body-xs">XS</Typography>
248
+ </Box>
249
+
250
+ <Box sx={{
251
+ width: 100,
252
+ height: 100,
253
+ bgcolor: 'primary.100',
254
+ borderRadius: 'sm',
255
+ display: 'flex',
256
+ alignItems: 'center',
257
+ justifyContent: 'center'
258
+ }}>
259
+ <Typography level="body-xs">SM</Typography>
260
+ </Box>
261
+
262
+ <Box sx={{
263
+ width: 100,
264
+ height: 100,
265
+ bgcolor: 'primary.100',
266
+ borderRadius: 'md',
267
+ display: 'flex',
268
+ alignItems: 'center',
269
+ justifyContent: 'center'
270
+ }}>
271
+ <Typography level="body-xs">MD</Typography>
272
+ </Box>
273
+
274
+ <Box sx={{
275
+ width: 100,
276
+ height: 100,
277
+ bgcolor: 'primary.100',
278
+ borderRadius: 'lg',
279
+ display: 'flex',
280
+ alignItems: 'center',
281
+ justifyContent: 'center'
282
+ }}>
283
+ <Typography level="body-xs">LG</Typography>
284
+ </Box>
285
+
286
+ <Box sx={{
287
+ width: 100,
288
+ height: 100,
289
+ bgcolor: 'primary.100',
290
+ borderRadius: 'xl',
291
+ display: 'flex',
292
+ alignItems: 'center',
293
+ justifyContent: 'center'
294
+ }}>
295
+ <Typography level="body-xs">XL</Typography>
296
+ </Box>
297
+ </div>
298
+ ```
299
+
300
+ ### Shadows
301
+
302
+ 그림자 효과를 추가할 수 있습니다.
303
+
304
+ ```tsx
305
+ <div style={{
306
+ display: 'flex',
307
+ gap: '2rem',
308
+ flexWrap: 'wrap',
309
+ alignItems: 'center',
310
+ padding: '2rem'
311
+ }}>
312
+ <Box sx={{
313
+ width: 120,
314
+ height: 80,
315
+ bgcolor: 'background.body',
316
+ borderRadius: 'md',
317
+ display: 'flex',
318
+ alignItems: 'center',
319
+ justifyContent: 'center'
320
+ }}>
321
+ <Typography level="body-sm">No Shadow</Typography>
322
+ </Box>
323
+
324
+ <Box sx={{
325
+ width: 120,
326
+ height: 80,
327
+ bgcolor: 'background.body',
328
+ borderRadius: 'md',
329
+ boxShadow: 'xs',
330
+ display: 'flex',
331
+ alignItems: 'center',
332
+ justifyContent: 'center'
333
+ }}>
334
+ <Typography level="body-sm">XS Shadow</Typography>
335
+ </Box>
336
+
337
+ <Box sx={{
338
+ width: 120,
339
+ height: 80,
340
+ bgcolor: 'background.body',
341
+ borderRadius: 'md',
342
+ boxShadow: 'sm',
343
+ display: 'flex',
344
+ alignItems: 'center',
345
+ justifyContent: 'center'
346
+ }}>
347
+ <Typography level="body-sm">SM Shadow</Typography>
348
+ </Box>
349
+
350
+ <Box sx={{
351
+ width: 120,
352
+ height: 80,
353
+ bgcolor: 'background.body',
354
+ borderRadius: 'md',
355
+ boxShadow: 'md',
356
+ display: 'flex',
357
+ alignItems: 'center',
358
+ justifyContent: 'center'
359
+ }}>
360
+ <Typography level="body-sm">MD Shadow</Typography>
361
+ </Box>
362
+
363
+ <Box sx={{
364
+ width: 120,
365
+ height: 80,
366
+ bgcolor: 'background.body',
367
+ borderRadius: 'md',
368
+ boxShadow: 'lg',
369
+ display: 'flex',
370
+ alignItems: 'center',
371
+ justifyContent: 'center'
372
+ }}>
373
+ <Typography level="body-sm">LG Shadow</Typography>
374
+ </Box>
375
+
376
+ <Box sx={{
377
+ width: 120,
378
+ height: 80,
379
+ bgcolor: 'background.body',
380
+ borderRadius: 'md',
381
+ boxShadow: 'xl',
382
+ display: 'flex',
383
+ alignItems: 'center',
384
+ justifyContent: 'center'
385
+ }}>
386
+ <Typography level="body-sm">XL Shadow</Typography>
387
+ </Box>
388
+ </div>
389
+ ```
390
+
391
+ ### Flex Layouts
392
+
393
+ Flexbox를 사용한 레이아웃을 쉽게 만들 수 있습니다.
394
+
395
+ ```tsx
396
+ <div style={{
397
+ display: 'flex',
398
+ flexDirection: 'column',
399
+ gap: '2rem'
400
+ }}>
401
+ <div>
402
+ <Typography level="title-md" sx={{
403
+ mb: 1
404
+ }}>
405
+ Flex Row (수평 배치)
406
+ </Typography>
407
+ <Box sx={{
408
+ display: 'flex',
409
+ gap: 1,
410
+ p: 2,
411
+ bgcolor: 'neutral.50',
412
+ borderRadius: 'md'
413
+ }}>
414
+ <Box sx={{
415
+ p: 2,
416
+ bgcolor: 'primary.100',
417
+ borderRadius: 'sm',
418
+ flex: 1
419
+ }}>
420
+ <Typography level="body-sm">Item 1</Typography>
421
+ </Box>
422
+ <Box sx={{
423
+ p: 2,
424
+ bgcolor: 'primary.100',
425
+ borderRadius: 'sm',
426
+ flex: 1
427
+ }}>
428
+ <Typography level="body-sm">Item 2</Typography>
429
+ </Box>
430
+ <Box sx={{
431
+ p: 2,
432
+ bgcolor: 'primary.100',
433
+ borderRadius: 'sm',
434
+ flex: 1
435
+ }}>
436
+ <Typography level="body-sm">Item 3</Typography>
437
+ </Box>
438
+ </Box>
439
+ </div>
440
+
441
+ <div>
442
+ <Typography level="title-md" sx={{
443
+ mb: 1
444
+ }}>
445
+ Flex Column (수직 배치)
446
+ </Typography>
447
+ <Box sx={{
448
+ display: 'flex',
449
+ flexDirection: 'column',
450
+ gap: 1,
451
+ p: 2,
452
+ bgcolor: 'neutral.50',
453
+ borderRadius: 'md',
454
+ width: 200
455
+ }}>
456
+ <Box sx={{
457
+ p: 2,
458
+ bgcolor: 'success.100',
459
+ borderRadius: 'sm'
460
+ }}>
461
+ <Typography level="body-sm">Item 1</Typography>
462
+ </Box>
463
+ <Box sx={{
464
+ p: 2,
465
+ bgcolor: 'success.100',
466
+ borderRadius: 'sm'
467
+ }}>
468
+ <Typography level="body-sm">Item 2</Typography>
469
+ </Box>
470
+ <Box sx={{
471
+ p: 2,
472
+ bgcolor: 'success.100',
473
+ borderRadius: 'sm'
474
+ }}>
475
+ <Typography level="body-sm">Item 3</Typography>
476
+ </Box>
477
+ </Box>
478
+ </div>
479
+
480
+ <div>
481
+ <Typography level="title-md" sx={{
482
+ mb: 1
483
+ }}>
484
+ Center Alignment
485
+ </Typography>
486
+ <Box sx={{
487
+ display: 'flex',
488
+ alignItems: 'center',
489
+ justifyContent: 'center',
490
+ height: 150,
491
+ bgcolor: 'warning.50',
492
+ borderRadius: 'md'
493
+ }}>
494
+ <Typography level="title-lg">중앙 정렬된 콘텐츠</Typography>
495
+ </Box>
496
+ </div>
497
+ </div>
498
+ ```
499
+
500
+ ### Responsive Layout
501
+
502
+ 반응형 레이아웃을 구현할 수 있습니다.
503
+
504
+ ```tsx
505
+ <div style={{
506
+ display: 'flex',
507
+ flexDirection: 'column',
508
+ gap: '2rem'
509
+ }}>
510
+ <Typography level="title-md">반응형 레이아웃 (브라우저 크기를 조절해보세요)</Typography>
511
+
512
+ <Box sx={{
513
+ display: 'grid',
514
+ gridTemplateColumns: {
515
+ xs: '1fr',
516
+ sm: 'repeat(2, 1fr)',
517
+ md: 'repeat(3, 1fr)'
518
+ },
519
+ gap: 2,
520
+ p: 2,
521
+ bgcolor: 'neutral.50',
522
+ borderRadius: 'md'
523
+ }}>
524
+ {[1, 2, 3, 4, 5, 6].map(item => <Box key={item} sx={{
525
+ p: 2,
526
+ bgcolor: 'primary.100',
527
+ borderRadius: 'sm',
528
+ textAlign: 'center'
529
+ }}>
530
+ <Typography level="body-md">Item {item}</Typography>
531
+ </Box>)}
532
+ </Box>
533
+
534
+ <Box sx={{
535
+ p: {
536
+ xs: 2,
537
+ md: 4
538
+ },
539
+ fontSize: {
540
+ xs: 'sm',
541
+ md: 'lg'
542
+ },
543
+ bgcolor: 'success.50',
544
+ borderRadius: 'md',
545
+ textAlign: 'center'
546
+ }}>
547
+ <Typography>패딩과 폰트 크기가 화면 크기에 따라 달라집니다</Typography>
548
+ </Box>
549
+ </div>
550
+ ```
551
+
552
+ ### Polymorphic Components
553
+
554
+ component prop을 사용하여 다양한 HTML 요소로 렌더링할 수 있습니다.
555
+
556
+ ```tsx
557
+ <div style={{
558
+ display: 'flex',
559
+ flexDirection: 'column',
560
+ gap: '2rem'
561
+ }}>
562
+ <Box component="div" sx={{
563
+ p: 2,
564
+ bgcolor: 'neutral.100',
565
+ borderRadius: 'sm'
566
+ }}>
567
+ <Typography level="body-sm">component="div" (기본값)</Typography>
568
+ </Box>
569
+
570
+ <Box component="section" sx={{
571
+ p: 2,
572
+ bgcolor: 'primary.100',
573
+ borderRadius: 'sm'
574
+ }}>
575
+ <Typography level="body-sm">component="section"</Typography>
576
+ </Box>
577
+
578
+ <Box component="article" sx={{
579
+ p: 2,
580
+ bgcolor: 'success.100',
581
+ borderRadius: 'sm'
582
+ }}>
583
+ <Typography level="body-sm">component="article"</Typography>
584
+ </Box>
585
+
586
+ <Box component="nav" sx={{
587
+ p: 2,
588
+ bgcolor: 'warning.100',
589
+ borderRadius: 'sm'
590
+ }}>
591
+ <Typography level="body-sm">component="nav"</Typography>
592
+ </Box>
593
+
594
+ <Box component="main" sx={{
595
+ p: 2,
596
+ bgcolor: 'danger.100',
597
+ borderRadius: 'sm'
598
+ }}>
599
+ <Typography level="body-sm">component="main"</Typography>
600
+ </Box>
601
+ </div>
602
+ ```
603
+
604
+ ### Motion Animations
605
+
606
+ 내장된 Framer Motion을 사용한 애니메이션 효과입니다.
607
+
608
+ ```tsx
609
+ <div style={{
610
+ display: 'flex',
611
+ flexDirection: 'column',
612
+ gap: '2rem',
613
+ alignItems: 'center'
614
+ }}>
615
+ <button onClick={() => setIsVisible(!isVisible)}>{isVisible ? '숨기기' : '보이기'}</button>
616
+
617
+ {isVisible && <Box sx={{
618
+ width: 200,
619
+ height: 200,
620
+ bgcolor: 'primary.100',
621
+ borderRadius: 'md',
622
+ display: 'flex',
623
+ alignItems: 'center',
624
+ justifyContent: 'center'
625
+ }} initial={{
626
+ opacity: 0,
627
+ scale: 0.8
628
+ }} animate={{
629
+ opacity: 1,
630
+ scale: 1
631
+ }} exit={{
632
+ opacity: 0,
633
+ scale: 0.8
634
+ }} transition={{
635
+ duration: 0.3
636
+ }}>
637
+ <Typography level="title-md">애니메이션 Box</Typography>
638
+ </Box>}
639
+
640
+ <Box sx={{
641
+ width: 100,
642
+ height: 100,
643
+ bgcolor: 'success.200',
644
+ borderRadius: 'sm',
645
+ cursor: 'pointer'
646
+ }} whileHover={{
647
+ scale: 1.1,
648
+ rotate: 5
649
+ }} whileTap={{
650
+ scale: 0.95
651
+ }} />
652
+ <Typography level="body-sm">위의 박스에 마우스를 올려보거나 클릭해보세요</Typography>
653
+ </div>
654
+ ```
655
+
656
+ ### Complex Layouts
657
+
658
+ Box를 조합하여 복잡한 레이아웃을 만들 수 있습니다.
659
+
660
+ ```tsx
661
+ <div style={{
662
+ display: 'flex',
663
+ flexDirection: 'column',
664
+ gap: '2rem'
665
+ }}>
666
+ <Typography level="title-lg">복잡한 레이아웃 예제</Typography>
667
+
668
+ {/* Header */}
669
+ <Box sx={{
670
+ display: 'flex',
671
+ justifyContent: 'space-between',
672
+ alignItems: 'center',
673
+ p: 3,
674
+ bgcolor: 'primary.50',
675
+ borderRadius: 'lg'
676
+ }}>
677
+ <Typography level="title-lg">헤더</Typography>
678
+ <Box sx={{
679
+ display: 'flex',
680
+ gap: 1
681
+ }}>
682
+ <Box sx={{
683
+ px: 2,
684
+ py: 1,
685
+ bgcolor: 'primary.200',
686
+ borderRadius: 'sm'
687
+ }}>
688
+ <Typography level="body-sm">메뉴 1</Typography>
689
+ </Box>
690
+ <Box sx={{
691
+ px: 2,
692
+ py: 1,
693
+ bgcolor: 'primary.200',
694
+ borderRadius: 'sm'
695
+ }}>
696
+ <Typography level="body-sm">메뉴 2</Typography>
697
+ </Box>
698
+ </Box>
699
+ </Box>
700
+
701
+ {/* Main content area */}
702
+ <Box sx={{
703
+ display: 'flex',
704
+ gap: 3,
705
+ minHeight: 300
706
+ }}>
707
+ {/* Sidebar */}
708
+ <Box sx={{
709
+ flex: '0 0 200px',
710
+ p: 2,
711
+ bgcolor: 'neutral.50',
712
+ borderRadius: 'md',
713
+ display: 'flex',
714
+ flexDirection: 'column',
715
+ gap: 1
716
+ }}>
717
+ <Typography level="title-sm" sx={{
718
+ mb: 1
719
+ }}>
720
+ 사이드바
721
+ </Typography>
722
+ {['Item 1', 'Item 2', 'Item 3'].map(item => <Box key={item} sx={{
723
+ p: 1.5,
724
+ bgcolor: 'background.body',
725
+ borderRadius: 'sm'
726
+ }}>
727
+ <Typography level="body-sm">{item}</Typography>
728
+ </Box>)}
729
+ </Box>
730
+
731
+ {/* Content */}
732
+ <Box sx={{
733
+ flex: 1,
734
+ display: 'flex',
735
+ flexDirection: 'column',
736
+ gap: 2
737
+ }}>
738
+ <Box sx={{
739
+ p: 3,
740
+ bgcolor: 'success.50',
741
+ borderRadius: 'md'
742
+ }}>
743
+ <Typography level="title-md" sx={{
744
+ mb: 1
745
+ }}>
746
+ 메인 콘텐츠
747
+ </Typography>
748
+ <Typography level="body-md">
749
+ 여기에 주요 콘텐츠가 들어갑니다. Box 컴포넌트를 사용하여 복잡한 레이아웃을 쉽게 만들 수 있습니다.
750
+ </Typography>
751
+ </Box>
752
+
753
+ <Box sx={{
754
+ display: 'flex',
755
+ gap: 2
756
+ }}>
757
+ <Box sx={{
758
+ flex: 1,
759
+ p: 2,
760
+ bgcolor: 'warning.50',
761
+ borderRadius: 'md'
762
+ }}>
763
+ <Typography level="body-sm">카드 1</Typography>
764
+ </Box>
765
+ <Box sx={{
766
+ flex: 1,
767
+ p: 2,
768
+ bgcolor: 'warning.50',
769
+ borderRadius: 'md'
770
+ }}>
771
+ <Typography level="body-sm">카드 2</Typography>
772
+ </Box>
773
+ </Box>
774
+ </Box>
775
+ </Box>
776
+
777
+ {/* Footer */}
778
+ <Box sx={{
779
+ p: 2,
780
+ textAlign: 'center',
781
+ bgcolor: 'neutral.100',
782
+ borderRadius: 'md'
783
+ }}>
784
+ <Typography level="body-sm">푸터 영역</Typography>
785
+ </Box>
786
+ </div>
787
+ ```
788
+
789
+ ## Key Features
790
+
791
+ ### SX Prop
792
+
793
+ Box의 가장 강력한 기능은 `sx` prop입니다. 이를 통해 CSS 스타일을 객체 형태로 직접 적용할 수 있습니다.
794
+
795
+ ```tsx
796
+ <Box
797
+ sx={{
798
+ p: 2, // padding: 16px
799
+ m: { xs: 1, md: 2 }, // 반응형 마진
800
+ bgcolor: 'primary.50', // 테마 색상
801
+ borderRadius: 'md', // 테마 border-radius
802
+ '&:hover': { // hover 상태
803
+ bgcolor: 'primary.100',
804
+ },
805
+ }}
806
+ >
807
+ 콘텐츠
808
+ </Box>
809
+ ```
810
+
811
+ ### Responsive Design
812
+
813
+ 객체 구문을 사용해 브레이크포인트별 스타일을 지정할 수 있습니다.
814
+
815
+ ```tsx
816
+ <Box
817
+ sx={{
818
+ width: { xs: '100%', md: '50%' },
819
+ p: { xs: 2, md: 4 },
820
+ display: { xs: 'block', md: 'flex' },
821
+ }}
822
+ >
823
+ 반응형 박스
824
+ </Box>
825
+ ```
826
+
827
+ ### Theme Integration
828
+
829
+ 디자인 시스템의 토큰을 직접 사용할 수 있습니다.
830
+
831
+ ```tsx
832
+ <Box
833
+ sx={{
834
+ bgcolor: 'background.level1',
835
+ color: 'text.primary',
836
+ borderRadius: 'sm',
837
+ boxShadow: 'md',
838
+ }}
839
+ >
840
+ 테마 통합 박스
841
+ </Box>
842
+ ```
843
+
844
+ ### Framer Motion
845
+
846
+ 애니메이션 props를 직접 사용할 수 있습니다.
847
+
848
+ ```tsx
849
+ <Box
850
+ initial={{ opacity: 0, y: 20 }}
851
+ animate={{ opacity: 1, y: 0 }}
852
+ transition={{ duration: 0.3 }}
853
+ whileHover={{ scale: 1.05 }}
854
+ >
855
+ 애니메이션 박스
856
+ </Box>
857
+ ```
858
+
859
+ ## Common Use Cases
860
+
861
+ ### Layout Container
862
+
863
+ ```tsx
864
+ <Box sx={{ maxWidth: 1200, mx: 'auto', p: 3 }}>
865
+ <Typography level="h1">페이지 제목</Typography>
866
+ {/* 페이지 콘텐츠 */}
867
+ </Box>
868
+ ```
869
+
870
+ ### Card-like Components
871
+
872
+ ```tsx
873
+ <Box
874
+ sx={{
875
+ p: 3,
876
+ bgcolor: 'background.body',
877
+ borderRadius: 'lg',
878
+ boxShadow: 'sm',
879
+ border: '1px solid',
880
+ borderColor: 'divider',
881
+ }}
882
+ >
883
+ <Typography level="title-md">카드 제목</Typography>
884
+ <Typography level="body-md">카드 내용</Typography>
885
+ </Box>
886
+ ```
887
+
888
+ ### Flexbox Layouts
889
+
890
+ ```tsx
891
+ <Box sx={{ display: 'flex', gap: 2, alignItems: 'center' }}>
892
+ <Avatar />
893
+ <Box sx={{ flex: 1 }}>
894
+ <Typography level="title-sm">사용자 이름</Typography>
895
+ <Typography level="body-xs">부가 정보</Typography>
896
+ </Box>
897
+ </Box>
898
+ ```
899
+
900
+ ### Grid Layouts
901
+
902
+ ```tsx
903
+ <Box
904
+ sx={{
905
+ display: 'grid',
906
+ gridTemplateColumns: 'repeat(auto-fit, minmax(300px, 1fr))',
907
+ gap: 2,
908
+ }}
909
+ >
910
+ {items.map(item => (
911
+ <Box key={item.id} sx={{ p: 2, bgcolor: 'background.surface' }}>
912
+ {item.content}
913
+ </Box>
914
+ ))}
915
+ </Box>
916
+ ```
917
+
918
+ ### Centered Content
919
+
920
+ ```tsx
921
+ <Box
922
+ sx={{
923
+ display: 'flex',
924
+ alignItems: 'center',
925
+ justifyContent: 'center',
926
+ minHeight: '100vh',
927
+ }}
928
+ >
929
+ <Typography level="h1">중앙 정렬된 콘텐츠</Typography>
930
+ </Box>
931
+ ```
932
+
933
+ ### Sticky/Fixed Positioning
934
+
935
+ ```tsx
936
+ <Box
937
+ sx={{
938
+ position: 'sticky',
939
+ top: 0,
940
+ zIndex: 1000,
941
+ bgcolor: 'background.body',
942
+ borderBottom: '1px solid',
943
+ borderColor: 'divider',
944
+ }}
945
+ >
946
+ <Typography>고정된 헤더</Typography>
947
+ </Box>
948
+ ```
949
+
950
+ ## Best Practices
951
+
952
+ 1. **의미 있는 HTML 요소 사용**: `component` prop을 활용해 의미론적으로 올바른 HTML 요소를 선택하세요.
953
+
954
+ 2. **테마 토큰 활용**: 하드코딩된 값 대신 테마의 spacing, color, border-radius 등을 사용하세요.
955
+
956
+ 3. **반응형 고려**: 다양한 화면 크기에서 잘 동작하도록 반응형 값을 사용하세요.
957
+
958
+ 4. **성능 최적화**:
959
+ - 인라인 객체 생성을 피하고 가능하면 객체를 메모화하세요
960
+ - 복잡한 애니메이션은 필요할 때만 사용하세요
961
+
962
+ 5. **접근성**:
963
+ - 적절한 semantic HTML 요소를 선택하세요
964
+ - 필요시 ARIA 속성을 추가하세요
965
+ - 충분한 색상 대비를 유지하세요
966
+
967
+ 6. **재사용성**:
968
+ - 자주 사용하는 스타일 조합은 별도 컴포넌트로 분리하세요
969
+ - 공통 스타일은 테마에 정의하세요
970
+
971
+ 7. **일관성**:
972
+ - 팀 내에서 일관된 spacing과 naming convention을 사용하세요
973
+ - 디자인 시스템의 가이드라인을 따르세요
974
+
975
+ ## Spacing Scale
976
+
977
+ Box에서 사용할 수 있는 spacing 값들:
978
+
979
+ - `0.5` = 4px
980
+ - `1` = 8px
981
+ - `1.5` = 12px
982
+ - `2` = 16px
983
+ - `3` = 24px
984
+ - `4` = 32px
985
+ - `5` = 40px
986
+ - `6` = 48px
987
+
988
+ ## Color Tokens
989
+
990
+ 주요 색상 토큰들:
991
+
992
+ - **Background**: `background.body`, `background.surface`, `background.level1`
993
+ - **Primary**: `primary.50`, `primary.100`, `primary.500`, `primary.main`
994
+ - **Neutral**: `neutral.50`, `neutral.100`, `neutral.500`, `neutral.main`
995
+ - **Text**: `text.primary`, `text.secondary`, `text.tertiary`
996
+
997
+ Box는 ADS의 모든 레이아웃과 스타일링의 기초가 되는 컴포넌트입니다. 강력한 sx prop과 내장된 애니메이션 기능을 활용해 다양한 UI 요구사항을 충족할 수 있습니다.