-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
color-modes.scss
109 lines (96 loc) · 2.62 KB
/
color-modes.scss
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
@mixin color-mode-theme($theme-name, $include-root: false) {
@if $include-root {
:root,
[data-color-mode="light"][data-light-theme="#{$theme-name}"],
[data-color-mode="dark"][data-dark-theme="#{$theme-name}"] {
@content;
/*! */ // This is a fix for a cssstats bug see https://github.com/cssstats/cssstats/issues/331
}
}
@else {
[data-color-mode="light"][data-light-theme="#{$theme-name}"],
[data-color-mode="dark"][data-dark-theme="#{$theme-name}"] {
@content;
}
}
@media (prefers-color-scheme: light) {
[data-color-mode="auto"][data-light-theme="#{$theme-name}"] {
@content;
}
}
@media (prefers-color-scheme: dark) {
[data-color-mode="auto"][data-dark-theme="#{$theme-name}"] {
@content;
}
}
}
@mixin color-mode($mode) {
@if $mode == light {
:root,
[data-color-mode="light"][data-light-theme*="#{$mode}"],
[data-color-mode="dark"][data-dark-theme*="#{$mode}"] {
@content;
}
}
@else {
[data-color-mode="light"][data-light-theme*="#{$mode}"],
[data-color-mode="dark"][data-dark-theme*="#{$mode}"] {
@content;
}
}
@media (prefers-color-scheme: light) {
[data-color-mode="auto"][data-light-theme*="#{$mode}"] {
@content;
}
}
@media (prefers-color-scheme: dark) {
[data-color-mode="auto"][data-dark-theme*="#{$mode}"] {
@content;
}
}
}
// This mixin takes a map of color mode vars and splits them into dark and light mode
// The goal is to reduce the amount of dark/light mode selectors compiled.
//
// Example input for $color-map
//
// @include color-variables(("custom-css-variable-1": (
// light: var(--color-scale-gray-3),
// dark: var(--color-scale-gray-5)
// ),
// "custom-css-variable-2": (
// light: var(--color-scale-gray-2),
// dark: var(--color-scale-gray-6)
// ),
// "custom-css-variable-3": (
// light: var(--color-scale-gray-2),
// dark: var(--color-scale-gray-6)
// )
// ));
@mixin color-variables($color-map) {
// Create map to store incoming variables
$dark-colors: ();
$light-colors: ();
@each $name, $value in $color-map {
@each $type, $color in $value {
@if $type == dark {
$dark-colors: append($dark-colors, (--color-#{$name}, #{$color}));
}
@else {
$light-colors: append($light-colors, (--color-#{$name}, #{$color}));
}
}
}
$mode-colors: (
dark: $dark-colors,
light: $light-colors
);
// Loop through sorted list
@each $mode, $variables in $mode-colors {
@include color-mode($mode) {
@each $prop, $val in $variables {
#{$prop}: $val;
}
}
}
}