@designbasekorea/theme 0.1.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.
@@ -0,0 +1,919 @@
1
+ /**
2
+ * 유틸리티 클래스 - 토큰 기반
3
+ *
4
+ * 목적: 자주 사용되는 스타일 패턴을 유틸리티 클래스로 제공
5
+ * 기능: 간격, 색상, 타이포그래피, 레이아웃 등의 유틸리티
6
+ * 사용법: class="p-4 text-primary bg-secondary"
7
+ */
8
+
9
+ @import 'variables';
10
+
11
+ // ============================================================================
12
+ // Spacing Utilities (토큰 기반)
13
+ // ============================================================================
14
+
15
+ // Padding utilities
16
+ .p-0 {
17
+ padding: $spacing-0 !important;
18
+ }
19
+
20
+ .p-1 {
21
+ padding: $spacing-1 !important;
22
+ }
23
+
24
+ .p-2 {
25
+ padding: $spacing-2 !important;
26
+ }
27
+
28
+ .p-3 {
29
+ padding: $spacing-3 !important;
30
+ }
31
+
32
+ .p-4 {
33
+ padding: $spacing-4 !important;
34
+ }
35
+
36
+ .p-5 {
37
+ padding: $spacing-5 !important;
38
+ }
39
+
40
+ .p-6 {
41
+ padding: $spacing-6 !important;
42
+ }
43
+
44
+ .p-8 {
45
+ padding: $spacing-8 !important;
46
+ }
47
+
48
+ // Horizontal padding (좌우)
49
+ .px-0 {
50
+ padding-left: $spacing-0 !important;
51
+ padding-right: $spacing-0 !important;
52
+ }
53
+
54
+ .px-1 {
55
+ padding-left: $spacing-1 !important;
56
+ padding-right: $spacing-1 !important;
57
+ }
58
+
59
+ .px-2 {
60
+ padding-left: $spacing-2 !important;
61
+ padding-right: $spacing-2 !important;
62
+ }
63
+
64
+ .px-3 {
65
+ padding-left: $spacing-3 !important;
66
+ padding-right: $spacing-3 !important;
67
+ }
68
+
69
+ .px-4 {
70
+ padding-left: $spacing-4 !important;
71
+ padding-right: $spacing-4 !important;
72
+ }
73
+
74
+ .px-5 {
75
+ padding-left: $spacing-5 !important;
76
+ padding-right: $spacing-5 !important;
77
+ }
78
+
79
+ .px-6 {
80
+ padding-left: $spacing-6 !important;
81
+ padding-right: $spacing-6 !important;
82
+ }
83
+
84
+ // Vertical padding (상하)
85
+ .py-0 {
86
+ padding-top: $spacing-0 !important;
87
+ padding-bottom: $spacing-0 !important;
88
+ }
89
+
90
+ .py-1 {
91
+ padding-top: $spacing-1 !important;
92
+ padding-bottom: $spacing-1 !important;
93
+ }
94
+
95
+ .py-2 {
96
+ padding-top: $spacing-2 !important;
97
+ padding-bottom: $spacing-2 !important;
98
+ }
99
+
100
+ .py-3 {
101
+ padding-top: $spacing-3 !important;
102
+ padding-bottom: $spacing-3 !important;
103
+ }
104
+
105
+ .py-4 {
106
+ padding-top: $spacing-4 !important;
107
+ padding-bottom: $spacing-4 !important;
108
+ }
109
+
110
+ .py-5 {
111
+ padding-top: $spacing-5 !important;
112
+ padding-bottom: $spacing-5 !important;
113
+ }
114
+
115
+ .py-6 {
116
+ padding-top: $spacing-6 !important;
117
+ padding-bottom: $spacing-6 !important;
118
+ }
119
+
120
+ // Margin utilities
121
+ .m-0 {
122
+ margin: $spacing-0 !important;
123
+ }
124
+
125
+ .m-1 {
126
+ margin: $spacing-1 !important;
127
+ }
128
+
129
+ .m-2 {
130
+ margin: $spacing-2 !important;
131
+ }
132
+
133
+ .m-3 {
134
+ margin: $spacing-3 !important;
135
+ }
136
+
137
+ .m-4 {
138
+ margin: $spacing-4 !important;
139
+ }
140
+
141
+ .m-5 {
142
+ margin: $spacing-5 !important;
143
+ }
144
+
145
+ .m-6 {
146
+ margin: $spacing-6 !important;
147
+ }
148
+
149
+ .m-8 {
150
+ margin: $spacing-8 !important;
151
+ }
152
+
153
+ // Horizontal margin (좌우)
154
+ .mx-0 {
155
+ margin-left: $spacing-0 !important;
156
+ margin-right: $spacing-0 !important;
157
+ }
158
+
159
+ .mx-1 {
160
+ margin-left: $spacing-1 !important;
161
+ margin-right: $spacing-1 !important;
162
+ }
163
+
164
+ .mx-2 {
165
+ margin-left: $spacing-2 !important;
166
+ margin-right: $spacing-2 !important;
167
+ }
168
+
169
+ .mx-3 {
170
+ margin-left: $spacing-3 !important;
171
+ margin-right: $spacing-3 !important;
172
+ }
173
+
174
+ .mx-4 {
175
+ margin-left: $spacing-4 !important;
176
+ margin-right: $spacing-4 !important;
177
+ }
178
+
179
+ .mx-auto {
180
+ margin-left: auto !important;
181
+ margin-right: auto !important;
182
+ }
183
+
184
+ // Vertical margin (상하)
185
+ .my-0 {
186
+ margin-top: $spacing-0 !important;
187
+ margin-bottom: $spacing-0 !important;
188
+ }
189
+
190
+ .my-1 {
191
+ margin-top: $spacing-1 !important;
192
+ margin-bottom: $spacing-1 !important;
193
+ }
194
+
195
+ .my-2 {
196
+ margin-top: $spacing-2 !important;
197
+ margin-bottom: $spacing-2 !important;
198
+ }
199
+
200
+ .my-3 {
201
+ margin-top: $spacing-3 !important;
202
+ margin-bottom: $spacing-3 !important;
203
+ }
204
+
205
+ .my-4 {
206
+ margin-top: $spacing-4 !important;
207
+ margin-bottom: $spacing-4 !important;
208
+ }
209
+
210
+ .my-5 {
211
+ margin-top: $spacing-5 !important;
212
+ margin-bottom: $spacing-5 !important;
213
+ }
214
+
215
+ .my-6 {
216
+ margin-top: $spacing-6 !important;
217
+ margin-bottom: $spacing-6 !important;
218
+ }
219
+
220
+ // ============================================================================
221
+ // Color Utilities (토큰 기반)
222
+ // ============================================================================
223
+
224
+ // Text colors
225
+ .text-primary {
226
+ color: $text-primary !important;
227
+ }
228
+
229
+ .text-secondary {
230
+ color: $text-secondary !important;
231
+ }
232
+
233
+ .text-muted {
234
+ color: $text-muted !important;
235
+ }
236
+
237
+ .text-disabled {
238
+ color: $text-disabled !important;
239
+ }
240
+
241
+ .text-inverse {
242
+ color: $text-inverse !important;
243
+ }
244
+
245
+ .text-link {
246
+ color: $text-link !important;
247
+ }
248
+
249
+ .text-success {
250
+ color: $green-600 !important;
251
+ }
252
+
253
+ .text-warning {
254
+ color: $yellow-600 !important;
255
+ }
256
+
257
+ .text-error {
258
+ color: $red-600 !important;
259
+ }
260
+
261
+ // Background colors
262
+ .bg-primary {
263
+ background-color: $bg-primary !important;
264
+ }
265
+
266
+ .bg-secondary {
267
+ background-color: $bg-secondary !important;
268
+ }
269
+
270
+ .bg-tertiary {
271
+ background-color: $bg-tertiary !important;
272
+ }
273
+
274
+ .bg-inverse {
275
+ background-color: $bg-inverse !important;
276
+ }
277
+
278
+ .bg-success {
279
+ background-color: $green-50 !important;
280
+ }
281
+
282
+ .bg-warning {
283
+ background-color: $yellow-50 !important;
284
+ }
285
+
286
+ .bg-error {
287
+ background-color: $red-50 !important;
288
+ }
289
+
290
+ .bg-transparent {
291
+ background-color: transparent !important;
292
+ }
293
+
294
+ // Border colors
295
+ .border-primary {
296
+ border-color: $border-primary !important;
297
+ }
298
+
299
+ .border-secondary {
300
+ border-color: $border-secondary !important;
301
+ }
302
+
303
+ .border-muted {
304
+ border-color: $border-muted !important;
305
+ }
306
+
307
+ .border-focus {
308
+ border-color: $border-focus !important;
309
+ }
310
+
311
+ .border-success {
312
+ border-color: $green-300 !important;
313
+ }
314
+
315
+ .border-warning {
316
+ border-color: $yellow-300 !important;
317
+ }
318
+
319
+ .border-error {
320
+ border-color: $color-red-300 !important;
321
+ }
322
+
323
+ // ============================================================================
324
+ // Typography Utilities (토큰 기반)
325
+ // ============================================================================
326
+
327
+ // Font sizes
328
+ .text-xs {
329
+ font-size: $font-size-xs !important;
330
+ }
331
+
332
+ .text-sm {
333
+ font-size: $font-size-sm !important;
334
+ }
335
+
336
+ .text-base {
337
+ font-size: $font-size-base !important;
338
+ }
339
+
340
+ .text-lg {
341
+ font-size: $font-size-lg !important;
342
+ }
343
+
344
+ .text-xl {
345
+ font-size: $font-size-xl !important;
346
+ }
347
+
348
+ .text-2xl {
349
+ font-size: $font-size-2xl !important;
350
+ }
351
+
352
+ .text-3xl {
353
+ font-size: $font-size-3xl !important;
354
+ }
355
+
356
+ .text-4xl {
357
+ font-size: $font-size-4xl !important;
358
+ }
359
+
360
+ // Font weights
361
+ .font-light {
362
+ font-weight: $font-weight-light !important;
363
+ }
364
+
365
+ .font-normal {
366
+ font-weight: $font-weight-normal !important;
367
+ }
368
+
369
+ .font-medium {
370
+ font-weight: $font-weight-medium !important;
371
+ }
372
+
373
+ .font-semibold {
374
+ font-weight: $font-weight-semibold !important;
375
+ }
376
+
377
+ .font-bold {
378
+ font-weight: $font-weight-bold !important;
379
+ }
380
+
381
+ // Font families
382
+ .font-primary {
383
+ font-family: $font-family-primary !important;
384
+ }
385
+
386
+ .font-mono {
387
+ font-family: $font-family-mono !important;
388
+ }
389
+
390
+ // Line heights
391
+ .leading-none {
392
+ line-height: $line-height-none !important;
393
+ }
394
+
395
+ .leading-tight {
396
+ line-height: $line-height-tight !important;
397
+ }
398
+
399
+ .leading-snug {
400
+ line-height: $line-height-snug !important;
401
+ }
402
+
403
+ .leading-normal {
404
+ line-height: $line-height-normal !important;
405
+ }
406
+
407
+ .leading-relaxed {
408
+ line-height: $line-height-relaxed !important;
409
+ }
410
+
411
+ .leading-loose {
412
+ line-height: $line-height-loose !important;
413
+ }
414
+
415
+ // Text alignment
416
+ .text-left {
417
+ text-align: left !important;
418
+ }
419
+
420
+ .text-center {
421
+ text-align: center !important;
422
+ }
423
+
424
+ .text-right {
425
+ text-align: right !important;
426
+ }
427
+
428
+ .text-justify {
429
+ text-align: justify !important;
430
+ }
431
+
432
+ // Text decoration
433
+ .no-underline {
434
+ text-decoration: none !important;
435
+ }
436
+
437
+ .underline {
438
+ text-decoration: underline !important;
439
+ }
440
+
441
+ .line-through {
442
+ text-decoration: line-through !important;
443
+ }
444
+
445
+ // Text transform
446
+ .uppercase {
447
+ text-transform: uppercase !important;
448
+ }
449
+
450
+ .lowercase {
451
+ text-transform: lowercase !important;
452
+ }
453
+
454
+ .capitalize {
455
+ text-transform: capitalize !important;
456
+ }
457
+
458
+ .normal-case {
459
+ text-transform: none !important;
460
+ }
461
+
462
+ // Text overflow
463
+ .truncate {
464
+ overflow: hidden;
465
+ text-overflow: ellipsis;
466
+ white-space: nowrap;
467
+ }
468
+
469
+ // ============================================================================
470
+ // Layout Utilities
471
+ // ============================================================================
472
+
473
+ // Display
474
+ .block {
475
+ display: block !important;
476
+ }
477
+
478
+ .inline-block {
479
+ display: inline-block !important;
480
+ }
481
+
482
+ .inline {
483
+ display: inline !important;
484
+ }
485
+
486
+ .flex {
487
+ display: flex !important;
488
+ }
489
+
490
+ .inline-flex {
491
+ display: inline-flex !important;
492
+ }
493
+
494
+ .grid {
495
+ display: grid !important;
496
+ }
497
+
498
+ .hidden {
499
+ display: none !important;
500
+ }
501
+
502
+ // Flex utilities
503
+ .flex-row {
504
+ flex-direction: row !important;
505
+ }
506
+
507
+ .flex-row-reverse {
508
+ flex-direction: row-reverse !important;
509
+ }
510
+
511
+ .flex-col {
512
+ flex-direction: column !important;
513
+ }
514
+
515
+ .flex-col-reverse {
516
+ flex-direction: column-reverse !important;
517
+ }
518
+
519
+ .flex-wrap {
520
+ flex-wrap: wrap !important;
521
+ }
522
+
523
+ .flex-wrap-reverse {
524
+ flex-wrap: wrap-reverse !important;
525
+ }
526
+
527
+ .flex-nowrap {
528
+ flex-wrap: nowrap !important;
529
+ }
530
+
531
+ // Flex alignment
532
+ .items-start {
533
+ align-items: flex-start !important;
534
+ }
535
+
536
+ .items-end {
537
+ align-items: flex-end !important;
538
+ }
539
+
540
+ .items-center {
541
+ align-items: center !important;
542
+ }
543
+
544
+ .items-baseline {
545
+ align-items: baseline !important;
546
+ }
547
+
548
+ .items-stretch {
549
+ align-items: stretch !important;
550
+ }
551
+
552
+ // Flex justify
553
+ .justify-start {
554
+ justify-content: flex-start !important;
555
+ }
556
+
557
+ .justify-end {
558
+ justify-content: flex-end !important;
559
+ }
560
+
561
+ .justify-center {
562
+ justify-content: center !important;
563
+ }
564
+
565
+ .justify-between {
566
+ justify-content: space-between !important;
567
+ }
568
+
569
+ .justify-around {
570
+ justify-content: space-around !important;
571
+ }
572
+
573
+ .justify-evenly {
574
+ justify-content: space-evenly !important;
575
+ }
576
+
577
+ // Flex sizing
578
+ .flex-1 {
579
+ flex: 1 1 0% !important;
580
+ }
581
+
582
+ .flex-auto {
583
+ flex: 1 1 auto !important;
584
+ }
585
+
586
+ .flex-initial {
587
+ flex: 0 1 auto !important;
588
+ }
589
+
590
+ .flex-none {
591
+ flex: none !important;
592
+ }
593
+
594
+ .flex-shrink-0 {
595
+ flex-shrink: 0 !important;
596
+ }
597
+
598
+ .flex-shrink {
599
+ flex-shrink: 1 !important;
600
+ }
601
+
602
+ .flex-grow-0 {
603
+ flex-grow: 0 !important;
604
+ }
605
+
606
+ .flex-grow {
607
+ flex-grow: 1 !important;
608
+ }
609
+
610
+ // Position
611
+ .static {
612
+ position: static !important;
613
+ }
614
+
615
+ .fixed {
616
+ position: fixed !important;
617
+ }
618
+
619
+ .absolute {
620
+ position: absolute !important;
621
+ }
622
+
623
+ .relative {
624
+ position: relative !important;
625
+ }
626
+
627
+ .sticky {
628
+ position: sticky !important;
629
+ }
630
+
631
+ // Width
632
+ .w-auto {
633
+ width: auto !important;
634
+ }
635
+
636
+ .w-full {
637
+ width: 100% !important;
638
+ }
639
+
640
+ .w-screen {
641
+ width: 100vw !important;
642
+ }
643
+
644
+ .w-min {
645
+ width: min-content !important;
646
+ }
647
+
648
+ .w-max {
649
+ width: max-content !important;
650
+ }
651
+
652
+ .w-fit {
653
+ width: fit-content !important;
654
+ }
655
+
656
+ // Height
657
+ .h-auto {
658
+ height: auto !important;
659
+ }
660
+
661
+ .h-full {
662
+ height: 100% !important;
663
+ }
664
+
665
+ .h-screen {
666
+ height: 100vh !important;
667
+ }
668
+
669
+ .h-min {
670
+ height: min-content !important;
671
+ }
672
+
673
+ .h-max {
674
+ height: max-content !important;
675
+ }
676
+
677
+ .h-fit {
678
+ height: fit-content !important;
679
+ }
680
+
681
+ // ============================================================================
682
+ // Border Utilities
683
+ // ============================================================================
684
+
685
+ .border {
686
+ border: 1px solid var(--color-border-primary) !important;
687
+ }
688
+
689
+ .border-0 {
690
+ border: 0 !important;
691
+ }
692
+
693
+ .border-t {
694
+ border-top: 1px solid var(--color-border-primary) !important;
695
+ }
696
+
697
+ .border-r {
698
+ border-right: 1px solid var(--color-border-primary) !important;
699
+ }
700
+
701
+ .border-b {
702
+ border-bottom: 1px solid var(--color-border-primary) !important;
703
+ }
704
+
705
+ .border-l {
706
+ border-left: 1px solid var(--color-border-primary) !important;
707
+ }
708
+
709
+ // Border radius
710
+ .rounded-none {
711
+ border-radius: var(--border-radius-none) !important;
712
+ }
713
+
714
+ .rounded-sm {
715
+ border-radius: var(--border-radius-sm) !important;
716
+ }
717
+
718
+ .rounded {
719
+ border-radius: var(--border-radius-base) !important;
720
+ }
721
+
722
+ .rounded-md {
723
+ border-radius: var(--border-radius-md) !important;
724
+ }
725
+
726
+ .rounded-lg {
727
+ border-radius: var(--border-radius-lg) !important;
728
+ }
729
+
730
+ .rounded-xl {
731
+ border-radius: var(--border-radius-xl) !important;
732
+ }
733
+
734
+ .rounded-2xl {
735
+ border-radius: var(--border-radius-2xl) !important;
736
+ }
737
+
738
+ .rounded-3xl {
739
+ border-radius: var(--border-radius-3xl) !important;
740
+ }
741
+
742
+ .rounded-full {
743
+ border-radius: var(--border-radius-full) !important;
744
+ }
745
+
746
+ // ============================================================================
747
+ // Shadow Utilities
748
+ // ============================================================================
749
+
750
+ .shadow-none {
751
+ box-shadow: var(--shadow-none) !important;
752
+ }
753
+
754
+ .shadow-sm {
755
+ box-shadow: var(--shadow-sm) !important;
756
+ }
757
+
758
+ .shadow {
759
+ box-shadow: var(--shadow-base) !important;
760
+ }
761
+
762
+ .shadow-md {
763
+ box-shadow: var(--shadow-md) !important;
764
+ }
765
+
766
+ .shadow-lg {
767
+ box-shadow: var(--shadow-lg) !important;
768
+ }
769
+
770
+ .shadow-xl {
771
+ box-shadow: var(--shadow-xl) !important;
772
+ }
773
+
774
+ .shadow-2xl {
775
+ box-shadow: var(--shadow-2xl) !important;
776
+ }
777
+
778
+ .shadow-inner {
779
+ box-shadow: var(--shadow-inner) !important;
780
+ }
781
+
782
+ // ============================================================================
783
+ // Miscellaneous Utilities
784
+ // ============================================================================
785
+
786
+ // Overflow
787
+ .overflow-auto {
788
+ overflow: auto !important;
789
+ }
790
+
791
+ .overflow-hidden {
792
+ overflow: hidden !important;
793
+ }
794
+
795
+ .overflow-visible {
796
+ overflow: visible !important;
797
+ }
798
+
799
+ .overflow-scroll {
800
+ overflow: scroll !important;
801
+ }
802
+
803
+ .overflow-x-auto {
804
+ overflow-x: auto !important;
805
+ }
806
+
807
+ .overflow-x-hidden {
808
+ overflow-x: hidden !important;
809
+ }
810
+
811
+ .overflow-x-visible {
812
+ overflow-x: visible !important;
813
+ }
814
+
815
+ .overflow-x-scroll {
816
+ overflow-x: scroll !important;
817
+ }
818
+
819
+ .overflow-y-auto {
820
+ overflow-y: auto !important;
821
+ }
822
+
823
+ .overflow-y-hidden {
824
+ overflow-y: hidden !important;
825
+ }
826
+
827
+ .overflow-y-visible {
828
+ overflow-y: visible !important;
829
+ }
830
+
831
+ .overflow-y-scroll {
832
+ overflow-y: scroll !important;
833
+ }
834
+
835
+ // Cursor
836
+ .cursor-auto {
837
+ cursor: auto !important;
838
+ }
839
+
840
+ .cursor-default {
841
+ cursor: default !important;
842
+ }
843
+
844
+ .cursor-pointer {
845
+ cursor: pointer !important;
846
+ }
847
+
848
+ .cursor-wait {
849
+ cursor: wait !important;
850
+ }
851
+
852
+ .cursor-text {
853
+ cursor: text !important;
854
+ }
855
+
856
+ .cursor-move {
857
+ cursor: move !important;
858
+ }
859
+
860
+ .cursor-help {
861
+ cursor: help !important;
862
+ }
863
+
864
+ .cursor-not-allowed {
865
+ cursor: not-allowed !important;
866
+ }
867
+
868
+ // User Select
869
+ .select-none {
870
+ user-select: none !important;
871
+ }
872
+
873
+ .select-text {
874
+ user-select: text !important;
875
+ }
876
+
877
+ .select-all {
878
+ user-select: all !important;
879
+ }
880
+
881
+ .select-auto {
882
+ user-select: auto !important;
883
+ }
884
+
885
+ // Pointer Events
886
+ .pointer-events-none {
887
+ pointer-events: none !important;
888
+ }
889
+
890
+ .pointer-events-auto {
891
+ pointer-events: auto !important;
892
+ }
893
+
894
+ // Resize
895
+ .resize-none {
896
+ resize: none !important;
897
+ }
898
+
899
+ .resize {
900
+ resize: both !important;
901
+ }
902
+
903
+ .resize-x {
904
+ resize: horizontal !important;
905
+ }
906
+
907
+ .resize-y {
908
+ resize: vertical !important;
909
+ }
910
+
911
+ // Screen Reader Only
912
+ .sr-only {
913
+ @include visually-hidden;
914
+ }
915
+
916
+ // Focus styles
917
+ .focus-ring:focus {
918
+ @include focus-ring;
919
+ }