blob: 2ff68cc4131a972b2979850f0958f2e63345f31a [file] [log] [blame]
Alex Rudenkoe4465d12021-08-09 11:37:371/*
2 * Copyright 2021 The Chromium Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file.
5 */
6
Alex Rudenko0bd7a1b2024-01-04 06:58:337/**
8* Design: http://go/cdt-design-button
9*/
Alex Rudenkoe4465d12021-08-09 11:37:3710* {
11 margin: 0;
12 padding: 0;
13 box-sizing: border-box;
14}
15
Alex Rudenkodc7c9592021-09-30 09:00:5516/**
17* Reset default UA styles for focused elements.
18* The button styles below explicitly implement custom focus styles.
19*/
Alex Rudenkoe4465d12021-08-09 11:37:3720*:focus,
Alex Rudenkodc7c9592021-09-30 09:00:5521*:focus-visible,
22:host(:focus),
23:host(:focus-visible) {
Alex Rudenkoe4465d12021-08-09 11:37:3724 outline: none;
25}
26
Alex Rudenkoe6ba3522021-10-15 06:09:4827:host {
28 display: inline-flex;
29 flex-direction: row;
Kateryna Prokopenko0895c172024-04-17 09:49:1330 align-items: center;
Alex Rudenkoe6ba3522021-10-15 06:09:4831}
32
Alex Rudenkoe4465d12021-08-09 11:37:3733button {
Kateryna Prokopenko0895c172024-04-17 09:49:1334 --hover-layer-color: var(--sys-color-state-hover-on-subtle);
35 --active-layer-color: var(--sys-color-state-ripple-neutral-on-subtle);
Alex Rudenko9d873e52023-05-09 14:26:1736 --button-border-size: 1px;
Kateryna Prokopenko0895c172024-04-17 09:49:1337 --button-height: var(--sys-size-11);
38 --button-width: fit-content;
Ergün Erdoğmuş0cd36dc2022-05-03 09:54:1639
Alex Rudenkoe4465d12021-08-09 11:37:3740 align-items: center;
Alex Rudenko0bd7a1b2024-01-04 06:58:3341 background: transparent;
Kateryna Prokopenko0895c172024-04-17 09:49:1342 border-radius: var(--sys-shape-corner-full);
Alex Rudenkocc459b92021-08-11 13:53:4843 display: inline-flex;
Kateryna Prokopenko0895c172024-04-17 09:49:1344 position: relative;
45 font-size: var(--sys-typescale-body4-size);
46 font-weight: var(--ref-typeface-weight-medium);
47 line-height: var(--sys-typescale-body4-line-height);
Alex Rudenko9d873e52023-05-09 14:26:1748 height: var(--button-height);
Alex Rudenko50b3a3e2021-09-29 11:01:4649 justify-content: center;
Kateryna Prokopenko0895c172024-04-17 09:49:1350 padding: 0 var(--sys-size-6);
Benedikt Meurerc635aa82022-12-13 08:20:5751 white-space: nowrap;
Alex Rudenko0bd7a1b2024-01-04 06:58:3352 width: var(--button-width);
Alex Rudenko3aa078e2024-01-03 13:52:4753
54 devtools-icon {
Kateryna Prokopenko0895c172024-04-17 09:49:1355 width: var(--icon-size);
56 height: var(--icon-size);
Alex Rudenko3aa078e2024-01-03 13:52:4757 }
58
59 &.small {
60 --button-height: 20px;
Alex Rudenko3aa078e2024-01-03 13:52:4761 }
62
63 &.toolbar,
Kateryna Prokopenko0895c172024-04-17 09:49:1364 &.icon,
65 &.only-icon {
66 --button-height: 26px;
67 --button-width: 26px;
68 --icon-size: var(--sys-size-9);
Alex Rudenko3aa078e2024-01-03 13:52:4769
Alex Rudenko3aa078e2024-01-03 13:52:4770 border: none;
71 overflow: hidden;
Alex Rudenko3aa078e2024-01-03 13:52:4772
73 &.small {
Kateryna Prokopenko0895c172024-04-17 09:49:1374 --button-height: var(--sys-size-11);
75 --button-width: var(--sys-size-11);
76 --icon-size: var(--sys-size-8);
Alex Rudenko3aa078e2024-01-03 13:52:4777 }
78 }
79
Alex Rudenko3aa078e2024-01-03 13:52:4780 &.primary {
Kateryna Prokopenko0895c172024-04-17 09:49:1381 --hover-layer-color: var(--sys-color-state-hover-on-prominent);
82 --active-layer-color: var(--sys-color-state-ripple-primary);
83
Alex Rudenko3aa078e2024-01-03 13:52:4784 border: var(--button-border-size) solid var(--sys-color-primary);
85 background: var(--sys-color-primary);
86 color: var(--sys-color-on-primary);
87
88 devtools-icon {
Kateryna Prokopenko0895c172024-04-17 09:49:1389 color: var(--sys-color-on-primary);
Alex Rudenko3aa078e2024-01-03 13:52:4790 }
91 }
92
93 &.tonal {
Kateryna Prokopenko0895c172024-04-17 09:49:1394 border: none;
Alex Rudenko3aa078e2024-01-03 13:52:4795 background: var(--sys-color-tonal-container);
96 color: var(--sys-color-on-tonal-container);
97
98 devtools-icon {
99 color: var(--sys-color-on-tonal-container);
100 }
101 }
102
Alex Rudenko3aa078e2024-01-03 13:52:47103 &.primary-toolbar {
104 devtools-icon {
105 color: var(--icon-primary);
106 }
107 }
108
Kateryna Prokopenko0895c172024-04-17 09:49:13109 &.text {
110 border: none;
111 color: var(--sys-color-primary);
Alex Rudenko3aa078e2024-01-03 13:52:47112
Alex Rudenko3aa078e2024-01-03 13:52:47113 devtools-icon {
Kateryna Prokopenko0895c172024-04-17 09:49:13114 color: var(--icon-primary);
Alex Rudenko3aa078e2024-01-03 13:52:47115 }
116 }
117
Alex Rudenko0bd7a1b2024-01-04 06:58:33118 &.text-with-icon {
Kateryna Prokopenko0895c172024-04-17 09:49:13119 padding-left: var(--sys-size-4);
Alex Rudenko0bd7a1b2024-01-04 06:58:33120
121 devtools-icon {
Kateryna Prokopenko0895c172024-04-17 09:49:13122 width: var(--sys-size-9);
123 height: var(--sys-size-9);
124 margin-right: var(--sys-size-2);
Alex Rudenko0bd7a1b2024-01-04 06:58:33125 }
Kateryna Prokopenko0895c172024-04-17 09:49:13126 }
127
128 /* This specific nesting is incompatible with what stylelint requires as ordering of the rules. */
129 /* stylelint-disable no-descending-specificity */
130 &.outlined {
131 border: var(--button-border-size) solid var(--sys-color-tonal-outline);
132 background: transparent;
133 color: var(--sys-color-primary);
134
135 devtools-icon {
136 color: var(--icon-primary);
137 }
138
139 &.micro {
140 --button-height: var(--sys-size-7);
141
142 padding: 0 var(--sys-size-5);
143 font-size: var(--sys-typescale-body4-size);
144 font-weight: var(--ref-typeface-weight-medium);
145 line-height: var(--sys-typescale-body4-line-height);
146
147 &:not(.icon):has(devtools-icon) {
148 padding-left: var(--sys-size-3);
149 }
150
151 &:not(.icon) devtools-icon {
152 height: var(--sys-size-6);
153 width: var(--sys-size-6);
154 }
155 }
156 }
157
158 &:disabled {
159 pointer-events: none;
160
161 &.primary {
162 border: var(--button-border-size) solid var(--sys-color-state-disabled-container);
163 background: var(--sys-color-state-disabled-container);
164 color: var(--sys-color-state-disabled);
165 }
166
167 &.tonal {
168 border: var(--button-border-size) solid var(--sys-color-state-disabled-container);
169 background: var(--sys-color-state-disabled-container);
170 color: var(--sys-color-state-disabled);
171 }
172
173 &.outlined {
174 border: var(--button-border-size) solid var(--sys-color-state-disabled-container);
175 color: var(--sys-color-state-disabled);
176 }
177
178 &.toolbar,
179 &.icon {
180 background: transparent;
181 color: var(--sys-color-state-disabled);
182 }
183
184 devtools-icon {
185 color: var(--icon-disabled);
186 }
187 }
188 /* stylelint-enable no-descending-specificity */
189
190 &:not(.icon):not(.toolbar).only-icon {
191 width: 100%;
192 padding: 0;
Alex Rudenko0bd7a1b2024-01-04 06:58:33193
Wolfgang Beyer9e879742024-01-11 10:23:39194 &.small {
Kateryna Prokopenko0895c172024-04-17 09:49:13195 width: var(--button-height);
Alex Rudenko0bd7a1b2024-01-04 06:58:33196 }
197 }
198
Kateryna Prokopenko0895c172024-04-17 09:49:13199 &:focus-visible {
200 outline: 2px solid var(--sys-color-state-focus-ring);
201 outline-offset: 2px;
202 z-index: 999;
203
204 &.toolbar,
205 &.icon {
206 outline-offset: -1px;
207 }
Alex Rudenko0bd7a1b2024-01-04 06:58:33208 }
209
Kateryna Prokopenko0895c172024-04-17 09:49:13210 &:has(.spinner) {
211 padding-left: var(--sys-size-4);
212 }
213
214 /* This specific nesting is incompatible with what stylelint requires as ordering of the rules. */
215 /* stylelint-disable no-descending-specificity */
216 &:hover::after {
217 content: "";
218 height: 100%;
219 width: 100%;
220 border-radius: inherit;
221 position: absolute;
222 top: 0;
223 left: 0;
224 background-color: var(--hover-layer-color); /* stylelint-disable-line plugin/use_theme_colors */
225
Alex Rudenko3aa078e2024-01-03 13:52:47226 &.primary {
Alex Rudenko3aa078e2024-01-03 13:52:47227 border: var(--button-border-size) solid color-mix(in sRGB, var(--sys-color-primary), var(--sys-color-state-hover-on-prominent) 6%);
228 }
229
230 &.tonal {
231 background: color-mix(in sRGB, var(--sys-color-tonal-container), var(--sys-color-state-hover-on-subtle));
232 }
233
Alex Rudenko3aa078e2024-01-03 13:52:47234 &.toobar {
235 devtools-icon {
236 color: var(--icon-default-hover);
237 }
238 }
239 }
240
Kateryna Prokopenko0895c172024-04-17 09:49:13241 &:active::before,
242 &.active::before {
243 content: "";
244 height: 100%;
245 width: 100%;
246 border-radius: inherit;
247 position: absolute;
248 top: 0;
249 left: 0;
250 background-color: var(--active-layer-color); /* stylelint-disable-line plugin/use_theme_colors */
251
Alex Rudenko3aa078e2024-01-03 13:52:47252 &.primary {
Alex Rudenko3aa078e2024-01-03 13:52:47253 border: var(--button-border-size) solid color-mix(in sRGB, var(--sys-color-primary), var(--sys-color-state-ripple-primary) 32%);
254 }
255
256 &.tonal {
Kateryna Prokopenko0895c172024-04-17 09:49:13257 background: color-mix(in sRGB, var(--sys-color-tonal-container), var(--sys-color-state-ripple-primary) 50%);
Alex Rudenko3aa078e2024-01-03 13:52:47258 }
259
260 &.toolbar {
261 devtools-icon {
262 color: var(--icon-toggled);
263 }
264 }
265 }
Kateryna Prokopenko0895c172024-04-17 09:49:13266 /* stylelint-enable no-descending-specificity */
Alex Rudenkocc459b92021-08-11 13:53:48267}
268
Alex Rudenko3aa078e2024-01-03 13:52:47269.spinner {
Riho Isawabb8f3982021-11-26 11:58:16270 display: block;
271 width: 12px;
272 height: 12px;
273 border-radius: 6px;
Kateryna Prokopenko52805302023-10-09 14:30:18274 border: 2px solid var(--sys-color-cdt-base-container);
Riho Isawabb8f3982021-11-26 11:58:16275 animation: spinner-animation 1s linear infinite;
276 border-right-color: transparent;
Alex Rudenko9d873e52023-05-09 14:26:17277 margin-right: 4px;
Alex Rudenko3aa078e2024-01-03 13:52:47278
Kateryna Prokopenko0895c172024-04-17 09:49:13279 &.outlined {
Alex Rudenko3aa078e2024-01-03 13:52:47280 border: 2px solid var(--sys-color-primary);
281 border-right-color: transparent;
282 }
283
284 &.disabled {
285 border: 2px solid var(--sys-color-state-disabled);
286 border-right-color: transparent;
287 }
Riho Isawabb8f3982021-11-26 11:58:16288}
289
290@keyframes spinner-animation {
291 from {
292 transform: rotate(0);
293 }
294
295 to {
296 transform: rotate(360deg);
297 }
298}