blob: dc48635f905347fb85e792dea0e762cd63f3e5c4 [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
Kateryna Prokopenkocc830042024-05-03 16:30:4633/* This specific nesting is incompatible with what stylelint requires as ordering of the rules. */
34/* stylelint-disable no-descending-specificity */
35
Alex Rudenkoe4465d12021-08-09 11:37:3736button {
Kateryna Prokopenko0895c172024-04-17 09:49:1337 --hover-layer-color: var(--sys-color-state-hover-on-subtle);
38 --active-layer-color: var(--sys-color-state-ripple-neutral-on-subtle);
Alex Rudenko9d873e52023-05-09 14:26:1739 --button-border-size: 1px;
Kateryna Prokopenko0895c172024-04-17 09:49:1340 --button-height: var(--sys-size-11);
41 --button-width: fit-content;
Ergün Erdoğmuş0cd36dc2022-05-03 09:54:1642
Alex Rudenkoe4465d12021-08-09 11:37:3743 align-items: center;
Alex Rudenko0bd7a1b2024-01-04 06:58:3344 background: transparent;
Kateryna Prokopenko0895c172024-04-17 09:49:1345 border-radius: var(--sys-shape-corner-full);
Alex Rudenkocc459b92021-08-11 13:53:4846 display: inline-flex;
Kateryna Prokopenko0895c172024-04-17 09:49:1347 position: relative;
48 font-size: var(--sys-typescale-body4-size);
49 font-weight: var(--ref-typeface-weight-medium);
50 line-height: var(--sys-typescale-body4-line-height);
Alex Rudenko9d873e52023-05-09 14:26:1751 height: var(--button-height);
Alex Rudenko50b3a3e2021-09-29 11:01:4652 justify-content: center;
Kateryna Prokopenko0895c172024-04-17 09:49:1353 padding: 0 var(--sys-size-6);
Benedikt Meurerc635aa82022-12-13 08:20:5754 white-space: nowrap;
Alex Rudenko0bd7a1b2024-01-04 06:58:3355 width: var(--button-width);
Alex Rudenko3aa078e2024-01-03 13:52:4756
Kateryna Prokopenkocc830042024-05-03 16:30:4657 &.primary-toggle {
58 --toggle-color: var(--sys-color-primary-bright);
59 }
60
61 &.red-toggle {
62 --toggle-color: var(--sys-color-error-bright);
63 }
64
Alex Rudenko3aa078e2024-01-03 13:52:4765 devtools-icon {
Kateryna Prokopenko0895c172024-04-17 09:49:1366 width: var(--icon-size);
67 height: var(--icon-size);
Alex Rudenko3aa078e2024-01-03 13:52:4768 }
69
Alex Rudenko3aa078e2024-01-03 13:52:4770 &.toolbar,
Kateryna Prokopenko0895c172024-04-17 09:49:1371 &.icon,
72 &.only-icon {
73 --button-height: 26px;
74 --button-width: 26px;
75 --icon-size: var(--sys-size-9);
Alex Rudenko3aa078e2024-01-03 13:52:4776
Kateryna Prokopenko556312f2024-05-24 09:38:4377 padding: 0;
Alex Rudenko3aa078e2024-01-03 13:52:4778 border: none;
79 overflow: hidden;
Alex Rudenko3aa078e2024-01-03 13:52:4780
81 &.small {
Kateryna Prokopenko556312f2024-05-24 09:38:4382 --button-height: var(--sys-size-9);
83 --button-width: var(--sys-size-9);
Kateryna Prokopenko0895c172024-04-17 09:49:1384 --icon-size: var(--sys-size-8);
Alex Rudenko3aa078e2024-01-03 13:52:4785 }
Kateryna Prokopenkocc830042024-05-03 16:30:4686
87 &.toggled devtools-icon {
88 color: var(--toggle-color); /* stylelint-disable-line plugin/use_theme_colors */
Kateryna Prokopenko17cba892024-07-26 13:33:5689
90 &.long-click {
91 color: var(--icon-default);
92 }
93 }
94
95 &.checked devtools-icon {
96 color: var(--toggle-color); /* stylelint-disable-line plugin/use_theme_colors */
97
98 &::after {
99 content: "";
100 width: var(--sys-size-3);
101 height: var(--sys-size-3);
102 border-radius: var(--sys-shape-corner-full);
103 background-color: var(--sys-color-primary-bright);
104 position: absolute;
105 top: var(--dot-toggle-top);
106 left: var(--dot-toggle-left);
107 }
108 }
109
110 devtools-icon.long-click {
111 position: absolute;
112 top: 2px;
113 left: 3px;
Kateryna Prokopenkocc830042024-05-03 16:30:46114 }
Alex Rudenko3aa078e2024-01-03 13:52:47115 }
116
Alex Rudenko3aa078e2024-01-03 13:52:47117 &.primary {
Kateryna Prokopenko0895c172024-04-17 09:49:13118 --hover-layer-color: var(--sys-color-state-hover-on-prominent);
119 --active-layer-color: var(--sys-color-state-ripple-primary);
120
Alex Rudenko3aa078e2024-01-03 13:52:47121 border: var(--button-border-size) solid var(--sys-color-primary);
122 background: var(--sys-color-primary);
123 color: var(--sys-color-on-primary);
124
125 devtools-icon {
Kateryna Prokopenko0895c172024-04-17 09:49:13126 color: var(--sys-color-on-primary);
Alex Rudenko3aa078e2024-01-03 13:52:47127 }
128 }
129
130 &.tonal {
Kateryna Prokopenko0895c172024-04-17 09:49:13131 border: none;
Alex Rudenko3aa078e2024-01-03 13:52:47132 background: var(--sys-color-tonal-container);
133 color: var(--sys-color-on-tonal-container);
134
135 devtools-icon {
136 color: var(--sys-color-on-tonal-container);
137 }
138 }
139
Alex Rudenko3aa078e2024-01-03 13:52:47140 &.primary-toolbar {
141 devtools-icon {
142 color: var(--icon-primary);
143 }
144 }
145
Kateryna Prokopenko0895c172024-04-17 09:49:13146 &.text {
147 border: none;
148 color: var(--sys-color-primary);
Alex Rudenko3aa078e2024-01-03 13:52:47149
Alex Rudenko3aa078e2024-01-03 13:52:47150 devtools-icon {
Kateryna Prokopenko0895c172024-04-17 09:49:13151 color: var(--icon-primary);
Alex Rudenko3aa078e2024-01-03 13:52:47152 }
153 }
154
Alex Rudenko0bd7a1b2024-01-04 06:58:33155 &.text-with-icon {
Kateryna Prokopenko0895c172024-04-17 09:49:13156 padding-left: var(--sys-size-4);
Alex Rudenko0bd7a1b2024-01-04 06:58:33157
158 devtools-icon {
Kateryna Prokopenko0895c172024-04-17 09:49:13159 width: var(--sys-size-9);
160 height: var(--sys-size-9);
161 margin-right: var(--sys-size-2);
Alex Rudenko0bd7a1b2024-01-04 06:58:33162 }
Kateryna Prokopenko0895c172024-04-17 09:49:13163 }
164
Kateryna Prokopenko0895c172024-04-17 09:49:13165 &.outlined {
166 border: var(--button-border-size) solid var(--sys-color-tonal-outline);
167 background: transparent;
168 color: var(--sys-color-primary);
169
170 devtools-icon {
171 color: var(--icon-primary);
172 }
173
174 &.micro {
175 --button-height: var(--sys-size-7);
176
177 padding: 0 var(--sys-size-5);
178 font-size: var(--sys-typescale-body4-size);
179 font-weight: var(--ref-typeface-weight-medium);
180 line-height: var(--sys-typescale-body4-line-height);
181
182 &:not(.icon):has(devtools-icon) {
183 padding-left: var(--sys-size-3);
184 }
185
186 &:not(.icon) devtools-icon {
187 height: var(--sys-size-6);
188 width: var(--sys-size-6);
189 }
190 }
191 }
192
193 &:disabled {
194 pointer-events: none;
Kateryna Prokopenkoaebb00f2024-05-27 15:03:06195 color: var(--sys-color-state-disabled);
Kateryna Prokopenko0895c172024-04-17 09:49:13196
197 &.primary {
198 border: var(--button-border-size) solid var(--sys-color-state-disabled-container);
199 background: var(--sys-color-state-disabled-container);
Kateryna Prokopenko0895c172024-04-17 09:49:13200 }
201
202 &.tonal {
203 border: var(--button-border-size) solid var(--sys-color-state-disabled-container);
204 background: var(--sys-color-state-disabled-container);
Kateryna Prokopenko0895c172024-04-17 09:49:13205 }
206
207 &.outlined {
208 border: var(--button-border-size) solid var(--sys-color-state-disabled-container);
Kateryna Prokopenko0895c172024-04-17 09:49:13209 }
210
211 &.toolbar,
212 &.icon {
213 background: transparent;
Kateryna Prokopenko0895c172024-04-17 09:49:13214 }
215
216 devtools-icon {
Kateryna Prokopenko37cf44c2024-05-10 10:52:45217 color: var(--icon-disabled);
Kateryna Prokopenko0895c172024-04-17 09:49:13218 }
219 }
Kateryna Prokopenko0895c172024-04-17 09:49:13220
221 &:not(.icon):not(.toolbar).only-icon {
222 width: 100%;
223 padding: 0;
Alex Rudenko0bd7a1b2024-01-04 06:58:33224
Wolfgang Beyer9e879742024-01-11 10:23:39225 &.small {
Kateryna Prokopenko0895c172024-04-17 09:49:13226 width: var(--button-height);
Alex Rudenko0bd7a1b2024-01-04 06:58:33227 }
228 }
229
Kateryna Prokopenko0895c172024-04-17 09:49:13230 &:focus-visible {
231 outline: 2px solid var(--sys-color-state-focus-ring);
232 outline-offset: 2px;
233 z-index: 999;
234
235 &.toolbar,
236 &.icon {
237 outline-offset: -1px;
Kateryna Prokopenko556312f2024-05-24 09:38:43238
239 &.small {
240 outline-offset: -2px;
241 }
Kateryna Prokopenko0895c172024-04-17 09:49:13242 }
Alex Rudenko0bd7a1b2024-01-04 06:58:33243 }
244
Kateryna Prokopenko0895c172024-04-17 09:49:13245 &:has(.spinner) {
246 padding-left: var(--sys-size-4);
247 }
248
Kateryna Prokopenko0895c172024-04-17 09:49:13249 &:hover::after {
250 content: "";
251 height: 100%;
252 width: 100%;
253 border-radius: inherit;
254 position: absolute;
255 top: 0;
256 left: 0;
257 background-color: var(--hover-layer-color); /* stylelint-disable-line plugin/use_theme_colors */
258
Alex Rudenko3aa078e2024-01-03 13:52:47259 &.primary {
Alex Rudenko3aa078e2024-01-03 13:52:47260 border: var(--button-border-size) solid color-mix(in sRGB, var(--sys-color-primary), var(--sys-color-state-hover-on-prominent) 6%);
261 }
262
263 &.tonal {
264 background: color-mix(in sRGB, var(--sys-color-tonal-container), var(--sys-color-state-hover-on-subtle));
265 }
266
Alex Rudenko3aa078e2024-01-03 13:52:47267 &.toobar {
268 devtools-icon {
269 color: var(--icon-default-hover);
270 }
271 }
272 }
273
Kateryna Prokopenko0895c172024-04-17 09:49:13274 &:active::before,
275 &.active::before {
276 content: "";
277 height: 100%;
278 width: 100%;
279 border-radius: inherit;
280 position: absolute;
281 top: 0;
282 left: 0;
283 background-color: var(--active-layer-color); /* stylelint-disable-line plugin/use_theme_colors */
284
Alex Rudenko3aa078e2024-01-03 13:52:47285 &.primary {
Alex Rudenko3aa078e2024-01-03 13:52:47286 border: var(--button-border-size) solid color-mix(in sRGB, var(--sys-color-primary), var(--sys-color-state-ripple-primary) 32%);
287 }
288
289 &.tonal {
Kateryna Prokopenko0895c172024-04-17 09:49:13290 background: color-mix(in sRGB, var(--sys-color-tonal-container), var(--sys-color-state-ripple-primary) 50%);
Alex Rudenko3aa078e2024-01-03 13:52:47291 }
292
293 &.toolbar {
294 devtools-icon {
295 color: var(--icon-toggled);
296 }
297 }
298 }
Alex Rudenkocc459b92021-08-11 13:53:48299}
Kateryna Prokopenkocc830042024-05-03 16:30:46300/* stylelint-enable no-descending-specificity */
Alex Rudenkocc459b92021-08-11 13:53:48301
Alex Rudenko3aa078e2024-01-03 13:52:47302.spinner {
Riho Isawabb8f3982021-11-26 11:58:16303 display: block;
304 width: 12px;
305 height: 12px;
306 border-radius: 6px;
Kateryna Prokopenko52805302023-10-09 14:30:18307 border: 2px solid var(--sys-color-cdt-base-container);
Riho Isawabb8f3982021-11-26 11:58:16308 animation: spinner-animation 1s linear infinite;
309 border-right-color: transparent;
Alex Rudenko9d873e52023-05-09 14:26:17310 margin-right: 4px;
Alex Rudenko3aa078e2024-01-03 13:52:47311
Kateryna Prokopenko0895c172024-04-17 09:49:13312 &.outlined {
Alex Rudenko3aa078e2024-01-03 13:52:47313 border: 2px solid var(--sys-color-primary);
314 border-right-color: transparent;
315 }
316
317 &.disabled {
318 border: 2px solid var(--sys-color-state-disabled);
319 border-right-color: transparent;
320 }
Riho Isawabb8f3982021-11-26 11:58:16321}
322
323@keyframes spinner-animation {
324 from {
325 transform: rotate(0);
326 }
327
328 to {
329 transform: rotate(360deg);
330 }
331}