app-studio 0.2.4 → 0.2.8
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/dist/appstudio.cjs.development.js +90 -47
- package/dist/appstudio.cjs.development.js.map +1 -1
- package/dist/appstudio.cjs.production.min.js +1 -1
- package/dist/appstudio.cjs.production.min.js.map +1 -1
- package/dist/appstudio.esm.js +90 -47
- package/dist/appstudio.esm.js.map +1 -1
- package/dist/appstudio.umd.development.js +90 -47
- package/dist/appstudio.umd.development.js.map +1 -1
- package/dist/appstudio.umd.production.min.js +1 -1
- package/dist/appstudio.umd.production.min.js.map +1 -1
- package/dist/providers/Theme.d.ts +19 -50
- package/package.json +1 -1
|
@@ -311,6 +311,7 @@ const palette = {
|
|
|
311
311
|
}
|
|
312
312
|
};
|
|
313
313
|
|
|
314
|
+
// Configuration de thème par défaut
|
|
314
315
|
const defaultThemeMain = {
|
|
315
316
|
primary: 'color.black',
|
|
316
317
|
secondary: 'color.blue',
|
|
@@ -320,6 +321,7 @@ const defaultThemeMain = {
|
|
|
320
321
|
disabled: 'color.gray.500',
|
|
321
322
|
loading: 'color.dark.500'
|
|
322
323
|
};
|
|
324
|
+
// Configuration des couleurs par défaut
|
|
323
325
|
const defaultColors = {
|
|
324
326
|
white: '#FFFFFF',
|
|
325
327
|
black: '#000000',
|
|
@@ -352,10 +354,9 @@ const defaultColors = {
|
|
|
352
354
|
darkGreen: '#006400',
|
|
353
355
|
salmon: '#FA8072'
|
|
354
356
|
};
|
|
357
|
+
// Création du contexte de thème avec des valeurs par défaut
|
|
355
358
|
const ThemeContext = /*#__PURE__*/React.createContext({
|
|
356
|
-
getColor: name =>
|
|
357
|
-
return name;
|
|
358
|
-
},
|
|
359
|
+
getColor: name => name,
|
|
359
360
|
colors: {
|
|
360
361
|
main: defaultColors,
|
|
361
362
|
palette: palette
|
|
@@ -365,7 +366,35 @@ const ThemeContext = /*#__PURE__*/React.createContext({
|
|
|
365
366
|
components: {}
|
|
366
367
|
}
|
|
367
368
|
});
|
|
369
|
+
// Hook personnalisé pour utiliser le contexte de thème
|
|
368
370
|
const useTheme = () => React.useContext(ThemeContext);
|
|
371
|
+
// Fonction de fusion profonde simple
|
|
372
|
+
const deepMerge = (target, source) => {
|
|
373
|
+
if (typeof source !== 'object' || source === null) {
|
|
374
|
+
return target;
|
|
375
|
+
}
|
|
376
|
+
const merged = {
|
|
377
|
+
...target
|
|
378
|
+
};
|
|
379
|
+
for (const key in source) {
|
|
380
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
381
|
+
const sourceValue = source[key];
|
|
382
|
+
const targetValue = target[key];
|
|
383
|
+
if (Array.isArray(sourceValue)) {
|
|
384
|
+
// Remplacer les tableaux
|
|
385
|
+
merged[key] = sourceValue;
|
|
386
|
+
} else if (typeof sourceValue === 'object' && sourceValue !== null && !Array.isArray(sourceValue)) {
|
|
387
|
+
// Fusion récursive des objets
|
|
388
|
+
merged[key] = deepMerge(targetValue || {}, sourceValue);
|
|
389
|
+
} else {
|
|
390
|
+
// Remplacer les autres types de valeurs
|
|
391
|
+
merged[key] = sourceValue;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
return merged;
|
|
396
|
+
};
|
|
397
|
+
// Composant ThemeProvider
|
|
369
398
|
const ThemeProvider = _ref => {
|
|
370
399
|
let {
|
|
371
400
|
theme = {
|
|
@@ -378,58 +407,69 @@ const ThemeProvider = _ref => {
|
|
|
378
407
|
},
|
|
379
408
|
children
|
|
380
409
|
} = _ref;
|
|
410
|
+
// Fusion profonde des thèmes par défaut avec ceux fournis
|
|
411
|
+
const mergedTheme = deepMerge(defaultThemeMain, theme);
|
|
412
|
+
// Fusion profonde des couleurs par défaut avec celles fournies
|
|
413
|
+
const mergedColors = deepMerge({
|
|
414
|
+
main: defaultColors,
|
|
415
|
+
palette: palette
|
|
416
|
+
}, colors);
|
|
417
|
+
/**
|
|
418
|
+
* Fonction pour récupérer une couleur basée sur un chemin en chaîne.
|
|
419
|
+
* Supporte les références imbriquées comme 'theme.button.primary.background'.
|
|
420
|
+
* @param name - Le nom de la couleur à récupérer.
|
|
421
|
+
* @returns La valeur de couleur résolue ou le nom original si non trouvé.
|
|
422
|
+
*/
|
|
423
|
+
console.log({
|
|
424
|
+
mergedTheme
|
|
425
|
+
});
|
|
381
426
|
const getColor = name => {
|
|
382
427
|
if (name === 'transparent') return name;
|
|
383
428
|
try {
|
|
384
|
-
// Si le nom commence par "theme.", nous recherchons dans les couleurs du thème
|
|
385
429
|
if (name.startsWith('theme.')) {
|
|
386
430
|
const keys = name.split('.');
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
431
|
+
let value = mergedTheme;
|
|
432
|
+
for (let i = 1; i < keys.length; i++) {
|
|
433
|
+
value = value[keys[i]];
|
|
434
|
+
if (value === undefined) {
|
|
435
|
+
console.warn(`Couleur "${name}" non trouvée dans le thème.`);
|
|
436
|
+
return name;
|
|
437
|
+
}
|
|
393
438
|
}
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
else if (name.startsWith('color.')) {
|
|
397
|
-
const keys = name.split('.'); // Retirer le préfixe "color."
|
|
398
|
-
if (colors.palette && colors.palette[keys[1]][keys[2]] !== undefined) {
|
|
399
|
-
return colors.palette[keys[1]][keys[2]];
|
|
400
|
-
} else if (colors.palette && colors.palette[keys[1]][parseInt(keys[2])] !== undefined) {
|
|
401
|
-
return colors.palette[keys[1]][parseInt(keys[2])];
|
|
402
|
-
} else if (colors.main && colors.main[keys[1]] !== undefined) {
|
|
403
|
-
return colors.main[keys[1]];
|
|
439
|
+
if (typeof value === 'string') {
|
|
440
|
+
return getColor(value); // Résoudre les références imbriquées
|
|
404
441
|
} else {
|
|
405
|
-
console.
|
|
442
|
+
console.warn(`La couleur "${name}" a résolu à une valeur non-string.`);
|
|
443
|
+
return name;
|
|
444
|
+
}
|
|
445
|
+
} else if (name.startsWith('color.')) {
|
|
446
|
+
const keys = name.split('.');
|
|
447
|
+
if (keys.length === 2) {
|
|
448
|
+
// Exemple : "color.white"
|
|
449
|
+
const colorName = keys[1];
|
|
450
|
+
return mergedColors.main[colorName] || name;
|
|
451
|
+
} else if (keys.length === 3) {
|
|
452
|
+
// Exemple : "color.palette.primary.500"
|
|
453
|
+
const [_, paletteName, variant] = keys;
|
|
454
|
+
if (mergedColors.palette[paletteName] && mergedColors.palette[paletteName][variant]) {
|
|
455
|
+
return mergedColors.palette[paletteName][variant];
|
|
456
|
+
} else {
|
|
457
|
+
console.warn(`Color ${_} non trouvée`);
|
|
458
|
+
}
|
|
406
459
|
}
|
|
460
|
+
console.warn(`Color "${name}" non trouvée dans la palette ou les couleurs principales.`);
|
|
407
461
|
}
|
|
408
|
-
} catch (e) {
|
|
409
|
-
|
|
462
|
+
} catch (e) {
|
|
463
|
+
console.error('Erreur lors de la récupération de la couleur:', e);
|
|
464
|
+
}
|
|
465
|
+
return name; // Retourner le nom original si non trouvé
|
|
410
466
|
};
|
|
467
|
+
|
|
411
468
|
return /*#__PURE__*/React__default.createElement(ThemeContext.Provider, {
|
|
412
469
|
value: {
|
|
413
470
|
getColor,
|
|
414
|
-
theme:
|
|
415
|
-
|
|
416
|
-
...defaultThemeMain,
|
|
417
|
-
...theme.main
|
|
418
|
-
},
|
|
419
|
-
components: {
|
|
420
|
-
...theme.components
|
|
421
|
-
}
|
|
422
|
-
},
|
|
423
|
-
colors: {
|
|
424
|
-
main: {
|
|
425
|
-
...defaultColors,
|
|
426
|
-
...colors.main
|
|
427
|
-
},
|
|
428
|
-
palette: {
|
|
429
|
-
...palette,
|
|
430
|
-
...colors.palette
|
|
431
|
-
}
|
|
432
|
-
}
|
|
471
|
+
theme: mergedTheme,
|
|
472
|
+
colors: mergedColors
|
|
433
473
|
}
|
|
434
474
|
}, children);
|
|
435
475
|
};
|
|
@@ -838,7 +878,7 @@ const computeStyleProps = (props, getColor, mediaQueries, devices) => {
|
|
|
838
878
|
media,
|
|
839
879
|
...nestedProps
|
|
840
880
|
} = value;
|
|
841
|
-
const nestedResult =
|
|
881
|
+
const nestedResult = computeStyleProps(nestedProps);
|
|
842
882
|
styleProps[property] = nestedResult.styleProps;
|
|
843
883
|
keyframesList.push(...(nestedResult.keyframes || []));
|
|
844
884
|
} else {
|
|
@@ -935,7 +975,7 @@ maxDepth // Set a maximum depth
|
|
|
935
975
|
if (!styleProps[`&:${event}`]) {
|
|
936
976
|
styleProps[`&:${event}`] = {};
|
|
937
977
|
}
|
|
938
|
-
const nestedResult = computeStyleProps(value[event]
|
|
978
|
+
const nestedResult = computeStyleProps(value[event]);
|
|
939
979
|
Object.assign(styleProps[`&:${event}`], nestedResult.styleProps);
|
|
940
980
|
keyframesList.push(...(nestedResult.keyframes || []));
|
|
941
981
|
}
|
|
@@ -947,7 +987,7 @@ maxDepth // Set a maximum depth
|
|
|
947
987
|
if (!styleProps[mediaQuery]) {
|
|
948
988
|
styleProps[mediaQuery] = {};
|
|
949
989
|
}
|
|
950
|
-
const nestedResult = computeStyleProps(mediaValue
|
|
990
|
+
const nestedResult = computeStyleProps(mediaValue);
|
|
951
991
|
Object.assign(styleProps[mediaQuery], nestedResult.styleProps);
|
|
952
992
|
keyframesList.push(...(nestedResult.keyframes || []));
|
|
953
993
|
} else if (devices[screenOrDevices]) {
|
|
@@ -958,7 +998,7 @@ maxDepth // Set a maximum depth
|
|
|
958
998
|
if (!styleProps[mediaQuery]) {
|
|
959
999
|
styleProps[mediaQuery] = {};
|
|
960
1000
|
}
|
|
961
|
-
const nestedResult = computeStyleProps(mediaValue
|
|
1001
|
+
const nestedResult = computeStyleProps(mediaValue);
|
|
962
1002
|
Object.assign(styleProps[mediaQuery], nestedResult.styleProps);
|
|
963
1003
|
keyframesList.push(...(nestedResult.keyframes || []));
|
|
964
1004
|
}
|
|
@@ -973,7 +1013,7 @@ maxDepth // Set a maximum depth
|
|
|
973
1013
|
media,
|
|
974
1014
|
...nestedProps
|
|
975
1015
|
} = value;
|
|
976
|
-
const nestedResult = computeStyleProps(nestedProps
|
|
1016
|
+
const nestedResult = computeStyleProps(nestedProps);
|
|
977
1017
|
styleProps[property] = nestedResult.styleProps;
|
|
978
1018
|
keyframesList.push(...(nestedResult.keyframes || []));
|
|
979
1019
|
}
|
|
@@ -983,6 +1023,9 @@ maxDepth // Set a maximum depth
|
|
|
983
1023
|
}
|
|
984
1024
|
}
|
|
985
1025
|
});
|
|
1026
|
+
console.log({
|
|
1027
|
+
styleProps
|
|
1028
|
+
});
|
|
986
1029
|
return {
|
|
987
1030
|
styleProps,
|
|
988
1031
|
keyframes: keyframesList
|