summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/_config.scss2
-rw-r--r--src/_core.scss7
-rw-r--r--src/_props.scss7
-rw-r--r--src/objects/_button.scss29
-rw-r--r--src/objects/_button.vars.scss15
-rw-r--r--src/objects/_text-field.scss22
-rw-r--r--src/objects/_text-field.vars.scss1
-rw-r--r--tpl/objects/button.pug1
-rw-r--r--tpl/objects/field-label.pug2
-rw-r--r--tpl/objects/text-field.pug1
-rw-r--r--tpl/views/button.pug24
11 files changed, 110 insertions, 1 deletions
diff --git a/src/_config.scss b/src/_config.scss
index 284d6e7..25c0adb 100644
--- a/src/_config.scss
+++ b/src/_config.scss
@@ -25,3 +25,5 @@ $themes: map.deep-merge((
25), $themes-override) !default; 25), $themes-override) !default;
26 26
27$theme-default: list.nth(map.keys($themes), 1) !default; 27$theme-default: list.nth(map.keys($themes), 1) !default;
28
29$explicit-dark-theme: false !default;
diff --git a/src/_core.scss b/src/_core.scss
index 7b7a384..2eb04fc 100644
--- a/src/_core.scss
+++ b/src/_core.scss
@@ -20,6 +20,13 @@
20 } 20 }
21 } 21 }
22 } 22 }
23
24 @if map.has-key($theme, 'dark') and config.$explicit-dark-theme {
25 @include bem.theme('dark') {
26 @include props.materialize(map.values(meta.module-variables('vars')));
27 @include props.materialize(map.get($theme, 'dark'));
28 }
29 }
23 } @else { 30 } @else {
24 @include bem.theme(string.slice($theme-name, 3)) { 31 @include bem.theme(string.slice($theme-name, 3)) {
25 @include props.materialize(map.get($theme, 'light')); 32 @include props.materialize(map.get($theme, 'light'));
diff --git a/src/_props.scss b/src/_props.scss
index ffba054..5590aed 100644
--- a/src/_props.scss
+++ b/src/_props.scss
@@ -27,6 +27,13 @@
27 } 27 }
28 } 28 }
29 29
30 @if config.$explicit-dark-theme {
31 @include bem.theme('dark') {
32 @include props.materialize($ref, 'color');
33 @include props.materialize($ref, 'dark');
34 }
35 }
36
30 @each $theme-name in map.keys(config.$themes) { 37 @each $theme-name in map.keys(config.$themes) {
31 @if $theme-name != config.$theme-default { 38 @if $theme-name != config.$theme-default {
32 @include bem.theme(string.slice($theme-name, 3)) { 39 @include bem.theme(string.slice($theme-name, 3)) {
diff --git a/src/objects/_button.scss b/src/objects/_button.scss
index 8fbec78..c4ecd87 100644
--- a/src/objects/_button.scss
+++ b/src/objects/_button.scss
@@ -109,6 +109,35 @@
109 } 109 }
110 } 110 }
111 111
112 @include bem.is('highlighted') {
113 &:link,
114 &:visited,
115 &:enabled {
116 &,
117 &:hover,
118 &:focus-visible {
119 border-color: props.get($theme, list.join($key, --highlighted --border-color)...);
120 }
121
122 box-shadow:
123 0 0 0 1px props.get($theme, list.join($key, --highlighted --border-color)...),
124 props.get(vars.$shadow-x)
125 props.get(vars.$shadow-y)
126 props.get(vars.$shadow-blur)
127 props.get(vars.$shadow-grow)
128 props.get($theme, list.join($key, --highlighted --shadow-color)...);
129
130 &:focus-visible {
131 box-shadow:
132 props.get(vars.$shadow-x)
133 props.get(vars.$shadow-y)
134 props.get(vars.$shadow-blur)
135 props.get(vars.$shadow-grow)
136 props.get($theme, list.join($key, --shadow-color)...);
137 }
138 }
139 }
140
112 @include bem.is('selected') { 141 @include bem.is('selected') {
113 color: props.get($theme, list.join($key, --selected --disabled --label-color)...); 142 color: props.get($theme, list.join($key, --selected --disabled --label-color)...);
114 background-color: props.get($theme, list.join($key, --selected --disabled --bg-color)...); 143 background-color: props.get($theme, list.join($key, --selected --disabled --bg-color)...);
diff --git a/src/objects/_button.vars.scss b/src/objects/_button.vars.scss
index 7b4670f..cc7b7d5 100644
--- a/src/objects/_button.vars.scss
+++ b/src/objects/_button.vars.scss
@@ -78,6 +78,11 @@ $default-theme: map.deep-merge((
78 --outline-color: props.get(core.$theme, --focus, --outline), 78 --outline-color: props.get(core.$theme, --focus, --outline),
79 ), 79 ),
80 80
81 --highlighted: (
82 --border-color: props.get(core.$theme, --focus, --border),
83 --shadow-color: props.get(core.$theme, --focus, --outline),
84 ),
85
81 --selected: ( 86 --selected: (
82 --bg-color: props.get(core.$theme, --text), 87 --bg-color: props.get(core.$theme, --text),
83 --label-color: props.get(core.$theme, --base, --50), 88 --label-color: props.get(core.$theme, --base, --50),
@@ -194,6 +199,11 @@ $default-theme-dark: props.def(--o-button, $default-theme-dark, 'dark');
194 --outline-color: props.get(core.$transparent-colors, $theme, --300), 199 --outline-color: props.get(core.$transparent-colors, $theme, --300),
195 ), 200 ),
196 201
202 --highlighted: (
203 --border-color: props.get(core.$transparent-colors, $theme, --900),
204 --shadow-color: props.get(core.$transparent-colors, --black, --200),
205 ),
206
197 --selected: ( 207 --selected: (
198 --bg-color: props.get(core.$transparent-colors, $theme, --800), 208 --bg-color: props.get(core.$transparent-colors, $theme, --800),
199 --label-color: props.get(core.$transparent-colors, $theme, --text), 209 --label-color: props.get(core.$transparent-colors, $theme, --text),
@@ -295,6 +305,11 @@ $themes-config: (
295 --outline-color: props.get(core.$theme, --focus, --outline), 305 --outline-color: props.get(core.$theme, --focus, --outline),
296 ), 306 ),
297 307
308 --highlighted: (
309 --border-color: props.get(core.$theme, $key, --900),
310 --shadow-color: props.get(core.$theme, $key, --200),
311 ),
312
298 --selected: ( 313 --selected: (
299 --bg-color: props.get(core.$theme, #{$key}-static, --900), 314 --bg-color: props.get(core.$theme, #{$key}-static, --900),
300 --label-color: props.get(core.$theme, #{$key}-static, --900-text), 315 --label-color: props.get(core.$theme, #{$key}-static, --900-text),
diff --git a/src/objects/_text-field.scss b/src/objects/_text-field.scss
index 6c0e7d2..a52050c 100644
--- a/src/objects/_text-field.scss
+++ b/src/objects/_text-field.scss
@@ -120,6 +120,28 @@
120 } 120 }
121 } 121 }
122 122
123 @include bem.modifier('pill') {
124 @include bem.multi('&', 'elem' 'bg') {
125 border-radius: 100em;
126 }
127
128 @include bem.elem('native') {
129 padding-inline: props.get(vars.$pad-i-pill);
130
131 &:focus {
132 @include bem.sibling-elem('bg') {
133 border-radius: 100em;
134 }
135 }
136 }
137
138 @include bem.modifier('extended') {
139 @include bem.elem('native') {
140 padding-inline: props.get(vars.$pad-i);
141 }
142 }
143 }
144
123 @include bem.is('invalid') { 145 @include bem.is('invalid') {
124 @include bem.elem('native') { 146 @include bem.elem('native') {
125 @include -invalid; 147 @include -invalid;
diff --git a/src/objects/_text-field.vars.scss b/src/objects/_text-field.vars.scss
index f64c42b..51099d8 100644
--- a/src/objects/_text-field.vars.scss
+++ b/src/objects/_text-field.vars.scss
@@ -4,6 +4,7 @@
4 4
5$line-height: props.def(--o-text-field--line-height, 1.4) !default; 5$line-height: props.def(--o-text-field--line-height, 1.4) !default;
6$pad-i: props.def(--o-text-field--pad-i, props.get(core.$size--125)) !default; 6$pad-i: props.def(--o-text-field--pad-i, props.get(core.$size--125)) !default;
7$pad-i-pill: props.def(--o-text-field--pad-i-pill, props.get(core.$size--175)) !default;
7$pad-b: props.def(--o-text-field--pad-b, props.get(core.$size--125)) !default; 8$pad-b: props.def(--o-text-field--pad-b, props.get(core.$size--125)) !default;
8$border-width: props.def(--o-text-field--border-width, props.get(core.$border-width--thin)) !default; 9$border-width: props.def(--o-text-field--border-width, props.get(core.$border-width--thin)) !default;
9$rounding: props.def(--o-text-field--rounding, props.get(core.$rounding--sm)) !default; 10$rounding: props.def(--o-text-field--rounding, props.get(core.$rounding--sm)) !default;
diff --git a/tpl/objects/button.pug b/tpl/objects/button.pug
index c356bfe..3b5de2b 100644
--- a/tpl/objects/button.pug
+++ b/tpl/objects/button.pug
@@ -11,6 +11,7 @@ mixin button
11 'o-button--badge': attributes.badge, 11 'o-button--badge': attributes.badge,
12 'o-button--icon': !!attributes.icon && !block, 12 'o-button--icon': !!attributes.icon && !block,
13 'is-selected': attributes.selected, 13 'is-selected': attributes.selected,
14 'is-highlighted': attributes.highlighted,
14 } 15 }
15 if (attributes.theme) { 16 if (attributes.theme) {
16 classes['o-button--' + attributes.theme] = true 17 classes['o-button--' + attributes.theme] = true
diff --git a/tpl/objects/field-label.pug b/tpl/objects/field-label.pug
index fb96443..192780d 100644
--- a/tpl/objects/field-label.pug
+++ b/tpl/objects/field-label.pug
@@ -16,7 +16,7 @@ mixin field-label(label, hint=null)
16 16
17 let labelStyle = needsLabelWidth ? 'width: ' + attributes.labelWidth : ''; 17 let labelStyle = needsLabelWidth ? 'width: ' + attributes.labelWidth : '';
18 18
19 div(class=classes) 19 label(class=classes)
20 .o-field-label__label(style=labelStyle class=attributes.labelClass)= label 20 .o-field-label__label(style=labelStyle class=attributes.labelClass)= label
21 .o-field-label__content(class=attributes.contentClass) 21 .o-field-label__content(class=attributes.contentClass)
22 block 22 block
diff --git a/tpl/objects/text-field.pug b/tpl/objects/text-field.pug
index 0342f01..6de30e9 100644
--- a/tpl/objects/text-field.pug
+++ b/tpl/objects/text-field.pug
@@ -12,6 +12,7 @@ mixin text-field
12 let classes = { 12 let classes = {
13 'o-text-field': true, 13 'o-text-field': true,
14 'o-text-field--extended': !!block, 14 'o-text-field--extended': !!block,
15 'o-text-field--pill': attributes.pill,
15 'is-invalid': attributes.invalid, 16 'is-invalid': attributes.invalid,
16 'is-disabled': attributes.disabled, 17 'is-disabled': attributes.disabled,
17 'l-media': !!block, 18 'l-media': !!block,
diff --git a/tpl/views/button.pug b/tpl/views/button.pug
index 2e54458..4b8c59f 100644
--- a/tpl/views/button.pug
+++ b/tpl/views/button.pug
@@ -71,6 +71,8 @@ mixin view-button
71 .c-box 71 .c-box
72 +button= 'Idle' 72 +button= 'Idle'
73 = ' ' 73 = ' '
74 +button(highlighted=true)= 'Highlighted'
75 = ' '
74 +button(selected=true)= 'Selected' 76 +button(selected=true)= 'Selected'
75 = ' ' 77 = ' '
76 +button(disabled=true)= 'Disabled' 78 +button(disabled=true)= 'Disabled'
@@ -80,6 +82,8 @@ mixin view-button
80 br 82 br
81 +button(badge=true)= 'Idle' 83 +button(badge=true)= 'Idle'
82 = ' ' 84 = ' '
85 +button(badge=true highlighted=true)= 'Highlighted'
86 = ' '
83 +button(badge=true selected=true)= 'Selected' 87 +button(badge=true selected=true)= 'Selected'
84 = ' ' 88 = ' '
85 +button(badge=true disabled=true)= 'Disabled' 89 +button(badge=true disabled=true)= 'Disabled'
@@ -89,6 +93,8 @@ mixin view-button
89 br 93 br
90 +button(quiet=true)= 'Idle' 94 +button(quiet=true)= 'Idle'
91 = ' ' 95 = ' '
96 +button(quiet=true highlighted=true)= 'Highlighted'
97 = ' '
92 +button(quiet=true selected=true)= 'Selected' 98 +button(quiet=true selected=true)= 'Selected'
93 = ' ' 99 = ' '
94 +button(quiet=true disabled=true)= 'Disabled' 100 +button(quiet=true disabled=true)= 'Disabled'
@@ -98,6 +104,8 @@ mixin view-button
98 .c-box 104 .c-box
99 +button(pill=true)= 'Idle' 105 +button(pill=true)= 'Idle'
100 = ' ' 106 = ' '
107 +button(pill=true highlighted=true)= 'Highlighted'
108 = ' '
101 +button(pill=true selected=true)= 'Selected' 109 +button(pill=true selected=true)= 'Selected'
102 = ' ' 110 = ' '
103 +button(pill=true disabled=true)= 'Disabled' 111 +button(pill=true disabled=true)= 'Disabled'
@@ -107,6 +115,8 @@ mixin view-button
107 br 115 br
108 +button(pill=true badge=true)= 'Idle' 116 +button(pill=true badge=true)= 'Idle'
109 = ' ' 117 = ' '
118 +button(pill=true badge=true highlighted=true)= 'Highlighted'
119 = ' '
110 +button(pill=true badge=true selected=true)= 'Selected' 120 +button(pill=true badge=true selected=true)= 'Selected'
111 = ' ' 121 = ' '
112 +button(pill=true badge=true disabled=true)= 'Disabled' 122 +button(pill=true badge=true disabled=true)= 'Disabled'
@@ -116,6 +126,8 @@ mixin view-button
116 br 126 br
117 +button(pill=true quiet=true)= 'Idle' 127 +button(pill=true quiet=true)= 'Idle'
118 = ' ' 128 = ' '
129 +button(pill=true quiet=true highlighted=true)= 'Highlighted'
130 = ' '
119 +button(pill=true quiet=true selected=true)= 'Selected' 131 +button(pill=true quiet=true selected=true)= 'Selected'
120 = ' ' 132 = ' '
121 +button(pill=true quiet=true disabled=true)= 'Disabled' 133 +button(pill=true quiet=true disabled=true)= 'Disabled'
@@ -126,6 +138,8 @@ mixin view-button
126 .c-box 138 .c-box
127 +button(theme=theme)= 'Idle' 139 +button(theme=theme)= 'Idle'
128 = ' ' 140 = ' '
141 +button(theme=theme highlighted=true)= 'Highlighted'
142 = ' '
129 +button(theme=theme selected=true)= 'Selected' 143 +button(theme=theme selected=true)= 'Selected'
130 = ' ' 144 = ' '
131 +button(theme=theme disabled=true)= 'Disabled' 145 +button(theme=theme disabled=true)= 'Disabled'
@@ -135,6 +149,8 @@ mixin view-button
135 br 149 br
136 +button(theme=theme badge=true)= 'Idle' 150 +button(theme=theme badge=true)= 'Idle'
137 = ' ' 151 = ' '
152 +button(theme=theme badge=true highlighted=true)= 'Highlighted'
153 = ' '
138 +button(theme=theme badge=true selected=true)= 'Selected' 154 +button(theme=theme badge=true selected=true)= 'Selected'
139 = ' ' 155 = ' '
140 +button(theme=theme badge=true disabled=true)= 'Disabled' 156 +button(theme=theme badge=true disabled=true)= 'Disabled'
@@ -144,6 +160,8 @@ mixin view-button
144 br 160 br
145 +button(theme=theme quiet=true)= 'Idle' 161 +button(theme=theme quiet=true)= 'Idle'
146 = ' ' 162 = ' '
163 +button(theme=theme quiet=true highlighted=true)= 'Highlighted'
164 = ' '
147 +button(theme=theme quiet=true selected=true)= 'Selected' 165 +button(theme=theme quiet=true selected=true)= 'Selected'
148 = ' ' 166 = ' '
149 +button(theme=theme quiet=true disabled=true)= 'Disabled' 167 +button(theme=theme quiet=true disabled=true)= 'Disabled'
@@ -157,6 +175,8 @@ mixin view-button
157 .c-box(style=`background-color: var(--colors--blue-static--${bg});`) 175 .c-box(style=`background-color: var(--colors--blue-static--${bg});`)
158 +button(theme=theme)= 'Idle' 176 +button(theme=theme)= 'Idle'
159 = ' ' 177 = ' '
178 +button(theme=theme highlighted=true)= 'Highlighted'
179 = ' '
160 +button(theme=theme selected=true)= 'Selected' 180 +button(theme=theme selected=true)= 'Selected'
161 = ' ' 181 = ' '
162 +button(theme=theme disabled=true)= 'Disabled' 182 +button(theme=theme disabled=true)= 'Disabled'
@@ -166,6 +186,8 @@ mixin view-button
166 br 186 br
167 +button(theme=theme badge=true)= 'Idle' 187 +button(theme=theme badge=true)= 'Idle'
168 = ' ' 188 = ' '
189 +button(theme=theme badge=true highlighted=true)= 'Highlighted'
190 = ' '
169 +button(theme=theme badge=true selected=true)= 'Selected' 191 +button(theme=theme badge=true selected=true)= 'Selected'
170 = ' ' 192 = ' '
171 +button(theme=theme badge=true disabled=true)= 'Disabled' 193 +button(theme=theme badge=true disabled=true)= 'Disabled'
@@ -175,6 +197,8 @@ mixin view-button
175 br 197 br
176 +button(theme=theme quiet=true)= 'Idle' 198 +button(theme=theme quiet=true)= 'Idle'
177 = ' ' 199 = ' '
200 +button(theme=theme quiet=true highlighted=true)= 'Highlighted'
201 = ' '
178 +button(theme=theme quiet=true selected=true)= 'Selected' 202 +button(theme=theme quiet=true selected=true)= 'Selected'
179 = ' ' 203 = ' '
180 +button(theme=theme quiet=true disabled=true)= 'Disabled' 204 +button(theme=theme quiet=true disabled=true)= 'Disabled'