@tui/design-system 1.6.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +186 -1
- package/dist/themes/crystalski/index.css +38 -1
- package/dist/themes/crystalski/index.css.map +1 -1
- package/dist/themes/firstchoice/index.css +38 -1
- package/dist/themes/firstchoice/index.css.map +1 -1
- package/dist/themes/tui/index.css +40 -3
- package/dist/themes/tui/index.css.map +1 -1
- package/package.json +11 -10
- package/scss/lib/accordion/_mixins.scss +13 -6
- package/scss/lib/active-tag/_mixins.scss +16 -4
- package/scss/lib/cards/carousel/_index.scss +3 -0
- package/scss/lib/cards/carousel/_mixins.scss +164 -0
- package/scss/lib/cards/carousel/_variables.scss +13 -0
- package/scss/lib/cards/promotion/_index.scss +3 -0
- package/scss/lib/cards/promotion/_mixins.scss +275 -0
- package/scss/lib/cards/promotion/_variables.scss +14 -0
- package/scss/lib/cards/selectable/_mixins.scss +1 -1
- package/scss/lib/flyout-dropdown/_variables.scss +0 -1
- package/scss/lib/forms/input-switch/_mixins.scss +12 -6
- package/scss/lib/highlight-panel/_index.scss +2 -0
- package/scss/lib/highlight-panel/_mixins.scss +244 -0
- package/scss/lib/highlight-panel/_variables.scss +21 -0
- package/scss/lib/list/_mixins.scss +140 -70
- package/scss/lib/list/_variables.scss +2 -0
- package/scss/lib/modal/_variables.scss +1 -4
- package/scss/lib/patterns/review-card/_index.scss +3 -0
- package/scss/lib/patterns/review-card/_mixins.scss +283 -0
- package/scss/lib/patterns/review-card/_variables.scss +3 -0
- package/scss/lib/ratings-reviews/range-icons/_mixins.scss +16 -2
- package/scss/lib/ratings-reviews/range-icons/_variables.scss +2 -0
- package/scss/lib/skeleton/_variables.scss +2 -6
- package/scss/lib/tabs/_mixins.scss +117 -60
- package/scss/lib/tabs/anchor/_mixins.scss +36 -0
- package/scss/lib/tabs/in-page/_mixins.scss +82 -29
- package/scss/lib/tooltip/_mixins.scss +2 -0
- package/scss/mixins.scss +4 -0
- package/scss/themes/crystalski/_overrides.scss +27 -0
- package/scss/themes/crystalski/index.scss +9 -0
- package/scss/themes/crystalski/theme.json +14 -0
- package/scss/themes/firstchoice/_overrides.scss +29 -0
- package/scss/themes/firstchoice/index.scss +9 -0
- package/scss/themes/firstchoice/theme.json +20 -0
- package/scss/themes/tui/_overrides.scss +19 -0
- package/scss/themes/tui/index.scss +9 -0
- package/scss/themes/tui/theme.json +8 -0
- package/scss/variables/_primitives.scss +3 -0
- package/scss/variables/base-theme.json +234 -1
- package/scss/variables.scss +6 -0
- package/types/components.ts +39 -2
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
@use '../icon/mixins' as *;
|
|
5
5
|
|
|
6
6
|
$uilib-active-tag-included: false !default;
|
|
7
|
+
$uilib-active-tag-group-included: false !default;
|
|
7
8
|
|
|
8
9
|
// Builds active tag
|
|
9
10
|
@mixin uilib-active-tag() {
|
|
@@ -15,6 +16,16 @@ $uilib-active-tag-included: false !default;
|
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
18
|
|
|
19
|
+
@mixin uilib-active-tag-group() {
|
|
20
|
+
@if not $uilib-active-tag-group-included {
|
|
21
|
+
$uilib-active-tag-group-included: true !global;
|
|
22
|
+
|
|
23
|
+
@include uilib-icon;
|
|
24
|
+
@include uilib-link;
|
|
25
|
+
@include uilib-active-tag-group-master;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
18
29
|
@mixin uilib-active-tag-master() {
|
|
19
30
|
.uilib-active-tag {
|
|
20
31
|
display: flex;
|
|
@@ -73,16 +84,17 @@ $uilib-active-tag-included: false !default;
|
|
|
73
84
|
}
|
|
74
85
|
}
|
|
75
86
|
|
|
76
|
-
@mixin uilib-active-tag-group() {
|
|
77
|
-
@include uilib-icon;
|
|
78
|
-
@include uilib-link;
|
|
79
|
-
|
|
87
|
+
@mixin uilib-active-tag-group-master() {
|
|
80
88
|
.uilib-active-tag-group {
|
|
81
89
|
display: flex;
|
|
82
90
|
flex-wrap: wrap;
|
|
83
91
|
gap: var(--uilib-spacing-200);
|
|
84
92
|
align-items: center;
|
|
85
93
|
|
|
94
|
+
&__visually-hidden {
|
|
95
|
+
@include uilib-visually-hidden;
|
|
96
|
+
}
|
|
97
|
+
|
|
86
98
|
&__list {
|
|
87
99
|
display: flex;
|
|
88
100
|
flex-wrap: wrap;
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
// Carousel / _mixins
|
|
2
|
+
@use 'sass:map';
|
|
3
|
+
@use 'variables' as *;
|
|
4
|
+
@use '../../utility/mixins' as *;
|
|
5
|
+
@use '../../icon-button/mixins' as *;
|
|
6
|
+
|
|
7
|
+
$uilib-carousel-included: false !default;
|
|
8
|
+
|
|
9
|
+
@mixin uilib-carousel() {
|
|
10
|
+
@if not $uilib-carousel-included {
|
|
11
|
+
$uilib-carousel-included: true !global;
|
|
12
|
+
|
|
13
|
+
@include uilib-icon-button;
|
|
14
|
+
@include uilib-carousel-master;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@mixin uilib-carousel-master() {
|
|
19
|
+
.uilib-carousel {
|
|
20
|
+
position: relative;
|
|
21
|
+
|
|
22
|
+
display: block;
|
|
23
|
+
|
|
24
|
+
margin: var(--uilib-spacing-400) 0;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.uilib-carousel__viewport {
|
|
28
|
+
// `overflow-x: auto` forces `overflow-y` to `auto`, clipping card shadows and
|
|
29
|
+
// focus rings. The block padding (+ matching negative margin) gives shadow/focus
|
|
30
|
+
// room without changing height.
|
|
31
|
+
margin-block: calc(-1 * var(--uilib-carousel-viewport-padding));
|
|
32
|
+
padding-block: var(--uilib-carousel-viewport-padding);
|
|
33
|
+
|
|
34
|
+
overflow-x: auto;
|
|
35
|
+
overscroll-behavior-x: contain;
|
|
36
|
+
|
|
37
|
+
// Sizes `.uilib-carousel__slide` via `cqw` against the visible frame, not the
|
|
38
|
+
// track's own (overflowing) intrinsic width.
|
|
39
|
+
container-type: inline-size;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Once enhanced, the prev/next controls and drag/swipe are wired up as a replacement
|
|
43
|
+
// for native scrolling, so the native scrollbar is hidden. Before that (no-JS or
|
|
44
|
+
// init-failure fallback) the scrollbar stays visible — it's the only affordance that
|
|
45
|
+
// the content scrolls, since the controls don't work without the behaviour.
|
|
46
|
+
.uilib-carousel--enhanced .uilib-carousel__viewport {
|
|
47
|
+
// Embla drives movement via a transform, so native scrolling is disabled: a leftover
|
|
48
|
+
// `scrollLeft` after a resize would combine with the transform and reveal slivers of
|
|
49
|
+
// adjacent cards. `clip` (not `hidden`) keeps `overflow-y` visible for shadows.
|
|
50
|
+
overflow-x: clip;
|
|
51
|
+
|
|
52
|
+
scrollbar-width: none;
|
|
53
|
+
|
|
54
|
+
&::-webkit-scrollbar {
|
|
55
|
+
display: none;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.uilib-carousel__track {
|
|
60
|
+
display: flex;
|
|
61
|
+
|
|
62
|
+
// Slides carry their own spacing via padding (see __slide) — a track `gap` here
|
|
63
|
+
// would be mismeasured by Embla and clip the trailing slide.
|
|
64
|
+
gap: 0;
|
|
65
|
+
|
|
66
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
67
|
+
transition: transform var(--uilib-carousel-motion-duration) var(--uilib-carousel-motion-easing);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// One item per slide, always — the behaviour never re-parents consumer content; grouping
|
|
72
|
+
// N slides into one page (page variant) is done via Embla's `slidesToScroll`, not DOM
|
|
73
|
+
// wrapping. Each slide fills 1/N of the frame (`--uilib-carousel-visible`, set by the
|
|
74
|
+
// behaviour; 1 without JS), so N whole, equal-width cards are always shown.
|
|
75
|
+
.uilib-carousel__slide {
|
|
76
|
+
display: flex;
|
|
77
|
+
flex: 0 0 calc(100cqw / var(--uilib-carousel-visible, 1));
|
|
78
|
+
|
|
79
|
+
min-width: 0;
|
|
80
|
+
padding-inline: calc(var(--uilib-carousel-gap) / 2);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.uilib-carousel__item {
|
|
84
|
+
flex: 1;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.uilib-carousel__control--prev .uilib-icon {
|
|
88
|
+
-webkit-mask-image: var(--uilib-carousel-prev-icon);
|
|
89
|
+
mask-image: var(--uilib-carousel-prev-icon);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.uilib-carousel__control--next .uilib-icon {
|
|
93
|
+
-webkit-mask-image: var(--uilib-carousel-next-icon);
|
|
94
|
+
mask-image: var(--uilib-carousel-next-icon);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.uilib-carousel__counter {
|
|
98
|
+
color: var(--uilib-carousel-counter-color);
|
|
99
|
+
font: var(--uilib-carousel-counter-font);
|
|
100
|
+
white-space: nowrap;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.uilib-carousel--page,
|
|
104
|
+
.uilib-carousel--item {
|
|
105
|
+
display: flex;
|
|
106
|
+
flex-direction: column;
|
|
107
|
+
gap: var(--uilib-spacing-400);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Bleeds the viewport back out by the slide's own inline padding (see __slide) so
|
|
111
|
+
// cards land flush with the grid edge. Width must grow by the same amount the margin
|
|
112
|
+
// pulls in to actually bleed on a flex item.
|
|
113
|
+
// `position: relative` is load-bearing for the page (loop) variant: Embla measures
|
|
114
|
+
// slide/container positions with `offsetLeft` (relative to the offsetParent). Without
|
|
115
|
+
// it, the offsetParent is the outer `.uilib-carousel` (position:relative), and the
|
|
116
|
+
// bleed offsets the track by -gap/2 relative to it. On init the track has no transform
|
|
117
|
+
// so slides share that offsetParent and Embla's snap is 0 (correct); after a resize
|
|
118
|
+
// reInit the track already carries Embla's transform, which makes the track itself the
|
|
119
|
+
// slides' offsetParent — so Embla re-reads the slides at 0 while the track is still at
|
|
120
|
+
// -gap/2, shifting every snap by -gap/2 and knocking the cards off the grid (revealing
|
|
121
|
+
// a sliver of the next card at the right edge). Making the viewport the offsetParent
|
|
122
|
+
// keeps that reference stable across init and reInit, so the snap stays 0 either way.
|
|
123
|
+
.uilib-carousel--page .uilib-carousel__viewport,
|
|
124
|
+
.uilib-carousel--item .uilib-carousel__viewport {
|
|
125
|
+
position: relative;
|
|
126
|
+
|
|
127
|
+
width: calc(100% + var(--uilib-carousel-gap));
|
|
128
|
+
margin-inline: calc(var(--uilib-carousel-gap) / -2);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.uilib-carousel--page {
|
|
132
|
+
align-items: center;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.uilib-carousel__controls {
|
|
136
|
+
display: flex;
|
|
137
|
+
gap: var(--uilib-spacing-400);
|
|
138
|
+
justify-content: center;
|
|
139
|
+
align-items: center;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// The viewport's negative inline margin already brings the cards back to the true
|
|
143
|
+
// grid edge (see __viewport), so the footer needs no inset of its own to stay aligned.
|
|
144
|
+
.uilib-carousel__footer {
|
|
145
|
+
display: flex;
|
|
146
|
+
gap: var(--uilib-spacing-400);
|
|
147
|
+
align-items: center;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.uilib-carousel--item .uilib-carousel__controls {
|
|
151
|
+
gap: var(--uilib-spacing-200);
|
|
152
|
+
|
|
153
|
+
margin-left: auto;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Behaviour toggles this when everything fits (a single scroll snap): nothing to scroll.
|
|
157
|
+
.uilib-carousel--controls-hidden .uilib-carousel__controls {
|
|
158
|
+
display: none;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.uilib-carousel__announcement {
|
|
162
|
+
@include uilib-visually-hidden;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
@use '../../../variables/env-variables' as *;
|
|
2
|
+
|
|
3
|
+
// Carousel specific variables to allow theming
|
|
4
|
+
$uilib-carousel-variables: (
|
|
5
|
+
gap: var(--uilib-spacing-400),
|
|
6
|
+
viewport-padding: var(--uilib-spacing-200),
|
|
7
|
+
prev-icon: url('#{$uilib-assets-base-url}v3/icons/tui/standard/chevron-left.svg'),
|
|
8
|
+
next-icon: url('#{$uilib-assets-base-url}v3/icons/tui/standard/chevron-right.svg'),
|
|
9
|
+
counter-color: var(--uilib-color-text-body),
|
|
10
|
+
counter-font: var(--uilib-typography-body-medium),
|
|
11
|
+
motion-duration: 300ms,
|
|
12
|
+
motion-easing: ease-out,
|
|
13
|
+
) !default;
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
// Promo Banner / _mixins
|
|
2
|
+
@use '../../button/mixins' as *;
|
|
3
|
+
@use '../../divider/mixins' as *;
|
|
4
|
+
@use '../../icon/mixins' as *;
|
|
5
|
+
@use '../../info-tag/mixins' as *;
|
|
6
|
+
@use '../../link/mixins' as *;
|
|
7
|
+
@use '../../utility/mixins' as *;
|
|
8
|
+
|
|
9
|
+
$uilib-card-promotion-included: false !default;
|
|
10
|
+
$uilib-card-promotion-horizontal: 36rem;
|
|
11
|
+
|
|
12
|
+
@mixin uilib-card-promotion() {
|
|
13
|
+
@if not $uilib-card-promotion-included {
|
|
14
|
+
$uilib-card-promotion-included: true !global;
|
|
15
|
+
|
|
16
|
+
@include uilib-button;
|
|
17
|
+
@include uilib-divider;
|
|
18
|
+
@include uilib-icon;
|
|
19
|
+
@include uilib-info-tag;
|
|
20
|
+
@include uilib-link;
|
|
21
|
+
@include uilib-card-promotion-master;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@mixin uilib-card-promotion-master() {
|
|
26
|
+
.uilib-card-promotion {
|
|
27
|
+
container-name: uilib-card-promotion;
|
|
28
|
+
container-type: inline-size;
|
|
29
|
+
|
|
30
|
+
display: block;
|
|
31
|
+
|
|
32
|
+
width: 100%;
|
|
33
|
+
min-width: 0;
|
|
34
|
+
max-width: 100%;
|
|
35
|
+
box-sizing: border-box;
|
|
36
|
+
|
|
37
|
+
&--condensed {
|
|
38
|
+
.uilib-card-promotion__main-content,
|
|
39
|
+
.uilib-card-promotion__code-section {
|
|
40
|
+
gap: var(--uilib-spacing-200);
|
|
41
|
+
|
|
42
|
+
padding: var(--uilib-spacing-200);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.uilib-card-promotion__main-content {
|
|
46
|
+
row-gap: 0;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.uilib-card-promotion__code-container {
|
|
50
|
+
gap: var(--uilib-spacing-200);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.uilib-card-promotion__subcopy {
|
|
54
|
+
grid-column: 2;
|
|
55
|
+
|
|
56
|
+
display: block;
|
|
57
|
+
|
|
58
|
+
@container uilib-card-promotion (max-width: #{$uilib-card-promotion-horizontal}) {
|
|
59
|
+
display: flex;
|
|
60
|
+
flex-flow: column nowrap;
|
|
61
|
+
gap: 0;
|
|
62
|
+
align-items: flex-start;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
&__inner {
|
|
68
|
+
display: flex;
|
|
69
|
+
flex-flow: column nowrap;
|
|
70
|
+
|
|
71
|
+
@container uilib-card-promotion (min-width: #{$uilib-card-promotion-horizontal}) {
|
|
72
|
+
flex-flow: row nowrap;
|
|
73
|
+
align-items: stretch;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
&__main-content,
|
|
78
|
+
&__code-section {
|
|
79
|
+
position: relative;
|
|
80
|
+
z-index: 1;
|
|
81
|
+
|
|
82
|
+
width: 100%;
|
|
83
|
+
min-width: 0;
|
|
84
|
+
padding: var(--uilib-spacing-400);
|
|
85
|
+
|
|
86
|
+
&::before {
|
|
87
|
+
position: absolute;
|
|
88
|
+
inset: 0;
|
|
89
|
+
content: '';
|
|
90
|
+
z-index: -1;
|
|
91
|
+
|
|
92
|
+
display: block;
|
|
93
|
+
|
|
94
|
+
border-radius: var(--uilib-card-promotion-radius);
|
|
95
|
+
|
|
96
|
+
background: var(--uilib-card-promotion-bg-color);
|
|
97
|
+
|
|
98
|
+
box-shadow: var(--uilib-card-promotion-elevation);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
&__main-content {
|
|
103
|
+
display: grid;
|
|
104
|
+
grid-template-columns: auto 1fr;
|
|
105
|
+
gap: var(--uilib-spacing-200) var(--uilib-spacing-400);
|
|
106
|
+
align-items: start;
|
|
107
|
+
|
|
108
|
+
@container uilib-card-promotion (min-width: #{$uilib-card-promotion-horizontal}) {
|
|
109
|
+
flex: 1 1 0;
|
|
110
|
+
|
|
111
|
+
width: auto;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
&__code-section {
|
|
116
|
+
display: flex;
|
|
117
|
+
flex-flow: row nowrap;
|
|
118
|
+
gap: var(--uilib-spacing-400);
|
|
119
|
+
justify-content: flex-end;
|
|
120
|
+
align-items: center;
|
|
121
|
+
|
|
122
|
+
@container uilib-card-promotion (min-width: 36rem) {
|
|
123
|
+
flex: 0 0 auto;
|
|
124
|
+
justify-content: center;
|
|
125
|
+
align-self: stretch;
|
|
126
|
+
|
|
127
|
+
width: auto;
|
|
128
|
+
min-width: 17.4375rem; /* 279 / 16 */
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
&__divider {
|
|
133
|
+
position: relative;
|
|
134
|
+
z-index: 2;
|
|
135
|
+
|
|
136
|
+
width: auto;
|
|
137
|
+
margin: 0 var(--uilib-spacing-300);
|
|
138
|
+
|
|
139
|
+
background: var(--uilib-card-promotion-bg-color);
|
|
140
|
+
|
|
141
|
+
@container uilib-card-promotion (min-width: 36rem) {
|
|
142
|
+
margin: var(--uilib-spacing-300) 0;
|
|
143
|
+
|
|
144
|
+
border-top-width: 0;
|
|
145
|
+
border-right-width: var(--uilib-stroke-size-025);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
&__code-container {
|
|
150
|
+
display: inline-flex;
|
|
151
|
+
flex-wrap: wrap;
|
|
152
|
+
gap: var(--uilib-spacing-400);
|
|
153
|
+
justify-content: center;
|
|
154
|
+
align-items: center;
|
|
155
|
+
|
|
156
|
+
width: 100%;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
&__code {
|
|
160
|
+
flex: 0 1 auto;
|
|
161
|
+
|
|
162
|
+
min-width: 0;
|
|
163
|
+
|
|
164
|
+
color: var(--uilib-card-promotion-code-color);
|
|
165
|
+
font: var(--uilib-typography-label-medium-strong);
|
|
166
|
+
text-align: center;
|
|
167
|
+
text-transform: uppercase;
|
|
168
|
+
|
|
169
|
+
@container uilib-card-promotion (min-width: 36rem) {
|
|
170
|
+
flex: 1;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
&__cta {
|
|
175
|
+
display: inline-grid;
|
|
176
|
+
flex-shrink: 0;
|
|
177
|
+
|
|
178
|
+
// Both labels share one grid cell, so the wrapper always sizes to the wider of
|
|
179
|
+
// "Copy code" / "Code copied" — no JS measurement, immune to font/mount timing.
|
|
180
|
+
.uilib-card-promotion__cta-copy,
|
|
181
|
+
.uilib-card-promotion__cta-copied {
|
|
182
|
+
grid-area: 1 / 1;
|
|
183
|
+
|
|
184
|
+
white-space: nowrap;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.uilib-button__content {
|
|
188
|
+
white-space: nowrap;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.uilib-card-promotion__cta-copied {
|
|
192
|
+
visibility: hidden;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
&.copied {
|
|
196
|
+
.uilib-card-promotion__cta-copy {
|
|
197
|
+
visibility: hidden;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.uilib-card-promotion__cta-copied {
|
|
201
|
+
visibility: visible;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
&__icon {
|
|
207
|
+
grid-row: 1 / span 2;
|
|
208
|
+
|
|
209
|
+
flex-shrink: 0;
|
|
210
|
+
align-self: flex-start;
|
|
211
|
+
|
|
212
|
+
@container uilib-card-promotion (max-width: #{$uilib-card-promotion-horizontal}) {
|
|
213
|
+
grid-row: auto;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
&-copied {
|
|
217
|
+
-webkit-mask-image: var(--uilib-card-promotion-cta-copied-icon);
|
|
218
|
+
mask-image: var(--uilib-card-promotion-cta-copied-icon);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
&-copy {
|
|
222
|
+
-webkit-mask-image: var(--uilib-card-promotion-cta-copy-icon);
|
|
223
|
+
mask-image: var(--uilib-card-promotion-cta-copy-icon);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
&__headline-row {
|
|
228
|
+
display: flex;
|
|
229
|
+
flex-flow: column nowrap;
|
|
230
|
+
gap: var(--uilib-spacing-200);
|
|
231
|
+
align-items: flex-start;
|
|
232
|
+
|
|
233
|
+
min-width: 0;
|
|
234
|
+
|
|
235
|
+
@container uilib-card-promotion (min-width: 36rem) {
|
|
236
|
+
flex-flow: row wrap;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
&__headline {
|
|
241
|
+
flex: 1 0 0;
|
|
242
|
+
|
|
243
|
+
margin: 0;
|
|
244
|
+
|
|
245
|
+
color: var(--uilib-card-promotion-headline-color);
|
|
246
|
+
font: var(--uilib-typography-component-heading-large-strong);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
&__subcopy {
|
|
250
|
+
grid-column: 2;
|
|
251
|
+
|
|
252
|
+
margin: 0;
|
|
253
|
+
|
|
254
|
+
color: var(--uilib-card-promotion-subcopy-color);
|
|
255
|
+
font: var(--uilib-typography-body-medium);
|
|
256
|
+
|
|
257
|
+
@container uilib-card-promotion (max-width: #{$uilib-card-promotion-horizontal}) {
|
|
258
|
+
grid-column: 1 / -1;
|
|
259
|
+
|
|
260
|
+
display: flex;
|
|
261
|
+
flex-flow: column nowrap;
|
|
262
|
+
gap: var(--uilib-spacing-200);
|
|
263
|
+
align-items: flex-start;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
a {
|
|
267
|
+
color: var(--uilib-card-promotion-subcopy-link-color);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
&__announcement {
|
|
272
|
+
@include uilib-visually-hidden;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
@use '../../../variables/env-variables' as *;
|
|
2
|
+
|
|
3
|
+
// Promo Banner – variables
|
|
4
|
+
$uilib-card-promotion-variables: (
|
|
5
|
+
elevation: var(--uilib-elevation-100),
|
|
6
|
+
radius: var(--uilib-border-radius-400),
|
|
7
|
+
bg-color: var(--uilib-color-core-neutral),
|
|
8
|
+
headline-color: var(--uilib-color-text-strong),
|
|
9
|
+
subcopy-color: var(--uilib-color-text-body),
|
|
10
|
+
subcopy-link-color: var(--uilib-color-text-link),
|
|
11
|
+
code-color: var(--uilib-color-text-strong),
|
|
12
|
+
cta-copy-icon: url('#{$uilib-assets-base-url}v3/icons/tui/standard/copy.svg'),
|
|
13
|
+
cta-copied-icon: url('#{$uilib-assets-base-url}v3/icons/tui/standard/checkmark-circled-filled.svg'),
|
|
14
|
+
) !default;
|
|
@@ -25,7 +25,7 @@ $uilib-input-switch-included: false !default;
|
|
|
25
25
|
margin-bottom: var(--uilib-spacing-200);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
&__input {
|
|
28
|
+
&--input-switch &__input {
|
|
29
29
|
margin-top: 0;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
@@ -49,11 +49,13 @@ $uilib-input-switch-included: false !default;
|
|
|
49
49
|
font: var(--uilib-form-row-label-font);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
&:has(.uilib-input-switch__input
|
|
52
|
+
&:has(.uilib-input-switch__input:disabled),
|
|
53
|
+
&-input:disabled + .uilib-input-switch {
|
|
53
54
|
cursor: auto;
|
|
54
55
|
}
|
|
55
56
|
|
|
56
|
-
&:has(.uilib-input-switch__input:focus-visible)
|
|
57
|
+
&:has(.uilib-input-switch__input:focus-visible),
|
|
58
|
+
&-input:focus-visible + .uilib-input-switch {
|
|
57
59
|
@include uilib-focus;
|
|
58
60
|
|
|
59
61
|
&::before {
|
|
@@ -61,7 +63,8 @@ $uilib-input-switch-included: false !default;
|
|
|
61
63
|
}
|
|
62
64
|
}
|
|
63
65
|
|
|
64
|
-
&__input
|
|
66
|
+
&__input,
|
|
67
|
+
&-input {
|
|
65
68
|
position: absolute;
|
|
66
69
|
|
|
67
70
|
width: 0;
|
|
@@ -71,7 +74,8 @@ $uilib-input-switch-included: false !default;
|
|
|
71
74
|
|
|
72
75
|
opacity: 0;
|
|
73
76
|
|
|
74
|
-
&:checked + .uilib-input-switch__track
|
|
77
|
+
&:checked + .uilib-input-switch__track,
|
|
78
|
+
&:checked + .uilib-input-switch .uilib-input-switch__track {
|
|
75
79
|
border-color: var(--uilib-input-switch-track-selected-border-color);
|
|
76
80
|
|
|
77
81
|
background-color: var(--uilib-input-switch-track-selected-color);
|
|
@@ -83,7 +87,9 @@ $uilib-input-switch-included: false !default;
|
|
|
83
87
|
}
|
|
84
88
|
}
|
|
85
89
|
|
|
86
|
-
|
|
90
|
+
/* stylelint-disable-next-line order/order */
|
|
91
|
+
&:disabled + .uilib-input-switch__track,
|
|
92
|
+
&:disabled + .uilib-input-switch .uilib-input-switch__track {
|
|
87
93
|
border-color: var(--uilib-input-switch-track-disabled-border-color);
|
|
88
94
|
|
|
89
95
|
background-color: var(--uilib-input-switch-track-color-disabled);
|