@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.
- package/atomix.config.ts +12 -0
- package/build-tools/webpack-loader.js +5 -4
- package/dist/atomix.css +230 -83
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +1 -1
- package/dist/atomix.min.css.map +1 -1
- package/dist/build-tools/webpack-loader.js +5 -4
- package/dist/charts.d.ts +24 -23
- package/dist/charts.js +271 -369
- package/dist/charts.js.map +1 -1
- package/dist/config.d.ts +624 -0
- package/dist/config.js +59 -0
- package/dist/config.js.map +1 -0
- package/dist/core.d.ts +3 -2
- package/dist/core.js +342 -382
- package/dist/core.js.map +1 -1
- package/dist/forms.d.ts +4 -6
- package/dist/forms.js +233 -334
- package/dist/forms.js.map +1 -1
- package/dist/heavy.d.ts +11 -2
- package/dist/heavy.js +406 -445
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +109 -65
- package/dist/index.esm.js +654 -748
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +621 -717
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/layout.js +59 -60
- package/dist/layout.js.map +1 -1
- package/dist/theme.js +4 -4
- package/dist/theme.js.map +1 -1
- package/package.json +24 -9
- package/scripts/atomix-cli.js +15 -1
- package/scripts/cli/__tests__/complexity-utils.test.js +24 -0
- package/scripts/cli/__tests__/detector.test.js +50 -0
- package/scripts/cli/__tests__/template-engine.test.js +23 -0
- package/scripts/cli/__tests__/test-setup.js +1 -133
- package/scripts/cli/commands/doctor.js +15 -3
- package/scripts/cli/commands/generate.js +113 -51
- package/scripts/cli/internal/ai-engine.js +30 -10
- package/scripts/cli/internal/complexity-utils.js +60 -0
- package/scripts/cli/internal/component-validator.js +49 -16
- package/scripts/cli/internal/generator.js +89 -36
- package/scripts/cli/internal/hook-generator.js +5 -2
- package/scripts/cli/internal/itcss-generator.js +16 -12
- package/scripts/cli/templates/next-templates.js +81 -30
- package/scripts/cli/templates/storybook-templates.js +12 -2
- package/scripts/cli/utils/detector.js +45 -7
- package/scripts/cli/utils/diagnostics.js +78 -0
- package/scripts/cli/utils/telemetry.js +13 -0
- package/src/components/Accordion/Accordion.stories.tsx +4 -0
- package/src/components/AtomixGlass/AtomixGlass.tsx +188 -128
- package/src/components/AtomixGlass/AtomixGlassContainer.tsx +63 -91
- package/src/components/AtomixGlass/PerformanceDashboard.tsx +153 -201
- package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +9 -6
- package/src/components/AtomixGlass/glass-utils.ts +51 -1
- package/src/components/AtomixGlass/stories/AnimationFeatures.stories.tsx +52 -46
- package/src/components/AtomixGlass/stories/Examples.stories.tsx +573 -236
- package/src/components/AtomixGlass/stories/Playground.stories.tsx +88 -41
- package/src/components/AtomixGlass/stories/argTypes.ts +19 -19
- package/src/components/AtomixGlass/stories/shared-components.tsx +7 -12
- package/src/components/AtomixGlass/stories/types.ts +3 -3
- package/src/components/Button/Button.tsx +114 -57
- package/src/components/Callout/Callout.tsx +4 -4
- package/src/components/Chart/ChartRenderer.tsx +1 -1
- package/src/components/Chart/DonutChart.tsx +11 -8
- package/src/components/EdgePanel/EdgePanel.tsx +119 -115
- package/src/components/Form/Select.tsx +4 -4
- package/src/components/List/List.tsx +4 -4
- package/src/components/Navigation/SideMenu/SideMenu.tsx +6 -6
- package/src/components/PhotoViewer/PhotoViewerImage.tsx +1 -1
- package/src/components/ProductReview/ProductReview.tsx +4 -2
- package/src/components/Rating/Rating.tsx +4 -2
- package/src/components/SectionIntro/SectionIntro.tsx +4 -2
- package/src/components/Steps/Steps.tsx +1 -1
- package/src/components/Tabs/Tabs.tsx +5 -5
- package/src/components/Testimonial/Testimonial.tsx +4 -2
- package/src/components/VideoPlayer/VideoPlayer.tsx +4 -2
- package/src/layouts/CssGrid/CssGrid.stories.tsx +464 -0
- package/src/layouts/CssGrid/CssGrid.tsx +215 -0
- package/src/layouts/CssGrid/index.ts +8 -0
- package/src/layouts/CssGrid/scripts/CssGrid.js +284 -0
- package/src/layouts/CssGrid/scripts/index.js +43 -0
- package/src/layouts/Grid/scripts/Container.js +139 -0
- package/src/layouts/Grid/scripts/Grid.js +184 -0
- package/src/layouts/Grid/scripts/GridCol.js +273 -0
- package/src/layouts/Grid/scripts/Row.js +154 -0
- package/src/layouts/Grid/scripts/index.js +48 -0
- package/src/layouts/MasonryGrid/MasonryGrid.tsx +71 -59
- package/src/lib/composables/atomix-glass/useGlassSize.ts +1 -1
- package/src/lib/composables/useAccordion.ts +5 -5
- package/src/lib/composables/useAtomixGlass.ts +111 -74
- package/src/lib/composables/useAtomixGlassStyles.ts +0 -2
- package/src/lib/composables/useBarChart.ts +2 -2
- package/src/lib/composables/useChart.ts +3 -2
- package/src/lib/composables/useChartToolbar.ts +48 -66
- package/src/lib/composables/useDataTable.ts +1 -1
- package/src/lib/composables/useDatePicker.ts +2 -2
- package/src/lib/composables/useEdgePanel.ts +45 -54
- package/src/lib/composables/useHeroBackgroundSlider.ts +5 -5
- package/src/lib/composables/usePhotoViewer.ts +2 -3
- package/src/lib/composables/usePieChart.ts +1 -1
- package/src/lib/composables/usePopover.ts +151 -139
- package/src/lib/composables/useSideMenu.ts +28 -41
- package/src/lib/composables/useSlider.ts +2 -6
- package/src/lib/composables/useTooltip.ts +2 -2
- package/src/lib/config/index.ts +39 -0
- package/src/lib/constants/components.ts +1 -0
- package/src/lib/theme/devtools/Comparator.tsx +1 -1
- package/src/lib/theme/devtools/Inspector.tsx +1 -1
- package/src/lib/theme/devtools/LiveEditor.tsx +1 -1
- package/src/lib/theme/runtime/ThemeProvider.tsx +1 -1
- package/src/lib/types/components.ts +1 -0
- package/src/styles/01-settings/_index.scss +1 -0
- package/src/styles/01-settings/_settings.atomix-glass.scss +174 -0
- package/src/styles/01-settings/_settings.masonry-grid.scss +42 -6
- package/src/styles/02-tools/_tools.glass.scss +6 -0
- package/src/styles/05-objects/_objects.masonry-grid.scss +162 -24
- package/src/styles/06-components/_components.atomix-glass.scss +160 -99
- package/scripts/cli/__tests__/README.md +0 -81
- package/scripts/cli/__tests__/basic.test.js +0 -116
- package/scripts/cli/__tests__/clean.test.js +0 -278
- package/scripts/cli/__tests__/component-generator.test.js +0 -332
- package/scripts/cli/__tests__/component-validator.test.js +0 -433
- package/scripts/cli/__tests__/generator.test.js +0 -613
- package/scripts/cli/__tests__/glass-motion.test.js +0 -256
- package/scripts/cli/__tests__/integration.test.js +0 -938
- package/scripts/cli/__tests__/migrate.test.js +0 -74
- package/scripts/cli/__tests__/security.test.js +0 -206
- package/scripts/cli/__tests__/theme-bridge.test.js +0 -507
- package/scripts/cli/__tests__/token-manager.test.js +0 -251
- package/scripts/cli/__tests__/token-provider.test.js +0 -361
- package/scripts/cli/__tests__/utils.test.js +0 -165
- package/src/components/AtomixGlass/stories/AnimationTests.stories.tsx +0 -95
- package/src/components/AtomixGlass/stories/CardExamples.stories.tsx +0 -212
- package/src/components/AtomixGlass/stories/Customization.stories.tsx +0 -131
- package/src/components/AtomixGlass/stories/DashboardExamples.stories.tsx +0 -348
- package/src/components/AtomixGlass/stories/EcommerceExamples.stories.tsx +0 -410
- package/src/components/AtomixGlass/stories/FormExamples.stories.tsx +0 -436
- package/src/components/AtomixGlass/stories/HeroExamples.stories.tsx +0 -264
- package/src/components/AtomixGlass/stories/InteractivePlayground.stories.tsx +0 -247
- package/src/components/AtomixGlass/stories/MobileUIExamples.stories.tsx +0 -418
- package/src/components/AtomixGlass/stories/ModalExamples.stories.tsx +0 -402
- package/src/components/AtomixGlass/stories/Modes.stories.tsx +0 -1082
- package/src/components/AtomixGlass/stories/Overview.stories.tsx +0 -497
- package/src/components/AtomixGlass/stories/Performance.stories.tsx +0 -103
- package/src/components/AtomixGlass/stories/PresetGallery.stories.tsx +0 -335
- package/src/components/AtomixGlass/stories/Shaders.stories.tsx +0 -395
- package/src/components/AtomixGlass/stories/WidgetExamples.stories.tsx +0 -441
- package/src/components/TypedButton/TypedButton.stories.tsx +0 -59
- package/src/components/TypedButton/TypedButton.tsx +0 -39
- package/src/components/TypedButton/index.ts +0 -2
- package/src/lib/composables/useBreadcrumb.ts +0 -81
- package/src/lib/composables/useChartInteractions.ts +0 -123
- package/src/lib/composables/useChartPerformance.ts +0 -347
- package/src/lib/composables/useDropdown.ts +0 -338
- package/src/lib/composables/useModal.ts +0 -110
- package/src/lib/composables/useTypedButton.ts +0 -66
- package/src/lib/hooks/usePerformanceMonitor.ts +0 -148
- package/src/lib/utils/displacement-generator.ts +0 -92
- package/src/lib/utils/memoryMonitor.ts +0 -191
- package/src/styles/01-settings/_settings.testtypecheck.scss +0 -53
- package/src/styles/01-settings/_settings.typedbutton.scss +0 -53
- package/src/styles/06-components/_components.testbutton.scss +0 -212
- package/src/styles/06-components/_components.testtypecheck.scss +0 -212
- 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
|
-
};
|