mediacube-ui 0.1.351 → 0.1.352
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/CHANGELOG.md +2 -0
- package/package.json +1 -1
- package/src/elements/McButton/McButton.vue +48 -8
- package/src/elements/McCropper/McCropper.vue +1 -1
- package/src/elements/McDatePicker/McDatePicker.vue +17 -17
- package/src/elements/McField/McFieldCheckbox/McFieldCheckbox.vue +2 -2
- package/src/elements/McField/McFieldRadio/McFieldRadioButton/McFieldRadioButton.vue +1 -1
- package/src/elements/McField/McFieldSelect/McFieldSelect.vue +10 -10
- package/src/elements/McField/McFieldText/McFieldText.vue +1 -1
- package/src/elements/McField/McFieldToggle/McFieldToggle.vue +6 -6
- package/src/elements/McNotification/McNotification.vue +1 -1
- package/src/elements/McRangeSlider/McRangeSlider.vue +1 -1
- package/src/elements/McTabs/McTabs/McTabs.vue +1 -1
- package/src/patterns/McChat/McChatComment/McChatComment.vue +2 -2
- package/src/patterns/McChat/McChatForm/McChatForm.vue +1 -1
- package/src/patterns/McDropdown/McDropdown.vue +1 -1
- package/src/patterns/McFilter/McFilter.vue +18 -23
- package/src/patterns/McFilter/McFilterChip/McFilterChip.vue +5 -3
- package/src/patterns/McFilter/McFilterTypeRelation/McFilterTypeRelation.vue +1 -1
- package/src/patterns/McOverlay/McOverlay.vue +1 -1
- package/src/patterns/McSideBar/McSideBar/McSideBar.vue +2 -2
- package/src/patterns/McSideBar/McSideBarButton/McSideBarButton.vue +7 -7
- package/src/patterns/McSideBar/McSideBarCenter/McSideBarCenter.vue +1 -1
- package/src/patterns/McTable/McTable/McTable.vue +4 -4
- package/src/patterns/McTable/McTableCol/McTableCol.vue +5 -7
- package/src/patterns/McTableCard/McTableCardHeader/McTableCardHeader.vue +1 -1
- package/src/styles/_mixins.scss +15 -15
- package/src/styles/global.scss +11 -3
- package/src/styles/table.scss +4 -4
- package/src/tokens/gradients.scss +6 -6
- package/src/utils/checkColor.js +38 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [0.1.352](https://github.com/MediaCubeCo/mcui/compare/v0.1.351...v0.1.352) (2025-01-14)
|
|
6
|
+
|
|
5
7
|
### [0.1.351](https://github.com/MediaCubeCo/mcui/compare/v0.1.350...v0.1.351) (2025-01-08)
|
|
6
8
|
|
|
7
9
|
### [0.1.350](https://github.com/MediaCubeCo/mcui/compare/v0.1.349...v0.1.350) (2025-01-08)
|
package/package.json
CHANGED
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
<script>
|
|
36
36
|
import McSvgIcon from '../McSvgIcon/McSvgIcon'
|
|
37
37
|
import { VTooltip } from 'v-tooltip'
|
|
38
|
+
import { checkContrastColor } from '../../utils/checkColor'
|
|
38
39
|
|
|
39
40
|
VTooltip.options.defaultBoundariesElement = 'window'
|
|
40
41
|
export default {
|
|
@@ -114,7 +115,7 @@ export default {
|
|
|
114
115
|
*/
|
|
115
116
|
variation: {
|
|
116
117
|
type: String,
|
|
117
|
-
default: '
|
|
118
|
+
default: 'main',
|
|
118
119
|
},
|
|
119
120
|
/**
|
|
120
121
|
* Размеры:
|
|
@@ -272,6 +273,7 @@ export default {
|
|
|
272
273
|
'mc-button--disabled': this.disabled,
|
|
273
274
|
'mc-button--rounded': this.rounded && /-compact$/.test(this.size),
|
|
274
275
|
'mc-button--semi-rounded': this.semiRounded,
|
|
276
|
+
'mc-button--contrast': this.isContrast,
|
|
275
277
|
'mc-button--full-width': this.fullWidth,
|
|
276
278
|
'mc-button--uppercase': this.uppercase,
|
|
277
279
|
'mc-button--shadow': this.shadow,
|
|
@@ -288,12 +290,11 @@ export default {
|
|
|
288
290
|
const currentStyle = texts[texts.length - 1]
|
|
289
291
|
let color = variation.replace(`-${currentStyle}`, '')
|
|
290
292
|
switch (currentStyle) {
|
|
291
|
-
case 'link':
|
|
292
293
|
case 'flat':
|
|
293
294
|
case 'outline':
|
|
294
|
-
case 'invert':
|
|
295
|
+
case 'invert':
|
|
296
|
+
case 'link':
|
|
295
297
|
break
|
|
296
|
-
}
|
|
297
298
|
default: {
|
|
298
299
|
color = variation
|
|
299
300
|
break
|
|
@@ -304,16 +305,28 @@ export default {
|
|
|
304
305
|
type: currentStyle,
|
|
305
306
|
}
|
|
306
307
|
},
|
|
308
|
+
/**
|
|
309
|
+
* Так как сейчас мы используем светлую тему, то проверяем контраст цвета на основе белого
|
|
310
|
+
* Проверяем только для main цветов, так как остальные должны подходить по стандарту
|
|
311
|
+
* TODO: сделать проверку контраста для темных тем
|
|
312
|
+
* */
|
|
313
|
+
isContrast() {
|
|
314
|
+
let [color] = this.variation.split('-') || []
|
|
315
|
+
return color.includes('main') && checkContrastColor(color, [255, 255, 255])
|
|
316
|
+
},
|
|
307
317
|
styles() {
|
|
308
318
|
let hoverBrightness
|
|
309
319
|
let textColor
|
|
310
320
|
switch (this.buttonVariation.type) {
|
|
311
|
-
case 'link':
|
|
312
321
|
case 'flat':
|
|
313
322
|
case 'outline':
|
|
314
323
|
case 'invert': {
|
|
324
|
+
if (this.isContrast) textColor = 'black'
|
|
315
325
|
break
|
|
316
326
|
}
|
|
327
|
+
case 'link':
|
|
328
|
+
textColor = this.buttonVariation.color
|
|
329
|
+
break
|
|
317
330
|
default: {
|
|
318
331
|
switch (this.buttonVariation.color) {
|
|
319
332
|
case 'yellow':
|
|
@@ -325,7 +338,7 @@ export default {
|
|
|
325
338
|
break
|
|
326
339
|
}
|
|
327
340
|
default: {
|
|
328
|
-
textColor = 'white'
|
|
341
|
+
textColor = this.isContrast ? 'black' : 'white'
|
|
329
342
|
}
|
|
330
343
|
}
|
|
331
344
|
break
|
|
@@ -467,7 +480,18 @@ export default {
|
|
|
467
480
|
align-items: center;
|
|
468
481
|
z-index: 1;
|
|
469
482
|
}
|
|
470
|
-
|
|
483
|
+
&--contrast {
|
|
484
|
+
color: var(--mc-button-text-color) !important;
|
|
485
|
+
#{$block-name} {
|
|
486
|
+
&--is-active,
|
|
487
|
+
&.nuxt-link-active {
|
|
488
|
+
color: var(--color-main-dark);
|
|
489
|
+
background-color: transparent;
|
|
490
|
+
border-color: transparent;
|
|
491
|
+
pointer-events: none;
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
}
|
|
471
495
|
&__text {
|
|
472
496
|
@include ellipsis($display: inline-block);
|
|
473
497
|
@include layout-flex-fix();
|
|
@@ -685,9 +709,22 @@ export default {
|
|
|
685
709
|
opacity: 0.1 !important;
|
|
686
710
|
}
|
|
687
711
|
}
|
|
712
|
+
// TODO check contast colors
|
|
713
|
+
//&#{$block-name}--contrast {
|
|
714
|
+
// #{$block-name} {
|
|
715
|
+
// &__background {
|
|
716
|
+
// opacity: 0.4 !important;
|
|
717
|
+
// }
|
|
718
|
+
// }
|
|
719
|
+
//}
|
|
688
720
|
@include hoverMixin {
|
|
689
721
|
opacity: 0.2 !important;
|
|
690
722
|
}
|
|
723
|
+
//&#{$block-name}--contrast {
|
|
724
|
+
// @include hoverMixin {
|
|
725
|
+
// opacity: 0.6 !important;
|
|
726
|
+
// }
|
|
727
|
+
//}
|
|
691
728
|
}
|
|
692
729
|
&-flat {
|
|
693
730
|
color: var(--mc-button-background-color);
|
|
@@ -707,6 +744,9 @@ export default {
|
|
|
707
744
|
&#{$block-name}--size-l {
|
|
708
745
|
line-height: $line-height-250;
|
|
709
746
|
}
|
|
747
|
+
&#{$block-name}--contrast {
|
|
748
|
+
filter: brightness(80%);
|
|
749
|
+
}
|
|
710
750
|
&#{$block-name} {
|
|
711
751
|
&--disabled {
|
|
712
752
|
opacity: $opacity-disabled;
|
|
@@ -765,7 +805,7 @@ export default {
|
|
|
765
805
|
|
|
766
806
|
&--is-active,
|
|
767
807
|
&.nuxt-link-active {
|
|
768
|
-
color:
|
|
808
|
+
color: var(--color-main);
|
|
769
809
|
background-color: transparent;
|
|
770
810
|
border-color: transparent;
|
|
771
811
|
pointer-events: none;
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
v-for="preset in customPresets"
|
|
57
57
|
:key="preset.title"
|
|
58
58
|
variation="black-link"
|
|
59
|
-
secondary-color="
|
|
59
|
+
secondary-color="main"
|
|
60
60
|
@click="handlerPreselectRange(preset.period)"
|
|
61
61
|
>
|
|
62
62
|
{{ preset.title }}
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
<mc-button
|
|
67
67
|
v-if="placeholders.week"
|
|
68
68
|
variation="black-link"
|
|
69
|
-
secondary-color="
|
|
69
|
+
secondary-color="main"
|
|
70
70
|
@click="selectPeriod('week')"
|
|
71
71
|
>
|
|
72
72
|
{{ placeholders.week }}
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
<mc-button
|
|
75
75
|
v-if="placeholders.month"
|
|
76
76
|
variation="black-link"
|
|
77
|
-
secondary-color="
|
|
77
|
+
secondary-color="main"
|
|
78
78
|
@click="selectPeriod('month')"
|
|
79
79
|
>
|
|
80
80
|
{{ placeholders.month }}
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
<mc-button
|
|
83
83
|
v-if="placeholders.quarter"
|
|
84
84
|
variation="black-link"
|
|
85
|
-
secondary-color="
|
|
85
|
+
secondary-color="main"
|
|
86
86
|
@click="selectPeriod('quarter')"
|
|
87
87
|
>
|
|
88
88
|
{{ placeholders.quarter }}
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
<mc-button
|
|
91
91
|
v-if="placeholders.year"
|
|
92
92
|
variation="black-link"
|
|
93
|
-
secondary-color="
|
|
93
|
+
secondary-color="main"
|
|
94
94
|
@click="selectPeriod('year')"
|
|
95
95
|
>
|
|
96
96
|
{{ placeholders.year }}
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
</div>
|
|
100
100
|
<mc-button
|
|
101
101
|
v-if="placeholders.confirm"
|
|
102
|
-
variation="
|
|
102
|
+
variation="main-outline"
|
|
103
103
|
size="xs"
|
|
104
104
|
@click="() => handleSubmit(emit)"
|
|
105
105
|
>
|
|
@@ -635,7 +635,7 @@ export default {
|
|
|
635
635
|
color: $color-black;
|
|
636
636
|
&:hover,
|
|
637
637
|
&:focus {
|
|
638
|
-
border-color:
|
|
638
|
+
border-color: var(--color-main);
|
|
639
639
|
}
|
|
640
640
|
&::placeholder {
|
|
641
641
|
color: $color-gray;
|
|
@@ -762,7 +762,7 @@ export default {
|
|
|
762
762
|
.mx-btn-text {
|
|
763
763
|
color: $color-black;
|
|
764
764
|
&:hover {
|
|
765
|
-
color:
|
|
765
|
+
color: var(--color-main);
|
|
766
766
|
}
|
|
767
767
|
}
|
|
768
768
|
.mx-icon {
|
|
@@ -816,19 +816,19 @@ export default {
|
|
|
816
816
|
border-radius: $radius-100;
|
|
817
817
|
}
|
|
818
818
|
&:hover {
|
|
819
|
-
color:
|
|
820
|
-
background-color:
|
|
819
|
+
color: var(--color-main);
|
|
820
|
+
background-color: var(--color-main-alpha-10);
|
|
821
821
|
border-radius: $radius-100;
|
|
822
822
|
}
|
|
823
823
|
&.today {
|
|
824
|
-
color:
|
|
824
|
+
color: var(--color-main);
|
|
825
825
|
}
|
|
826
826
|
&.active {
|
|
827
827
|
color: $color-white;
|
|
828
828
|
background-color: $color-white;
|
|
829
829
|
|
|
830
830
|
div {
|
|
831
|
-
background-color:
|
|
831
|
+
background-color: var(--color-main);
|
|
832
832
|
height: 100%;
|
|
833
833
|
display: flex;
|
|
834
834
|
align-items: center;
|
|
@@ -837,17 +837,17 @@ export default {
|
|
|
837
837
|
}
|
|
838
838
|
}
|
|
839
839
|
&.hover-in-range {
|
|
840
|
-
background-color:
|
|
840
|
+
background-color: var(--color-main-alpha-10);
|
|
841
841
|
}
|
|
842
842
|
&.in-range {
|
|
843
|
-
background-color:
|
|
843
|
+
background-color: var(--color-main-alpha-10);
|
|
844
844
|
color: $color-black;
|
|
845
845
|
border-radius: 0;
|
|
846
846
|
|
|
847
847
|
&:hover {
|
|
848
848
|
div {
|
|
849
|
-
color:
|
|
850
|
-
background-color:
|
|
849
|
+
color: var(--color-main);
|
|
850
|
+
background-color: var(--color-main-alpha-10);
|
|
851
851
|
border-radius: $radius-100;
|
|
852
852
|
}
|
|
853
853
|
}
|
|
@@ -870,7 +870,7 @@ export default {
|
|
|
870
870
|
border-radius: 0;
|
|
871
871
|
background-color: $color-hover-gray;
|
|
872
872
|
&.today {
|
|
873
|
-
color:
|
|
873
|
+
color: var(--color-main);
|
|
874
874
|
}
|
|
875
875
|
}
|
|
876
876
|
}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
<mc-svg-icon
|
|
12
12
|
class="mc-field-checkbox__icon"
|
|
13
13
|
:name="isChecked ? 'checkbox--checked' : 'checkbox'"
|
|
14
|
-
:color="isChecked ? '
|
|
14
|
+
:color="isChecked ? 'main' : 'gray'"
|
|
15
15
|
:size="checkboxSize"
|
|
16
16
|
/>
|
|
17
17
|
<input v-bind="inputProps" @change="handleChange" />
|
|
@@ -258,7 +258,7 @@ export default {
|
|
|
258
258
|
&__icon {
|
|
259
259
|
z-index: 1;
|
|
260
260
|
&:hover {
|
|
261
|
-
color:
|
|
261
|
+
color: var(--color-main);
|
|
262
262
|
}
|
|
263
263
|
}
|
|
264
264
|
|
|
@@ -410,8 +410,8 @@ export default {
|
|
|
410
410
|
computedOptions() {
|
|
411
411
|
let options = !this.groupKeys
|
|
412
412
|
? [...this.options, ...this.local_options].filter(
|
|
413
|
-
|
|
414
|
-
|
|
413
|
+
(v, i, a) => a.findIndex(afi => afi.value === v.value) === i,
|
|
414
|
+
)
|
|
415
415
|
: this.options
|
|
416
416
|
if (this.searchValueInOptions && this.taggable) {
|
|
417
417
|
const search = this.searchValue
|
|
@@ -451,7 +451,7 @@ export default {
|
|
|
451
451
|
let backgroundColor = this.backgroundColor
|
|
452
452
|
let labelColor
|
|
453
453
|
if (!this.backgroundColor || lightColors.includes(this.backgroundColor)) {
|
|
454
|
-
borderColor = '
|
|
454
|
+
borderColor = 'main'
|
|
455
455
|
}
|
|
456
456
|
if (darkColors.includes(this.backgroundColor)) {
|
|
457
457
|
labelColor = 'white'
|
|
@@ -596,7 +596,7 @@ export default {
|
|
|
596
596
|
iosViewportIndent -
|
|
597
597
|
ref.$refs.list.getBoundingClientRect().height -
|
|
598
598
|
8}px`
|
|
599
|
-
|
|
599
|
+
ref.$refs.list.style.bottom = 'auto'
|
|
600
600
|
break
|
|
601
601
|
case 'bottom':
|
|
602
602
|
ref.$refs.list.style.bottom = 'auto'
|
|
@@ -825,7 +825,7 @@ export default {
|
|
|
825
825
|
overflow: hidden;
|
|
826
826
|
text-align: start;
|
|
827
827
|
&:hover {
|
|
828
|
-
border-color:
|
|
828
|
+
border-color: var(--color-main);
|
|
829
829
|
}
|
|
830
830
|
&:before {
|
|
831
831
|
content: '';
|
|
@@ -859,7 +859,7 @@ export default {
|
|
|
859
859
|
margin-top: $space-50;
|
|
860
860
|
margin-bottom: $space-50;
|
|
861
861
|
margin-right: unset;
|
|
862
|
-
background-color:
|
|
862
|
+
background-color: var(--color-main-lighter);
|
|
863
863
|
color: $color-black;
|
|
864
864
|
padding: $size-50 $size-50 $size-50 $size-100;
|
|
865
865
|
border-radius: 100px;
|
|
@@ -876,7 +876,7 @@ export default {
|
|
|
876
876
|
&__tag-icon {
|
|
877
877
|
@include size($size-200);
|
|
878
878
|
position: relative;
|
|
879
|
-
background-color:
|
|
879
|
+
background-color: var(--color-main);
|
|
880
880
|
border-radius: $radius-circle;
|
|
881
881
|
flex: 0 0 auto;
|
|
882
882
|
margin-inline-start: $space-100;
|
|
@@ -933,7 +933,7 @@ export default {
|
|
|
933
933
|
color: $color-black;
|
|
934
934
|
}
|
|
935
935
|
&--selected {
|
|
936
|
-
background-color:
|
|
936
|
+
background-color: var(--color-main-lighter) !important;
|
|
937
937
|
color: $color-black !important;
|
|
938
938
|
font-weight: $font-weight-medium;
|
|
939
939
|
}
|
|
@@ -953,7 +953,7 @@ export default {
|
|
|
953
953
|
}
|
|
954
954
|
&__select {
|
|
955
955
|
&::before {
|
|
956
|
-
border-color:
|
|
956
|
+
border-color: var(--color-main) $color-transparent $color-transparent;
|
|
957
957
|
}
|
|
958
958
|
}
|
|
959
959
|
}
|
|
@@ -961,7 +961,7 @@ export default {
|
|
|
961
961
|
&__spinner {
|
|
962
962
|
&:after,
|
|
963
963
|
&:before {
|
|
964
|
-
border-top-color:
|
|
964
|
+
border-top-color: var(--color-main);
|
|
965
965
|
@include size($space-300);
|
|
966
966
|
top: calc(50% - 5px);
|
|
967
967
|
left: calc(50% - 2px);
|
|
@@ -77,7 +77,7 @@ export default {
|
|
|
77
77
|
*/
|
|
78
78
|
color: {
|
|
79
79
|
type: String,
|
|
80
|
-
default: '
|
|
80
|
+
default: 'main',
|
|
81
81
|
},
|
|
82
82
|
|
|
83
83
|
/**
|
|
@@ -114,8 +114,8 @@ export default {
|
|
|
114
114
|
let disabledColor
|
|
115
115
|
let saturateValue
|
|
116
116
|
switch (this.color) {
|
|
117
|
-
case '
|
|
118
|
-
disabledColor = 'light
|
|
117
|
+
case 'main': {
|
|
118
|
+
disabledColor = 'main-light'
|
|
119
119
|
break
|
|
120
120
|
}
|
|
121
121
|
default: {
|
|
@@ -185,7 +185,7 @@ export default {
|
|
|
185
185
|
|
|
186
186
|
@at-root #{$block-name}--checked#{$block-name}--colored-text {
|
|
187
187
|
#{$block-name}__text {
|
|
188
|
-
color:
|
|
188
|
+
color: var(--color-main);
|
|
189
189
|
}
|
|
190
190
|
}
|
|
191
191
|
@at-root #{$block-name}--disabled#{$block-name}--colored-text {
|
|
@@ -195,7 +195,7 @@ export default {
|
|
|
195
195
|
}
|
|
196
196
|
@at-root #{$block-name}--checked#{$block-name}--disabled#{$block-name}--colored-text {
|
|
197
197
|
#{$block-name}__text {
|
|
198
|
-
color:
|
|
198
|
+
color: var(--color-main-light);
|
|
199
199
|
}
|
|
200
200
|
}
|
|
201
201
|
}
|
|
@@ -221,7 +221,7 @@ export default {
|
|
|
221
221
|
@include size(0);
|
|
222
222
|
|
|
223
223
|
&:checked + #{$block-name}__slider {
|
|
224
|
-
background-color:
|
|
224
|
+
background-color: var(--color-main);
|
|
225
225
|
|
|
226
226
|
&:before {
|
|
227
227
|
inset-inline-start: calc(#{$space-300} + #{$toggle-indent});
|
|
@@ -149,7 +149,7 @@ export default {
|
|
|
149
149
|
@import '../../tokens/box-shadows';
|
|
150
150
|
.mc-range-slider {
|
|
151
151
|
$block-name: &;
|
|
152
|
-
--mc-range-slider-color:
|
|
152
|
+
--mc-range-slider-color: var(--color-main);
|
|
153
153
|
|
|
154
154
|
.vue-slider-dot-tooltip-inner {
|
|
155
155
|
line-height: $line-height-200;
|
|
@@ -204,11 +204,11 @@ export default {
|
|
|
204
204
|
color: $color-purple;
|
|
205
205
|
&:hover,
|
|
206
206
|
&:focus {
|
|
207
|
-
color:
|
|
207
|
+
color: var(--color-main-dark);
|
|
208
208
|
}
|
|
209
209
|
|
|
210
210
|
&:active {
|
|
211
|
-
color:
|
|
211
|
+
color: var(--color-main-dark);
|
|
212
212
|
}
|
|
213
213
|
}
|
|
214
214
|
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
:key="preset.name"
|
|
20
20
|
:variation="getPresetButtonVariation(preset)"
|
|
21
21
|
:tooltip="preset.tooltip"
|
|
22
|
-
secondary-color="
|
|
22
|
+
secondary-color="main"
|
|
23
23
|
@mouseup="() => handlePresetMouseUp(preset)"
|
|
24
24
|
>
|
|
25
25
|
{{ preset.visibleName }}
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
:use-timezone="useTimezone"
|
|
51
51
|
@input="handleConditionChange"
|
|
52
52
|
/>
|
|
53
|
-
<mc-button v-if="hasButtonAdd" variation="
|
|
53
|
+
<mc-button v-if="hasButtonAdd" variation="main-outline" @click.native="handleStoreTag">
|
|
54
54
|
{{ placeholders.actions[activeTag ? 'save' : 'add'] }}
|
|
55
55
|
</mc-button>
|
|
56
56
|
</template>
|
|
@@ -129,7 +129,7 @@
|
|
|
129
129
|
/>
|
|
130
130
|
<mc-button
|
|
131
131
|
:disabled="buttonCreateIsDisable"
|
|
132
|
-
variation="
|
|
132
|
+
variation="main-outline"
|
|
133
133
|
size="s"
|
|
134
134
|
@click.native="handleCreatePreset"
|
|
135
135
|
>
|
|
@@ -197,20 +197,20 @@ export default {
|
|
|
197
197
|
required: true,
|
|
198
198
|
},
|
|
199
199
|
/**
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
200
|
+
* Типы фильтров
|
|
201
|
+
*
|
|
202
|
+
* [{
|
|
203
|
+
name: Filter title,
|
|
204
|
+
value: [String] - Filter value(key),
|
|
205
|
+
type: [String] - Filter type(relation / date / text / fast / labels / simple),
|
|
206
|
+
options: [Array] - Filter options,
|
|
207
|
+
getAjaxOne: [Function] - Method for get selected options when filter initialize,
|
|
208
|
+
getAjaxOptions: [Function] - Method for get options by API,
|
|
209
|
+
[relation]: [String] - Filter relation, only for fast filter,
|
|
210
|
+
[default]: [String, Number, Boolean] - Only for fast filter type. Fast filter haven't options, we set default value
|
|
211
|
+
[description]: [String] - Only for fast filter type. Description of fast filter
|
|
212
212
|
}, ...]
|
|
213
|
-
|
|
213
|
+
*/
|
|
214
214
|
filters: {
|
|
215
215
|
type: Array,
|
|
216
216
|
required: true,
|
|
@@ -324,7 +324,7 @@ export default {
|
|
|
324
324
|
return this.filters.filter(f => f.type !== 'fast')
|
|
325
325
|
},
|
|
326
326
|
visibilityToggleVariation() {
|
|
327
|
-
return this.isOpen || !this.buttonConfirmIsDisable ? '
|
|
327
|
+
return this.isOpen || !this.buttonConfirmIsDisable ? 'main-invert' : 'black-flat'
|
|
328
328
|
},
|
|
329
329
|
currentFilter() {
|
|
330
330
|
return this.filters.find(f => f.value === this.selectedOptionFilter)
|
|
@@ -732,7 +732,7 @@ export default {
|
|
|
732
732
|
this.activePreset = { ...preset }
|
|
733
733
|
},
|
|
734
734
|
getPresetButtonVariation(preset) {
|
|
735
|
-
return this.activePreset && this.activePreset.name === preset.name ? '
|
|
735
|
+
return this.activePreset && this.activePreset.name === preset.name ? 'main-invert' : 'gray-outline'
|
|
736
736
|
},
|
|
737
737
|
},
|
|
738
738
|
}
|
|
@@ -751,7 +751,6 @@ export default {
|
|
|
751
751
|
display: flex;
|
|
752
752
|
@include child-indent-right($space-100);
|
|
753
753
|
}
|
|
754
|
-
|
|
755
754
|
&__presets {
|
|
756
755
|
position: relative;
|
|
757
756
|
flex-grow: 1;
|
|
@@ -763,7 +762,6 @@ export default {
|
|
|
763
762
|
background: linear-gradient(90deg, hsla(0, 0%, 100%, 0) 0, $color-white);
|
|
764
763
|
pointer-events: none;
|
|
765
764
|
}
|
|
766
|
-
|
|
767
765
|
&-inner {
|
|
768
766
|
display: flex;
|
|
769
767
|
flex-wrap: nowrap;
|
|
@@ -776,7 +774,6 @@ export default {
|
|
|
776
774
|
}
|
|
777
775
|
}
|
|
778
776
|
}
|
|
779
|
-
|
|
780
777
|
&__body {
|
|
781
778
|
padding: $space-200 $space-200 $space-300 $space-200;
|
|
782
779
|
background-color: $color-hover-gray;
|
|
@@ -784,7 +781,6 @@ export default {
|
|
|
784
781
|
&-top {
|
|
785
782
|
display: flex;
|
|
786
783
|
@include child-indent-right($space-400);
|
|
787
|
-
|
|
788
784
|
&-left,
|
|
789
785
|
&-right {
|
|
790
786
|
@include child-indent-right($space-100);
|
|
@@ -799,7 +795,6 @@ export default {
|
|
|
799
795
|
align-items: center;
|
|
800
796
|
justify-content: space-between;
|
|
801
797
|
@include child-indent-right($space-400);
|
|
802
|
-
|
|
803
798
|
&-left {
|
|
804
799
|
> *:not(:first-child) {
|
|
805
800
|
margin-inline-start: $space-200;
|
|
@@ -39,7 +39,7 @@ export default {
|
|
|
39
39
|
return `${this.tag.categoryName}${append}`
|
|
40
40
|
},
|
|
41
41
|
computedVariation() {
|
|
42
|
-
return this.closable ? '
|
|
42
|
+
return this.closable ? 'main-invert' : 'hover-gray'
|
|
43
43
|
},
|
|
44
44
|
classes() {
|
|
45
45
|
return {
|
|
@@ -67,13 +67,15 @@ export default {
|
|
|
67
67
|
|
|
68
68
|
&--closable {
|
|
69
69
|
border-radius: $space-150;
|
|
70
|
+
|
|
70
71
|
&:hover {
|
|
71
72
|
cursor: pointer;
|
|
72
|
-
background-color:
|
|
73
|
+
background-color: var(--color-main-alpha-40);
|
|
73
74
|
}
|
|
74
75
|
}
|
|
76
|
+
|
|
75
77
|
&--is-active {
|
|
76
|
-
background-color:
|
|
78
|
+
background-color: var(--color-main-alpha-40);
|
|
77
79
|
}
|
|
78
80
|
|
|
79
81
|
.mc-title {
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
<mc-button
|
|
19
19
|
v-for="relation in relations"
|
|
20
20
|
:key="relation"
|
|
21
|
-
:variation="relationType === relation ? '
|
|
21
|
+
:variation="relationType === relation ? 'main' : 'dark-gray-outline'"
|
|
22
22
|
@click="() => changeRelationType(relation)"
|
|
23
23
|
>
|
|
24
24
|
{{ placeholders.actions[`${relation === 'exists' ? 'empty' : relation}`] }}
|
|
@@ -275,11 +275,11 @@ export default {
|
|
|
275
275
|
dropdownActivator: 'black',
|
|
276
276
|
mainMenuLinks: {
|
|
277
277
|
variable: 'black-flat',
|
|
278
|
-
secondaryColor: '
|
|
278
|
+
secondaryColor: 'main',
|
|
279
279
|
},
|
|
280
280
|
closeButton: {
|
|
281
281
|
variable: 'black-link',
|
|
282
|
-
secondaryColor: '
|
|
282
|
+
secondaryColor: 'main',
|
|
283
283
|
},
|
|
284
284
|
},
|
|
285
285
|
}
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
<mc-chip
|
|
24
24
|
v-if="info || withIndicator"
|
|
25
25
|
slot="icon-append"
|
|
26
|
-
variation="
|
|
26
|
+
variation="main"
|
|
27
27
|
class="mc-side-bar-button__chip"
|
|
28
28
|
:class="{ indicator: withIndicator }"
|
|
29
29
|
>
|
|
@@ -159,7 +159,7 @@ export default {
|
|
|
159
159
|
return {
|
|
160
160
|
'mc-side-bar-button': true,
|
|
161
161
|
[`mc-side-bar--${this.themeConfig.mode || 'black'}__button`]: true,
|
|
162
|
-
'
|
|
162
|
+
'main-hover': !this.secondaryColor && this.themeConfig.mainMenuLinks.variable === 'black-flat',
|
|
163
163
|
}
|
|
164
164
|
},
|
|
165
165
|
btnAttrs() {
|
|
@@ -191,7 +191,7 @@ export default {
|
|
|
191
191
|
&__dot {
|
|
192
192
|
@include position(absolute, $space-100 6px null null);
|
|
193
193
|
@include size($size-100);
|
|
194
|
-
background-color:
|
|
194
|
+
background-color: var(--color-main);
|
|
195
195
|
border-radius: $radius-circle;
|
|
196
196
|
}
|
|
197
197
|
&__chip {
|
|
@@ -211,8 +211,8 @@ export default {
|
|
|
211
211
|
.mc-svg-icon {
|
|
212
212
|
@include size($size-300);
|
|
213
213
|
}
|
|
214
|
-
&.
|
|
215
|
-
background-color:
|
|
214
|
+
&.main-hover:hover {
|
|
215
|
+
background-color: var(--color-main-lighter);
|
|
216
216
|
}
|
|
217
217
|
|
|
218
218
|
.mc-button__text {
|
|
@@ -243,8 +243,8 @@ export default {
|
|
|
243
243
|
&--white__button {
|
|
244
244
|
&.mc-button--is-active,
|
|
245
245
|
&.mc-button.nuxt-link-active {
|
|
246
|
-
color:
|
|
247
|
-
background-color:
|
|
246
|
+
color: var(--color-main);
|
|
247
|
+
background-color: var(--color-main-lighter);
|
|
248
248
|
pointer-events: auto;
|
|
249
249
|
}
|
|
250
250
|
}
|
|
@@ -224,7 +224,7 @@ export default {
|
|
|
224
224
|
active: menuMainItem.active(),
|
|
225
225
|
'with-submenu': menuMainItem.menu && menuMainItem.menu.length,
|
|
226
226
|
[`mc-side-bar--${this.themeConfig.mode || 'black'}__button`]: true,
|
|
227
|
-
'
|
|
227
|
+
'main-hover': this.themeConfig.mainMenuLinks.variable === 'black-flat',
|
|
228
228
|
[`mc-button--variation-${this.themeConfig.mainMenuLinks.variable}`]: !!this.themeConfig.mainMenuLinks
|
|
229
229
|
.variable,
|
|
230
230
|
['mc-side-bar--black__button mc-button nuxt-link-active']:
|
|
@@ -612,7 +612,7 @@ export default {
|
|
|
612
612
|
}
|
|
613
613
|
}
|
|
614
614
|
.vxe-body--row.row--cheched {
|
|
615
|
-
background-color:
|
|
615
|
+
background-color: var(--color-main-alpha-10);
|
|
616
616
|
}
|
|
617
617
|
.fixed-left--wrapper {
|
|
618
618
|
scrollbar-width: none;
|
|
@@ -726,14 +726,14 @@ export default {
|
|
|
726
726
|
z-index: 1;
|
|
727
727
|
&:hover {
|
|
728
728
|
.vxe-checkbox--icon::before {
|
|
729
|
-
border-color:
|
|
729
|
+
border-color: var(--color-main) !important;
|
|
730
730
|
}
|
|
731
731
|
}
|
|
732
732
|
&.is--checked,
|
|
733
733
|
&.is--indeterminate {
|
|
734
734
|
.vxe-checkbox--icon::before {
|
|
735
|
-
border-color:
|
|
736
|
-
background-color:
|
|
735
|
+
border-color: var(--color-main);
|
|
736
|
+
background-color: var(--color-main);
|
|
737
737
|
}
|
|
738
738
|
}
|
|
739
739
|
}
|
|
@@ -26,9 +26,8 @@
|
|
|
26
26
|
:name="getSortIcon(column)"
|
|
27
27
|
:color="getSortColor(column)"
|
|
28
28
|
size="200"
|
|
29
|
-
/>{{
|
|
30
|
-
|
|
31
|
-
}}<div slot="icon-append" class="mc-table-col__header-append">
|
|
29
|
+
/>{{ $attrs.type === 'seq' ? '#' : column.title }}
|
|
30
|
+
<div slot="icon-append" class="mc-table-col__header-append">
|
|
32
31
|
<!-- @slot Слот для вставки в конец после заголовка столбца -->
|
|
33
32
|
<slot name="header-append" />
|
|
34
33
|
</div>
|
|
@@ -201,9 +200,9 @@ export default {
|
|
|
201
200
|
}
|
|
202
201
|
}
|
|
203
202
|
}
|
|
203
|
+
|
|
204
204
|
.mc-table-col {
|
|
205
205
|
$block-name: &;
|
|
206
|
-
|
|
207
206
|
&--border-right {
|
|
208
207
|
border-inline-end: 1px solid $color-hover-gray;
|
|
209
208
|
}
|
|
@@ -218,12 +217,10 @@ export default {
|
|
|
218
217
|
overflow: visible !important;
|
|
219
218
|
}
|
|
220
219
|
}
|
|
221
|
-
|
|
222
220
|
&__total {
|
|
223
221
|
margin-inline-start: auto;
|
|
224
222
|
color: $color-gray;
|
|
225
223
|
}
|
|
226
|
-
|
|
227
224
|
&__title {
|
|
228
225
|
width: auto;
|
|
229
226
|
max-width: 101%;
|
|
@@ -241,7 +238,6 @@ export default {
|
|
|
241
238
|
@include position(absolute, 0 $space-200 0 null);
|
|
242
239
|
@include child-indent-right($space-50);
|
|
243
240
|
background-color: $color-white;
|
|
244
|
-
|
|
245
241
|
&::before {
|
|
246
242
|
@include pseudo();
|
|
247
243
|
@include position(null, 0 100% 0 null);
|
|
@@ -267,6 +263,7 @@ export default {
|
|
|
267
263
|
white-space: normal !important;
|
|
268
264
|
}
|
|
269
265
|
}
|
|
266
|
+
|
|
270
267
|
.vxe-body--row {
|
|
271
268
|
transition: background-color 0s;
|
|
272
269
|
&.row--stripe {
|
|
@@ -283,6 +280,7 @@ export default {
|
|
|
283
280
|
}
|
|
284
281
|
}
|
|
285
282
|
&.row--current {
|
|
283
|
+
background-color: var(--color-main-alpha-10) !important;
|
|
286
284
|
@include col-right-color($vxe-table-row-current-background-color);
|
|
287
285
|
}
|
|
288
286
|
// описка названия в библиотеке таблицы
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<div class="mc-table-card-header__left">
|
|
4
4
|
<!-- @slot Слот контента -->
|
|
5
5
|
<slot>
|
|
6
|
-
<mc-button :to="backTo" exact variation="
|
|
6
|
+
<mc-button :to="backTo" exact variation="main-link" size="xs">
|
|
7
7
|
<mc-svg-icon slot="icon-prepend" name="keyboard_arrow_left" />
|
|
8
8
|
{{ buttonBackText }}
|
|
9
9
|
</mc-button>
|
package/src/styles/_mixins.scss
CHANGED
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
position: $position;
|
|
52
52
|
|
|
53
53
|
@each $offset, $value in $offsets {
|
|
54
|
-
|
|
54
|
+
#{$offset}: $value;
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
|
|
@@ -225,26 +225,26 @@
|
|
|
225
225
|
}
|
|
226
226
|
}
|
|
227
227
|
|
|
228
|
-
@mixin default-link($main-color:
|
|
229
|
-
color: $main-color if($is-important, !important, null);
|
|
228
|
+
@mixin default-link($main-color: '--color-black', $second-color: ('--color-purple'), $is-important: false) {
|
|
229
|
+
color: var(#{$main-color}) if($is-important, !important, null);
|
|
230
230
|
&:hover,
|
|
231
231
|
&:focus {
|
|
232
|
-
color: $second-color if($is-important, !important, null);
|
|
232
|
+
color: var(#{$second-color}) if($is-important, !important, null);
|
|
233
233
|
}
|
|
234
234
|
|
|
235
235
|
&:active {
|
|
236
|
-
|
|
236
|
+
filter: var(#{$second-color}) if($is-important, !important, null);
|
|
237
237
|
}
|
|
238
238
|
}
|
|
239
239
|
|
|
240
240
|
@mixin delete-link() {
|
|
241
|
-
@include default-link(
|
|
241
|
+
@include default-link('--color-black', '--color-red');
|
|
242
242
|
}
|
|
243
243
|
@mixin text-link($is-important: false) {
|
|
244
|
-
@include default-link(
|
|
244
|
+
@include default-link('--color-main', '--color-main-dark', $is-important);
|
|
245
245
|
}
|
|
246
246
|
@mixin close-link() {
|
|
247
|
-
@include default-link(
|
|
247
|
+
@include default-link('--color-gray', '--color-black');
|
|
248
248
|
}
|
|
249
249
|
|
|
250
250
|
@mixin field-error() {
|
|
@@ -430,7 +430,7 @@
|
|
|
430
430
|
border-radius: $radius-200;
|
|
431
431
|
}
|
|
432
432
|
blockquote {
|
|
433
|
-
border-left: $space-50 solid
|
|
433
|
+
border-left: $space-50 solid var(--color-main) !important;
|
|
434
434
|
margin: $space-zero;
|
|
435
435
|
padding-left: $space-200;
|
|
436
436
|
}
|
|
@@ -517,12 +517,12 @@
|
|
|
517
517
|
}
|
|
518
518
|
}
|
|
519
519
|
|
|
520
|
-
@mixin animation-border-spinner($duration: 2s, $border-color:
|
|
520
|
+
@mixin animation-border-spinner($duration: 2s, $border-color: '--color-main', $border-size: $space-100) {
|
|
521
521
|
background-repeat: no-repeat;
|
|
522
|
-
background-image: linear-gradient(to right, $border-color 100%, $border-color 100%),
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
522
|
+
background-image: linear-gradient(to right, var(#{$border-color}) 100%, var(#{$border-color}) 100%),
|
|
523
|
+
linear-gradient(to bottom, var(#{$border-color}) 100%, var(#{$border-color}) 100%),
|
|
524
|
+
linear-gradient(to right, var(#{$border-color}) 100%, var(#{$border-color}) 100%),
|
|
525
|
+
linear-gradient(to bottom, var(#{$border-color}) 100%, var(#{$border-color}) 100%);
|
|
526
526
|
background-position: 0 0, 100% 0, 100% 100%, 0 100%;
|
|
527
527
|
background-size: 100% $border-size, $border-size 100%, 100% $border-size, $border-size 100%;
|
|
528
528
|
animation: spin-border $duration linear;
|
|
@@ -609,4 +609,4 @@
|
|
|
609
609
|
> *:not(:first-child) {
|
|
610
610
|
margin-inline-start: $space;
|
|
611
611
|
}
|
|
612
|
-
}
|
|
612
|
+
}
|
package/src/styles/global.scss
CHANGED
|
@@ -122,19 +122,19 @@ a {
|
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
::selection {
|
|
125
|
-
background:
|
|
125
|
+
background: var(--color-main);
|
|
126
126
|
color: $color-white;
|
|
127
127
|
}
|
|
128
128
|
|
|
129
129
|
::-moz-selection {
|
|
130
|
-
background:
|
|
130
|
+
background: var(--color-main);
|
|
131
131
|
color: $color-white;
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
input,
|
|
135
135
|
textarea,
|
|
136
136
|
[contenteditable] {
|
|
137
|
-
caret-color:
|
|
137
|
+
caret-color: var(--color-main);
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
button {
|
|
@@ -288,6 +288,14 @@ pre {
|
|
|
288
288
|
@each $name, $color in $token-colors {
|
|
289
289
|
#{'--color-'}#{$name}: #{$color};
|
|
290
290
|
}
|
|
291
|
+
// Default main project colors
|
|
292
|
+
--color-main: $color-purple;
|
|
293
|
+
--color-main-dark: $color-hover-purple;
|
|
294
|
+
@for $i from 1 through 10 {
|
|
295
|
+
#{'--color-main-alpha-'}#{$i * 10}: #{rgba($color-purple, $i / 10)};
|
|
296
|
+
}
|
|
297
|
+
--color-main-light: $color-light-purple;
|
|
298
|
+
--color-main-lighter: $color-lighter-purple;
|
|
291
299
|
@each $name, $size in $token-icon-sizes {
|
|
292
300
|
#{'--size-'}#{$name}: #{$size};
|
|
293
301
|
}
|
package/src/styles/table.scss
CHANGED
|
@@ -2,9 +2,9 @@ $vxe-table-border-color: $color-hover-gray;
|
|
|
2
2
|
$vxe-table-header-background-color: $color-white;
|
|
3
3
|
$vxe-table-row-hover-background-color: $color-hover-gray;
|
|
4
4
|
$vxe-table-row-hover-striped-background-color: $color-hover-gray;
|
|
5
|
-
$vxe-table-row-current-background-color:
|
|
6
|
-
$vxe-table-row-hover-current-background-color:
|
|
7
|
-
$vxe-table-row-cheched-background-color:
|
|
8
|
-
$vxe-table-row-hover-cheched-background-color:
|
|
5
|
+
$vxe-table-row-current-background-color: var(--color-main-lighter);
|
|
6
|
+
$vxe-table-row-hover-current-background-color: var(--color-main-lighter);
|
|
7
|
+
$vxe-table-row-cheched-background-color: var(--color-main-lighter);
|
|
8
|
+
$vxe-table-row-hover-cheched-background-color: var(--color-main-lighter);
|
|
9
9
|
|
|
10
10
|
$vxe-table-row-line-height: 16px;
|
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
* @presenter Gradient
|
|
4
4
|
*/
|
|
5
5
|
$gradient-pink: linear-gradient(180deg, #F5576C 0%, #F093FB 100%); /* Фирменный цвет личного кабинета */
|
|
6
|
-
$gradient-violet: linear-gradient(180deg, #E41AFE 0%,
|
|
6
|
+
$gradient-violet: linear-gradient(180deg, #E41AFE 0%, var(--color-main-dark) 100%); /* Столбики в графике 5 порядка */
|
|
7
7
|
$gradient-blue: linear-gradient(180deg, #1ADBFE 0%, #3580F8 100%); /* Нотификации и столбики в графике 4 порядка */
|
|
8
8
|
$gradient-yellow: linear-gradient(180deg, #FEE41A 0%, #F89B35 100%); /* Столбики в графике 3 порядка */
|
|
9
9
|
$gradient-green: linear-gradient(180deg, #C9DD4C 0%, #63BE7E 100%); /* Столбики в графике 2 порядка */
|
|
10
10
|
$gradient-red: linear-gradient(180deg, #F26567 0%, #F79440 100%); /* Столбики в графике 1 порядка */
|
|
11
|
-
$gradient-purple: linear-gradient(270deg,
|
|
12
|
-
$gradient-purple-pink: linear-gradient(90deg,
|
|
13
|
-
$gradient-blue-purple: linear-gradient(90deg, #18bfe3 20%,
|
|
14
|
-
$gradient-dark-blue: linear-gradient(90deg, #5550EF 0%,
|
|
11
|
+
$gradient-purple: linear-gradient(270deg, var(--color-main-dark) 0%, var(--color-main) 100%); /* Основной градиент для MCPay */
|
|
12
|
+
$gradient-purple-pink: linear-gradient(90deg, var(--color-main) 2%, #fe6ffc 100%); /*Градиент промоакции*/
|
|
13
|
+
$gradient-blue-purple: linear-gradient(90deg, #18bfe3 20%, var(--color-main) 70%); /*Градиент промоакции*/
|
|
14
|
+
$gradient-dark-blue: linear-gradient(90deg, #5550EF 0%, var(--color-main) 100%); /*Градиент автоплатежей*/
|
|
15
15
|
$gradient-light-blue: linear-gradient(277.29deg, #d6e8ff 5.67%, #efe9ff 94.33%); /*Градиент новых криптовалют*/
|
|
16
|
-
$gradient-purple-blue: linear-gradient(272.54deg, #18bfe3 17.19%,
|
|
16
|
+
$gradient-purple-blue: linear-gradient(272.54deg, #18bfe3 17.19%, var(--color-main) 70.31%); /*Градиент баннера для криптовалют*/
|
|
17
17
|
|
|
18
18
|
$gradient-primary-radial: radial-gradient(rgb(179, 211, 255), rgb(62, 132, 244)); /* Radial gradient example */
|
|
19
19
|
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export function hexToRGB(hex, alpha, byArray = false) {
|
|
2
|
+
const r = parseInt(hex.slice(1, 3), 16)
|
|
3
|
+
const g = parseInt(hex.slice(3, 5), 16)
|
|
4
|
+
const b = parseInt(hex.slice(5, 7), 16)
|
|
5
|
+
if (byArray) return [r, g, b]
|
|
6
|
+
const rgb_color = `${r}, ${g}, ${b}`
|
|
7
|
+
return alpha ? `rgba(${rgb_color}, ${alpha})` : `rgb(${rgb_color})`
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Проверяем контрастность по формуле
|
|
12
|
+
* https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-procedure
|
|
13
|
+
* bgColor -
|
|
14
|
+
* */
|
|
15
|
+
export function checkContrastColor(colorName, bgColor) {
|
|
16
|
+
const RED = 0.2126
|
|
17
|
+
const GREEN = 0.7152
|
|
18
|
+
const BLUE = 0.0722
|
|
19
|
+
const GAMMA = 2.4
|
|
20
|
+
|
|
21
|
+
function luminance(r, g, b) {
|
|
22
|
+
const a = [r, g, b].map(v => {
|
|
23
|
+
v /= 255
|
|
24
|
+
return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, GAMMA)
|
|
25
|
+
})
|
|
26
|
+
return a[0] * RED + a[1] * GREEN + a[2] * BLUE
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function contrast(rgb1, rgb2) {
|
|
30
|
+
const lum1 = luminance(...rgb2)
|
|
31
|
+
const lum2 = luminance(...rgb1)
|
|
32
|
+
const brightest = Math.max(lum1, lum2)
|
|
33
|
+
const darkest = Math.min(lum1, lum2)
|
|
34
|
+
return (brightest + 0.05) / (darkest + 0.05)
|
|
35
|
+
}
|
|
36
|
+
const color = getComputedStyle(document.querySelector(':root')).getPropertyValue(`--color-${colorName}`) || colorName
|
|
37
|
+
return contrast(hexToRGB(color, null, true), bgColor) < 4
|
|
38
|
+
}
|