UNPKG

9.33 kBSCSSView Raw
1//
2// Copyright IBM Corp. 2016, 2018
3//
4// This source code is licensed under the Apache-2.0 license found in the
5// LICENSE file in the root directory of this source tree.
6//
7
8@import '../../globals/scss/vars';
9@import '../../globals/scss/helper-mixins';
10@import '../../globals/scss/css--reset';
11@import '../../globals/scss/typography';
12@import '../../globals/scss/vendor/@carbon/elements/scss/import-once/import-once';
13
14@mixin progress-indicator {
15 .#{$prefix}--progress {
16 @include reset;
17 @include font-family;
18 display: flex;
19 list-style: none;
20 }
21
22 .#{$prefix}--progress-step {
23 position: relative;
24 display: inline-flex;
25 flex-direction: column;
26 flex: 1;
27 min-width: 7rem;
28 transition: $transition--base all $carbon--standard-easing;
29 overflow: visible;
30
31 &:first-child .#{$prefix}--progress-line {
32 display: none;
33 }
34 }
35
36 .#{$prefix}--progress-line {
37 position: absolute;
38 top: $progress-indicator-line-offset;
39 right: 100%;
40 height: 1px;
41 width: calc(100% - 24px);
42 border: $progress-indicator-bar-width;
43 }
44
45 .#{$prefix}--progress-step svg {
46 position: relative;
47 z-index: 1;
48 width: 1.5rem;
49 height: 1.5rem;
50 border-radius: 50%;
51 margin-bottom: $spacing-xs;
52 fill: $brand-01;
53 }
54
55 .#{$prefix}--progress-label {
56 line-height: 1;
57 width: 75%;
58 }
59
60 //interactive button
61 .#{$prefix}--progress-step-button {
62 display: inline-flex;
63 flex-flow: column nowrap;
64 }
65
66 //unclickable button
67 .#{$prefix}--progress-step-button--unclickable {
68 outline: none;
69 }
70
71 .#{$prefix}--progress-step--current {
72 circle:first-child {
73 stroke: $brand-01;
74 stroke-width: $progress-indicator-stroke-width;
75 fill: transparent;
76 }
77
78 .#{$prefix}--progress-label {
79 @include font-smoothing;
80 color: $brand-01;
81 font-weight: 600;
82 }
83 .#{$prefix}--progress-line {
84 background-color: $brand-01;
85 }
86 }
87
88 .#{$prefix}--progress-step--incomplete {
89 circle {
90 stroke: $ui-04;
91 stroke-width: $progress-indicator-stroke-width;
92 fill: transparent;
93 }
94
95 .#{$prefix}--progress-label {
96 color: $text-02;
97 }
98
99 .#{$prefix}--progress-line {
100 background-color: $ui-04;
101 }
102 }
103
104 .#{$prefix}--progress-step--complete {
105 circle {
106 stroke: $brand-01;
107 stroke-width: $progress-indicator-stroke-width;
108 fill: transparent;
109 }
110
111 polygon {
112 fill: $brand-01;
113 }
114
115 .#{$prefix}--progress-label {
116 @include font-smoothing;
117 color: $brand-01;
118 font-weight: 600;
119 }
120 .#{$prefix}--progress-line {
121 background-color: $brand-01;
122 }
123 }
124
125 // Skeleton State
126 .#{$prefix}--progress.#{$prefix}--skeleton .#{$prefix}--progress-label {
127 @include skeleton;
128 height: rem(12px);
129 width: rem(40px);
130 }
131
132 // Vertical variant
133 .#{$prefix}--progress--vertical {
134 display: block;
135 }
136
137 .#{$prefix}--progress--vertical .#{$prefix}--progress-step {
138 display: list-item;
139 min-height: 6rem;
140
141 svg {
142 display: inline-block;
143 }
144 }
145
146 .#{$prefix}--progress--vertical .#{$prefix}--progress-label {
147 display: inline-block;
148 width: auto;
149 vertical-align: top;
150 margin-top: 0.26rem;
151 margin-left: 0.5rem;
152 }
153
154 .#{$prefix}--progress--vertical .#{$prefix}--progress-line {
155 top: 22px;
156 left: 0.69rem;
157 height: calc(100% - 22px);
158 width: 1px;
159 }
160
161 .#{$prefix}--progress--vertical .#{$prefix}--progress-step:first-child .#{$prefix}--progress-line {
162 display: block;
163 }
164 .#{$prefix}--progress--vertical .#{$prefix}--progress-step:last-child .#{$prefix}--progress-line {
165 display: none;
166 }
167}
168
169@mixin progress-indicator--x {
170 .#{$prefix}--progress {
171 @include reset;
172 display: flex;
173 list-style: none;
174 }
175
176 .#{$prefix}--progress-step {
177 position: relative;
178 display: inline-flex;
179 flex-direction: row;
180 flex: 1;
181 min-width: 7rem;
182 width: rem(128px);
183 transition: $duration--fast-02 all motion(standard, productive);
184 overflow: visible;
185
186 .#{$prefix}--tooltip__label {
187 display: block;
188 }
189 }
190
191 .#{$prefix}--progress-line {
192 position: absolute;
193 height: 1px;
194 width: rem(128px);
195 border: $progress-indicator-bar-width;
196 }
197
198 .#{$prefix}--progress-step svg {
199 position: relative;
200 z-index: 1;
201 width: $carbon--spacing-05;
202 height: $carbon--spacing-05;
203 border-radius: 50%;
204 margin: 9px $carbon--spacing-03 0 0;
205 fill: $interactive-01;
206 }
207
208 .#{$prefix}--progress-label {
209 line-height: 1.45;
210 max-width: rem(88px);
211 margin: $carbon--spacing-03 0 0 0;
212 white-space: nowrap;
213 overflow: hidden;
214 text-overflow: ellipsis;
215 @include type-style('body-short-01');
216 transition: box-shadow $transition--base $carbon--standard-easing;
217
218 &::before {
219 content: '';
220 display: block;
221 }
222 }
223
224 .#{$prefix}--progress-label:hover {
225 color: $link-01;
226 cursor: pointer;
227 box-shadow: 0 rem(1px) $link-01;
228 }
229
230 .#{$prefix}--progress-label:focus {
231 outline: none;
232 color: $link-01;
233 box-shadow: 0 rem(3px) 0 0 $link-01;
234 transition: box-shadow 0.05s $carbon--standard-easing;
235 }
236
237 .#{$prefix}--progress-label:active {
238 color: $interactive-01;
239 box-shadow: 0 rem(3px) 0 0 $interactive-01;
240 }
241
242 //OVERFLOW STYLING
243 .#{$prefix}--progress-label-overflow:hover ~ .#{$prefix}--tooltip,
244 .#{$prefix}--progress-label-overflow:focus ~ .#{$prefix}--tooltip {
245 visibility: visible;
246 }
247
248 .#{$prefix}--progress-step .#{$prefix}--tooltip .#{$prefix}--tooltip__caret {
249 margin-left: rem(10px);
250 }
251
252 .#{$prefix}--tooltip__text {
253 padding: 0;
254 margin: 0;
255 font-weight: normal;
256 }
257
258 //single line tooltip
259 .#{$prefix}--progress-step .#{$prefix}--tooltip {
260 min-width: rem(115px);
261 width: rem(125px);
262 min-height: $carbon--spacing-06;
263 margin-left: rem(22px);
264 margin-top: rem(40px);
265 padding: $carbon--spacing-03 $carbon--spacing-05;
266 display: block;
267 visibility: hidden;
268 @include type-style('body-long-01');
269 color: $inverse-01;
270 }
271
272 //multiline tooltip
273 .#{$prefix}--progress-step .#{$prefix}--tooltip_multi {
274 width: rem(150px);
275 height: auto;
276 @include type-style('body-long-01');
277 color: $inverse-01;
278 }
279
280 //OPTIONAL HELPER TEXT STYLING
281 .#{$prefix}--progress-optional {
282 position: absolute;
283 margin-left: $carbon--spacing-06;
284 margin-top: rem(28px);
285 @include type-style('label-01');
286 color: $text-01;
287 }
288
289 //CURRENT STYLING
290 .#{$prefix}--progress-step--current {
291 .#{$prefix}--progress-line {
292 background-color: $interactive-01;
293 }
294 }
295
296 .#{$prefix}--progress-step--current svg {
297 width: 14px;
298 height: 14px;
299 fill: $interactive-01;
300 margin-top: rem(9.5px);
301 }
302
303 //INCOMPLETE STYLING
304 .#{$prefix}--progress-step--incomplete {
305 svg {
306 fill: $ui-05;
307 }
308
309 .#{$prefix}--progress-line {
310 background-color: $ui-03;
311 }
312 }
313
314 //COMPLETED STYLING
315 .#{$prefix}--progress-step--complete {
316 .#{$prefix}--progress-line {
317 background-color: $interactive-01;
318 }
319 }
320
321 //interactive button
322 .#{$prefix}--progress-step-button {
323 display: flex;
324 }
325
326 //unclickable button
327 .#{$prefix}--progress-step-button--unclickable {
328 outline: none;
329 }
330
331 //DISABLED STYLING
332 .#{$prefix}--progress-step--disabled {
333 cursor: not-allowed;
334
335 svg {
336 fill: $disabled;
337 cursor: not-allowed;
338 }
339
340 .#{$prefix}--progress-label,
341 .#{$prefix}--progress-label:hover {
342 color: $disabled;
343 cursor: not-allowed;
344 box-shadow: none;
345 }
346
347 .#{$prefix}--progress-label:focus,
348 .#{$prefix}--progress-label:active {
349 outline: none;
350 box-shadow: none;
351 }
352
353 .#{$prefix}--progress-line {
354 cursor: not-allowed;
355 }
356
357 .#{$prefix}--progress-label-overflow:hover ~ .#{$prefix}--tooltip--definition .#{$prefix}--tooltip--definition__bottom {
358 display: none;
359 }
360 }
361
362 //ERROR STYLING
363 .#{$prefix}--progress__warning > path {
364 fill: $support-01;
365 }
366
367 // Skeleton State
368 .#{$prefix}--progress.#{$prefix}--skeleton .#{$prefix}--progress-label {
369 @include skeleton;
370 height: rem(12px);
371 width: rem(40px);
372 }
373
374 .#{$prefix}--progress--vertical {
375 display: block;
376 }
377
378 .#{$prefix}--progress--vertical .#{$prefix}--progress-step {
379 display: list-item;
380 min-height: 6rem;
381 width: initial;
382 min-width: initial;
383
384 svg {
385 display: inline-block;
386 margin: 0.1rem 0.5rem;
387 }
388 }
389
390 .#{$prefix}--progress--vertical .#{$prefix}--progress-step--current svg {
391 margin-left: 0.563rem;
392 }
393
394 .#{$prefix}--progress--vertical .#{$prefix}--progress-label {
395 display: inline-block;
396 width: initial;
397 max-width: none;
398 vertical-align: top;
399 margin: 0;
400 }
401
402 .#{$prefix}--progress--vertical .#{$prefix}--progress-step .bx--tooltip {
403 margin-top: 0.5rem;
404 }
405
406 .#{$prefix}--progress--vertical .#{$prefix}--progress-optional {
407 margin-top: initial;
408 position: initial;
409 margin-left: 2.25rem;
410 }
411
412 .#{$prefix}--progress--vertical .#{$prefix}--progress-line {
413 top: 0;
414 left: 0;
415 height: 100%;
416 width: 1px;
417 }
418}
419
420@include exports('progress-indicator') {
421 @if feature-flag-enabled('components-x') {
422 @include progress-indicator--x;
423 } @else {
424 @include progress-indicator;
425 }
426}