diff options
author | Volpeon <git@volpeon.ink> | 2025-07-27 13:21:57 +0200 |
---|---|---|
committer | Volpeon <git@volpeon.ink> | 2025-07-27 13:21:57 +0200 |
commit | 3c59a39f5b6eb15b368bea1ad74e3222858c35ef (patch) | |
tree | 8cec0e01a56d7c7388d4a2e990c9b4a866705df1 | |
parent | Add option for explicit dark theme (diff) | |
download | iro-design-3c59a39f5b6eb15b368bea1ad74e3222858c35ef.tar.gz iro-design-3c59a39f5b6eb15b368bea1ad74e3222858c35ef.tar.bz2 iro-design-3c59a39f5b6eb15b368bea1ad74e3222858c35ef.zip |
Add highlighted state to button
-rw-r--r-- | src/objects/_button.scss | 29 | ||||
-rw-r--r-- | src/objects/_button.vars.scss | 15 | ||||
-rw-r--r-- | tpl/objects/button.pug | 1 | ||||
-rw-r--r-- | tpl/views/button.pug | 24 |
4 files changed, 69 insertions, 0 deletions
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/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/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' |