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.
@@ -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
- if (keys[1] !== undefined && typeof theme.components[keys[1]] == 'object' && theme.components[keys[1]][keys[2]] !== undefined) {
388
- return getColor(theme.components[keys[1]][keys[2]]);
389
- } else if (theme.main[keys[1]] && theme.main[keys[1]] !== undefined) {
390
- return getColor(theme.main[keys[1]]);
391
- } else {
392
- console.log('Color ' + name + ' not found');
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
- // Si le nom commence par "color.", nous recherchons dans la palette
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.log('Color ' + name + ' not found');
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
- return name;
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
- main: {
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 = applyStyle(nestedProps, getColor, mediaQueries, devices);
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], getColor, mediaQueries, devices);
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, getColor, mediaQueries, devices);
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, getColor, mediaQueries, devices);
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, getColor, mediaQueries, devices);
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