@bigtablet/design-system 1.1.2 → 1.2.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.
package/dist/index.css CHANGED
@@ -32,118 +32,159 @@
32
32
  }
33
33
 
34
34
  /* src/ui/feedback/alert/style.scss */
35
- .alert {
36
- position: relative;
37
- display: grid;
38
- grid-template-columns: auto 1fr auto;
39
- align-items: start;
40
- gap: 0.75rem;
41
- padding: 0.75rem 1rem;
42
- border-radius: 8px;
43
- border: 1px solid #e5e5e5;
44
- background: #ffffff;
35
+ .alert-overlay {
36
+ position: fixed;
37
+ inset: 0;
38
+ background: rgba(0, 0, 0, 0.5);
39
+ display: flex;
40
+ align-items: center;
41
+ justify-content: center;
42
+ z-index: 9999;
43
+ animation: fadeIn 0.2s ease;
45
44
  }
46
- .alert::before {
47
- content: "";
48
- position: absolute;
49
- inset: 0 auto 0 0;
50
- width: 4px;
51
- border-top-left-radius: inherit;
52
- border-bottom-left-radius: inherit;
53
- background: #3b82f6;
45
+ @keyframes fadeIn {
46
+ from {
47
+ opacity: 0;
48
+ }
49
+ to {
50
+ opacity: 1;
51
+ }
54
52
  }
55
- .alert__icon {
56
- margin-top: 2px;
57
- color: #666666;
58
- display: inline-grid;
59
- place-items: center;
53
+ @keyframes slideUp {
54
+ from {
55
+ opacity: 0;
56
+ transform: translateY(20px);
57
+ }
58
+ to {
59
+ opacity: 1;
60
+ transform: translateY(0);
61
+ }
60
62
  }
61
- .alert__content {
62
- min-width: 0;
63
+ .alert-modal {
64
+ background: white;
65
+ border-radius: 12px;
66
+ padding: 0;
67
+ min-width: 320px;
68
+ max-width: 480px;
69
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
70
+ animation: slideUp 0.3s cubic-bezier(0.4, 0, 0.2, 1);
71
+ position: relative;
72
+ overflow: hidden;
63
73
  }
64
- .alert__title {
65
- font-size: 1rem;
74
+ .alert-modal__title {
75
+ font-size: 1.125rem;
66
76
  line-height: 1.5;
67
77
  font-weight: 600;
68
- color: #1a1a1a;
69
- margin-bottom: 0.25rem;
78
+ color: #3b82f6;
79
+ margin-top: 8px;
80
+ padding: 0.75rem 1.25rem;
81
+ padding-bottom: 0.25rem;
70
82
  }
71
- .alert__desc {
83
+ .alert-modal__message {
72
84
  font-size: 0.9375rem;
73
85
  font-weight: 400;
74
86
  line-height: 1.5;
75
87
  color: #666666;
88
+ margin: 0;
89
+ padding: 1.25rem;
90
+ padding-bottom: 1rem;
91
+ line-height: 1.6;
76
92
  }
77
- .alert__close {
78
- align-self: start;
79
- display: inline-grid;
80
- place-items: center;
81
- margin-left: 0.75rem;
82
- width: 28px;
83
- height: 28px;
84
- padding: 0;
85
- border: 0;
93
+ .alert-modal__actions {
94
+ display: flex;
95
+ gap: 0.5rem;
96
+ align-items: center;
97
+ padding: 0 1.25rem 1.25rem 1.25rem;
98
+ }
99
+ .alert-modal__actions--left {
100
+ justify-content: flex-start;
101
+ }
102
+ .alert-modal__actions--center {
103
+ justify-content: center;
104
+ }
105
+ .alert-modal__actions--right {
106
+ justify-content: flex-end;
107
+ }
108
+ .alert-modal__button {
109
+ padding: 10px 24px;
86
110
  border-radius: 6px;
87
- background: transparent;
88
- color: #666666;
89
- line-height: 1;
111
+ font-size: 14px;
112
+ font-weight: 600;
90
113
  cursor: pointer;
91
- transition:
92
- background 0.15s ease,
93
- color 0.15s ease,
94
- transform 0.05s ease;
114
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
115
+ border: 1px solid transparent;
116
+ min-width: 80px;
117
+ line-height: 1.5;
95
118
  }
96
- .alert__close:hover {
97
- background: rgba(0, 0, 0, 0.05);
119
+ .alert-modal__button:focus-visible {
120
+ outline: 2px solid rgba(0, 0, 0, 0.3);
121
+ outline-offset: 2px;
122
+ }
123
+ .alert-modal__button--cancel {
124
+ background: white;
125
+ border-color: #e5e5e5;
98
126
  color: #1a1a1a;
99
127
  }
100
- .alert__close:active {
101
- transform: translateY(0.5px);
128
+ .alert-modal__button--cancel:hover {
129
+ background: rgba(0, 0, 0, 0.04);
130
+ border-color: rgba(0, 0, 0, 0.3);
102
131
  }
103
- .alert__close:focus-visible {
104
- outline: 2px solid rgba(0, 0, 0, 0.2);
105
- outline-offset: 2px;
132
+ .alert-modal__button--cancel:active {
133
+ transform: scale(0.98);
134
+ background: rgba(0, 0, 0, 0.06);
106
135
  }
107
- .alert--info {
108
- background: rgb(243.24, 247.5, 254.46);
109
- border-color: rgb(200.12, 220, 252.48);
136
+ .alert-modal__button--confirm {
137
+ color: white;
138
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
110
139
  }
111
- .alert--info::before {
112
- background: #3b82f6;
140
+ .alert-modal__button--confirm:active {
141
+ transform: scale(0.98);
113
142
  }
114
- .alert--info .alert__icon {
143
+ .alert-modal--info .alert-modal__title {
115
144
  color: #3b82f6;
116
145
  }
117
- .alert--success {
118
- background: rgb(240.66, 250.8, 247.44);
119
- border-color: rgb(188.08, 235.4, 219.72);
146
+ .alert-modal--info .alert-modal__button--confirm {
147
+ background: #3b82f6;
148
+ border-color: #3b82f6;
120
149
  }
121
- .alert--success::before {
122
- background: #10b981;
150
+ .alert-modal--info .alert-modal__button--confirm:hover {
151
+ background: rgb(29.7434146341, 111.3414634146, 244.6565853659);
152
+ border-color: rgb(29.7434146341, 111.3414634146, 244.6565853659);
123
153
  }
124
- .alert--success .alert__icon {
154
+ .alert-modal--success .alert-modal__title {
125
155
  color: #10b981;
126
156
  }
127
- .alert--warning {
128
- background: rgb(254.2, 247.24, 235.48);
129
- border-color: rgb(251.8, 223.96, 176.92);
157
+ .alert-modal--success .alert-modal__button--confirm {
158
+ background: #10b981;
159
+ border-color: #10b981;
130
160
  }
131
- .alert--warning::before {
132
- background: #f59e0b;
161
+ .alert-modal--success .alert-modal__button--confirm:hover {
162
+ background: rgb(13.5641791045, 156.8358208955, 109.3611940299);
163
+ border-color: rgb(13.5641791045, 156.8358208955, 109.3611940299);
133
164
  }
134
- .alert--warning .alert__icon {
165
+ .alert-modal--warning .alert-modal__title {
135
166
  color: #f59e0b;
136
167
  }
137
- .alert--error {
138
- background: rgb(254.04, 243.78, 243.78);
139
- border-color: rgb(250.52, 202.64, 202.64);
168
+ .alert-modal--warning .alert-modal__button--confirm {
169
+ background: #f59e0b;
170
+ border-color: #f59e0b;
140
171
  }
141
- .alert--error::before {
142
- background: #ef4444;
172
+ .alert-modal--warning .alert-modal__button--confirm:hover {
173
+ background: rgb(216.525984252, 139.3220472441, 8.874015748);
174
+ border-color: rgb(216.525984252, 139.3220472441, 8.874015748);
143
175
  }
144
- .alert--error .alert__icon {
176
+ .alert-modal--error .alert-modal__title {
145
177
  color: #ef4444;
146
178
  }
179
+ .alert-modal--error .alert-modal__button--confirm {
180
+ background: #ef4444;
181
+ border-color: #ef4444;
182
+ }
183
+ .alert-modal--error .alert-modal__button--confirm:hover {
184
+ background: rgb(236.5881773399, 39.8118226601, 39.8118226601);
185
+ border-color: rgb(236.5881773399, 39.8118226601, 39.8118226601);
186
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
187
+ }
147
188
 
148
189
  /* src/ui/feedback/loading/style.scss */
149
190
  @keyframes spin {
@@ -159,6 +200,110 @@
159
200
  animation: spin 0.8s linear infinite;
160
201
  }
161
202
 
203
+ /* src/ui/general/button/style.scss */
204
+ .btn {
205
+ display: flex;
206
+ align-items: center;
207
+ justify-content: center;
208
+ border: none;
209
+ cursor: pointer;
210
+ transition: 0.2s ease-out;
211
+ font-weight: 500;
212
+ border-radius: 8px;
213
+ }
214
+ .btn:disabled {
215
+ cursor: not-allowed;
216
+ opacity: 0.5;
217
+ }
218
+ .btn--primary {
219
+ display: flex;
220
+ align-items: center;
221
+ justify-content: center;
222
+ border: none;
223
+ cursor: pointer;
224
+ transition: 0.2s ease-out;
225
+ font-weight: 500;
226
+ border-radius: 8px;
227
+ }
228
+ .btn--primary:disabled {
229
+ cursor: not-allowed;
230
+ opacity: 0.5;
231
+ }
232
+ .btn--primary {
233
+ background: #000000;
234
+ color: #ffffff;
235
+ }
236
+ .btn--primary:hover:not(:disabled) {
237
+ background: #333333;
238
+ }
239
+ .btn--primary:active:not(:disabled) {
240
+ transform: scale(0.98);
241
+ }
242
+ .btn--secondary {
243
+ display: flex;
244
+ align-items: center;
245
+ justify-content: center;
246
+ border: none;
247
+ cursor: pointer;
248
+ transition: 0.2s ease-out;
249
+ font-weight: 500;
250
+ border-radius: 8px;
251
+ }
252
+ .btn--secondary:disabled {
253
+ cursor: not-allowed;
254
+ opacity: 0.5;
255
+ }
256
+ .btn--secondary {
257
+ background: transparent;
258
+ border: 1px solid #e5e5e5;
259
+ color: #1a1a1a;
260
+ }
261
+ .btn--secondary:hover:not(:disabled) {
262
+ background: #fafafa;
263
+ }
264
+ .btn--secondary:active:not(:disabled) {
265
+ transform: scale(0.98);
266
+ }
267
+ .btn--ghost {
268
+ display: flex;
269
+ align-items: center;
270
+ justify-content: center;
271
+ border: none;
272
+ cursor: pointer;
273
+ transition: 0.2s ease-out;
274
+ font-weight: 500;
275
+ border-radius: 8px;
276
+ }
277
+ .btn--ghost:disabled {
278
+ cursor: not-allowed;
279
+ opacity: 0.5;
280
+ }
281
+ .btn--ghost {
282
+ background: transparent;
283
+ color: #1a1a1a;
284
+ }
285
+ .btn--ghost:hover:not(:disabled) {
286
+ background: rgba(0, 0, 0, 0.05);
287
+ }
288
+ .btn--ghost:active:not(:disabled) {
289
+ transform: scale(0.95);
290
+ }
291
+ .btn--sm {
292
+ padding: 0.5rem 1rem;
293
+ font-size: 0.875rem;
294
+ line-height: 1.5;
295
+ }
296
+ .btn--md {
297
+ padding: 0.75rem 1.25rem;
298
+ font-size: 0.9375rem;
299
+ line-height: 1.5;
300
+ }
301
+ .btn--lg {
302
+ padding: 1rem 1.5rem;
303
+ font-size: 1rem;
304
+ line-height: 1.5;
305
+ }
306
+
162
307
  /* src/ui/form/checkbox/style.scss */
163
308
  .checkbox {
164
309
  display: inline-flex;
@@ -264,6 +409,145 @@
264
409
  border-color: #000000;
265
410
  }
266
411
 
412
+ /* src/ui/form/markdown/style.scss */
413
+ .md {
414
+ display: grid;
415
+ gap: 0.5rem;
416
+ }
417
+ .md__label {
418
+ font-size: 0.875rem;
419
+ font-weight: 400;
420
+ line-height: 1.5;
421
+ color: #6B7280;
422
+ }
423
+ .md__grid {
424
+ display: grid;
425
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
426
+ align-items: stretch;
427
+ column-gap: 1.5rem;
428
+ row-gap: 0.75rem;
429
+ }
430
+ @media (max-width: 960px) {
431
+ .md__grid {
432
+ grid-template-columns: 1fr;
433
+ }
434
+ }
435
+ .md__input,
436
+ .md__preview {
437
+ min-width: 0;
438
+ box-sizing: border-box;
439
+ max-width: 100%;
440
+ overflow: auto;
441
+ }
442
+ .md__input {
443
+ width: 100%;
444
+ min-height: 300px;
445
+ border: 1px solid #e5e5e5;
446
+ border-radius: 8px;
447
+ padding: 0.75rem;
448
+ background: #ffffff;
449
+ font-size: 0.9375rem;
450
+ font-weight: 400;
451
+ line-height: 1.5;
452
+ color: #3B3B3B;
453
+ line-height: 1.75;
454
+ resize: vertical;
455
+ transition: border-color 0.2s ease-out, box-shadow 0.2s ease-out;
456
+ }
457
+ .md__input:hover {
458
+ border-color: rgba(0, 0, 0, 0.08);
459
+ }
460
+ .md__input:focus {
461
+ border-color: #000000;
462
+ box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.06);
463
+ outline: none;
464
+ }
465
+ .md__preview {
466
+ min-height: 300px;
467
+ border: 1px solid #e5e5e5;
468
+ border-radius: 8px;
469
+ background: #ffffff;
470
+ padding: 0.75rem;
471
+ }
472
+ .markdown-body {
473
+ font-size: 0.9375rem;
474
+ font-weight: 400;
475
+ line-height: 1.5;
476
+ color: #3B3B3B;
477
+ line-height: 1.7;
478
+ word-break: break-word;
479
+ overflow-wrap: anywhere;
480
+ }
481
+ .markdown-body img,
482
+ .markdown-body video {
483
+ max-width: 100%;
484
+ height: auto;
485
+ display: block;
486
+ }
487
+ .markdown-body h1,
488
+ .markdown-body h2,
489
+ .markdown-body h3,
490
+ .markdown-body h4,
491
+ .markdown-body h5,
492
+ .markdown-body h6 {
493
+ font-size: 1.25rem;
494
+ font-weight: 600;
495
+ line-height: 1.3;
496
+ color: #1F2937;
497
+ margin: 1rem 0 0.5rem;
498
+ }
499
+ .markdown-body p {
500
+ margin: 0.5rem 0;
501
+ }
502
+ .markdown-body a {
503
+ color: #000000;
504
+ text-decoration: underline;
505
+ }
506
+ .markdown-body ul,
507
+ .markdown-body ol {
508
+ margin: 0.5rem 0 0.5rem 1rem;
509
+ }
510
+ .markdown-body blockquote {
511
+ border-left: 4px solid #e5e5e5;
512
+ padding-left: 0.75rem;
513
+ color: #6B7280;
514
+ margin: 0.5rem 0;
515
+ }
516
+ .markdown-body table {
517
+ width: 100%;
518
+ border-collapse: collapse;
519
+ margin: 0.75rem 0;
520
+ }
521
+ .markdown-body table th,
522
+ .markdown-body table td {
523
+ border: 1px solid #e5e5e5;
524
+ padding: 0.5rem 0.75rem;
525
+ text-align: left;
526
+ }
527
+ .markdown-body table th {
528
+ background: #fafafa;
529
+ }
530
+ .markdown-body code {
531
+ background: #fafafa;
532
+ padding: 2px 6px;
533
+ border-radius: 6px;
534
+ font-family:
535
+ ui-monospace,
536
+ SFMono-Regular,
537
+ Menlo,
538
+ monospace;
539
+ }
540
+ .markdown-body pre {
541
+ background: #fafafa;
542
+ padding: 0.75rem;
543
+ border-radius: 8px;
544
+ overflow: auto;
545
+ }
546
+ .markdown-body pre code {
547
+ background: transparent;
548
+ padding: 0;
549
+ }
550
+
267
551
  /* src/ui/form/radio/style.scss */
268
552
  .radio {
269
553
  display: inline-flex;
@@ -329,26 +613,239 @@
329
613
  cursor: not-allowed;
330
614
  }
331
615
 
332
- /* src/ui/form/switch/style.scss */
333
- .switch {
616
+ /* src/ui/general/select/style.scss */
617
+ .select {
334
618
  position: relative;
335
619
  display: inline-flex;
336
- align-items: center;
337
- border-radius: 9999px;
338
- background: #e5e5e5;
339
- transition: background 0.2s ease-out;
340
- cursor: pointer;
341
- width: 40px;
342
- height: 22px;
343
- padding: 2px;
620
+ flex-direction: column;
621
+ width: 100%;
622
+ gap: 0.25rem;
623
+ font-family: "Pretendard", sans-serif;
344
624
  }
345
- .switch__thumb {
346
- width: 18px;
347
- height: 18px;
348
- background: #ffffff;
349
- border-radius: 9999px;
350
- transition: transform 0.2s ease-out;
351
- transform: translateX(0);
625
+ .select__label {
626
+ font-size: 0.875rem;
627
+ line-height: 1.5;
628
+ font-weight: 500;
629
+ color: #1a1a1a;
630
+ }
631
+ .select__control--outline {
632
+ width: 100%;
633
+ display: inline-flex;
634
+ align-items: center;
635
+ justify-content: space-between;
636
+ gap: 0.5rem;
637
+ cursor: pointer;
638
+ color: #1a1a1a;
639
+ background: #ffffff;
640
+ border-radius: 8px;
641
+ transition:
642
+ border-color 0.2s ease-out,
643
+ box-shadow 0.2s ease-out,
644
+ background 0.2s ease-out;
645
+ font-size: 0.9375rem;
646
+ line-height: 1.5;
647
+ }
648
+ .select__control--outline:disabled,
649
+ .select__control--outline.is-disabled {
650
+ cursor: not-allowed;
651
+ opacity: 0.7;
652
+ background: #fafafa;
653
+ color: #999999;
654
+ }
655
+ .select__control--outline {
656
+ border: 1px solid #e5e5e5;
657
+ }
658
+ .select__control--outline:hover:not(.is-disabled) {
659
+ border-color: rgba(0, 0, 0, 0.08);
660
+ }
661
+ .select__control--outline.is-open {
662
+ border-color: #000000;
663
+ box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.15);
664
+ }
665
+ .select__control--filled {
666
+ width: 100%;
667
+ display: inline-flex;
668
+ align-items: center;
669
+ justify-content: space-between;
670
+ gap: 0.5rem;
671
+ cursor: pointer;
672
+ color: #1a1a1a;
673
+ background: #ffffff;
674
+ border-radius: 8px;
675
+ transition:
676
+ border-color 0.2s ease-out,
677
+ box-shadow 0.2s ease-out,
678
+ background 0.2s ease-out;
679
+ font-size: 0.9375rem;
680
+ line-height: 1.5;
681
+ }
682
+ .select__control--filled:disabled,
683
+ .select__control--filled.is-disabled {
684
+ cursor: not-allowed;
685
+ opacity: 0.7;
686
+ background: #fafafa;
687
+ color: #999999;
688
+ }
689
+ .select__control--filled {
690
+ background: #fafafa;
691
+ border: 1px solid transparent;
692
+ }
693
+ .select__control--filled:hover:not(.is-disabled) {
694
+ background: rgb(253.5, 253.5, 253.5);
695
+ }
696
+ .select__control--filled.is-open {
697
+ background: #ffffff;
698
+ border-color: #000000;
699
+ box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.15);
700
+ }
701
+ .select__control--ghost {
702
+ width: 100%;
703
+ display: inline-flex;
704
+ align-items: center;
705
+ justify-content: space-between;
706
+ gap: 0.5rem;
707
+ cursor: pointer;
708
+ color: #1a1a1a;
709
+ background: #ffffff;
710
+ border-radius: 8px;
711
+ transition:
712
+ border-color 0.2s ease-out,
713
+ box-shadow 0.2s ease-out,
714
+ background 0.2s ease-out;
715
+ font-size: 0.9375rem;
716
+ line-height: 1.5;
717
+ }
718
+ .select__control--ghost:disabled,
719
+ .select__control--ghost.is-disabled {
720
+ cursor: not-allowed;
721
+ opacity: 0.7;
722
+ background: #fafafa;
723
+ color: #999999;
724
+ }
725
+ .select__control--ghost {
726
+ background: transparent;
727
+ border: 1px solid transparent;
728
+ }
729
+ .select__control--ghost:hover:not(.is-disabled) {
730
+ background: rgba(0, 0, 0, 0.03);
731
+ }
732
+ .select__control--ghost.is-open {
733
+ background: #ffffff;
734
+ border-color: #000000;
735
+ box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.15);
736
+ }
737
+ .select__control--sm {
738
+ padding: 0.5rem 1rem;
739
+ font-size: 0.875rem;
740
+ line-height: 1.5;
741
+ }
742
+ .select__control--md {
743
+ padding: 0.75rem 1.25rem;
744
+ font-size: 0.9375rem;
745
+ line-height: 1.5;
746
+ }
747
+ .select__control--lg {
748
+ padding: 1rem 1.5rem;
749
+ font-size: 1rem;
750
+ line-height: 1.5;
751
+ }
752
+ .select__control .select__value {
753
+ flex: 1 1 auto;
754
+ min-width: 0;
755
+ overflow: hidden;
756
+ text-overflow: ellipsis;
757
+ white-space: nowrap;
758
+ font-size: 0.9375rem;
759
+ font-weight: 400;
760
+ line-height: 1.5;
761
+ }
762
+ .select__control .select__placeholder {
763
+ flex: 1 1 auto;
764
+ min-width: 0;
765
+ overflow: hidden;
766
+ text-overflow: ellipsis;
767
+ white-space: nowrap;
768
+ font-size: 0.9375rem;
769
+ font-weight: 400;
770
+ line-height: 1.5;
771
+ color: #999999;
772
+ }
773
+ .select__control .select__icon {
774
+ display: inline-flex;
775
+ align-items: center;
776
+ justify-content: center;
777
+ color: #666666;
778
+ }
779
+ .select__list {
780
+ position: absolute;
781
+ z-index: 10000;
782
+ top: calc(100% + 0.25rem);
783
+ left: 0;
784
+ width: 100%;
785
+ min-width: 100%;
786
+ box-sizing: border-box;
787
+ background: #ffffff;
788
+ border: 1px solid #e5e5e5;
789
+ border-radius: 8px;
790
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.04);
791
+ max-height: 18rem;
792
+ overflow-y: auto;
793
+ overflow-x: hidden;
794
+ padding: 0.25rem 0;
795
+ }
796
+ .select__option {
797
+ width: 100%;
798
+ box-sizing: border-box;
799
+ display: grid;
800
+ grid-template-columns: 1fr auto;
801
+ align-items: center;
802
+ gap: 0.5rem;
803
+ padding: 0.5rem 1rem;
804
+ cursor: pointer;
805
+ color: #1a1a1a;
806
+ background: transparent;
807
+ font-size: 0.9375rem;
808
+ font-weight: 400;
809
+ line-height: 1.5;
810
+ }
811
+ .select__option > span:first-child {
812
+ min-width: 0;
813
+ overflow: hidden;
814
+ text-overflow: ellipsis;
815
+ white-space: nowrap;
816
+ }
817
+ .select__option:hover,
818
+ .select__option.is-active {
819
+ background: #fafafa;
820
+ }
821
+ .select__option.is-selected {
822
+ font-weight: 500;
823
+ }
824
+ .select__option.is-disabled {
825
+ cursor: not-allowed;
826
+ color: #999999;
827
+ }
828
+
829
+ /* src/ui/form/switch/style.scss */
830
+ .switch {
831
+ position: relative;
832
+ display: inline-flex;
833
+ align-items: center;
834
+ border-radius: 9999px;
835
+ background: #e5e5e5;
836
+ transition: background 0.2s ease-out;
837
+ cursor: pointer;
838
+ width: 40px;
839
+ height: 22px;
840
+ padding: 2px;
841
+ }
842
+ .switch__thumb {
843
+ width: 18px;
844
+ height: 18px;
845
+ background: #ffffff;
846
+ border-radius: 9999px;
847
+ transition: transform 0.2s ease-out;
848
+ transform: translateX(0);
352
849
  }
353
850
  .switch.is-on {
354
851
  background: #000000;
@@ -384,8 +881,12 @@
384
881
  }
385
882
 
386
883
  /* src/ui/form/textfield/style.scss */
884
+ .tf {
885
+ display: flex;
886
+ flex-direction: column;
887
+ }
387
888
  .tf__label {
388
- margin-bottom: 0.75rem;
889
+ margin-bottom: 0.25rem;
389
890
  color: #1a1a1a;
390
891
  font-size: 0.875rem;
391
892
  line-height: 1.5;
@@ -552,347 +1053,30 @@
552
1053
  color: #ef4444;
553
1054
  }
554
1055
 
555
- /* src/ui/general/button/style.scss */
556
- .btn {
557
- display: flex;
1056
+ /* src/ui/navigation/pagination/style.scss */
1057
+ .pagination {
1058
+ display: inline-flex;
558
1059
  align-items: center;
559
- justify-content: center;
560
- border: none;
1060
+ gap: 0.5rem;
1061
+ }
1062
+ .pagination__item {
1063
+ border: 1px solid #e5e5e5;
1064
+ background: #ffffff;
1065
+ color: #1a1a1a;
1066
+ border-radius: 6px;
1067
+ padding: 0.25rem 0.5rem;
561
1068
  cursor: pointer;
562
- transition: 0.2s ease-out;
563
- font-weight: 500;
564
- border-radius: 8px;
1069
+ font-size: 0.875rem;
1070
+ line-height: 1.5;
565
1071
  }
566
- .btn:disabled {
567
- cursor: not-allowed;
1072
+ .pagination__item.is-active {
1073
+ background: #000000;
1074
+ color: #ffffff;
1075
+ border-color: #000000;
1076
+ }
1077
+ .pagination__item:disabled {
568
1078
  opacity: 0.5;
569
- }
570
- .btn--primary {
571
- display: flex;
572
- align-items: center;
573
- justify-content: center;
574
- border: none;
575
- cursor: pointer;
576
- transition: 0.2s ease-out;
577
- font-weight: 500;
578
- border-radius: 8px;
579
- }
580
- .btn--primary:disabled {
581
- cursor: not-allowed;
582
- opacity: 0.5;
583
- }
584
- .btn--primary {
585
- background: #000000;
586
- color: #ffffff;
587
- }
588
- .btn--primary:hover:not(:disabled) {
589
- background: #333333;
590
- }
591
- .btn--primary:active:not(:disabled) {
592
- transform: scale(0.98);
593
- }
594
- .btn--secondary {
595
- display: flex;
596
- align-items: center;
597
- justify-content: center;
598
- border: none;
599
- cursor: pointer;
600
- transition: 0.2s ease-out;
601
- font-weight: 500;
602
- border-radius: 8px;
603
- }
604
- .btn--secondary:disabled {
605
- cursor: not-allowed;
606
- opacity: 0.5;
607
- }
608
- .btn--secondary {
609
- background: transparent;
610
- border: 1px solid #e5e5e5;
611
- color: #1a1a1a;
612
- }
613
- .btn--secondary:hover:not(:disabled) {
614
- background: #fafafa;
615
- }
616
- .btn--secondary:active:not(:disabled) {
617
- transform: scale(0.98);
618
- }
619
- .btn--ghost {
620
- display: flex;
621
- align-items: center;
622
- justify-content: center;
623
- border: none;
624
- cursor: pointer;
625
- transition: 0.2s ease-out;
626
- font-weight: 500;
627
- border-radius: 8px;
628
- }
629
- .btn--ghost:disabled {
630
- cursor: not-allowed;
631
- opacity: 0.5;
632
- }
633
- .btn--ghost {
634
- background: transparent;
635
- color: #1a1a1a;
636
- }
637
- .btn--ghost:hover:not(:disabled) {
638
- background: rgba(0, 0, 0, 0.05);
639
- }
640
- .btn--ghost:active:not(:disabled) {
641
- transform: scale(0.95);
642
- }
643
- .btn--sm {
644
- padding: 0.5rem 1rem;
645
- font-size: 0.875rem;
646
- line-height: 1.5;
647
- }
648
- .btn--md {
649
- padding: 0.75rem 1.25rem;
650
- font-size: 0.9375rem;
651
- line-height: 1.5;
652
- }
653
- .btn--lg {
654
- padding: 1rem 1.5rem;
655
- font-size: 1rem;
656
- line-height: 1.5;
657
- }
658
-
659
- /* src/ui/general/select/style.scss */
660
- .select {
661
- position: relative;
662
- display: inline-flex;
663
- flex-direction: column;
664
- width: 100%;
665
- gap: 0.25rem;
666
- font-family: "Pretendard", sans-serif;
667
- }
668
- .select__label {
669
- font-size: 0.875rem;
670
- line-height: 1.5;
671
- font-weight: 500;
672
- color: #1a1a1a;
673
- }
674
- .select__control--outline {
675
- width: 100%;
676
- display: inline-flex;
677
- align-items: center;
678
- justify-content: space-between;
679
- gap: 0.5rem;
680
- cursor: pointer;
681
- color: #1a1a1a;
682
- background: #ffffff;
683
- border-radius: 8px;
684
- transition:
685
- border-color 0.2s ease-out,
686
- box-shadow 0.2s ease-out,
687
- background 0.2s ease-out;
688
- font-size: 0.9375rem;
689
- line-height: 1.5;
690
- }
691
- .select__control--outline:disabled,
692
- .select__control--outline.is-disabled {
693
- cursor: not-allowed;
694
- opacity: 0.7;
695
- background: #fafafa;
696
- color: #999999;
697
- }
698
- .select__control--outline {
699
- border: 1px solid #e5e5e5;
700
- }
701
- .select__control--outline:hover:not(.is-disabled) {
702
- border-color: rgba(0, 0, 0, 0.08);
703
- }
704
- .select__control--outline.is-open {
705
- border-color: #000000;
706
- box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.15);
707
- }
708
- .select__control--filled {
709
- width: 100%;
710
- display: inline-flex;
711
- align-items: center;
712
- justify-content: space-between;
713
- gap: 0.5rem;
714
- cursor: pointer;
715
- color: #1a1a1a;
716
- background: #ffffff;
717
- border-radius: 8px;
718
- transition:
719
- border-color 0.2s ease-out,
720
- box-shadow 0.2s ease-out,
721
- background 0.2s ease-out;
722
- font-size: 0.9375rem;
723
- line-height: 1.5;
724
- }
725
- .select__control--filled:disabled,
726
- .select__control--filled.is-disabled {
727
- cursor: not-allowed;
728
- opacity: 0.7;
729
- background: #fafafa;
730
- color: #999999;
731
- }
732
- .select__control--filled {
733
- background: #fafafa;
734
- border: 1px solid transparent;
735
- }
736
- .select__control--filled:hover:not(.is-disabled) {
737
- background: rgb(253.5, 253.5, 253.5);
738
- }
739
- .select__control--filled.is-open {
740
- background: #ffffff;
741
- border-color: #000000;
742
- box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.15);
743
- }
744
- .select__control--ghost {
745
- width: 100%;
746
- display: inline-flex;
747
- align-items: center;
748
- justify-content: space-between;
749
- gap: 0.5rem;
750
- cursor: pointer;
751
- color: #1a1a1a;
752
- background: #ffffff;
753
- border-radius: 8px;
754
- transition:
755
- border-color 0.2s ease-out,
756
- box-shadow 0.2s ease-out,
757
- background 0.2s ease-out;
758
- font-size: 0.9375rem;
759
- line-height: 1.5;
760
- }
761
- .select__control--ghost:disabled,
762
- .select__control--ghost.is-disabled {
763
- cursor: not-allowed;
764
- opacity: 0.7;
765
- background: #fafafa;
766
- color: #999999;
767
- }
768
- .select__control--ghost {
769
- background: transparent;
770
- border: 1px solid transparent;
771
- }
772
- .select__control--ghost:hover:not(.is-disabled) {
773
- background: rgba(0, 0, 0, 0.03);
774
- }
775
- .select__control--ghost.is-open {
776
- background: #ffffff;
777
- border-color: #000000;
778
- box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.15);
779
- }
780
- .select__control--sm {
781
- padding: 0.5rem 1rem;
782
- font-size: 0.875rem;
783
- line-height: 1.5;
784
- }
785
- .select__control--md {
786
- padding: 0.75rem 1.25rem;
787
- font-size: 0.9375rem;
788
- line-height: 1.5;
789
- }
790
- .select__control--lg {
791
- padding: 1rem 1.5rem;
792
- font-size: 1rem;
793
- line-height: 1.5;
794
- }
795
- .select__control .select__value {
796
- flex: 1 1 auto;
797
- min-width: 0;
798
- overflow: hidden;
799
- text-overflow: ellipsis;
800
- white-space: nowrap;
801
- font-size: 0.9375rem;
802
- font-weight: 400;
803
- line-height: 1.5;
804
- }
805
- .select__control .select__placeholder {
806
- flex: 1 1 auto;
807
- min-width: 0;
808
- overflow: hidden;
809
- text-overflow: ellipsis;
810
- white-space: nowrap;
811
- font-size: 0.9375rem;
812
- font-weight: 400;
813
- line-height: 1.5;
814
- color: #999999;
815
- }
816
- .select__control .select__icon {
817
- display: inline-flex;
818
- align-items: center;
819
- justify-content: center;
820
- color: #666666;
821
- }
822
- .select__list {
823
- position: absolute;
824
- z-index: 10000;
825
- top: calc(100% + 0.25rem);
826
- left: 0;
827
- width: 100%;
828
- min-width: 100%;
829
- box-sizing: border-box;
830
- background: #ffffff;
831
- border: 1px solid #e5e5e5;
832
- border-radius: 8px;
833
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.04);
834
- max-height: 18rem;
835
- overflow-y: auto;
836
- overflow-x: hidden;
837
- padding: 0.25rem 0;
838
- }
839
- .select__option {
840
- width: 100%;
841
- box-sizing: border-box;
842
- display: grid;
843
- grid-template-columns: 1fr auto;
844
- align-items: center;
845
- gap: 0.5rem;
846
- padding: 0.5rem 1rem;
847
- cursor: pointer;
848
- color: #1a1a1a;
849
- background: transparent;
850
- font-size: 0.9375rem;
851
- font-weight: 400;
852
- line-height: 1.5;
853
- }
854
- .select__option > span:first-child {
855
- min-width: 0;
856
- overflow: hidden;
857
- text-overflow: ellipsis;
858
- white-space: nowrap;
859
- }
860
- .select__option:hover,
861
- .select__option.is-active {
862
- background: #fafafa;
863
- }
864
- .select__option.is-selected {
865
- font-weight: 500;
866
- }
867
- .select__option.is-disabled {
868
- cursor: not-allowed;
869
- color: #999999;
870
- }
871
-
872
- /* src/ui/navigation/pagination/style.scss */
873
- .pagination {
874
- display: inline-flex;
875
- align-items: center;
876
- gap: 0.5rem;
877
- }
878
- .pagination__item {
879
- border: 1px solid #e5e5e5;
880
- background: #ffffff;
881
- color: #1a1a1a;
882
- border-radius: 6px;
883
- padding: 0.25rem 0.5rem;
884
- cursor: pointer;
885
- font-size: 0.875rem;
886
- line-height: 1.5;
887
- }
888
- .pagination__item.is-active {
889
- background: #000000;
890
- color: #ffffff;
891
- border-color: #000000;
892
- }
893
- .pagination__item:disabled {
894
- opacity: 0.5;
895
- cursor: not-allowed;
1079
+ cursor: not-allowed;
896
1080
  }
897
1081
  .pagination__item:focus-visible {
898
1082
  box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.15);
@@ -903,65 +1087,6 @@
903
1087
  color: #999999;
904
1088
  }
905
1089
 
906
- /* src/ui/navigation/sidebar/style.scss */
907
- .sidebar {
908
- height: 100%;
909
- background: #ffffff;
910
- border-right: 1px solid #e5e5e5;
911
- display: flex;
912
- flex-direction: column;
913
- gap: 0.5rem;
914
- padding: 0.5rem;
915
- }
916
- .sidebar__toggle {
917
- align-self: flex-end;
918
- width: 24px;
919
- height: 24px;
920
- border-radius: 6px;
921
- border: 1px solid #e5e5e5;
922
- background: #ffffff;
923
- }
924
- .sidebar__nav {
925
- display: grid;
926
- gap: 0.25rem;
927
- }
928
- .sidebar__item {
929
- display: grid;
930
- grid-template-columns: 24px 1fr;
931
- align-items: center;
932
- gap: 0.5rem;
933
- padding: 0.5rem;
934
- border-radius: 8px;
935
- color: #1a1a1a;
936
- background: transparent;
937
- border: 1px solid transparent;
938
- font-size: 0.9375rem;
939
- line-height: 1.5;
940
- cursor: pointer;
941
- transition: background 0.2s ease, color 0.2s ease;
942
- }
943
- .sidebar__item:hover {
944
- background: #fafafa;
945
- }
946
- .sidebar__item.is-active {
947
- background: rgb(25.5, 25.5, 25.5);
948
- border-color: rgb(76.5, 76.5, 76.5);
949
- color: #ffffff;
950
- }
951
- .sidebar__item.is-active .sidebar__icon {
952
- color: #ffffff;
953
- }
954
- .sidebar__icon {
955
- display: inline-grid;
956
- place-items: center;
957
- color: #666666;
958
- transition: color 0.2s ease;
959
- }
960
- .sidebar.is-collapsed .sidebar__item {
961
- grid-template-columns: 1fr;
962
- place-items: center;
963
- }
964
-
965
1090
  /* src/ui/overlay/modal/style.scss */
966
1091
  .modal {
967
1092
  position: fixed;
@@ -988,3 +1113,96 @@
988
1113
  .modal__body {
989
1114
  padding: 1rem;
990
1115
  }
1116
+
1117
+ /* src/ui/skeleton/card/style.scss */
1118
+ .card-skeleton {
1119
+ display: flex;
1120
+ flex-direction: column;
1121
+ border: 1px solid var(--line-normal);
1122
+ border-radius: 12px;
1123
+ overflow: hidden;
1124
+ background: var(--background-light);
1125
+ animation: card-skeleton-pulse 1.5s ease-in-out infinite;
1126
+ }
1127
+ .card-skeleton__thumb {
1128
+ width: 100%;
1129
+ aspect-ratio: 4/3;
1130
+ background: var(--background-input);
1131
+ }
1132
+ .card-skeleton__text {
1133
+ padding: 12px;
1134
+ display: flex;
1135
+ flex-direction: column;
1136
+ gap: 8px;
1137
+ }
1138
+ .card-skeleton__line {
1139
+ height: 12px;
1140
+ background: var(--background-input);
1141
+ border-radius: 4px;
1142
+ }
1143
+ .card-skeleton__line.short {
1144
+ width: 60%;
1145
+ }
1146
+ @keyframes card-skeleton-pulse {
1147
+ 0%, 100% {
1148
+ opacity: 1;
1149
+ }
1150
+ 50% {
1151
+ opacity: 0.5;
1152
+ }
1153
+ }
1154
+
1155
+ /* src/ui/skeleton/list/style.scss */
1156
+ .request-item.skeleton {
1157
+ pointer-events: none;
1158
+ }
1159
+ .skeleton__title {
1160
+ width: 220px;
1161
+ height: 18px;
1162
+ border-radius: 6px;
1163
+ background:
1164
+ linear-gradient(
1165
+ 90deg,
1166
+ var(--background-normal) 25%,
1167
+ var(--line-normal) 37%,
1168
+ var(--background-normal) 63%);
1169
+ background-size: 400% 100%;
1170
+ animation: skeleton-shimmer 1.2s ease-in-out infinite;
1171
+ margin-bottom: 8px;
1172
+ }
1173
+ .skeleton__tag {
1174
+ display: inline-block;
1175
+ width: 64px;
1176
+ height: 22px;
1177
+ border-radius: 6px;
1178
+ background:
1179
+ linear-gradient(
1180
+ 90deg,
1181
+ var(--background-normal) 25%,
1182
+ var(--line-normal) 37%,
1183
+ var(--background-normal) 63%);
1184
+ background-size: 400% 100%;
1185
+ animation: skeleton-shimmer 1.2s ease-in-out infinite;
1186
+ }
1187
+ .skeleton__dday {
1188
+ display: inline-block;
1189
+ width: 48px;
1190
+ height: 16px;
1191
+ border-radius: 6px;
1192
+ background:
1193
+ linear-gradient(
1194
+ 90deg,
1195
+ var(--background-normal) 25%,
1196
+ var(--line-normal) 37%,
1197
+ var(--background-normal) 63%);
1198
+ background-size: 400% 100%;
1199
+ animation: skeleton-shimmer 1.2s ease-in-out infinite;
1200
+ }
1201
+ @keyframes skeleton-shimmer {
1202
+ 0% {
1203
+ background-position: 100% 0;
1204
+ }
1205
+ 100% {
1206
+ background-position: 0 0;
1207
+ }
1208
+ }