@shohojdhara/atomix 0.5.5 → 0.5.6
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/README.md +43 -21
- package/dist/atomix.css +647 -1395
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +5 -5
- package/dist/atomix.min.css.map +1 -1
- package/dist/core.d.ts +100 -8
- package/dist/core.js +89 -79
- package/dist/core.js.map +1 -1
- package/dist/forms.js +1 -7
- package/dist/forms.js.map +1 -1
- package/dist/heavy.js +7 -3
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +179 -54
- package/dist/index.esm.js +112 -99
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +112 -99
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/package.json +1 -1
- package/src/components/Accordion/Accordion.tsx +40 -25
- package/src/components/Breadcrumb/Breadcrumb.tsx +22 -13
- package/src/components/Button/Button.tsx +4 -5
- package/src/components/Callout/Callout.tsx +98 -96
- package/src/components/Card/Card.tsx +117 -103
- package/src/components/Card/index.ts +7 -5
- package/src/components/Dropdown/Dropdown.tsx +27 -8
- package/src/components/EdgePanel/EdgePanel.tsx +7 -2
- package/src/components/Modal/Modal.tsx +27 -8
- package/src/components/Spinner/Spinner.tsx +60 -43
- package/src/components/Tabs/Tabs.tsx +163 -149
- package/src/lib/composables/useInput.ts +11 -9
- package/src/lib/types/components.ts +84 -0
- package/src/styles/01-settings/_settings.background.scss +2 -1
- package/src/styles/02-tools/_tools.background.scss +100 -294
- package/src/styles/06-components/_components.card.scss +2 -2
- package/src/styles/99-utilities/_utilities.link.scss +4 -5
|
@@ -1,14 +1,75 @@
|
|
|
1
|
-
@use 'sass:meta';
|
|
2
|
-
@use 'sass:string';
|
|
3
1
|
@use 'sass:math';
|
|
4
2
|
@use 'sass:color';
|
|
5
3
|
@use 'sass:map';
|
|
6
4
|
@use 'sass:list';
|
|
7
5
|
@use '../01-settings/settings.background' as *;
|
|
8
|
-
@use '../01-settings/settings.config' as *;
|
|
9
6
|
@use '../01-settings/settings.colors' as *;
|
|
10
|
-
|
|
7
|
+
/* Background utility simplification
|
|
8
|
+
* - Consolidates duplicated glass, mesh, shadow, border, and noise patterns into private helpers.
|
|
9
|
+
* - Replaces magic values with local token aliases backed by existing background settings.
|
|
10
|
+
* - Flattens variant and interaction branching, keeps public mixin signatures intact, and removes old backdrop prefixes.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
$_bg-highlight: $white !default;
|
|
14
|
+
$_bg-shadow: $black !default;
|
|
15
|
+
$_bg-filters: ('glass': blur(12px) saturate(1.4), 'solid': blur(8px), 'mesh': blur(16px)) !default;
|
|
16
|
+
$_bg-motion: ('base': 0.3s, 'press': 0.2s, 'easing': cubic-bezier(0.4, 0, 0.2, 1), 'scale': 0.98) !default;
|
|
17
|
+
$_bg-glass: ('angle': 110deg, 'edge-angle': 180deg, 'edge-stop': 30%, 'ambient-stop': 60%, 'ambient-size': ellipse 120% 80% at 50% 120%) !default;
|
|
18
|
+
$_bg-states: ('base': ('shimmer': (0.08, 0.12, 0.08), 'edge': (0.15, 0.05), 'mix': (0.13, 0, -0.1, 0.03), 'ambient': 0.4), 'hover': ('shimmer': (0.1, 0.15, 0.1), 'edge': (0.18, 0.08), 'mix': (0.16, 0, -0.12, 0.04), 'ambient': 0.5), 'active': ('edge': (0.12, 0.05), 'mix': (0.18, 0, -0.09))) !default;
|
|
19
|
+
$_bg-shadow-ambient: ('base': 0 2px 4px rgba($_bg-shadow, 0.05), 'hover': 0 2px 4px rgba($_bg-shadow, 0.08)) !default;
|
|
20
|
+
|
|
21
|
+
// Changelog: Added a shared color-mix helper so all variants use the same tokenized transparency math.
|
|
22
|
+
@function _bg-mix($color, $weight) { @return color-mix(in srgb, #{$color} #{math.percentage($weight)}, transparent); }
|
|
23
|
+
|
|
24
|
+
// Changelog: Added compact token readers to remove repeated literal lookups from the public mixin.
|
|
25
|
+
@function _bg-state($state, $group) { @return map.get($_bg-states, $state, $group); }
|
|
26
|
+
@function _bg-surface($state, $transparency) { @return if($state == 'hover', $background-transparency-hover, if($state == 'active', $background-transparency-active, $transparency)); }
|
|
27
|
+
@function _bg-noise-image() { @return url("data:image/svg+xml,%3Csvg viewBox='0 0 #{$background-noise-scale} #{$background-noise-scale}' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' /%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' /%3E%3C/svg%3E"); }
|
|
28
|
+
|
|
29
|
+
// Changelog: Extracted glass background generation so base, hover, and active states reuse one recipe.
|
|
30
|
+
@function _bg-glass($color, $transparency, $state: 'base') {
|
|
31
|
+
$surface: _bg-surface($state, $transparency);
|
|
32
|
+
$edge: _bg-state($state, 'edge');
|
|
33
|
+
$mix: _bg-state($state, 'mix');
|
|
34
|
+
@if $state == 'active' {
|
|
35
|
+
@return linear-gradient(map.get($_bg-glass, 'edge-angle'), rgba($_bg-highlight, list.nth($edge, 1)) 0%, rgba($_bg-highlight, list.nth($edge, 2)) 20%, transparent 40%), linear-gradient($background-gradient-angle, _bg-mix($color, $surface + list.nth($mix, 1)) 0%, _bg-mix($color, $surface + list.nth($mix, 2)) 50%, _bg-mix($color, $surface + list.nth($mix, 3)) 100%);
|
|
36
|
+
}
|
|
37
|
+
$shimmer: _bg-state($state, 'shimmer');
|
|
38
|
+
@return linear-gradient(map.get($_bg-glass, 'angle'), transparent 0%, rgba($_bg-highlight, list.nth($shimmer, 1)) 45%, rgba($_bg-highlight, list.nth($shimmer, 2)) 50%, rgba($_bg-highlight, list.nth($shimmer, 3)) 55%, transparent 100%), linear-gradient(map.get($_bg-glass, 'edge-angle'), rgba($_bg-highlight, list.nth($edge, 1)) 0%, rgba($_bg-highlight, list.nth($edge, 2)) 15%, transparent map.get($_bg-glass, 'edge-stop')), linear-gradient($background-gradient-angle, _bg-mix($color, $surface + list.nth($mix, 1)) 0%, _bg-mix($color, $surface + list.nth($mix, 2)) 40%, _bg-mix($color, $surface + list.nth($mix, 3)) 70%, _bg-mix($color, $surface + list.nth($mix, 4)) 100%), radial-gradient(map.get($_bg-glass, 'ambient-size'), _bg-mix($color, $surface * map.get($_bg-states, $state, 'ambient')) 0%, transparent map.get($_bg-glass, 'ambient-stop'));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Changelog: Extracted shadow composition so base and hover shadows share one loop and corrected opacity scaling.
|
|
42
|
+
@function _bg-shadows($color, $hover: false) {
|
|
43
|
+
$shadows: (inset 0 1px 0 rgba($_bg-highlight, if($hover, 0.15, 0.1)));
|
|
44
|
+
$multiplier: if($hover, 1.5, 1);
|
|
45
|
+
@for $i from 1 through $background-shadow-layers {
|
|
46
|
+
$blur: $background-shadow-blur-base * $i * $multiplier;
|
|
47
|
+
$opacity: math.div($background-shadow-intensity, $i) * $multiplier;
|
|
48
|
+
$shadows: list.append($shadows, 0 $blur ($blur * 2) if($i == 1, $background-shadow-spread, 0) _bg-mix($color, $opacity), comma);
|
|
49
|
+
}
|
|
50
|
+
@return list.append($shadows, map.get($_bg-shadow-ambient, if($hover, 'hover', 'base')), comma);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Changelog: Extracted a shared overlay scaffold so border, noise, and shimmer pseudo-elements stay aligned.
|
|
54
|
+
@mixin _bg-overlay($z) { content: ''; position: absolute; inset: 0; border-radius: inherit; pointer-events: none; z-index: $z; }
|
|
55
|
+
|
|
56
|
+
// Changelog: Moved the glass border effect into a private helper to remove duplicate pseudo-element declarations.
|
|
57
|
+
@mixin _bg-border() {
|
|
58
|
+
&::before { @include _bg-overlay(1); padding: $background-border-width; background: linear-gradient($background-gradient-angle, rgba($_bg-highlight, $background-border-opacity * 1.2) 0%, rgba($_bg-highlight, $background-border-opacity * 0.6) 50%, rgba($_bg-highlight, $background-border-opacity * 0.3) 100%); -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); -webkit-mask-composite: xor; mask-composite: exclude; }
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Changelog: Moved the noise overlay into a helper so the SVG asset and sizing are defined once.
|
|
62
|
+
@mixin _bg-noise() {
|
|
63
|
+
&::after { @include _bg-overlay(2); opacity: $background-noise-opacity; background-image: _bg-noise-image(); background-size: #{$background-noise-scale}px; mix-blend-mode: overlay; }
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Changelog: Moved the shimmer overlay into a helper so the variant branch only selects the effect.
|
|
67
|
+
@mixin _bg-shimmer() {
|
|
68
|
+
overflow: hidden;
|
|
69
|
+
&::before { @include _bg-overlay(1); background: linear-gradient(map.get($_bg-glass, 'angle'), transparent 0%, rgba($_bg-highlight, $background-shimmer-intensity) 50%, transparent 100%); transform: translateX(-100%); animation: shimmer $background-shimmer-duration infinite; }
|
|
70
|
+
}
|
|
11
71
|
|
|
72
|
+
// Changelog: Rebuilt the main utility mixin around private helpers to preserve the API while removing nesting and redundancy.
|
|
12
73
|
/// Dynamic background mixin with glass morphism effects
|
|
13
74
|
/// @param {Color} $color - Base color for the background
|
|
14
75
|
/// @param {Number} $transparency [0.65] - Transparency level (0-1)
|
|
@@ -28,326 +89,71 @@
|
|
|
28
89
|
$enable-noise: $background-enable-noise-texture,
|
|
29
90
|
$variant: 'glass'
|
|
30
91
|
) {
|
|
31
|
-
// Base positioning for pseudo-elements
|
|
32
92
|
position: relative;
|
|
33
93
|
isolation: isolate;
|
|
34
|
-
|
|
35
|
-
// ─── Glass Variant (Default) ────────────────────────────────────────────────
|
|
36
94
|
@if $variant == 'glass' {
|
|
37
|
-
@if $enable-transparency {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
transparent 0%,
|
|
44
|
-
rgba(255, 255, 255, 0.08) 45%,
|
|
45
|
-
rgba(255, 255, 255, 0.12) 50%,
|
|
46
|
-
rgba(255, 255, 255, 0.08) 55%,
|
|
47
|
-
transparent 100%
|
|
48
|
-
),
|
|
49
|
-
// Top edge highlight
|
|
50
|
-
linear-gradient(
|
|
51
|
-
180deg,
|
|
52
|
-
rgba(255, 255, 255, 0.15) 0%,
|
|
53
|
-
rgba(255, 255, 255, 0.05) 15%,
|
|
54
|
-
transparent 30%
|
|
55
|
-
),
|
|
56
|
-
// Main glass layer with depth
|
|
57
|
-
linear-gradient(
|
|
58
|
-
$background-gradient-angle,
|
|
59
|
-
color-mix(in srgb, #{$color} 78%, transparent) 0%,
|
|
60
|
-
color-mix(in srgb, #{$color} 65%, transparent) 40%,
|
|
61
|
-
color-mix(in srgb, #{$color} 55%, transparent) 70%,
|
|
62
|
-
color-mix(in srgb, #{$color} 68%, transparent) 100%
|
|
63
|
-
),
|
|
64
|
-
// Bottom ambient shadow
|
|
65
|
-
radial-gradient(
|
|
66
|
-
ellipse 120% 80% at 50% 120%,
|
|
67
|
-
color-mix(in srgb, #{$color} 26%, transparent) 0%,
|
|
68
|
-
transparent 60%
|
|
69
|
-
);
|
|
70
|
-
backdrop-filter: blur(12px) saturate(1.4);
|
|
71
|
-
-webkit-backdrop-filter: blur(12px) saturate(1.4);
|
|
72
|
-
} @else {
|
|
73
|
-
background-color: color-mix(
|
|
74
|
-
in srgb,
|
|
75
|
-
#{$color} 65%,
|
|
76
|
-
transparent
|
|
77
|
-
);
|
|
78
|
-
backdrop-filter: blur(8px);
|
|
79
|
-
-webkit-backdrop-filter: blur(8px);
|
|
80
|
-
}
|
|
95
|
+
@if $enable-transparency and $enable-gradient {
|
|
96
|
+
background: _bg-glass($color, $transparency);
|
|
97
|
+
backdrop-filter: map.get($_bg-filters, 'glass');
|
|
98
|
+
} @else if $enable-transparency {
|
|
99
|
+
background-color: _bg-mix($color, $transparency);
|
|
100
|
+
backdrop-filter: map.get($_bg-filters, 'solid');
|
|
81
101
|
} @else {
|
|
82
102
|
background-color: $color;
|
|
83
103
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
$background-gradient-angle,
|
|
95
|
-
rgba(255, 255, 255, $background-border-opacity * 1.2) 0%,
|
|
96
|
-
rgba(255, 255, 255, $background-border-opacity * 0.6) 50%,
|
|
97
|
-
rgba(255, 255, 255, $background-border-opacity * 0.3) 100%
|
|
98
|
-
);
|
|
99
|
-
-webkit-mask:
|
|
100
|
-
linear-gradient(#fff 0 0) content-box,
|
|
101
|
-
linear-gradient(#fff 0 0);
|
|
102
|
-
-webkit-mask-composite: xor;
|
|
103
|
-
mask-composite: exclude;
|
|
104
|
-
pointer-events: none;
|
|
105
|
-
z-index: 1;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// Noise texture overlay
|
|
110
|
-
@if $enable-noise {
|
|
111
|
-
&::after {
|
|
112
|
-
content: '';
|
|
113
|
-
position: absolute;
|
|
114
|
-
inset: 0;
|
|
115
|
-
border-radius: inherit;
|
|
116
|
-
opacity: $background-noise-opacity;
|
|
117
|
-
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 #{$background-noise-scale} #{$background-noise-scale}' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' /%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' /%3E%3C/svg%3E");
|
|
118
|
-
background-size: #{$background-noise-scale}px;
|
|
119
|
-
pointer-events: none;
|
|
120
|
-
mix-blend-mode: overlay;
|
|
121
|
-
z-index: 2;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// ─── Solid Variant ──────────────────────────────────────────────────────────
|
|
127
|
-
@else if $variant == 'solid' {
|
|
128
|
-
background-color: $color;
|
|
129
|
-
@if $enable-gradient {
|
|
130
|
-
background: linear-gradient(
|
|
131
|
-
$background-gradient-angle,
|
|
132
|
-
color.adjust($color, $lightness: 5%) 0%,
|
|
133
|
-
$color 50%,
|
|
134
|
-
color.adjust($color, $lightness: -5%) 100%
|
|
135
|
-
);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// ─── Mesh Gradient Variant ──────────────────────────────────────────────────
|
|
140
|
-
@else if $variant == 'mesh' {
|
|
141
|
-
background:
|
|
142
|
-
radial-gradient(
|
|
143
|
-
circle at 20% 30%,
|
|
144
|
-
color-mix(in srgb, #{$color} 40%, transparent) 0%,
|
|
145
|
-
transparent 50%
|
|
146
|
-
),
|
|
147
|
-
radial-gradient(
|
|
148
|
-
circle at 80% 70%,
|
|
149
|
-
color-mix(in srgb, #{$color} 35%, transparent) 0%,
|
|
150
|
-
transparent 50%
|
|
151
|
-
),
|
|
152
|
-
radial-gradient(
|
|
153
|
-
circle at 50% 50%,
|
|
154
|
-
color-mix(in srgb, #{$color} 65%, transparent) 0%,
|
|
155
|
-
color-mix(in srgb, #{$color} 39%, transparent) 100%
|
|
156
|
-
);
|
|
157
|
-
backdrop-filter: blur(16px);
|
|
158
|
-
-webkit-backdrop-filter: blur(16px);
|
|
104
|
+
@if $enable-border { @include _bg-border(); }
|
|
105
|
+
@if $enable-noise { @include _bg-noise(); }
|
|
106
|
+
} @else if $variant == 'solid' {
|
|
107
|
+
background: if($enable-gradient, linear-gradient($background-gradient-angle, color.adjust($color, $lightness: 5%) 0%, $color 50%, color.adjust($color, $lightness: -5%) 100%), $color);
|
|
108
|
+
} @else if $variant == 'mesh' {
|
|
109
|
+
background: radial-gradient(circle at 20% 30%, _bg-mix($color, 0.4) 0%, transparent 50%), radial-gradient(circle at 80% 70%, _bg-mix($color, 0.35) 0%, transparent 50%), radial-gradient(circle at 50% 50%, _bg-mix($color, $transparency) 0%, _bg-mix($color, 0.39) 100%);
|
|
110
|
+
backdrop-filter: map.get($_bg-filters, 'mesh');
|
|
111
|
+
} @else if $variant == 'shimmer' {
|
|
112
|
+
background: _bg-mix($color, 0.75);
|
|
113
|
+
@include _bg-shimmer();
|
|
159
114
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
@
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
);
|
|
168
|
-
overflow: hidden;
|
|
169
|
-
|
|
170
|
-
&::before {
|
|
171
|
-
content: '';
|
|
172
|
-
position: absolute;
|
|
173
|
-
inset: 0;
|
|
174
|
-
background: linear-gradient(
|
|
175
|
-
110deg,
|
|
176
|
-
transparent 0%,
|
|
177
|
-
rgba(255, 255, 255, $background-shimmer-intensity) 50%,
|
|
178
|
-
transparent 100%
|
|
179
|
-
);
|
|
180
|
-
transform: translateX(-100%);
|
|
181
|
-
animation: shimmer $background-shimmer-duration infinite;
|
|
182
|
-
pointer-events: none;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
// ─── Shadow Layers ──────────────────────────────────────────────────────────
|
|
187
|
-
@if $enable-shadow {
|
|
188
|
-
$shadow-list: ();
|
|
189
|
-
|
|
190
|
-
// Inner glow
|
|
191
|
-
$shadow-list: list.append(
|
|
192
|
-
$shadow-list,
|
|
193
|
-
inset 0 1px 0 rgba(255, 255, 255, 0.1),
|
|
194
|
-
comma
|
|
195
|
-
);
|
|
196
|
-
|
|
197
|
-
// Layered outer shadows
|
|
198
|
-
@for $i from 1 through $background-shadow-layers {
|
|
199
|
-
$blur: $background-shadow-blur-base * $i;
|
|
200
|
-
$spread: if($i == 1, $background-shadow-spread, 0);
|
|
201
|
-
$opacity: math.div($background-shadow-intensity, $i);
|
|
202
|
-
|
|
203
|
-
$shadow-list: list.append(
|
|
204
|
-
$shadow-list,
|
|
205
|
-
0 #{$blur} #{$blur * 2} #{$spread} color-mix(in srgb, #{$color} #{math.percentage($opacity * 100)}, transparent),
|
|
206
|
-
comma
|
|
207
|
-
);
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// Ambient shadow
|
|
211
|
-
$shadow-list: list.append(
|
|
212
|
-
$shadow-list,
|
|
213
|
-
0 2px 4px rgba(0, 0, 0, 0.05),
|
|
214
|
-
comma
|
|
215
|
-
);
|
|
216
|
-
|
|
217
|
-
box-shadow: $shadow-list;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
// ─── Hover & Active States ──────────────────────────────────────────────────
|
|
221
|
-
transition:
|
|
222
|
-
background 0.3s cubic-bezier(0.4, 0, 0.2, 1),
|
|
223
|
-
box-shadow 0.3s cubic-bezier(0.4, 0, 0.2, 1),
|
|
224
|
-
transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
225
|
-
|
|
226
|
-
@media (hover: hover) {
|
|
227
|
-
&:hover {
|
|
228
|
-
@if $variant == 'glass' and $enable-transparency {
|
|
229
|
-
& {
|
|
230
|
-
background:
|
|
231
|
-
linear-gradient(
|
|
232
|
-
110deg,
|
|
233
|
-
transparent 0%,
|
|
234
|
-
rgba(255, 255, 255, 0.1) 45%,
|
|
235
|
-
rgba(255, 255, 255, 0.15) 50%,
|
|
236
|
-
rgba(255, 255, 255, 0.1) 55%,
|
|
237
|
-
transparent 100%
|
|
238
|
-
),
|
|
239
|
-
linear-gradient(
|
|
240
|
-
180deg,
|
|
241
|
-
rgba(255, 255, 255, 0.18) 0%,
|
|
242
|
-
rgba(255, 255, 255, 0.08) 15%,
|
|
243
|
-
transparent 30%
|
|
244
|
-
),
|
|
245
|
-
linear-gradient(
|
|
246
|
-
$background-gradient-angle,
|
|
247
|
-
color-mix(in srgb, #{$color} 96%, transparent) 0%,
|
|
248
|
-
color-mix(in srgb, #{$color} 80%, transparent) 40%,
|
|
249
|
-
color-mix(in srgb, #{$color} 68%, transparent) 70%,
|
|
250
|
-
color-mix(in srgb, #{$color} 84%, transparent) 100%
|
|
251
|
-
),
|
|
252
|
-
radial-gradient(
|
|
253
|
-
ellipse 120% 80% at 50% 120%,
|
|
254
|
-
color-mix(in srgb, #{$color} 40%, transparent) 0%,
|
|
255
|
-
transparent 60%
|
|
256
|
-
);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
@if $enable-shadow {
|
|
261
|
-
& {
|
|
262
|
-
box-shadow:
|
|
263
|
-
inset 0 1px 0 rgba(255, 255, 255, 0.15),
|
|
264
|
-
0 #{$background-shadow-blur-base * 1.5} #{$background-shadow-blur-base * 3} #{$background-shadow-spread} color-mix(in srgb, #{$color} #{math.percentage($background-shadow-intensity * 150)}, transparent),
|
|
265
|
-
0 #{$background-shadow-blur-base * 2.5} #{$background-shadow-blur-base * 5} 0 color-mix(in srgb, #{$color} #{math.percentage($background-shadow-intensity * 100)}, transparent),
|
|
266
|
-
0 2px 4px rgba(0, 0, 0, 0.08);
|
|
267
|
-
}
|
|
115
|
+
@if $enable-shadow { box-shadow: _bg-shadows($color); }
|
|
116
|
+
transition: background map.get($_bg-motion, 'base') map.get($_bg-motion, 'easing'), box-shadow map.get($_bg-motion, 'base') map.get($_bg-motion, 'easing');
|
|
117
|
+
@if $background-enable-hover-effects {
|
|
118
|
+
@media (hover: hover) {
|
|
119
|
+
&:hover {
|
|
120
|
+
@if $variant == 'glass' and $enable-transparency { background: _bg-glass($color, $transparency, 'hover'); }
|
|
121
|
+
@if $enable-shadow { box-shadow: _bg-shadows($color, true); }
|
|
268
122
|
}
|
|
269
123
|
}
|
|
270
124
|
}
|
|
271
|
-
|
|
272
125
|
&:active {
|
|
273
|
-
@if $variant == 'glass' and $enable-transparency {
|
|
274
|
-
& {
|
|
275
|
-
background:
|
|
276
|
-
linear-gradient(
|
|
277
|
-
180deg,
|
|
278
|
-
rgba(255, 255, 255, 0.12) 0%,
|
|
279
|
-
rgba(255, 255, 255, 0.05) 20%,
|
|
280
|
-
transparent 40%
|
|
281
|
-
),
|
|
282
|
-
linear-gradient(
|
|
283
|
-
$background-gradient-angle,
|
|
284
|
-
color-mix(in srgb, #{$color} 108%, transparent) 0%,
|
|
285
|
-
color-mix(in srgb, #{$color} 90%, transparent) 50%,
|
|
286
|
-
color-mix(in srgb, #{$color} 81%, transparent) 100%
|
|
287
|
-
);
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
& {
|
|
291
|
-
transform: scale(0.98);
|
|
292
|
-
}
|
|
126
|
+
@if $variant == 'glass' and $enable-transparency { background: _bg-glass($color, $transparency, 'active'); }
|
|
293
127
|
}
|
|
294
128
|
}
|
|
295
129
|
|
|
296
|
-
//
|
|
130
|
+
// Changelog: Kept the public animation name intact while trimming it to the minimal required transform states.
|
|
297
131
|
@keyframes shimmer {
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
}
|
|
301
|
-
100% {
|
|
302
|
-
transform: translateX(200%);
|
|
303
|
-
}
|
|
132
|
+
from { transform: translateX(-100%); }
|
|
133
|
+
to { transform: translateX(200%); }
|
|
304
134
|
}
|
|
305
135
|
|
|
136
|
+
// Changelog: Preserved the public glass wrapper and routed it through the simplified core mixin.
|
|
306
137
|
/// Simplified dynamic background for quick usage
|
|
307
138
|
/// @param {Color} $color - Base color
|
|
308
139
|
/// @param {Number} $transparency [0.65] - Transparency level
|
|
309
140
|
@mixin glass-background($color, $transparency: $background-transparency) {
|
|
310
|
-
@include dynamic-background(
|
|
311
|
-
$color: $color,
|
|
312
|
-
$transparency: $transparency,
|
|
313
|
-
$enable-transparency: true,
|
|
314
|
-
$enable-gradient: true,
|
|
315
|
-
$enable-shadow: true,
|
|
316
|
-
$variant: 'glass'
|
|
317
|
-
);
|
|
141
|
+
@include dynamic-background($color, $transparency, true, true, true, false, $background-enable-noise-texture, 'glass');
|
|
318
142
|
}
|
|
319
143
|
|
|
144
|
+
// Changelog: Preserved the solid wrapper while delegating the implementation to the shared utility mixin.
|
|
320
145
|
/// Solid background with subtle gradient
|
|
321
146
|
/// @param {Color} $color - Base color
|
|
322
|
-
@mixin solid-background($color) {
|
|
323
|
-
@include dynamic-background(
|
|
324
|
-
$color: $color,
|
|
325
|
-
$variant: 'solid',
|
|
326
|
-
$enable-gradient: true,
|
|
327
|
-
$enable-shadow: false
|
|
328
|
-
);
|
|
329
|
-
}
|
|
147
|
+
@mixin solid-background($color) { @include dynamic-background($color, $background-transparency, false, true, false, false, false, 'solid'); }
|
|
330
148
|
|
|
149
|
+
// Changelog: Preserved the mesh wrapper and kept the same defaults through the refactored core mixin.
|
|
331
150
|
/// Mesh gradient background
|
|
332
151
|
/// @param {Color} $color - Base color
|
|
333
152
|
/// @param {Number} $transparency [0.65] - Transparency level
|
|
334
|
-
@mixin mesh-background($color, $transparency: $background-transparency) {
|
|
335
|
-
@include dynamic-background(
|
|
336
|
-
$color: $color,
|
|
337
|
-
$transparency: $transparency,
|
|
338
|
-
$variant: 'mesh',
|
|
339
|
-
$enable-shadow: true
|
|
340
|
-
);
|
|
341
|
-
}
|
|
153
|
+
@mixin mesh-background($color, $transparency: $background-transparency) { @include dynamic-background($color, $transparency, true, true, true, false, false, 'mesh'); }
|
|
342
154
|
|
|
155
|
+
// Changelog: Preserved the shimmer wrapper while delegating effect composition to the shared helpers.
|
|
343
156
|
/// Shimmer effect background
|
|
344
157
|
/// @param {Color} $color - Base color
|
|
345
158
|
/// @param {Number} $transparency [0.65] - Transparency level
|
|
346
|
-
@mixin shimmer-background($color, $transparency: $background-transparency) {
|
|
347
|
-
@include dynamic-background(
|
|
348
|
-
$color: $color,
|
|
349
|
-
$transparency: $transparency,
|
|
350
|
-
$variant: 'shimmer',
|
|
351
|
-
$enable-shadow: false
|
|
352
|
-
);
|
|
353
|
-
}
|
|
159
|
+
@mixin shimmer-background($color, $transparency: $background-transparency) { @include dynamic-background($color, $transparency, true, true, false, false, false, 'shimmer'); }
|
|
@@ -307,7 +307,7 @@
|
|
|
307
307
|
}
|
|
308
308
|
|
|
309
309
|
&:active:not(&--disabled) {
|
|
310
|
-
transform: translateY(
|
|
310
|
+
transform: translateY(-2px); // Keep the same transform as hover state to prevent scale down effect
|
|
311
311
|
}
|
|
312
312
|
}
|
|
313
313
|
|
|
@@ -320,7 +320,7 @@
|
|
|
320
320
|
}
|
|
321
321
|
|
|
322
322
|
&:active:not(&--disabled) {
|
|
323
|
-
transform: translateY(
|
|
323
|
+
transform: translateY(-2px); // Keep the same transform as hover state to prevent scale down effect
|
|
324
324
|
}
|
|
325
325
|
|
|
326
326
|
// Hover elevation modifiers
|
|
@@ -64,12 +64,11 @@ $utilities-link: (
|
|
|
64
64
|
$enable-important-utilities: true !default;
|
|
65
65
|
$link-shade-percentage: 15% !default;
|
|
66
66
|
|
|
67
|
-
// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251
|
|
68
67
|
@each $color, $value in color-maps.$theme-colors {
|
|
69
68
|
.u-link-#{$color} {
|
|
70
|
-
color:
|
|
69
|
+
color: rgba(var(--#{config.$prefix}#{$color}-rgb), var(--#{config.$prefix}u-link-opacity, 1))
|
|
71
70
|
if($enable-important-utilities, !important, null);
|
|
72
|
-
text-decoration-color:
|
|
71
|
+
text-decoration-color: rgba(
|
|
73
72
|
var(--#{config.$prefix}#{$color}-rgb),
|
|
74
73
|
var(--#{config.$prefix}u-link-underline-opacity, 1)
|
|
75
74
|
)
|
|
@@ -83,9 +82,9 @@ $link-shade-percentage: 15% !default;
|
|
|
83
82
|
shade-color($value, $link-shade-percentage),
|
|
84
83
|
tint-color($value, $link-shade-percentage)
|
|
85
84
|
);
|
|
86
|
-
color:
|
|
85
|
+
color: rgba(#{to-rgb($hover-color)}, var(--#{config.$prefix}u-link-opacity, 1))
|
|
87
86
|
if($enable-important-utilities, !important, null);
|
|
88
|
-
text-decoration-color:
|
|
87
|
+
text-decoration-color: rgba(
|
|
89
88
|
#{to-rgb($hover-color)},
|
|
90
89
|
var(--#{config.$prefix}u-link-underline-opacity, 1)
|
|
91
90
|
)
|