@bigtablet/design-system 3.10.1 → 3.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.css +299 -7
- package/dist/index.d.ts +112 -16
- package/dist/index.js +133 -39
- package/dist/styles/a11y/_index.scss +3 -1
- package/dist/styles/border-width/_index.scss +29 -0
- package/dist/styles/typography/_index.scss +29 -0
- package/dist/vanilla/bigtablet.min.css +1 -1
- package/package.json +3 -3
package/dist/index.css
CHANGED
|
@@ -65,6 +65,7 @@
|
|
|
65
65
|
--bt-elevation-level3: 0 3px 3px -3px rgba(0, 0, 0, 0.20), 0 9px 9px 0px rgba(0, 0, 0, 0.12);
|
|
66
66
|
--bt-elevation-level4: 0 5px 5px -5px rgba(0, 0, 0, 0.20), 0 15px 15px 0px rgba(0, 0, 0, 0.12);
|
|
67
67
|
--bt-elevation-level5: 0 8px 10px -5px rgba(0, 0, 0, 0.20), 0 20px 20px 0px rgba(0, 0, 0, 0.12);
|
|
68
|
+
--bt-bottom-inset: 0px;
|
|
68
69
|
}
|
|
69
70
|
:root {
|
|
70
71
|
--bt-scrollbar-width: 0px;
|
|
@@ -502,6 +503,10 @@ select:-webkit-autofill:disabled {
|
|
|
502
503
|
width: 100%;
|
|
503
504
|
gap: 12px;
|
|
504
505
|
}
|
|
506
|
+
.empty_state_fill_height {
|
|
507
|
+
flex: 1;
|
|
508
|
+
justify-content: center;
|
|
509
|
+
}
|
|
505
510
|
.empty_state_illustration {
|
|
506
511
|
color: var(--bt-color-text-caption);
|
|
507
512
|
display: inline-flex;
|
|
@@ -634,6 +639,9 @@ select:-webkit-autofill:disabled {
|
|
|
634
639
|
--bt-bottom-nav-safe-area: env(safe-area-inset-bottom, 0px);
|
|
635
640
|
--bt-bottom-nav-total-height: calc( var(--bt-bottom-nav-height) + var(--bt-bottom-nav-safe-area) );
|
|
636
641
|
}
|
|
642
|
+
body:has(.bottom_nav) {
|
|
643
|
+
--bt-bottom-inset: var(--bt-bottom-nav-total-height);
|
|
644
|
+
}
|
|
637
645
|
.bottom_nav {
|
|
638
646
|
position: fixed;
|
|
639
647
|
left: 0;
|
|
@@ -643,6 +651,7 @@ select:-webkit-autofill:disabled {
|
|
|
643
651
|
display: flex;
|
|
644
652
|
align-items: stretch;
|
|
645
653
|
justify-content: space-around;
|
|
654
|
+
box-sizing: border-box;
|
|
646
655
|
height: var(--bt-bottom-nav-total-height);
|
|
647
656
|
padding-bottom: var(--bt-bottom-nav-safe-area);
|
|
648
657
|
background: var(--bt-color-bg-solid);
|
|
@@ -1666,7 +1675,7 @@ select:-webkit-autofill:disabled {
|
|
|
1666
1675
|
line-height: 1.4;
|
|
1667
1676
|
font-weight: 500;
|
|
1668
1677
|
white-space: normal;
|
|
1669
|
-
overflow-wrap:
|
|
1678
|
+
overflow-wrap: anywhere;
|
|
1670
1679
|
word-break: keep-all;
|
|
1671
1680
|
text-align: center;
|
|
1672
1681
|
box-shadow: var(--bt-elevation-level2);
|
|
@@ -2266,7 +2275,8 @@ select:-webkit-autofill:disabled {
|
|
|
2266
2275
|
.button_label {
|
|
2267
2276
|
position: relative;
|
|
2268
2277
|
white-space: normal;
|
|
2269
|
-
|
|
2278
|
+
overflow-wrap: anywhere;
|
|
2279
|
+
word-break: keep-all;
|
|
2270
2280
|
text-align: center;
|
|
2271
2281
|
}
|
|
2272
2282
|
.button_full_width {
|
|
@@ -2789,6 +2799,244 @@ select:-webkit-autofill:disabled {
|
|
|
2789
2799
|
}
|
|
2790
2800
|
}
|
|
2791
2801
|
|
|
2802
|
+
/* src/ui/display/prose/style.scss */
|
|
2803
|
+
@keyframes skeleton_loading {
|
|
2804
|
+
0% {
|
|
2805
|
+
background-position: 100% 0;
|
|
2806
|
+
}
|
|
2807
|
+
100% {
|
|
2808
|
+
background-position: 0 0;
|
|
2809
|
+
}
|
|
2810
|
+
}
|
|
2811
|
+
.prose {
|
|
2812
|
+
font-family: "Pretendard", sans-serif;
|
|
2813
|
+
color: var(--bt-color-text-heading);
|
|
2814
|
+
font-size: 15px;
|
|
2815
|
+
font-weight: 400;
|
|
2816
|
+
line-height: 22.5px;
|
|
2817
|
+
letter-spacing: 0px;
|
|
2818
|
+
}
|
|
2819
|
+
.prose p,
|
|
2820
|
+
.prose ul,
|
|
2821
|
+
.prose ol,
|
|
2822
|
+
.prose blockquote,
|
|
2823
|
+
.prose table,
|
|
2824
|
+
.prose pre {
|
|
2825
|
+
margin: 0 0 16px;
|
|
2826
|
+
}
|
|
2827
|
+
.prose > :last-child {
|
|
2828
|
+
margin-bottom: 0;
|
|
2829
|
+
}
|
|
2830
|
+
.prose,
|
|
2831
|
+
.prose p,
|
|
2832
|
+
.prose li,
|
|
2833
|
+
.prose blockquote,
|
|
2834
|
+
.prose h1,
|
|
2835
|
+
.prose h2,
|
|
2836
|
+
.prose h3,
|
|
2837
|
+
.prose h4,
|
|
2838
|
+
.prose h5,
|
|
2839
|
+
.prose h6,
|
|
2840
|
+
.prose dl,
|
|
2841
|
+
.prose dd,
|
|
2842
|
+
.prose ul,
|
|
2843
|
+
.prose ol {
|
|
2844
|
+
white-space: normal;
|
|
2845
|
+
}
|
|
2846
|
+
.prose h1,
|
|
2847
|
+
.prose h2,
|
|
2848
|
+
.prose h3,
|
|
2849
|
+
.prose h4,
|
|
2850
|
+
.prose h5,
|
|
2851
|
+
.prose h6 {
|
|
2852
|
+
color: var(--bt-color-text-heading);
|
|
2853
|
+
margin: 20px 0 8px;
|
|
2854
|
+
}
|
|
2855
|
+
.prose h1:first-child,
|
|
2856
|
+
.prose h2:first-child,
|
|
2857
|
+
.prose h3:first-child,
|
|
2858
|
+
.prose h4:first-child,
|
|
2859
|
+
.prose h5:first-child,
|
|
2860
|
+
.prose h6:first-child {
|
|
2861
|
+
margin-top: 0;
|
|
2862
|
+
}
|
|
2863
|
+
.prose h1 {
|
|
2864
|
+
font-size: 24px;
|
|
2865
|
+
font-weight: 400;
|
|
2866
|
+
line-height: 32px;
|
|
2867
|
+
letter-spacing: 0px;
|
|
2868
|
+
padding-bottom: 8px;
|
|
2869
|
+
border-bottom: 1px solid var(--bt-color-border-default);
|
|
2870
|
+
}
|
|
2871
|
+
.prose h2 {
|
|
2872
|
+
font-size: 20px;
|
|
2873
|
+
font-weight: 400;
|
|
2874
|
+
line-height: 28px;
|
|
2875
|
+
letter-spacing: 0px;
|
|
2876
|
+
}
|
|
2877
|
+
.prose h3 {
|
|
2878
|
+
font-size: 18px;
|
|
2879
|
+
font-weight: 700;
|
|
2880
|
+
line-height: 24px;
|
|
2881
|
+
letter-spacing: 0px;
|
|
2882
|
+
}
|
|
2883
|
+
.prose h4,
|
|
2884
|
+
.prose h5,
|
|
2885
|
+
.prose h6 {
|
|
2886
|
+
font-size: 16px;
|
|
2887
|
+
font-weight: 700;
|
|
2888
|
+
line-height: 24px;
|
|
2889
|
+
letter-spacing: 0px;
|
|
2890
|
+
}
|
|
2891
|
+
.prose ul,
|
|
2892
|
+
.prose ol {
|
|
2893
|
+
padding-left: 24px;
|
|
2894
|
+
}
|
|
2895
|
+
.prose ul {
|
|
2896
|
+
list-style: disc;
|
|
2897
|
+
}
|
|
2898
|
+
.prose ol {
|
|
2899
|
+
list-style: decimal;
|
|
2900
|
+
}
|
|
2901
|
+
.prose li {
|
|
2902
|
+
margin-bottom: 4px;
|
|
2903
|
+
}
|
|
2904
|
+
.prose li > p {
|
|
2905
|
+
margin-bottom: 0;
|
|
2906
|
+
}
|
|
2907
|
+
.prose li ul,
|
|
2908
|
+
.prose li ol {
|
|
2909
|
+
margin: 4px 0 0;
|
|
2910
|
+
}
|
|
2911
|
+
.prose code {
|
|
2912
|
+
font-family:
|
|
2913
|
+
ui-monospace,
|
|
2914
|
+
"SF Mono",
|
|
2915
|
+
Menlo,
|
|
2916
|
+
Consolas,
|
|
2917
|
+
monospace;
|
|
2918
|
+
font-size: 13px;
|
|
2919
|
+
line-height: 18px;
|
|
2920
|
+
background: var(--bt-color-bg-solid-dim);
|
|
2921
|
+
color: var(--bt-color-text-heading);
|
|
2922
|
+
border-radius: 4px;
|
|
2923
|
+
padding: 0.2em 0.45em;
|
|
2924
|
+
}
|
|
2925
|
+
.prose pre {
|
|
2926
|
+
background: var(--bt-color-bg-inverse-surface);
|
|
2927
|
+
border-radius: 8px;
|
|
2928
|
+
padding: 20px;
|
|
2929
|
+
overflow-x: auto;
|
|
2930
|
+
}
|
|
2931
|
+
.prose pre code {
|
|
2932
|
+
background: transparent;
|
|
2933
|
+
color: var(--bt-color-text-inverse);
|
|
2934
|
+
padding: 0;
|
|
2935
|
+
border-radius: 0;
|
|
2936
|
+
}
|
|
2937
|
+
.prose blockquote {
|
|
2938
|
+
border-left: 4px solid var(--bt-color-accent-default);
|
|
2939
|
+
background: color-mix(in srgb, var(--bt-color-accent-default) 5%, transparent);
|
|
2940
|
+
border-radius: 0 6px 6px 0;
|
|
2941
|
+
padding: 8px 12px;
|
|
2942
|
+
color: var(--bt-color-text-body);
|
|
2943
|
+
}
|
|
2944
|
+
.prose blockquote > :last-child {
|
|
2945
|
+
margin-bottom: 0;
|
|
2946
|
+
}
|
|
2947
|
+
.prose blockquote blockquote {
|
|
2948
|
+
border-left: none;
|
|
2949
|
+
padding-left: 0;
|
|
2950
|
+
background: transparent;
|
|
2951
|
+
margin-bottom: 0;
|
|
2952
|
+
}
|
|
2953
|
+
.prose a {
|
|
2954
|
+
color: var(--bt-color-accent-default);
|
|
2955
|
+
text-decoration: underline;
|
|
2956
|
+
text-underline-offset: 0.15em;
|
|
2957
|
+
}
|
|
2958
|
+
.prose a:hover {
|
|
2959
|
+
text-decoration-thickness: 2px;
|
|
2960
|
+
}
|
|
2961
|
+
.prose a:focus-visible {
|
|
2962
|
+
outline: none;
|
|
2963
|
+
border-radius: 4px;
|
|
2964
|
+
box-shadow: var(--bt-focus-ring);
|
|
2965
|
+
}
|
|
2966
|
+
.prose strong {
|
|
2967
|
+
font-weight: 600;
|
|
2968
|
+
}
|
|
2969
|
+
.prose em {
|
|
2970
|
+
font-style: italic;
|
|
2971
|
+
}
|
|
2972
|
+
.prose del {
|
|
2973
|
+
text-decoration: line-through;
|
|
2974
|
+
color: var(--bt-color-text-caption);
|
|
2975
|
+
}
|
|
2976
|
+
.prose hr {
|
|
2977
|
+
border: none;
|
|
2978
|
+
border-top: 2px solid var(--bt-color-border-default);
|
|
2979
|
+
margin: 24px 0;
|
|
2980
|
+
}
|
|
2981
|
+
.prose img {
|
|
2982
|
+
max-width: 100%;
|
|
2983
|
+
height: auto;
|
|
2984
|
+
border-radius: 6px;
|
|
2985
|
+
display: block;
|
|
2986
|
+
margin: 16px auto;
|
|
2987
|
+
}
|
|
2988
|
+
.prose table {
|
|
2989
|
+
display: block;
|
|
2990
|
+
width: 100%;
|
|
2991
|
+
overflow-x: auto;
|
|
2992
|
+
border-collapse: collapse;
|
|
2993
|
+
}
|
|
2994
|
+
.prose pre[tabindex]:focus-visible,
|
|
2995
|
+
.prose table[tabindex]:focus-visible {
|
|
2996
|
+
outline: none;
|
|
2997
|
+
box-shadow: var(--bt-focus-ring);
|
|
2998
|
+
}
|
|
2999
|
+
.prose th,
|
|
3000
|
+
.prose td {
|
|
3001
|
+
padding: 4px 12px;
|
|
3002
|
+
border: 1px solid var(--bt-color-border-default);
|
|
3003
|
+
text-align: left;
|
|
3004
|
+
white-space: nowrap;
|
|
3005
|
+
}
|
|
3006
|
+
.prose th {
|
|
3007
|
+
background: var(--bt-color-bg-solid-dim);
|
|
3008
|
+
font-weight: 600;
|
|
3009
|
+
}
|
|
3010
|
+
.prose_size_lg h1,
|
|
3011
|
+
.prose_size_lg h2,
|
|
3012
|
+
.prose_size_lg h3,
|
|
3013
|
+
.prose_size_lg h4,
|
|
3014
|
+
.prose_size_lg h5,
|
|
3015
|
+
.prose_size_lg h6 {
|
|
3016
|
+
margin-top: 32px;
|
|
3017
|
+
}
|
|
3018
|
+
.prose_size_lg h1 {
|
|
3019
|
+
font-size: 28px;
|
|
3020
|
+
line-height: 36px;
|
|
3021
|
+
}
|
|
3022
|
+
.prose_size_lg h2 {
|
|
3023
|
+
font-size: 24px;
|
|
3024
|
+
line-height: 32px;
|
|
3025
|
+
}
|
|
3026
|
+
.prose_size_lg h3 {
|
|
3027
|
+
font-size: 20px;
|
|
3028
|
+
line-height: 28px;
|
|
3029
|
+
}
|
|
3030
|
+
.prose_size_lg h4,
|
|
3031
|
+
.prose_size_lg h5,
|
|
3032
|
+
.prose_size_lg h6 {
|
|
3033
|
+
font-size: 16px;
|
|
3034
|
+
line-height: 24px;
|
|
3035
|
+
}
|
|
3036
|
+
.prose_size_lg li {
|
|
3037
|
+
margin-bottom: 8px;
|
|
3038
|
+
}
|
|
3039
|
+
|
|
2792
3040
|
/* src/ui/feedback/skeleton/style.scss */
|
|
2793
3041
|
@keyframes skeleton_loading {
|
|
2794
3042
|
0% {
|
|
@@ -3496,7 +3744,7 @@ select:-webkit-autofill:disabled {
|
|
|
3496
3744
|
@media (max-width: 599px) {
|
|
3497
3745
|
.toast_container {
|
|
3498
3746
|
top: auto;
|
|
3499
|
-
bottom: 16px;
|
|
3747
|
+
bottom: calc(16px + var(--bt-bottom-inset, 0px));
|
|
3500
3748
|
left: 16px;
|
|
3501
3749
|
right: 16px;
|
|
3502
3750
|
width: auto;
|
|
@@ -3561,7 +3809,8 @@ select:-webkit-autofill:disabled {
|
|
|
3561
3809
|
}
|
|
3562
3810
|
.toast_message {
|
|
3563
3811
|
flex: 1;
|
|
3564
|
-
|
|
3812
|
+
overflow-wrap: anywhere;
|
|
3813
|
+
word-break: keep-all;
|
|
3565
3814
|
}
|
|
3566
3815
|
.toast_close {
|
|
3567
3816
|
flex-shrink: 0;
|
|
@@ -4894,6 +5143,10 @@ select:-webkit-autofill:disabled {
|
|
|
4894
5143
|
cursor: not-allowed;
|
|
4895
5144
|
color: var(--bt-color-text-disabled);
|
|
4896
5145
|
}
|
|
5146
|
+
.text_field_input_identifier {
|
|
5147
|
+
font-feature-settings: "cv05" 1, "cv08" 1;
|
|
5148
|
+
font-variant-numeric: slashed-zero;
|
|
5149
|
+
}
|
|
4897
5150
|
.text_field_icon {
|
|
4898
5151
|
display: inline-flex;
|
|
4899
5152
|
align-items: center;
|
|
@@ -4908,7 +5161,8 @@ select:-webkit-autofill:disabled {
|
|
|
4908
5161
|
width: 20px;
|
|
4909
5162
|
height: 20px;
|
|
4910
5163
|
}
|
|
4911
|
-
.text_field_clear
|
|
5164
|
+
.text_field_clear,
|
|
5165
|
+
.text_field_action > * {
|
|
4912
5166
|
display: inline-flex;
|
|
4913
5167
|
align-items: center;
|
|
4914
5168
|
justify-content: center;
|
|
@@ -4923,11 +5177,13 @@ select:-webkit-autofill:disabled {
|
|
|
4923
5177
|
transition: color 0.2s ease-in-out, background 0.2s ease-in-out;
|
|
4924
5178
|
padding: 0;
|
|
4925
5179
|
}
|
|
4926
|
-
.text_field_clear:hover
|
|
5180
|
+
.text_field_clear:hover,
|
|
5181
|
+
.text_field_action > *:hover {
|
|
4927
5182
|
color: var(--bt-color-text-heading);
|
|
4928
5183
|
background: var(--bt-color-state-hover-on-light);
|
|
4929
5184
|
}
|
|
4930
|
-
.text_field_clear:focus-visible
|
|
5185
|
+
.text_field_clear:focus-visible,
|
|
5186
|
+
.text_field_action > *:focus-visible {
|
|
4931
5187
|
outline: none;
|
|
4932
5188
|
box-shadow: var(--bt-focus-ring);
|
|
4933
5189
|
}
|
|
@@ -5001,6 +5257,7 @@ select:-webkit-autofill:disabled {
|
|
|
5001
5257
|
.text_field_label,
|
|
5002
5258
|
.text_field_container,
|
|
5003
5259
|
.text_field_clear,
|
|
5260
|
+
.text_field_action > *,
|
|
5004
5261
|
.text_field_helper {
|
|
5005
5262
|
transition: none;
|
|
5006
5263
|
}
|
|
@@ -5029,6 +5286,20 @@ select:-webkit-autofill:disabled {
|
|
|
5029
5286
|
transition: background 0.2s ease-in-out, border-color 0.2s ease-in-out;
|
|
5030
5287
|
cursor: pointer;
|
|
5031
5288
|
}
|
|
5289
|
+
.toggle::after {
|
|
5290
|
+
content: "";
|
|
5291
|
+
position: absolute;
|
|
5292
|
+
top: 50%;
|
|
5293
|
+
left: 50%;
|
|
5294
|
+
transform: translate(-50%, -50%);
|
|
5295
|
+
width: 100%;
|
|
5296
|
+
min-height: 32px;
|
|
5297
|
+
}
|
|
5298
|
+
@media (max-width: 599px) {
|
|
5299
|
+
.toggle::after {
|
|
5300
|
+
min-height: 40px;
|
|
5301
|
+
}
|
|
5302
|
+
}
|
|
5032
5303
|
.toggle_thumb {
|
|
5033
5304
|
position: relative;
|
|
5034
5305
|
width: 12px;
|
|
@@ -5451,6 +5722,10 @@ select:-webkit-autofill:disabled {
|
|
|
5451
5722
|
line-height: 22.5px;
|
|
5452
5723
|
letter-spacing: 0px;
|
|
5453
5724
|
}
|
|
5725
|
+
.drawer_body:focus-visible {
|
|
5726
|
+
outline: none;
|
|
5727
|
+
box-shadow: var(--bt-focus-ring);
|
|
5728
|
+
}
|
|
5454
5729
|
.drawer_footer {
|
|
5455
5730
|
flex: 0 0 auto;
|
|
5456
5731
|
display: flex;
|
|
@@ -5498,6 +5773,8 @@ select:-webkit-autofill:disabled {
|
|
|
5498
5773
|
border-radius: 12px;
|
|
5499
5774
|
box-shadow: var(--bt-elevation-level3);
|
|
5500
5775
|
max-width: calc(100% - 64px);
|
|
5776
|
+
max-height: calc(100vh - 64px);
|
|
5777
|
+
max-height: calc(100dvh - 64px);
|
|
5501
5778
|
padding: 24px;
|
|
5502
5779
|
overflow: visible;
|
|
5503
5780
|
will-change: transform, opacity;
|
|
@@ -5540,6 +5817,14 @@ select:-webkit-autofill:disabled {
|
|
|
5540
5817
|
line-height: 36px;
|
|
5541
5818
|
letter-spacing: -0.01em;
|
|
5542
5819
|
}
|
|
5820
|
+
@media (max-width: 599px) {
|
|
5821
|
+
.modal_title {
|
|
5822
|
+
font-size: 24px;
|
|
5823
|
+
font-weight: 700;
|
|
5824
|
+
line-height: 32px;
|
|
5825
|
+
letter-spacing: -0.01em;
|
|
5826
|
+
}
|
|
5827
|
+
}
|
|
5543
5828
|
.modal_description {
|
|
5544
5829
|
margin: 0;
|
|
5545
5830
|
color: var(--bt-color-text-body);
|
|
@@ -5555,12 +5840,19 @@ select:-webkit-autofill:disabled {
|
|
|
5555
5840
|
margin-bottom: 0;
|
|
5556
5841
|
}
|
|
5557
5842
|
.modal_body {
|
|
5843
|
+
flex: 1 1 auto;
|
|
5844
|
+
min-height: 0;
|
|
5845
|
+
overflow-y: auto;
|
|
5558
5846
|
color: var(--bt-color-text-body);
|
|
5559
5847
|
font-size: 15px;
|
|
5560
5848
|
font-weight: 400;
|
|
5561
5849
|
line-height: 22.5px;
|
|
5562
5850
|
letter-spacing: 0px;
|
|
5563
5851
|
}
|
|
5852
|
+
.modal_body:focus-visible {
|
|
5853
|
+
outline: none;
|
|
5854
|
+
box-shadow: var(--bt-focus-ring);
|
|
5855
|
+
}
|
|
5564
5856
|
.modal_footer {
|
|
5565
5857
|
display: flex;
|
|
5566
5858
|
gap: 8px;
|
package/dist/index.d.ts
CHANGED
|
@@ -197,16 +197,27 @@ interface BadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
|
|
|
197
197
|
declare const Badge: ({ variant, shape, size, appearance, count, max, className, children, ...props }: BadgeProps) => React$1.JSX.Element;
|
|
198
198
|
|
|
199
199
|
interface EmptyStateProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
|
|
200
|
-
/**
|
|
200
|
+
/**
|
|
201
|
+
* 일러스트 영역 (아이콘/이미지 등). **장식 전용** - `aria-hidden="true"` 래퍼로 접근성 트리에서
|
|
202
|
+
* 제외된다. 포커스 가능한 요소(버튼/링크 등)를 넣으면 포커스는 가는데 보조기기엔 없는 요소가
|
|
203
|
+
* 되므로(WCAG 4.1.2) `action` 을 쓸 것.
|
|
204
|
+
*/
|
|
201
205
|
illustration?: React$1.ReactNode;
|
|
202
206
|
/** 제목 */
|
|
203
207
|
title?: React$1.ReactNode;
|
|
204
208
|
/** 보조 설명 */
|
|
205
209
|
description?: React$1.ReactNode;
|
|
206
|
-
/** 액션 영역 (Button 등) */
|
|
210
|
+
/** 액션 영역 (Button 등). `aria-hidden` 을 붙이지 않아 보조기기에 그대로 노출된다. */
|
|
207
211
|
action?: React$1.ReactNode;
|
|
208
212
|
/** 크기 (기본 "md") */
|
|
209
213
|
size?: "sm" | "md" | "lg";
|
|
214
|
+
/**
|
|
215
|
+
* 부모 높이를 채우고 내용을 세로 중앙에 둔다 (`flex: 1` + `justify-content: center`).
|
|
216
|
+
* 404 · 검색 결과 없음 · 빈 목록처럼 영역 한가운데 놓여야 하는 경우에 쓴다.
|
|
217
|
+
* **부모가 세로 flex 컨테이너여야 `flex: 1` 이 먹는다** - 아닌 경우 `height: 100%` 를 준 부모
|
|
218
|
+
* 안에 두거나 부모를 `display: flex; flex-direction: column` 으로 만들 것.
|
|
219
|
+
*/
|
|
220
|
+
fillHeight?: boolean;
|
|
210
221
|
}
|
|
211
222
|
/**
|
|
212
223
|
* 빈 상태 표시 - 데이터 없음, 검색 결과 없음, 시작 가이드 등.
|
|
@@ -221,7 +232,7 @@ interface EmptyStateProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "
|
|
|
221
232
|
* />
|
|
222
233
|
* ```
|
|
223
234
|
*/
|
|
224
|
-
declare const EmptyState: ({ illustration, title, description, action, size, className, ...props }: EmptyStateProps) => React$1.JSX.Element;
|
|
235
|
+
declare const EmptyState: ({ illustration, title, description, action, size, fillHeight, className, ...props }: EmptyStateProps) => React$1.JSX.Element;
|
|
225
236
|
|
|
226
237
|
type ErrorStateVariant = "page" | "widget";
|
|
227
238
|
interface ErrorStateProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
|
|
@@ -229,9 +240,14 @@ interface ErrorStateProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "
|
|
|
229
240
|
title?: React$1.ReactNode;
|
|
230
241
|
/** 보조 설명 */
|
|
231
242
|
description?: React$1.ReactNode;
|
|
232
|
-
/**
|
|
243
|
+
/**
|
|
244
|
+
* 아이콘/일러스트 (미지정 시 기본 경고 아이콘. `null` 로 숨김). **장식 전용** -
|
|
245
|
+
* `aria-hidden="true"` 래퍼로 접근성 트리에서 제외된다. 래퍼는 필수다: 기본 아이콘이
|
|
246
|
+
* 이름 없는 bare lucide svg 라서, 빼면 `role="alert"` 이 이름 없는 그래픽까지 읽는다.
|
|
247
|
+
* 포커스 가능한 요소는 `action` 을 쓸 것 (WCAG 4.1.2).
|
|
248
|
+
*/
|
|
233
249
|
icon?: React$1.ReactNode;
|
|
234
|
-
/** 액션 영역 (재시도 버튼 등) */
|
|
250
|
+
/** 액션 영역 (재시도 버튼 등). `aria-hidden` 을 붙이지 않아 보조기기에 그대로 노출된다. */
|
|
235
251
|
action?: React$1.ReactNode;
|
|
236
252
|
/**
|
|
237
253
|
* 레이아웃 모드 (기본 "page").
|
|
@@ -580,7 +596,11 @@ interface PopoverProps {
|
|
|
580
596
|
defaultOpen?: boolean;
|
|
581
597
|
/** 열림 상태 변경 콜백 */
|
|
582
598
|
onOpenChange?: (open: boolean) => void;
|
|
583
|
-
/**
|
|
599
|
+
/**
|
|
600
|
+
* 팝오버 접근성 레이블. `content` 에 제목이 없으면 이 값이 접근성 이름이 된다.
|
|
601
|
+
* 폴백이 없으므로 `aria-labelledby` 와 함께 비우면 이름 없는 대화상자가 되고
|
|
602
|
+
* axe `aria-dialog-name` 이 잡는다.
|
|
603
|
+
*/
|
|
584
604
|
"aria-label"?: string;
|
|
585
605
|
/** dialog 의 접근성 라벨 요소 id */
|
|
586
606
|
"aria-labelledby"?: string;
|
|
@@ -1324,6 +1344,35 @@ interface MediaCardProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "t
|
|
|
1324
1344
|
*/
|
|
1325
1345
|
declare const MediaCard: ({ image, imagePosition, aspectRatio, heading, headingAs: HeadingTag, eyebrow, shadow, bordered, clickable, meta, children, className, ...props }: MediaCardProps) => React$1.JSX.Element;
|
|
1326
1346
|
|
|
1347
|
+
type ProseSize = "md" | "lg";
|
|
1348
|
+
interface ProseProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
1349
|
+
/**
|
|
1350
|
+
* 본문 스케일 (기본값: "md").
|
|
1351
|
+
* - `md`: 공지·FAQ·이메일 프리뷰처럼 좁은 폭에 들어가는 본문 (h1 24 / h2 20 / h3 18)
|
|
1352
|
+
* - `lg`: 약관·정책처럼 페이지를 채우는 긴 본문 (h1 28 / h2 24 / h3 20, 제목 위 여백도 넓다)
|
|
1353
|
+
*/
|
|
1354
|
+
size?: ProseSize;
|
|
1355
|
+
/** 루트 div 요소 ref (React 19 ref-as-prop) */
|
|
1356
|
+
ref?: React$1.Ref<HTMLDivElement>;
|
|
1357
|
+
}
|
|
1358
|
+
/**
|
|
1359
|
+
* 마크다운 등으로 렌더된 본문에 조판을 입힌다.
|
|
1360
|
+
*
|
|
1361
|
+
* **파서를 포함하지 않는다.** 앱이 `react-markdown` 등으로 만든 결과를 감싸면
|
|
1362
|
+
* 자손 셀렉터로 토큰 기반 타이포·간격·색이 적용된다(다크 모드 자동).
|
|
1363
|
+
*
|
|
1364
|
+
* @example
|
|
1365
|
+
* ```tsx
|
|
1366
|
+
* <Prose size="lg">
|
|
1367
|
+
* <ReactMarkdown>{policy}</ReactMarkdown>
|
|
1368
|
+
* </Prose>
|
|
1369
|
+
* ```
|
|
1370
|
+
*/
|
|
1371
|
+
declare const Prose: {
|
|
1372
|
+
({ size, className, children, ref, ...props }: ProseProps): React$1.JSX.Element;
|
|
1373
|
+
displayName: string;
|
|
1374
|
+
};
|
|
1375
|
+
|
|
1327
1376
|
type TableSize = "sm" | "md" | "lg";
|
|
1328
1377
|
type TableSortDirection = "asc" | "desc";
|
|
1329
1378
|
interface TableSort {
|
|
@@ -1994,10 +2043,41 @@ interface TextFieldProps extends Omit<React$1.InputHTMLAttributes<HTMLInputEleme
|
|
|
1994
2043
|
error?: boolean;
|
|
1995
2044
|
/** 성공(검증 통과) 상태 여부. `error` 가 true 면 무시된다. */
|
|
1996
2045
|
success?: boolean;
|
|
1997
|
-
/**
|
|
2046
|
+
/**
|
|
2047
|
+
* 식별자(아이디·인증코드·시리얼·사업자번호)를 담는 칸인지. 켜면 `l`/`I`/`1` 과 `0`/`O` 를
|
|
2048
|
+
* 구분되게 렌더한다 — 사용자가 한 글자씩 옮겨 적는 값의 오탈자를 줄인다.
|
|
2049
|
+
*/
|
|
2050
|
+
identifier?: boolean;
|
|
2051
|
+
/**
|
|
2052
|
+
* 입력 필드 왼쪽에 표시할 **장식** 아이콘. `aria-hidden` 으로 접근성 트리에서 제외된다.
|
|
2053
|
+
* 포커스 가능한 요소(버튼 등)를 넣어야 하면 `leadingAction` 을 쓸 것.
|
|
2054
|
+
*/
|
|
1998
2055
|
leadingIcon?: React$1.ReactNode;
|
|
1999
|
-
/**
|
|
2056
|
+
/**
|
|
2057
|
+
* 입력 필드 오른쪽에 표시할 **장식** 아이콘. `aria-hidden` 으로 접근성 트리에서 제외된다.
|
|
2058
|
+
* 포커스 가능한 요소(버튼 등)를 넣어야 하면 `trailingAction` 을 쓸 것.
|
|
2059
|
+
*/
|
|
2000
2060
|
trailingIcon?: React$1.ReactNode;
|
|
2061
|
+
/**
|
|
2062
|
+
* 입력 필드 왼쪽 조작 요소(버튼 등). `aria-hidden` 을 붙이지 않아 보조기기에 그대로 노출된다.
|
|
2063
|
+
* 아이콘 칸의 위치·크기 CSS 를 재사용하고, 넘긴 요소가 40x40 히트 영역을 채운다(WCAG 2.5.8).
|
|
2064
|
+
*/
|
|
2065
|
+
leadingAction?: React$1.ReactNode;
|
|
2066
|
+
/**
|
|
2067
|
+
* 입력 필드 오른쪽 조작 요소(버튼 등). `aria-hidden` 을 붙이지 않아 보조기기에 그대로 노출된다.
|
|
2068
|
+
* 아이콘 칸의 위치·크기 CSS 를 재사용하고, 넘긴 요소가 40x40 히트 영역을 채운다(WCAG 2.5.8).
|
|
2069
|
+
*/
|
|
2070
|
+
trailingAction?: React$1.ReactNode;
|
|
2071
|
+
/**
|
|
2072
|
+
* 비밀번호 표시/숨기기 토글 버튼을 오른쪽에 내장한다.
|
|
2073
|
+
* 켜면 `type` 을 토글이 직접 관리한다 - 숨김 상태는 넘긴 `type`(보통 `"password"`), 표시 상태는 `"text"`.
|
|
2074
|
+
*/
|
|
2075
|
+
showPasswordToggle?: boolean;
|
|
2076
|
+
/** 토글 버튼의 `aria-label`. i18n 은 앱이 주입한다 (기본값: 영문). */
|
|
2077
|
+
passwordToggleLabels?: {
|
|
2078
|
+
show: string;
|
|
2079
|
+
hide: string;
|
|
2080
|
+
};
|
|
2001
2081
|
/** 값이 있을 때 오른쪽에 지우기(X) 버튼 표시 여부 */
|
|
2002
2082
|
clearable?: boolean;
|
|
2003
2083
|
/** 컨테이너 전체 너비 차지 여부 */
|
|
@@ -2028,7 +2108,7 @@ interface TextFieldProps extends Omit<React$1.InputHTMLAttributes<HTMLInputEleme
|
|
|
2028
2108
|
* @returns 렌더링된 텍스트 필드 UI
|
|
2029
2109
|
*/
|
|
2030
2110
|
declare const TextField: {
|
|
2031
|
-
({ id, label, showLabel, supportingText, error, success, leadingIcon, trailingIcon, clearable, fullWidth, size, variant, className, onValueChange, onChangeAction, imeStrategy, value, defaultValue, transformValue, ref, ...props }: TextFieldProps): React$1.JSX.Element;
|
|
2111
|
+
({ id, label, showLabel, supportingText, error, success, identifier, leadingIcon, trailingIcon, leadingAction, trailingAction, showPasswordToggle, passwordToggleLabels, clearable, type, fullWidth, size, variant, className, onValueChange, onChangeAction, imeStrategy, value, defaultValue, transformValue, ref, ...props }: TextFieldProps): React$1.JSX.Element;
|
|
2032
2112
|
displayName: string;
|
|
2033
2113
|
};
|
|
2034
2114
|
|
|
@@ -2261,7 +2341,7 @@ declare const Pagination: ({ page, totalPages, onPageChange, onChange, prevLabel
|
|
|
2261
2341
|
|
|
2262
2342
|
/** Drawer 가 미끄러져 들어오는 방향 (top 은 범위 외) */
|
|
2263
2343
|
type DrawerPlacement = "left" | "right" | "bottom";
|
|
2264
|
-
interface DrawerProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title" | "onClick" | "onKeyDown" | "
|
|
2344
|
+
interface DrawerProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title" | "onClick" | "onKeyDown" | "onPointerDown"> {
|
|
2265
2345
|
/** 드로어 열림 여부 */
|
|
2266
2346
|
open: boolean;
|
|
2267
2347
|
/** 드로어 닫기 콜백 */
|
|
@@ -2280,8 +2360,16 @@ interface DrawerProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "titl
|
|
|
2280
2360
|
showCloseIcon?: boolean;
|
|
2281
2361
|
/** X 닫기 버튼 접근성 레이블 (기본값: "닫기") */
|
|
2282
2362
|
closeLabel?: string;
|
|
2283
|
-
/**
|
|
2363
|
+
/**
|
|
2364
|
+
* 드로어 접근성 레이블. `title` 이 없을 때 이 값이 접근성 이름이 된다.
|
|
2365
|
+
* 둘 다 비우면 이름 없는 대화상자가 되고 axe `aria-dialog-name` 이 잡는다.
|
|
2366
|
+
*/
|
|
2284
2367
|
ariaLabel?: string;
|
|
2368
|
+
/**
|
|
2369
|
+
* 퇴출 애니메이션이 끝나 패널이 실제로 언마운트된 뒤 호출된다.
|
|
2370
|
+
* `open` 을 끈 직후가 아니라 이 시점에 상세 데이터를 비워야 본문만 먼저 사라지지 않는다.
|
|
2371
|
+
*/
|
|
2372
|
+
onExited?: () => void;
|
|
2285
2373
|
}
|
|
2286
2374
|
/**
|
|
2287
2375
|
* 화면 가장자리에서 미끄러져 들어오는 패널(Drawer)을 렌더링한다.
|
|
@@ -2291,12 +2379,12 @@ interface DrawerProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "titl
|
|
|
2291
2379
|
* @returns 열림 상태일 때 렌더링된 드로어, 닫힘 상태면 null
|
|
2292
2380
|
*/
|
|
2293
2381
|
declare const Drawer: {
|
|
2294
|
-
({ open, onClose, placement, size, title, footer, closeOnOverlay, showCloseIcon, closeLabel, ariaLabel, children, className, ...props }: DrawerProps): React$1.ReactPortal | null;
|
|
2382
|
+
({ open, onClose, placement, size, title, footer, closeOnOverlay, showCloseIcon, closeLabel, ariaLabel, onExited, children, className, ...props }: DrawerProps): React$1.ReactPortal | null;
|
|
2295
2383
|
displayName: string;
|
|
2296
2384
|
};
|
|
2297
2385
|
|
|
2298
2386
|
type ModalFooterAlign = "end" | "between" | "start";
|
|
2299
|
-
interface ModalProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title" | "onClick" | "onKeyDown" | "
|
|
2387
|
+
interface ModalProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title" | "onClick" | "onKeyDown" | "onPointerDown"> {
|
|
2300
2388
|
/** 모달 열림 여부 */
|
|
2301
2389
|
open: boolean;
|
|
2302
2390
|
/** 모달 닫기 콜백 */
|
|
@@ -2317,8 +2405,16 @@ interface ModalProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title
|
|
|
2317
2405
|
showCloseIcon?: boolean;
|
|
2318
2406
|
/** X 닫기 버튼 접근성 레이블 (기본값: "닫기") */
|
|
2319
2407
|
closeLabel?: string;
|
|
2320
|
-
/**
|
|
2408
|
+
/**
|
|
2409
|
+
* 모달 접근성 레이블. `title` 이 없으면 이 값이 유일한 접근성 이름이다 - 폴백이 없으므로
|
|
2410
|
+
* 둘 다 비우면 이름 없는 대화상자가 되고 axe `aria-dialog-name` 이 잡는다.
|
|
2411
|
+
*/
|
|
2321
2412
|
ariaLabel?: string;
|
|
2413
|
+
/**
|
|
2414
|
+
* 퇴출 애니메이션이 끝나 패널이 실제로 언마운트된 뒤 호출된다.
|
|
2415
|
+
* `open` 을 끈 직후가 아니라 이 시점에 상세 데이터를 비워야 본문만 먼저 사라지지 않는다.
|
|
2416
|
+
*/
|
|
2417
|
+
onExited?: () => void;
|
|
2322
2418
|
}
|
|
2323
2419
|
/**
|
|
2324
2420
|
* 모달을 렌더링한다.
|
|
@@ -2326,7 +2422,7 @@ interface ModalProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title
|
|
|
2326
2422
|
* @param props 모달 속성
|
|
2327
2423
|
* @returns 열림 상태일 때 렌더링된 모달, 닫힘 상태면 null
|
|
2328
2424
|
*/
|
|
2329
|
-
declare const Modal: ({ open, onClose, closeOnOverlay, width, title, description, footer, footerAlign, showCloseIcon, closeLabel, children, className, ariaLabel, ...props }: ModalProps) => React$1.ReactPortal | null;
|
|
2425
|
+
declare const Modal: ({ open, onClose, closeOnOverlay, width, title, description, footer, footerAlign, showCloseIcon, closeLabel, children, className, ariaLabel, onExited, ...props }: ModalProps) => React$1.ReactPortal | null;
|
|
2330
2426
|
|
|
2331
2427
|
type ThemeMode = "light" | "dark" | "system";
|
|
2332
2428
|
type ResolvedTheme = "light" | "dark";
|
|
@@ -2523,4 +2619,4 @@ interface StackProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
|
2523
2619
|
*/
|
|
2524
2620
|
declare const Stack: ({ direction, gap, align, justify, wrap, as: Tag, ref, className, children, style, ...props }: StackProps) => React$1.JSX.Element;
|
|
2525
2621
|
|
|
2526
|
-
export { Accordion, type AccordionItem, type AccordionProps, type AlertActionsAlign, type AlertOptions, AlertProvider, type AlertVariant, Avatar, type AvatarProps, type AvatarShape, type AvatarSize, Badge, type BadgeAppearance, type BadgeProps, type BadgeShape, type BadgeSize, type BadgeVariant, BottomNav, BottomNavItem, type BottomNavItemProps, type BottomNavProps, BottomNavSpacer, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, Button, type ButtonAsAnchor, type ButtonAsButton, type ButtonProps, type ButtonSize, type ButtonVariant, Card, type CardFooterAlign, type CardProps, type CardVariant, Checkbox, type CheckboxProps, Chip, type ChipProps, type ChipSize, type ChipTone, type ChipType, Container, type ContainerProps, type ContainerSize, type CropImageSize, type CropOffset, type CropRect, DatePicker, type DatePickerProps, Divider, type DividerProps, Drawer, type DrawerPlacement, type DrawerProps, Dropdown, type DropdownMultipleProps, type DropdownOption, type DropdownProps, type DropdownSingleProps, type DropdownSize, type DropdownVariant, EmptyState, type EmptyStateProps, ErrorState, type ErrorStateProps, type ErrorStateVariant, FileInput, type FileInputProps, type FileInputVariant, Grid, type GridCols, type GridGap, type GridProps, Hero, type HeroAction, type HeroAlign, type HeroHeight, type HeroOverlay, type HeroProps, Icon, IconButton, type IconButtonProps, type IconButtonSize, type IconButtonVariant, type IconProps, ImageCropper, type ImageCropperHandle, type ImageCropperProps, type ImeStrategy, LinearProgress, type LinearProgressProps, ListItem, type ListItemProps, MediaCard, type MediaCardImage, type MediaCardImagePosition, type MediaCardProps, type MediaCardShadow, Menu, type MenuItem, type MenuProps, Modal, type ModalFooterAlign, type ModalProps, NavBar, type NavBarLayout, type NavBarLocaleConfig, type NavBarLocaleOption, type NavBarProps, type NavBarVariant, NavLink, type NavLinkProps, OtpInput, type OtpInputProps, Pagination, type PaginationProps, Popover, type PopoverPlacement, type PopoverProps, Radio, RadioGroup, type RadioGroupContextValue, type RadioGroupOrientation, type RadioGroupProps, type RadioGroupSize, type RadioProps, type ResolvedTheme, Section, type SectionBg, type SectionProps, type SectionSpacing, Sidebar, SidebarItem, type SidebarItemProps, type SidebarMode, type SidebarProps, SidebarSection, type SidebarSectionProps, Skeleton, type SkeletonProps, type SkeletonVariant, Spinner, type SpinnerProps, Stack, type StackAlign, type StackDirection, type StackGap, type StackJustify, type StackProps, type StackWrap, Tab, TabList, type TabListProps, TabPanel, type TabPanelProps, type TabProps, Table, type TableColumn, type TableProps, type TableSize, type TableSort, type TableSortDirection, Tabs, type TabsProps, type TabsSize, type TabsVariant, TextField, type TextFieldProps, type TextFieldSize, type TextFieldVariant, Textarea, type TextareaProps, type TextareaResize, type TextareaSize, type ThemeMode, ThemeProvider, type ThemeProviderProps, ToastProvider, type ToastProviderProps, type ToastVariant, Toggle, type ToggleProps, Tooltip, type TooltipPlacement, type TooltipProps, TopLoading, type TopLoadingProps, a11y, baseBorderWidth, baseColors, baseTypography, borderWidth, breakpoints, cn, colors, elevation, iconSize, motion, opacity, radius, skeleton, spacing, typography, useAlert, useFocusTrap, useRadioGroupContext, useReducedMotion, useSpringHover, useSpringPresence, useTheme, useToast, zIndex };
|
|
2622
|
+
export { Accordion, type AccordionItem, type AccordionProps, type AlertActionsAlign, type AlertOptions, AlertProvider, type AlertVariant, Avatar, type AvatarProps, type AvatarShape, type AvatarSize, Badge, type BadgeAppearance, type BadgeProps, type BadgeShape, type BadgeSize, type BadgeVariant, BottomNav, BottomNavItem, type BottomNavItemProps, type BottomNavProps, BottomNavSpacer, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, Button, type ButtonAsAnchor, type ButtonAsButton, type ButtonProps, type ButtonSize, type ButtonVariant, Card, type CardFooterAlign, type CardProps, type CardVariant, Checkbox, type CheckboxProps, Chip, type ChipProps, type ChipSize, type ChipTone, type ChipType, Container, type ContainerProps, type ContainerSize, type CropImageSize, type CropOffset, type CropRect, DatePicker, type DatePickerProps, Divider, type DividerProps, Drawer, type DrawerPlacement, type DrawerProps, Dropdown, type DropdownMultipleProps, type DropdownOption, type DropdownProps, type DropdownSingleProps, type DropdownSize, type DropdownVariant, EmptyState, type EmptyStateProps, ErrorState, type ErrorStateProps, type ErrorStateVariant, FileInput, type FileInputProps, type FileInputVariant, Grid, type GridCols, type GridGap, type GridProps, Hero, type HeroAction, type HeroAlign, type HeroHeight, type HeroOverlay, type HeroProps, Icon, IconButton, type IconButtonProps, type IconButtonSize, type IconButtonVariant, type IconProps, ImageCropper, type ImageCropperHandle, type ImageCropperProps, type ImeStrategy, LinearProgress, type LinearProgressProps, ListItem, type ListItemProps, MediaCard, type MediaCardImage, type MediaCardImagePosition, type MediaCardProps, type MediaCardShadow, Menu, type MenuItem, type MenuProps, Modal, type ModalFooterAlign, type ModalProps, NavBar, type NavBarLayout, type NavBarLocaleConfig, type NavBarLocaleOption, type NavBarProps, type NavBarVariant, NavLink, type NavLinkProps, OtpInput, type OtpInputProps, Pagination, type PaginationProps, Popover, type PopoverPlacement, type PopoverProps, Prose, type ProseProps, type ProseSize, Radio, RadioGroup, type RadioGroupContextValue, type RadioGroupOrientation, type RadioGroupProps, type RadioGroupSize, type RadioProps, type ResolvedTheme, Section, type SectionBg, type SectionProps, type SectionSpacing, Sidebar, SidebarItem, type SidebarItemProps, type SidebarMode, type SidebarProps, SidebarSection, type SidebarSectionProps, Skeleton, type SkeletonProps, type SkeletonVariant, Spinner, type SpinnerProps, Stack, type StackAlign, type StackDirection, type StackGap, type StackJustify, type StackProps, type StackWrap, Tab, TabList, type TabListProps, TabPanel, type TabPanelProps, type TabProps, Table, type TableColumn, type TableProps, type TableSize, type TableSort, type TableSortDirection, Tabs, type TabsProps, type TabsSize, type TabsVariant, TextField, type TextFieldProps, type TextFieldSize, type TextFieldVariant, Textarea, type TextareaProps, type TextareaResize, type TextareaSize, type ThemeMode, ThemeProvider, type ThemeProviderProps, ToastProvider, type ToastProviderProps, type ToastVariant, Toggle, type ToggleProps, Tooltip, type TooltipPlacement, type TooltipProps, TopLoading, type TopLoadingProps, a11y, baseBorderWidth, baseColors, baseTypography, borderWidth, breakpoints, cn, colors, elevation, iconSize, motion, opacity, radius, skeleton, spacing, typography, useAlert, useFocusTrap, useRadioGroupContext, useReducedMotion, useSpringHover, useSpringPresence, useTheme, useToast, zIndex };
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import './index.css';
|
|
|
3
3
|
import * as React16 from 'react';
|
|
4
4
|
import { createContext, useRef, useState, useId, useEffect, useContext, useCallback, useMemo, Fragment, useImperativeHandle, useLayoutEffect } from 'react';
|
|
5
5
|
import { useSpring, animated } from '@react-spring/web';
|
|
6
|
-
import { ChevronDown, ChevronRight, Globe, ChevronLeft, ArrowUp, ArrowDown, ArrowUpDown, XCircle, AlertTriangle, CheckCircle2, Info, Bell, Search, Check, Image, X, TriangleAlert } from 'lucide-react';
|
|
6
|
+
import { ChevronDown, ChevronRight, Globe, ChevronLeft, ArrowUp, ArrowDown, ArrowUpDown, XCircle, AlertTriangle, CheckCircle2, Info, Bell, Search, Check, Image, X, EyeOff, Eye, TriangleAlert } from 'lucide-react';
|
|
7
7
|
import { jsx, jsxs, Fragment as Fragment$1 } from 'react/jsx-runtime';
|
|
8
8
|
import { createPortal } from 'react-dom';
|
|
9
9
|
|
|
@@ -243,6 +243,7 @@ function useAnchoredPosition({
|
|
|
243
243
|
}, [open, placement, gap, padding, anchorRef, floatingRef]);
|
|
244
244
|
return state;
|
|
245
245
|
}
|
|
246
|
+
var SKIP_AUTOFOCUS_ATTR = "data-focus-trap-skip-autofocus";
|
|
246
247
|
var FOCUSABLE_SELECTORS = [
|
|
247
248
|
"a[href]",
|
|
248
249
|
"button:not([disabled])",
|
|
@@ -263,8 +264,9 @@ function useFocusTrap(containerRef, isActive) {
|
|
|
263
264
|
};
|
|
264
265
|
let wasTabIndexAdded = false;
|
|
265
266
|
const focusableElements = getFocusableElements();
|
|
266
|
-
|
|
267
|
-
|
|
267
|
+
const initialTarget = Array.from(focusableElements).find((el) => !el.hasAttribute(SKIP_AUTOFOCUS_ATTR)) ?? focusableElements[0];
|
|
268
|
+
if (initialTarget) {
|
|
269
|
+
initialTarget.focus();
|
|
268
270
|
} else {
|
|
269
271
|
container.setAttribute("tabindex", "-1");
|
|
270
272
|
wasTabIndexAdded = true;
|
|
@@ -542,15 +544,28 @@ var EmptyState = ({
|
|
|
542
544
|
description,
|
|
543
545
|
action,
|
|
544
546
|
size = "md",
|
|
547
|
+
fillHeight,
|
|
545
548
|
className,
|
|
546
549
|
...props
|
|
547
550
|
}) => {
|
|
548
|
-
return /* @__PURE__ */ jsxs(
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
551
|
+
return /* @__PURE__ */ jsxs(
|
|
552
|
+
"div",
|
|
553
|
+
{
|
|
554
|
+
className: cn(
|
|
555
|
+
"empty_state",
|
|
556
|
+
`empty_state_size_${size}`,
|
|
557
|
+
fillHeight && "empty_state_fill_height",
|
|
558
|
+
className
|
|
559
|
+
),
|
|
560
|
+
...props,
|
|
561
|
+
children: [
|
|
562
|
+
illustration && /* @__PURE__ */ jsx("div", { className: "empty_state_illustration", "aria-hidden": "true", children: illustration }),
|
|
563
|
+
title && /* @__PURE__ */ jsx("h3", { className: "empty_state_title", children: title }),
|
|
564
|
+
description && /* @__PURE__ */ jsx("p", { className: "empty_state_description", children: description }),
|
|
565
|
+
action && /* @__PURE__ */ jsx("div", { className: "empty_state_action", children: action })
|
|
566
|
+
]
|
|
567
|
+
}
|
|
568
|
+
);
|
|
554
569
|
};
|
|
555
570
|
var DEFAULT_ICON_SIZE = {
|
|
556
571
|
page: 48,
|
|
@@ -1419,7 +1434,7 @@ var Popover = ({
|
|
|
1419
1434
|
ref: popoverRef,
|
|
1420
1435
|
role: "dialog",
|
|
1421
1436
|
tabIndex: -1,
|
|
1422
|
-
"aria-label":
|
|
1437
|
+
"aria-label": ariaLabel,
|
|
1423
1438
|
"aria-labelledby": ariaLabelledby,
|
|
1424
1439
|
style,
|
|
1425
1440
|
className: cn("popover", className),
|
|
@@ -2433,6 +2448,29 @@ var MediaCard = ({
|
|
|
2433
2448
|
] })
|
|
2434
2449
|
] });
|
|
2435
2450
|
};
|
|
2451
|
+
var Prose = ({ size = "md", className, children, ref, ...props }) => {
|
|
2452
|
+
const rootRef = React16.useRef(null);
|
|
2453
|
+
React16.useImperativeHandle(ref, () => rootRef.current, []);
|
|
2454
|
+
useSafeLayoutEffect(() => {
|
|
2455
|
+
const root = rootRef.current;
|
|
2456
|
+
if (!root) return;
|
|
2457
|
+
const targets = Array.from(root.querySelectorAll("pre, table"));
|
|
2458
|
+
const sync = () => {
|
|
2459
|
+
for (const el of targets) {
|
|
2460
|
+
if (el.scrollWidth > el.clientWidth) el.setAttribute("tabindex", "0");
|
|
2461
|
+
else el.removeAttribute("tabindex");
|
|
2462
|
+
}
|
|
2463
|
+
};
|
|
2464
|
+
sync();
|
|
2465
|
+
if (typeof ResizeObserver === "undefined") return;
|
|
2466
|
+
const observer = new ResizeObserver(sync);
|
|
2467
|
+
observer.observe(root);
|
|
2468
|
+
for (const el of targets) observer.observe(el);
|
|
2469
|
+
return () => observer.disconnect();
|
|
2470
|
+
}, [children]);
|
|
2471
|
+
return /* @__PURE__ */ jsx("div", { ref: rootRef, className: cn("prose", `prose_size_${size}`, className), ...props, children });
|
|
2472
|
+
};
|
|
2473
|
+
Prose.displayName = "Prose";
|
|
2436
2474
|
var Skeleton = ({
|
|
2437
2475
|
variant = "text",
|
|
2438
2476
|
width,
|
|
@@ -4413,6 +4451,7 @@ var Textarea = ({
|
|
|
4413
4451
|
};
|
|
4414
4452
|
Textarea.displayName = "Textarea";
|
|
4415
4453
|
var ClearIcon = () => /* @__PURE__ */ jsx(X, { size: iconSize.lg, "aria-hidden": "true" });
|
|
4454
|
+
var DEFAULT_PASSWORD_TOGGLE_LABELS = { show: "Show password", hide: "Hide password" };
|
|
4416
4455
|
var TextField = ({
|
|
4417
4456
|
id,
|
|
4418
4457
|
label,
|
|
@@ -4420,9 +4459,15 @@ var TextField = ({
|
|
|
4420
4459
|
supportingText,
|
|
4421
4460
|
error,
|
|
4422
4461
|
success,
|
|
4462
|
+
identifier,
|
|
4423
4463
|
leadingIcon,
|
|
4424
4464
|
trailingIcon,
|
|
4465
|
+
leadingAction,
|
|
4466
|
+
trailingAction,
|
|
4467
|
+
showPasswordToggle,
|
|
4468
|
+
passwordToggleLabels,
|
|
4425
4469
|
clearable,
|
|
4470
|
+
type,
|
|
4426
4471
|
fullWidth,
|
|
4427
4472
|
size = "md",
|
|
4428
4473
|
variant = "outline",
|
|
@@ -4441,9 +4486,7 @@ var TextField = ({
|
|
|
4441
4486
|
const helperId = supportingText ? `${inputId}-help` : void 0;
|
|
4442
4487
|
const isControlled = value !== void 0;
|
|
4443
4488
|
const applyTransform = (nextValue) => transformValue ? transformValue(nextValue) : nextValue;
|
|
4444
|
-
const [innerValue, setInnerValue] = useState(
|
|
4445
|
-
() => applyTransform(value ?? defaultValue ?? "")
|
|
4446
|
-
);
|
|
4489
|
+
const [innerValue, setInnerValue] = useState(() => applyTransform(value ?? defaultValue ?? ""));
|
|
4447
4490
|
const isComposingRef = useRef(false);
|
|
4448
4491
|
const lastEmittedValueRef = useRef(innerValue);
|
|
4449
4492
|
const [prevValue, setPrevValue] = useState(value);
|
|
@@ -4466,6 +4509,14 @@ var TextField = ({
|
|
|
4466
4509
|
const handleClear = useCallback(() => {
|
|
4467
4510
|
emit("");
|
|
4468
4511
|
}, [emit]);
|
|
4512
|
+
const [passwordRevealed, setPasswordRevealed] = useState(false);
|
|
4513
|
+
const togglePassword = useCallback(() => {
|
|
4514
|
+
setPasswordRevealed((revealed) => !revealed);
|
|
4515
|
+
}, []);
|
|
4516
|
+
let resolvedType = type;
|
|
4517
|
+
if (showPasswordToggle) {
|
|
4518
|
+
resolvedType = passwordRevealed ? "text" : type ?? "password";
|
|
4519
|
+
}
|
|
4469
4520
|
const isError = !!error;
|
|
4470
4521
|
const isSuccess = !!success && !isError;
|
|
4471
4522
|
const rootClassName = cn(
|
|
@@ -4479,11 +4530,32 @@ var TextField = ({
|
|
|
4479
4530
|
props.disabled && "text_field_disabled",
|
|
4480
4531
|
className
|
|
4481
4532
|
);
|
|
4482
|
-
const
|
|
4533
|
+
const passwordToggleLabel = passwordRevealed ? passwordToggleLabels?.hide ?? DEFAULT_PASSWORD_TOGGLE_LABELS.hide : passwordToggleLabels?.show ?? DEFAULT_PASSWORD_TOGGLE_LABELS.show;
|
|
4534
|
+
const resolvedTrailing = showPasswordToggle ? /* @__PURE__ */ jsx("span", { className: "text_field_icon text_field_action", children: /* @__PURE__ */ jsx(
|
|
4535
|
+
"button",
|
|
4536
|
+
{
|
|
4537
|
+
type: "button",
|
|
4538
|
+
onClick: togglePassword,
|
|
4539
|
+
"aria-label": passwordToggleLabel,
|
|
4540
|
+
disabled: props.disabled,
|
|
4541
|
+
children: passwordRevealed ? /* @__PURE__ */ jsx(EyeOff, { size: iconSize.lg, "aria-hidden": "true" }) : /* @__PURE__ */ jsx(Eye, { size: iconSize.lg, "aria-hidden": "true" })
|
|
4542
|
+
}
|
|
4543
|
+
) }) : clearable && innerValue ? /* @__PURE__ */ jsx(
|
|
4544
|
+
"button",
|
|
4545
|
+
{
|
|
4546
|
+
type: "button",
|
|
4547
|
+
className: "text_field_clear",
|
|
4548
|
+
onClick: handleClear,
|
|
4549
|
+
"aria-label": "Clear",
|
|
4550
|
+
disabled: props.disabled,
|
|
4551
|
+
children: /* @__PURE__ */ jsx(ClearIcon, {})
|
|
4552
|
+
}
|
|
4553
|
+
) : trailingAction ? /* @__PURE__ */ jsx("span", { className: "text_field_icon text_field_action", children: trailingAction }) : trailingIcon ? /* @__PURE__ */ jsx("span", { className: "text_field_icon", "aria-hidden": "true", children: trailingIcon }) : null;
|
|
4554
|
+
const resolvedLeading = leadingAction ? /* @__PURE__ */ jsx("span", { className: "text_field_icon text_field_action", children: leadingAction }) : leadingIcon ? /* @__PURE__ */ jsx("span", { className: "text_field_icon", "aria-hidden": "true", children: leadingIcon }) : null;
|
|
4483
4555
|
return /* @__PURE__ */ jsxs("div", { className: rootClassName, children: [
|
|
4484
4556
|
label && showLabel && /* @__PURE__ */ jsx("label", { htmlFor: inputId, className: "text_field_label", children: label }),
|
|
4485
4557
|
/* @__PURE__ */ jsx("div", { className: "text_field_container", children: /* @__PURE__ */ jsxs("div", { className: "text_field_inner", children: [
|
|
4486
|
-
|
|
4558
|
+
resolvedLeading,
|
|
4487
4559
|
/* @__PURE__ */ jsx(
|
|
4488
4560
|
"div",
|
|
4489
4561
|
{
|
|
@@ -4496,11 +4568,12 @@ var TextField = ({
|
|
|
4496
4568
|
{
|
|
4497
4569
|
id: inputId,
|
|
4498
4570
|
ref,
|
|
4499
|
-
className: "text_field_input",
|
|
4571
|
+
className: cn("text_field_input", identifier && "text_field_input_identifier"),
|
|
4500
4572
|
"aria-invalid": isError,
|
|
4501
4573
|
"aria-describedby": helperId,
|
|
4502
4574
|
"aria-label": !showLabel ? label : void 0,
|
|
4503
4575
|
...props,
|
|
4576
|
+
type: resolvedType,
|
|
4504
4577
|
value: innerValue,
|
|
4505
4578
|
onCompositionStart: () => {
|
|
4506
4579
|
isComposingRef.current = true;
|
|
@@ -4694,11 +4767,13 @@ var Drawer = ({
|
|
|
4694
4767
|
showCloseIcon = true,
|
|
4695
4768
|
closeLabel = "\uB2EB\uAE30",
|
|
4696
4769
|
ariaLabel,
|
|
4770
|
+
onExited,
|
|
4697
4771
|
children,
|
|
4698
4772
|
className,
|
|
4699
4773
|
...props
|
|
4700
4774
|
}) => {
|
|
4701
4775
|
const panelRef = React16.useRef(null);
|
|
4776
|
+
const pressedOverlayRef = React16.useRef(false);
|
|
4702
4777
|
const titleId = React16.useId();
|
|
4703
4778
|
const [shouldRender, setShouldRender] = React16.useState(open);
|
|
4704
4779
|
const reduced = useReducedMotion();
|
|
@@ -4709,7 +4784,10 @@ var Drawer = ({
|
|
|
4709
4784
|
const overlayStyle = useSpringPresence({
|
|
4710
4785
|
visible: open,
|
|
4711
4786
|
from: "translateY(0px)",
|
|
4712
|
-
onExitComplete: () =>
|
|
4787
|
+
onExitComplete: () => {
|
|
4788
|
+
setShouldRender(false);
|
|
4789
|
+
onExited?.();
|
|
4790
|
+
}
|
|
4713
4791
|
});
|
|
4714
4792
|
const slideFrom = SLIDE_FROM[placement];
|
|
4715
4793
|
const slideRest = placement === "bottom" ? "translateY(0%)" : "translateX(0%)";
|
|
@@ -4738,8 +4816,16 @@ var Drawer = ({
|
|
|
4738
4816
|
role: "dialog",
|
|
4739
4817
|
"aria-modal": "true",
|
|
4740
4818
|
"aria-labelledby": hasTitle && !ariaLabel ? titleId : void 0,
|
|
4741
|
-
"aria-label":
|
|
4742
|
-
|
|
4819
|
+
"aria-label": ariaLabel,
|
|
4820
|
+
onPointerDown: (e) => {
|
|
4821
|
+
pressedOverlayRef.current = e.target === e.currentTarget;
|
|
4822
|
+
},
|
|
4823
|
+
onClick: (e) => {
|
|
4824
|
+
if (!closeOnOverlay) return;
|
|
4825
|
+
if (e.target !== e.currentTarget) return;
|
|
4826
|
+
if (!pressedOverlayRef.current) return;
|
|
4827
|
+
onClose?.();
|
|
4828
|
+
},
|
|
4743
4829
|
children: /* @__PURE__ */ jsxs(
|
|
4744
4830
|
animated.div,
|
|
4745
4831
|
{
|
|
@@ -4747,8 +4833,6 @@ var Drawer = ({
|
|
|
4747
4833
|
...props,
|
|
4748
4834
|
className: cn("drawer_panel", className),
|
|
4749
4835
|
style: { ...props.style, ...panelStyle, ...panelSizeStyle },
|
|
4750
|
-
role: "document",
|
|
4751
|
-
onClick: (e) => e.stopPropagation(),
|
|
4752
4836
|
onKeyDown: (e) => {
|
|
4753
4837
|
if (e.key !== "Escape") e.stopPropagation();
|
|
4754
4838
|
},
|
|
@@ -4764,7 +4848,10 @@ var Drawer = ({
|
|
|
4764
4848
|
}
|
|
4765
4849
|
),
|
|
4766
4850
|
title && /* @__PURE__ */ jsx("div", { className: "drawer_header", children: /* @__PURE__ */ jsx("h2", { id: titleId, className: "drawer_title", children: title }) }),
|
|
4767
|
-
children &&
|
|
4851
|
+
children && // 본문이 스크롤 컨테이너라 키보드로도 스크롤할 수 있어야 한다(axe
|
|
4852
|
+
// `scrollable-region-focusable`). 다만 초기 포커스 대상에서는 제외한다 - 안쪽에
|
|
4853
|
+
// 첫 입력이 있는데 빈 wrapper 에 포커스가 놓이면 열자마자 어디에 있는지 알 수 없다.
|
|
4854
|
+
/* @__PURE__ */ jsx("div", { className: "drawer_body", tabIndex: 0, "data-focus-trap-skip-autofocus": "", children }),
|
|
4768
4855
|
footer && /* @__PURE__ */ jsx("div", { className: "drawer_footer", children: footer })
|
|
4769
4856
|
]
|
|
4770
4857
|
}
|
|
@@ -4789,9 +4876,11 @@ var Modal = ({
|
|
|
4789
4876
|
children,
|
|
4790
4877
|
className,
|
|
4791
4878
|
ariaLabel,
|
|
4879
|
+
onExited,
|
|
4792
4880
|
...props
|
|
4793
4881
|
}) => {
|
|
4794
4882
|
const panelRef = React16.useRef(null);
|
|
4883
|
+
const pressedOverlayRef = React16.useRef(false);
|
|
4795
4884
|
const titleId = React16.useId();
|
|
4796
4885
|
const [shouldRender, setShouldRender] = React16.useState(open);
|
|
4797
4886
|
const isMounted = useIsMounted();
|
|
@@ -4804,7 +4893,9 @@ var Modal = ({
|
|
|
4804
4893
|
immediate: reduced,
|
|
4805
4894
|
config: { tension: 280, friction: 28, clamp: !open },
|
|
4806
4895
|
onRest: (result) => {
|
|
4807
|
-
if (
|
|
4896
|
+
if (open || !result.finished) return;
|
|
4897
|
+
setShouldRender(false);
|
|
4898
|
+
onExited?.();
|
|
4808
4899
|
}
|
|
4809
4900
|
});
|
|
4810
4901
|
const panelStyle = useSpring({
|
|
@@ -4830,8 +4921,16 @@ var Modal = ({
|
|
|
4830
4921
|
role: "dialog",
|
|
4831
4922
|
"aria-modal": "true",
|
|
4832
4923
|
"aria-labelledby": hasTitle && !ariaLabel ? titleId : void 0,
|
|
4833
|
-
"aria-label":
|
|
4834
|
-
|
|
4924
|
+
"aria-label": ariaLabel,
|
|
4925
|
+
onPointerDown: (e) => {
|
|
4926
|
+
pressedOverlayRef.current = e.target === e.currentTarget;
|
|
4927
|
+
},
|
|
4928
|
+
onClick: (e) => {
|
|
4929
|
+
if (!closeOnOverlay) return;
|
|
4930
|
+
if (e.target !== e.currentTarget) return;
|
|
4931
|
+
if (!pressedOverlayRef.current) return;
|
|
4932
|
+
onClose?.();
|
|
4933
|
+
},
|
|
4835
4934
|
children: /* @__PURE__ */ jsxs(
|
|
4836
4935
|
animated.div,
|
|
4837
4936
|
{
|
|
@@ -4839,25 +4938,20 @@ var Modal = ({
|
|
|
4839
4938
|
...props,
|
|
4840
4939
|
className: cn("modal_panel", className),
|
|
4841
4940
|
style: { ...props.style, ...panelStyle, width },
|
|
4842
|
-
role: "document",
|
|
4843
|
-
onClick: (e) => e.stopPropagation(),
|
|
4844
4941
|
onKeyDown: (e) => {
|
|
4845
4942
|
if (e.key !== "Escape") e.stopPropagation();
|
|
4846
4943
|
},
|
|
4847
4944
|
children: [
|
|
4848
|
-
showCloseIcon && onClose && /* @__PURE__ */ jsx(
|
|
4849
|
-
"button",
|
|
4850
|
-
{
|
|
4851
|
-
type: "button",
|
|
4852
|
-
className: "modal_close",
|
|
4853
|
-
onClick: onClose,
|
|
4854
|
-
"aria-label": closeLabel,
|
|
4855
|
-
children: /* @__PURE__ */ jsx(X, { size: iconSize.md, "aria-hidden": "true" })
|
|
4856
|
-
}
|
|
4857
|
-
),
|
|
4945
|
+
showCloseIcon && onClose && /* @__PURE__ */ jsx("button", { type: "button", className: "modal_close", onClick: onClose, "aria-label": closeLabel, children: /* @__PURE__ */ jsx(X, { size: iconSize.md, "aria-hidden": "true" }) }),
|
|
4858
4946
|
title && /* @__PURE__ */ jsx("h2", { id: titleId, className: "modal_title", children: title }),
|
|
4859
4947
|
description && /* @__PURE__ */ jsx("div", { className: "modal_description", children: description }),
|
|
4860
|
-
children &&
|
|
4948
|
+
children && // 본문이 스크롤 컨테이너라 키보드로도 스크롤할 수 있어야 한다(axe
|
|
4949
|
+
// `scrollable-region-focusable`). 넘치는지 여부를 측정해 조건부로 주는 방법도 있지만
|
|
4950
|
+
// ResizeObserver 를 들일 만큼의 이득이 없고, 포커스 트랩 안에서 탭 정지 하나가
|
|
4951
|
+
// 늘어나는 정도의 비용이다.
|
|
4952
|
+
// 다만 초기 포커스 대상에서는 제외한다 - 안쪽에 첫 입력이 있는데 빈 wrapper 에
|
|
4953
|
+
// 포커스가 놓이면 열자마자 어디에 있는지 알 수 없다.
|
|
4954
|
+
/* @__PURE__ */ jsx("div", { className: "modal_body", tabIndex: 0, "data-focus-trap-skip-autofocus": "", children }),
|
|
4861
4955
|
footer && /* @__PURE__ */ jsx("div", { className: cn("modal_footer", `modal_footer_${footerAlign}`), children: footer })
|
|
4862
4956
|
]
|
|
4863
4957
|
}
|
|
@@ -5044,4 +5138,4 @@ var Stack = ({
|
|
|
5044
5138
|
);
|
|
5045
5139
|
};
|
|
5046
5140
|
|
|
5047
|
-
export { Accordion, AlertProvider, Avatar, Badge, BottomNav, BottomNavItem, BottomNavSpacer, Breadcrumb, Button, Card, Checkbox, Chip, Container, DatePicker, Divider, Drawer, Dropdown, EmptyState, ErrorState, FileInput, Grid, Hero, Icon, IconButton, ImageCropper, LinearProgress, ListItem, MediaCard, Menu, Modal, NavBar, NavLink, OtpInput, Pagination, Popover, Radio, RadioGroup, Section, Sidebar, SidebarItem, SidebarSection, Skeleton, Spinner, Stack, Tab, TabList, TabPanel, Table, Tabs, TextField, Textarea, ThemeProvider, ToastProvider, Toggle, Tooltip, TopLoading, a11y, baseBorderWidth, baseColors, baseTypography, borderWidth, breakpoints, cn, colors, elevation, iconSize, motion, opacity, radius, skeleton, spacing, typography, useAlert, useFocusTrap, useRadioGroupContext, useReducedMotion, useSpringHover, useSpringPresence, useTheme, useToast, zIndex };
|
|
5141
|
+
export { Accordion, AlertProvider, Avatar, Badge, BottomNav, BottomNavItem, BottomNavSpacer, Breadcrumb, Button, Card, Checkbox, Chip, Container, DatePicker, Divider, Drawer, Dropdown, EmptyState, ErrorState, FileInput, Grid, Hero, Icon, IconButton, ImageCropper, LinearProgress, ListItem, MediaCard, Menu, Modal, NavBar, NavLink, OtpInput, Pagination, Popover, Prose, Radio, RadioGroup, Section, Sidebar, SidebarItem, SidebarSection, Skeleton, Spinner, Stack, Tab, TabList, TabPanel, Table, Tabs, TextField, Textarea, ThemeProvider, ToastProvider, Toggle, Tooltip, TopLoading, a11y, baseBorderWidth, baseColors, baseTypography, borderWidth, breakpoints, cn, colors, elevation, iconSize, motion, opacity, radius, skeleton, spacing, typography, useAlert, useFocusTrap, useRadioGroupContext, useReducedMotion, useSpringHover, useSpringPresence, useTheme, useToast, zIndex };
|
|
@@ -12,7 +12,9 @@ $focus_ring_success: var(--bt-focus-ring-success);
|
|
|
12
12
|
// WCAG 2.1 SC 2.5.5 권장 최소: 44×44
|
|
13
13
|
|
|
14
14
|
$tap_min_size: 44px; // a11y 최소 권장
|
|
15
|
-
$tap_target_dense: 32px; // 데스크탑 인라인 폼, 컴팩트 UI
|
|
15
|
+
$tap_target_dense: 32px; // 데스크탑 인라인 폼, 컴팩트 UI. 인터랙티브 컨트롤의 하한이다
|
|
16
|
+
// - 터치 입력이 있는 화면에서는 responsive_height 로 승급할 것
|
|
17
|
+
// - 예외: 마우스 전용 내부 도구(admin 등)는 28px 까지 허용
|
|
16
18
|
$tap_target_compact: 40px; // 데스크탑 기본
|
|
17
19
|
$tap_target_comfortable: 48px; // 모바일/터치 기본 (44 초과)
|
|
18
20
|
$tap_target_spacious: 56px; // 강조 CTA, 풀스크린 액션
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
@use "sass:list";
|
|
2
|
+
@use "../colors" as colors;
|
|
3
|
+
|
|
1
4
|
// ── Base border-width ────────────────────────────────────────────────────────
|
|
2
5
|
|
|
3
6
|
$border_width_0: 0px;
|
|
@@ -10,3 +13,29 @@ $border_width_none: $border_width_0;
|
|
|
10
13
|
$border_width_standard: $border_width_1;
|
|
11
14
|
$border_width_thick: $border_width_2;
|
|
12
15
|
$border_width_indicator: $border_width_2;
|
|
16
|
+
|
|
17
|
+
// ── Hairline mixin ───────────────────────────────────────────────────────────
|
|
18
|
+
//
|
|
19
|
+
// 1px 경계선용 단축. `border: $border_width_standard solid $color_border_default` 는
|
|
20
|
+
// `border: 1px solid #E5E5E5` 보다 길어서, 실측상 소비 앱 SCSS 에 `1px` 하드코딩이
|
|
21
|
+
// 232 건 남아 있었다. 짧게 쓸 수 있어야 실제로 토큰을 쓴다.
|
|
22
|
+
//
|
|
23
|
+
// @example
|
|
24
|
+
// ```scss
|
|
25
|
+
// .card { @include token.hairline; } // 사방
|
|
26
|
+
// .header { @include token.hairline(bottom); } // 한 면
|
|
27
|
+
// .active { @include token.hairline(left, token.$color_border_hover); }
|
|
28
|
+
// ```
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@mixin hairline($side: all, $color: colors.$color_border_default) {
|
|
32
|
+
@if $side == all {
|
|
33
|
+
border: $border_width_standard solid $color;
|
|
34
|
+
} @else if list.index(top right bottom left, $side) {
|
|
35
|
+
border-#{$side}: $border_width_standard solid $color;
|
|
36
|
+
} @else {
|
|
37
|
+
// 검증이 없으면 `hairline(letf)` 같은 오타가 컴파일을 통과해 `border-letf` 라는
|
|
38
|
+
// 무효 속성을 조용히 만든다. 소비 앱에 권장하는 공개 API 라 여기서 끊는다.
|
|
39
|
+
@error "token.hairline: $side 는 all · top · right · bottom · left 중 하나여야 합니다 (받은 값: #{$side})";
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -145,8 +145,37 @@ $letter_spacing_tight: 0.32px;
|
|
|
145
145
|
white-space: nowrap;
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
+
// 한글 줄바꿈. `word-break: break-word` 는 어절 중간에서 끊어 "안녕하세 / 요" 를 만든다.
|
|
149
|
+
// 표준값이 아니고, 명세상 `word-break: normal` + `overflow-wrap: anywhere` 와 같게 동작한다.
|
|
150
|
+
// keep-all 이 어절을 지키고, 끊을 수 없는 긴 영문·URL 만 overflow-wrap 이 처리한다.
|
|
151
|
+
// 텍스트를 줄바꿈하는 모든 컴포넌트는 이 믹스인을 쓴다 (Button·Toast·Tooltip).
|
|
152
|
+
//
|
|
153
|
+
// `break-word` 가 아니라 `anywhere` 를 쓴다. 눈에 보이는 줄바꿈 지점은 둘이 완전히 같지만
|
|
154
|
+
// (120·60px 폭에서 한글·혼합 문자열 실측 결과 동일), min-content 폭이 다르다 —
|
|
155
|
+
// break-word 는 최장 단어(122px), anywhere 는 한 글자(13px). flex item 의 기본
|
|
156
|
+
// min-width: auto 는 min-content 아래로 줄지 못하므로 break-word 면 좁은 컨테이너를 넘친다
|
|
157
|
+
// (실측: 120px 컨테이너에서 98px 초과). anywhere 는 min-width: 0 없이도 넘치지 않고,
|
|
158
|
+
// 텍스트가 inline-flex 의 직접 자식인 vanilla `.bt-button` 처럼 익명 flex item 이라
|
|
159
|
+
// min-width 를 줄 선택자조차 없는 경우까지 함께 해결한다.
|
|
160
|
+
@mixin wrap_keep_all {
|
|
161
|
+
overflow-wrap: anywhere;
|
|
162
|
+
word-break: keep-all;
|
|
163
|
+
}
|
|
164
|
+
|
|
148
165
|
// ── Numeric (v3.1) ────────────────────────────────────────────────────────
|
|
149
166
|
// 매출/지표 표시할 때 숫자 자릿수 정렬.
|
|
150
167
|
|
|
151
168
|
@mixin tabular_nums { font-variant-numeric: tabular-nums; }
|
|
152
169
|
@mixin slashed_zero { font-variant-numeric: slashed-zero; }
|
|
170
|
+
|
|
171
|
+
// ── Legibility ────────────────────────────────────────────────────────────
|
|
172
|
+
// Pretendard 기본 글자꼴은 l · I · 1 이 거의 같고 0 과 O 도 헷갈린다. 사용자가 한 글자씩
|
|
173
|
+
// 옮겨 적는 값(아이디·인증코드·시리얼·사업자번호)에서 오탈자를 만든다.
|
|
174
|
+
// cv05 = l 에 꼬리, cv08 = I 에 세리프. Pretendard 가 아닌 폴백 폰트는 두 feature 를
|
|
175
|
+
// 그냥 무시하므로 안전하다.
|
|
176
|
+
// 주의: slashed-zero 를 포함하므로 tabular_nums / slashed_zero 와 같은 선택자에서
|
|
177
|
+
// 겹쳐 쓰면 안 된다 - 셋 다 font-variant-numeric 이라 뒤에 온 것만 남는다.
|
|
178
|
+
@mixin legible_identifiers {
|
|
179
|
+
font-feature-settings: "cv05" 1, "cv08" 1;
|
|
180
|
+
font-variant-numeric: slashed-zero;
|
|
181
|
+
}
|
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @license Bigtablet Inc. Open Source License - see LICENSE at the repo root
|
|
6
6
|
* (https://github.com/Bigtablet/.github/blob/main/BIGTABLET_LICENSE.md)
|
|
7
|
-
*/@keyframes skeleton_loading{0%{background-position:100% 0}100%{background-position:0 0}}:root{--bt-color-brand-primary: #121212;--bt-color-brand-on-primary: #FFFFFF;--bt-color-brand-primary-container: rgba(0, 0, 0, 0.05);--bt-color-text-heading: #121212;--bt-color-text-body: #666666;--bt-color-text-caption: #6F6F6F;--bt-color-text-brand: #121212;--bt-color-text-inverse: #FFFFFF;--bt-color-text-disabled: rgba(26, 26, 26, 0.38);--bt-color-bg-solid: #FFFFFF;--bt-color-bg-solid-dim: #F4F4F4;--bt-color-bg-additive: rgba(0, 0, 0, 0.05);--bt-color-bg-disabled: rgba(26, 26, 26, 0.12);--bt-color-bg-overlay: rgba(0, 0, 0, 0.5);--bt-color-bg-inverse-surface: #333333;--bt-color-state-hover-on-light: rgba(0, 0, 0, 0.05);--bt-color-state-pressed-on-light: rgba(26, 26, 26, 0.12);--bt-color-state-focus-on-light: rgba(0, 0, 0, 0.08);--bt-color-state-hover-on-dark: rgba(255, 255, 255, 0.05);--bt-color-state-pressed-on-dark: rgba(255, 255, 255, 0.12);--bt-color-state-focus-on-dark: rgba(255, 255, 255, 0.08);--bt-color-border-default: #E5E5E5;--bt-color-border-hover: #B3B3B3;--bt-color-border-subtle: rgba(0, 0, 0, 0.08);--bt-color-border-focus: #121212;--bt-color-border-disabled: #F2F2F2;--bt-color-status-error: #B91C1C;--bt-color-status-success: #047857;--bt-color-status-warning: #B45309;--bt-color-status-info: #1D4ED8;--bt-color-status-error-on-default: #FFFFFF;--bt-color-status-success-on-default: #FFFFFF;--bt-color-status-warning-on-default: #FFFFFF;--bt-color-status-info-on-default: #FFFFFF;--bt-color-status-error-container: #FEE2E2;--bt-color-status-success-container: #DCFCE7;--bt-color-status-warning-container: #FEF3C7;--bt-color-status-info-container: #DBEAFE;--bt-color-status-error-on-container: #B91C1C;--bt-color-status-success-on-container: #047857;--bt-color-status-warning-on-container: #B45309;--bt-color-status-info-on-container: #1D4ED8;--bt-color-status-error-on-surface: #B91C1C;--bt-color-status-success-on-surface: #047857;--bt-color-status-warning-on-surface: #B45309;--bt-color-status-info-on-surface: #1D4ED8;--bt-color-accent-subtle: rgba(0, 0, 0, 0.05);--bt-color-accent-muted: rgba(26, 26, 26, 0.12);--bt-color-accent-light: #B3B3B3;--bt-color-accent-default: #121212;--bt-color-accent-strong: #121212;--bt-color-accent-on-surface: #FFFFFF;--bt-color-skeleton-base: #F3F3F3;--bt-color-skeleton-wave: #F0F0F0;--bt-color-skeleton-highlight: #FAFAFA;--bt-focus-ring: 0 0 0 3px rgba(0, 0, 0, 0.15);--bt-focus-ring-error: 0 0 0 3px rgba(239, 68, 68, 0.30);--bt-focus-ring-success: 0 0 0 3px rgba(16, 185, 129, 0.30);--bt-elevation-level1: 0 1px 1px -1px rgba(0, 0, 0, 0.20), 0 3px 3px 0px rgba(0, 0, 0, 0.12);--bt-elevation-level2: 0 2px 2px -2px rgba(0, 0, 0, 0.20), 0 6px 6px 0px rgba(0, 0, 0, 0.12);--bt-elevation-level3: 0 3px 3px -3px rgba(0, 0, 0, 0.20), 0 9px 9px 0px rgba(0, 0, 0, 0.12);--bt-elevation-level4: 0 5px 5px -5px rgba(0, 0, 0, 0.20), 0 15px 15px 0px rgba(0, 0, 0, 0.12);--bt-elevation-level5: 0 8px 10px -5px rgba(0, 0, 0, 0.20), 0 20px 20px 0px rgba(0, 0, 0, 0.12)}:root{--bt-scrollbar-width: 0px}[data-theme=dark]{color-scheme:dark;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--bt-color-text-heading: rgba(255, 255, 255, 0.95);--bt-color-text-body: #B3B3B3;--bt-color-text-caption: #808080;--bt-color-text-inverse: #121212;--bt-color-text-disabled: rgba(255, 255, 255, 0.38);--bt-color-bg-solid: #0A0A0A;--bt-color-bg-solid-dim: #141414;--bt-color-bg-additive: rgba(255, 255, 255, 0.05);--bt-color-bg-disabled: rgba(255, 255, 255, 0.12);--bt-color-bg-overlay: rgba(0, 0, 0, 0.7);--bt-color-bg-inverse-surface: #F4F4F4;--bt-color-state-hover-on-light: rgba(255, 255, 255, 0.08);--bt-color-state-pressed-on-light: rgba(255, 255, 255, 0.12);--bt-color-state-focus-on-light: rgba(255, 255, 255, 0.12);--bt-color-state-hover-on-dark: rgba(0, 0, 0, 0.08);--bt-color-state-pressed-on-dark: rgba(26, 26, 26, 0.12);--bt-color-state-focus-on-dark: rgba(26, 26, 26, 0.12);--bt-color-border-default: #333333;--bt-color-border-hover: #777777;--bt-color-border-subtle: rgba(255, 255, 255, 0.12);--bt-color-border-focus: #FFFFFF;--bt-color-border-disabled: #141414;--bt-color-brand-primary-container: rgba(255, 255, 255, 0.08);--bt-color-accent-subtle: rgba(255, 255, 255, 0.08);--bt-color-accent-muted: rgba(255, 255, 255, 0.12);--bt-color-accent-light: #999999;--bt-color-accent-default: #FFFFFF;--bt-color-accent-strong: #FFFFFF;--bt-color-accent-on-surface: #121212;--bt-color-status-error-container: rgba(127, 29, 29, 0.35);--bt-color-status-success-container: rgba(6, 78, 59, 0.35);--bt-color-status-warning-container: rgba(120, 53, 15, 0.35);--bt-color-status-info-container: rgba(30, 58, 138, 0.35);--bt-color-status-error-on-container: #FCA5A5;--bt-color-status-success-on-container: #86EFAC;--bt-color-status-warning-on-container: #FCD34D;--bt-color-status-info-on-container: #93C5FD;--bt-color-status-error-on-surface: #F87171;--bt-color-status-success-on-surface: #4ADE80;--bt-color-status-warning-on-surface: #FBBF24;--bt-color-status-info-on-surface: #60A5FA;--bt-color-skeleton-base: #333333;--bt-color-skeleton-wave: #333333;--bt-color-skeleton-highlight: #666666;--bt-focus-ring: 0 0 0 3px rgba(255, 255, 255, 0.35);--bt-focus-ring-error: 0 0 0 3px rgba(239, 68, 68, 0.45);--bt-focus-ring-success: 0 0 0 3px rgba(16, 185, 129, 0.45);--bt-elevation-level1: 0 1px 2px 0 rgba(0, 0, 0, 0.45), 0 3px 6px 0 rgba(0, 0, 0, 0.30);--bt-elevation-level2: 0 2px 4px 0 rgba(0, 0, 0, 0.45), 0 6px 12px 0 rgba(0, 0, 0, 0.30);--bt-elevation-level3: 0 3px 6px 0 rgba(0, 0, 0, 0.50), 0 9px 18px 0 rgba(0, 0, 0, 0.35);--bt-elevation-level4: 0 5px 10px 0 rgba(0, 0, 0, 0.55), 0 15px 30px 0 rgba(0, 0, 0, 0.40);--bt-elevation-level5: 0 8px 16px 0 rgba(0, 0, 0, 0.60), 0 20px 40px 0 rgba(0, 0, 0, 0.45)}@media(prefers-color-scheme: dark){:root:not([data-theme]){color-scheme:dark;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--bt-color-text-heading: rgba(255, 255, 255, 0.95);--bt-color-text-body: #B3B3B3;--bt-color-text-caption: #808080;--bt-color-text-inverse: #121212;--bt-color-text-disabled: rgba(255, 255, 255, 0.38);--bt-color-bg-solid: #0A0A0A;--bt-color-bg-solid-dim: #141414;--bt-color-bg-additive: rgba(255, 255, 255, 0.05);--bt-color-bg-disabled: rgba(255, 255, 255, 0.12);--bt-color-bg-overlay: rgba(0, 0, 0, 0.7);--bt-color-bg-inverse-surface: #F4F4F4;--bt-color-state-hover-on-light: rgba(255, 255, 255, 0.08);--bt-color-state-pressed-on-light: rgba(255, 255, 255, 0.12);--bt-color-state-focus-on-light: rgba(255, 255, 255, 0.12);--bt-color-state-hover-on-dark: rgba(0, 0, 0, 0.08);--bt-color-state-pressed-on-dark: rgba(26, 26, 26, 0.12);--bt-color-state-focus-on-dark: rgba(26, 26, 26, 0.12);--bt-color-border-default: #333333;--bt-color-border-hover: #777777;--bt-color-border-subtle: rgba(255, 255, 255, 0.12);--bt-color-border-focus: #FFFFFF;--bt-color-border-disabled: #141414;--bt-color-brand-primary-container: rgba(255, 255, 255, 0.08);--bt-color-accent-subtle: rgba(255, 255, 255, 0.08);--bt-color-accent-muted: rgba(255, 255, 255, 0.12);--bt-color-accent-light: #999999;--bt-color-accent-default: #FFFFFF;--bt-color-accent-strong: #FFFFFF;--bt-color-accent-on-surface: #121212;--bt-color-status-error-container: rgba(127, 29, 29, 0.35);--bt-color-status-success-container: rgba(6, 78, 59, 0.35);--bt-color-status-warning-container: rgba(120, 53, 15, 0.35);--bt-color-status-info-container: rgba(30, 58, 138, 0.35);--bt-color-status-error-on-container: #FCA5A5;--bt-color-status-success-on-container: #86EFAC;--bt-color-status-warning-on-container: #FCD34D;--bt-color-status-info-on-container: #93C5FD;--bt-color-status-error-on-surface: #F87171;--bt-color-status-success-on-surface: #4ADE80;--bt-color-status-warning-on-surface: #FBBF24;--bt-color-status-info-on-surface: #60A5FA;--bt-color-skeleton-base: #333333;--bt-color-skeleton-wave: #333333;--bt-color-skeleton-highlight: #666666;--bt-focus-ring: 0 0 0 3px rgba(255, 255, 255, 0.35);--bt-focus-ring-error: 0 0 0 3px rgba(239, 68, 68, 0.45);--bt-focus-ring-success: 0 0 0 3px rgba(16, 185, 129, 0.45);--bt-elevation-level1: 0 1px 2px 0 rgba(0, 0, 0, 0.45), 0 3px 6px 0 rgba(0, 0, 0, 0.30);--bt-elevation-level2: 0 2px 4px 0 rgba(0, 0, 0, 0.45), 0 6px 12px 0 rgba(0, 0, 0, 0.30);--bt-elevation-level3: 0 3px 6px 0 rgba(0, 0, 0, 0.50), 0 9px 18px 0 rgba(0, 0, 0, 0.35);--bt-elevation-level4: 0 5px 10px 0 rgba(0, 0, 0, 0.55), 0 15px 30px 0 rgba(0, 0, 0, 0.40);--bt-elevation-level5: 0 8px 16px 0 rgba(0, 0, 0, 0.60), 0 20px 40px 0 rgba(0, 0, 0, 0.45)}}:root{--bt-color-primary: var(--bt-color-brand-primary);--bt-color-on-primary: var(--bt-color-brand-on-primary);--bt-color-accent: var(--bt-color-accent-default);--bt-color-primary-container: var(--bt-color-brand-primary-container);--bt-color-background: var(--bt-color-bg-solid);--bt-color-background-dim: var(--bt-color-bg-solid-dim);--bt-color-background-overlay: var(--bt-color-bg-overlay);--bt-color-border: var(--bt-color-border-default);--bt-color-text-primary: var(--bt-color-text-heading);--bt-color-text-secondary: var(--bt-color-text-body);--bt-color-text-tertiary: var(--bt-color-text-caption);--bt-color-background-secondary: var(--bt-color-background-dim);--bt-color-border-light: var(--bt-color-border-hover);--bt-color-hover: var(--bt-color-state-hover-on-light);--bt-color-hover-on-dark: var(--bt-color-state-hover-on-dark);--bt-color-pressed: var(--bt-color-state-pressed-on-light);--bt-color-primary-hover: #333333;--bt-color-overlay: var(--bt-color-bg-overlay);--bt-color-success: var(--bt-color-status-success);--bt-color-error: var(--bt-color-status-error);--bt-color-warning: var(--bt-color-status-warning);--bt-color-info: var(--bt-color-status-info);--bt-spacing-4: 4px;--bt-spacing-8: 8px;--bt-spacing-12: 12px;--bt-spacing-16: 16px;--bt-spacing-20: 20px;--bt-spacing-24: 24px;--bt-spacing-32: 32px;--bt-spacing-40: 40px;--bt-spacing-48: 48px;--bt-spacing-xs: var(--bt-spacing-4);--bt-spacing-sm: var(--bt-spacing-8);--bt-spacing-md: var(--bt-spacing-12);--bt-spacing-lg: var(--bt-spacing-16);--bt-spacing-xl: var(--bt-spacing-20);--bt-spacing-2xl: var(--bt-spacing-24);--bt-spacing-3xl: var(--bt-spacing-32);--bt-font-family: Pretendard, sans-serif;--bt-font-size-12: 12px;--bt-font-size-14: 14px;--bt-font-size-15: 15px;--bt-font-size-16: 16px;--bt-font-size-18: 18px;--bt-font-size-20: 20px;--bt-font-weight-regular: 400;--bt-font-weight-medium: 500;--bt-font-weight-semibold: 600;--bt-line-height-20: 20px;--bt-line-height-24: 24px;--bt-font-size-sm: var(--bt-font-size-14);--bt-font-size-base: var(--bt-font-size-15);--bt-font-size-md: var(--bt-font-size-16);--bt-font-size-lg: var(--bt-font-size-18);--bt-font-size-xl: var(--bt-font-size-20);--bt-line-height-normal: 1.5;--bt-radius-none: 0px;--bt-radius-xs: 4px;--bt-radius-sm: 6px;--bt-radius-md: 8px;--bt-radius-lg: 12px;--bt-radius-xl: 16px;--bt-radius-full: 9999px;--bt-elevation-1: var(--bt-elevation-level1);--bt-elevation-2: var(--bt-elevation-level2);--bt-elevation-3: var(--bt-elevation-level3);--bt-elevation-4: var(--bt-elevation-level4);--bt-elevation-5: var(--bt-elevation-level5);--bt-transition-fast: 0.1s ease-in-out;--bt-transition-base: 0.2s ease-in-out;--bt-transition-slow: 0.3s ease-in-out;--bt-z-modal: 1000;--bt-z-toast: 1000}.bt-button{display:inline-flex;align-items:center;justify-content:center;gap:var(--bt-spacing-sm);border-radius:var(--bt-radius-full);border:none;cursor:pointer;font-family:var(--bt-font-family);font-weight:var(--bt-font-weight-medium);transition:background var(--bt-transition-base),color var(--bt-transition-base),box-shadow var(--bt-transition-base),transform var(--bt-transition-base)}.bt-button:disabled{cursor:not-allowed;opacity:.6}.bt-button--sm{padding:var(--bt-spacing-sm) var(--bt-spacing-lg);font-size:var(--bt-font-size-sm)}.bt-button--md{padding:var(--bt-spacing-md) var(--bt-spacing-xl);font-size:var(--bt-font-size-base)}.bt-button--lg{padding:var(--bt-spacing-lg) var(--bt-spacing-2xl);font-size:var(--bt-font-size-md)}.bt-button--xl{padding:var(--bt-spacing-xl) var(--bt-spacing-3xl);font-size:var(--bt-font-size-lg)}.bt-button--filled{background:var(--bt-color-accent);color:var(--bt-color-accent-on-surface)}.bt-button--filled:hover:not(:disabled){background:color-mix(in srgb, var(--bt-color-accent) 88%, var(--bt-color-accent-on-surface))}.bt-button--filled:active:not(:disabled){transform:scale(0.98)}.bt-button--tonal{background:var(--bt-color-primary-container);color:var(--bt-color-text-primary)}.bt-button--tonal:hover:not(:disabled){background-image:linear-gradient(var(--bt-color-hover), var(--bt-color-hover))}.bt-button--tonal:active:not(:disabled){background-image:linear-gradient(var(--bt-color-pressed), var(--bt-color-pressed));transform:scale(0.98)}.bt-button--outline{background:rgba(0,0,0,0);border:1px solid var(--bt-color-border);color:var(--bt-color-text-primary)}.bt-button--outline:hover:not(:disabled){background:var(--bt-color-background-secondary)}.bt-button--outline:active:not(:disabled){transform:scale(0.98)}.bt-button--text{background:rgba(0,0,0,0);color:var(--bt-color-text-primary)}.bt-button--text:hover:not(:disabled){background:var(--bt-color-hover)}.bt-button--text:active:not(:disabled){transform:scale(0.96)}.bt-button--danger{background:var(--bt-color-error);color:var(--bt-color-on-primary)}.bt-button--danger:hover:not(:disabled){background:color-mix(in srgb, var(--bt-color-error) 88%, #000)}.bt-button--danger:active:not(:disabled){transform:scale(0.98)}.bt-button--radius-none{border-radius:var(--bt-radius-none)}.bt-button--radius-xs{border-radius:var(--bt-radius-xs)}.bt-button--radius-sm{border-radius:var(--bt-radius-sm)}.bt-button--radius-md{border-radius:var(--bt-radius-md)}.bt-button--radius-lg{border-radius:var(--bt-radius-lg)}.bt-button--radius-xl{border-radius:var(--bt-radius-xl)}.bt-button--radius-full{border-radius:var(--bt-radius-full)}.bt-button--full-width{width:100%}.bt-button--danger.bt-button--outline{background:rgba(0,0,0,0);border-color:var(--bt-color-error);color:var(--bt-color-error)}.bt-button--danger.bt-button--outline:hover:not(:disabled){background:color-mix(in srgb, var(--bt-color-error) 8%, transparent)}.bt-button--danger.bt-button--tonal{background:color-mix(in srgb, var(--bt-color-error) 12%, transparent);color:var(--bt-color-error)}.bt-button--danger.bt-button--tonal:hover:not(:disabled){background:color-mix(in srgb, var(--bt-color-error) 18%, transparent)}.bt-button--danger.bt-button--text{background:rgba(0,0,0,0);color:var(--bt-color-error)}.bt-button--danger.bt-button--text:hover:not(:disabled){background:color-mix(in srgb, var(--bt-color-error) 8%, transparent)}.bt-text-field{display:flex;flex-direction:column}.bt-text-field--full-width{width:100%}.bt-text-field__label{margin-bottom:var(--bt-spacing-xs);color:var(--bt-color-text-primary);font-size:var(--bt-font-size-sm);font-weight:var(--bt-font-weight-medium);line-height:var(--bt-line-height-normal)}.bt-text-field__wrap{position:relative;display:inline-flex;width:100%;align-items:center}.bt-text-field__input{width:100%;border-radius:var(--bt-radius-md);font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal);color:var(--bt-color-text-primary);background:var(--bt-color-background);transition:border-color var(--bt-transition-base),box-shadow var(--bt-transition-base),background var(--bt-transition-base)}.bt-text-field__input::placeholder{color:var(--bt-color-text-tertiary)}.bt-text-field__input:disabled{cursor:not-allowed;background:var(--bt-color-background-secondary);color:var(--bt-color-text-tertiary);opacity:.7}.bt-text-field__input--outline{border:1px solid var(--bt-color-border)}.bt-text-field__input--outline:hover:not(:disabled){border-color:var(--bt-color-border-light)}.bt-text-field__input--outline:focus-visible{outline:none;border-color:var(--bt-color-accent);box-shadow:0 0 0 3px var(--bt-color-border-light)}.bt-text-field__input--filled{background:var(--bt-color-background-secondary);border:1px solid rgba(0,0,0,0)}.bt-text-field__input--filled:focus-visible{outline:none;border-color:var(--bt-color-accent);background:var(--bt-color-background);box-shadow:0 0 0 3px var(--bt-color-border-light)}.bt-text-field__input--sm{padding:var(--bt-spacing-sm) var(--bt-spacing-lg);font-size:var(--bt-font-size-sm)}.bt-text-field__input--md{padding:var(--bt-spacing-md) var(--bt-spacing-xl);font-size:var(--bt-font-size-base)}.bt-text-field__input--lg{padding:var(--bt-spacing-lg) var(--bt-spacing-2xl);font-size:var(--bt-font-size-md)}.bt-text-field__input--error{border-color:var(--bt-color-error) !important;box-shadow:0 0 0 3px rgba(239,68,68,.15) !important}.bt-text-field__input--success{border-color:var(--bt-color-success) !important;box-shadow:0 0 0 3px rgba(16,185,129,.15) !important}.bt-text-field__helper{margin-top:var(--bt-spacing-xs);font-size:var(--bt-font-size-sm);color:var(--bt-color-text-secondary)}.bt-text-field__helper--error{color:var(--bt-color-error)}.bt-text-field__helper--success{color:var(--bt-color-success)}.bt-text-field__icon{position:absolute;display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;color:var(--bt-color-text-secondary)}.bt-text-field__icon--left{left:var(--bt-spacing-md)}.bt-text-field__icon--right{right:var(--bt-spacing-md)}.bt-checkbox{display:inline-flex;align-items:center;gap:var(--bt-spacing-sm);cursor:pointer;user-select:none;position:relative}.bt-checkbox__input{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.bt-checkbox__box{width:1.125rem;height:1.125rem;box-sizing:border-box;border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-sm);background:var(--bt-color-background);transition:background var(--bt-transition-base),border-color var(--bt-transition-base),box-shadow var(--bt-transition-base);display:inline-block;position:relative}.bt-checkbox__label{font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal);color:var(--bt-color-text-primary)}.bt-checkbox--sm .bt-checkbox__box{width:1rem;height:1rem}.bt-checkbox--sm .bt-checkbox__label{font-size:var(--bt-font-size-sm)}.bt-checkbox--lg .bt-checkbox__box{width:1.25rem;height:1.25rem}.bt-checkbox--lg .bt-checkbox__label{font-size:var(--bt-font-size-md)}.bt-checkbox__input:focus-visible+.bt-checkbox__box{box-shadow:0 0 0 3px var(--bt-color-border-light);border-color:var(--bt-color-accent)}.bt-checkbox__input:disabled+.bt-checkbox__box,.bt-checkbox__input:disabled~.bt-checkbox__label{opacity:.6;cursor:not-allowed}.bt-checkbox__input:checked+.bt-checkbox__box{background:var(--bt-color-accent);border-color:var(--bt-color-accent)}.bt-checkbox__input:checked+.bt-checkbox__box::after{content:"";position:absolute;left:50%;top:50%;width:.28rem;height:.55rem;border:2px solid var(--bt-color-accent-on-surface);border-top:0;border-left:0;transform:translate(-50%, -58%) rotate(45deg)}.bt-radio{position:relative;display:inline-flex;align-items:center;gap:var(--bt-spacing-sm);cursor:pointer;user-select:none}.bt-radio__input{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;cursor:pointer;margin:0}.bt-radio__dot{width:1.125rem;height:1.125rem;box-sizing:border-box;border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-full);background:var(--bt-color-background);transition:background var(--bt-transition-base),border-color var(--bt-transition-base),box-shadow var(--bt-transition-base);position:relative;display:inline-block}.bt-radio__label{font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal);color:var(--bt-color-text-primary)}.bt-radio--sm .bt-radio__dot{width:1rem;height:1rem}.bt-radio--sm .bt-radio__label{font-size:var(--bt-font-size-sm)}.bt-radio--lg .bt-radio__dot{width:1.25rem;height:1.25rem}.bt-radio--lg .bt-radio__label{font-size:var(--bt-font-size-md)}.bt-radio__input:focus-visible+.bt-radio__dot{box-shadow:0 0 0 3px var(--bt-color-border-light);border-color:var(--bt-color-accent)}.bt-radio__input:checked+.bt-radio__dot{border-color:var(--bt-color-accent);border-width:2px}.bt-radio__input:checked+.bt-radio__dot::after{content:"";position:absolute;left:50%;top:50%;width:60%;height:60%;transform:translate(-50%, -50%);background:var(--bt-color-accent);border-radius:9999px}.bt-radio__input:disabled+.bt-radio__dot,.bt-radio__input:disabled~.bt-radio__label{opacity:.6;cursor:not-allowed}.bt-toggle{position:relative;display:inline-flex;align-items:center;width:40px;height:24px;padding:2px;border-radius:var(--bt-radius-full);background:var(--bt-color-border-light);transition:background var(--bt-transition-base);cursor:pointer;border:none}.bt-toggle__thumb{width:12px;height:12px;background:var(--bt-color-background);border-radius:var(--bt-radius-full);transition:transform var(--bt-transition-base),width var(--bt-transition-base),height var(--bt-transition-base);transform:translateX(0)}.bt-toggle--on{background:var(--bt-color-accent)}.bt-toggle--on .bt-toggle__thumb{width:20px;height:20px;background:var(--bt-color-accent-on-surface);transform:translateX(16px)}.bt-toggle--sm{width:40px;height:24px}.bt-toggle--md{width:48px;height:28px}.bt-toggle--md .bt-toggle__thumb{width:16px;height:16px}.bt-toggle--md.bt-toggle--on .bt-toggle__thumb{width:24px;height:24px;transform:translateX(20px)}.bt-toggle:disabled{cursor:not-allowed;background:var(--bt-color-border-light)}.bt-toggle:disabled .bt-toggle__thumb{background:#fff}.bt-dropdown{position:relative;display:inline-flex;flex-direction:column;width:100%;gap:var(--bt-spacing-xs);font-family:var(--bt-font-family)}.bt-dropdown__label{font-size:var(--bt-font-size-sm);font-weight:var(--bt-font-weight-medium);line-height:var(--bt-line-height-normal);color:var(--bt-color-text-primary)}.bt-dropdown__control{width:100%;display:inline-flex;align-items:center;justify-content:space-between;gap:var(--bt-spacing-sm);cursor:pointer;color:var(--bt-color-text-primary);background:var(--bt-color-background);border-radius:var(--bt-radius-md);transition:border-color var(--bt-transition-base),box-shadow var(--bt-transition-base),background var(--bt-transition-base);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal);border:none;text-align:left}.bt-dropdown__control:disabled,.bt-dropdown__control.is-disabled{cursor:not-allowed;opacity:.7;background:var(--bt-color-background-secondary);color:var(--bt-color-text-tertiary)}.bt-dropdown__control--outline{border:1px solid var(--bt-color-border)}.bt-dropdown__control--outline:hover:not(.is-disabled){border-color:var(--bt-color-border-light)}.bt-dropdown__control--outline.is-open{border-color:var(--bt-color-accent);box-shadow:0 0 0 3px var(--bt-color-border-light)}.bt-dropdown__control--filled{background:var(--bt-color-background-secondary);border:1px solid rgba(0,0,0,0)}.bt-dropdown__control--filled.is-open{background:var(--bt-color-background);border-color:var(--bt-color-accent);box-shadow:0 0 0 3px var(--bt-color-border-light)}.bt-dropdown__control--sm{padding:var(--bt-spacing-sm) var(--bt-spacing-lg);font-size:var(--bt-font-size-sm)}.bt-dropdown__control--md{padding:var(--bt-spacing-md) var(--bt-spacing-xl);font-size:var(--bt-font-size-base)}.bt-dropdown__control--lg{padding:var(--bt-spacing-lg) var(--bt-spacing-2xl);font-size:var(--bt-font-size-md)}.bt-dropdown__value{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bt-dropdown__placeholder{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--bt-color-text-tertiary)}.bt-dropdown__icon{display:inline-flex;align-items:center;justify-content:center;color:var(--bt-color-text-secondary);transition:transform var(--bt-transition-base)}.bt-dropdown__icon.is-open{transform:rotate(180deg)}.bt-dropdown__list{display:none;position:absolute;z-index:var(--bt-z-modal);top:100%;left:0;width:100%;min-width:100%;box-sizing:border-box;margin-top:var(--bt-spacing-xs);background:var(--bt-color-background);border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-md);box-shadow:var(--bt-elevation-2);max-height:18rem;overflow-y:auto;overflow-x:hidden;padding:var(--bt-spacing-xs) 0;list-style:none;margin:var(--bt-spacing-xs) 0 0 0}.bt-dropdown__list--up{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bt-spacing-xs)}.bt-dropdown__list:has(>.bt-dropdown__options){max-height:none;overflow:hidden;padding:0}.bt-dropdown__search{display:flex;align-items:center;gap:var(--bt-spacing-sm);padding:var(--bt-spacing-sm) var(--bt-spacing-md);border-bottom:1px solid var(--bt-color-border)}.bt-dropdown__search-icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--bt-color-text-secondary)}.bt-dropdown__search-input{flex:1 1 auto;min-width:0;border:none;outline:none;background:rgba(0,0,0,0);color:var(--bt-color-text-primary);border-radius:var(--bt-radius-sm);font-family:var(--bt-font-family);font-size:var(--bt-font-size-sm);line-height:var(--bt-line-height-normal);transition:box-shadow var(--bt-transition-fast)}.bt-dropdown__search-input::placeholder{color:var(--bt-color-text-tertiary)}.bt-dropdown__search-input:focus-visible{box-shadow:0 0 0 3px var(--bt-color-border-light)}.bt-dropdown__options{max-height:18rem;overflow-y:auto;overflow-x:hidden;padding:var(--bt-spacing-xs) 0;margin:0;list-style:none}.bt-dropdown__empty{padding:var(--bt-spacing-md) var(--bt-spacing-lg);color:var(--bt-color-text-tertiary);font-family:var(--bt-font-family);font-size:var(--bt-font-size-sm);line-height:var(--bt-line-height-normal);text-align:center;list-style:none}.bt-dropdown__option{width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:flex-start;gap:var(--bt-spacing-sm);padding:var(--bt-spacing-sm) var(--bt-spacing-lg);cursor:pointer;color:var(--bt-color-text-primary);background:rgba(0,0,0,0);font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal)}.bt-dropdown__option[hidden]{display:none}.bt-dropdown__option:hover,.bt-dropdown__option.is-active{background:var(--bt-color-background-secondary)}.bt-dropdown__option.is-selected{font-weight:var(--bt-font-weight-medium)}.bt-dropdown__option.is-disabled{cursor:not-allowed;color:var(--bt-color-text-tertiary)}.bt-dropdown__option-content{flex:1 1 auto;min-width:0}.bt-dropdown__option-check{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--bt-spacing-lg);color:var(--bt-color-accent)}.bt-dropdown__option-check svg{opacity:0;transition:opacity var(--bt-transition-fast)}.bt-dropdown__option.is-selected .bt-dropdown__option-check svg{opacity:1}.bt-modal{position:fixed;top:0;right:0;bottom:0;left:0;display:none;place-items:center;background:var(--bt-color-overlay);z-index:var(--bt-z-modal)}.bt-modal.is-open{display:grid}.bt-modal__panel{position:relative;background:var(--bt-color-background);border-radius:var(--bt-radius-lg);box-shadow:var(--bt-elevation-3);max-width:calc(100% - 32px);overflow:hidden}.bt-modal__header{padding:var(--bt-spacing-lg);padding-right:calc(var(--bt-spacing-lg) + 32px);border-bottom:1px solid var(--bt-color-border);color:var(--bt-color-text-primary);font-size:var(--bt-font-size-xl);font-weight:var(--bt-font-weight-semibold);line-height:1.3}.bt-modal__close{position:absolute;top:var(--bt-spacing-md);right:var(--bt-spacing-md);width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;border:none;background:rgba(0,0,0,0);color:var(--bt-color-text-tertiary);border-radius:var(--bt-radius-md);cursor:pointer;transition:background var(--bt-transition-fast),color var(--bt-transition-fast)}.bt-modal__close:hover{background:var(--bt-color-hover);color:var(--bt-color-text-primary)}.bt-modal__close:focus-visible{outline:none;box-shadow:0 0 0 3px var(--bt-color-border-light)}.bt-modal__body{padding:var(--bt-spacing-lg)}.bt-modal__footer{padding:var(--bt-spacing-lg);border-top:1px solid var(--bt-color-border);display:flex;justify-content:flex-end;gap:var(--bt-spacing-sm)}@keyframes bt-alert-fade-in{from{opacity:0}to{opacity:1}}@keyframes bt-alert-slide-up{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.bt-alert__overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--bt-color-overlay);display:none;align-items:center;justify-content:center;z-index:var(--bt-z-modal);animation:bt-alert-fade-in var(--bt-transition-base)}.bt-alert__overlay.is-open{display:flex}.bt-alert__modal{background:var(--bt-color-background);border-radius:var(--bt-radius-lg);min-width:320px;max-width:480px;box-shadow:var(--bt-elevation-4);animation:bt-alert-slide-up var(--bt-transition-slow);overflow:hidden}.bt-alert__title{font-size:var(--bt-font-size-lg);font-weight:var(--bt-font-weight-semibold);line-height:var(--bt-line-height-normal);color:var(--bt-color-info);padding:var(--bt-spacing-md) var(--bt-spacing-xl) var(--bt-spacing-xs)}.bt-alert__message{font-size:var(--bt-font-size-base);color:var(--bt-color-text-secondary);padding:var(--bt-spacing-xl);line-height:1.75}.bt-alert__actions{display:flex;gap:var(--bt-spacing-sm);align-items:center;padding:0 var(--bt-spacing-xl) var(--bt-spacing-xl);justify-content:flex-end}.bt-alert--info .bt-alert__title{color:var(--bt-color-info)}.bt-alert--success .bt-alert__title{color:var(--bt-color-success)}.bt-alert--warning .bt-alert__title{color:var(--bt-color-warning)}.bt-alert--error .bt-alert__title{color:var(--bt-color-error)}.bt-card{background:var(--bt-color-background);border-radius:var(--bt-radius-lg);box-shadow:var(--bt-elevation-1);padding:var(--bt-spacing-lg);transition:transform var(--bt-transition-base),box-shadow var(--bt-transition-base)}.bt-card--bordered{border:1px solid var(--bt-color-border)}.bt-card--shadow-none{box-shadow:none}.bt-card--shadow-sm{box-shadow:var(--bt-elevation-1)}.bt-card--shadow-md{box-shadow:var(--bt-elevation-2)}.bt-card--shadow-lg{box-shadow:var(--bt-elevation-3)}.bt-card--p-none{padding:0}.bt-card--p-sm{padding:var(--bt-spacing-sm)}.bt-card--p-md{padding:var(--bt-spacing-lg)}.bt-card--p-lg{padding:var(--bt-spacing-2xl)}.bt-card--accent{background:var(--bt-color-accent);color:var(--bt-color-accent-on-surface)}.bt-card--accent .bt-card__title{color:var(--bt-color-accent-on-surface)}.bt-card--accent .bt-card__footer{border-top-color:var(--bt-color-hover-on-dark)}.bt-card--outlined{background:rgba(0,0,0,0);border:1px solid var(--bt-color-border);box-shadow:none}.bt-card--glass{background:rgba(0,0,0,.4);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid hsla(0,0%,100%,.08);color:var(--bt-color-on-primary)}.bt-card--glass .bt-card__title{color:var(--bt-color-on-primary)}.bt-card--glass .bt-card__footer{border-top-color:var(--bt-color-hover-on-dark)}[data-theme=dark] .bt-card--glass{background:hsla(0,0%,100%,.05);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid hsla(0,0%,100%,.1);box-shadow:0 8px 32px rgba(0,0,0,.12)}@media(prefers-color-scheme: dark){:root:not([data-theme]) .bt-card--glass{background:hsla(0,0%,100%,.05);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid hsla(0,0%,100%,.1);box-shadow:0 8px 32px rgba(0,0,0,.12)}}.bt-card--interactive{cursor:pointer}.bt-card--interactive:hover{transform:translateY(-2px);box-shadow:var(--bt-elevation-2)}.bt-card__title{font-size:var(--bt-font-size-xl);font-weight:var(--bt-font-weight-semibold);line-height:1.3;margin-top:0;margin-bottom:var(--bt-spacing-md);color:var(--bt-color-text-primary)}.bt-card__body{width:100%}.bt-card__footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--bt-spacing-sm);margin-top:var(--bt-spacing-lg);padding-top:var(--bt-spacing-lg);border-top:1px solid var(--bt-color-border)}.bt-card__footer--start{justify-content:flex-start}.bt-card__footer--between{justify-content:space-between}.bt-card__footer--end{justify-content:flex-end}@keyframes bt-spinner-spin{to{transform:rotate(360deg)}}.bt-spinner{display:inline-block;box-sizing:border-box;width:var(--bt-spinner-size, 24px);height:var(--bt-spinner-size, 24px);border-radius:50%;border:2px solid var(--bt-color-border);border-top-color:var(--bt-color-accent);animation:bt-spinner-spin .8s linear infinite}.bt-pagination{display:flex;align-items:center;justify-content:center;gap:var(--bt-spacing-sm);margin-top:var(--bt-spacing-3xl)}.bt-pagination__item{border:1px solid var(--bt-color-border);background:var(--bt-color-background);border-radius:var(--bt-radius-md);padding:6px 10px;min-width:36px;font-family:var(--bt-font-family);font-size:var(--bt-font-size-sm);color:var(--bt-color-text-primary);cursor:pointer;transition:background var(--bt-transition-base),border-color var(--bt-transition-base)}.bt-pagination__item:hover:not(:disabled){background:var(--bt-color-background-secondary)}.bt-pagination__item:disabled{opacity:.5;cursor:not-allowed}.bt-pagination__pages{display:flex;align-items:center;gap:6px}.bt-pagination__page{border:0;background:rgba(0,0,0,0);min-width:36px;height:36px;border-radius:var(--bt-radius-md);font-family:var(--bt-font-family);font-size:var(--bt-font-size-sm);color:var(--bt-color-text-secondary);cursor:pointer;transition:background var(--bt-transition-base),color var(--bt-transition-base)}.bt-pagination__page:hover{background:var(--bt-color-background-secondary);color:var(--bt-color-text-primary)}.bt-pagination__page--active{color:var(--bt-color-text-primary);font-weight:var(--bt-font-weight-semibold)}.bt-pagination__ellipsis{min-width:20px;text-align:center;font-size:var(--bt-font-size-sm);color:var(--bt-color-text-tertiary)}.bt-date-picker{display:flex;flex-direction:column;gap:var(--bt-spacing-xs)}.bt-date-picker__label{color:var(--bt-color-text-primary);margin-bottom:var(--bt-spacing-xs);font-weight:var(--bt-font-weight-medium);font-size:var(--bt-font-size-sm);line-height:var(--bt-line-height-normal)}.bt-date-picker__label-required{margin-left:var(--bt-spacing-xs);color:var(--bt-color-error)}.bt-date-picker__fields{display:flex;gap:var(--bt-spacing-sm)}.bt-date-picker__select{min-width:88px;height:44px;padding:0 var(--bt-spacing-md);font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);color:var(--bt-color-text-primary);background-color:var(--bt-color-background);border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-sm);cursor:pointer;transition:border-color var(--bt-transition-fast),box-shadow var(--bt-transition-fast),background-color var(--bt-transition-fast);appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--bt-color-text-secondary) 50%),linear-gradient(135deg, var(--bt-color-text-secondary) 50%, transparent 50%);background-position:calc(100% - 16px) calc(50% - 3px),calc(100% - 11px) calc(50% - 3px);background-size:5px 5px;background-repeat:no-repeat}.bt-date-picker__select:hover:not(:disabled){border-color:var(--bt-color-accent);background-color:var(--bt-color-background-secondary)}.bt-date-picker__select:focus-visible{outline:none;border-color:var(--bt-color-accent);box-shadow:0 0 0 3px var(--bt-color-border-light)}.bt-date-picker__select:disabled{cursor:not-allowed;color:var(--bt-color-text-disabled);background-color:var(--bt-color-background-secondary);border-color:var(--bt-color-border-light)}.bt-date-picker--full-width{width:100%}.bt-date-picker--full-width .bt-date-picker__fields{width:100%}.bt-date-picker--full-width .bt-date-picker__select{flex:1;min-width:0}.bt-file-input{position:relative;display:inline-flex;align-items:center}.bt-file-input:hover .bt-file-input__label{border-color:var(--bt-color-border-light)}.bt-file-input__control{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;cursor:pointer}.bt-file-input__label{border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-md);background:var(--bt-color-background);padding:var(--bt-spacing-sm) var(--bt-spacing-lg);font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);color:var(--bt-color-text-primary);transition:background var(--bt-transition-base),border-color var(--bt-transition-base),box-shadow var(--bt-transition-base)}.bt-file-input__control:focus-visible+.bt-file-input__label{box-shadow:0 0 0 3px var(--bt-color-border-light);border-color:var(--bt-color-accent)}.bt-file-input--disabled{cursor:not-allowed}.bt-file-input--disabled .bt-file-input__control{cursor:not-allowed}.bt-file-input--disabled .bt-file-input__label{opacity:.6;cursor:not-allowed}.bt-file-input--disabled:hover .bt-file-input__label{border-color:var(--bt-color-border)}.bt-toast{font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);border-radius:var(--bt-radius-md);box-shadow:var(--bt-elevation-3)}.bt-hidden{display:none !important}.bt-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active,textarea:-webkit-autofill,select:-webkit-autofill{-webkit-box-shadow:0 0 0 1000px var(--bt-color-background) inset;box-shadow:0 0 0 1000px var(--bt-color-background) inset;-webkit-text-fill-color:var(--bt-color-text-primary);caret-color:var(--bt-color-text-primary)}.bt-text-field__input--filled:-webkit-autofill{-webkit-box-shadow:0 0 0 1000px var(--bt-color-background-secondary) inset;box-shadow:0 0 0 1000px var(--bt-color-background-secondary) inset}.bt-text-field__input--filled:-webkit-autofill:focus-visible{-webkit-box-shadow:0 0 0 1000px var(--bt-color-background) inset;box-shadow:0 0 0 1000px var(--bt-color-background) inset}input:-webkit-autofill:disabled,textarea:-webkit-autofill:disabled,select:-webkit-autofill:disabled{-webkit-box-shadow:0 0 0 1000px var(--bt-color-background-secondary) inset;box-shadow:0 0 0 1000px var(--bt-color-background-secondary) inset;-webkit-text-fill-color:var(--bt-color-text-tertiary)}@media(prefers-reduced-motion: reduce){:root{--bt-transition-fast: 0s;--bt-transition-base: 0s;--bt-transition-slow: 0s}.bt-alert__overlay,.bt-alert__modal{animation:none}.bt-card--interactive:hover{transform:none}.bt-spinner{animation-duration:2.4s}}
|
|
7
|
+
*/@keyframes skeleton_loading{0%{background-position:100% 0}100%{background-position:0 0}}:root{--bt-color-brand-primary: #121212;--bt-color-brand-on-primary: #FFFFFF;--bt-color-brand-primary-container: rgba(0, 0, 0, 0.05);--bt-color-text-heading: #121212;--bt-color-text-body: #666666;--bt-color-text-caption: #6F6F6F;--bt-color-text-brand: #121212;--bt-color-text-inverse: #FFFFFF;--bt-color-text-disabled: rgba(26, 26, 26, 0.38);--bt-color-bg-solid: #FFFFFF;--bt-color-bg-solid-dim: #F4F4F4;--bt-color-bg-additive: rgba(0, 0, 0, 0.05);--bt-color-bg-disabled: rgba(26, 26, 26, 0.12);--bt-color-bg-overlay: rgba(0, 0, 0, 0.5);--bt-color-bg-inverse-surface: #333333;--bt-color-state-hover-on-light: rgba(0, 0, 0, 0.05);--bt-color-state-pressed-on-light: rgba(26, 26, 26, 0.12);--bt-color-state-focus-on-light: rgba(0, 0, 0, 0.08);--bt-color-state-hover-on-dark: rgba(255, 255, 255, 0.05);--bt-color-state-pressed-on-dark: rgba(255, 255, 255, 0.12);--bt-color-state-focus-on-dark: rgba(255, 255, 255, 0.08);--bt-color-border-default: #E5E5E5;--bt-color-border-hover: #B3B3B3;--bt-color-border-subtle: rgba(0, 0, 0, 0.08);--bt-color-border-focus: #121212;--bt-color-border-disabled: #F2F2F2;--bt-color-status-error: #B91C1C;--bt-color-status-success: #047857;--bt-color-status-warning: #B45309;--bt-color-status-info: #1D4ED8;--bt-color-status-error-on-default: #FFFFFF;--bt-color-status-success-on-default: #FFFFFF;--bt-color-status-warning-on-default: #FFFFFF;--bt-color-status-info-on-default: #FFFFFF;--bt-color-status-error-container: #FEE2E2;--bt-color-status-success-container: #DCFCE7;--bt-color-status-warning-container: #FEF3C7;--bt-color-status-info-container: #DBEAFE;--bt-color-status-error-on-container: #B91C1C;--bt-color-status-success-on-container: #047857;--bt-color-status-warning-on-container: #B45309;--bt-color-status-info-on-container: #1D4ED8;--bt-color-status-error-on-surface: #B91C1C;--bt-color-status-success-on-surface: #047857;--bt-color-status-warning-on-surface: #B45309;--bt-color-status-info-on-surface: #1D4ED8;--bt-color-accent-subtle: rgba(0, 0, 0, 0.05);--bt-color-accent-muted: rgba(26, 26, 26, 0.12);--bt-color-accent-light: #B3B3B3;--bt-color-accent-default: #121212;--bt-color-accent-strong: #121212;--bt-color-accent-on-surface: #FFFFFF;--bt-color-skeleton-base: #F3F3F3;--bt-color-skeleton-wave: #F0F0F0;--bt-color-skeleton-highlight: #FAFAFA;--bt-focus-ring: 0 0 0 3px rgba(0, 0, 0, 0.15);--bt-focus-ring-error: 0 0 0 3px rgba(239, 68, 68, 0.30);--bt-focus-ring-success: 0 0 0 3px rgba(16, 185, 129, 0.30);--bt-elevation-level1: 0 1px 1px -1px rgba(0, 0, 0, 0.20), 0 3px 3px 0px rgba(0, 0, 0, 0.12);--bt-elevation-level2: 0 2px 2px -2px rgba(0, 0, 0, 0.20), 0 6px 6px 0px rgba(0, 0, 0, 0.12);--bt-elevation-level3: 0 3px 3px -3px rgba(0, 0, 0, 0.20), 0 9px 9px 0px rgba(0, 0, 0, 0.12);--bt-elevation-level4: 0 5px 5px -5px rgba(0, 0, 0, 0.20), 0 15px 15px 0px rgba(0, 0, 0, 0.12);--bt-elevation-level5: 0 8px 10px -5px rgba(0, 0, 0, 0.20), 0 20px 20px 0px rgba(0, 0, 0, 0.12);--bt-bottom-inset: 0px}:root{--bt-scrollbar-width: 0px}[data-theme=dark]{color-scheme:dark;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--bt-color-text-heading: rgba(255, 255, 255, 0.95);--bt-color-text-body: #B3B3B3;--bt-color-text-caption: #808080;--bt-color-text-inverse: #121212;--bt-color-text-disabled: rgba(255, 255, 255, 0.38);--bt-color-bg-solid: #0A0A0A;--bt-color-bg-solid-dim: #141414;--bt-color-bg-additive: rgba(255, 255, 255, 0.05);--bt-color-bg-disabled: rgba(255, 255, 255, 0.12);--bt-color-bg-overlay: rgba(0, 0, 0, 0.7);--bt-color-bg-inverse-surface: #F4F4F4;--bt-color-state-hover-on-light: rgba(255, 255, 255, 0.08);--bt-color-state-pressed-on-light: rgba(255, 255, 255, 0.12);--bt-color-state-focus-on-light: rgba(255, 255, 255, 0.12);--bt-color-state-hover-on-dark: rgba(0, 0, 0, 0.08);--bt-color-state-pressed-on-dark: rgba(26, 26, 26, 0.12);--bt-color-state-focus-on-dark: rgba(26, 26, 26, 0.12);--bt-color-border-default: #333333;--bt-color-border-hover: #777777;--bt-color-border-subtle: rgba(255, 255, 255, 0.12);--bt-color-border-focus: #FFFFFF;--bt-color-border-disabled: #141414;--bt-color-brand-primary-container: rgba(255, 255, 255, 0.08);--bt-color-accent-subtle: rgba(255, 255, 255, 0.08);--bt-color-accent-muted: rgba(255, 255, 255, 0.12);--bt-color-accent-light: #999999;--bt-color-accent-default: #FFFFFF;--bt-color-accent-strong: #FFFFFF;--bt-color-accent-on-surface: #121212;--bt-color-status-error-container: rgba(127, 29, 29, 0.35);--bt-color-status-success-container: rgba(6, 78, 59, 0.35);--bt-color-status-warning-container: rgba(120, 53, 15, 0.35);--bt-color-status-info-container: rgba(30, 58, 138, 0.35);--bt-color-status-error-on-container: #FCA5A5;--bt-color-status-success-on-container: #86EFAC;--bt-color-status-warning-on-container: #FCD34D;--bt-color-status-info-on-container: #93C5FD;--bt-color-status-error-on-surface: #F87171;--bt-color-status-success-on-surface: #4ADE80;--bt-color-status-warning-on-surface: #FBBF24;--bt-color-status-info-on-surface: #60A5FA;--bt-color-skeleton-base: #333333;--bt-color-skeleton-wave: #333333;--bt-color-skeleton-highlight: #666666;--bt-focus-ring: 0 0 0 3px rgba(255, 255, 255, 0.35);--bt-focus-ring-error: 0 0 0 3px rgba(239, 68, 68, 0.45);--bt-focus-ring-success: 0 0 0 3px rgba(16, 185, 129, 0.45);--bt-elevation-level1: 0 1px 2px 0 rgba(0, 0, 0, 0.45), 0 3px 6px 0 rgba(0, 0, 0, 0.30);--bt-elevation-level2: 0 2px 4px 0 rgba(0, 0, 0, 0.45), 0 6px 12px 0 rgba(0, 0, 0, 0.30);--bt-elevation-level3: 0 3px 6px 0 rgba(0, 0, 0, 0.50), 0 9px 18px 0 rgba(0, 0, 0, 0.35);--bt-elevation-level4: 0 5px 10px 0 rgba(0, 0, 0, 0.55), 0 15px 30px 0 rgba(0, 0, 0, 0.40);--bt-elevation-level5: 0 8px 16px 0 rgba(0, 0, 0, 0.60), 0 20px 40px 0 rgba(0, 0, 0, 0.45)}@media(prefers-color-scheme: dark){:root:not([data-theme]){color-scheme:dark;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--bt-color-text-heading: rgba(255, 255, 255, 0.95);--bt-color-text-body: #B3B3B3;--bt-color-text-caption: #808080;--bt-color-text-inverse: #121212;--bt-color-text-disabled: rgba(255, 255, 255, 0.38);--bt-color-bg-solid: #0A0A0A;--bt-color-bg-solid-dim: #141414;--bt-color-bg-additive: rgba(255, 255, 255, 0.05);--bt-color-bg-disabled: rgba(255, 255, 255, 0.12);--bt-color-bg-overlay: rgba(0, 0, 0, 0.7);--bt-color-bg-inverse-surface: #F4F4F4;--bt-color-state-hover-on-light: rgba(255, 255, 255, 0.08);--bt-color-state-pressed-on-light: rgba(255, 255, 255, 0.12);--bt-color-state-focus-on-light: rgba(255, 255, 255, 0.12);--bt-color-state-hover-on-dark: rgba(0, 0, 0, 0.08);--bt-color-state-pressed-on-dark: rgba(26, 26, 26, 0.12);--bt-color-state-focus-on-dark: rgba(26, 26, 26, 0.12);--bt-color-border-default: #333333;--bt-color-border-hover: #777777;--bt-color-border-subtle: rgba(255, 255, 255, 0.12);--bt-color-border-focus: #FFFFFF;--bt-color-border-disabled: #141414;--bt-color-brand-primary-container: rgba(255, 255, 255, 0.08);--bt-color-accent-subtle: rgba(255, 255, 255, 0.08);--bt-color-accent-muted: rgba(255, 255, 255, 0.12);--bt-color-accent-light: #999999;--bt-color-accent-default: #FFFFFF;--bt-color-accent-strong: #FFFFFF;--bt-color-accent-on-surface: #121212;--bt-color-status-error-container: rgba(127, 29, 29, 0.35);--bt-color-status-success-container: rgba(6, 78, 59, 0.35);--bt-color-status-warning-container: rgba(120, 53, 15, 0.35);--bt-color-status-info-container: rgba(30, 58, 138, 0.35);--bt-color-status-error-on-container: #FCA5A5;--bt-color-status-success-on-container: #86EFAC;--bt-color-status-warning-on-container: #FCD34D;--bt-color-status-info-on-container: #93C5FD;--bt-color-status-error-on-surface: #F87171;--bt-color-status-success-on-surface: #4ADE80;--bt-color-status-warning-on-surface: #FBBF24;--bt-color-status-info-on-surface: #60A5FA;--bt-color-skeleton-base: #333333;--bt-color-skeleton-wave: #333333;--bt-color-skeleton-highlight: #666666;--bt-focus-ring: 0 0 0 3px rgba(255, 255, 255, 0.35);--bt-focus-ring-error: 0 0 0 3px rgba(239, 68, 68, 0.45);--bt-focus-ring-success: 0 0 0 3px rgba(16, 185, 129, 0.45);--bt-elevation-level1: 0 1px 2px 0 rgba(0, 0, 0, 0.45), 0 3px 6px 0 rgba(0, 0, 0, 0.30);--bt-elevation-level2: 0 2px 4px 0 rgba(0, 0, 0, 0.45), 0 6px 12px 0 rgba(0, 0, 0, 0.30);--bt-elevation-level3: 0 3px 6px 0 rgba(0, 0, 0, 0.50), 0 9px 18px 0 rgba(0, 0, 0, 0.35);--bt-elevation-level4: 0 5px 10px 0 rgba(0, 0, 0, 0.55), 0 15px 30px 0 rgba(0, 0, 0, 0.40);--bt-elevation-level5: 0 8px 16px 0 rgba(0, 0, 0, 0.60), 0 20px 40px 0 rgba(0, 0, 0, 0.45)}}:root{--bt-color-primary: var(--bt-color-brand-primary);--bt-color-on-primary: var(--bt-color-brand-on-primary);--bt-color-accent: var(--bt-color-accent-default);--bt-color-primary-container: var(--bt-color-brand-primary-container);--bt-color-background: var(--bt-color-bg-solid);--bt-color-background-dim: var(--bt-color-bg-solid-dim);--bt-color-background-overlay: var(--bt-color-bg-overlay);--bt-color-border: var(--bt-color-border-default);--bt-color-text-primary: var(--bt-color-text-heading);--bt-color-text-secondary: var(--bt-color-text-body);--bt-color-text-tertiary: var(--bt-color-text-caption);--bt-color-background-secondary: var(--bt-color-background-dim);--bt-color-border-light: var(--bt-color-border-hover);--bt-color-hover: var(--bt-color-state-hover-on-light);--bt-color-hover-on-dark: var(--bt-color-state-hover-on-dark);--bt-color-pressed: var(--bt-color-state-pressed-on-light);--bt-color-primary-hover: #333333;--bt-color-overlay: var(--bt-color-bg-overlay);--bt-color-success: var(--bt-color-status-success);--bt-color-error: var(--bt-color-status-error);--bt-color-warning: var(--bt-color-status-warning);--bt-color-info: var(--bt-color-status-info);--bt-spacing-4: 4px;--bt-spacing-8: 8px;--bt-spacing-12: 12px;--bt-spacing-16: 16px;--bt-spacing-20: 20px;--bt-spacing-24: 24px;--bt-spacing-32: 32px;--bt-spacing-40: 40px;--bt-spacing-48: 48px;--bt-spacing-xs: var(--bt-spacing-4);--bt-spacing-sm: var(--bt-spacing-8);--bt-spacing-md: var(--bt-spacing-12);--bt-spacing-lg: var(--bt-spacing-16);--bt-spacing-xl: var(--bt-spacing-20);--bt-spacing-2xl: var(--bt-spacing-24);--bt-spacing-3xl: var(--bt-spacing-32);--bt-font-family: Pretendard, sans-serif;--bt-font-size-12: 12px;--bt-font-size-14: 14px;--bt-font-size-15: 15px;--bt-font-size-16: 16px;--bt-font-size-18: 18px;--bt-font-size-20: 20px;--bt-font-weight-regular: 400;--bt-font-weight-medium: 500;--bt-font-weight-semibold: 600;--bt-line-height-20: 20px;--bt-line-height-24: 24px;--bt-font-size-sm: var(--bt-font-size-14);--bt-font-size-base: var(--bt-font-size-15);--bt-font-size-md: var(--bt-font-size-16);--bt-font-size-lg: var(--bt-font-size-18);--bt-font-size-xl: var(--bt-font-size-20);--bt-line-height-normal: 1.5;--bt-radius-none: 0px;--bt-radius-xs: 4px;--bt-radius-sm: 6px;--bt-radius-md: 8px;--bt-radius-lg: 12px;--bt-radius-xl: 16px;--bt-radius-full: 9999px;--bt-elevation-1: var(--bt-elevation-level1);--bt-elevation-2: var(--bt-elevation-level2);--bt-elevation-3: var(--bt-elevation-level3);--bt-elevation-4: var(--bt-elevation-level4);--bt-elevation-5: var(--bt-elevation-level5);--bt-transition-fast: 0.1s ease-in-out;--bt-transition-base: 0.2s ease-in-out;--bt-transition-slow: 0.3s ease-in-out;--bt-z-modal: 1000;--bt-z-toast: 1000}.bt-button{display:inline-flex;align-items:center;justify-content:center;overflow-wrap:anywhere;word-break:keep-all;gap:var(--bt-spacing-sm);border-radius:var(--bt-radius-full);border:none;cursor:pointer;font-family:var(--bt-font-family);font-weight:var(--bt-font-weight-medium);transition:background var(--bt-transition-base),color var(--bt-transition-base),box-shadow var(--bt-transition-base),transform var(--bt-transition-base)}.bt-button:disabled{cursor:not-allowed;opacity:.6}.bt-button--sm{padding:var(--bt-spacing-sm) var(--bt-spacing-lg);font-size:var(--bt-font-size-sm)}.bt-button--md{padding:var(--bt-spacing-md) var(--bt-spacing-xl);font-size:var(--bt-font-size-base)}.bt-button--lg{padding:var(--bt-spacing-lg) var(--bt-spacing-2xl);font-size:var(--bt-font-size-md)}.bt-button--xl{padding:var(--bt-spacing-xl) var(--bt-spacing-3xl);font-size:var(--bt-font-size-lg)}.bt-button--filled{background:var(--bt-color-accent);color:var(--bt-color-accent-on-surface)}.bt-button--filled:hover:not(:disabled){background:color-mix(in srgb, var(--bt-color-accent) 88%, var(--bt-color-accent-on-surface))}.bt-button--filled:active:not(:disabled){transform:scale(0.98)}.bt-button--tonal{background:var(--bt-color-primary-container);color:var(--bt-color-text-primary)}.bt-button--tonal:hover:not(:disabled){background-image:linear-gradient(var(--bt-color-hover), var(--bt-color-hover))}.bt-button--tonal:active:not(:disabled){background-image:linear-gradient(var(--bt-color-pressed), var(--bt-color-pressed));transform:scale(0.98)}.bt-button--outline{background:rgba(0,0,0,0);border:1px solid var(--bt-color-border);color:var(--bt-color-text-primary)}.bt-button--outline:hover:not(:disabled){background:var(--bt-color-background-secondary)}.bt-button--outline:active:not(:disabled){transform:scale(0.98)}.bt-button--text{background:rgba(0,0,0,0);color:var(--bt-color-text-primary)}.bt-button--text:hover:not(:disabled){background:var(--bt-color-hover)}.bt-button--text:active:not(:disabled){transform:scale(0.96)}.bt-button--danger{background:var(--bt-color-error);color:var(--bt-color-on-primary)}.bt-button--danger:hover:not(:disabled){background:color-mix(in srgb, var(--bt-color-error) 88%, #000)}.bt-button--danger:active:not(:disabled){transform:scale(0.98)}.bt-button--radius-none{border-radius:var(--bt-radius-none)}.bt-button--radius-xs{border-radius:var(--bt-radius-xs)}.bt-button--radius-sm{border-radius:var(--bt-radius-sm)}.bt-button--radius-md{border-radius:var(--bt-radius-md)}.bt-button--radius-lg{border-radius:var(--bt-radius-lg)}.bt-button--radius-xl{border-radius:var(--bt-radius-xl)}.bt-button--radius-full{border-radius:var(--bt-radius-full)}.bt-button--full-width{width:100%}.bt-button--danger.bt-button--outline{background:rgba(0,0,0,0);border-color:var(--bt-color-error);color:var(--bt-color-error)}.bt-button--danger.bt-button--outline:hover:not(:disabled){background:color-mix(in srgb, var(--bt-color-error) 8%, transparent)}.bt-button--danger.bt-button--tonal{background:color-mix(in srgb, var(--bt-color-error) 12%, transparent);color:var(--bt-color-error)}.bt-button--danger.bt-button--tonal:hover:not(:disabled){background:color-mix(in srgb, var(--bt-color-error) 18%, transparent)}.bt-button--danger.bt-button--text{background:rgba(0,0,0,0);color:var(--bt-color-error)}.bt-button--danger.bt-button--text:hover:not(:disabled){background:color-mix(in srgb, var(--bt-color-error) 8%, transparent)}.bt-text-field{display:flex;flex-direction:column}.bt-text-field--full-width{width:100%}.bt-text-field__label{margin-bottom:var(--bt-spacing-xs);color:var(--bt-color-text-primary);font-size:var(--bt-font-size-sm);font-weight:var(--bt-font-weight-medium);line-height:var(--bt-line-height-normal)}.bt-text-field__wrap{position:relative;display:inline-flex;width:100%;align-items:center}.bt-text-field__input{width:100%;border-radius:var(--bt-radius-md);font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal);color:var(--bt-color-text-primary);background:var(--bt-color-background);transition:border-color var(--bt-transition-base),box-shadow var(--bt-transition-base),background var(--bt-transition-base)}.bt-text-field__input::placeholder{color:var(--bt-color-text-tertiary)}.bt-text-field__input:disabled{cursor:not-allowed;background:var(--bt-color-background-secondary);color:var(--bt-color-text-tertiary);opacity:.7}.bt-text-field__input--outline{border:1px solid var(--bt-color-border)}.bt-text-field__input--outline:hover:not(:disabled){border-color:var(--bt-color-border-light)}.bt-text-field__input--outline:focus-visible{outline:none;border-color:var(--bt-color-accent);box-shadow:0 0 0 3px var(--bt-color-border-light)}.bt-text-field__input--filled{background:var(--bt-color-background-secondary);border:1px solid rgba(0,0,0,0)}.bt-text-field__input--filled:focus-visible{outline:none;border-color:var(--bt-color-accent);background:var(--bt-color-background);box-shadow:0 0 0 3px var(--bt-color-border-light)}.bt-text-field__input--sm{padding:var(--bt-spacing-sm) var(--bt-spacing-lg);font-size:var(--bt-font-size-sm)}.bt-text-field__input--md{padding:var(--bt-spacing-md) var(--bt-spacing-xl);font-size:var(--bt-font-size-base)}.bt-text-field__input--lg{padding:var(--bt-spacing-lg) var(--bt-spacing-2xl);font-size:var(--bt-font-size-md)}.bt-text-field__input--error{border-color:var(--bt-color-error) !important;box-shadow:0 0 0 3px rgba(239,68,68,.15) !important}.bt-text-field__input--success{border-color:var(--bt-color-success) !important;box-shadow:0 0 0 3px rgba(16,185,129,.15) !important}.bt-text-field__input--identifier{font-feature-settings:"cv05" 1,"cv08" 1;font-variant-numeric:slashed-zero}.bt-text-field__helper{margin-top:var(--bt-spacing-xs);font-size:var(--bt-font-size-sm);color:var(--bt-color-text-secondary)}.bt-text-field__helper--error{color:var(--bt-color-error)}.bt-text-field__helper--success{color:var(--bt-color-success)}.bt-text-field__icon{position:absolute;display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;color:var(--bt-color-text-secondary)}.bt-text-field__icon--left{left:var(--bt-spacing-md)}.bt-text-field__icon--right{right:var(--bt-spacing-md)}.bt-checkbox{display:inline-flex;align-items:center;gap:var(--bt-spacing-sm);cursor:pointer;user-select:none;position:relative}.bt-checkbox__input{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.bt-checkbox__box{width:1.125rem;height:1.125rem;box-sizing:border-box;border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-sm);background:var(--bt-color-background);transition:background var(--bt-transition-base),border-color var(--bt-transition-base),box-shadow var(--bt-transition-base);display:inline-block;position:relative}.bt-checkbox__label{font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal);color:var(--bt-color-text-primary)}.bt-checkbox--sm .bt-checkbox__box{width:1rem;height:1rem}.bt-checkbox--sm .bt-checkbox__label{font-size:var(--bt-font-size-sm)}.bt-checkbox--lg .bt-checkbox__box{width:1.25rem;height:1.25rem}.bt-checkbox--lg .bt-checkbox__label{font-size:var(--bt-font-size-md)}.bt-checkbox__input:focus-visible+.bt-checkbox__box{box-shadow:0 0 0 3px var(--bt-color-border-light);border-color:var(--bt-color-accent)}.bt-checkbox__input:disabled+.bt-checkbox__box,.bt-checkbox__input:disabled~.bt-checkbox__label{opacity:.6;cursor:not-allowed}.bt-checkbox__input:checked+.bt-checkbox__box{background:var(--bt-color-accent);border-color:var(--bt-color-accent)}.bt-checkbox__input:checked+.bt-checkbox__box::after{content:"";position:absolute;left:50%;top:50%;width:.28rem;height:.55rem;border:2px solid var(--bt-color-accent-on-surface);border-top:0;border-left:0;transform:translate(-50%, -58%) rotate(45deg)}.bt-radio{position:relative;display:inline-flex;align-items:center;gap:var(--bt-spacing-sm);cursor:pointer;user-select:none}.bt-radio__input{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;cursor:pointer;margin:0}.bt-radio__dot{width:1.125rem;height:1.125rem;box-sizing:border-box;border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-full);background:var(--bt-color-background);transition:background var(--bt-transition-base),border-color var(--bt-transition-base),box-shadow var(--bt-transition-base);position:relative;display:inline-block}.bt-radio__label{font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal);color:var(--bt-color-text-primary)}.bt-radio--sm .bt-radio__dot{width:1rem;height:1rem}.bt-radio--sm .bt-radio__label{font-size:var(--bt-font-size-sm)}.bt-radio--lg .bt-radio__dot{width:1.25rem;height:1.25rem}.bt-radio--lg .bt-radio__label{font-size:var(--bt-font-size-md)}.bt-radio__input:focus-visible+.bt-radio__dot{box-shadow:0 0 0 3px var(--bt-color-border-light);border-color:var(--bt-color-accent)}.bt-radio__input:checked+.bt-radio__dot{border-color:var(--bt-color-accent);border-width:2px}.bt-radio__input:checked+.bt-radio__dot::after{content:"";position:absolute;left:50%;top:50%;width:60%;height:60%;transform:translate(-50%, -50%);background:var(--bt-color-accent);border-radius:9999px}.bt-radio__input:disabled+.bt-radio__dot,.bt-radio__input:disabled~.bt-radio__label{opacity:.6;cursor:not-allowed}.bt-toggle{position:relative;display:inline-flex;align-items:center;width:40px;height:24px;padding:2px;border-radius:var(--bt-radius-full);background:var(--bt-color-border-light);transition:background var(--bt-transition-base);cursor:pointer;border:none}.bt-toggle::after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:100%;height:32px}@media(max-width: 599px){.bt-toggle::after{height:40px}}.bt-toggle__thumb{width:12px;height:12px;background:var(--bt-color-background);border-radius:var(--bt-radius-full);transition:transform var(--bt-transition-base),width var(--bt-transition-base),height var(--bt-transition-base);transform:translateX(0)}.bt-toggle--on{background:var(--bt-color-accent)}.bt-toggle--on .bt-toggle__thumb{width:20px;height:20px;background:var(--bt-color-accent-on-surface);transform:translateX(16px)}.bt-toggle--sm{width:40px;height:24px}.bt-toggle--md{width:48px;height:28px}.bt-toggle--md .bt-toggle__thumb{width:16px;height:16px}.bt-toggle--md.bt-toggle--on .bt-toggle__thumb{width:24px;height:24px;transform:translateX(20px)}.bt-toggle:disabled{cursor:not-allowed;background:var(--bt-color-border-light)}.bt-toggle:disabled .bt-toggle__thumb{background:#fff}.bt-dropdown{position:relative;display:inline-flex;flex-direction:column;width:100%;gap:var(--bt-spacing-xs);font-family:var(--bt-font-family)}.bt-dropdown__label{font-size:var(--bt-font-size-sm);font-weight:var(--bt-font-weight-medium);line-height:var(--bt-line-height-normal);color:var(--bt-color-text-primary)}.bt-dropdown__control{width:100%;display:inline-flex;align-items:center;justify-content:space-between;gap:var(--bt-spacing-sm);cursor:pointer;color:var(--bt-color-text-primary);background:var(--bt-color-background);border-radius:var(--bt-radius-md);transition:border-color var(--bt-transition-base),box-shadow var(--bt-transition-base),background var(--bt-transition-base);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal);border:none;text-align:left}.bt-dropdown__control:disabled,.bt-dropdown__control.is-disabled{cursor:not-allowed;opacity:.7;background:var(--bt-color-background-secondary);color:var(--bt-color-text-tertiary)}.bt-dropdown__control--outline{border:1px solid var(--bt-color-border)}.bt-dropdown__control--outline:hover:not(.is-disabled){border-color:var(--bt-color-border-light)}.bt-dropdown__control--outline.is-open{border-color:var(--bt-color-accent);box-shadow:0 0 0 3px var(--bt-color-border-light)}.bt-dropdown__control--filled{background:var(--bt-color-background-secondary);border:1px solid rgba(0,0,0,0)}.bt-dropdown__control--filled.is-open{background:var(--bt-color-background);border-color:var(--bt-color-accent);box-shadow:0 0 0 3px var(--bt-color-border-light)}.bt-dropdown__control--sm{padding:var(--bt-spacing-sm) var(--bt-spacing-lg);font-size:var(--bt-font-size-sm)}.bt-dropdown__control--md{padding:var(--bt-spacing-md) var(--bt-spacing-xl);font-size:var(--bt-font-size-base)}.bt-dropdown__control--lg{padding:var(--bt-spacing-lg) var(--bt-spacing-2xl);font-size:var(--bt-font-size-md)}.bt-dropdown__value{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bt-dropdown__placeholder{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--bt-color-text-tertiary)}.bt-dropdown__icon{display:inline-flex;align-items:center;justify-content:center;color:var(--bt-color-text-secondary);transition:transform var(--bt-transition-base)}.bt-dropdown__icon.is-open{transform:rotate(180deg)}.bt-dropdown__list{display:none;position:absolute;z-index:var(--bt-z-modal);top:100%;left:0;width:100%;min-width:100%;box-sizing:border-box;margin-top:var(--bt-spacing-xs);background:var(--bt-color-background);border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-md);box-shadow:var(--bt-elevation-2);max-height:18rem;overflow-y:auto;overflow-x:hidden;padding:var(--bt-spacing-xs) 0;list-style:none;margin:var(--bt-spacing-xs) 0 0 0}.bt-dropdown__list--up{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bt-spacing-xs)}.bt-dropdown__list:has(>.bt-dropdown__options){max-height:none;overflow:hidden;padding:0}.bt-dropdown__search{display:flex;align-items:center;gap:var(--bt-spacing-sm);padding:var(--bt-spacing-sm) var(--bt-spacing-md);border-bottom:1px solid var(--bt-color-border)}.bt-dropdown__search-icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--bt-color-text-secondary)}.bt-dropdown__search-input{flex:1 1 auto;min-width:0;border:none;outline:none;background:rgba(0,0,0,0);color:var(--bt-color-text-primary);border-radius:var(--bt-radius-sm);font-family:var(--bt-font-family);font-size:var(--bt-font-size-sm);line-height:var(--bt-line-height-normal);transition:box-shadow var(--bt-transition-fast)}.bt-dropdown__search-input::placeholder{color:var(--bt-color-text-tertiary)}.bt-dropdown__search-input:focus-visible{box-shadow:0 0 0 3px var(--bt-color-border-light)}.bt-dropdown__options{max-height:18rem;overflow-y:auto;overflow-x:hidden;padding:var(--bt-spacing-xs) 0;margin:0;list-style:none}.bt-dropdown__empty{padding:var(--bt-spacing-md) var(--bt-spacing-lg);color:var(--bt-color-text-tertiary);font-family:var(--bt-font-family);font-size:var(--bt-font-size-sm);line-height:var(--bt-line-height-normal);text-align:center;list-style:none}.bt-dropdown__option{width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:flex-start;gap:var(--bt-spacing-sm);padding:var(--bt-spacing-sm) var(--bt-spacing-lg);cursor:pointer;color:var(--bt-color-text-primary);background:rgba(0,0,0,0);font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal)}.bt-dropdown__option[hidden]{display:none}.bt-dropdown__option:hover,.bt-dropdown__option.is-active{background:var(--bt-color-background-secondary)}.bt-dropdown__option.is-selected{font-weight:var(--bt-font-weight-medium)}.bt-dropdown__option.is-disabled{cursor:not-allowed;color:var(--bt-color-text-tertiary)}.bt-dropdown__option-content{flex:1 1 auto;min-width:0}.bt-dropdown__option-check{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--bt-spacing-lg);color:var(--bt-color-accent)}.bt-dropdown__option-check svg{opacity:0;transition:opacity var(--bt-transition-fast)}.bt-dropdown__option.is-selected .bt-dropdown__option-check svg{opacity:1}.bt-modal{position:fixed;top:0;right:0;bottom:0;left:0;display:none;place-items:center;background:var(--bt-color-overlay);z-index:var(--bt-z-modal)}.bt-modal.is-open{display:grid}.bt-modal__panel{position:relative;background:var(--bt-color-background);border-radius:var(--bt-radius-lg);box-shadow:var(--bt-elevation-3);max-width:calc(100% - 32px);overflow:hidden}.bt-modal__header{padding:var(--bt-spacing-lg);padding-right:calc(var(--bt-spacing-lg) + 32px);border-bottom:1px solid var(--bt-color-border);color:var(--bt-color-text-primary);font-size:var(--bt-font-size-xl);font-weight:var(--bt-font-weight-semibold);line-height:1.3}.bt-modal__close{position:absolute;top:var(--bt-spacing-md);right:var(--bt-spacing-md);width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;border:none;background:rgba(0,0,0,0);color:var(--bt-color-text-tertiary);border-radius:var(--bt-radius-md);cursor:pointer;transition:background var(--bt-transition-fast),color var(--bt-transition-fast)}.bt-modal__close:hover{background:var(--bt-color-hover);color:var(--bt-color-text-primary)}.bt-modal__close:focus-visible{outline:none;box-shadow:0 0 0 3px var(--bt-color-border-light)}.bt-modal__body{padding:var(--bt-spacing-lg)}.bt-modal__footer{padding:var(--bt-spacing-lg);border-top:1px solid var(--bt-color-border);display:flex;justify-content:flex-end;gap:var(--bt-spacing-sm)}@keyframes bt-alert-fade-in{from{opacity:0}to{opacity:1}}@keyframes bt-alert-slide-up{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.bt-alert__overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--bt-color-overlay);display:none;align-items:center;justify-content:center;z-index:var(--bt-z-modal);animation:bt-alert-fade-in var(--bt-transition-base)}.bt-alert__overlay.is-open{display:flex}.bt-alert__modal{background:var(--bt-color-background);border-radius:var(--bt-radius-lg);min-width:320px;max-width:480px;box-shadow:var(--bt-elevation-4);animation:bt-alert-slide-up var(--bt-transition-slow);overflow:hidden}.bt-alert__title{font-size:var(--bt-font-size-lg);font-weight:var(--bt-font-weight-semibold);line-height:var(--bt-line-height-normal);color:var(--bt-color-info);padding:var(--bt-spacing-md) var(--bt-spacing-xl) var(--bt-spacing-xs)}.bt-alert__message{font-size:var(--bt-font-size-base);color:var(--bt-color-text-secondary);padding:var(--bt-spacing-xl);line-height:1.75}.bt-alert__actions{display:flex;gap:var(--bt-spacing-sm);align-items:center;padding:0 var(--bt-spacing-xl) var(--bt-spacing-xl);justify-content:flex-end}.bt-alert--info .bt-alert__title{color:var(--bt-color-info)}.bt-alert--success .bt-alert__title{color:var(--bt-color-success)}.bt-alert--warning .bt-alert__title{color:var(--bt-color-warning)}.bt-alert--error .bt-alert__title{color:var(--bt-color-error)}.bt-card{background:var(--bt-color-background);border-radius:var(--bt-radius-lg);box-shadow:var(--bt-elevation-1);padding:var(--bt-spacing-lg);transition:transform var(--bt-transition-base),box-shadow var(--bt-transition-base)}.bt-card--bordered{border:1px solid var(--bt-color-border)}.bt-card--shadow-none{box-shadow:none}.bt-card--shadow-sm{box-shadow:var(--bt-elevation-1)}.bt-card--shadow-md{box-shadow:var(--bt-elevation-2)}.bt-card--shadow-lg{box-shadow:var(--bt-elevation-3)}.bt-card--p-none{padding:0}.bt-card--p-sm{padding:var(--bt-spacing-sm)}.bt-card--p-md{padding:var(--bt-spacing-lg)}.bt-card--p-lg{padding:var(--bt-spacing-2xl)}.bt-card--accent{background:var(--bt-color-accent);color:var(--bt-color-accent-on-surface)}.bt-card--accent .bt-card__title{color:var(--bt-color-accent-on-surface)}.bt-card--accent .bt-card__footer{border-top-color:var(--bt-color-hover-on-dark)}.bt-card--outlined{background:rgba(0,0,0,0);border:1px solid var(--bt-color-border);box-shadow:none}.bt-card--glass{background:rgba(0,0,0,.4);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid hsla(0,0%,100%,.08);color:var(--bt-color-on-primary)}.bt-card--glass .bt-card__title{color:var(--bt-color-on-primary)}.bt-card--glass .bt-card__footer{border-top-color:var(--bt-color-hover-on-dark)}[data-theme=dark] .bt-card--glass{background:hsla(0,0%,100%,.05);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid hsla(0,0%,100%,.1);box-shadow:0 8px 32px rgba(0,0,0,.12)}@media(prefers-color-scheme: dark){:root:not([data-theme]) .bt-card--glass{background:hsla(0,0%,100%,.05);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid hsla(0,0%,100%,.1);box-shadow:0 8px 32px rgba(0,0,0,.12)}}.bt-card--interactive{cursor:pointer}.bt-card--interactive:hover{transform:translateY(-2px);box-shadow:var(--bt-elevation-2)}.bt-card__title{font-size:var(--bt-font-size-xl);font-weight:var(--bt-font-weight-semibold);line-height:1.3;margin-top:0;margin-bottom:var(--bt-spacing-md);color:var(--bt-color-text-primary)}.bt-card__body{width:100%}.bt-card__footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--bt-spacing-sm);margin-top:var(--bt-spacing-lg);padding-top:var(--bt-spacing-lg);border-top:1px solid var(--bt-color-border)}.bt-card__footer--start{justify-content:flex-start}.bt-card__footer--between{justify-content:space-between}.bt-card__footer--end{justify-content:flex-end}@keyframes bt-spinner-spin{to{transform:rotate(360deg)}}.bt-spinner{display:inline-block;box-sizing:border-box;width:var(--bt-spinner-size, 24px);height:var(--bt-spinner-size, 24px);border-radius:50%;border:2px solid var(--bt-color-border);border-top-color:var(--bt-color-accent);animation:bt-spinner-spin .8s linear infinite}.bt-pagination{display:flex;align-items:center;justify-content:center;gap:var(--bt-spacing-sm);margin-top:var(--bt-spacing-3xl)}.bt-pagination__item{border:1px solid var(--bt-color-border);background:var(--bt-color-background);border-radius:var(--bt-radius-md);padding:6px 10px;min-width:36px;font-family:var(--bt-font-family);font-size:var(--bt-font-size-sm);color:var(--bt-color-text-primary);cursor:pointer;transition:background var(--bt-transition-base),border-color var(--bt-transition-base)}.bt-pagination__item:hover:not(:disabled){background:var(--bt-color-background-secondary)}.bt-pagination__item:disabled{opacity:.5;cursor:not-allowed}.bt-pagination__pages{display:flex;align-items:center;gap:6px}.bt-pagination__page{border:0;background:rgba(0,0,0,0);min-width:36px;height:36px;border-radius:var(--bt-radius-md);font-family:var(--bt-font-family);font-size:var(--bt-font-size-sm);color:var(--bt-color-text-secondary);cursor:pointer;transition:background var(--bt-transition-base),color var(--bt-transition-base)}.bt-pagination__page:hover{background:var(--bt-color-background-secondary);color:var(--bt-color-text-primary)}.bt-pagination__page--active{color:var(--bt-color-text-primary);font-weight:var(--bt-font-weight-semibold)}.bt-pagination__ellipsis{min-width:20px;text-align:center;font-size:var(--bt-font-size-sm);color:var(--bt-color-text-tertiary)}.bt-date-picker{display:flex;flex-direction:column;gap:var(--bt-spacing-xs)}.bt-date-picker__label{color:var(--bt-color-text-primary);margin-bottom:var(--bt-spacing-xs);font-weight:var(--bt-font-weight-medium);font-size:var(--bt-font-size-sm);line-height:var(--bt-line-height-normal)}.bt-date-picker__label-required{margin-left:var(--bt-spacing-xs);color:var(--bt-color-error)}.bt-date-picker__fields{display:flex;gap:var(--bt-spacing-sm)}.bt-date-picker__select{min-width:88px;height:44px;padding:0 var(--bt-spacing-md);font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);color:var(--bt-color-text-primary);background-color:var(--bt-color-background);border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-sm);cursor:pointer;transition:border-color var(--bt-transition-fast),box-shadow var(--bt-transition-fast),background-color var(--bt-transition-fast);appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--bt-color-text-secondary) 50%),linear-gradient(135deg, var(--bt-color-text-secondary) 50%, transparent 50%);background-position:calc(100% - 16px) calc(50% - 3px),calc(100% - 11px) calc(50% - 3px);background-size:5px 5px;background-repeat:no-repeat}.bt-date-picker__select:hover:not(:disabled){border-color:var(--bt-color-accent);background-color:var(--bt-color-background-secondary)}.bt-date-picker__select:focus-visible{outline:none;border-color:var(--bt-color-accent);box-shadow:0 0 0 3px var(--bt-color-border-light)}.bt-date-picker__select:disabled{cursor:not-allowed;color:var(--bt-color-text-disabled);background-color:var(--bt-color-background-secondary);border-color:var(--bt-color-border-light)}.bt-date-picker--full-width{width:100%}.bt-date-picker--full-width .bt-date-picker__fields{width:100%}.bt-date-picker--full-width .bt-date-picker__select{flex:1;min-width:0}.bt-file-input{position:relative;display:inline-flex;align-items:center}.bt-file-input:hover .bt-file-input__label{border-color:var(--bt-color-border-light)}.bt-file-input__control{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;cursor:pointer}.bt-file-input__label{border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-md);background:var(--bt-color-background);padding:var(--bt-spacing-sm) var(--bt-spacing-lg);font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);color:var(--bt-color-text-primary);transition:background var(--bt-transition-base),border-color var(--bt-transition-base),box-shadow var(--bt-transition-base)}.bt-file-input__control:focus-visible+.bt-file-input__label{box-shadow:0 0 0 3px var(--bt-color-border-light);border-color:var(--bt-color-accent)}.bt-file-input--disabled{cursor:not-allowed}.bt-file-input--disabled .bt-file-input__control{cursor:not-allowed}.bt-file-input--disabled .bt-file-input__label{opacity:.6;cursor:not-allowed}.bt-file-input--disabled:hover .bt-file-input__label{border-color:var(--bt-color-border)}.bt-toast{font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);overflow-wrap:anywhere;word-break:keep-all;border-radius:var(--bt-radius-md);box-shadow:var(--bt-elevation-3)}.bt-hidden{display:none !important}.bt-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active,textarea:-webkit-autofill,select:-webkit-autofill{-webkit-box-shadow:0 0 0 1000px var(--bt-color-background) inset;box-shadow:0 0 0 1000px var(--bt-color-background) inset;-webkit-text-fill-color:var(--bt-color-text-primary);caret-color:var(--bt-color-text-primary)}.bt-text-field__input--filled:-webkit-autofill{-webkit-box-shadow:0 0 0 1000px var(--bt-color-background-secondary) inset;box-shadow:0 0 0 1000px var(--bt-color-background-secondary) inset}.bt-text-field__input--filled:-webkit-autofill:focus-visible{-webkit-box-shadow:0 0 0 1000px var(--bt-color-background) inset;box-shadow:0 0 0 1000px var(--bt-color-background) inset}input:-webkit-autofill:disabled,textarea:-webkit-autofill:disabled,select:-webkit-autofill:disabled{-webkit-box-shadow:0 0 0 1000px var(--bt-color-background-secondary) inset;box-shadow:0 0 0 1000px var(--bt-color-background-secondary) inset;-webkit-text-fill-color:var(--bt-color-text-tertiary)}@media(prefers-reduced-motion: reduce){:root{--bt-transition-fast: 0s;--bt-transition-base: 0s;--bt-transition-slow: 0s}.bt-alert__overlay,.bt-alert__modal{animation:none}.bt-card--interactive:hover{transform:none}.bt-spinner{animation-duration:2.4s}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bigtablet/design-system",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.12.0",
|
|
4
4
|
"description": "Bigtablet Design System UI Components",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -106,9 +106,9 @@
|
|
|
106
106
|
"storybook": "^10.4.6",
|
|
107
107
|
"stylelint": "^17.14.0",
|
|
108
108
|
"tsup": "^8.5.1",
|
|
109
|
-
"tsx": "^4.
|
|
109
|
+
"tsx": "^4.23.12",
|
|
110
110
|
"typescript": "^6.0.3",
|
|
111
|
-
"vite": "^8.1
|
|
111
|
+
"vite": "^8.2.1",
|
|
112
112
|
"vitest": "^4.1.10"
|
|
113
113
|
},
|
|
114
114
|
"publishConfig": {
|