@shohojdhara/atomix 0.3.14 → 0.3.15
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/CHANGELOG.md +20 -0
- package/build-tools/EXAMPLES.md +372 -0
- package/build-tools/README.md +242 -0
- package/build-tools/__tests__/error-handler.test.js +230 -0
- package/build-tools/__tests__/index.test.js +141 -0
- package/build-tools/__tests__/rollup-plugin.test.js +194 -0
- package/build-tools/__tests__/utils.test.js +161 -0
- package/build-tools/__tests__/vite-plugin.test.js +129 -0
- package/build-tools/__tests__/webpack-loader.test.js +190 -0
- package/build-tools/error-handler.js +308 -0
- package/build-tools/index.d.ts +43 -0
- package/build-tools/index.js +88 -0
- package/build-tools/package.json +67 -0
- package/build-tools/rollup-plugin.js +236 -0
- package/build-tools/types.d.ts +163 -0
- package/build-tools/utils.js +203 -0
- package/build-tools/vite-plugin.js +161 -0
- package/build-tools/webpack-loader.js +123 -0
- package/dist/atomix.css +203 -90
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +3 -3
- package/dist/atomix.min.css.map +1 -1
- package/dist/build-tools/EXAMPLES.md +372 -0
- package/dist/build-tools/README.md +242 -0
- package/dist/build-tools/__tests__/error-handler.test.js +230 -0
- package/dist/build-tools/__tests__/index.test.js +141 -0
- package/dist/build-tools/__tests__/rollup-plugin.test.js +194 -0
- package/dist/build-tools/__tests__/utils.test.js +161 -0
- package/dist/build-tools/__tests__/vite-plugin.test.js +129 -0
- package/dist/build-tools/__tests__/webpack-loader.test.js +190 -0
- package/dist/build-tools/error-handler.js +308 -0
- package/dist/build-tools/index.d.ts +43 -0
- package/dist/build-tools/index.js +88 -0
- package/dist/build-tools/package.json +67 -0
- package/dist/build-tools/rollup-plugin.js +236 -0
- package/dist/build-tools/types.d.ts +163 -0
- package/dist/build-tools/utils.js +203 -0
- package/dist/build-tools/vite-plugin.js +161 -0
- package/dist/build-tools/webpack-loader.js +123 -0
- package/dist/charts.d.ts +1 -1
- package/dist/charts.js +86 -57
- package/dist/charts.js.map +1 -1
- package/dist/core.d.ts +1 -1
- package/dist/core.js +136 -112
- package/dist/core.js.map +1 -1
- package/dist/forms.d.ts +2 -5
- package/dist/forms.js +140 -128
- package/dist/forms.js.map +1 -1
- package/dist/heavy.d.ts +1 -1
- package/dist/heavy.js +136 -112
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +9 -61
- package/dist/index.esm.js +237 -286
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +250 -299
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/package.json +23 -8
- package/scripts/atomix-cli.js +170 -73
- package/scripts/cli/__tests__/README.md +81 -0
- package/scripts/cli/__tests__/basic.test.js +115 -0
- package/scripts/cli/__tests__/component-generator.test.js +332 -0
- package/scripts/cli/__tests__/integration.test.js +327 -0
- package/scripts/cli/__tests__/test-setup.js +133 -0
- package/scripts/cli/__tests__/token-manager.test.js +251 -0
- package/scripts/cli/__tests__/utils.test.js +161 -0
- package/scripts/cli/component-generator.js +253 -299
- package/scripts/cli/dependency-checker.js +355 -0
- package/scripts/cli/interactive-init.js +46 -5
- package/scripts/cli/template-manager.js +0 -2
- package/scripts/cli/templates/common-templates.js +636 -0
- package/scripts/cli/templates/composable-templates.js +148 -126
- package/scripts/cli/templates/index.js +23 -16
- package/scripts/cli/templates/project-templates.js +151 -23
- package/scripts/cli/templates/react-templates.js +280 -210
- package/scripts/cli/templates/scss-templates.js +90 -91
- package/scripts/cli/templates/testing-templates.js +206 -27
- package/scripts/cli/templates/testing-utils.js +278 -0
- package/scripts/cli/templates/types-templates.js +70 -56
- package/scripts/cli/theme-bridge.js +8 -2
- package/scripts/cli/token-manager.js +318 -206
- package/scripts/cli/utils.js +0 -1
- package/src/components/Accordion/Accordion.stories.tsx +369 -870
- package/src/components/AtomixGlass/AtomixGlass.tsx +80 -39
- package/src/components/AtomixGlass/AtomixGlassContainer.tsx +103 -81
- package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +8 -7
- package/src/components/AtomixGlass/glass-utils.ts +2 -2
- package/src/components/AtomixGlass/shader-utils.ts +5 -0
- package/src/components/AtomixGlass/stories/Customization.stories.tsx +131 -0
- package/src/components/AtomixGlass/stories/Examples.stories.tsx +2957 -2853
- package/src/components/AtomixGlass/stories/Modes.stories.tsx +1 -1
- package/src/components/AtomixGlass/stories/Overview.stories.tsx +348 -0
- package/src/components/AtomixGlass/stories/Performance.stories.tsx +103 -0
- package/src/components/AtomixGlass/stories/Playground.stories.tsx +50 -35
- package/src/components/AtomixGlass/stories/{ShaderVariants.stories.tsx → Shaders.stories.tsx} +1 -1
- package/src/components/AtomixGlass/stories/shared-components.tsx +90 -190
- package/src/components/Avatar/Avatar.stories.tsx +213 -1
- package/src/components/Badge/Badge.stories.tsx +121 -362
- package/src/components/Block/Block.stories.tsx +21 -12
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +141 -23
- package/src/components/Button/Button.stories.tsx +463 -1126
- package/src/components/Button/Button.test.tsx +107 -0
- package/src/components/Button/Button.tsx +46 -50
- package/src/components/Button/ButtonGroup.stories.tsx +373 -217
- package/src/components/Callout/Callout.stories.tsx +289 -634
- package/src/components/Card/Card.stories.tsx +248 -68
- package/src/components/Chart/Chart.stories.tsx +150 -8
- package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +151 -69
- package/src/components/Countdown/Countdown.stories.tsx +115 -8
- package/src/components/DataTable/DataTable.stories.tsx +346 -146
- package/src/components/DatePicker/DatePicker.stories.tsx +325 -1066
- package/src/components/Dropdown/Dropdown.stories.tsx +153 -33
- package/src/components/EdgePanel/EdgePanel.stories.tsx +230 -21
- package/src/components/Footer/Footer.stories.tsx +392 -328
- package/src/components/Form/Checkbox.stories.tsx +140 -6
- package/src/components/Form/Checkbox.test.tsx +63 -0
- package/src/components/Form/Checkbox.tsx +87 -51
- package/src/components/Form/Form.stories.tsx +119 -20
- package/src/components/Form/FormGroup.stories.tsx +127 -4
- package/src/components/Form/Radio.stories.tsx +140 -5
- package/src/components/Form/Select.stories.tsx +140 -8
- package/src/components/Form/Textarea.stories.tsx +149 -6
- package/src/components/Hero/Hero.stories.tsx +333 -32
- package/src/components/List/List.stories.tsx +141 -3
- package/src/components/Modal/Modal.stories.tsx +181 -42
- package/src/components/Popover/Popover.stories.tsx +448 -98
- package/src/components/Progress/Progress.stories.tsx +167 -5
- package/src/components/River/River.stories.tsx +1 -1
- package/src/components/SectionIntro/SectionIntro.stories.tsx +240 -48
- package/src/components/Spinner/Spinner.stories.tsx +102 -8
- package/src/components/Steps/Steps.stories.tsx +172 -43
- package/src/components/Tabs/Tabs.stories.tsx +136 -10
- package/src/components/Testimonial/Testimonial.stories.tsx +120 -3
- package/src/components/Todo/Todo.stories.tsx +198 -9
- package/src/components/Toggle/Toggle.stories.tsx +126 -39
- package/src/components/Tooltip/Tooltip.stories.tsx +194 -104
- package/src/components/Upload/Upload.stories.tsx +113 -24
- package/src/lib/README.md +2 -2
- package/src/lib/__tests__/theme-tools.test.ts +193 -0
- package/src/lib/composables/index.ts +2 -2
- package/src/lib/composables/useAtomixGlass.ts +28 -56
- package/src/lib/composables/useChartExport.ts +2 -7
- package/src/lib/composables/useDataTable.ts +46 -29
- package/src/lib/constants/components.ts +9 -32
- package/src/lib/theme/devtools/CLI.ts +1 -1
- package/src/lib/types/components.ts +1 -1
- package/src/lib/utils/__tests__/csv.test.ts +45 -0
- package/src/lib/utils/csv.ts +17 -0
- package/src/lib/utils/dataTableExport.ts +1 -10
- package/src/styles/01-settings/_index.scss +2 -1
- package/src/styles/01-settings/_settings.accordion.scss +28 -7
- package/src/styles/01-settings/_settings.colors.scss +11 -11
- package/src/styles/01-settings/_settings.typography.scss +5 -5
- package/src/styles/02-tools/_tools.utility-api.scss +14 -0
- package/src/styles/06-components/_components.accordion.scss +56 -14
- package/src/styles/06-components/_components.checkbox.scss +23 -17
- package/src/styles/99-utilities/_index.scss +2 -0
- package/src/styles/99-utilities/_utilities.scss +3 -1
- package/src/styles/99-utilities/_utilities.text-gradient.scss +45 -0
- package/themes/dark-complementary/README.md +98 -0
- package/themes/dark-complementary/index.scss +158 -0
- package/themes/default-light/README.md +81 -0
- package/themes/default-light/index.scss +154 -0
- package/themes/high-contrast/README.md +105 -0
- package/themes/high-contrast/index.scss +172 -0
- package/themes/test-theme/README.md +38 -0
- package/themes/test-theme/index.scss +47 -0
- package/scripts/cli/templates-original-backup.js +0 -1655
- package/scripts/cli/templates_backup.js +0 -684
- package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +0 -1438
- package/src/lib/composables/useButton.ts +0 -93
- package/src/lib/composables/useCheckbox.ts +0 -70
|
@@ -52,241 +52,141 @@ export interface BackgroundWrapperProps {
|
|
|
52
52
|
'aria-hidden'?: 'true' | 'false' | boolean;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
* Interactive Story Container
|
|
57
|
-
*
|
|
58
|
-
* A container that provides mouse tracking and interactive background effects
|
|
59
|
-
* for enhanced storytelling and demonstration purposes.
|
|
60
|
-
*/
|
|
61
|
-
export interface StoryContainerProps {
|
|
62
|
-
children: React.ReactNode;
|
|
63
|
-
style?: React.CSSProperties;
|
|
64
|
-
interactive?: boolean;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Interactive Wrapper Component
|
|
69
|
-
*
|
|
70
|
-
* Provides mouse position tracking and offset calculations for interactive stories
|
|
71
|
-
*/
|
|
72
|
-
export interface InteractiveWrapperProps {
|
|
73
|
-
children: (
|
|
74
|
-
mousePos: { x: number; y: number },
|
|
75
|
-
mouseOffset: { x: number; y: number },
|
|
76
|
-
containerRef: RefObject<HTMLDivElement>
|
|
77
|
-
) => React.ReactNode;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Collection of high-quality background images for different moods and scenarios
|
|
82
|
-
*
|
|
83
|
-
* This array provides a variety of background options that work well with the
|
|
84
|
-
* AtomixGlass component, showcasing different visual styles and contexts.
|
|
85
|
-
*/
|
|
86
|
-
export const backgroundImages = [
|
|
87
|
-
// 0: Modern office interior with natural lighting
|
|
88
|
-
'https://images.pexels.com/photos/5653101/pexels-photo-5653101.jpeg',
|
|
89
|
-
// 1: Beautiful natural landscape - mountains and lake
|
|
90
|
-
'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
|
|
91
|
-
// 2: Urban cityscape with modern buildings
|
|
92
|
-
'https://images.unsplash.com/photo-1477959858617-67f85cf4f1df?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
|
|
93
|
-
// 3: Forest path with sunlight filtering through trees
|
|
94
|
-
'https://images.unsplash.com/photo-1441974231531-c6227db76b6e?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
|
|
95
|
-
// 4: Ocean waves and beach scene
|
|
96
|
-
'https://images.unsplash.com/photo-1505142468610-359e7d316be0?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
|
|
97
|
-
// 5: Modern architecture with glass facades
|
|
98
|
-
'https://images.unsplash.com/photo-1486406146926-c627a92ad1ab?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
|
|
99
|
-
// 6: Cozy café interior with warm lighting
|
|
100
|
-
'https://images.unsplash.com/photo-1554118811-1e0d58224f24?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
|
|
101
|
-
// 7: Desert landscape with dramatic sky
|
|
102
|
-
'https://images.unsplash.com/photo-1509316785289-025f5b846b35?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
|
|
103
|
-
// 8: Tropical paradise with palm trees and ocean
|
|
104
|
-
'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
|
|
105
|
-
// 9: Modern library or workspace with natural light
|
|
106
|
-
'https://images.unsplash.com/photo-1521587760476-6c12a4b040da?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
|
|
107
|
-
];
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* BackgroundWrapper Component Implementation
|
|
111
|
-
*
|
|
112
|
-
* Renders a container with a background image and optional overlay,
|
|
113
|
-
* providing a consistent environment for showcasing the AtomixGlass component.
|
|
114
|
-
*
|
|
115
|
-
* @param props - BackgroundWrapperProps
|
|
116
|
-
* @returns JSX.Element
|
|
117
|
-
*/
|
|
118
|
-
export const BackgroundWrapper = ({
|
|
55
|
+
export const BackgroundWrapper: React.FC<BackgroundWrapperProps> = ({
|
|
119
56
|
children,
|
|
120
57
|
backgroundImage,
|
|
121
58
|
backgroundIndex,
|
|
122
59
|
overlay = false,
|
|
123
|
-
overlayColor = 'rgba(0,0,0,0)',
|
|
124
|
-
overlayOpacity = 0,
|
|
125
|
-
height = '
|
|
126
|
-
width = '
|
|
127
|
-
borderRadius = '
|
|
60
|
+
overlayColor = 'rgba(0, 0, 0, 0.5)',
|
|
61
|
+
overlayOpacity = 0.5,
|
|
62
|
+
height = '100vh',
|
|
63
|
+
width = '100vw',
|
|
64
|
+
borderRadius = '0',
|
|
65
|
+
padding = '0',
|
|
128
66
|
className = '',
|
|
129
67
|
style = {},
|
|
130
|
-
|
|
131
|
-
|
|
68
|
+
interactive = false,
|
|
69
|
+
'aria-hidden': ariaHidden,
|
|
70
|
+
}) => {
|
|
71
|
+
// Use the background image if provided, otherwise use the indexed one from backgroundImages
|
|
132
72
|
const bgImage =
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
const
|
|
137
|
-
|
|
73
|
+
backgroundImage ||
|
|
74
|
+
(backgroundIndex !== undefined ? backgroundImages[backgroundIndex] : backgroundImages[0]);
|
|
75
|
+
|
|
76
|
+
const bgStyle = {
|
|
77
|
+
backgroundImage: bgImage ? `url(${bgImage})` : undefined,
|
|
78
|
+
height,
|
|
79
|
+
width,
|
|
80
|
+
borderRadius,
|
|
81
|
+
padding,
|
|
82
|
+
...style,
|
|
83
|
+
};
|
|
138
84
|
|
|
139
85
|
return (
|
|
140
86
|
<div
|
|
141
|
-
className={`
|
|
142
|
-
style={
|
|
143
|
-
|
|
144
|
-
height: height,
|
|
145
|
-
width: width,
|
|
146
|
-
backgroundColor: !bgImage ? '#1a1a2e' : undefined, // Fallback color if no image
|
|
147
|
-
background: bgImage ? `url(${bgImage})` : undefined,
|
|
148
|
-
backgroundSize: 'cover',
|
|
149
|
-
backgroundPosition: 'center',
|
|
150
|
-
backgroundAttachment: 'fixed',
|
|
151
|
-
display: 'flex',
|
|
152
|
-
alignItems: 'center',
|
|
153
|
-
justifyContent: 'center',
|
|
154
|
-
borderRadius: borderRadius,
|
|
155
|
-
overflow: 'auto',
|
|
156
|
-
...style,
|
|
157
|
-
}}
|
|
87
|
+
className={`u-relative u-overflow-hidden ${className}`}
|
|
88
|
+
style={bgStyle}
|
|
89
|
+
aria-hidden={ariaHidden}
|
|
158
90
|
>
|
|
159
|
-
{
|
|
160
|
-
{(finalOverlayOpacity > 0 || overlay) && (
|
|
91
|
+
{overlay && (
|
|
161
92
|
<div
|
|
93
|
+
className="u-absolute u-inset-0"
|
|
162
94
|
style={{
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
backgroundColor: finalOverlayColor,
|
|
166
|
-
opacity: finalOverlayOpacity,
|
|
167
|
-
borderRadius: borderRadius,
|
|
168
|
-
pointerEvents: 'none',
|
|
95
|
+
backgroundColor: overlayColor,
|
|
96
|
+
opacity: overlayOpacity,
|
|
169
97
|
}}
|
|
170
98
|
/>
|
|
171
99
|
)}
|
|
172
|
-
<div
|
|
173
|
-
style={{
|
|
174
|
-
position: 'relative',
|
|
175
|
-
width: '100%',
|
|
176
|
-
height: '100%',
|
|
177
|
-
display: 'flex',
|
|
178
|
-
alignItems: 'center',
|
|
179
|
-
justifyContent: 'center',
|
|
180
|
-
color: 'white',
|
|
181
|
-
}}
|
|
182
|
-
>
|
|
183
|
-
{children}
|
|
184
|
-
</div>
|
|
100
|
+
<div className="u-relative u-z-10">{children}</div>
|
|
185
101
|
</div>
|
|
186
102
|
);
|
|
187
103
|
};
|
|
188
104
|
|
|
189
105
|
/**
|
|
190
|
-
* Interactive Story Container
|
|
106
|
+
* Interactive Story Container
|
|
191
107
|
*
|
|
192
108
|
* A container that provides mouse tracking and interactive background effects
|
|
193
109
|
* for enhanced storytelling and demonstration purposes.
|
|
194
110
|
*/
|
|
195
|
-
export
|
|
111
|
+
export interface StoryContainerProps {
|
|
112
|
+
children: React.ReactNode;
|
|
113
|
+
className?: string;
|
|
114
|
+
style?: React.CSSProperties;
|
|
115
|
+
parallax?: boolean;
|
|
116
|
+
parallaxStrength?: number;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export const StoryContainer: React.FC<StoryContainerProps> = ({
|
|
196
120
|
children,
|
|
121
|
+
className = '',
|
|
197
122
|
style = {},
|
|
198
|
-
|
|
199
|
-
|
|
123
|
+
parallax = false,
|
|
124
|
+
parallaxStrength = 20,
|
|
125
|
+
}) => {
|
|
200
126
|
const containerRef = useRef<HTMLDivElement>(null);
|
|
201
|
-
|
|
127
|
+
|
|
128
|
+
const [position, setPosition] = useState({ x: 0, y: 0 });
|
|
202
129
|
|
|
203
130
|
const handleMouseMove = useCallback(
|
|
204
131
|
(e: MouseEvent) => {
|
|
205
|
-
if (containerRef.current
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
132
|
+
if (!containerRef.current || !parallax) return;
|
|
133
|
+
|
|
134
|
+
const rect = containerRef.current.getBoundingClientRect();
|
|
135
|
+
const x = e.clientX - rect.left;
|
|
136
|
+
const y = e.clientY - rect.top;
|
|
137
|
+
|
|
138
|
+
const centerX = rect.width / 2;
|
|
139
|
+
const centerY = rect.height / 2;
|
|
209
140
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
const offsetY = ((e.clientY - centerY) / rect.height) * 100;
|
|
141
|
+
const moveX = ((x - centerX) / centerX) * parallaxStrength;
|
|
142
|
+
const moveY = ((y - centerY) / centerY) * parallaxStrength;
|
|
213
143
|
|
|
214
|
-
|
|
215
|
-
}
|
|
144
|
+
setPosition({ x: -moveX, y: -moveY });
|
|
216
145
|
},
|
|
217
|
-
[
|
|
146
|
+
[parallax, parallaxStrength]
|
|
218
147
|
);
|
|
219
148
|
|
|
220
149
|
useEffect(() => {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
150
|
+
if (!parallax) return;
|
|
151
|
+
|
|
152
|
+
const container = containerRef.current;
|
|
153
|
+
if (!container) return;
|
|
154
|
+
|
|
155
|
+
container.addEventListener('mousemove', handleMouseMove as any);
|
|
156
|
+
return () => {
|
|
157
|
+
container.removeEventListener('mousemove', handleMouseMove as any);
|
|
158
|
+
};
|
|
159
|
+
}, [handleMouseMove, parallax]);
|
|
230
160
|
|
|
231
161
|
return (
|
|
232
162
|
<div
|
|
233
163
|
ref={containerRef}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
height: '100vh',
|
|
237
|
-
display: 'flex',
|
|
238
|
-
alignItems: 'center',
|
|
239
|
-
justifyContent: 'center',
|
|
240
|
-
backgroundImage: interactive
|
|
241
|
-
? '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)'
|
|
242
|
-
: undefined,
|
|
243
|
-
backgroundSize: interactive ? '160%' : 'cover',
|
|
244
|
-
backgroundPosition: interactive
|
|
245
|
-
? `calc(50% + ${backgroundPosition.x}px) calc(50% + ${backgroundPosition.y}px)`
|
|
246
|
-
: 'center',
|
|
247
|
-
...style,
|
|
248
|
-
}}
|
|
164
|
+
className={`u-relative u-overflow-hidden u-w-full u-h-screen ${className}`}
|
|
165
|
+
style={style}
|
|
249
166
|
>
|
|
250
|
-
{
|
|
167
|
+
{parallax ? (
|
|
168
|
+
<div
|
|
169
|
+
className="u-absolute u-inset-0 u-transition-transform u-duration-100 u-ease-linear"
|
|
170
|
+
style={{
|
|
171
|
+
transform: `translate(${position.x}px, ${position.y}px)`,
|
|
172
|
+
zIndex: -1,
|
|
173
|
+
}}
|
|
174
|
+
>
|
|
175
|
+
{children}
|
|
176
|
+
</div>
|
|
177
|
+
) : (
|
|
178
|
+
<>{children}</>
|
|
179
|
+
)}
|
|
251
180
|
</div>
|
|
252
181
|
);
|
|
253
182
|
};
|
|
254
183
|
|
|
255
184
|
/**
|
|
256
|
-
*
|
|
257
|
-
*
|
|
258
|
-
* Provides mouse position tracking and offset calculations for interactive stories
|
|
185
|
+
* Collection of high-quality background images for different moods and scenarios
|
|
259
186
|
*/
|
|
260
|
-
export const
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
if (containerRef.current) {
|
|
267
|
-
const rect = containerRef.current.getBoundingClientRect();
|
|
268
|
-
const centerX = rect.left + rect.width / 2;
|
|
269
|
-
const centerY = rect.top + rect.height / 2;
|
|
270
|
-
|
|
271
|
-
setMouseOffset({
|
|
272
|
-
x: ((e.clientX - centerX) / rect.width) * 100,
|
|
273
|
-
y: ((e.clientY - centerY) / rect.height) * 100,
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
setMousePos({ x: e.clientX, y: e.clientY });
|
|
277
|
-
}, []);
|
|
278
|
-
|
|
279
|
-
useEffect(() => {
|
|
280
|
-
const currentRef = containerRef.current;
|
|
281
|
-
currentRef?.addEventListener('mousemove', handleMouseMove);
|
|
282
|
-
return () => {
|
|
283
|
-
currentRef?.removeEventListener('mousemove', handleMouseMove);
|
|
284
|
-
};
|
|
285
|
-
}, [handleMouseMove]);
|
|
286
|
-
|
|
287
|
-
return (
|
|
288
|
-
<div ref={containerRef} style={{ width: '100%', height: '100%' }}>
|
|
289
|
-
{children(mousePos, mouseOffset, containerRef)}
|
|
290
|
-
</div>
|
|
291
|
-
);
|
|
292
|
-
};
|
|
187
|
+
export const backgroundImages = [
|
|
188
|
+
'https://images.unsplash.com/photo-1637825891028-564f672aa42c?ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&q=80&w=2670',
|
|
189
|
+
'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
|
|
190
|
+
'https://images.unsplash.com/photo-1519681393784-d120267933ba?ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&q=80&w=2670',
|
|
191
|
+
'https://images.unsplash.com/photo-1441974231531-c6227db76b6e?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
|
|
192
|
+
];
|
|
@@ -20,31 +20,77 @@ const meta = {
|
|
|
20
20
|
src: {
|
|
21
21
|
control: 'text',
|
|
22
22
|
description: 'Avatar image source URL',
|
|
23
|
+
table: {
|
|
24
|
+
category: 'Main',
|
|
25
|
+
},
|
|
23
26
|
},
|
|
24
27
|
alt: {
|
|
25
28
|
control: 'text',
|
|
26
29
|
description: 'Alt text for the avatar image',
|
|
30
|
+
table: {
|
|
31
|
+
category: 'Main',
|
|
32
|
+
},
|
|
27
33
|
},
|
|
28
34
|
initials: {
|
|
29
35
|
control: 'text',
|
|
30
36
|
description: 'Initials to display when no image is available',
|
|
37
|
+
table: {
|
|
38
|
+
category: 'Main',
|
|
39
|
+
},
|
|
31
40
|
},
|
|
32
41
|
icon: {
|
|
33
42
|
control: { disable: true },
|
|
34
43
|
description: 'Icon to display when no image or initials are available',
|
|
44
|
+
table: {
|
|
45
|
+
category: 'Main',
|
|
46
|
+
},
|
|
35
47
|
},
|
|
36
48
|
size: {
|
|
37
49
|
control: { type: 'select' },
|
|
38
50
|
options: ['xs', 'sm', 'md', 'lg', 'xl'],
|
|
39
51
|
description: 'Size variant for the avatar',
|
|
52
|
+
table: {
|
|
53
|
+
category: 'Style',
|
|
54
|
+
defaultValue: { summary: 'md' },
|
|
55
|
+
},
|
|
40
56
|
},
|
|
41
57
|
circle: {
|
|
42
58
|
control: 'boolean',
|
|
43
59
|
description: 'Whether to make the avatar circular',
|
|
60
|
+
table: {
|
|
61
|
+
category: 'Style',
|
|
62
|
+
defaultValue: { summary: 'false' },
|
|
63
|
+
},
|
|
44
64
|
},
|
|
45
65
|
disabled: {
|
|
46
66
|
control: 'boolean',
|
|
47
67
|
description: 'Whether the avatar is disabled',
|
|
68
|
+
table: {
|
|
69
|
+
category: 'State',
|
|
70
|
+
defaultValue: { summary: 'false' },
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
className: {
|
|
74
|
+
control: 'text',
|
|
75
|
+
description: 'Additional CSS classes',
|
|
76
|
+
table: {
|
|
77
|
+
category: 'Misc',
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
style: {
|
|
81
|
+
control: 'object',
|
|
82
|
+
description: 'Inline styles',
|
|
83
|
+
table: {
|
|
84
|
+
category: 'Misc',
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
glass: {
|
|
88
|
+
control: 'boolean',
|
|
89
|
+
description: 'Apply glassmorphism effect',
|
|
90
|
+
table: {
|
|
91
|
+
category: 'Style',
|
|
92
|
+
defaultValue: { summary: 'false' },
|
|
93
|
+
},
|
|
48
94
|
},
|
|
49
95
|
},
|
|
50
96
|
} satisfies Meta<typeof Avatar>;
|
|
@@ -60,6 +106,158 @@ export const Basic: Story = {
|
|
|
60
106
|
size: 'md',
|
|
61
107
|
circle: false,
|
|
62
108
|
},
|
|
109
|
+
parameters: {
|
|
110
|
+
docs: {
|
|
111
|
+
description: {
|
|
112
|
+
story: 'Basic avatar with an image source'
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
// Avatar with Initials
|
|
119
|
+
export const WithInitials: Story = {
|
|
120
|
+
args: {
|
|
121
|
+
initials: 'JD',
|
|
122
|
+
size: 'md',
|
|
123
|
+
circle: true,
|
|
124
|
+
},
|
|
125
|
+
parameters: {
|
|
126
|
+
docs: {
|
|
127
|
+
description: {
|
|
128
|
+
story: 'Avatar displaying user initials when no image is available'
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
// Avatar with Icon
|
|
135
|
+
export const WithIcon: Story = {
|
|
136
|
+
args: {
|
|
137
|
+
icon: <Icon name="User" size="md" />,
|
|
138
|
+
size: 'md',
|
|
139
|
+
circle: true,
|
|
140
|
+
},
|
|
141
|
+
parameters: {
|
|
142
|
+
docs: {
|
|
143
|
+
description: {
|
|
144
|
+
story: 'Avatar displaying an icon when no image or initials are available'
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
// Avatar Sizes
|
|
151
|
+
export const Sizes: Story = {
|
|
152
|
+
render: () => {
|
|
153
|
+
const sizes = ['xs', 'sm', 'md', 'lg', 'xl'] as const;
|
|
154
|
+
|
|
155
|
+
return (
|
|
156
|
+
<div className="u-flex u-gap-4 u-flex-wrap u-items-center">
|
|
157
|
+
{sizes.map(size => (
|
|
158
|
+
<div key={size} className="u-flex u-flex-col u-items-center u-gap-2">
|
|
159
|
+
<Avatar
|
|
160
|
+
src={`https://i.pravatar.cc/150?img=${size === 'xs' ? 1 : size === 'sm' ? 2 : size === 'md' ? 3 : size === 'lg' ? 4 : 5}`}
|
|
161
|
+
size={size}
|
|
162
|
+
circle
|
|
163
|
+
/>
|
|
164
|
+
<span className="u-text-xs u-capitalize">{size}</span>
|
|
165
|
+
</div>
|
|
166
|
+
))}
|
|
167
|
+
</div>
|
|
168
|
+
);
|
|
169
|
+
},
|
|
170
|
+
parameters: {
|
|
171
|
+
docs: {
|
|
172
|
+
description: {
|
|
173
|
+
story: 'Different avatar sizes from extra-small to extra-large'
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
// Avatar Shapes
|
|
180
|
+
export const Shapes: Story = {
|
|
181
|
+
render: () => {
|
|
182
|
+
return (
|
|
183
|
+
<div className="u-flex u-gap-6 u-items-center">
|
|
184
|
+
<div className="u-flex u-flex-col u-items-center u-gap-2">
|
|
185
|
+
<Avatar
|
|
186
|
+
src="https://i.pravatar.cc/150?img=6"
|
|
187
|
+
size="md"
|
|
188
|
+
circle={false}
|
|
189
|
+
/>
|
|
190
|
+
<span className="u-text-xs">Square</span>
|
|
191
|
+
</div>
|
|
192
|
+
<div className="u-flex u-flex-col u-items-center u-gap-2">
|
|
193
|
+
<Avatar
|
|
194
|
+
src="https://i.pravatar.cc/150?img=7"
|
|
195
|
+
size="md"
|
|
196
|
+
circle={true}
|
|
197
|
+
/>
|
|
198
|
+
<span className="u-text-xs">Circle</span>
|
|
199
|
+
</div>
|
|
200
|
+
</div>
|
|
201
|
+
);
|
|
202
|
+
},
|
|
203
|
+
parameters: {
|
|
204
|
+
docs: {
|
|
205
|
+
description: {
|
|
206
|
+
story: 'Avatar shapes: square and circle'
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
// Avatar States
|
|
213
|
+
export const States: Story = {
|
|
214
|
+
render: () => {
|
|
215
|
+
return (
|
|
216
|
+
<div className="u-flex u-gap-6 u-items-center">
|
|
217
|
+
<div className="u-flex u-flex-col u-items-center u-gap-2">
|
|
218
|
+
<Avatar
|
|
219
|
+
src="https://i.pravatar.cc/150?img=8"
|
|
220
|
+
size="md"
|
|
221
|
+
circle
|
|
222
|
+
/>
|
|
223
|
+
<span className="u-text-xs">Default</span>
|
|
224
|
+
</div>
|
|
225
|
+
<div className="u-flex u-flex-col u-items-center u-gap-2">
|
|
226
|
+
<Avatar
|
|
227
|
+
src="https://i.pravatar.cc/150?img=9"
|
|
228
|
+
size="md"
|
|
229
|
+
circle
|
|
230
|
+
disabled
|
|
231
|
+
/>
|
|
232
|
+
<span className="u-text-xs">Disabled</span>
|
|
233
|
+
</div>
|
|
234
|
+
</div>
|
|
235
|
+
);
|
|
236
|
+
},
|
|
237
|
+
parameters: {
|
|
238
|
+
docs: {
|
|
239
|
+
description: {
|
|
240
|
+
story: 'Avatar states: default and disabled'
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
// Avatar with Glass Effect
|
|
247
|
+
export const WithGlassEffect: Story = {
|
|
248
|
+
args: {
|
|
249
|
+
src: 'https://i.pravatar.cc/150?img=10',
|
|
250
|
+
size: 'md',
|
|
251
|
+
circle: true,
|
|
252
|
+
glass: true,
|
|
253
|
+
},
|
|
254
|
+
parameters: {
|
|
255
|
+
docs: {
|
|
256
|
+
description: {
|
|
257
|
+
story: 'Avatar with glassmorphism effect'
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
63
261
|
};
|
|
64
262
|
|
|
65
263
|
// Avatar Variants Showcase
|
|
@@ -156,6 +354,13 @@ export const VariantsShowcase: Story = {
|
|
|
156
354
|
</div>
|
|
157
355
|
);
|
|
158
356
|
},
|
|
357
|
+
parameters: {
|
|
358
|
+
docs: {
|
|
359
|
+
description: {
|
|
360
|
+
story: 'Comprehensive showcase of avatar variants across all sizes'
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
159
364
|
};
|
|
160
365
|
|
|
161
366
|
// Avatar Group Showcase
|
|
@@ -261,4 +466,11 @@ export const AvatarGroupShowcase: Story = {
|
|
|
261
466
|
</div>
|
|
262
467
|
);
|
|
263
468
|
},
|
|
264
|
-
|
|
469
|
+
parameters: {
|
|
470
|
+
docs: {
|
|
471
|
+
description: {
|
|
472
|
+
story: 'Various configurations of AvatarGroup component'
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
};
|