@shohojdhara/atomix 0.4.7 → 0.4.9
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/atomix.config.ts +58 -1
- package/dist/atomix.css +172 -157
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +4 -4
- package/dist/atomix.min.css.map +1 -1
- package/dist/charts.d.ts +33 -0
- package/dist/charts.js +1274 -164
- package/dist/charts.js.map +1 -1
- package/dist/core.d.ts +33 -10
- package/dist/core.js +1099 -83
- package/dist/core.js.map +1 -1
- package/dist/forms.d.ts +33 -0
- package/dist/forms.js +2106 -1050
- package/dist/forms.js.map +1 -1
- package/dist/heavy.d.ts +42 -1
- package/dist/heavy.js +1663 -638
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +442 -270
- package/dist/index.esm.js +1947 -680
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1982 -712
- 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 +6 -3
- package/scripts/atomix-cli.js +136 -1827
- package/scripts/cli/__tests__/basic.test.js +3 -2
- package/scripts/cli/__tests__/clean.test.js +278 -0
- package/scripts/cli/__tests__/component-validator.test.js +433 -0
- package/scripts/cli/__tests__/generator.test.js +613 -0
- package/scripts/cli/__tests__/glass-motion.test.js +256 -0
- package/scripts/cli/__tests__/integration.test.js +719 -108
- package/scripts/cli/__tests__/migrate.test.js +74 -0
- package/scripts/cli/__tests__/security.test.js +206 -0
- package/scripts/cli/__tests__/test-setup.js +3 -1
- package/scripts/cli/__tests__/theme-bridge.test.js +507 -0
- package/scripts/cli/__tests__/token-provider.test.js +361 -0
- package/scripts/cli/__tests__/utils.test.js +5 -5
- package/scripts/cli/commands/benchmark.js +105 -0
- package/scripts/cli/commands/build-theme.js +115 -0
- package/scripts/cli/commands/clean.js +109 -0
- package/scripts/cli/commands/doctor.js +88 -0
- package/scripts/cli/commands/generate.js +218 -0
- package/scripts/cli/commands/init.js +73 -0
- package/scripts/cli/commands/migrate.js +106 -0
- package/scripts/cli/commands/sync-tokens.js +206 -0
- package/scripts/cli/commands/theme-bridge.js +248 -0
- package/scripts/cli/commands/tokens.js +157 -0
- package/scripts/cli/commands/validate.js +194 -0
- package/scripts/cli/internal/ai-engine.js +156 -0
- package/scripts/cli/internal/compiler.js +114 -0
- package/scripts/cli/internal/component-validator.js +443 -0
- package/scripts/cli/internal/config-loader.js +162 -0
- package/scripts/cli/internal/filesystem.js +158 -0
- package/scripts/cli/internal/generator.js +430 -0
- package/scripts/cli/internal/glass-generator.js +398 -0
- package/scripts/cli/internal/hook-generator.js +369 -0
- package/scripts/cli/internal/hooks.js +61 -0
- package/scripts/cli/internal/itcss-generator.js +565 -0
- package/scripts/cli/internal/motion-generator.js +679 -0
- package/scripts/cli/internal/template-engine.js +301 -0
- package/scripts/cli/internal/theme-bridge.js +664 -0
- package/scripts/cli/internal/tokens/engine.js +122 -0
- package/scripts/cli/internal/tokens/provider.js +34 -0
- package/scripts/cli/internal/tokens/providers/figma.js +50 -0
- package/scripts/cli/internal/tokens/providers/style-dictionary.js +48 -0
- package/scripts/cli/internal/tokens/providers/w3c.js +48 -0
- package/scripts/cli/internal/tokens/token-provider.js +443 -0
- package/scripts/cli/internal/tokens/token-validator.js +513 -0
- package/scripts/cli/internal/validator.js +276 -0
- package/scripts/cli/internal/wizard.js +115 -0
- package/scripts/cli/mappings.js +23 -0
- package/scripts/cli/migration-tools.js +164 -94
- package/scripts/cli/plugins/style-dictionary.js +46 -0
- package/scripts/cli/templates/README.md +525 -95
- package/scripts/cli/templates/common-templates.js +40 -14
- package/scripts/cli/templates/components/react-component.ts +282 -0
- package/scripts/cli/templates/config/project-config.ts +112 -0
- package/scripts/cli/templates/hooks/use-component.ts +477 -0
- package/scripts/cli/templates/index.js +19 -4
- package/scripts/cli/templates/index.ts +171 -0
- package/scripts/cli/templates/next-templates.js +72 -0
- package/scripts/cli/templates/react-templates.js +70 -126
- package/scripts/cli/templates/scss-templates.js +35 -35
- package/scripts/cli/templates/stories/storybook-story.ts +241 -0
- package/scripts/cli/templates/styles/scss-component.ts +255 -0
- package/scripts/cli/templates/tests/vitest-test.ts +229 -0
- package/scripts/cli/templates/token-templates.js +337 -1
- package/scripts/cli/templates/tokens/token-generators.ts +1088 -0
- package/scripts/cli/templates/types/component-types.ts +145 -0
- package/scripts/cli/templates/utils/testing-utils.ts +144 -0
- package/scripts/cli/templates/vanilla-templates.js +39 -0
- package/scripts/cli/token-manager.js +8 -2
- package/scripts/cli/utils/cache-manager.js +240 -0
- package/scripts/cli/utils/detector.js +46 -0
- package/scripts/cli/utils/diagnostics.js +289 -0
- package/scripts/cli/utils/error.js +89 -0
- package/scripts/cli/utils/helpers.js +67 -0
- package/scripts/cli/utils/logger.js +75 -0
- package/scripts/cli/utils/security.js +302 -0
- package/scripts/cli/utils/telemetry.js +115 -0
- package/scripts/cli/utils/validation.js +37 -0
- package/scripts/cli/utils.js +28 -341
- package/src/components/Accordion/Accordion.stories.tsx +0 -18
- package/src/components/Accordion/Accordion.test.tsx +0 -17
- package/src/components/Accordion/Accordion.tsx +0 -4
- package/src/components/AtomixGlass/AtomixGlass.test.tsx +37 -3
- package/src/components/AtomixGlass/AtomixGlass.tsx +143 -31
- package/src/components/AtomixGlass/AtomixGlassContainer.tsx +129 -31
- package/src/components/AtomixGlass/PerformanceDashboard.tsx +219 -0
- package/src/components/AtomixGlass/README.md +25 -10
- package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +216 -0
- package/src/components/AtomixGlass/animation-system.ts +578 -0
- package/src/components/AtomixGlass/shader-utils.ts +4 -1
- package/src/components/AtomixGlass/stories/Overview.stories.tsx +157 -6
- package/src/components/AtomixGlass/stories/Phase1-Animation.stories.tsx +653 -0
- package/src/components/AtomixGlass/stories/Phase1-Test.stories.tsx +95 -0
- package/src/components/AtomixGlass/stories/Playground.stories.tsx +51 -51
- package/src/components/AtomixGlass/stories/shared-components.tsx +6 -0
- package/src/components/Avatar/Avatar.tsx +1 -1
- package/src/components/Button/Button.stories.disabled-link.tsx +10 -0
- package/src/components/Button/Button.stories.tsx +10 -0
- package/src/components/Button/Button.test.tsx +16 -11
- package/src/components/Button/Button.tsx +4 -4
- package/src/components/Card/Card.tsx +1 -1
- package/src/components/Dropdown/Dropdown.tsx +12 -12
- package/src/components/Form/Select.tsx +62 -3
- package/src/components/Modal/Modal.tsx +14 -3
- package/src/components/Navigation/Navbar/Navbar.tsx +44 -0
- package/src/components/Slider/Slider.stories.tsx +3 -3
- package/src/components/Slider/Slider.tsx +38 -0
- package/src/components/Steps/Steps.tsx +3 -3
- package/src/components/Tabs/Tabs.tsx +77 -8
- package/src/components/Testimonial/Testimonial.tsx +1 -1
- package/src/components/TypedButton/TypedButton.stories.tsx +59 -0
- package/src/components/TypedButton/TypedButton.tsx +39 -0
- package/src/components/TypedButton/index.ts +2 -0
- package/src/components/VideoPlayer/VideoPlayer.tsx +11 -4
- package/src/lib/composables/index.ts +4 -7
- package/src/lib/composables/types.ts +45 -0
- package/src/lib/composables/useAccordion.ts +0 -7
- package/src/lib/composables/useAtomixGlass.ts +148 -6
- package/src/lib/composables/useAtomixGlassStyles.ts +9 -7
- package/src/lib/composables/useChartExport.ts +3 -13
- package/src/lib/composables/useDropdown.ts +66 -0
- package/src/lib/composables/useFocusTrap.ts +80 -0
- package/src/lib/composables/usePerformanceMonitor.ts +448 -0
- package/src/lib/composables/useResponsiveGlass.presets.ts +192 -0
- package/src/lib/composables/useResponsiveGlass.ts +441 -0
- package/src/lib/composables/useTooltip.ts +16 -0
- package/src/lib/composables/useTypedButton.ts +66 -0
- package/src/lib/config/index.ts +62 -5
- package/src/lib/constants/components.ts +62 -7
- package/src/lib/theme/devtools/__tests__/useHistory.test.tsx +150 -0
- package/src/lib/theme/tokens/centralized-tokens.ts +120 -0
- package/src/lib/theme/utils/__tests__/domUtils.test.ts +101 -0
- package/src/lib/types/components.ts +37 -11
- package/src/lib/types/glass.ts +35 -0
- package/src/lib/types/index.ts +1 -0
- package/src/lib/utils/displacement-generator.ts +1 -1
- package/src/styles/01-settings/_settings.testtypecheck.scss +53 -0
- package/src/styles/01-settings/_settings.typedbutton.scss +53 -0
- package/src/styles/06-components/_components.atomix-glass.scss +17 -21
- package/src/styles/06-components/_components.edge-panel.scss +1 -5
- package/src/styles/06-components/_components.modal.scss +1 -4
- package/src/styles/06-components/_components.navbar.scss +1 -1
- package/src/styles/06-components/_components.testbutton.scss +212 -0
- package/src/styles/06-components/_components.testtypecheck.scss +212 -0
- package/src/styles/06-components/_components.tooltip.scss +9 -5
- package/src/styles/06-components/_components.typedbutton.scss +212 -0
- package/src/styles/99-utilities/_index.scss +1 -0
- package/src/styles/99-utilities/_utilities.text.scss +1 -1
- package/src/styles/99-utilities/_utilities.touch-target.scss +36 -0
- package/scripts/cli/component-generator.js +0 -564
- package/scripts/cli/interactive-init.js +0 -357
- package/src/styles/06-components/old.chart.styles.scss +0 -2788
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import React, { useMemo } from 'react';
|
|
2
|
+
import type { PerformanceMetrics } from '../../lib/composables/usePerformanceMonitor';
|
|
3
|
+
|
|
4
|
+
interface PerformanceDashboardProps {
|
|
5
|
+
metrics: PerformanceMetrics;
|
|
6
|
+
isVisible?: boolean;
|
|
7
|
+
onClose?: () => void;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* PerformanceDashboard - Real-time performance monitoring overlay
|
|
12
|
+
*
|
|
13
|
+
* Displays:
|
|
14
|
+
* - Current FPS with color coding
|
|
15
|
+
* - Frame time statistics
|
|
16
|
+
* - Quality level indicator
|
|
17
|
+
* - GPU memory usage (if available)
|
|
18
|
+
* - Auto-scaling status
|
|
19
|
+
*/
|
|
20
|
+
export const PerformanceDashboard: React.FC<PerformanceDashboardProps> = ({
|
|
21
|
+
metrics,
|
|
22
|
+
isVisible = true,
|
|
23
|
+
onClose
|
|
24
|
+
}) => {
|
|
25
|
+
// Get color for FPS display
|
|
26
|
+
const getFpsColor = (fps: number): string => {
|
|
27
|
+
if (fps >= 58) return '#4ade80'; // Green - good
|
|
28
|
+
if (fps >= 45) return '#fbbf24'; // Yellow - warning
|
|
29
|
+
return '#ef4444'; // Red - critical
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
// Get quality level badge color
|
|
33
|
+
const getQualityColor = (quality: string): string => {
|
|
34
|
+
switch (quality) {
|
|
35
|
+
case 'high': return '#4ade80';
|
|
36
|
+
case 'medium': return '#fbbf24';
|
|
37
|
+
case 'low': return '#ef4444';
|
|
38
|
+
default: return '#9ca3af';
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
// Dashboard styles
|
|
43
|
+
const dashboardStyle: React.CSSProperties = useMemo(() => ({
|
|
44
|
+
position: 'fixed',
|
|
45
|
+
top: '16px',
|
|
46
|
+
right: '16px',
|
|
47
|
+
padding: '12px 16px',
|
|
48
|
+
backgroundColor: 'rgba(17, 24, 39, 0.95)',
|
|
49
|
+
borderRadius: '8px',
|
|
50
|
+
boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',
|
|
51
|
+
fontFamily: 'monospace',
|
|
52
|
+
fontSize: '12px',
|
|
53
|
+
color: '#fff',
|
|
54
|
+
zIndex: 9999,
|
|
55
|
+
minWidth: '200px',
|
|
56
|
+
backdropFilter: 'blur(8px)',
|
|
57
|
+
border: '1px solid rgba(255, 255, 255, 0.1)',
|
|
58
|
+
transition: 'opacity 0.3s ease',
|
|
59
|
+
opacity: isVisible ? 1 : 0,
|
|
60
|
+
pointerEvents: isVisible ? 'auto' : 'none',
|
|
61
|
+
}), [isVisible]);
|
|
62
|
+
|
|
63
|
+
const headerStyle: React.CSSProperties = useMemo(() => ({
|
|
64
|
+
display: 'flex',
|
|
65
|
+
justifyContent: 'space-between',
|
|
66
|
+
alignItems: 'center',
|
|
67
|
+
marginBottom: '8px',
|
|
68
|
+
paddingBottom: '8px',
|
|
69
|
+
borderBottom: '1px solid rgba(255, 255, 255, 0.1)',
|
|
70
|
+
}), []);
|
|
71
|
+
|
|
72
|
+
const titleStyle: React.CSSProperties = useMemo(() => ({
|
|
73
|
+
fontWeight: 'bold',
|
|
74
|
+
fontSize: '13px',
|
|
75
|
+
color: '#fff',
|
|
76
|
+
}), []);
|
|
77
|
+
|
|
78
|
+
const closeButtonStyle: React.CSSProperties = useMemo(() => ({
|
|
79
|
+
background: 'transparent',
|
|
80
|
+
border: 'none',
|
|
81
|
+
color: '#9ca3af',
|
|
82
|
+
cursor: 'pointer',
|
|
83
|
+
fontSize: '16px',
|
|
84
|
+
padding: '0',
|
|
85
|
+
lineHeight: '1',
|
|
86
|
+
}), []);
|
|
87
|
+
|
|
88
|
+
const metricRowStyle: React.CSSProperties = useMemo(() => ({
|
|
89
|
+
display: 'flex',
|
|
90
|
+
justifyContent: 'space-between',
|
|
91
|
+
alignItems: 'center',
|
|
92
|
+
marginBottom: '6px',
|
|
93
|
+
}), []);
|
|
94
|
+
|
|
95
|
+
const labelStyle: React.CSSProperties = useMemo(() => ({
|
|
96
|
+
color: '#9ca3af',
|
|
97
|
+
marginRight: '12px',
|
|
98
|
+
}), []);
|
|
99
|
+
|
|
100
|
+
const valueStyle: React.CSSProperties = useMemo(() => ({
|
|
101
|
+
fontWeight: 'bold',
|
|
102
|
+
}), []);
|
|
103
|
+
|
|
104
|
+
if (!isVisible) return null;
|
|
105
|
+
|
|
106
|
+
return (
|
|
107
|
+
<div style={dashboardStyle}>
|
|
108
|
+
{/* Header */}
|
|
109
|
+
<div style={headerStyle}>
|
|
110
|
+
<span style={titleStyle}>Performance Monitor</span>
|
|
111
|
+
{onClose && (
|
|
112
|
+
<button
|
|
113
|
+
style={closeButtonStyle}
|
|
114
|
+
onClick={onClose}
|
|
115
|
+
aria-label="Close performance dashboard"
|
|
116
|
+
>
|
|
117
|
+
×
|
|
118
|
+
</button>
|
|
119
|
+
)}
|
|
120
|
+
</div>
|
|
121
|
+
|
|
122
|
+
{/* FPS Display */}
|
|
123
|
+
<div style={metricRowStyle}>
|
|
124
|
+
<span style={labelStyle}>FPS</span>
|
|
125
|
+
<span
|
|
126
|
+
style={{
|
|
127
|
+
...valueStyle,
|
|
128
|
+
color: getFpsColor(metrics.fps)
|
|
129
|
+
}}
|
|
130
|
+
>
|
|
131
|
+
{Math.round(metrics.fps)}
|
|
132
|
+
</span>
|
|
133
|
+
</div>
|
|
134
|
+
|
|
135
|
+
{/* Frame Time */}
|
|
136
|
+
<div style={metricRowStyle}>
|
|
137
|
+
<span style={labelStyle}>Frame Time</span>
|
|
138
|
+
<span style={valueStyle}>
|
|
139
|
+
{metrics.frameTime.toFixed(2)}ms
|
|
140
|
+
</span>
|
|
141
|
+
</div>
|
|
142
|
+
|
|
143
|
+
{/* Quality Level */}
|
|
144
|
+
<div style={metricRowStyle}>
|
|
145
|
+
<span style={labelStyle}>Quality</span>
|
|
146
|
+
<span
|
|
147
|
+
style={{
|
|
148
|
+
...valueStyle,
|
|
149
|
+
color: getQualityColor(metrics.qualityLevel),
|
|
150
|
+
textTransform: 'uppercase',
|
|
151
|
+
fontSize: '11px',
|
|
152
|
+
}}
|
|
153
|
+
>
|
|
154
|
+
{metrics.qualityLevel}
|
|
155
|
+
</span>
|
|
156
|
+
</div>
|
|
157
|
+
|
|
158
|
+
{/* GPU Memory (if available) */}
|
|
159
|
+
{metrics.gpuMemory && (
|
|
160
|
+
<div style={metricRowStyle}>
|
|
161
|
+
<span style={labelStyle}>GPU Memory</span>
|
|
162
|
+
<span style={valueStyle}>
|
|
163
|
+
~{Math.round(metrics.gpuMemory / 1024)}MB
|
|
164
|
+
</span>
|
|
165
|
+
</div>
|
|
166
|
+
)}
|
|
167
|
+
|
|
168
|
+
{/* Auto-scaling Status */}
|
|
169
|
+
{metrics.isAutoScaling && (
|
|
170
|
+
<div style={{
|
|
171
|
+
marginTop: '8px',
|
|
172
|
+
paddingTop: '8px',
|
|
173
|
+
borderTop: '1px solid rgba(255, 255, 255, 0.1)',
|
|
174
|
+
fontSize: '10px',
|
|
175
|
+
color: '#6b7280',
|
|
176
|
+
textAlign: 'center',
|
|
177
|
+
}}>
|
|
178
|
+
Auto-scaling active
|
|
179
|
+
</div>
|
|
180
|
+
)}
|
|
181
|
+
|
|
182
|
+
{/* Performance Status Indicator */}
|
|
183
|
+
<div style={{
|
|
184
|
+
marginTop: '8px',
|
|
185
|
+
paddingTop: '8px',
|
|
186
|
+
borderTop: '1px solid rgba(255, 255, 255, 0.1)',
|
|
187
|
+
display: 'flex',
|
|
188
|
+
alignItems: 'center',
|
|
189
|
+
gap: '6px',
|
|
190
|
+
}}>
|
|
191
|
+
<div style={{
|
|
192
|
+
width: '8px',
|
|
193
|
+
height: '8px',
|
|
194
|
+
borderRadius: '50%',
|
|
195
|
+
backgroundColor: getFpsColor(metrics.fps),
|
|
196
|
+
animation: metrics.fps < 45 ? 'pulse 1s infinite' : 'none',
|
|
197
|
+
}} />
|
|
198
|
+
<span style={{
|
|
199
|
+
fontSize: '10px',
|
|
200
|
+
color: metrics.fps >= 58 ? '#4ade80' : metrics.fps >= 45 ? '#fbbf24' : '#ef4444',
|
|
201
|
+
}}>
|
|
202
|
+
{metrics.fps >= 58 ? 'Optimal' : metrics.fps >= 45 ? 'Warning' : 'Critical'}
|
|
203
|
+
</span>
|
|
204
|
+
</div>
|
|
205
|
+
</div>
|
|
206
|
+
);
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
// Add pulse animation for critical FPS
|
|
210
|
+
if (typeof document !== 'undefined') {
|
|
211
|
+
const styleSheet = document.createElement('style');
|
|
212
|
+
styleSheet.textContent = `
|
|
213
|
+
@keyframes pulse {
|
|
214
|
+
0%, 100% { opacity: 1; }
|
|
215
|
+
50% { opacity: 0.5; }
|
|
216
|
+
}
|
|
217
|
+
`;
|
|
218
|
+
document.head.appendChild(styleSheet);
|
|
219
|
+
}
|
|
@@ -40,25 +40,38 @@ function MyComponent() {
|
|
|
40
40
|
| Prop | Type | Default | Description |
|
|
41
41
|
|------|------|---------|-------------|
|
|
42
42
|
| `children` | ReactNode | - | Content to be rendered inside the glass container |
|
|
43
|
-
| `displacementScale` | number |
|
|
44
|
-
| `blurAmount` | number |
|
|
45
|
-
| `saturation` | number |
|
|
46
|
-
| `aberrationIntensity` | number |
|
|
47
|
-
| `elasticity` | number | 0.
|
|
43
|
+
| `displacementScale` | number | 70 | Controls the intensity of the displacement effect |
|
|
44
|
+
| `blurAmount` | number | 0 | Controls the intensity of the blur effect |
|
|
45
|
+
| `saturation` | number | 140 | Controls the color saturation (100 is normal) |
|
|
46
|
+
| `aberrationIntensity` | number | 2 | Controls the chromatic aberration effect intensity |
|
|
47
|
+
| `elasticity` | number | 0.15 | Controls how responsive the glass is to mouse movement |
|
|
48
48
|
| `borderRadius` | number | 15 | Border radius of the glass container |
|
|
49
49
|
| `globalMousePos` | boolean | false | Whether to use global mouse position instead of local |
|
|
50
50
|
| `mouseOffset` | { x: number, y: number } | { x: 0, y: 0 } | Offset for mouse position calculation |
|
|
51
51
|
| `mouseContainer` | RefObject<HTMLElement> | null | Container to use for mouse position calculation |
|
|
52
|
-
| `padding` |
|
|
52
|
+
| `padding` | string | '0' | Additional padding around the content |
|
|
53
|
+
| `height` | string \| number | undefined | Height of the glass component |
|
|
54
|
+
| `width` | string \| number | undefined | Width of the glass component |
|
|
53
55
|
| `style` | CSSProperties | {} | Additional CSS styles |
|
|
54
56
|
| `overLight` | boolean \| 'auto' \| OverLightObjectConfig | 'auto' | OverLight configuration. See [OverLight Configuration](#overlight-configuration) section for details |
|
|
55
57
|
| `withOverLightLayers` | boolean | true | Whether to render additional overlay layers for overLight mode |
|
|
56
58
|
| `debugOverLight` | boolean | false | Enable debug logging for overLight detection and configuration |
|
|
57
59
|
| `mode` | 'standard' \| 'polar' \| 'prominent' \| 'shader' | 'standard' | The glass effect mode |
|
|
58
60
|
| `onClick` | function | undefined | Click handler |
|
|
59
|
-
| `
|
|
60
|
-
| `
|
|
61
|
-
| `
|
|
61
|
+
| `withBorder` | boolean | true | Whether to show border effects |
|
|
62
|
+
| `withLiquidBlur` | boolean | false | Whether to enable liquid blur effects |
|
|
63
|
+
| `withoutEffects` | boolean | false | Whether to disable all visual effects |
|
|
64
|
+
| `reducedMotion` | boolean | false | Force reduced motion preference |
|
|
65
|
+
| `highContrast` | boolean | false | Force high contrast mode |
|
|
66
|
+
| `withTimeAnimation` | boolean | true | Enable time-based animation (Phase 1) |
|
|
67
|
+
| `animationSpeed` | number | 1.0 | Animation speed multiplier (Phase 1) |
|
|
68
|
+
| `withMultiLayerDistortion` | boolean | false | Enable multi-layer distortion using FBM (Phase 1) |
|
|
69
|
+
| `distortionOctaves` | number | 5 | Number of octaves for FBM (Phase 1) |
|
|
70
|
+
| `distortionLacunarity` | number | 2.0 | Lacunarity for FBM (Phase 1) |
|
|
71
|
+
| `distortionGain` | number | 0.5 | Gain for FBM (Phase 1) |
|
|
72
|
+
| `distortionQuality` | 'low' \| 'medium' \| 'high' \| 'ultra' | 'high' | Quality preset for FBM (Phase 1) |
|
|
73
|
+
| `debugPerformance` | boolean | false | Enable performance monitoring dashboard (development only) |
|
|
74
|
+
| `debugBorderRadius` | boolean | false | Debug mode for corner radius extraction |
|
|
62
75
|
|
|
63
76
|
## Glass Effect Modes
|
|
64
77
|
|
|
@@ -80,8 +93,10 @@ The AtomixGlass component uses several advanced CSS features and SVG filters tha
|
|
|
80
93
|
|
|
81
94
|
1. Use sparingly on pages with many instances
|
|
82
95
|
2. Consider disabling effects on lower-end devices
|
|
83
|
-
3. Use the `
|
|
96
|
+
3. Use the `withoutEffects` prop to disable non-essential effects when needed
|
|
84
97
|
4. Avoid using very high values for `displacementScale` and `blurAmount`
|
|
98
|
+
5. Use `reducedMotion` for users with vestibular disorders
|
|
99
|
+
6. Consider using lower `distortionQuality` presets on mobile devices
|
|
85
100
|
|
|
86
101
|
## Accessibility
|
|
87
102
|
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
|
+
|
|
3
|
+
exports[`AtomixGlass Visual Regression > matches snapshot with default props 1`] = `
|
|
4
|
+
<div>
|
|
5
|
+
<div
|
|
6
|
+
class="c-atomix-glass"
|
|
7
|
+
style="--atomix-glass-radius: 16px; --atomix-glass-transform: scale(1); --atomix-glass-top: 0px; --atomix-glass-left: 0px; --atomix-glass-width: 270px; --atomix-glass-height: 69px; --atomix-glass-border-width: var(--atomix-spacing-0-5, 0.09375rem); --atomix-glass-blend-mode: overlay; --atomix-glass-border-gradient-1: linear-gradient(135deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.08399999999999999) 33%, rgba(255, 255, 255, 0.27999999999999997) 66%, rgba(255, 255, 255, 0) 100%); --atomix-glass-border-gradient-2: linear-gradient(135deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.22399999999999998) 33%, rgba(255, 255, 255, 0.42) 66%, rgba(255, 255, 255, 0) 100%); --atomix-glass-hover-1-opacity: 0; --atomix-glass-hover-1-gradient: radial-gradient(circle at 50% 50%, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0) 50%); --atomix-glass-hover-2-opacity: 0; --atomix-glass-hover-2-gradient: radial-gradient(circle at 50% 50%, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 80%); --atomix-glass-hover-3-opacity: 0; --atomix-glass-hover-3-gradient: radial-gradient(circle at 50% 50%, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%); --atomix-glass-base-opacity: 0; --atomix-glass-base-gradient: rgba(255, 255, 255, 0.1); --atomix-glass-overlay-opacity: 0; --atomix-glass-overlay-gradient: rgba(255, 255, 255, 0.05); --atomix-glass-overlay-highlight-opacity: 0; --atomix-glass-overlay-highlight-bg: radial-gradient(circle at 20% 20%, rgba(255, 255, 255, 0.4) 0%, transparent 60%);"
|
|
8
|
+
>
|
|
9
|
+
<div
|
|
10
|
+
class="c-atomix-glass__container "
|
|
11
|
+
style="position: relative; --atomix-glass-container-radius: 16px; --atomix-glass-container-backdrop: blur(0.1px) saturate(140%) contrast(1.4) brightness(0.9); --atomix-glass-container-shadow: 0 0 20px rgba(0, 0, 0, 0.15) inset, 0 4px 8px rgba(0, 0, 0, 0.08) inset; --atomix-glass-container-shadow-opacity: 1; --atomix-glass-container-bg: none; --atomix-glass-container-text-shadow: 0px 2px 12px rgba(0, 0, 0, 0.4); --atomix-glass-container-box-shadow: 0px 12px 40px rgba(0, 0, 0, 0.25); --atomix-glass-container-width: 100%; --atomix-glass-container-height: 100%; --atomix-glass-container-padding: 0;"
|
|
12
|
+
>
|
|
13
|
+
<div
|
|
14
|
+
class="c-atomix-glass__inner"
|
|
15
|
+
>
|
|
16
|
+
<div
|
|
17
|
+
class="c-atomix-glass__filter"
|
|
18
|
+
>
|
|
19
|
+
<svg
|
|
20
|
+
aria-hidden="true"
|
|
21
|
+
style="position: absolute; width: 100%; height: 100%; inset: 0;"
|
|
22
|
+
>
|
|
23
|
+
<defs>
|
|
24
|
+
<radialgradient
|
|
25
|
+
cx="50%"
|
|
26
|
+
cy="50%"
|
|
27
|
+
id="atomix-glass-filter-16-edge-mask"
|
|
28
|
+
r="50%"
|
|
29
|
+
>
|
|
30
|
+
<stop
|
|
31
|
+
offset="0%"
|
|
32
|
+
stop-color="black"
|
|
33
|
+
stop-opacity="0"
|
|
34
|
+
/>
|
|
35
|
+
<stop
|
|
36
|
+
offset="76%"
|
|
37
|
+
stop-color="black"
|
|
38
|
+
stop-opacity="0"
|
|
39
|
+
/>
|
|
40
|
+
<stop
|
|
41
|
+
offset="100%"
|
|
42
|
+
stop-color="white"
|
|
43
|
+
stop-opacity="1"
|
|
44
|
+
/>
|
|
45
|
+
</radialgradient>
|
|
46
|
+
<filter
|
|
47
|
+
color-interpolation-filters="sRGB"
|
|
48
|
+
height="170%"
|
|
49
|
+
id="atomix-glass-filter-16"
|
|
50
|
+
width="170%"
|
|
51
|
+
x="-35%"
|
|
52
|
+
y="-35%"
|
|
53
|
+
>
|
|
54
|
+
<feimage
|
|
55
|
+
height="100%"
|
|
56
|
+
href="data:image/jpeg;base64,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cUAUAkEkziomgGgkoxZGgxZFQFQlYnQHRdPfj/10KCSCKESCNiVkViPSLpD0h6I0Q0I0A2IoBWBIJIBKBIJoJIJ2R2J0JWBUJ0JUB0XTv479dFZDYiglYigkhEgjZFQjRFQjRFQjQigFYigHYigmgEgmglYlYnQlQlYlQHQlQnQ9P/kf1yVkNiNCNkNiVENiNiViNEViNkVCVgKCViViViSCViSCVgdCViVCViVCdgVCVCdD1D+U/XBWQ2I0I2Q2JUQ2I0JWQ0I2JUQ2JUI2JUI2J0JWJWJWA2R0BWJ0I2JUJ2BUJUJ0P//EABkQAQEBAQEBAAAAAAAAAAAAAAECABEDEP/aAAgBAQABAgB1atWrVq1atWrVq1atWrVq1atWrVq1atWrVq+OrVq1atWrVq1atWrVq1atWrVq1atWrVq1atXxVppppppdWrVq1atWrVq1NNNNNNNNNNNPVWmmmmms6tWrVq1atWpppppppppppppp6q0000uc51atWrVq1ammmmmmmmmmmmmt1Vpppc5znVq1atWrVqaaaaaaaaaaaaaeqtNLnOc51atWrVq1ammmmmmmmmmmmmnqrS5znOc6tWrVq16222mmmmmmlVppp6tKuc5znOrVq1a9TbbbbTTTTTSq000qtLnOc5zq1atWrW0222200000qqqtKqrnOc5zq1atTbbbbbbbbTTTSqqqqqq5znOc6tTTTbbbbbbbbTTTSqqqqrlVznOctNNNtttttttttNNNNKqqqrqznKqrTTTTbbbbbbbbbTTTSqqqqrqznOc5aaaabbbbbbbbbaaaaVVVVVdWc5znVq1NNttttttttttNNKqqqqudWc5znVq16tbbbbbbbbbbTTSqqqq5XVnOc6tWrVrb1tttttttttNNKqqqqrWrK5VWmmm2230bbbbbbaaaXOc5zlVa1KuVVppptttt9G22222mmlzlVznK6tWVVWmmmm2222222222mlznOc5znLWppVVWmmm22222229bTWrOc5znOcq1qaaVpWmm222222229erVqznOc5znKtatStK0rTbTTbbbberXr1as5znOc5aVpppppWlabaabbbb1ta9WrVnOc5znU0rTTTTTTTTTbTTbbbTWvVq1as5znOdTTStNNNNNNNNNtNNtttN6tWvVq1ZznOrU00rTTTTTTTTTTTTTbTWvVq1atWrOc6tTTTStNNNNNNNNNNtNNtNa9WrVq1Z1Z1NNNNNK1q1NNNNNNNNNNNtNatWrVq1atWrU00000rWrVq1atWrVq1alaaa1atWrVq1NNNammmmla1atWrVq1aterVq16tWrVnVqa1NK1qaaaVX/xAAWEAADAAAAAAAAAAAAAAAAAAAhgJD/2gAIAQEAAz8AaExf/8QAGhEBAQEBAQEBAAAAAAAAAAAAAQISEQADEP/aAAgBAgEBAgDx48ePHjx48ePHjx48ePHjx48ePHjx48ePHj86IiIiIiInjx48ePHjx48IiIiIj0oooooooooRERER73ve60UUUUUUVrWiiiiiihERERER73ve97ooooorRWiiiiihKERERER73ve973RRRRWtFFFFFFCIiIiIiPe973ve60UUVrRRRRRRQiIlCIiI973ve973pRRWiiiiiiiiiiiiiiihEe973ve973RRWtFFFFFFFFFFFFFFFFFFa13ve973WitaKKKKKKKKKKKKKKKKKK1rWtd1rutFa1oooooooooooosssooorWta1rWta1rRRRRRRRRRRZZZZZZZZZWta1rWta1rRRRRRRRRZZZZZZZZZZZZe9a1rWta1rWitaKLLLLLLLLLLLLLLLLL3rWta1rWtFbLLLLLLLLLLLLLLLLLLLL3vWta1rWita1ssssssss+hZZZZZZZZe961rWta0Vre97LLLLLLLLLLLPoWWWWWXrWta1oorWta3ssss+hZZZZ9Cyyyyyyyyiita1orWta1ve9llllllllllllllllFFa0VorWta1ve9llllllllllllllllllFFFaK1rWta1rWiyyyyyyyyyyyyiiiiiiitFFa1rWta1oosoosssssoooosoooorRRRWta1rWta0UUUUUWUUUUUUUUUUUVoooorWta1rWtaKKKKKKmiiiiiiiiiiiiiiitd73ve61oSiiipoqaKKKKKKKKKK0UUUVrve973vREREZoSihEooooorRRRRWtd73ve9EREREREoSiiiiitFllllla73ve9ERERERESiiiiiitH0PoWWWWVrXe96IiIiMoiJRRRRRRWjwlFFllllFFd6IiIiIlCUUUUUUUUUePHjx48ePCIiIiIiIiUUUUUUUUUUUePHjx48ePHjx48ePHjx48IiUUUUUUJRRRX//xAAWEQADAAAAAAAAAAAAAAAAAAABYJD/2gAIAQIBAz8AtEV7/8QAFxEBAQEBAAAAAAAAAAAAAAAAAAECEP/aAAgBAwEBAgCtNNNNNNNNNNNNNNNNNNNNNNNNNNNNNcrTTTTTTTTTTTTTTTTTTTTTTTTTTTTTXKrTTTTTTTU000000000000000000001FVpppppqampqaaaaaaaaaaaaaaaaaaaa5Vaaaaampqampqammmmmmmmmmmlaaaaaaiq0001NTU1NTU1NTTTTTTTTTTSqqtNNNcqtNNSyzU1LNTU1NTTTTTTTTTSqqq001ytNLLLLNTU1NTU1NTbbbTTTTTSqqq001ytNLLLLLNTU1NTU3NttttNNNNNKqq001KrSyyyyyzU1NTU3Nzc02220000qqqqrSqqyyyyyzU1NTU3Nzc3NttttNNNKqqqqqqssssss1NTU3Nzc3NzbbbbTTTSqqqqqqrLLLLLNTU1Nzc3Nzc22220000qqqqqqqqssss1NTU3Nzc3NzbbbbbTTSqqqqqqqqqqzU1NTc3Nzc3Nzbc22000qqqqqqqqqqqtTU3Nzc3Nzc3NtzbTTSqqqqrKqqqqqtNNzc23Nzc3Nzc3NTU1KqqqrKqqqqqtNNNNttzc3Nzc3NzU1NLLLLLKqqqqqqqq0022223Nzc3NzU1NSyyyyyyqqqqqqqrTTbbbbc3Nzc3NTU1LLLLLLKsqqqqqqrTTTTbbbc3Nzc1NTUsssssssqqqqqqrTTTTTbbbTc3NTU1NTUsssssqqqqqqqq0000222023NTU1NTUsssssqqqqqqqq000000003NTU1NTU1LLLLLNKrTSqqqqtNNNNNNtNNTU1NSzUssss00qq0qqqqrTTTTTTTTTU1NTUs1LLLNNNKrTTTSqqq00000000001NTU1LNTU0000qtNNNKqqqtNNNNNNNNTU1NTUs1NNNNNKss1NNNK00qtK0000001NNTU0s000000qq000001NKrStNNNNK1NNNNStNNNNNKqtNNNNNNNK0000000rU0000rTTTTTSq00000rTTTTTTTTTTTTTTTTStNNNNKr/xAAUEQEAAAAAAAAAAAAAAAAAAACg/9oACAEDAQM/AAAf/9k="
|
|
57
|
+
id="atomix-glass-filter-16-image"
|
|
58
|
+
preserveAspectRatio="xMidYMid slice"
|
|
59
|
+
result="DISPLACEMENT_MAP"
|
|
60
|
+
width="100%"
|
|
61
|
+
x="0"
|
|
62
|
+
y="0"
|
|
63
|
+
/>
|
|
64
|
+
<fecolormatrix
|
|
65
|
+
in="DISPLACEMENT_MAP"
|
|
66
|
+
result="EDGE_INTENSITY"
|
|
67
|
+
type="matrix"
|
|
68
|
+
values="0.3 0.3 0.3 0 0
|
|
69
|
+
0.3 0.3 0.3 0 0
|
|
70
|
+
0.3 0.3 0.3 0 0
|
|
71
|
+
0 0 0 1 0"
|
|
72
|
+
/>
|
|
73
|
+
<fecomponenttransfer
|
|
74
|
+
in="EDGE_INTENSITY"
|
|
75
|
+
result="EDGE_MASK"
|
|
76
|
+
>
|
|
77
|
+
<fefunca
|
|
78
|
+
tableValues="0 0.1 1"
|
|
79
|
+
type="discrete"
|
|
80
|
+
/>
|
|
81
|
+
</fecomponenttransfer>
|
|
82
|
+
<feoffset
|
|
83
|
+
dx="0"
|
|
84
|
+
dy="0"
|
|
85
|
+
in="SourceGraphic"
|
|
86
|
+
result="CENTER_ORIGINAL"
|
|
87
|
+
/>
|
|
88
|
+
<fedisplacementmap
|
|
89
|
+
in="SourceGraphic"
|
|
90
|
+
in2="DISPLACEMENT_MAP"
|
|
91
|
+
result="RED_DISPLACED"
|
|
92
|
+
scale="-70"
|
|
93
|
+
xChannelSelector="R"
|
|
94
|
+
yChannelSelector="B"
|
|
95
|
+
/>
|
|
96
|
+
<fecolormatrix
|
|
97
|
+
in="RED_DISPLACED"
|
|
98
|
+
result="RED_CHANNEL"
|
|
99
|
+
type="matrix"
|
|
100
|
+
values="1 0 0 0 0
|
|
101
|
+
0 0 0 0 0
|
|
102
|
+
0 0 0 0 0
|
|
103
|
+
0 0 0 1 0"
|
|
104
|
+
/>
|
|
105
|
+
<fedisplacementmap
|
|
106
|
+
in="SourceGraphic"
|
|
107
|
+
in2="DISPLACEMENT_MAP"
|
|
108
|
+
result="GREEN_DISPLACED"
|
|
109
|
+
scale="-72.8"
|
|
110
|
+
xChannelSelector="R"
|
|
111
|
+
yChannelSelector="B"
|
|
112
|
+
/>
|
|
113
|
+
<fecolormatrix
|
|
114
|
+
in="GREEN_DISPLACED"
|
|
115
|
+
result="GREEN_CHANNEL"
|
|
116
|
+
type="matrix"
|
|
117
|
+
values="0 0 0 0 0
|
|
118
|
+
0 1 0 0 0
|
|
119
|
+
0 0 0 0 0
|
|
120
|
+
0 0 0 1 0"
|
|
121
|
+
/>
|
|
122
|
+
<fedisplacementmap
|
|
123
|
+
in="SourceGraphic"
|
|
124
|
+
in2="DISPLACEMENT_MAP"
|
|
125
|
+
result="BLUE_DISPLACED"
|
|
126
|
+
scale="-74.2"
|
|
127
|
+
xChannelSelector="R"
|
|
128
|
+
yChannelSelector="B"
|
|
129
|
+
/>
|
|
130
|
+
<fecolormatrix
|
|
131
|
+
in="BLUE_DISPLACED"
|
|
132
|
+
result="BLUE_CHANNEL"
|
|
133
|
+
type="matrix"
|
|
134
|
+
values="0 0 0 0 0
|
|
135
|
+
0 0 0 0 0
|
|
136
|
+
0 0 1 0 0
|
|
137
|
+
0 0 0 1 0"
|
|
138
|
+
/>
|
|
139
|
+
<feblend
|
|
140
|
+
in="GREEN_CHANNEL"
|
|
141
|
+
in2="BLUE_CHANNEL"
|
|
142
|
+
mode="screen"
|
|
143
|
+
result="GB_COMBINED"
|
|
144
|
+
/>
|
|
145
|
+
<feblend
|
|
146
|
+
in="RED_CHANNEL"
|
|
147
|
+
in2="GB_COMBINED"
|
|
148
|
+
mode="screen"
|
|
149
|
+
result="RGB_COMBINED"
|
|
150
|
+
/>
|
|
151
|
+
<fegaussianblur
|
|
152
|
+
in="RGB_COMBINED"
|
|
153
|
+
result="ABERRATED_BLURRED"
|
|
154
|
+
stdDeviation="0"
|
|
155
|
+
/>
|
|
156
|
+
<fecomposite
|
|
157
|
+
in="ABERRATED_BLURRED"
|
|
158
|
+
in2="EDGE_MASK"
|
|
159
|
+
operator="in"
|
|
160
|
+
result="EDGE_ABERRATION"
|
|
161
|
+
/>
|
|
162
|
+
<fecomponenttransfer
|
|
163
|
+
in="EDGE_MASK"
|
|
164
|
+
result="INVERTED_MASK"
|
|
165
|
+
>
|
|
166
|
+
<fefunca
|
|
167
|
+
tableValues="1 0"
|
|
168
|
+
type="table"
|
|
169
|
+
/>
|
|
170
|
+
</fecomponenttransfer>
|
|
171
|
+
<fecomposite
|
|
172
|
+
in="CENTER_ORIGINAL"
|
|
173
|
+
in2="INVERTED_MASK"
|
|
174
|
+
operator="in"
|
|
175
|
+
result="CENTER_CLEAN"
|
|
176
|
+
/>
|
|
177
|
+
<fecomposite
|
|
178
|
+
in="EDGE_ABERRATION"
|
|
179
|
+
in2="CENTER_CLEAN"
|
|
180
|
+
operator="over"
|
|
181
|
+
/>
|
|
182
|
+
</filter>
|
|
183
|
+
</defs>
|
|
184
|
+
</svg>
|
|
185
|
+
<div
|
|
186
|
+
class="c-atomix-glass__filter-overlay"
|
|
187
|
+
style="filter: url(#atomix-glass-filter-16);"
|
|
188
|
+
/>
|
|
189
|
+
<div
|
|
190
|
+
class="c-atomix-glass__filter-shadow"
|
|
191
|
+
/>
|
|
192
|
+
</div>
|
|
193
|
+
<div
|
|
194
|
+
class="c-atomix-glass__content"
|
|
195
|
+
>
|
|
196
|
+
<div>
|
|
197
|
+
Default Glass
|
|
198
|
+
</div>
|
|
199
|
+
</div>
|
|
200
|
+
</div>
|
|
201
|
+
</div>
|
|
202
|
+
<div
|
|
203
|
+
class="c-atomix-glass__background-layer c-atomix-glass__background-layer--dark c-atomix-glass__background-layer--hidden"
|
|
204
|
+
/>
|
|
205
|
+
<div
|
|
206
|
+
class="c-atomix-glass__background-layer c-atomix-glass__background-layer--black c-atomix-glass__background-layer--hidden"
|
|
207
|
+
/>
|
|
208
|
+
<span
|
|
209
|
+
class="c-atomix-glass__border-1"
|
|
210
|
+
/>
|
|
211
|
+
<span
|
|
212
|
+
class="c-atomix-glass__border-2"
|
|
213
|
+
/>
|
|
214
|
+
</div>
|
|
215
|
+
</div>
|
|
216
|
+
`;
|