@shohojdhara/atomix 0.5.0 → 0.5.2

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 (168) hide show
  1. package/atomix.config.ts +12 -0
  2. package/build-tools/webpack-loader.js +5 -4
  3. package/dist/atomix.css +230 -83
  4. package/dist/atomix.css.map +1 -1
  5. package/dist/atomix.min.css +1 -1
  6. package/dist/atomix.min.css.map +1 -1
  7. package/dist/build-tools/webpack-loader.js +5 -4
  8. package/dist/charts.d.ts +24 -23
  9. package/dist/charts.js +271 -369
  10. package/dist/charts.js.map +1 -1
  11. package/dist/config.d.ts +624 -0
  12. package/dist/config.js +59 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/core.d.ts +3 -2
  15. package/dist/core.js +342 -382
  16. package/dist/core.js.map +1 -1
  17. package/dist/forms.d.ts +4 -6
  18. package/dist/forms.js +233 -334
  19. package/dist/forms.js.map +1 -1
  20. package/dist/heavy.d.ts +11 -2
  21. package/dist/heavy.js +406 -445
  22. package/dist/heavy.js.map +1 -1
  23. package/dist/index.d.ts +109 -65
  24. package/dist/index.esm.js +654 -748
  25. package/dist/index.esm.js.map +1 -1
  26. package/dist/index.js +621 -717
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.min.js +1 -1
  29. package/dist/index.min.js.map +1 -1
  30. package/dist/layout.js +59 -60
  31. package/dist/layout.js.map +1 -1
  32. package/dist/theme.js +4 -4
  33. package/dist/theme.js.map +1 -1
  34. package/package.json +24 -9
  35. package/scripts/atomix-cli.js +15 -1
  36. package/scripts/cli/__tests__/complexity-utils.test.js +24 -0
  37. package/scripts/cli/__tests__/detector.test.js +50 -0
  38. package/scripts/cli/__tests__/template-engine.test.js +23 -0
  39. package/scripts/cli/__tests__/test-setup.js +1 -133
  40. package/scripts/cli/commands/doctor.js +15 -3
  41. package/scripts/cli/commands/generate.js +113 -51
  42. package/scripts/cli/internal/ai-engine.js +30 -10
  43. package/scripts/cli/internal/complexity-utils.js +60 -0
  44. package/scripts/cli/internal/component-validator.js +49 -16
  45. package/scripts/cli/internal/generator.js +89 -36
  46. package/scripts/cli/internal/hook-generator.js +5 -2
  47. package/scripts/cli/internal/itcss-generator.js +16 -12
  48. package/scripts/cli/templates/next-templates.js +81 -30
  49. package/scripts/cli/templates/storybook-templates.js +12 -2
  50. package/scripts/cli/utils/detector.js +45 -7
  51. package/scripts/cli/utils/diagnostics.js +78 -0
  52. package/scripts/cli/utils/telemetry.js +13 -0
  53. package/src/components/Accordion/Accordion.stories.tsx +4 -0
  54. package/src/components/AtomixGlass/AtomixGlass.tsx +188 -128
  55. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +63 -91
  56. package/src/components/AtomixGlass/PerformanceDashboard.tsx +153 -201
  57. package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +9 -6
  58. package/src/components/AtomixGlass/glass-utils.ts +51 -1
  59. package/src/components/AtomixGlass/stories/AnimationFeatures.stories.tsx +52 -46
  60. package/src/components/AtomixGlass/stories/Examples.stories.tsx +573 -236
  61. package/src/components/AtomixGlass/stories/Playground.stories.tsx +88 -41
  62. package/src/components/AtomixGlass/stories/argTypes.ts +19 -19
  63. package/src/components/AtomixGlass/stories/shared-components.tsx +7 -12
  64. package/src/components/AtomixGlass/stories/types.ts +3 -3
  65. package/src/components/Button/Button.tsx +114 -57
  66. package/src/components/Callout/Callout.tsx +4 -4
  67. package/src/components/Chart/ChartRenderer.tsx +1 -1
  68. package/src/components/Chart/DonutChart.tsx +11 -8
  69. package/src/components/EdgePanel/EdgePanel.tsx +119 -115
  70. package/src/components/Form/Select.tsx +4 -4
  71. package/src/components/List/List.tsx +4 -4
  72. package/src/components/Navigation/SideMenu/SideMenu.tsx +6 -6
  73. package/src/components/PhotoViewer/PhotoViewerImage.tsx +1 -1
  74. package/src/components/ProductReview/ProductReview.tsx +4 -2
  75. package/src/components/Rating/Rating.tsx +4 -2
  76. package/src/components/SectionIntro/SectionIntro.tsx +4 -2
  77. package/src/components/Steps/Steps.tsx +1 -1
  78. package/src/components/Tabs/Tabs.tsx +5 -5
  79. package/src/components/Testimonial/Testimonial.tsx +4 -2
  80. package/src/components/VideoPlayer/VideoPlayer.tsx +4 -2
  81. package/src/layouts/CssGrid/CssGrid.stories.tsx +464 -0
  82. package/src/layouts/CssGrid/CssGrid.tsx +215 -0
  83. package/src/layouts/CssGrid/index.ts +8 -0
  84. package/src/layouts/CssGrid/scripts/CssGrid.js +284 -0
  85. package/src/layouts/CssGrid/scripts/index.js +43 -0
  86. package/src/layouts/Grid/scripts/Container.js +139 -0
  87. package/src/layouts/Grid/scripts/Grid.js +184 -0
  88. package/src/layouts/Grid/scripts/GridCol.js +273 -0
  89. package/src/layouts/Grid/scripts/Row.js +154 -0
  90. package/src/layouts/Grid/scripts/index.js +48 -0
  91. package/src/layouts/MasonryGrid/MasonryGrid.tsx +71 -59
  92. package/src/lib/composables/atomix-glass/useGlassSize.ts +1 -1
  93. package/src/lib/composables/useAccordion.ts +5 -5
  94. package/src/lib/composables/useAtomixGlass.ts +111 -74
  95. package/src/lib/composables/useAtomixGlassStyles.ts +0 -2
  96. package/src/lib/composables/useBarChart.ts +2 -2
  97. package/src/lib/composables/useChart.ts +3 -2
  98. package/src/lib/composables/useChartToolbar.ts +48 -66
  99. package/src/lib/composables/useDataTable.ts +1 -1
  100. package/src/lib/composables/useDatePicker.ts +2 -2
  101. package/src/lib/composables/useEdgePanel.ts +45 -54
  102. package/src/lib/composables/useHeroBackgroundSlider.ts +5 -5
  103. package/src/lib/composables/usePhotoViewer.ts +2 -3
  104. package/src/lib/composables/usePieChart.ts +1 -1
  105. package/src/lib/composables/usePopover.ts +151 -139
  106. package/src/lib/composables/useSideMenu.ts +28 -41
  107. package/src/lib/composables/useSlider.ts +2 -6
  108. package/src/lib/composables/useTooltip.ts +2 -2
  109. package/src/lib/config/index.ts +39 -0
  110. package/src/lib/constants/components.ts +1 -0
  111. package/src/lib/theme/devtools/Comparator.tsx +1 -1
  112. package/src/lib/theme/devtools/Inspector.tsx +1 -1
  113. package/src/lib/theme/devtools/LiveEditor.tsx +1 -1
  114. package/src/lib/theme/runtime/ThemeProvider.tsx +1 -1
  115. package/src/lib/types/components.ts +1 -0
  116. package/src/styles/01-settings/_index.scss +1 -0
  117. package/src/styles/01-settings/_settings.atomix-glass.scss +174 -0
  118. package/src/styles/01-settings/_settings.masonry-grid.scss +42 -6
  119. package/src/styles/02-tools/_tools.glass.scss +6 -0
  120. package/src/styles/05-objects/_objects.masonry-grid.scss +162 -24
  121. package/src/styles/06-components/_components.atomix-glass.scss +160 -99
  122. package/scripts/cli/__tests__/README.md +0 -81
  123. package/scripts/cli/__tests__/basic.test.js +0 -116
  124. package/scripts/cli/__tests__/clean.test.js +0 -278
  125. package/scripts/cli/__tests__/component-generator.test.js +0 -332
  126. package/scripts/cli/__tests__/component-validator.test.js +0 -433
  127. package/scripts/cli/__tests__/generator.test.js +0 -613
  128. package/scripts/cli/__tests__/glass-motion.test.js +0 -256
  129. package/scripts/cli/__tests__/integration.test.js +0 -938
  130. package/scripts/cli/__tests__/migrate.test.js +0 -74
  131. package/scripts/cli/__tests__/security.test.js +0 -206
  132. package/scripts/cli/__tests__/theme-bridge.test.js +0 -507
  133. package/scripts/cli/__tests__/token-manager.test.js +0 -251
  134. package/scripts/cli/__tests__/token-provider.test.js +0 -361
  135. package/scripts/cli/__tests__/utils.test.js +0 -165
  136. package/src/components/AtomixGlass/stories/AnimationTests.stories.tsx +0 -95
  137. package/src/components/AtomixGlass/stories/CardExamples.stories.tsx +0 -212
  138. package/src/components/AtomixGlass/stories/Customization.stories.tsx +0 -131
  139. package/src/components/AtomixGlass/stories/DashboardExamples.stories.tsx +0 -348
  140. package/src/components/AtomixGlass/stories/EcommerceExamples.stories.tsx +0 -410
  141. package/src/components/AtomixGlass/stories/FormExamples.stories.tsx +0 -436
  142. package/src/components/AtomixGlass/stories/HeroExamples.stories.tsx +0 -264
  143. package/src/components/AtomixGlass/stories/InteractivePlayground.stories.tsx +0 -247
  144. package/src/components/AtomixGlass/stories/MobileUIExamples.stories.tsx +0 -418
  145. package/src/components/AtomixGlass/stories/ModalExamples.stories.tsx +0 -402
  146. package/src/components/AtomixGlass/stories/Modes.stories.tsx +0 -1082
  147. package/src/components/AtomixGlass/stories/Overview.stories.tsx +0 -497
  148. package/src/components/AtomixGlass/stories/Performance.stories.tsx +0 -103
  149. package/src/components/AtomixGlass/stories/PresetGallery.stories.tsx +0 -335
  150. package/src/components/AtomixGlass/stories/Shaders.stories.tsx +0 -395
  151. package/src/components/AtomixGlass/stories/WidgetExamples.stories.tsx +0 -441
  152. package/src/components/TypedButton/TypedButton.stories.tsx +0 -59
  153. package/src/components/TypedButton/TypedButton.tsx +0 -39
  154. package/src/components/TypedButton/index.ts +0 -2
  155. package/src/lib/composables/useBreadcrumb.ts +0 -81
  156. package/src/lib/composables/useChartInteractions.ts +0 -123
  157. package/src/lib/composables/useChartPerformance.ts +0 -347
  158. package/src/lib/composables/useDropdown.ts +0 -338
  159. package/src/lib/composables/useModal.ts +0 -110
  160. package/src/lib/composables/useTypedButton.ts +0 -66
  161. package/src/lib/hooks/usePerformanceMonitor.ts +0 -148
  162. package/src/lib/utils/displacement-generator.ts +0 -92
  163. package/src/lib/utils/memoryMonitor.ts +0 -191
  164. package/src/styles/01-settings/_settings.testtypecheck.scss +0 -53
  165. package/src/styles/01-settings/_settings.typedbutton.scss +0 -53
  166. package/src/styles/06-components/_components.testbutton.scss +0 -212
  167. package/src/styles/06-components/_components.testtypecheck.scss +0 -212
  168. package/src/styles/06-components/_components.typedbutton.scss +0 -212
@@ -1,247 +0,0 @@
1
- /**
2
- * InteractivePlayground.stories.tsx
3
- *
4
- * Simplified interactive playground for AtomixGlass with essential controls.
5
- * Provides real-time adjustment of key parameters without the complexity
6
- * of the full-featured playground.
7
- *
8
- * @package Atomix
9
- * @component AtomixGlass
10
- */
11
- import React from 'react';
12
- import { useState } from 'react';
13
- import { Meta, StoryObj } from '@storybook/react';
14
- import AtomixGlass from '../AtomixGlass';
15
- import { BackgroundWrapper, backgroundImages, StoryErrorBoundary } from './shared-components';
16
- import { advancedArgTypes } from './argTypes';
17
-
18
- import { Button } from '../../Button/Button';
19
-
20
- const meta: Meta<typeof AtomixGlass> = {
21
- title: 'Components/AtomixGlass/Interactive Playground',
22
- component: AtomixGlass,
23
- parameters: {
24
- layout: 'fullscreen',
25
- docs: {
26
- description: {
27
- component:
28
- 'Interactive playground for experimenting with AtomixGlass parameters in real-time. Adjust displacement, blur, saturation, and other effects to find the perfect glass aesthetic.',
29
- },
30
- },
31
- },
32
- tags: ['autodocs'],
33
- argTypes: advancedArgTypes,
34
- };
35
-
36
- export default meta;
37
- type Story = StoryObj<typeof AtomixGlass>;
38
-
39
- /**
40
- * Main Interactive Playground
41
- *
42
- * Full-featured playground with live controls for all major parameters.
43
- */
44
- export const Interactive: Story = {
45
- render: () => {
46
- const [displacementScale, setDisplacementScale] = useState(70);
47
- const [blurAmount, setBlurAmount] = useState(0.5);
48
- const [saturation, setSaturation] = useState(140);
49
- const [aberrationIntensity, setAberrationIntensity] = useState(2);
50
- const [borderRadius, setBorderRadius] = useState(20);
51
- const [mode, setMode] = useState<'standard' | 'polar' | 'prominent' | 'shader'>('standard');
52
-
53
- return (
54
- <StoryErrorBoundary>
55
- <BackgroundWrapper backgroundImage={backgroundImages[0]} overlay overlayOpacity={0.3}>
56
- <div style={{ display: 'flex', gap: '32px', padding: '40px', flexWrap: 'wrap' }}>
57
- {/* Controls Panel */}
58
- <div
59
- style={{
60
- width: '320px',
61
- flexShrink: 0,
62
- }}
63
- >
64
- <AtomixGlass
65
- displacementScale={50}
66
- blurAmount={0.4}
67
- saturation={130}
68
- borderRadius={16}
69
- mode="standard"
70
- padding="24px"
71
- >
72
- <div className="u-text-white">
73
- <h3 className="u-mt-0 u-text-lg u-font-bold u-mb-4">Live Controls</h3>
74
-
75
- {/* Displacement Control */}
76
- <div className="u-mb-4">
77
- <label className="u-block u-text-sm u-font-semibold u-mb-2">
78
- Displacement: {displacementScale}
79
- </label>
80
- <input
81
- type="range"
82
- min="0"
83
- max="100"
84
- value={displacementScale}
85
- onChange={(e) => setDisplacementScale(Number(e.target.value))}
86
- style={{ width: '100%', accentColor: '#667eea' }}
87
- />
88
- </div>
89
-
90
- {/* Blur Control */}
91
- <div className="u-mb-4">
92
- <label className="u-block u-text-sm u-font-semibold u-mb-2">
93
- Blur: {blurAmount}
94
- </label>
95
- <input
96
- type="range"
97
- min="0"
98
- max="10"
99
- step="0.5"
100
- value={blurAmount}
101
- onChange={(e) => setBlurAmount(Number(e.target.value))}
102
- style={{ width: '100%', accentColor: '#667eea' }}
103
- />
104
- </div>
105
-
106
- {/* Saturation Control */}
107
- <div className="u-mb-4">
108
- <label className="u-block u-text-sm u-font-semibold u-mb-2">
109
- Saturation: {saturation}%
110
- </label>
111
- <input
112
- type="range"
113
- min="100"
114
- max="300"
115
- value={saturation}
116
- onChange={(e) => setSaturation(Number(e.target.value))}
117
- style={{ width: '100%', accentColor: '#667eea' }}
118
- />
119
- </div>
120
-
121
- {/* Aberration Control */}
122
- <div className="u-mb-4">
123
- <label className="u-block u-text-sm u-font-semibold u-mb-2">
124
- Aberration: {aberrationIntensity}
125
- </label>
126
- <input
127
- type="range"
128
- min="0"
129
- max="10"
130
- step="0.1"
131
- value={aberrationIntensity}
132
- onChange={(e) => setAberrationIntensity(Number(e.target.value))}
133
- style={{ width: '100%', accentColor: '#667eea' }}
134
- />
135
- </div>
136
-
137
- {/* Border Radius Control */}
138
- <div className="u-mb-4">
139
- <label className="u-block u-text-sm u-font-semibold u-mb-2">
140
- Border Radius: {borderRadius}px
141
- </label>
142
- <input
143
- type="range"
144
- min="0"
145
- max="50"
146
- value={borderRadius}
147
- onChange={(e) => setBorderRadius(Number(e.target.value))}
148
- style={{ width: '100%', accentColor: '#667eea' }}
149
- />
150
- </div>
151
-
152
- {/* Mode Selection */}
153
- <div className="u-mb-4">
154
- <label className="u-block u-text-sm u-font-semibold u-mb-2">Mode</label>
155
- <select
156
- value={mode}
157
- onChange={(e) => setMode(e.target.value as any)}
158
- style={{
159
- width: '100%',
160
- padding: '8px',
161
- borderRadius: '8px',
162
- border: '1px solid rgba(255,255,255,0.2)',
163
- background: 'rgba(255,255,255,0.1)',
164
- color: 'white',
165
- fontSize: '14px',
166
- }}
167
- >
168
- <option value="standard">Standard</option>
169
- <option value="polar">Polar</option>
170
- <option value="prominent">Prominent</option>
171
- <option value="shader">Shader</option>
172
- </select>
173
- </div>
174
-
175
- {/* Reset Button */}
176
- <Button
177
- variant="outline-light"
178
- glass={{ elasticity: 0 }}
179
- onClick={() => {
180
- setDisplacementScale(70);
181
- setBlurAmount(0.5);
182
- setSaturation(140);
183
- setAberrationIntensity(2);
184
- setBorderRadius(20);
185
- setMode('standard');
186
- }}
187
- size="sm"
188
- className="u-w-full"
189
- >
190
- Reset to Defaults
191
- </Button>
192
- </div>
193
- </AtomixGlass>
194
- </div>
195
-
196
- {/* Preview Area */}
197
- <div style={{ flex: 1, minWidth: '400px' }}>
198
- <AtomixGlass
199
- displacementScale={displacementScale}
200
- blurAmount={blurAmount}
201
- saturation={saturation}
202
- aberrationIntensity={aberrationIntensity}
203
- borderRadius={borderRadius}
204
- mode={mode}
205
- padding="40px"
206
- style={{ minHeight: '400px' }}
207
- >
208
- <div className="u-text-center u-text-white">
209
- <h2 className="u-mt-0 u-text-3xl u-font-bold u-mb-3">
210
- Live Preview
211
- </h2>
212
- <p className="u-text-lg u-opacity-90 u-mb-4">
213
- Adjust the controls to see real-time changes
214
- </p>
215
- <div
216
- style={{
217
- fontSize: '64px',
218
- margin: '24px 0',
219
- filter: 'drop-shadow(0 4px 8px rgba(0,0,0,0.3))',
220
- }}
221
- aria-hidden="true"
222
- >
223
- 🎨
224
- </div>
225
- <p className="u-text-sm u-opacity-80">
226
- Current settings:{' '}
227
- <code style={{ background: 'rgba(255,255,255,0.2)', padding: '4px 8px', borderRadius: '4px' }}>
228
- {mode} mode
229
- </code>
230
- </p>
231
- </div>
232
- </AtomixGlass>
233
- </div>
234
- </div>
235
- </BackgroundWrapper>
236
- </StoryErrorBoundary>
237
- );
238
- },
239
- parameters: {
240
- docs: {
241
- description: {
242
- story:
243
- 'Interactive playground with live controls for displacement, blur, saturation, aberration, border radius, and rendering mode.',
244
- },
245
- },
246
- },
247
- };
@@ -1,418 +0,0 @@
1
- /**
2
- * MobileUIExamples.stories.tsx
3
- *
4
- * Mobile-specific UI examples for AtomixGlass including phone frames,
5
- * mobile navigation, and responsive layouts.
6
- *
7
- * @package Atomix
8
- * @component AtomixGlass
9
- */
10
- import React from 'react';
11
- import { useState } from 'react';
12
- import { Meta, StoryObj } from '@storybook/react';
13
- import AtomixGlass from '../AtomixGlass';
14
- import { BackgroundWrapper, backgroundImages, StoryErrorBoundary } from './shared-components';
15
- import { baseArgTypes } from './argTypes';
16
-
17
- import { Button } from '../../Button';
18
- import { Badge } from '../../Badge';
19
-
20
- const meta: Meta<typeof AtomixGlass> = {
21
- title: 'Components/AtomixGlass/Examples/Mobile UI Examples',
22
- component: AtomixGlass,
23
- parameters: {
24
- layout: 'centered',
25
- docs: {
26
- description: {
27
- component:
28
- 'Mobile-specific UI examples demonstrating AtomixGlass for smartphone interfaces, mobile navigation, and responsive designs.',
29
- },
30
- },
31
- },
32
- tags: ['!autodocs'],
33
- argTypes: {
34
- ...baseArgTypes,
35
- children: { control: false },
36
- },
37
- };
38
-
39
- export default meta;
40
- type Story = StoryObj<typeof AtomixGlass>;
41
-
42
- /**
43
- * Mobile App Interface
44
- *
45
- * Complete mobile app interface with phone frame, header, content, and tab bar.
46
- */
47
- export const MobileAppInterface: Story = {
48
- render: () => {
49
- const [activeTab, setActiveTab] = useState('home');
50
-
51
- return (
52
- <StoryErrorBoundary>
53
- <BackgroundWrapper backgroundImage={backgroundImages[5]} overlay overlayOpacity={0.3}>
54
- {/* Phone Frame */}
55
- <div
56
- style={{
57
- width: '375px',
58
- height: '812px',
59
- borderRadius: '40px',
60
- padding: '12px',
61
- background: 'linear-gradient(135deg, #1f2937 0%, #111827 100%)',
62
- boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.5)',
63
- position: 'relative',
64
- }}
65
- role="img"
66
- aria-label="Mobile phone frame"
67
- >
68
- {/* Phone Notch */}
69
- <div
70
- style={{
71
- position: 'absolute',
72
- top: '12px',
73
- left: '50%',
74
- transform: 'translateX(-50%)',
75
- width: '150px',
76
- height: '30px',
77
- borderBottomLeftRadius: '16px',
78
- borderBottomRightRadius: '16px',
79
- background: '#000',
80
- zIndex: 100,
81
- }}
82
- aria-hidden="true"
83
- />
84
-
85
- {/* Screen */}
86
- <div
87
- style={{
88
- width: '100%',
89
- height: '100%',
90
- borderRadius: '32px',
91
- overflow: 'hidden',
92
- position: 'relative',
93
- }}
94
- >
95
- <AtomixGlass
96
- displacementScale={60}
97
- blurAmount={0}
98
- borderRadius={32}
99
- mode="standard"
100
- style={{ height: '100%' }}
101
- >
102
- <div className="u-text-white" style={{ height: '100%', display: 'flex', flexDirection: 'column' }}>
103
- {/* Status Bar */}
104
- <div
105
- style={{
106
- padding: '44px 20px 12px',
107
- display: 'flex',
108
- justifyContent: 'space-between',
109
- alignItems: 'center',
110
- fontSize: '12px',
111
- fontWeight: 600,
112
- }}
113
- >
114
- <span>9:41</span>
115
- <div className="u-flex u-items-center u-gap-1">
116
- <span>📶</span>
117
- <span>🔋</span>
118
- </div>
119
- </div>
120
-
121
- {/* Header */}
122
- <div
123
- style={{
124
- padding: '16px 20px',
125
- borderBottom: '1px solid rgba(255,255,255,0.1)',
126
- }}
127
- >
128
- <h1 className="u-m-0 u-text-2xl u-font-bold">Home</h1>
129
- <p className="u-m-0 u-text-sm u-opacity-70">Welcome back!</p>
130
- </div>
131
-
132
- {/* Content */}
133
- <div style={{ flex: 1, padding: '20px', overflowY: 'auto' }}>
134
- {activeTab === 'home' && (
135
- <>
136
- {/* Profile Card */}
137
- <AtomixGlass
138
- displacementScale={50}
139
- blurAmount={0.5}
140
- borderRadius={20}
141
- mode="standard"
142
- padding="20px"
143
- className="u-mb-3"
144
- >
145
- <div className="u-flex u-items-center u-gap-3">
146
- <div
147
- style={{
148
- width: '50px',
149
- height: '50px',
150
- borderRadius: '50%',
151
- background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
152
- display: 'flex',
153
- alignItems: 'center',
154
- justifyContent: 'center',
155
- fontSize: '24px',
156
- }}
157
- aria-hidden="true"
158
- >
159
- 👤
160
- </div>
161
- <div className="u-flex-1">
162
- <p className="u-m-0 u-font-semibold">John Doe</p>
163
- <p className="u-m-0 u-text-xs u-opacity-70">Premium Member</p>
164
- </div>
165
- <Badge variant="primary">Pro</Badge>
166
- </div>
167
- </AtomixGlass>
168
-
169
- {/* Stats Grid */}
170
- <div
171
- style={{
172
- display: 'grid',
173
- gridTemplateColumns: 'repeat(2, 1fr)',
174
- gap: '12px',
175
- marginBottom: '16px',
176
- }}
177
- >
178
- {[
179
- { label: 'Balance', value: '$2,450', icon: '💰' },
180
- { label: 'Points', value: '1,200', icon: '⭐' },
181
- ].map((stat, index) => (
182
- <AtomixGlass
183
- key={index}
184
- displacementScale={40}
185
- blurAmount={0.4}
186
- borderRadius={16}
187
- mode="standard"
188
- padding="16px"
189
- >
190
- <div className="u-text-center">
191
- <div style={{ fontSize: '24px', marginBottom: '8px' }}>{stat.icon}</div>
192
- <p className="u-m-0 u-text-lg u-font-bold">{stat.value}</p>
193
- <p className="u-m-0 u-text-xs u-opacity-70">{stat.label}</p>
194
- </div>
195
- </AtomixGlass>
196
- ))}
197
- </div>
198
-
199
- {/* Recent Activity */}
200
- <AtomixGlass
201
- displacementScale={45}
202
- blurAmount={0.5}
203
- borderRadius={20}
204
- mode="standard"
205
- padding="20px"
206
- >
207
- <h3 className="u-mt-0 u-text-base u-font-bold u-mb-3">Recent Activity</h3>
208
- {[1, 2, 3].map((item) => (
209
- <div
210
- key={item}
211
- className="u-flex u-items-center u-gap-3 u-py-2"
212
- style={{ borderBottom: item < 3 ? '1px solid rgba(255,255,255,0.1)' : 'none' }}
213
- >
214
- <div
215
- style={{
216
- width: '36px',
217
- height: '36px',
218
- borderRadius: '10px',
219
- background: 'rgba(255,255,255,0.1)',
220
- display: 'flex',
221
- alignItems: 'center',
222
- justifyContent: 'center',
223
- fontSize: '18px',
224
- }}
225
- aria-hidden="true"
226
- >
227
- {item === 1 ? '📄' : item === 2 ? '🔔' : '💬'}
228
- </div>
229
- <div className="u-flex-1">
230
- <p className="u-m-0 u-text-sm">
231
- {item === 1 ? 'Document created' : item === 2 ? 'New notification' : 'Message received'}
232
- </p>
233
- <p className="u-m-0 u-text-xs u-opacity-60">
234
- {item === 1 ? '5 min ago' : item === 2 ? '1 hour ago' : '3 hours ago'}
235
- </p>
236
- </div>
237
- </div>
238
- ))}
239
- </AtomixGlass>
240
- </>
241
- )}
242
-
243
- {activeTab === 'search' && (
244
- <div>
245
- <AtomixGlass
246
- displacementScale={50}
247
- blurAmount={0.5}
248
- borderRadius={16}
249
- mode="standard"
250
- padding="12px"
251
- className="u-mb-3"
252
- >
253
- <div className="u-flex u-items-center u-gap-2">
254
- <span style={{ fontSize: '20px' }}>🔍</span>
255
- <input
256
- type="text"
257
- placeholder="Search..."
258
- style={{
259
- background: 'transparent',
260
- border: 'none',
261
- outline: 'none',
262
- color: 'white',
263
- width: '100%',
264
- fontSize: '14px',
265
- }}
266
- />
267
- </div>
268
- </AtomixGlass>
269
-
270
- <div className="u-text-center u-opacity-70 u-mt-5">
271
- <p>Start typing to search</p>
272
- </div>
273
- </div>
274
- )}
275
-
276
- {activeTab === 'profile' && (
277
- <div className="u-text-center">
278
- <div
279
- style={{
280
- width: '80px',
281
- height: '80px',
282
- borderRadius: '50%',
283
- background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
284
- display: 'flex',
285
- alignItems: 'center',
286
- justifyContent: 'center',
287
- fontSize: '40px',
288
- margin: '0 auto 16px',
289
- }}
290
- aria-label="Profile picture"
291
- >
292
- 👤
293
- </div>
294
- <h2 className="u-m-0 u-text-xl u-font-bold">John Doe</h2>
295
- <p className="u-m-0 u-text-sm u-opacity-70 u-mb-4">john@example.com</p>
296
- <Button glass variant="primary" size="sm">Edit Profile</Button>
297
- </div>
298
- )}
299
- </div>
300
-
301
- {/* Tab Bar */}
302
- <div
303
- style={{
304
- padding: '16px',
305
- borderTop: '1px solid rgba(255,255,255,0.1)',
306
- display: 'flex',
307
- justifyContent: 'space-around',
308
- }}
309
- >
310
- {[
311
- { id: 'home', icon: '🏠', label: 'Home' },
312
- { id: 'search', icon: '🔍', label: 'Search' },
313
- { id: 'profile', icon: '👤', label: 'Profile' },
314
- ].map((tab) => (
315
- <button
316
- key={tab.id}
317
- onClick={() => setActiveTab(tab.id)}
318
- style={{
319
- background: 'transparent',
320
- border: 'none',
321
- color: activeTab === tab.id ? '#667eea' : 'rgba(255,255,255,0.5)',
322
- cursor: 'pointer',
323
- display: 'flex',
324
- flexDirection: 'column',
325
- alignItems: 'center',
326
- gap: '4px',
327
- padding: '8px',
328
- fontSize: '20px',
329
- }}
330
- aria-label={tab.label}
331
- aria-pressed={activeTab === tab.id}
332
- >
333
- <span>{tab.icon}</span>
334
- <span style={{ fontSize: '10px' }}>{tab.label}</span>
335
- </button>
336
- ))}
337
- </div>
338
- </div>
339
- </AtomixGlass>
340
- </div>
341
- </div>
342
- </BackgroundWrapper>
343
- </StoryErrorBoundary>
344
- );
345
- },
346
- parameters: {
347
- docs: {
348
- description: {
349
- story:
350
- 'Complete mobile app interface with realistic phone frame, status bar, header, scrollable content, and bottom tab navigation.',
351
- },
352
- },
353
- },
354
- };
355
-
356
- /**
357
- * Mobile Notification Card
358
- *
359
- * Push notification style card optimized for mobile displays.
360
- */
361
- export const MobileNotification: Story = {
362
- render: () => (
363
- <StoryErrorBoundary>
364
- <BackgroundWrapper backgroundImage={backgroundImages[4]} overlay overlayOpacity={0.4}>
365
- <div style={{ maxWidth: '340px' }}>
366
- <AtomixGlass
367
- displacementScale={50}
368
- blurAmount={0.75}
369
- saturation={130}
370
- borderRadius={20}
371
- mode="standard"
372
- padding="20px"
373
- >
374
- <div className="u-flex u-items-start u-gap-3 u-text-white">
375
- <div
376
- style={{
377
- width: '40px',
378
- height: '40px',
379
- borderRadius: '12px',
380
- background: 'rgba(99, 102, 241, 0.2)',
381
- display: 'flex',
382
- alignItems: 'center',
383
- justifyContent: 'center',
384
- fontSize: '20px',
385
- flexShrink: 0,
386
- }}
387
- aria-hidden="true"
388
- >
389
- 💬
390
- </div>
391
- <div className="u-flex-1">
392
- <div className="u-flex u-items-center u-justify-between u-mb-1">
393
- <h3 className="u-m-0 u-text-sm u-font-semibold">New Message</h3>
394
- <span className="u-text-xs u-opacity-60">2m ago</span>
395
- </div>
396
- <p className="u-m-0 u-text-sm u-opacity-90 u-mb-2">
397
- Sarah sent you a message: "Hey! Are you free for a quick call?"
398
- </p>
399
- <div className="u-flex u-gap-2">
400
- <Button glass size="sm" variant="primary">Reply</Button>
401
- <Button glass size="sm" variant="outline-light">Dismiss</Button>
402
- </div>
403
- </div>
404
- </div>
405
- </AtomixGlass>
406
- </div>
407
- </BackgroundWrapper>
408
- </StoryErrorBoundary>
409
- ),
410
- parameters: {
411
- docs: {
412
- description: {
413
- story:
414
- 'Mobile push notification card with icon, title, message preview, timestamp, and action buttons.',
415
- },
416
- },
417
- },
418
- };