webs-sdk 0.14.0 → 0.14.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 (92) hide show
  1. package/README.md +398 -398
  2. package/dist/components/ARFilters/ARFilters.d.ts +5 -0
  3. package/dist/components/ARFilters/ARFilters.d.ts.map +1 -0
  4. package/dist/components/ARFilters/ARFilters.js +138 -0
  5. package/dist/components/ARFilters/ARFilters.js.map +1 -0
  6. package/dist/components/ARFilters/ARFilters.jsx +97 -0
  7. package/dist/components/ARFilters/ARFilters.jsx.map +1 -0
  8. package/dist/components/ARFilters/FilterCarousel.d.ts +12 -0
  9. package/dist/components/ARFilters/FilterCarousel.d.ts.map +1 -0
  10. package/dist/components/ARFilters/FilterCarousel.js +95 -0
  11. package/dist/components/ARFilters/FilterCarousel.js.map +1 -0
  12. package/dist/components/ARFilters/FilterCarousel.jsx +136 -0
  13. package/dist/components/ARFilters/FilterCarousel.jsx.map +1 -0
  14. package/dist/components/ARFilters/Popups.d.ts +24 -0
  15. package/dist/components/ARFilters/Popups.d.ts.map +1 -0
  16. package/dist/components/ARFilters/Popups.js +38 -0
  17. package/dist/components/ARFilters/Popups.js.map +1 -0
  18. package/dist/components/ARFilters/Popups.jsx +69 -0
  19. package/dist/components/ARFilters/Popups.jsx.map +1 -0
  20. package/dist/components/ARFilters/constants.d.ts +34 -0
  21. package/dist/components/ARFilters/constants.d.ts.map +1 -0
  22. package/dist/components/ARFilters/constants.js +45 -0
  23. package/dist/components/ARFilters/constants.js.map +1 -0
  24. package/dist/components/ARFilters/index.d.ts +28 -0
  25. package/dist/components/ARFilters/index.d.ts.map +1 -0
  26. package/dist/components/ARFilters/index.js +32 -0
  27. package/dist/components/ARFilters/index.js.map +1 -0
  28. package/dist/components/ARFilters/translations.d.ts +3 -0
  29. package/dist/components/ARFilters/translations.d.ts.map +1 -0
  30. package/dist/components/ARFilters/translations.js +84 -0
  31. package/dist/components/ARFilters/translations.js.map +1 -0
  32. package/dist/components/ARFilters/types.d.ts +56 -0
  33. package/dist/components/ARFilters/types.d.ts.map +1 -0
  34. package/dist/components/ARFilters/types.js +3 -0
  35. package/dist/components/ARFilters/types.js.map +1 -0
  36. package/dist/components/ARFilters/useDeepAR.d.ts +18 -0
  37. package/dist/components/ARFilters/useDeepAR.d.ts.map +1 -0
  38. package/dist/components/ARFilters/useDeepAR.js +351 -0
  39. package/dist/components/ARFilters/useDeepAR.js.map +1 -0
  40. package/dist/components/ARFilters/utils.d.ts +5 -0
  41. package/dist/components/ARFilters/utils.d.ts.map +1 -0
  42. package/dist/components/ARFilters/utils.js +59 -0
  43. package/dist/components/ARFilters/utils.js.map +1 -0
  44. package/dist/components/AvatarAI.d.ts +88 -0
  45. package/dist/components/AvatarAI.d.ts.map +1 -0
  46. package/dist/components/AvatarAI.js +556 -0
  47. package/dist/components/AvatarAI.js.map +1 -0
  48. package/dist/components/CreativeFaceSwap.d.ts +83 -0
  49. package/dist/components/CreativeFaceSwap.d.ts.map +1 -0
  50. package/dist/components/CreativeFaceSwap.js +497 -0
  51. package/dist/components/CreativeFaceSwap.js.map +1 -0
  52. package/dist/components/CreativeFaceSwap.jsx +536 -0
  53. package/dist/components/CreativeFaceSwap.jsx.map +1 -0
  54. package/dist/components/MemeGenerator.d.ts +66 -0
  55. package/dist/components/MemeGenerator.d.ts.map +1 -0
  56. package/dist/components/MemeGenerator.js +320 -0
  57. package/dist/components/MemeGenerator.js.map +1 -0
  58. package/dist/components/Ringtone.d.ts +56 -0
  59. package/dist/components/Ringtone.d.ts.map +1 -0
  60. package/dist/components/Ringtone.js +192 -0
  61. package/dist/components/Ringtone.js.map +1 -0
  62. package/dist/components/Ringtone.jsx +80 -0
  63. package/dist/components/Ringtone.jsx.map +1 -0
  64. package/dist/components/SpinningWheel/SpinningWheel.js +7 -7
  65. package/dist/components/SpinningWheel/SpinningWheel.jsx +744 -0
  66. package/dist/components/SpinningWheel/SpinningWheel.jsx.map +1 -0
  67. package/dist/components/Wallpapers.d.ts +86 -0
  68. package/dist/components/Wallpapers.d.ts.map +1 -0
  69. package/dist/components/Wallpapers.js +530 -0
  70. package/dist/components/Wallpapers.js.map +1 -0
  71. package/dist/components/WallpapersName.d.ts +140 -0
  72. package/dist/components/WallpapersName.d.ts.map +1 -0
  73. package/dist/components/WallpapersName.js +455 -0
  74. package/dist/components/WallpapersName.js.map +1 -0
  75. package/dist/index.d.ts +14 -0
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +28 -1
  78. package/dist/index.js.map +1 -1
  79. package/dist/libraries/auth.d.ts.map +1 -1
  80. package/dist/libraries/auth.js +9 -12
  81. package/dist/libraries/auth.js.map +1 -1
  82. package/index.js +67 -27
  83. package/package.json +40 -40
  84. package/public/spin2win/assets/border-afristream.svg +26 -26
  85. package/public/spin2win/assets/border-efc.svg +23 -23
  86. package/public/spin2win/assets/border-totalgym.svg +27 -27
  87. package/public/spin2win/assets/border-womantoday.svg +26 -26
  88. package/public/spin2win/assets/indicator-afristream.svg +28 -28
  89. package/public/spin2win/assets/indicator-efc.svg +29 -29
  90. package/public/spin2win/assets/indicator-totalgym.svg +29 -29
  91. package/public/spin2win/fonts/switzer/README.md +22 -22
  92. package/types/index.d.ts +415 -415
@@ -0,0 +1,556 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.AvatarAI = AvatarAI;
37
+ exports.AvatarAIForYouCard = AvatarAIForYouCard;
38
+ exports.AvatarAIPage = AvatarAIPage;
39
+ const react_1 = __importStar(require("react"));
40
+ const AVATAR_AI_CSS = `
41
+ .avatarai-styles-grid::-webkit-scrollbar { width: 6px; }
42
+ .avatarai-styles-grid::-webkit-scrollbar-track { background: #f1f1f1; border-radius: 3px; }
43
+ .avatarai-styles-grid::-webkit-scrollbar-thumb { background: #ccc; border-radius: 3px; }
44
+ `;
45
+ const defaultStyles = [
46
+ { id: 1, name: 'Pirate', image: 'https://cdn.smarthubtech.net/upload/20240426_135427_99796_1_cuadrada.png' },
47
+ { id: 2, name: 'Superhero', image: 'https://cdn.smarthubtech.net/upload/20240426_135813_99797_1_cuadrada.png' },
48
+ { id: 3, name: 'Old', image: 'https://cdn.smarthubtech.net/upload/20240426_135253_99795_1_cuadrada.png' },
49
+ { id: 4, name: 'AI Robot', image: 'https://cdn.smarthubtech.net/upload/20240426_135125_99794_1_cuadrada.png' },
50
+ { id: 5, name: 'Viking', image: 'https://cdn.smarthubtech.net/upload/20230831_104318_96479_1_cuadrada.png' },
51
+ { id: 6, name: 'Fortnite', image: 'https://cdn.smarthubtech.net/upload/20230831_103218_96457_1_cuadrada.png' },
52
+ { id: 7, name: 'Elf', image: 'https://cdn.smarthubtech.net/upload/20230831_103031_96455_1_cuadrada.png' },
53
+ { id: 8, name: 'Anime', image: 'https://cdn.smarthubtech.net/upload/20230831_102634_95473_1_cuadrada.png' },
54
+ { id: 9, name: 'Modern Family', image: 'https://cdn.smarthubtech.net/upload/20230831_101847_95472_1_cuadrada.png' },
55
+ { id: 10, name: 'Baby', image: 'https://cdn.smarthubtech.net/upload/20230831_112829_95469_1_cuadrada.png' },
56
+ { id: 11, name: 'Barbie', image: 'https://cdn.smarthubtech.net/upload/20230831_100727_95448_1_cuadrada.png' },
57
+ ];
58
+ const defaultMoods = [
59
+ { id: 1, value: 'normal', name: 'Normal', icon: 'https://b2c-portales.s3.amazonaws.com/Collections/default/icons/icon_normal.svg' },
60
+ { id: 2, value: 'smile', name: 'Smile', icon: 'https://b2c-portales.s3.amazonaws.com/Collections/default/icons/Icono_Feliz.svg' },
61
+ { id: 3, value: 'surprised', name: 'Surprised', icon: 'https://b2c-portales.s3.amazonaws.com/Collections/default/icons/Icono_Sorprendido.svg' },
62
+ { id: 4, value: 'angry', name: 'Angry', icon: 'https://b2c-portales.s3.amazonaws.com/Collections/default/icons/icono_Enojado.svg' },
63
+ ];
64
+ const MOOD_PROMPTS = {
65
+ smile: {
66
+ prompt: '(((joy face, showcasing a bright smile))) ',
67
+ negative_prompt: '(((sad face, with tears forming in the eyes, ugly))) ',
68
+ },
69
+ surprised: {
70
+ prompt: '(((Face with wide open eyes and open mouth, and raised eyebrows, showing surprise, open mouth))) ',
71
+ negative_prompt: '(((face with unimpressed expression, closed mouth, showing lack of surprise, smile, ugly))) ',
72
+ },
73
+ angry: {
74
+ prompt: '(((angry face, closed mouth, furrowed brow, narrowed eyes, tight lips, expression of displeasure))) ',
75
+ negative_prompt: '(((calm face, open mouth, peaceful face, teeth, joy face, smile face, ugly))) ',
76
+ },
77
+ normal: {
78
+ prompt: ' ',
79
+ negative_prompt: ' ',
80
+ },
81
+ };
82
+ const defaultTheme = {
83
+ primaryColor: '#FF5500',
84
+ primaryHoverColor: '#ff1600',
85
+ textColor: '#001B5E',
86
+ backgroundColor: '#F9F9F9',
87
+ cardBackground: '#ffffff',
88
+ };
89
+ const defaultTexts = {
90
+ styleTitle: 'Style',
91
+ styleSectionTitle: 'Style',
92
+ moodsTitle: 'Moods',
93
+ backgroundTitle: 'Background colours',
94
+ uploadButton: 'UPLOAD IMAGE',
95
+ downloadButton: 'DOWNLOAD',
96
+ generateButton: 'GENERATE AVATAR',
97
+ generatingButton: 'GENERATING...',
98
+ resultTitle: 'Your result',
99
+ emptyStateText: 'Your generated avatar will appear here',
100
+ progressText: 'Progress',
101
+ successMessage: 'Avatar generated successfully!',
102
+ startAgainButton: 'START AGAIN',
103
+ startingText: 'Starting generation...',
104
+ preparingText: 'Preparing your avatar...',
105
+ };
106
+ function AvatarAI({ styles: stylesProp = [], stylesTag, apiBaseUrl, locale, moods = defaultMoods, theme = {}, texts = {}, config, onGenerationComplete, onError, }) {
107
+ var _a, _b;
108
+ const mergedTheme = Object.assign(Object.assign({}, defaultTheme), theme);
109
+ const mergedTexts = Object.assign(Object.assign({}, defaultTexts), texts);
110
+ const [dynamicStyles, setDynamicStyles] = (0, react_1.useState)([]);
111
+ (0, react_1.useEffect)(() => {
112
+ if (!stylesTag)
113
+ return;
114
+ const fetchStyles = async () => {
115
+ var _a;
116
+ try {
117
+ const base = apiBaseUrl || '/api';
118
+ const response = await fetch(`${base}/get_contents_by_tags`, {
119
+ method: 'POST',
120
+ headers: { 'Content-Type': 'application/json' },
121
+ body: JSON.stringify({ language: locale || 'en', tags: [stylesTag], limit: 50 }),
122
+ });
123
+ if (!response.ok)
124
+ return;
125
+ const data = await response.json();
126
+ console.log(`🎭 AvatarAI - tag "${stylesTag}" response:`, data);
127
+ const items = ((_a = data === null || data === void 0 ? void 0 : data.data) === null || _a === void 0 ? void 0 : _a.data) || [];
128
+ const mapped = items.map((item, idx) => {
129
+ var _a, _b;
130
+ return ({
131
+ id: item.id || idx,
132
+ name: item.title || `Style ${idx + 1}`,
133
+ image: item.thumbnail || ((_a = item.images) === null || _a === void 0 ? void 0 : _a.img1) || item.imageUrl || '',
134
+ prompt: ((_b = item.metadata) === null || _b === void 0 ? void 0 : _b.prompt) || '',
135
+ });
136
+ }).filter((s) => s.image);
137
+ if (mapped.length > 0)
138
+ setDynamicStyles(mapped);
139
+ }
140
+ catch (err) {
141
+ console.error('Error fetching avatar styles:', err);
142
+ }
143
+ };
144
+ fetchStyles();
145
+ }, [stylesTag, apiBaseUrl, locale]);
146
+ const styles = stylesProp.length > 0 ? stylesProp : dynamicStyles.length > 0 ? dynamicStyles : defaultStyles;
147
+ const [uploadedImage, setUploadedImage] = (0, react_1.useState)(null);
148
+ const [imageDimensions, setImageDimensions] = (0, react_1.useState)(null);
149
+ const [selectedStyle, setSelectedStyle] = (0, react_1.useState)(null);
150
+ const [selectedMood, setSelectedMood] = (0, react_1.useState)((_b = (_a = defaultMoods[0]) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : null);
151
+ const [selectedBgColor, setSelectedBgColor] = (0, react_1.useState)(null);
152
+ const [recentColors, setRecentColors] = (0, react_1.useState)([]);
153
+ const [isGenerating, setIsGenerating] = (0, react_1.useState)(false);
154
+ const [generatedResult, setGeneratedResult] = (0, react_1.useState)(null);
155
+ const [progressPercent, setProgressPercent] = (0, react_1.useState)(null);
156
+ const [generatedImageUrl, setGeneratedImageUrl] = (0, react_1.useState)(null);
157
+ const [error, setError] = (0, react_1.useState)(null);
158
+ const [isComparing, setIsComparing] = (0, react_1.useState)(false);
159
+ const fileInputRef = (0, react_1.useRef)(null);
160
+ const colorPickerRef = (0, react_1.useRef)(null);
161
+ (0, react_1.useEffect)(() => {
162
+ const id = 'avatarai-styles';
163
+ if (document.getElementById(id))
164
+ return;
165
+ const style = document.createElement('style');
166
+ style.id = id;
167
+ style.textContent = AVATAR_AI_CSS;
168
+ document.head.appendChild(style);
169
+ }, []);
170
+ (0, react_1.useEffect)(() => {
171
+ if (!(generatedResult === null || generatedResult === void 0 ? void 0 : generatedResult.md5) || progressPercent === 100 || !config)
172
+ return;
173
+ const checkProgress = async () => {
174
+ try {
175
+ const response = await fetch(config.apiEndpoints.progress, {
176
+ method: 'POST',
177
+ headers: { 'Content-Type': 'application/json' },
178
+ body: JSON.stringify({
179
+ us_id: config.userId,
180
+ us_login: config.userLogin,
181
+ md5: generatedResult.md5,
182
+ }),
183
+ });
184
+ const data = await response.json();
185
+ if (response.ok && data.success) {
186
+ setProgressPercent(data.data.pct);
187
+ console.log('🎭 AvatarAI progress:', data.data.pct + '%');
188
+ }
189
+ }
190
+ catch (err) {
191
+ console.error('Error checking avatar progress:', err);
192
+ }
193
+ };
194
+ checkProgress();
195
+ const interval = setInterval(checkProgress, 3000);
196
+ return () => clearInterval(interval);
197
+ }, [generatedResult, progressPercent, config]);
198
+ (0, react_1.useEffect)(() => {
199
+ if (!(generatedResult === null || generatedResult === void 0 ? void 0 : generatedResult.md5) || progressPercent !== 100 || generatedImageUrl || !config)
200
+ return;
201
+ const fetchFinalImage = async () => {
202
+ try {
203
+ const response = await fetch(config.apiEndpoints.getImage, {
204
+ method: 'POST',
205
+ headers: { 'Content-Type': 'application/json' },
206
+ body: JSON.stringify({
207
+ us_id: config.userId,
208
+ us_login: config.userLogin,
209
+ md5: generatedResult.md5,
210
+ }),
211
+ });
212
+ const data = await response.json();
213
+ if (response.ok && data.success && data.data) {
214
+ const imageUrl = decodeURIComponent(data.data.s3_image);
215
+ setGeneratedImageUrl(imageUrl);
216
+ console.log('🎭 AvatarAI generated image:', imageUrl);
217
+ onGenerationComplete === null || onGenerationComplete === void 0 ? void 0 : onGenerationComplete(imageUrl);
218
+ }
219
+ }
220
+ catch (err) {
221
+ console.error('Error fetching avatar image:', err);
222
+ const errorMsg = 'Error fetching generated avatar';
223
+ setError(errorMsg);
224
+ onError === null || onError === void 0 ? void 0 : onError(errorMsg);
225
+ }
226
+ };
227
+ fetchFinalImage();
228
+ }, [generatedResult, progressPercent, generatedImageUrl, config, onGenerationComplete, onError]);
229
+ const handleUploadClick = () => { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); };
230
+ const handleFileChange = (event) => {
231
+ var _a;
232
+ const file = (_a = event.target.files) === null || _a === void 0 ? void 0 : _a[0];
233
+ if (!file)
234
+ return;
235
+ if (!file.type.startsWith('image/')) {
236
+ alert('Please select a valid image file');
237
+ return;
238
+ }
239
+ if (file.size > 5 * 1024 * 1024) {
240
+ alert('Image size should be less than 5MB');
241
+ return;
242
+ }
243
+ const reader = new FileReader();
244
+ reader.onloadend = () => {
245
+ const base64 = reader.result;
246
+ setUploadedImage(base64);
247
+ const img = new Image();
248
+ img.onload = () => setImageDimensions({ width: img.width, height: img.height });
249
+ img.src = base64;
250
+ };
251
+ reader.readAsDataURL(file);
252
+ };
253
+ const handleRemoveImage = () => {
254
+ setUploadedImage(null);
255
+ setImageDimensions(null);
256
+ if (fileInputRef.current)
257
+ fileInputRef.current.value = '';
258
+ };
259
+ const handleColorPickerClick = () => { var _a; return (_a = colorPickerRef.current) === null || _a === void 0 ? void 0 : _a.click(); };
260
+ const handleColorChange = (event) => {
261
+ const newColor = event.target.value;
262
+ setSelectedBgColor(newColor);
263
+ if (!recentColors.includes(newColor)) {
264
+ setRecentColors(prev => [newColor, ...prev].slice(0, 3));
265
+ }
266
+ };
267
+ const handleTransparentClick = () => setSelectedBgColor('transparent');
268
+ const handleRecentColorClick = (color) => setSelectedBgColor(color);
269
+ const handleGenerate = async () => {
270
+ if (!uploadedImage || !selectedStyle || !config)
271
+ return;
272
+ const selectedMoodItem = moods.find(m => m.id === selectedMood);
273
+ setIsGenerating(true);
274
+ setError(null);
275
+ setGeneratedResult(null);
276
+ setProgressPercent(null);
277
+ setGeneratedImageUrl(null);
278
+ const selectedStyleItem = styles.find(s => s.id === selectedStyle);
279
+ const stylePrompt = (selectedStyleItem === null || selectedStyleItem === void 0 ? void 0 : selectedStyleItem.prompt) || '';
280
+ const moodValue = (selectedMoodItem === null || selectedMoodItem === void 0 ? void 0 : selectedMoodItem.value) || 'normal';
281
+ const moodData = MOOD_PROMPTS[moodValue] || MOOD_PROMPTS.normal;
282
+ const prompt = moodData.prompt + stylePrompt;
283
+ const negative_prompt = moodData.negative_prompt;
284
+ try {
285
+ const response = await fetch(config.apiEndpoints.generate, {
286
+ method: 'POST',
287
+ headers: { 'Content-Type': 'application/json' },
288
+ body: JSON.stringify({
289
+ us_id: config.userId,
290
+ us_login: config.userLogin,
291
+ wid: config.wid,
292
+ workflow: 'txt2img_faceswap_avatar_api',
293
+ prompt: prompt,
294
+ negative_prompt: negative_prompt,
295
+ width: (imageDimensions === null || imageDimensions === void 0 ? void 0 : imageDimensions.width) || 512,
296
+ height: (imageDimensions === null || imageDimensions === void 0 ? void 0 : imageDimensions.height) || 512,
297
+ bg_color: selectedBgColor || 'noremove',
298
+ control_net: 0,
299
+ style: '',
300
+ img_data: uploadedImage,
301
+ }),
302
+ });
303
+ const data = await response.json();
304
+ if (!response.ok || !data.success) {
305
+ throw new Error(data.error || 'Error generating avatar');
306
+ }
307
+ setGeneratedResult(data.data);
308
+ console.log('🎭 AvatarAI generation started:', data.data);
309
+ }
310
+ catch (err) {
311
+ const errorMsg = err instanceof Error ? err.message : 'An error occurred';
312
+ setError(errorMsg);
313
+ onError === null || onError === void 0 ? void 0 : onError(errorMsg);
314
+ }
315
+ finally {
316
+ setIsGenerating(false);
317
+ }
318
+ };
319
+ const handleStartAgain = () => {
320
+ setGeneratedResult(null);
321
+ setProgressPercent(null);
322
+ setGeneratedImageUrl(null);
323
+ setError(null);
324
+ };
325
+ const handleDownload = async () => {
326
+ if (!generatedImageUrl)
327
+ return;
328
+ try {
329
+ const response = await fetch(generatedImageUrl);
330
+ const blob = await response.blob();
331
+ const objectUrl = URL.createObjectURL(blob);
332
+ const link = document.createElement('a');
333
+ link.href = objectUrl;
334
+ link.download = `avatar-${Date.now()}.png`;
335
+ document.body.appendChild(link);
336
+ link.click();
337
+ document.body.removeChild(link);
338
+ URL.revokeObjectURL(objectUrl);
339
+ }
340
+ catch (_a) {
341
+ window.open(generatedImageUrl, '_blank');
342
+ }
343
+ };
344
+ const isProcessing = isGenerating || (!!generatedResult && !generatedImageUrl);
345
+ const canGenerate = !!uploadedImage && !!selectedStyle && !isProcessing && !!config;
346
+ return (react_1.default.createElement("div", { style: { width: '100%', backgroundColor: mergedTheme.backgroundColor } },
347
+ react_1.default.createElement("div", { style: { maxWidth: '1280px', margin: '0 auto', padding: '0 16px' } },
348
+ react_1.default.createElement("div", { style: {
349
+ backgroundColor: mergedTheme.cardBackground,
350
+ borderRadius: '8px',
351
+ boxShadow: '0 1px 3px rgba(0,0,0,0.1)',
352
+ padding: '32px',
353
+ } },
354
+ react_1.default.createElement("h2", { style: { fontSize: 'clamp(24px, 4vw, 36px)', fontWeight: 700, color: mergedTheme.textColor, marginBottom: '32px' } }, mergedTexts.styleTitle),
355
+ react_1.default.createElement("div", { style: { display: 'flex', gap: '32px', flexWrap: 'wrap' } },
356
+ react_1.default.createElement("div", { style: {
357
+ flex: '1 1 300px',
358
+ minHeight: '500px',
359
+ border: `2px dashed ${generatedImageUrl ? mergedTheme.primaryColor : '#d1d5db'}`,
360
+ borderRadius: '8px',
361
+ display: 'flex',
362
+ flexDirection: 'column',
363
+ alignItems: 'center',
364
+ justifyContent: 'center',
365
+ position: 'relative',
366
+ padding: '32px',
367
+ backgroundColor: '#fff',
368
+ transition: 'border-color 0.3s',
369
+ } },
370
+ react_1.default.createElement("input", { ref: fileInputRef, type: "file", accept: "image/*", onChange: handleFileChange, style: { display: 'none' } }),
371
+ uploadedImage ? (react_1.default.createElement(react_1.default.Fragment, null,
372
+ react_1.default.createElement("img", { src: generatedImageUrl && !isComparing ? generatedImageUrl : uploadedImage, alt: generatedImageUrl && !isComparing ? 'Generated avatar' : 'Uploaded photo', style: { width: '100%', objectFit: 'contain', maxHeight: '450px', borderRadius: '8px' } }),
373
+ generatedImageUrl && (react_1.default.createElement("div", { style: {
374
+ position: 'absolute', top: '16px', left: '16px',
375
+ backgroundColor: isComparing ? 'rgba(0,0,0,0.6)' : mergedTheme.primaryColor,
376
+ color: 'white', fontSize: '11px', fontWeight: 700,
377
+ padding: '4px 10px', borderRadius: '9999px',
378
+ transition: 'background-color 0.2s',
379
+ } }, isComparing ? 'ORIGINAL' : 'RESULT')),
380
+ !generatedImageUrl && (react_1.default.createElement("button", { onClick: handleRemoveImage, style: {
381
+ position: 'absolute', top: '16px', right: '16px',
382
+ width: '48px', height: '48px', backgroundColor: '#FF6B6B',
383
+ borderRadius: '50%', border: 'none', cursor: 'pointer',
384
+ display: 'flex', alignItems: 'center', justifyContent: 'center',
385
+ boxShadow: '0 2px 8px rgba(0,0,0,0.2)',
386
+ } },
387
+ react_1.default.createElement("svg", { fill: "none", stroke: "white", viewBox: "0 0 24 24", style: { width: '24px', height: '24px' } },
388
+ react_1.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" })))),
389
+ generatedImageUrl && (react_1.default.createElement("button", { onMouseDown: () => setIsComparing(true), onMouseUp: () => setIsComparing(false), onMouseLeave: () => setIsComparing(false), onTouchStart: () => setIsComparing(true), onTouchEnd: () => setIsComparing(false), style: {
390
+ position: 'absolute', bottom: '16px', left: '50%', transform: 'translateX(-50%)',
391
+ backgroundColor: 'rgba(0,0,0,0.65)', color: 'white',
392
+ fontWeight: 700, fontSize: '13px', padding: '10px 20px',
393
+ borderRadius: '9999px', border: 'none', cursor: 'pointer',
394
+ display: 'flex', alignItems: 'center', gap: '8px',
395
+ backdropFilter: 'blur(4px)',
396
+ userSelect: 'none',
397
+ whiteSpace: 'nowrap',
398
+ } },
399
+ react_1.default.createElement("svg", { fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", style: { width: '16px', height: '16px' } },
400
+ react_1.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }),
401
+ react_1.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z" })),
402
+ "Hold to compare")))) : (react_1.default.createElement("button", { onClick: handleUploadClick, style: {
403
+ backgroundColor: mergedTheme.primaryColor, color: 'white',
404
+ fontWeight: 700, fontSize: '18px', padding: '16px 32px',
405
+ borderRadius: '9999px', border: 'none', cursor: 'pointer',
406
+ display: 'flex', alignItems: 'center', gap: '12px',
407
+ }, onMouseEnter: e => { e.currentTarget.style.backgroundColor = mergedTheme.primaryHoverColor || '#ff1600'; }, onMouseLeave: e => { e.currentTarget.style.backgroundColor = mergedTheme.primaryColor || '#FF5500'; } },
408
+ react_1.default.createElement("svg", { fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", style: { width: '24px', height: '24px' } },
409
+ react_1.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z" })),
410
+ mergedTexts.uploadButton))),
411
+ react_1.default.createElement("div", { style: { flex: '1 1 300px', display: 'flex', flexDirection: 'column', gap: '24px' } },
412
+ react_1.default.createElement("div", null,
413
+ react_1.default.createElement("div", { style: { display: 'flex', alignItems: 'center', gap: '8px', marginBottom: '16px' } },
414
+ react_1.default.createElement("svg", { fill: "none", stroke: mergedTheme.primaryColor, viewBox: "0 0 24 24", style: { width: '24px', height: '24px' } },
415
+ react_1.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01" })),
416
+ react_1.default.createElement("h3", { style: { fontSize: '20px', fontWeight: 700, color: mergedTheme.textColor, margin: 0 } }, mergedTexts.styleSectionTitle)),
417
+ react_1.default.createElement("div", { className: "avatarai-styles-grid", style: { maxHeight: '480px', overflowY: 'auto', padding: '4px' } },
418
+ react_1.default.createElement("div", { style: { display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: '12px' } }, styles.map((style) => (react_1.default.createElement("button", { key: style.id, onClick: () => setSelectedStyle(style.id), title: style.name, style: {
419
+ position: 'relative', aspectRatio: '1 / 1', borderRadius: '12px',
420
+ overflow: 'hidden', border: 'none', padding: 0, cursor: 'pointer',
421
+ outline: selectedStyle === style.id ? `3px solid ${mergedTheme.primaryColor}` : '3px solid transparent',
422
+ outlineOffset: '2px',
423
+ transform: selectedStyle === style.id ? 'scale(1.03)' : 'scale(1)',
424
+ transition: 'transform 0.2s, outline-color 0.2s',
425
+ }, onMouseEnter: e => { if (selectedStyle !== style.id)
426
+ e.currentTarget.style.transform = 'scale(1.03)'; }, onMouseLeave: e => { if (selectedStyle !== style.id)
427
+ e.currentTarget.style.transform = 'scale(1)'; } },
428
+ react_1.default.createElement("img", { src: style.image, alt: style.name, style: { width: '100%', height: '100%', objectFit: 'cover', display: 'block' } }))))))),
429
+ react_1.default.createElement("div", { style: { display: 'flex', gap: '24px', flexWrap: 'wrap' } },
430
+ react_1.default.createElement("div", { style: { flex: '1 1 140px' } },
431
+ react_1.default.createElement("div", { style: { display: 'flex', alignItems: 'center', gap: '8px', marginBottom: '16px' } },
432
+ react_1.default.createElement("svg", { fill: "none", stroke: mergedTheme.primaryColor, viewBox: "0 0 24 24", style: { width: '24px', height: '24px' } },
433
+ react_1.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M14.828 14.828a4 4 0 01-5.656 0M9 10h.01M15 10h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" })),
434
+ react_1.default.createElement("h3", { style: { fontSize: '18px', fontWeight: 700, color: mergedTheme.textColor, margin: 0 } }, mergedTexts.moodsTitle)),
435
+ react_1.default.createElement("div", { style: { display: 'flex', gap: '8px' } }, moods.map((mood) => (react_1.default.createElement("button", { key: mood.id, onClick: () => setSelectedMood(mood.id), title: mood.name, style: {
436
+ width: '40px', height: '40px', borderRadius: '50%',
437
+ border: selectedMood === mood.id ? 'none' : `2px solid ${mergedTheme.primaryColor}`,
438
+ backgroundColor: selectedMood === mood.id ? mergedTheme.primaryColor : 'white',
439
+ padding: '8px', cursor: 'pointer',
440
+ display: 'flex', alignItems: 'center', justifyContent: 'center',
441
+ transform: selectedMood === mood.id ? 'scale(1.1)' : 'scale(1)',
442
+ outline: selectedMood === mood.id ? `4px solid ${mergedTheme.primaryColor}44` : 'none',
443
+ transition: 'all 0.2s',
444
+ }, onMouseEnter: e => { e.currentTarget.style.transform = 'scale(1.1)'; }, onMouseLeave: e => { e.currentTarget.style.transform = selectedMood === mood.id ? 'scale(1.1)' : 'scale(1)'; } },
445
+ react_1.default.createElement("img", { src: mood.icon, alt: mood.name, style: {
446
+ width: '100%', height: '100%', objectFit: 'contain',
447
+ filter: selectedMood === mood.id ? 'brightness(0) invert(1)' : 'none',
448
+ } })))))),
449
+ react_1.default.createElement("div", { style: { flex: '1 1 140px' } },
450
+ react_1.default.createElement("div", { style: { display: 'flex', alignItems: 'center', gap: '8px', marginBottom: '16px' } },
451
+ react_1.default.createElement("svg", { fill: "none", stroke: mergedTheme.primaryColor, viewBox: "0 0 24 24", style: { width: '24px', height: '24px' } },
452
+ react_1.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01" })),
453
+ react_1.default.createElement("h3", { style: { fontSize: '18px', fontWeight: 700, color: mergedTheme.textColor, margin: 0 } }, mergedTexts.backgroundTitle)),
454
+ react_1.default.createElement("input", { ref: colorPickerRef, type: "color", onChange: handleColorChange, style: { display: 'none' } }),
455
+ react_1.default.createElement("div", { style: { display: 'flex', gap: '8px', alignItems: 'center', flexWrap: 'wrap' } },
456
+ react_1.default.createElement("button", { onClick: handleColorPickerClick, title: "Select color", style: {
457
+ width: '48px', height: '48px', borderRadius: '50%',
458
+ border: '2px solid #d1d5db', backgroundColor: 'white', cursor: 'pointer',
459
+ display: 'flex', alignItems: 'center', justifyContent: 'center', padding: '8px',
460
+ outline: selectedBgColor && selectedBgColor !== 'transparent' ? `4px solid ${mergedTheme.primaryColor}44` : 'none',
461
+ transform: selectedBgColor && selectedBgColor !== 'transparent' ? 'scale(1.1)' : 'scale(1)',
462
+ transition: 'all 0.2s',
463
+ }, onMouseEnter: e => { e.currentTarget.style.transform = 'scale(1.1)'; }, onMouseLeave: e => { e.currentTarget.style.transform = selectedBgColor && selectedBgColor !== 'transparent' ? 'scale(1.1)' : 'scale(1)'; } },
464
+ react_1.default.createElement("img", { src: "https://d2obs2d3lmpnq9.cloudfront.net/ADS/cmp%20color%20picker/ColorPicker_CONsombra%201%20%281%29.svg", alt: "Color Picker", style: { width: '32px', height: '32px', objectFit: 'contain' } })),
465
+ recentColors.map((color, index) => (react_1.default.createElement("button", { key: index, onClick: () => handleRecentColorClick(color), title: `Recent color ${index + 1}`, style: {
466
+ width: '48px', height: '48px', borderRadius: '50%',
467
+ border: selectedBgColor === color ? `2px solid ${mergedTheme.primaryColor}` : '2px solid #d1d5db',
468
+ backgroundColor: color, cursor: 'pointer',
469
+ outline: selectedBgColor === color ? `4px solid ${mergedTheme.primaryColor}44` : 'none',
470
+ transform: selectedBgColor === color ? 'scale(1.1)' : 'scale(1)',
471
+ transition: 'all 0.2s',
472
+ }, onMouseEnter: e => { e.currentTarget.style.transform = 'scale(1.1)'; }, onMouseLeave: e => { e.currentTarget.style.transform = selectedBgColor === color ? 'scale(1.1)' : 'scale(1)'; } }))),
473
+ react_1.default.createElement("button", { onClick: handleTransparentClick, title: "Transparent", style: {
474
+ width: '48px', height: '48px', borderRadius: '50%',
475
+ border: selectedBgColor === 'transparent' ? `2px solid ${mergedTheme.primaryColor}` : '2px solid #d1d5db',
476
+ backgroundImage: 'repeating-linear-gradient(45deg, #ddd 0, #ddd 1px, transparent 0, transparent 50%), repeating-linear-gradient(-45deg, #ddd 0, #ddd 1px, transparent 0, transparent 50%)',
477
+ backgroundSize: '10px 10px', backgroundColor: '#fff', cursor: 'pointer',
478
+ outline: selectedBgColor === 'transparent' ? `4px solid ${mergedTheme.primaryColor}44` : 'none',
479
+ transform: selectedBgColor === 'transparent' ? 'scale(1.1)' : 'scale(1)',
480
+ transition: 'all 0.2s',
481
+ }, onMouseEnter: e => { e.currentTarget.style.transform = 'scale(1.1)'; }, onMouseLeave: e => { e.currentTarget.style.transform = selectedBgColor === 'transparent' ? 'scale(1.1)' : 'scale(1)'; } })))))),
482
+ error && (react_1.default.createElement("div", { style: { padding: '12px', backgroundColor: '#fef2f2', border: '1px solid #fecaca', borderRadius: '8px', marginTop: '16px' } },
483
+ react_1.default.createElement("p", { style: { color: '#dc2626', fontSize: '14px', margin: 0 } }, error))),
484
+ react_1.default.createElement("div", { style: { display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(200px, 1fr))', gap: '16px', marginTop: '32px' } },
485
+ react_1.default.createElement("button", { onClick: handleStartAgain, disabled: !generatedResult, style: {
486
+ backgroundColor: generatedResult ? mergedTheme.primaryColor : '#d1d5db',
487
+ color: generatedResult ? 'white' : '#9ca3af',
488
+ fontWeight: 700, fontSize: '18px', padding: '16px 32px',
489
+ borderRadius: '9999px', border: 'none',
490
+ cursor: generatedResult ? 'pointer' : 'not-allowed',
491
+ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '12px',
492
+ }, onMouseEnter: e => { if (generatedResult)
493
+ e.currentTarget.style.backgroundColor = mergedTheme.primaryHoverColor || '#ff1600'; }, onMouseLeave: e => { if (generatedResult)
494
+ e.currentTarget.style.backgroundColor = mergedTheme.primaryColor || '#FF5500'; } },
495
+ react_1.default.createElement("svg", { fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", style: { width: '24px', height: '24px' } },
496
+ react_1.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" })),
497
+ mergedTexts.startAgainButton),
498
+ react_1.default.createElement("button", { onClick: handleGenerate, disabled: !canGenerate, style: {
499
+ backgroundColor: canGenerate ? '#FF6B6B' : '#d1d5db',
500
+ color: canGenerate ? 'white' : '#9ca3af',
501
+ fontWeight: 700, fontSize: '18px', padding: '16px 32px',
502
+ borderRadius: '9999px', border: 'none',
503
+ cursor: canGenerate ? 'pointer' : 'not-allowed',
504
+ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '12px',
505
+ }, onMouseEnter: e => { if (canGenerate)
506
+ e.currentTarget.style.backgroundColor = '#ff5252'; }, onMouseLeave: e => { if (canGenerate)
507
+ e.currentTarget.style.backgroundColor = '#FF6B6B'; } }, isGenerating ? (react_1.default.createElement(react_1.default.Fragment, null,
508
+ react_1.default.createElement("svg", { style: { width: '24px', height: '24px' }, className: "animate-spin", fill: "none", viewBox: "0 0 24 24" },
509
+ react_1.default.createElement("circle", { style: { opacity: 0.25 }, cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
510
+ react_1.default.createElement("path", { style: { opacity: 0.75 }, fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })),
511
+ mergedTexts.generatingButton)) : (react_1.default.createElement(react_1.default.Fragment, null,
512
+ react_1.default.createElement("svg", { fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", style: { width: '24px', height: '24px' } },
513
+ react_1.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M13 10V3L4 14h7v7l9-11h-7z" })),
514
+ mergedTexts.generateButton))),
515
+ react_1.default.createElement("button", { onClick: handleDownload, disabled: !generatedImageUrl, style: {
516
+ backgroundColor: generatedImageUrl ? mergedTheme.primaryColor : '#d1d5db',
517
+ color: generatedImageUrl ? 'white' : '#9ca3af',
518
+ fontWeight: 700, fontSize: '18px', padding: '16px 32px',
519
+ borderRadius: '9999px', border: 'none',
520
+ cursor: generatedImageUrl ? 'pointer' : 'not-allowed',
521
+ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '12px',
522
+ }, onMouseEnter: e => { if (generatedImageUrl)
523
+ e.currentTarget.style.backgroundColor = mergedTheme.primaryHoverColor || '#ff1600'; }, onMouseLeave: e => { if (generatedImageUrl)
524
+ e.currentTarget.style.backgroundColor = mergedTheme.primaryColor || '#FF5500'; } },
525
+ react_1.default.createElement("svg", { fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", style: { width: '24px', height: '24px' } },
526
+ react_1.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4" })),
527
+ mergedTexts.downloadButton))))));
528
+ }
529
+ function AvatarAIForYouCard({ title, description, ctaText, ctaHref, desktopImage, mobileImage, imageAlt = '', imageOnRight = true, titleColor = '#001B5E', descriptionColor = '#001B5E', ctaColor = '#FF5500', ctaHoverColor = '#ff1600', backgroundColor = '#F9F9F9', paddingClass = 'py-12 md:py-16 lg:py-20', }) {
530
+ const effectiveMobileImage = mobileImage || desktopImage;
531
+ const imageColumn = (react_1.default.createElement("div", { className: `${imageOnRight ? '' : 'order-2 md:order-1'} overflow-hidden` },
532
+ react_1.default.createElement("img", { src: desktopImage, alt: imageAlt, className: "hidden md:block w-full h-auto object-contain" }),
533
+ react_1.default.createElement("img", { src: effectiveMobileImage, alt: imageAlt, className: "block md:hidden w-full h-auto object-contain" })));
534
+ const contentColumn = (react_1.default.createElement("div", { className: `${imageOnRight ? '' : 'order-1 md:order-2'} text-center md:text-left` },
535
+ react_1.default.createElement("h3", { className: "text-2xl md:text-3xl font-bold mb-4 md:mb-6", style: { color: titleColor } }, title),
536
+ react_1.default.createElement("p", { className: "text-base md:text-lg mb-6 md:mb-8 leading-relaxed", style: { color: descriptionColor } }, description),
537
+ react_1.default.createElement("a", { href: ctaHref, className: "inline-block text-white font-bold text-lg px-8 py-4 rounded-full transition-colors duration-300 cursor-pointer", style: { backgroundColor: ctaColor }, onMouseEnter: (e) => { e.currentTarget.style.backgroundColor = ctaHoverColor; }, onMouseLeave: (e) => { e.currentTarget.style.backgroundColor = ctaColor; } }, ctaText)));
538
+ return (react_1.default.createElement("section", { className: "w-full", style: { backgroundColor } },
539
+ react_1.default.createElement("div", { className: `container mx-auto px-4 ${paddingClass}` },
540
+ react_1.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-8 md:gap-12 lg:gap-16 items-start" }, imageOnRight ? (react_1.default.createElement(react_1.default.Fragment, null,
541
+ contentColumn,
542
+ imageColumn)) : (react_1.default.createElement(react_1.default.Fragment, null,
543
+ imageColumn,
544
+ contentColumn))))));
545
+ }
546
+ function AvatarAIPage({ componentProps, heroDesktopImage, heroMobileImage, heroAlt = '', backgroundColor = '#F9F9F9', componentPaddingClass = 'py-8 md:py-12', }) {
547
+ const effectiveHeroMobile = heroMobileImage || heroDesktopImage;
548
+ return (react_1.default.createElement("div", { style: { backgroundColor } },
549
+ heroDesktopImage && (react_1.default.createElement("section", { style: { width: '100%' } },
550
+ react_1.default.createElement("img", { src: heroDesktopImage, alt: heroAlt, style: { width: '100%', height: 'auto' }, className: "hidden md:block" }),
551
+ react_1.default.createElement("img", { src: effectiveHeroMobile, alt: heroAlt, style: { width: '100%', height: 'auto' }, className: "block md:hidden" }))),
552
+ react_1.default.createElement("section", { className: `w-full ${componentPaddingClass}`, style: { backgroundColor } },
553
+ react_1.default.createElement(AvatarAI, Object.assign({}, componentProps)))));
554
+ }
555
+ exports.default = AvatarAI;
556
+ //# sourceMappingURL=AvatarAI.js.map