@shohojdhara/atomix 0.2.2 → 0.2.4

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.
Files changed (139) hide show
  1. package/dist/atomix.css +714 -646
  2. package/dist/atomix.min.css +5 -5
  3. package/dist/index.d.ts +794 -146
  4. package/dist/index.esm.js +12052 -6091
  5. package/dist/index.esm.js.map +1 -1
  6. package/dist/index.js +5133 -2674
  7. package/dist/index.js.map +1 -1
  8. package/dist/index.min.js +1 -1
  9. package/dist/index.min.js.map +1 -1
  10. package/dist/themes/boomdevs.css +662 -594
  11. package/dist/themes/boomdevs.min.css +7 -7
  12. package/dist/themes/esrar.css +714 -646
  13. package/dist/themes/esrar.min.css +6 -6
  14. package/dist/themes/mashroom.css +707 -642
  15. package/dist/themes/mashroom.min.css +7 -7
  16. package/dist/themes/shaj-default.css +707 -642
  17. package/dist/themes/shaj-default.min.css +6 -6
  18. package/package.json +66 -15
  19. package/src/components/Accordion/Accordion.stories.tsx +800 -0
  20. package/src/components/Accordion/Accordion.tsx +33 -5
  21. package/src/components/AtomixGlass/AtomixGlass.stories.tsx +1230 -0
  22. package/src/components/AtomixGlass/AtomixGlass.test.tsx +199 -0
  23. package/src/components/AtomixGlass/AtomixGlass.tsx +1343 -0
  24. package/src/components/AtomixGlass/README.md +134 -0
  25. package/src/components/AtomixGlass/index.ts +10 -0
  26. package/src/components/AtomixGlass/shader-utils.ts +696 -0
  27. package/src/components/AtomixGlass/stories/Examples.stories.tsx +5800 -0
  28. package/src/components/AtomixGlass/stories/Modes.stories.tsx +1065 -0
  29. package/src/components/AtomixGlass/stories/Playground.stories.tsx +1066 -0
  30. package/src/components/AtomixGlass/stories/ShaderVariants.stories.tsx +397 -0
  31. package/src/components/AtomixGlass/stories/shared-components.tsx +310 -0
  32. package/src/components/AtomixGlass/utils.ts +8 -0
  33. package/src/components/Badge/Badge.stories.tsx +170 -0
  34. package/src/components/Badge/Badge.tsx +31 -4
  35. package/src/components/Button/Button.stories.tsx +826 -0
  36. package/src/components/Button/Button.tsx +34 -3
  37. package/src/components/Button/README.md +216 -0
  38. package/src/components/Callout/Callout.stories.tsx +813 -78
  39. package/src/components/Callout/Callout.test.tsx +368 -0
  40. package/src/components/Callout/Callout.tsx +43 -6
  41. package/src/components/Callout/README.md +409 -0
  42. package/src/components/Card/Card.stories.tsx +699 -0
  43. package/src/components/Card/Card.tsx +19 -3
  44. package/src/components/DatePicker/DatePicker copy.tsx +551 -0
  45. package/src/components/DatePicker/DatePicker.stories.tsx +877 -1
  46. package/src/components/DatePicker/DatePicker.tsx +379 -332
  47. package/src/components/DatePicker/readme.md +110 -1
  48. package/src/components/DatePicker/types.ts +8 -0
  49. package/src/components/Dropdown/Dropdown.stories.tsx +145 -0
  50. package/src/components/Dropdown/Dropdown.tsx +34 -5
  51. package/src/components/EdgePanel/EdgePanel.stories.tsx +476 -3
  52. package/src/components/EdgePanel/EdgePanel.tsx +86 -13
  53. package/src/components/Form/Checkbox.stories.tsx +101 -0
  54. package/src/components/Form/Checkbox.tsx +26 -2
  55. package/src/components/Form/Input.stories.tsx +124 -0
  56. package/src/components/Form/Input.tsx +36 -7
  57. package/src/components/Form/Radio.stories.tsx +139 -0
  58. package/src/components/Form/Radio.tsx +26 -2
  59. package/src/components/Form/Select.stories.tsx +110 -0
  60. package/src/components/Form/Select.tsx +26 -2
  61. package/src/components/Form/Textarea.stories.tsx +104 -0
  62. package/src/components/Form/Textarea.tsx +36 -7
  63. package/src/components/Hero/Hero.stories.tsx +54 -1
  64. package/src/components/Hero/Hero.tsx +70 -11
  65. package/src/components/Messages/Messages.stories.tsx +113 -0
  66. package/src/components/Messages/Messages.tsx +51 -9
  67. package/src/components/Modal/Modal.stories.tsx +237 -0
  68. package/src/components/Modal/Modal.tsx +63 -35
  69. package/src/components/Navigation/Nav/Nav.stories.tsx +469 -0
  70. package/src/components/Navigation/Nav/Nav.tsx +17 -4
  71. package/src/components/Navigation/Navbar/Navbar.stories.tsx +413 -0
  72. package/src/components/Navigation/Navbar/Navbar.tsx +66 -28
  73. package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +340 -0
  74. package/src/components/Navigation/SideMenu/SideMenu.tsx +28 -2
  75. package/src/components/Pagination/Pagination.stories.tsx +101 -0
  76. package/src/components/Pagination/Pagination.tsx +25 -1
  77. package/src/components/Popover/Popover.stories.tsx +94 -0
  78. package/src/components/Popover/Popover.tsx +30 -4
  79. package/src/components/Progress/Progress.tsx +17 -2
  80. package/src/components/Rating/Rating.stories.tsx +112 -0
  81. package/src/components/Rating/Rating.tsx +25 -1
  82. package/src/components/Spinner/Spinner.tsx +17 -2
  83. package/src/components/Steps/Steps.stories.tsx +119 -0
  84. package/src/components/Steps/Steps.tsx +32 -1
  85. package/src/components/Tab/Tab.stories.tsx +88 -0
  86. package/src/components/Tab/Tab.tsx +32 -1
  87. package/src/components/Toggle/Toggle.stories.tsx +92 -0
  88. package/src/components/Toggle/Toggle.tsx +32 -1
  89. package/src/components/Tooltip/Tooltip.stories.tsx +131 -0
  90. package/src/components/Tooltip/Tooltip.tsx +43 -7
  91. package/src/components/VideoPlayer/VideoPlayer.stories.tsx +1002 -196
  92. package/src/components/VideoPlayer/VideoPlayer.tsx +161 -4
  93. package/src/components/index.ts +1 -0
  94. package/src/lib/composables/index.ts +4 -0
  95. package/src/lib/composables/useAtomixGlass.ts +71 -0
  96. package/src/lib/composables/useBarChart.ts +14 -4
  97. package/src/lib/composables/useButton.ts +3 -1
  98. package/src/lib/composables/useCallout.ts +4 -1
  99. package/src/lib/composables/useChart.ts +223 -370
  100. package/src/lib/composables/useChartToolbar.ts +11 -20
  101. package/src/lib/composables/useEdgePanel.ts +81 -35
  102. package/src/lib/composables/useGlassContainer.ts +168 -0
  103. package/src/lib/composables/useLineChart.ts +4 -2
  104. package/src/lib/composables/usePieChart.ts +4 -14
  105. package/src/lib/constants/components.ts +89 -0
  106. package/src/lib/types/components.ts +448 -14
  107. package/src/lib/utils/displacement-generator.ts +86 -0
  108. package/src/styles/01-settings/_settings.background.scss +8 -7
  109. package/src/styles/01-settings/_settings.callout.scss +7 -7
  110. package/src/styles/01-settings/_settings.edge-panel.scss +1 -1
  111. package/src/styles/02-tools/_tools.animations.scss +19 -0
  112. package/src/styles/02-tools/_tools.background.scss +19 -17
  113. package/src/styles/02-tools/_tools.glass.scss +1 -0
  114. package/src/styles/02-tools/_tools.utility-api.scss +62 -27
  115. package/src/styles/03-generic/_generic.root.scss +3 -2
  116. package/src/styles/04-elements/_elements.body.scss +0 -18
  117. package/src/styles/06-components/_components.accordion.scss +16 -0
  118. package/src/styles/06-components/_components.atomix-glass.scss +72 -0
  119. package/src/styles/06-components/_components.badge.scss +21 -0
  120. package/src/styles/06-components/_components.button.scss +10 -0
  121. package/src/styles/06-components/_components.callout.scss +46 -2
  122. package/src/styles/06-components/_components.card.scss +17 -0
  123. package/src/styles/06-components/_components.chart.scss +1 -1
  124. package/src/styles/06-components/_components.datepicker.scss +18 -0
  125. package/src/styles/06-components/_components.dropdown.scss +7 -1
  126. package/src/styles/06-components/_components.edge-panel.scss +101 -0
  127. package/src/styles/06-components/_components.hero.scss +1 -2
  128. package/src/styles/06-components/_components.input.scss +31 -1
  129. package/src/styles/06-components/_components.messages.scss +176 -0
  130. package/src/styles/06-components/_components.modal.scss +13 -3
  131. package/src/styles/06-components/_components.navbar.scss +12 -1
  132. package/src/styles/06-components/_components.side-menu.scss +5 -0
  133. package/src/styles/06-components/_components.video-player.scss +48 -26
  134. package/src/styles/06-components/_index.scss +1 -0
  135. package/src/styles/99-utilities/_index.scss +1 -0
  136. package/src/styles/99-utilities/_utilities.glass-fixes.scss +49 -0
  137. package/src/styles/99-utilities/_utilities.opacity.scss +1 -1
  138. package/dist/themes/yabai.css +0 -15207
  139. package/dist/themes/yabai.min.css +0 -189
@@ -0,0 +1,1230 @@
1
+ /**
2
+ * AtomixGlass.stories.tsx
3
+ *
4
+ * This file contains comprehensive Storybook stories for the AtomixGlass component, showcasing
5
+ * various use cases, configurations, and best practices. The stories demonstrate
6
+ * the component's versatility and provide examples for developers to reference.
7
+ *\
8
+ * @package Atomix
9
+ * @component AtomixGlass
10
+ */
11
+
12
+ import { Meta, StoryObj } from '@storybook/react';
13
+ import AtomixGlass from './AtomixGlass';
14
+ import Button from '../Button/Button';
15
+ import { useState, useEffect, useCallback, useMemo, useRef } from 'react';
16
+ import React from 'react';
17
+ import type { RefObject } from 'react';
18
+ import { BoxArrowDownIcon } from '@phosphor-icons/react';
19
+
20
+ /**
21
+ * Storybook meta configuration for AtomixGlass component
22
+ *
23
+ * This defines the component's metadata, documentation, and controls
24
+ * for the Storybook interface.
25
+ */
26
+ const meta: Meta<typeof AtomixGlass> = {
27
+ title: 'Components/AtomixGlass',
28
+ component: AtomixGlass,
29
+ parameters: {
30
+ layout: 'centered',
31
+ docs: {
32
+ description: {
33
+ component:
34
+ 'A glass-like component with chromatic aberration and displacement effects. The component provides a modern, frosted glass aesthetic with interactive hover effects. This component is ideal for creating modern UI elements with depth and visual interest.',
35
+ },
36
+ },
37
+ },
38
+ tags: ['autodocs'],
39
+ argTypes: {
40
+ children: {
41
+ control: 'text',
42
+ description: 'Content to display inside the glass effect',
43
+ },
44
+ displacementScale: {
45
+ control: { type: 'range', min: 0, max: 100, step: 1 },
46
+ description: 'Displacement scale for the glass effect (default: 70)',
47
+ table: { defaultValue: { summary: '70' } },
48
+ },
49
+ blurAmount: {
50
+ control: { type: 'range', min: 0, max: 10, step: 0.5 },
51
+ description: 'Blur amount for the backdrop (default: 0.0625)',
52
+ table: { defaultValue: { summary: '0.0625' } },
53
+ },
54
+ saturation: {
55
+ control: { type: 'range', min: 100, max: 300, step: 5 },
56
+ description: 'Saturation percentage for the backdrop (default: 140)',
57
+ table: { defaultValue: { summary: '140' } },
58
+ },
59
+ aberrationIntensity: {
60
+ control: { type: 'range', min: 0, max: 10, step: 0.1 },
61
+ description: 'Chromatic aberration intensity (default: 2)',
62
+ table: { defaultValue: { summary: '2' } },
63
+ },
64
+ elasticity: {
65
+ control: { type: 'range', min: 0, max: 1, step: 0.01 },
66
+ description: 'Elasticity factor for mouse interactions (default: 0.15)',
67
+ table: { defaultValue: { summary: '0.15' } },
68
+ },
69
+ cornerRadius: {
70
+ control: { type: 'range', min: 0, max: 50, step: 1 },
71
+ description: 'Corner radius in pixels (default: 20)',
72
+ table: { defaultValue: { summary: '20' } },
73
+ },
74
+ globalMousePosition: {
75
+ control: 'object',
76
+ description: 'External global mouse position { x: number; y: number }',
77
+ },
78
+ mouseOffset: {
79
+ control: 'object',
80
+ description: 'External mouse offset { x: number; y: number }',
81
+ },
82
+ mouseContainer: {
83
+ control: false,
84
+ description: 'React ref object for mouse container element',
85
+ },
86
+ padding: {
87
+ control: 'text',
88
+ description: 'Padding for the glass container (default: "0 0")',
89
+ table: { defaultValue: { summary: '"0 0"' } },
90
+ },
91
+ overLight: {
92
+ control: 'boolean',
93
+ description: 'Whether the glass is over a light background (default: false)',
94
+ table: { defaultValue: { summary: 'false' } },
95
+ },
96
+ mode: {
97
+ control: 'select',
98
+ options: ['standard', 'polar', 'prominent', 'shader'],
99
+ description: 'Glass effect mode (default: "standard")',
100
+ table: { defaultValue: { summary: '"standard"' } },
101
+ },
102
+ onClick: {
103
+ action: 'clicked',
104
+ description: 'Click event handler',
105
+ },
106
+ className: {
107
+ control: 'text',
108
+ description: 'Additional CSS class names',
109
+ },
110
+ style: {
111
+ control: 'object',
112
+ description: 'CSS style object',
113
+ },
114
+ 'aria-label': {
115
+ control: 'text',
116
+ description: 'ARIA label for accessibility',
117
+ },
118
+ 'aria-describedby': {
119
+ control: 'text',
120
+ description: 'ARIA describedby attribute for accessibility',
121
+ },
122
+ role: {
123
+ control: 'text',
124
+ description: 'ARIA role attribute',
125
+ },
126
+ tabIndex: {
127
+ control: 'number',
128
+ description: 'Tab index for keyboard navigation',
129
+ },
130
+ reducedMotion: {
131
+ control: 'boolean',
132
+ description: 'Override for reduced motion preference (default: false)',
133
+ table: { defaultValue: { summary: 'false' } },
134
+ },
135
+ highContrast: {
136
+ control: 'boolean',
137
+ description: 'Override for high contrast preference (default: false)',
138
+ table: { defaultValue: { summary: 'false' } },
139
+ },
140
+ disableEffects: {
141
+ control: 'boolean',
142
+ description: 'Disable all visual effects (default: false)',
143
+ table: { defaultValue: { summary: 'false' } },
144
+ },
145
+ enablePerformanceMonitoring: {
146
+ control: 'boolean',
147
+ description: 'Enable performance monitoring (default: false)',
148
+ table: { defaultValue: { summary: 'false' } },
149
+ },
150
+ },
151
+ };
152
+
153
+ export default meta;
154
+ type Story = StoryObj<typeof AtomixGlass>;
155
+
156
+ /**
157
+ * Enhanced BackgroundWrapper Component
158
+ *
159
+ * A utility component used throughout the stories to provide consistent background
160
+ * styling and overlay effects. This wrapper creates a visually appealing container
161
+ * for showcasing the AtomixGlass component in various scenarios.
162
+ *
163
+ * @component BackgroundWrapper
164
+ */
165
+ interface BackgroundWrapperProps {
166
+ /** Child elements to render inside the wrapper */
167
+ children: React.ReactNode;
168
+ /** Background image URL or index from the backgroundImages array */
169
+ backgroundImage?: string;
170
+ /** Background index to use from the predefined array */
171
+ backgroundIndex?: number;
172
+ /** Optional overlay flag for quick overlay application */
173
+ overlay?: boolean;
174
+ /** Custom overlay color in CSS format */
175
+ overlayColor?: string;
176
+ /** Overlay opacity (0-1) */
177
+ overlayOpacity?: number;
178
+ /** Container height */
179
+ height?: string;
180
+ /** Container width */
181
+ width?: string;
182
+ /** Container border radius */
183
+ borderRadius?: string;
184
+ /** Container padding */
185
+ padding?: string;
186
+ /** Additional CSS class names */
187
+ className?: string;
188
+ /** Additional inline styles */
189
+ style?: React.CSSProperties;
190
+ /** Enable interactive background movement */
191
+ interactive?: boolean;
192
+ }
193
+
194
+ /**
195
+ * Interactive Story Container
196
+ *
197
+ * A container that provides mouse tracking and interactive background effects
198
+ * for enhanced storytelling and demonstration purposes.
199
+ */
200
+ interface StoryContainerProps {
201
+ children: React.ReactNode;
202
+ style?: React.CSSProperties;
203
+ interactive?: boolean;
204
+ }
205
+
206
+ /**
207
+ * Interactive Wrapper Component
208
+ *
209
+ * Provides mouse position tracking and offset calculations for interactive stories
210
+ */
211
+ interface InteractiveWrapperProps {
212
+ children: (
213
+ mousePos: { x: number; y: number },
214
+ mouseOffset: { x: number; y: number },
215
+ containerRef: RefObject<HTMLDivElement>
216
+ ) => React.ReactNode;
217
+ }
218
+
219
+ /**
220
+ * BackgroundWrapper Component Implementation
221
+ *
222
+ * Renders a container with a background image and optional overlay,
223
+ * providing a consistent environment for showcasing the AtomixGlass component.
224
+ *
225
+ * @param props - BackgroundWrapperProps
226
+ * @returns JSX.Element
227
+ */
228
+ const BackgroundWrapper = ({
229
+ children,
230
+ backgroundImage,
231
+ backgroundIndex,
232
+ overlay = false,
233
+ overlayColor = 'rgba(0,0,0,0)',
234
+ overlayOpacity = 0,
235
+ height = '90vh',
236
+ width = '90vw',
237
+ borderRadius = '12px',
238
+ padding = '24px',
239
+ className = '',
240
+ style = {},
241
+ }: BackgroundWrapperProps) => {
242
+ // If backgroundIndex is provided, use it to select from the backgroundImages array
243
+ const bgImage =
244
+ backgroundIndex !== undefined ? backgroundImages[backgroundIndex] : backgroundImage;
245
+
246
+ // Apply default overlay settings if overlay flag is true using nullish coalescing
247
+ const finalOverlayColor = overlay ? 'rgba(0,0,0,0.5)' : (overlayColor ?? 'rgba(0,0,0,0)');
248
+ const finalOverlayOpacity = overlay ? 0.5 : (overlayOpacity ?? 0);
249
+
250
+ return (
251
+ <div
252
+ className={`atomix-glass-background ${className}`}
253
+ style={{
254
+ position: 'relative',
255
+ width: width,
256
+ minHeight: height,
257
+ height: '100%',
258
+ backgroundColor: !bgImage ? '#1a1a2e' : undefined, // Fallback color if no image
259
+ background: bgImage
260
+ ? `url(${bgImage}) ${finalOverlayOpacity && ',' + finalOverlayColor}`
261
+ : undefined,
262
+ backgroundSize: 'cover',
263
+ backgroundPosition: 'center',
264
+ backgroundAttachment: 'fixed',
265
+ display: 'flex',
266
+ alignItems: 'center',
267
+ justifyContent: 'center',
268
+ borderRadius: borderRadius,
269
+ padding: padding,
270
+ ...style,
271
+ }}
272
+ >
273
+ {/* Overlay for better contrast and visual appeal */}
274
+ {finalOverlayOpacity > 0 && (
275
+ <div
276
+ style={{
277
+ position: 'absolute',
278
+ top: 0,
279
+ left: 0,
280
+ right: 0,
281
+ bottom: 0,
282
+ backgroundColor: finalOverlayColor,
283
+ opacity: finalOverlayOpacity,
284
+ }}
285
+ />
286
+ )}
287
+ <div
288
+ style={{
289
+ position: 'relative',
290
+ width: '100%',
291
+ height: '100%',
292
+ display: 'flex',
293
+ alignItems: 'center',
294
+ justifyContent: 'center',
295
+ color: 'white',
296
+ }}
297
+ >
298
+ {children}
299
+ </div>
300
+ </div>
301
+ );
302
+ };
303
+
304
+ /**
305
+ * Interactive Story Container Component
306
+ *
307
+ * A container that provides mouse tracking and interactive background effects
308
+ * for enhanced storytelling and demonstration purposes.
309
+ */
310
+ const StoryContainer = ({ children, style = {}, interactive = false }: StoryContainerProps) => {
311
+ const containerRef = useRef<HTMLDivElement>(null);
312
+ const [backgroundPosition, setBackgroundPosition] = useState({ x: 0, y: 0 });
313
+
314
+ const handleMouseMove = useCallback(
315
+ (e: MouseEvent) => {
316
+ if (containerRef.current && interactive) {
317
+ const rect = containerRef.current.getBoundingClientRect();
318
+ const centerX = rect.left + rect.width / 2;
319
+ const centerY = rect.top + rect.height / 2;
320
+
321
+ // Calculate offset as a percentage
322
+ const offsetX = ((e.clientX - centerX) / rect.width) * 100;
323
+ const offsetY = ((e.clientY - centerY) / rect.height) * 100;
324
+
325
+ setBackgroundPosition({ x: offsetX, y: offsetY });
326
+ }
327
+ },
328
+ [interactive]
329
+ );
330
+
331
+ useEffect(() => {
332
+ const currentRef = containerRef.current;
333
+ if (currentRef && interactive) {
334
+ currentRef.addEventListener('mousemove', handleMouseMove);
335
+ return () => {
336
+ currentRef.removeEventListener('mousemove', handleMouseMove);
337
+ };
338
+ }
339
+ }, [handleMouseMove, interactive]);
340
+
341
+ return (
342
+ <div
343
+ ref={containerRef}
344
+ style={{
345
+ width: '100vw',
346
+ height: '100vh',
347
+ display: 'flex',
348
+ alignItems: 'center',
349
+ justifyContent: 'center',
350
+ backgroundImage: interactive
351
+ ? 'url(https://images.unsplash.com/photo-1497366216548-37526070297c?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D)'
352
+ : undefined,
353
+ backgroundSize: interactive ? '160%' : 'cover',
354
+ backgroundPosition: interactive
355
+ ? `calc(50% + ${backgroundPosition.x}px) calc(50% + ${backgroundPosition.y}px)`
356
+ : 'center',
357
+ ...style,
358
+ }}
359
+ >
360
+ {children}
361
+ </div>
362
+ );
363
+ };
364
+
365
+ /**
366
+ * Interactive Wrapper Component
367
+ *
368
+ * Provides mouse position tracking and offset calculations for interactive stories
369
+ */
370
+ const InteractiveWrapper = ({ children }: InteractiveWrapperProps) => {
371
+ const containerRef = useRef<HTMLDivElement>(null);
372
+ const [mousePos, setMousePos] = useState({ x: 0, y: 0 });
373
+ const [mouseOffset, setMouseOffset] = useState({ x: 0, y: 0 });
374
+
375
+ const handleMouseMove = useCallback((e: MouseEvent) => {
376
+ if (containerRef.current) {
377
+ const rect = containerRef.current.getBoundingClientRect();
378
+ const centerX = rect.left + rect.width / 2;
379
+ const centerY = rect.top + rect.height / 2;
380
+
381
+ setMouseOffset({
382
+ x: ((e.clientX - centerX) / rect.width) * 100,
383
+ y: ((e.clientY - centerY) / rect.height) * 100,
384
+ });
385
+ }
386
+ setMousePos({ x: e.clientX, y: e.clientY });
387
+ }, []);
388
+
389
+ useEffect(() => {
390
+ const currentRef = containerRef.current;
391
+ currentRef?.addEventListener('mousemove', handleMouseMove);
392
+ return () => {
393
+ currentRef?.removeEventListener('mousemove', handleMouseMove);
394
+ };
395
+ }, [handleMouseMove]);
396
+
397
+ return (
398
+ <div ref={containerRef} style={{ width: '100%', height: '100%' }}>
399
+ {children(mousePos, mouseOffset, containerRef)}
400
+ </div>
401
+ );
402
+ };
403
+
404
+ /**
405
+ * Collection of high-quality background images for different moods and scenarios
406
+ *
407
+ * This array provides a variety of background options that work well with the
408
+ * AtomixGlass component, showcasing different visual styles and contexts.
409
+ */
410
+ const backgroundImages = [
411
+ // 0: Modern office interior with natural lighting
412
+ 'https://images.unsplash.com/photo-1637825891028-564f672aa42c?ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&q=80&w=2670',
413
+ // 1: Beautiful natural landscape - mountains and lake
414
+ 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
415
+ // 2: Urban cityscape with modern buildings
416
+ 'https://images.unsplash.com/photo-1519681393784-d120267933ba?ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&q=80&w=2670',
417
+ // 3: Forest path with sunlight filtering through trees
418
+ 'https://images.unsplash.com/photo-1441974231531-c6227db76b6e?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
419
+ // 4: Ocean waves and beach scene
420
+ 'https://images.unsplash.com/photo-1505142468610-359e7d316be0?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
421
+ // 5: Modern architecture with glass facades
422
+ 'https://images.unsplash.com/photo-1486406146926-c627a92ad1ab?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
423
+ // 6: Cozy café interior with warm lighting
424
+ 'https://images.unsplash.com/photo-1554118811-1e0d58224f24?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
425
+ // 7: Desert landscape with dramatic sky
426
+ 'https://images.unsplash.com/photo-1509316785289-025f5b846b35?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
427
+ // 8: Tropical paradise with palm trees and ocean
428
+ 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
429
+ // 9: Modern library or workspace with natural light
430
+ 'https://images.unsplash.com/photo-1521587760476-6c12a4b040da?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
431
+ ];
432
+
433
+ /**
434
+ * Legacy backgrounds object for backward compatibility
435
+ * @deprecated Use backgroundImages array instead
436
+ */
437
+ const backgrounds = {
438
+ // Office and workspace environments
439
+ blueGradient: backgroundImages[0], // Modern office interior
440
+ purpleGradient: backgroundImages[1], // Mountain landscape
441
+ greenGradient: backgroundImages[3], // Forest path
442
+
443
+ // Apple-inspired natural scenes
444
+ macosWallpaper: backgroundImages[1], // Mountain landscape
445
+ iosWallpaper: backgroundImages[4], // Ocean waves
446
+
447
+ // Nature scenes
448
+ mountains: backgroundImages[1], // Mountain landscape
449
+ ocean: backgroundImages[4], // Ocean waves
450
+
451
+ // Urban environments
452
+ cityNight: backgroundImages[2], // Urban cityscape
453
+ cityDay: backgroundImages[5], // Modern architecture
454
+
455
+ // Interior spaces
456
+ abstract1: backgroundImages[6], // Cozy café interior
457
+ abstract2: backgroundImages[9], // Modern library
458
+
459
+ // Video backgrounds
460
+ videoBackground:
461
+ 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4',
462
+ };
463
+
464
+ /**
465
+ * Default showcase of the AtomixGlass component
466
+ *
467
+ * This story demonstrates the default configuration of the AtomixGlass component
468
+ * with carefully selected parameters to achieve an optimal glass effect. It serves
469
+ * as a reference implementation with balanced settings suitable for most use cases.
470
+ *
471
+ * Key features demonstrated:
472
+ * - Balanced displacement scale for subtle distortion
473
+ * - Moderate blur amount for the frosted glass effect
474
+ * - Enhanced saturation for visual appeal
475
+ * - Subtle chromatic aberration for depth
476
+ * - Interactive hover effects for engagement
477
+ */
478
+ export const Default: Story = {
479
+ args: {
480
+ children: (
481
+ <div style={{ padding: '30px', textAlign: 'center', maxWidth: '400px' }}>
482
+ <h2 style={{ margin: '0 0 16px 0', fontSize: '24px', fontWeight: 600 }}>AtomixGlass</h2>
483
+ <p style={{ margin: '0 0 20px 0', fontSize: '16px', lineHeight: 1.6 }}>
484
+ A premium glass morphism component with realistic light refraction, chromatic aberration,
485
+ and interactive effects.
486
+ </p>
487
+ <div style={{ display: 'flex', justifyContent: 'center', gap: '12px', flexWrap: 'wrap' }}>
488
+ <Button variant="primary" glass>Explore</Button>
489
+ <Button variant="outline-primary" glass>Learn More</Button>
490
+ </div>
491
+ </div>
492
+ ),
493
+ },
494
+ decorators: [
495
+ Story => (
496
+ <BackgroundWrapper
497
+ backgroundImage={backgroundImages[0]}
498
+ >
499
+ <Story />
500
+ </BackgroundWrapper>
501
+ ),
502
+ ],
503
+ parameters: {
504
+ docs: {
505
+ description: {
506
+ story:
507
+ 'The default configuration of AtomixGlass with optimal parameters for a realistic glass effect. This component mimics the Apple-style liquid glass UI with chromatic aberration and displacement effects.',
508
+ },
509
+ },
510
+ },
511
+ };
512
+
513
+ /**
514
+ * Mode Showcase - Demonstrates the visual differences between the various modes
515
+ *
516
+ * This story showcases all available modes of the AtomixGlass component with
517
+ * optimized settings for each mode to highlight their unique characteristics.
518
+ */
519
+ /**
520
+ * Modes Story
521
+ *
522
+ * This story demonstrates the different modes available in the AtomixGlass component.
523
+ * Each mode provides a unique visual effect with different displacement patterns,
524
+ * blur amounts, and aberration intensities. This showcase allows users to compare
525
+ * the different modes side by side and understand their visual characteristics.
526
+ *
527
+ * Modes demonstrated:
528
+ * - standard: Balanced displacement and aberration
529
+ * - polar: Circular refraction pattern
530
+ * - prominent: Enhanced displacement with stronger edge effects
531
+ * - shader: Advanced shader-based displacement for maximum visual impact
532
+ */
533
+ export const Modes: Story = {
534
+ parameters: {
535
+ docs: {
536
+ description: {
537
+ story:
538
+ 'Showcases the different modes available in the AtomixGlass component, highlighting their unique visual characteristics.',
539
+ },
540
+ },
541
+ },
542
+ render: () => {
543
+ // eslint-disable-next-line react-hooks/rules-of-hooks
544
+ const [activeMode, setActiveMode] = useState<string | null>(null);
545
+ const modes = ['standard', 'polar', 'prominent', 'shader'] as const;
546
+
547
+ // Different settings for each mode to highlight their unique characteristics
548
+ const modeSettings = {
549
+ standard: {
550
+ displacementScale: 150,
551
+ blurAmount: 0,
552
+ shaderVariant: 'premiumGlass',
553
+ saturation: 140,
554
+ aberrationIntensity: 'default',
555
+ description: 'Standard glass effect with balanced displacement and aberration',
556
+ color: '#ffffff',
557
+ },
558
+ polar: {
559
+ displacementScale: 120,
560
+ blurAmount: 0,
561
+ shaderVariant: 'premiumGlass',
562
+ saturation: 140,
563
+ aberrationIntensity: 'default',
564
+ description: 'Polar displacement creates a circular refraction pattern',
565
+ color: '#f0f8ff',
566
+ },
567
+ prominent: {
568
+ shaderVariant: 'premiumGlass',
569
+ displacementScale: 100,
570
+ blurAmount: 0,
571
+ saturation: 140,
572
+ aberrationIntensity: 'default',
573
+ description: 'Enhanced displacement with stronger edge effects',
574
+ color: '#ffffff',
575
+ },
576
+ shader: {
577
+ displacementScale: 190,
578
+ shaderVariant: 'premiumGlass',
579
+ blurAmount: 0,
580
+ saturation: 140,
581
+ aberrationIntensity: 'default',
582
+ description: 'Advanced shader-based displacement for maximum visual impact',
583
+ color: '#e6f7ff',
584
+ },
585
+ };
586
+
587
+ // Handle mouse enter/leave for cards
588
+ const handleMouseEnter = (mode: string) => {
589
+ setActiveMode(mode);
590
+ };
591
+
592
+ const handleMouseLeave = () => {
593
+ setActiveMode(null);
594
+ };
595
+
596
+ return (
597
+ <BackgroundWrapper
598
+ backgroundImage="https://plus.unsplash.com/premium_photo-1728613098996-af5b4ee51be8?q=80&w=3269&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"
599
+ overlay={true}
600
+ >
601
+ <div>
602
+ <div
603
+ style={{
604
+ padding: '20px 0',
605
+ textAlign: 'center',
606
+ marginBottom: '20px',
607
+ }}
608
+ >
609
+ <h2
610
+ style={{
611
+ margin: '0 0 10px 0',
612
+ fontSize: '32px',
613
+ fontWeight: 500,
614
+ color: '#ffffff',
615
+ textShadow: '0 2px 4px rgba(0,0,0,0.2)',
616
+ }}
617
+ >
618
+ AtomixGlass Modes
619
+ </h2>
620
+ <p
621
+ style={{
622
+ fontSize: '16px',
623
+ maxWidth: '500px',
624
+ margin: '0 auto',
625
+ color: '#ffffff',
626
+ textShadow: '0 1px 2px rgba(0,0,0,0.2)',
627
+ }}
628
+ >
629
+ Hover over each card to see how different modes affect the appearance and behavior of
630
+ the glass effect.
631
+ </p>
632
+ </div>
633
+
634
+ <div
635
+ style={{
636
+ display: 'flex',
637
+ flexWrap: 'wrap',
638
+ justifyContent: 'center',
639
+ alignContent: 'center',
640
+ gap: '24px',
641
+ width: '70vw',
642
+ }}
643
+ >
644
+ {modes.map(mode => {
645
+ const settings = modeSettings[mode];
646
+ const isActive = activeMode === mode;
647
+
648
+ return (
649
+ <AtomixGlass
650
+ key={mode}
651
+ mode={mode}
652
+ displacementScale={settings.displacementScale}
653
+ blurAmount={settings.blurAmount}
654
+ saturation={settings.saturation}
655
+ shaderVariant={settings.shaderVariant as any}
656
+ elasticity={0.2}
657
+ cornerRadius={40}
658
+ onClick={() => handleMouseEnter(mode)}
659
+ overLight={false}
660
+ >
661
+ <div
662
+ style={{
663
+ padding: '20px 40px',
664
+ textAlign: 'center',
665
+ maxWidth: '350px',
666
+ minHeight: '200px',
667
+ width: '100%',
668
+ textShadow: '1px 2px 6px rgba(0,0,0,0.7)',
669
+ }}
670
+ >
671
+ <h3
672
+ style={{
673
+ margin: '0 0 12px 0',
674
+ fontSize: '20px',
675
+ fontWeight: 500,
676
+ color: settings.color,
677
+ }}
678
+ >
679
+ {mode.charAt(0).toUpperCase() + mode.slice(1)} Mode
680
+ </h3>
681
+ <p
682
+ style={{
683
+ margin: '0 0 16px 0',
684
+ fontSize: '14px',
685
+ lineHeight: 1.5,
686
+ color: settings.color,
687
+ }}
688
+ >
689
+ {settings.description}
690
+ </p>
691
+ <div
692
+ style={{
693
+ display: 'flex',
694
+ justifyContent: 'center',
695
+ alignItems: 'center',
696
+ gap: '8px',
697
+ marginTop: '12px',
698
+ flexWrap: 'wrap',
699
+ }}
700
+ >
701
+ <span
702
+ style={{
703
+ fontSize: '12px',
704
+ padding: '4px 8px',
705
+ borderRadius: '4px',
706
+ backdropFilter: 'blur(2px)',
707
+ background: 'rgba(255,255,255,0.2)',
708
+ }}
709
+ >
710
+ Displacement: {settings.displacementScale}
711
+ </span>
712
+ <span
713
+ style={{
714
+ fontSize: '12px',
715
+ padding: '4px 8px',
716
+ borderRadius: '4px',
717
+ background: 'rgba(255,255,255,0.2)',
718
+ backdropFilter: 'blur(2px)',
719
+ }}
720
+ >
721
+ Blur: {settings.blurAmount}
722
+ </span>
723
+ <span
724
+ style={{
725
+ fontSize: '12px',
726
+ padding: '4px 8px',
727
+ borderRadius: '4px',
728
+ backdropFilter: 'blur(2px)',
729
+ background: 'rgba(255,255,255,0.2)',
730
+ }}
731
+ >
732
+ Aberration: {settings.aberrationIntensity}
733
+ </span>
734
+ </div>
735
+ </div>
736
+ </AtomixGlass>
737
+ );
738
+ })}
739
+ </div>
740
+ </div>
741
+ </BackgroundWrapper>
742
+ );
743
+ },
744
+ };
745
+
746
+
747
+ /**
748
+ * Performance Optimization Dashboard
749
+ *
750
+ * Demonstrates enterprise-grade performance optimization techniques with side-by-side
751
+ * comparisons of different configuration strategies and their impact on rendering efficiency.
752
+ */
753
+ export const PerformanceOptimization: Story = {
754
+ parameters: {
755
+ docs: {
756
+ description: {
757
+ story:
758
+ 'A comprehensive performance optimization guide showcasing three distinct configuration profiles: High Performance (mobile-optimized), Balanced (desktop standard), and Premium (high-end hardware). Each profile demonstrates the trade-offs between visual fidelity and rendering performance.',
759
+ },
760
+ },
761
+ },
762
+ render: () => (
763
+ <BackgroundWrapper backgroundImage={'https://images.unsplash.com/photo-1706705618478-505e088180c4?ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&q=80&w=2532'} padding="60px 20px">
764
+ <div style={{ margin: '0 auto', width: '100%' }}>
765
+ {/* Header Section */}
766
+ <div style={{ textAlign: 'center', marginBottom: '60px' }}>
767
+ <h1
768
+ style={{
769
+ color: '#fff',
770
+ fontSize: '3rem',
771
+ fontWeight: '700',
772
+ marginBottom: '16px',
773
+ letterSpacing: '-0.02em',
774
+ }}
775
+ >
776
+ Performance Optimization
777
+ </h1>
778
+ <p
779
+ style={{
780
+ color: 'rgba(255,255,255,0.85)',
781
+ fontSize: '1.25rem',
782
+ maxWidth: '700px',
783
+ margin: '0 auto',
784
+ lineHeight: '1.6',
785
+ }}
786
+ >
787
+ Fine-tune AtomixGlass for optimal performance across different device capabilities
788
+ </p>
789
+ </div>
790
+
791
+ {/* Performance Guidelines */}
792
+ <AtomixGlass
793
+ displacementScale={60}
794
+ blurAmount={3}
795
+ saturation={130}
796
+ aberrationIntensity={1.2}
797
+ elasticity={0}
798
+ cornerRadius={16}
799
+ mode="prominent"
800
+ style={{ marginBottom: '48px' }}
801
+ >
802
+ <div style={{ padding: '32px' }}>
803
+ <h2
804
+ style={{
805
+ color: '#fff',
806
+ fontSize: '1.75rem',
807
+ fontWeight: '600',
808
+ marginBottom: '24px',
809
+ marginTop: 0,
810
+ }}
811
+ >
812
+ Best Practices & Guidelines
813
+ </h2>
814
+ <div
815
+ style={{
816
+ display: 'grid',
817
+ gridTemplateColumns: 'repeat(auto-fit, minmax(280px, 1fr))',
818
+ gap: '24px',
819
+ color: '#fff',
820
+ }}
821
+ >
822
+ <div>
823
+ <div
824
+ style={{
825
+ fontSize: '2rem',
826
+ marginBottom: '12px',
827
+ opacity: 0.9,
828
+ }}
829
+ >
830
+
831
+ </div>
832
+ <h3 style={{ fontSize: '1.125rem', fontWeight: '600', marginBottom: '8px' }}>
833
+ Limit Instances
834
+ </h3>
835
+ <p style={{ fontSize: '0.9375rem', lineHeight: '1.6', opacity: 0.85, margin: 0 }}>
836
+ Use 3-5 glass components maximum per view to maintain optimal frame rates
837
+ </p>
838
+ </div>
839
+ <div>
840
+ <div
841
+ style={{
842
+ fontSize: '2rem',
843
+ marginBottom: '12px',
844
+ opacity: 0.9,
845
+ }}
846
+ >
847
+ 📱
848
+ </div>
849
+ <h3 style={{ fontSize: '1.125rem', fontWeight: '600', marginBottom: '8px' }}>
850
+ Mobile Optimization
851
+ </h3>
852
+ <p style={{ fontSize: '0.9375rem', lineHeight: '1.6', opacity: 0.85, margin: 0 }}>
853
+ Reduce complexity on mobile: lower displacement scale and disable hover effects
854
+ </p>
855
+ </div>
856
+ <div>
857
+ <div
858
+ style={{
859
+ fontSize: '2rem',
860
+ marginBottom: '12px',
861
+ opacity: 0.9,
862
+ }}
863
+ >
864
+ 🎯
865
+ </div>
866
+ <h3 style={{ fontSize: '1.125rem', fontWeight: '600', marginBottom: '8px' }}>
867
+ Strategic Placement
868
+ </h3>
869
+ <p style={{ fontSize: '0.9375rem', lineHeight: '1.6', opacity: 0.85, margin: 0 }}>
870
+ Apply glass effects to focal points only—cards, modals, and navigation elements
871
+ </p>
872
+ </div>
873
+ </div>
874
+ </div>
875
+ </AtomixGlass>
876
+
877
+ {/* Configuration Comparison Grid */}
878
+ <div
879
+ style={{
880
+ display: 'grid',
881
+ gridTemplateColumns: 'repeat(auto-fit, minmax(350px, 1fr))',
882
+ gap: '32px',
883
+ }}
884
+ >
885
+ {/* High Performance Profile */}
886
+ <div>
887
+ <div
888
+ style={{
889
+ marginBottom: '16px',
890
+ display: 'flex',
891
+ alignItems: 'center',
892
+ gap: '12px',
893
+ }}
894
+ >
895
+ <div
896
+ style={{
897
+ width: '8px',
898
+ height: '8px',
899
+ borderRadius: '50%',
900
+ backgroundColor: '#34C759',
901
+ boxShadow: '0 0 12px rgba(52, 199, 89, 0.6)',
902
+ }}
903
+ />
904
+ <h3 style={{ color: '#fff', fontSize: '1.5rem', fontWeight: '600', margin: 0 }}>
905
+ High Performance
906
+ </h3>
907
+ </div>
908
+ <AtomixGlass
909
+ displacementScale={25}
910
+ blurAmount={0.2}
911
+ saturation={120}
912
+ aberrationIntensity={0.8}
913
+ elasticity={0.8}
914
+ cornerRadius={12}
915
+ mode="standard"
916
+ style={{ height: '100%', minHeight: '400px' }}
917
+ >
918
+ <div
919
+ style={{
920
+ padding: '28px',
921
+ height: '100%',
922
+ display: 'flex',
923
+ flexDirection: 'column',
924
+ }}
925
+ >
926
+ <div
927
+ style={{
928
+ display: 'inline-flex',
929
+ alignItems: 'center',
930
+ gap: '8px',
931
+ padding: '6px 12px',
932
+ borderRadius: '20px',
933
+ backgroundColor: 'rgba(52, 199, 89, 0.2)',
934
+ color: '#34C759',
935
+ fontSize: '0.875rem',
936
+ fontWeight: '600',
937
+ marginBottom: '20px',
938
+ alignSelf: 'flex-start',
939
+ }}
940
+ >
941
+ <span>🚀</span>
942
+ <span>OPTIMIZED</span>
943
+ </div>
944
+ <h4
945
+ style={{
946
+ marginTop: 0,
947
+ marginBottom: '16px',
948
+ fontSize: '1.25rem',
949
+ fontWeight: '600',
950
+ }}
951
+ >
952
+ Mobile-First Configuration
953
+ </h4>
954
+ <div style={{ flex: 1 }}>
955
+ <div style={{ marginBottom: '24px' }}>
956
+ <div
957
+ style={{
958
+ display: 'grid',
959
+ gridTemplateColumns: '1fr auto',
960
+ gap: '12px',
961
+ fontSize: '0.9375rem',
962
+ lineHeight: '1.8',
963
+ }}
964
+ >
965
+ <span style={{ opacity: 0.85 }}>Displacement Scale:</span>
966
+ <span style={{ fontWeight: '600', fontFamily: 'monospace' }}>25</span>
967
+ <span style={{ opacity: 0.85 }}>Blur Amount:</span>
968
+ <span style={{ fontWeight: '600', fontFamily: 'monospace' }}>0.2</span>
969
+ <span style={{ opacity: 0.85 }}>Saturation:</span>
970
+ <span style={{ fontWeight: '600', fontFamily: 'monospace' }}>120%</span>
971
+ <span style={{ opacity: 0.85 }}>Aberration:</span>
972
+ <span style={{ fontWeight: '600', fontFamily: 'monospace' }}>0.8</span>
973
+ <span style={{ opacity: 0.85 }}>Elasticity:</span>
974
+ <span style={{ fontWeight: '600', fontFamily: 'monospace' }}>0.8</span>
975
+ </div>
976
+ </div>
977
+ <div
978
+ style={{
979
+ padding: '16px',
980
+ borderRadius: '8px',
981
+ backgroundColor: 'rgba(255, 255, 255, 0.08)',
982
+ fontSize: '0.875rem',
983
+ lineHeight: '1.6',
984
+ }}
985
+ >
986
+ <strong style={{ display: 'block', marginBottom: '8px' }}>Best For:</strong>
987
+ <ul style={{ margin: 0, paddingLeft: '20px', opacity: 0.85 }}>
988
+ <li>Mobile devices & tablets</li>
989
+ <li>Multiple glass instances</li>
990
+ <li>Battery-constrained devices</li>
991
+ <li>Background animations</li>
992
+ </ul>
993
+ </div>
994
+ </div>
995
+ </div>
996
+ </AtomixGlass>
997
+ </div>
998
+
999
+ {/* Balanced Profile */}
1000
+ <div>
1001
+ <div
1002
+ style={{
1003
+ marginBottom: '16px',
1004
+ display: 'flex',
1005
+ alignItems: 'center',
1006
+ gap: '12px',
1007
+ }}
1008
+ >
1009
+ <div
1010
+ style={{
1011
+ width: '8px',
1012
+ height: '8px',
1013
+ borderRadius: '50%',
1014
+ backgroundColor: '#FF9500',
1015
+ boxShadow: '0 0 12px rgba(255, 149, 0, 0.6)',
1016
+ }}
1017
+ />
1018
+ <h3 style={{ color: '#fff', fontSize: '1.5rem', fontWeight: '600', margin: 0 }}>
1019
+ Balanced
1020
+ </h3>
1021
+ </div>
1022
+ <AtomixGlass
1023
+ displacementScale={55}
1024
+ blurAmount={0.4}
1025
+ saturation={150}
1026
+ aberrationIntensity={1.8}
1027
+ elasticity={0.15}
1028
+ cornerRadius={12}
1029
+ mode="standard"
1030
+ style={{ height: '100%', minHeight: '400px' }}
1031
+ >
1032
+ <div
1033
+ style={{
1034
+ padding: '28px',
1035
+ height: '100%',
1036
+ display: 'flex',
1037
+ flexDirection: 'column',
1038
+ }}
1039
+ >
1040
+ <div
1041
+ style={{
1042
+ display: 'inline-flex',
1043
+ alignItems: 'center',
1044
+ gap: '8px',
1045
+ padding: '6px 12px',
1046
+ borderRadius: '20px',
1047
+ backgroundColor: 'rgba(255, 149, 0, 0.2)',
1048
+ color: '#FF9500',
1049
+ fontSize: '0.875rem',
1050
+ fontWeight: '600',
1051
+ marginBottom: '20px',
1052
+ alignSelf: 'flex-start',
1053
+ }}
1054
+ >
1055
+ <span>⚖️</span>
1056
+ <span>RECOMMENDED</span>
1057
+ </div>
1058
+ <h4
1059
+ style={{
1060
+ marginTop: 0,
1061
+ marginBottom: '16px',
1062
+ fontSize: '1.25rem',
1063
+ fontWeight: '600',
1064
+ }}
1065
+ >
1066
+ Production Standard
1067
+ </h4>
1068
+ <div style={{ flex: 1 }}>
1069
+ <div style={{ marginBottom: '24px' }}>
1070
+ <div
1071
+ style={{
1072
+ display: 'grid',
1073
+ gridTemplateColumns: '1fr auto',
1074
+ gap: '12px',
1075
+ fontSize: '0.9375rem',
1076
+ lineHeight: '1.8',
1077
+ }}
1078
+ >
1079
+ <span style={{ opacity: 0.85 }}>Displacement Scale:</span>
1080
+ <span style={{ fontWeight: '600', fontFamily: 'monospace' }}>55</span>
1081
+ <span style={{ opacity: 0.85 }}>Blur Amount:</span>
1082
+ <span style={{ fontWeight: '600', fontFamily: 'monospace' }}>0.4</span>
1083
+ <span style={{ opacity: 0.85 }}>Saturation:</span>
1084
+ <span style={{ fontWeight: '600', fontFamily: 'monospace' }}>150%</span>
1085
+ <span style={{ opacity: 0.85 }}>Aberration:</span>
1086
+ <span style={{ fontWeight: '600', fontFamily: 'monospace' }}>1.8</span>
1087
+ <span style={{ opacity: 0.85 }}>Elasticity:</span>
1088
+ <span style={{ fontWeight: '600', fontFamily: 'monospace' }}>0.15</span>
1089
+ </div>
1090
+ </div>
1091
+ <div
1092
+ style={{
1093
+ padding: '16px',
1094
+ borderRadius: '8px',
1095
+ backgroundColor: 'rgba(255, 255, 255, 0.08)',
1096
+ fontSize: '0.875rem',
1097
+ lineHeight: '1.6',
1098
+ }}
1099
+ >
1100
+ <strong style={{ display: 'block', marginBottom: '8px' }}>Best For:</strong>
1101
+ <ul style={{ margin: 0, paddingLeft: '20px', opacity: 0.85 }}>
1102
+ <li>Desktop applications</li>
1103
+ <li>Modern web browsers</li>
1104
+ <li>Mid-range devices</li>
1105
+ <li>General use cases</li>
1106
+ </ul>
1107
+ </div>
1108
+ </div>
1109
+ </div>
1110
+ </AtomixGlass>
1111
+ </div>
1112
+
1113
+ {/* Premium Profile */}
1114
+ <div>
1115
+ <div
1116
+ style={{
1117
+ marginBottom: '16px',
1118
+ display: 'flex',
1119
+ alignItems: 'center',
1120
+ gap: '12px',
1121
+ }}
1122
+ >
1123
+ <div
1124
+ style={{
1125
+ width: '8px',
1126
+ height: '8px',
1127
+ borderRadius: '50%',
1128
+ backgroundColor: '#AF52DE',
1129
+ boxShadow: '0 0 12px rgba(175, 82, 222, 0.6)',
1130
+ }}
1131
+ />
1132
+ <h3 style={{ color: '#fff', fontSize: '1.5rem', fontWeight: '600', margin: 0 }}>
1133
+ Premium
1134
+ </h3>
1135
+ </div>
1136
+ <AtomixGlass
1137
+ displacementScale={85}
1138
+ blurAmount={0.8}
1139
+ saturation={180}
1140
+ aberrationIntensity={3.2}
1141
+ elasticity={0.22}
1142
+ cornerRadius={12}
1143
+ mode="standard"
1144
+ style={{ height: '100%', minHeight: '400px' }}
1145
+ >
1146
+ <div
1147
+ style={{
1148
+ padding: '28px',
1149
+ height: '100%',
1150
+ display: 'flex',
1151
+ flexDirection: 'column',
1152
+ }}
1153
+ >
1154
+ <div
1155
+ style={{
1156
+ display: 'inline-flex',
1157
+ alignItems: 'center',
1158
+ gap: '8px',
1159
+ padding: '6px 12px',
1160
+ borderRadius: '20px',
1161
+ backgroundColor: 'rgba(175, 82, 222, 0.2)',
1162
+ color: '#AF52DE',
1163
+ fontSize: '0.875rem',
1164
+ fontWeight: '600',
1165
+ marginBottom: '20px',
1166
+ alignSelf: 'flex-start',
1167
+ }}
1168
+ >
1169
+ <span>✨</span>
1170
+ <span>PREMIUM</span>
1171
+ </div>
1172
+ <h4
1173
+ style={{
1174
+ marginTop: 0,
1175
+ marginBottom: '16px',
1176
+ fontSize: '1.25rem',
1177
+ fontWeight: '600',
1178
+ }}
1179
+ >
1180
+ High-Fidelity Visual
1181
+ </h4>
1182
+ <div style={{ flex: 1 }}>
1183
+ <div style={{ marginBottom: '24px' }}>
1184
+ <div
1185
+ style={{
1186
+ display: 'grid',
1187
+ gridTemplateColumns: '1fr auto',
1188
+ gap: '12px',
1189
+ fontSize: '0.9375rem',
1190
+ lineHeight: '1.8',
1191
+ }}
1192
+ >
1193
+ <span style={{ opacity: 0.85 }}>Displacement Scale:</span>
1194
+ <span style={{ fontWeight: '600', fontFamily: 'monospace' }}>85</span>
1195
+ <span style={{ opacity: 0.85 }}>Blur Amount:</span>
1196
+ <span style={{ fontWeight: '600', fontFamily: 'monospace' }}>0.8</span>
1197
+ <span style={{ opacity: 0.85 }}>Saturation:</span>
1198
+ <span style={{ fontWeight: '600', fontFamily: 'monospace' }}>180%</span>
1199
+ <span style={{ opacity: 0.85 }}>Aberration:</span>
1200
+ <span style={{ fontWeight: '600', fontFamily: 'monospace' }}>3.2</span>
1201
+ <span style={{ opacity: 0.85 }}>Elasticity:</span>
1202
+ <span style={{ fontWeight: '600', fontFamily: 'monospace' }}>0.22</span>
1203
+ </div>
1204
+ </div>
1205
+ <div
1206
+ style={{
1207
+ padding: '16px',
1208
+ borderRadius: '8px',
1209
+ backgroundColor: 'rgba(255, 255, 255, 0.08)',
1210
+ fontSize: '0.875rem',
1211
+ lineHeight: '1.6',
1212
+ }}
1213
+ >
1214
+ <strong style={{ display: 'block', marginBottom: '8px' }}>Best For:</strong>
1215
+ <ul style={{ margin: 0, paddingLeft: '20px', opacity: 0.85 }}>
1216
+ <li>High-end hardware</li>
1217
+ <li>Hero sections & CTAs</li>
1218
+ <li>Premium experiences</li>
1219
+ <li>Single focal elements</li>
1220
+ </ul>
1221
+ </div>
1222
+ </div>
1223
+ </div>
1224
+ </AtomixGlass>
1225
+ </div>
1226
+ </div>
1227
+ </div>
1228
+ </BackgroundWrapper>
1229
+ ),
1230
+ };