@shohojdhara/atomix 0.6.3 → 0.6.5
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/dist/atomix.css +119 -40
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +1 -1
- package/dist/atomix.min.css.map +1 -1
- package/dist/atomix.umd.js +1 -1
- package/dist/atomix.umd.js.map +1 -1
- package/dist/atomix.umd.min.js +1 -1
- package/dist/charts.d.ts +30 -1
- package/dist/charts.js +566 -597
- package/dist/charts.js.map +1 -1
- package/dist/core.d.ts +30 -1
- package/dist/core.js +600 -624
- package/dist/core.js.map +1 -1
- package/dist/forms.d.ts +30 -1
- package/dist/forms.js +1122 -1163
- package/dist/forms.js.map +1 -1
- package/dist/heavy.d.ts +31 -89
- package/dist/heavy.js +1015 -1045
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +378 -104
- package/dist/index.esm.js +10959 -10837
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +10935 -10812
- 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 +2 -5
- package/src/components/AtomixGlass/AtomixGlass.test.tsx +14 -16
- package/src/components/AtomixGlass/AtomixGlass.tsx +137 -355
- package/src/components/AtomixGlass/AtomixGlassContainer.tsx +32 -249
- package/src/components/AtomixGlass/GlassFilter.tsx +62 -68
- package/src/components/AtomixGlass/README.md +2 -1
- package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +19 -18
- package/src/components/AtomixGlass/glass-border-styles.test.ts +58 -0
- package/src/components/AtomixGlass/glass-border-styles.ts +136 -0
- package/src/components/AtomixGlass/glass-utils.ts +411 -6
- package/src/components/AtomixGlass/stories/AnimationFeatures.stories.tsx +158 -537
- package/src/components/AtomixGlass/stories/Border.stories.tsx +149 -0
- package/src/components/AtomixGlass/stories/Examples.stories.tsx +229 -89
- package/src/components/AtomixGlass/stories/Playground.stories.tsx +29 -340
- package/src/components/AtomixGlass/stories/argTypes.ts +30 -13
- package/src/components/AtomixGlass/stories/premium-presets.ts +206 -0
- package/src/components/AtomixGlass/stories/shared-components.tsx +52 -8
- package/src/components/Badge/Badge.tsx +4 -4
- package/src/components/Button/Button.tsx +2 -6
- package/src/components/Callout/Callout.test.tsx +4 -3
- package/src/components/Callout/Callout.tsx +2 -5
- package/src/components/Dropdown/Dropdown.tsx +3 -7
- package/src/components/Form/Checkbox.tsx +2 -8
- package/src/components/Form/Input.tsx +2 -9
- package/src/components/Form/Radio.tsx +2 -9
- package/src/components/Form/Select.tsx +2 -7
- package/src/components/Form/Textarea.tsx +2 -9
- package/src/components/Messages/Messages.tsx +2 -8
- package/src/components/Modal/Modal.tsx +4 -5
- package/src/components/Navigation/Nav/Nav.tsx +2 -6
- package/src/components/Navigation/Navbar/Navbar.tsx +2 -9
- package/src/components/Navigation/SideMenu/SideMenu.tsx +2 -6
- package/src/components/Pagination/Pagination.tsx +2 -10
- package/src/components/Popover/Popover.tsx +2 -9
- package/src/components/Progress/Progress.tsx +2 -7
- package/src/components/Rating/Rating.tsx +2 -10
- package/src/components/Spinner/Spinner.tsx +2 -7
- package/src/components/Steps/Steps.tsx +2 -10
- package/src/components/Tabs/Tabs.tsx +2 -9
- package/src/components/Toggle/Toggle.tsx +2 -10
- package/src/components/Tooltip/Tooltip.tsx +2 -5
- package/src/lib/composables/useAtomixGlass.ts +41 -10
- package/src/lib/composables/useAtomixGlassStyles.ts +59 -75
- package/src/lib/composables/usePerformanceMonitor.ts +5 -0
- package/src/lib/constants/components.ts +358 -46
- package/src/lib/types/components.ts +33 -1
- package/src/styles/01-settings/_settings.atomix-glass.scss +69 -31
- package/src/styles/02-tools/_tools.glass.scss +45 -3
- package/src/styles/06-components/_components.atomix-glass.scss +114 -77
- package/src/components/AtomixGlass/deprecated/AtomixGlass.deprecated.tsx +0 -390
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// ============================================================================
|
|
12
12
|
// Border Radius
|
|
13
13
|
// ============================================================================
|
|
14
|
-
$glass-radius: var(
|
|
14
|
+
$glass-radius: var(--#{config.$prefix}radius-md, 0.75rem) !default;
|
|
15
15
|
|
|
16
16
|
// ============================================================================
|
|
17
17
|
// Position
|
|
@@ -19,9 +19,61 @@ $glass-radius: var(#{config.$prefix}radius-md, 0.75rem) !default;
|
|
|
19
19
|
$glass-position: absolute !default;
|
|
20
20
|
|
|
21
21
|
// ============================================================================
|
|
22
|
-
// Border
|
|
23
|
-
// ============================================================================
|
|
24
|
-
|
|
22
|
+
// Border (liquid glass rim)
|
|
23
|
+
// ============================================================================
|
|
24
|
+
// Hairline refractive edge — Apple liquid glass (~0.5px physical)
|
|
25
|
+
$glass-border-width: max(0.5px, 0.03125rem) !default;
|
|
26
|
+
|
|
27
|
+
// Layer opacity (static fallback when JS gradients are off)
|
|
28
|
+
$glass-border-1-opacity: 0.08 !default;
|
|
29
|
+
|
|
30
|
+
// Rim shadow tokens (inset hairline + inner catch + outer lift)
|
|
31
|
+
$glass-border-color: rgba(255, 255, 255, 0.28) !default;
|
|
32
|
+
$glass-inner-shadow-color: rgba(255, 255, 255, 0.30) !default;
|
|
33
|
+
$glass-outer-shadow-color: rgba(0, 0, 0, 0.18) !default;
|
|
34
|
+
|
|
35
|
+
// Border-only backdrop (ring sampling)
|
|
36
|
+
$glass-border-backdrop-blur: 40px !default;
|
|
37
|
+
$glass-border-backdrop-saturate: 180% !default;
|
|
38
|
+
$glass-border-backdrop-brightness: 102% !default;
|
|
39
|
+
$glass-border-backdrop-filter: blur($glass-border-backdrop-blur) saturate($glass-border-backdrop-saturate)
|
|
40
|
+
brightness($glass-border-backdrop-brightness) !default;
|
|
41
|
+
|
|
42
|
+
// Static gradient fallbacks (dark chrome)
|
|
43
|
+
$glass-border-fallback-rim: conic-gradient(
|
|
44
|
+
from 225deg at 50% 50%,
|
|
45
|
+
rgba(255, 255, 255, 0) 0deg,
|
|
46
|
+
rgba(255, 255, 255, 0.28) 52deg,
|
|
47
|
+
rgba(255, 255, 255, 0.1) 120deg,
|
|
48
|
+
rgba(255, 255, 255, 0.22) 200deg,
|
|
49
|
+
rgba(255, 255, 255, 0.06) 280deg,
|
|
50
|
+
rgba(255, 255, 255, 0) 360deg
|
|
51
|
+
) !default;
|
|
52
|
+
|
|
53
|
+
$glass-border-fallback-inner-highlight: linear-gradient(
|
|
54
|
+
135deg,
|
|
55
|
+
rgba(255, 255, 255, 0.22) 0%,
|
|
56
|
+
rgba(255, 255, 255, 0.06) 28%,
|
|
57
|
+
rgba(255, 255, 255, 0) 55%
|
|
58
|
+
) !default;
|
|
59
|
+
|
|
60
|
+
// Over-light: darker rim + softer inner catch on bright backdrops
|
|
61
|
+
$glass-border-fallback-rim-over-light: conic-gradient(
|
|
62
|
+
from 225deg at 50% 50%,
|
|
63
|
+
rgba(0, 0, 0, 0) 0deg,
|
|
64
|
+
rgba(0, 0, 0, 0.22) 52deg,
|
|
65
|
+
rgba(0, 0, 0, 0.08) 120deg,
|
|
66
|
+
rgba(0, 0, 0, 0.18) 200deg,
|
|
67
|
+
rgba(0, 0, 0, 0.05) 280deg,
|
|
68
|
+
rgba(0, 0, 0, 0) 360deg
|
|
69
|
+
) !default;
|
|
70
|
+
|
|
71
|
+
$glass-border-fallback-inner-over-light: linear-gradient(
|
|
72
|
+
135deg,
|
|
73
|
+
rgba(255, 255, 255, 0.35) 0%,
|
|
74
|
+
rgba(255, 255, 255, 0.12) 30%,
|
|
75
|
+
rgba(255, 255, 255, 0) 55%
|
|
76
|
+
) !default;
|
|
25
77
|
|
|
26
78
|
// ============================================================================
|
|
27
79
|
// Z-Index Layers
|
|
@@ -37,14 +89,10 @@ $glass-z-index-content: 2 !default;
|
|
|
37
89
|
$glass-hover-1-opacity: 0 !default;
|
|
38
90
|
$glass-hover-2-opacity: 0 !default;
|
|
39
91
|
$glass-hover-3-opacity: 0 !default;
|
|
40
|
-
|
|
41
|
-
$glass-
|
|
42
|
-
$glass-overlay-
|
|
43
|
-
|
|
44
|
-
// ============================================================================
|
|
45
|
-
// Border Opacity
|
|
46
|
-
// ============================================================================
|
|
47
|
-
$glass-border-1-opacity: 0.18 !default;
|
|
92
|
+
// Subtle translucency — Apple liquid glass is nearly invisible on its own
|
|
93
|
+
$glass-base-opacity: 0.35 !default;
|
|
94
|
+
$glass-overlay-opacity: 0.20 !default;
|
|
95
|
+
$glass-overlay-highlight-opacity: 0.18 !default;
|
|
48
96
|
|
|
49
97
|
// ============================================================================
|
|
50
98
|
// Over-Light Mode Opacity
|
|
@@ -126,26 +174,22 @@ $glass-overlay-black-end: 0 !default;
|
|
|
126
174
|
// ============================================================================
|
|
127
175
|
// Overlay Highlight
|
|
128
176
|
// ============================================================================
|
|
129
|
-
|
|
177
|
+
// Softer top-center specular (Apple positions the light catch at the top)
|
|
178
|
+
$glass-highlight-start-color: rgba(255, 255, 255, 0.18) !default;
|
|
130
179
|
$glass-highlight-end-color: rgba(255, 255, 255, 0) !default;
|
|
131
|
-
$glass-highlight-opacity-multiplier:
|
|
132
|
-
|
|
133
|
-
// ============================================================================
|
|
134
|
-
// Border Shadow
|
|
135
|
-
// ============================================================================
|
|
136
|
-
$glass-border-color: rgba(255, 255, 255, 0.45) !default;
|
|
137
|
-
$glass-inner-shadow-color: rgba(255, 255, 255, 0.18) !default;
|
|
138
|
-
$glass-outer-shadow-color: rgba(0, 0, 0, 0.28) !default;
|
|
180
|
+
$glass-highlight-opacity-multiplier: 0.9 !default;
|
|
139
181
|
|
|
140
182
|
// ============================================================================
|
|
141
183
|
// Backdrop Filter
|
|
142
184
|
// ============================================================================
|
|
143
|
-
|
|
185
|
+
// Deep frosting with near-neutral brightness — colour comes from the backdrop
|
|
186
|
+
$glass-backdrop-filter: blur(40px) saturate(180%) brightness(102%) !default;
|
|
144
187
|
|
|
145
188
|
// ============================================================================
|
|
146
189
|
// Transition
|
|
147
190
|
// ============================================================================
|
|
148
|
-
$
|
|
191
|
+
// Duration aligned with the global $transition-base token (0.3s).
|
|
192
|
+
// Easing matches the Atomix system easing — fast-start, slow-finish.
|
|
149
193
|
$glass-transition-duration: 0.3s !default;
|
|
150
194
|
$glass-easing: cubic-bezier(0.23, 1, 0.32, 1) !default;
|
|
151
195
|
|
|
@@ -163,12 +207,6 @@ $glass-border-2-blend-mode: overlay !default;
|
|
|
163
207
|
// ============================================================================
|
|
164
208
|
// Background Layer Colors
|
|
165
209
|
// ============================================================================
|
|
166
|
-
$glass-background-dark-color: var(
|
|
167
|
-
$glass-background-black-color: var(
|
|
210
|
+
$glass-background-dark-color: var(--#{config.$prefix}gray-9, #1f2937) !default;
|
|
211
|
+
$glass-background-black-color: var(--#{config.$prefix}black, #000000) !default;
|
|
168
212
|
|
|
169
|
-
// ============================================================================
|
|
170
|
-
// Border Backdrop
|
|
171
|
-
// ============================================================================
|
|
172
|
-
$glass-border-backdrop-blur: 30px !default;
|
|
173
|
-
$glass-border-backdrop-saturate: 140% !default;
|
|
174
|
-
$glass-border-backdrop-brightness: 110% !default;
|
|
@@ -1,6 +1,48 @@
|
|
|
1
1
|
// AtomixGlass Tools
|
|
2
2
|
// =============================================================================
|
|
3
|
-
//
|
|
4
|
-
// Note: Focus ring and other general mixins are available in tools.component
|
|
3
|
+
// Liquid glass border ring mixins
|
|
5
4
|
|
|
6
|
-
@use '
|
|
5
|
+
@use '../01-settings/settings.atomix-glass' as *;
|
|
6
|
+
|
|
7
|
+
/// Shared geometry for border effect layers (backdrop + gradient rings).
|
|
8
|
+
@mixin liquid-glass-border-layer {
|
|
9
|
+
display: block;
|
|
10
|
+
box-sizing: border-box;
|
|
11
|
+
pointer-events: none;
|
|
12
|
+
position: var(--atomix-glass-position);
|
|
13
|
+
top: var(--atomix-glass-top);
|
|
14
|
+
left: var(--atomix-glass-left);
|
|
15
|
+
right: var(--atomix-glass-right);
|
|
16
|
+
bottom: var(--atomix-glass-bottom);
|
|
17
|
+
width: var(--atomix-glass-width);
|
|
18
|
+
height: var(--atomix-glass-height);
|
|
19
|
+
border-radius: var(--_glass-radius);
|
|
20
|
+
transform: var(--_glass-transform);
|
|
21
|
+
transition: var(--_glass-transition);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/// Hollow ring mask — clips content to the border band only (padding-box XOR border-box).
|
|
25
|
+
/// Do not set overflow: hidden here; it breaks mask-composite at rounded corners.
|
|
26
|
+
@mixin liquid-glass-border-ring-mask {
|
|
27
|
+
padding: var(--atomix-glass-border-width, #{$glass-border-width});
|
|
28
|
+
-webkit-mask:
|
|
29
|
+
linear-gradient(#fff 0 0) content-box,
|
|
30
|
+
linear-gradient(#fff 0 0);
|
|
31
|
+
-webkit-mask-composite: xor;
|
|
32
|
+
mask:
|
|
33
|
+
linear-gradient(#fff 0 0) content-box,
|
|
34
|
+
linear-gradient(#fff 0 0);
|
|
35
|
+
mask-composite: exclude;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/// Gradient / painted rim — mask ring + background (conic or JS linear-gradient).
|
|
39
|
+
@mixin liquid-glass-border-painted-ring {
|
|
40
|
+
@include liquid-glass-border-layer;
|
|
41
|
+
@include liquid-glass-border-ring-mask;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/// Backdrop sampling ring — same mask geometry, backdrop-filter on the band only.
|
|
45
|
+
@mixin liquid-glass-border-backdrop-ring {
|
|
46
|
+
@include liquid-glass-border-layer;
|
|
47
|
+
@include liquid-glass-border-ring-mask;
|
|
48
|
+
}
|
|
@@ -3,6 +3,28 @@
|
|
|
3
3
|
|
|
4
4
|
@use '../01-settings/settings.atomix-glass' as *;
|
|
5
5
|
@use '../02-tools/tools.component' as *;
|
|
6
|
+
@use '../02-tools/tools.glass' as glass;
|
|
7
|
+
|
|
8
|
+
// ─── @property registrations ─────────────────────────────────────────────────
|
|
9
|
+
// Typed custom properties let the browser interpolate these values in
|
|
10
|
+
// CSS transitions without needing JS class-toggling.
|
|
11
|
+
@property --atomix-glass-hover-1-opacity {
|
|
12
|
+
syntax: '<number>';
|
|
13
|
+
inherits: false;
|
|
14
|
+
initial-value: 0;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@property --atomix-glass-hover-2-opacity {
|
|
18
|
+
syntax: '<number>';
|
|
19
|
+
inherits: false;
|
|
20
|
+
initial-value: 0;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@property --atomix-glass-hover-3-opacity {
|
|
24
|
+
syntax: '<number>';
|
|
25
|
+
inherits: false;
|
|
26
|
+
initial-value: 0;
|
|
27
|
+
}
|
|
6
28
|
|
|
7
29
|
.c-atomix-glass {
|
|
8
30
|
position: relative;
|
|
@@ -10,9 +32,11 @@
|
|
|
10
32
|
// Local, sane defaults (kept minimal)
|
|
11
33
|
--_glass-radius: var(--atomix-glass-radius, var(--atomix-radius-md, 0.75rem));
|
|
12
34
|
--_glass-transform: var(--atomix-glass-transform, translateZ(0));
|
|
35
|
+
--_glass-backdrop: #{$glass-backdrop-filter};
|
|
13
36
|
|
|
14
37
|
--atomix-glass-position: absolute;
|
|
15
|
-
--atomix-glass-border-width:
|
|
38
|
+
--atomix-glass-border-width: #{$glass-border-width};
|
|
39
|
+
--atomix-glass-border-backdrop-filter: #{$glass-border-backdrop-filter};
|
|
16
40
|
--atomix-glass-top: 0;
|
|
17
41
|
--atomix-glass-left: 0;
|
|
18
42
|
--atomix-glass-right: auto;
|
|
@@ -55,10 +79,9 @@
|
|
|
55
79
|
0 1px 2px var(--atomix-glass-inner-shadow-color, #{$glass-inner-shadow-color}) inset,
|
|
56
80
|
0 2px 6px var(--atomix-glass-outer-shadow-color, #{$glass-outer-shadow-color});
|
|
57
81
|
|
|
58
|
-
//
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
&__hover-3,
|
|
82
|
+
// ── Over-light decorative layers (base, overlay) ─────────────────────────
|
|
83
|
+
// These use var-based positioning so they correctly follow the container in
|
|
84
|
+
// fixed / sticky layouts where the container may have explicit pixel offsets.
|
|
62
85
|
&__base,
|
|
63
86
|
&__overlay {
|
|
64
87
|
position: var(--atomix-glass-position);
|
|
@@ -72,65 +95,74 @@
|
|
|
72
95
|
border-radius: var(--_glass-radius);
|
|
73
96
|
transform: var(--_glass-transform);
|
|
74
97
|
transition: var(--_glass-transition);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
&__hover-1,
|
|
78
|
-
&__hover-2,
|
|
79
|
-
&__hover-3 {
|
|
80
|
-
z-index: var(--_glass-z-hover);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
&__base,
|
|
84
|
-
&__overlay {
|
|
85
98
|
z-index: var(--_glass-z-effect);
|
|
86
99
|
}
|
|
87
100
|
|
|
88
|
-
// Interactive hover
|
|
101
|
+
// ── Interactive hover / press layers ─────────────────────────────────────
|
|
102
|
+
// Always fill the glass surface with inset: 0. Move in sync with the
|
|
103
|
+
// elastic spring via the shared --atomix-glass-transform var.
|
|
104
|
+
// Opacity is driven via typed @property vars so CSS transitions interpolate.
|
|
89
105
|
&__hover-1,
|
|
90
106
|
&__hover-2,
|
|
91
107
|
&__hover-3 {
|
|
92
|
-
|
|
108
|
+
position: absolute;
|
|
109
|
+
inset: 0;
|
|
110
|
+
pointer-events: none;
|
|
111
|
+
border-radius: var(--_glass-radius);
|
|
112
|
+
transform: var(--_glass-transform);
|
|
113
|
+
// Opacity transition — works because @property declares the var as <number>
|
|
114
|
+
transition:
|
|
115
|
+
opacity #{$glass-transition-duration} #{$glass-easing},
|
|
116
|
+
border-radius #{$glass-transition-duration} #{$glass-easing};
|
|
117
|
+
z-index: var(--_glass-z-hover);
|
|
93
118
|
}
|
|
94
119
|
|
|
120
|
+
// hover-1: ambient cursor-tracking highlight (white overlay glow)
|
|
95
121
|
&__hover-1 {
|
|
96
122
|
opacity: var(--atomix-glass-hover-1-opacity, 0);
|
|
123
|
+
mix-blend-mode: overlay;
|
|
97
124
|
background: var(
|
|
98
125
|
--atomix-glass-hover-1-gradient,
|
|
99
126
|
radial-gradient(
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
127
|
+
65% 55% at 50% 30%,
|
|
128
|
+
rgba(255, 255, 255, 0.22) 0%,
|
|
129
|
+
rgba(255, 255, 255, 0) 72%
|
|
103
130
|
)
|
|
104
131
|
);
|
|
105
132
|
}
|
|
106
133
|
|
|
134
|
+
// hover-2: press depth — subtle shadow at the press point (darken only on active)
|
|
107
135
|
&__hover-2 {
|
|
108
136
|
opacity: var(--atomix-glass-hover-2-opacity, 0);
|
|
137
|
+
mix-blend-mode: multiply;
|
|
109
138
|
background: var(
|
|
110
139
|
--atomix-glass-hover-2-gradient,
|
|
111
140
|
radial-gradient(
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
141
|
+
70% 60% at 50% 60%,
|
|
142
|
+
rgba(0, 0, 0, 0.18) 0%,
|
|
143
|
+
rgba(0, 0, 0, 0) 72%
|
|
115
144
|
)
|
|
116
145
|
);
|
|
117
146
|
}
|
|
118
147
|
|
|
148
|
+
// hover-3: global soft-light tint shift — full surface brightness on hover/press
|
|
119
149
|
&__hover-3 {
|
|
120
150
|
opacity: var(--atomix-glass-hover-3-opacity, 0);
|
|
151
|
+
mix-blend-mode: soft-light;
|
|
121
152
|
background: var(
|
|
122
153
|
--atomix-glass-hover-3-gradient,
|
|
123
154
|
linear-gradient(
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
155
|
+
160deg,
|
|
156
|
+
rgba(255, 255, 255, 0.12) 0%,
|
|
157
|
+
rgba(255, 255, 255, 0.04) 55%,
|
|
158
|
+
rgba(255, 255, 255, 0) 100%
|
|
127
159
|
)
|
|
128
160
|
);
|
|
129
161
|
}
|
|
130
162
|
|
|
131
163
|
&__base {
|
|
132
164
|
mix-blend-mode: soft-light;
|
|
133
|
-
opacity: var(--atomix-glass-base-opacity,
|
|
165
|
+
opacity: var(--atomix-glass-base-opacity, #{$glass-base-opacity});
|
|
134
166
|
background: var(
|
|
135
167
|
--atomix-glass-base-gradient,
|
|
136
168
|
linear-gradient(
|
|
@@ -143,7 +175,7 @@
|
|
|
143
175
|
|
|
144
176
|
&__overlay {
|
|
145
177
|
mix-blend-mode: overlay;
|
|
146
|
-
opacity: var(--atomix-glass-overlay-opacity,
|
|
178
|
+
opacity: var(--atomix-glass-overlay-opacity, #{$glass-overlay-opacity});
|
|
147
179
|
background: var(
|
|
148
180
|
--atomix-glass-overlay-gradient,
|
|
149
181
|
radial-gradient(
|
|
@@ -164,69 +196,59 @@
|
|
|
164
196
|
transition: var(--_glass-transition);
|
|
165
197
|
mix-blend-mode: screen;
|
|
166
198
|
z-index: var(--_glass-z-overlay-highlight);
|
|
167
|
-
opacity: var(--atomix-glass-overlay-highlight-opacity,
|
|
199
|
+
opacity: var(--atomix-glass-overlay-highlight-opacity, #{$glass-overlay-highlight-opacity});
|
|
168
200
|
background: var(
|
|
169
201
|
--atomix-glass-overlay-highlight-bg,
|
|
170
|
-
|
|
171
|
-
|
|
202
|
+
radial-gradient(
|
|
203
|
+
90% 55% at 50% 0%,
|
|
172
204
|
var(--atomix-glass-highlight-start-color, #{$glass-highlight-start-color}) 0%,
|
|
173
|
-
var(--atomix-glass-highlight-end-color, #{$glass-highlight-end-color})
|
|
205
|
+
var(--atomix-glass-highlight-end-color, #{$glass-highlight-end-color}) 72%
|
|
174
206
|
)
|
|
175
207
|
);
|
|
176
208
|
}
|
|
177
209
|
|
|
178
|
-
// Border effect layers
|
|
179
|
-
&__border-backdrop,
|
|
180
|
-
&__border-1,
|
|
181
|
-
&__border-2 {
|
|
182
|
-
// Static styles
|
|
183
|
-
padding: var(--atomix-glass-border-width);
|
|
184
|
-
box-sizing: border-box;
|
|
185
|
-
overflow: hidden;
|
|
186
|
-
pointer-events: none;
|
|
187
|
-
/* autoprefixer: ignore next */
|
|
188
|
-
-webkit-mask:
|
|
189
|
-
linear-gradient(var(--atomix-black, #000000) 0 0) content-box,
|
|
190
|
-
linear-gradient(var(--atomix-black, #000000) 0 0);
|
|
191
|
-
/* autoprefixer: ignore next */
|
|
192
|
-
-webkit-mask-composite: xor;
|
|
193
|
-
/* autoprefixer: ignore next */
|
|
194
|
-
mask:
|
|
195
|
-
linear-gradient(var(--atomix-black, #000000) 0 0) content-box,
|
|
196
|
-
linear-gradient(var(--atomix-black, #000000) 0 0);
|
|
197
|
-
/* autoprefixer: ignore next */
|
|
198
|
-
mask-composite: exclude;
|
|
199
|
-
|
|
200
|
-
position: var(--atomix-glass-position);
|
|
201
|
-
top: var(--atomix-glass-top);
|
|
202
|
-
left: var(--atomix-glass-left);
|
|
203
|
-
right: var(--atomix-glass-right);
|
|
204
|
-
bottom: var(--atomix-glass-bottom);
|
|
205
|
-
width: var(--atomix-glass-width);
|
|
206
|
-
height: var(--atomix-glass-height);
|
|
207
|
-
border-radius: var(--_glass-radius);
|
|
208
|
-
transform: var(--_glass-transform);
|
|
209
|
-
transition: var(--_glass-transition);
|
|
210
|
-
}
|
|
211
|
-
|
|
210
|
+
// Border effect layers — liquid glass rim (see tools.glass mixins)
|
|
212
211
|
&__border-backdrop {
|
|
213
|
-
|
|
212
|
+
@include glass.liquid-glass-border-backdrop-ring;
|
|
213
|
+
|
|
214
|
+
mix-blend-mode: #{$glass-border-backdrop-blend-mode};
|
|
214
215
|
z-index: var(--_glass-z-border-1);
|
|
215
|
-
backdrop-filter: #{$glass-backdrop-filter};
|
|
216
|
-
|
|
216
|
+
backdrop-filter: var(--atomix-glass-border-backdrop-filter, #{$glass-border-backdrop-filter});
|
|
217
|
+
box-shadow: var(--atomix-glass-border-shadow);
|
|
217
218
|
}
|
|
218
219
|
|
|
219
220
|
&__border-1 {
|
|
220
|
-
|
|
221
|
-
|
|
221
|
+
@include glass.liquid-glass-border-painted-ring;
|
|
222
|
+
|
|
223
|
+
background: var(--atomix-glass-border-gradient-1, #{$glass-border-fallback-rim});
|
|
224
|
+
opacity: var(--atomix-glass-border-1-opacity, #{$glass-border-1-opacity});
|
|
225
|
+
mix-blend-mode: #{$glass-border-1-blend-mode};
|
|
222
226
|
z-index: var(--_glass-z-border-2);
|
|
223
|
-
background: var(--atomix-glass-border-gradient-1, none);
|
|
224
227
|
}
|
|
225
228
|
|
|
226
229
|
&__border-2 {
|
|
227
|
-
|
|
230
|
+
@include glass.liquid-glass-border-painted-ring;
|
|
231
|
+
|
|
232
|
+
background: var(--atomix-glass-border-gradient-2, #{$glass-border-fallback-inner-highlight});
|
|
233
|
+
mix-blend-mode: #{$glass-border-2-blend-mode};
|
|
228
234
|
z-index: var(--_glass-z-border-3);
|
|
229
|
-
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// Over-light: darker conic rim + brighter top-left inner catch
|
|
238
|
+
&:has(.c-atomix-glass__container--over-light) {
|
|
239
|
+
.c-atomix-glass__border-1 {
|
|
240
|
+
background: var(
|
|
241
|
+
--atomix-glass-border-gradient-1,
|
|
242
|
+
#{$glass-border-fallback-rim-over-light}
|
|
243
|
+
);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
.c-atomix-glass__border-2 {
|
|
247
|
+
background: var(
|
|
248
|
+
--atomix-glass-border-gradient-2,
|
|
249
|
+
#{$glass-border-fallback-inner-over-light}
|
|
250
|
+
);
|
|
251
|
+
}
|
|
230
252
|
}
|
|
231
253
|
|
|
232
254
|
&__container {
|
|
@@ -274,7 +296,7 @@
|
|
|
274
296
|
position: absolute;
|
|
275
297
|
inset: var(--atomix-glass-border-width);
|
|
276
298
|
pointer-events: none;
|
|
277
|
-
border-radius: var(--_glass-radius);
|
|
299
|
+
border-radius: max(0px, calc(var(--_glass-radius) - var(--atomix-glass-border-width)));
|
|
278
300
|
box-shadow: var(--atomix-glass-container-shadow);
|
|
279
301
|
opacity: var(--atomix-glass-container-shadow-opacity);
|
|
280
302
|
background: var(--atomix-glass-container-bg);
|
|
@@ -345,17 +367,30 @@
|
|
|
345
367
|
&--disabled-effects {
|
|
346
368
|
--atomix-glass-transform: none;
|
|
347
369
|
--atomix-glass-transition: none;
|
|
370
|
+
--_glass-transition: none;
|
|
348
371
|
}
|
|
349
372
|
|
|
350
|
-
//
|
|
373
|
+
// ── Interactive glass (onClick provided) ─────────────────────────────────
|
|
351
374
|
&[role='button'],
|
|
352
375
|
&[tabindex]:not([tabindex='-1']) {
|
|
376
|
+
cursor: pointer;
|
|
377
|
+
user-select: none;
|
|
378
|
+
-webkit-tap-highlight-color: transparent;
|
|
379
|
+
|
|
353
380
|
@include focus-ring;
|
|
381
|
+
|
|
382
|
+
// CSS-level press scale fires instantly on :active (before the JS spring
|
|
383
|
+
// takes over) for zero-latency tactile feedback.
|
|
384
|
+
&:active > .c-atomix-glass__container {
|
|
385
|
+
transform: scale(0.985);
|
|
386
|
+
transition: transform 0.06s cubic-bezier(0.4, 0, 1, 1);
|
|
387
|
+
}
|
|
354
388
|
}
|
|
355
389
|
|
|
356
390
|
// Responsive and accessibility
|
|
357
391
|
@media (prefers-reduced-motion: reduce) {
|
|
358
392
|
--atomix-glass-transition: none;
|
|
393
|
+
--_glass-transition: none;
|
|
359
394
|
|
|
360
395
|
* {
|
|
361
396
|
transition: none !important;
|
|
@@ -363,6 +398,8 @@
|
|
|
363
398
|
}
|
|
364
399
|
|
|
365
400
|
@media (prefers-contrast: high) {
|
|
366
|
-
border
|
|
401
|
+
border: var(--atomix-spacing-0-5, 0.125rem) solid currentColor;
|
|
402
|
+
outline: var(--atomix-spacing-0-5, 0.125rem) solid transparent;
|
|
403
|
+
outline-offset: var(--atomix-spacing-0-5, 0.125rem);
|
|
367
404
|
}
|
|
368
405
|
}
|