@nocios/crudify-ui 4.0.1 → 4.0.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/dist/index.d.mts CHANGED
@@ -3,6 +3,7 @@ export * from '@nocios/crudify-browser';
3
3
  export { default as crudify } from '@nocios/crudify-browser';
4
4
  import React, { ReactNode } from 'react';
5
5
  import * as react_jsx_runtime from 'react/jsx-runtime';
6
+ import { Theme } from '@mui/material/styles';
6
7
 
7
8
  type BoxScreenType = "login" | "signUp" | "forgotPassword" | "resetPassword" | "checkCode";
8
9
  interface CrudifyLoginConfig {
@@ -812,4 +813,78 @@ declare const useCrudifyWithNotifications: (options?: CrudifyWithNotificationsOp
812
813
  shouldShowNotification: (response: CrudifyResponse) => boolean;
813
814
  };
814
815
 
815
- export { type ApiError, type BoxScreenType, type CrudifyApiResponse, CrudifyLogin, type CrudifyLoginConfig, type CrudifyLoginProps, type CrudifyLoginTranslations, type CrudifyTransactionResponse, ERROR_CODES, ERROR_SEVERITY_MAP, type ErrorCode, type ErrorSeverity, type ErrorTranslationConfig, type ForgotPasswordRequest, GlobalNotificationProvider, type GlobalNotificationProviderProps, type JwtPayload, LoginComponent, type LoginRequest, type LoginResponse, type LoginResult, type Notification, type NotificationOptions, type NotificationSeverity, POLICY_ACTIONS, PREFERRED_POLICY_ORDER, type ParsedError, Policies, type PolicyAction, ProtectedRoute, type ProtectedRouteProps, type ResetPasswordRequest, type SessionConfig, SessionDebugInfo, SessionManager, SessionProvider, type SessionProviderProps, type SessionState, SessionStatus, type StorageType, type TokenData, TokenStorage, type TransactionResponseData, type UseAuthReturn, type UseDataReturn, type UseSessionOptions, type UseUserDataOptions, type UseUserDataReturn, type UserData, type UserLoginData, type UserProfile, UserProfileDisplay, type ValidateCodeRequest, type ValidationError, createErrorTranslator, decodeJwtSafely, getCookie, getCurrentUserEmail, getErrorMessage, handleCrudifyError, isTokenExpired, parseApiError, parseJavaScriptError, parseTransactionError, secureLocalStorage, secureSessionStorage, translateError, translateErrorCode, translateErrorCodes, useAuth, useCrudifyWithNotifications, useData, useGlobalNotification, useSession, useSessionContext, useUserData, useUserProfile };
816
+ interface CrudifyThemeColors {
817
+ primary: {
818
+ main: string;
819
+ light: string;
820
+ dark: string;
821
+ contrastText: string;
822
+ };
823
+ secondary: {
824
+ main: string;
825
+ light: string;
826
+ dark: string;
827
+ contrastText: string;
828
+ };
829
+ background: {
830
+ default: string;
831
+ paper: string;
832
+ light: string;
833
+ };
834
+ button: {
835
+ primary: {
836
+ background: string;
837
+ backgroundHover: string;
838
+ border: string;
839
+ borderHover: string;
840
+ text: string;
841
+ textHover: string;
842
+ };
843
+ secondary: {
844
+ background: string;
845
+ backgroundHover: string;
846
+ border: string;
847
+ borderHover: string;
848
+ text: string;
849
+ textHover: string;
850
+ };
851
+ };
852
+ input: {
853
+ background: string;
854
+ border: string;
855
+ borderFocus: string;
856
+ text: string;
857
+ placeholder: string;
858
+ };
859
+ text: {
860
+ primary: string;
861
+ secondary: string;
862
+ disabled: string;
863
+ };
864
+ divider: string;
865
+ error: {
866
+ main: string;
867
+ light: string;
868
+ dark: string;
869
+ };
870
+ warning: {
871
+ main: string;
872
+ light: string;
873
+ dark: string;
874
+ };
875
+ success: {
876
+ main: string;
877
+ light: string;
878
+ dark: string;
879
+ };
880
+ info: {
881
+ main: string;
882
+ light: string;
883
+ dark: string;
884
+ };
885
+ }
886
+ declare const defaultCrudifyColors: CrudifyThemeColors;
887
+ declare const createCrudifyTheme: (colors?: Partial<CrudifyThemeColors>) => Theme;
888
+ declare const getCrudifyThemeFromCookies: () => Theme;
889
+
890
+ export { type ApiError, type BoxScreenType, type CrudifyApiResponse, CrudifyLogin, type CrudifyLoginConfig, type CrudifyLoginProps, type CrudifyLoginTranslations, type CrudifyThemeColors, type CrudifyTransactionResponse, ERROR_CODES, ERROR_SEVERITY_MAP, type ErrorCode, type ErrorSeverity, type ErrorTranslationConfig, type ForgotPasswordRequest, GlobalNotificationProvider, type GlobalNotificationProviderProps, type JwtPayload, LoginComponent, type LoginRequest, type LoginResponse, type LoginResult, type Notification, type NotificationOptions, type NotificationSeverity, POLICY_ACTIONS, PREFERRED_POLICY_ORDER, type ParsedError, Policies, type PolicyAction, ProtectedRoute, type ProtectedRouteProps, type ResetPasswordRequest, type SessionConfig, SessionDebugInfo, SessionManager, SessionProvider, type SessionProviderProps, type SessionState, SessionStatus, type StorageType, type TokenData, TokenStorage, type TransactionResponseData, type UseAuthReturn, type UseDataReturn, type UseSessionOptions, type UseUserDataOptions, type UseUserDataReturn, type UserData, type UserLoginData, type UserProfile, UserProfileDisplay, type ValidateCodeRequest, type ValidationError, createCrudifyTheme, createErrorTranslator, decodeJwtSafely, defaultCrudifyColors, getCookie, getCrudifyThemeFromCookies, getCurrentUserEmail, getErrorMessage, handleCrudifyError, isTokenExpired, parseApiError, parseJavaScriptError, parseTransactionError, secureLocalStorage, secureSessionStorage, translateError, translateErrorCode, translateErrorCodes, useAuth, useCrudifyWithNotifications, useData, useGlobalNotification, useSession, useSessionContext, useUserData, useUserProfile };
package/dist/index.d.ts CHANGED
@@ -3,6 +3,7 @@ export * from '@nocios/crudify-browser';
3
3
  export { default as crudify } from '@nocios/crudify-browser';
4
4
  import React, { ReactNode } from 'react';
5
5
  import * as react_jsx_runtime from 'react/jsx-runtime';
6
+ import { Theme } from '@mui/material/styles';
6
7
 
7
8
  type BoxScreenType = "login" | "signUp" | "forgotPassword" | "resetPassword" | "checkCode";
8
9
  interface CrudifyLoginConfig {
@@ -812,4 +813,78 @@ declare const useCrudifyWithNotifications: (options?: CrudifyWithNotificationsOp
812
813
  shouldShowNotification: (response: CrudifyResponse) => boolean;
813
814
  };
814
815
 
815
- export { type ApiError, type BoxScreenType, type CrudifyApiResponse, CrudifyLogin, type CrudifyLoginConfig, type CrudifyLoginProps, type CrudifyLoginTranslations, type CrudifyTransactionResponse, ERROR_CODES, ERROR_SEVERITY_MAP, type ErrorCode, type ErrorSeverity, type ErrorTranslationConfig, type ForgotPasswordRequest, GlobalNotificationProvider, type GlobalNotificationProviderProps, type JwtPayload, LoginComponent, type LoginRequest, type LoginResponse, type LoginResult, type Notification, type NotificationOptions, type NotificationSeverity, POLICY_ACTIONS, PREFERRED_POLICY_ORDER, type ParsedError, Policies, type PolicyAction, ProtectedRoute, type ProtectedRouteProps, type ResetPasswordRequest, type SessionConfig, SessionDebugInfo, SessionManager, SessionProvider, type SessionProviderProps, type SessionState, SessionStatus, type StorageType, type TokenData, TokenStorage, type TransactionResponseData, type UseAuthReturn, type UseDataReturn, type UseSessionOptions, type UseUserDataOptions, type UseUserDataReturn, type UserData, type UserLoginData, type UserProfile, UserProfileDisplay, type ValidateCodeRequest, type ValidationError, createErrorTranslator, decodeJwtSafely, getCookie, getCurrentUserEmail, getErrorMessage, handleCrudifyError, isTokenExpired, parseApiError, parseJavaScriptError, parseTransactionError, secureLocalStorage, secureSessionStorage, translateError, translateErrorCode, translateErrorCodes, useAuth, useCrudifyWithNotifications, useData, useGlobalNotification, useSession, useSessionContext, useUserData, useUserProfile };
816
+ interface CrudifyThemeColors {
817
+ primary: {
818
+ main: string;
819
+ light: string;
820
+ dark: string;
821
+ contrastText: string;
822
+ };
823
+ secondary: {
824
+ main: string;
825
+ light: string;
826
+ dark: string;
827
+ contrastText: string;
828
+ };
829
+ background: {
830
+ default: string;
831
+ paper: string;
832
+ light: string;
833
+ };
834
+ button: {
835
+ primary: {
836
+ background: string;
837
+ backgroundHover: string;
838
+ border: string;
839
+ borderHover: string;
840
+ text: string;
841
+ textHover: string;
842
+ };
843
+ secondary: {
844
+ background: string;
845
+ backgroundHover: string;
846
+ border: string;
847
+ borderHover: string;
848
+ text: string;
849
+ textHover: string;
850
+ };
851
+ };
852
+ input: {
853
+ background: string;
854
+ border: string;
855
+ borderFocus: string;
856
+ text: string;
857
+ placeholder: string;
858
+ };
859
+ text: {
860
+ primary: string;
861
+ secondary: string;
862
+ disabled: string;
863
+ };
864
+ divider: string;
865
+ error: {
866
+ main: string;
867
+ light: string;
868
+ dark: string;
869
+ };
870
+ warning: {
871
+ main: string;
872
+ light: string;
873
+ dark: string;
874
+ };
875
+ success: {
876
+ main: string;
877
+ light: string;
878
+ dark: string;
879
+ };
880
+ info: {
881
+ main: string;
882
+ light: string;
883
+ dark: string;
884
+ };
885
+ }
886
+ declare const defaultCrudifyColors: CrudifyThemeColors;
887
+ declare const createCrudifyTheme: (colors?: Partial<CrudifyThemeColors>) => Theme;
888
+ declare const getCrudifyThemeFromCookies: () => Theme;
889
+
890
+ export { type ApiError, type BoxScreenType, type CrudifyApiResponse, CrudifyLogin, type CrudifyLoginConfig, type CrudifyLoginProps, type CrudifyLoginTranslations, type CrudifyThemeColors, type CrudifyTransactionResponse, ERROR_CODES, ERROR_SEVERITY_MAP, type ErrorCode, type ErrorSeverity, type ErrorTranslationConfig, type ForgotPasswordRequest, GlobalNotificationProvider, type GlobalNotificationProviderProps, type JwtPayload, LoginComponent, type LoginRequest, type LoginResponse, type LoginResult, type Notification, type NotificationOptions, type NotificationSeverity, POLICY_ACTIONS, PREFERRED_POLICY_ORDER, type ParsedError, Policies, type PolicyAction, ProtectedRoute, type ProtectedRouteProps, type ResetPasswordRequest, type SessionConfig, SessionDebugInfo, SessionManager, SessionProvider, type SessionProviderProps, type SessionState, SessionStatus, type StorageType, type TokenData, TokenStorage, type TransactionResponseData, type UseAuthReturn, type UseDataReturn, type UseSessionOptions, type UseUserDataOptions, type UseUserDataReturn, type UserData, type UserLoginData, type UserProfile, UserProfileDisplay, type ValidateCodeRequest, type ValidationError, createCrudifyTheme, createErrorTranslator, decodeJwtSafely, defaultCrudifyColors, getCookie, getCrudifyThemeFromCookies, getCurrentUserEmail, getErrorMessage, handleCrudifyError, isTokenExpired, parseApiError, parseJavaScriptError, parseTransactionError, secureLocalStorage, secureSessionStorage, translateError, translateErrorCode, translateErrorCodes, useAuth, useCrudifyWithNotifications, useData, useGlobalNotification, useSession, useSessionContext, useUserData, useUserProfile };
package/dist/index.js CHANGED
@@ -46,10 +46,13 @@ __export(index_exports, {
46
46
  SessionStatus: () => SessionStatus,
47
47
  TokenStorage: () => TokenStorage,
48
48
  UserProfileDisplay: () => UserProfileDisplay_default,
49
+ createCrudifyTheme: () => createCrudifyTheme,
49
50
  createErrorTranslator: () => createErrorTranslator,
50
51
  crudify: () => import_crudify_browser7.default,
51
52
  decodeJwtSafely: () => decodeJwtSafely,
53
+ defaultCrudifyColors: () => defaultCrudifyColors,
52
54
  getCookie: () => getCookie,
55
+ getCrudifyThemeFromCookies: () => getCrudifyThemeFromCookies,
53
56
  getCurrentUserEmail: () => getCurrentUserEmail,
54
57
  getErrorMessage: () => getErrorMessage,
55
58
  handleCrudifyError: () => handleCrudifyError,
@@ -2932,6 +2935,226 @@ var CrudifyInitializer = ({ children, fallback }) => {
2932
2935
  return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_jsx_runtime10.Fragment, { children });
2933
2936
  };
2934
2937
 
2938
+ // src/core/theme.ts
2939
+ var import_styles = require("@mui/material/styles");
2940
+ var defaultCrudifyColors = {
2941
+ primary: {
2942
+ main: "#c2d66c",
2943
+ light: "#d4e289",
2944
+ dark: "#a8c248",
2945
+ contrastText: "#1a1a1a"
2946
+ },
2947
+ secondary: {
2948
+ main: "#6cc2d6",
2949
+ light: "#89d4e2",
2950
+ dark: "#48a8c2",
2951
+ contrastText: "#ffffff"
2952
+ },
2953
+ background: {
2954
+ default: "#f8faf4",
2955
+ paper: "#ffffff",
2956
+ light: "#e8f0d8"
2957
+ },
2958
+ button: {
2959
+ primary: {
2960
+ background: "#c2d66c",
2961
+ backgroundHover: "#a8c248",
2962
+ border: "#a8c248",
2963
+ borderHover: "#8fb03d",
2964
+ text: "#1a1a1a",
2965
+ textHover: "#1a1a1a"
2966
+ },
2967
+ secondary: {
2968
+ background: "transparent",
2969
+ backgroundHover: "#f8faf4",
2970
+ border: "#c2d66c",
2971
+ borderHover: "#a8c248",
2972
+ text: "#c2d66c",
2973
+ textHover: "#a8c248"
2974
+ }
2975
+ },
2976
+ input: {
2977
+ background: "#ffffff",
2978
+ border: "#d1d5db",
2979
+ borderFocus: "#c2d66c",
2980
+ text: "#1a1a1a",
2981
+ placeholder: "#6b7280"
2982
+ },
2983
+ text: {
2984
+ primary: "#1a1a1a",
2985
+ secondary: "#4b5563",
2986
+ disabled: "#9ca3af"
2987
+ },
2988
+ divider: "#e5e7eb",
2989
+ error: {
2990
+ main: "#ef4444",
2991
+ light: "#f87171",
2992
+ dark: "#dc2626"
2993
+ },
2994
+ warning: {
2995
+ main: "#f59e0b",
2996
+ light: "#fbbf24",
2997
+ dark: "#d97706"
2998
+ },
2999
+ success: {
3000
+ main: "#10b981",
3001
+ light: "#34d399",
3002
+ dark: "#059669"
3003
+ },
3004
+ info: {
3005
+ main: "#3b82f6",
3006
+ light: "#60a5fa",
3007
+ dark: "#2563eb"
3008
+ }
3009
+ };
3010
+ var createCrudifyTheme = (colors = {}) => {
3011
+ const themeColors = { ...defaultCrudifyColors, ...colors };
3012
+ return (0, import_styles.createTheme)({
3013
+ palette: {
3014
+ primary: {
3015
+ main: themeColors.primary.main,
3016
+ light: themeColors.primary.light,
3017
+ dark: themeColors.primary.dark,
3018
+ contrastText: themeColors.primary.contrastText
3019
+ },
3020
+ secondary: {
3021
+ main: themeColors.secondary.main,
3022
+ light: themeColors.secondary.light,
3023
+ dark: themeColors.secondary.dark,
3024
+ contrastText: themeColors.secondary.contrastText
3025
+ },
3026
+ background: {
3027
+ default: themeColors.background.default,
3028
+ paper: themeColors.background.paper
3029
+ },
3030
+ text: {
3031
+ primary: themeColors.text.primary,
3032
+ secondary: themeColors.text.secondary,
3033
+ disabled: themeColors.text.disabled
3034
+ },
3035
+ divider: themeColors.divider,
3036
+ error: {
3037
+ main: themeColors.error.main,
3038
+ light: themeColors.error.light,
3039
+ dark: themeColors.error.dark
3040
+ },
3041
+ warning: {
3042
+ main: themeColors.warning.main,
3043
+ light: themeColors.warning.light,
3044
+ dark: themeColors.warning.dark
3045
+ },
3046
+ success: {
3047
+ main: themeColors.success.main,
3048
+ light: themeColors.success.light,
3049
+ dark: themeColors.success.dark
3050
+ },
3051
+ info: {
3052
+ main: themeColors.info.main,
3053
+ light: themeColors.info.light,
3054
+ dark: themeColors.info.dark
3055
+ }
3056
+ },
3057
+ components: {
3058
+ MuiButton: {
3059
+ styleOverrides: {
3060
+ contained: {
3061
+ backgroundColor: themeColors.button.primary.background,
3062
+ color: themeColors.button.primary.text,
3063
+ border: `1px solid ${themeColors.button.primary.border}`,
3064
+ "&:hover": {
3065
+ backgroundColor: themeColors.button.primary.backgroundHover,
3066
+ borderColor: themeColors.button.primary.borderHover,
3067
+ color: themeColors.button.primary.textHover
3068
+ }
3069
+ },
3070
+ outlined: {
3071
+ backgroundColor: themeColors.button.secondary.background,
3072
+ color: themeColors.button.secondary.text,
3073
+ border: `1px solid ${themeColors.button.secondary.border}`,
3074
+ "&:hover": {
3075
+ backgroundColor: themeColors.button.secondary.backgroundHover,
3076
+ borderColor: themeColors.button.secondary.borderHover,
3077
+ color: themeColors.button.secondary.textHover
3078
+ }
3079
+ }
3080
+ }
3081
+ },
3082
+ MuiTextField: {
3083
+ styleOverrides: {
3084
+ root: {
3085
+ "& .MuiOutlinedInput-root": {
3086
+ backgroundColor: themeColors.input.background,
3087
+ "& fieldset": {
3088
+ borderColor: themeColors.input.border
3089
+ },
3090
+ "&:hover fieldset": {
3091
+ borderColor: themeColors.input.borderFocus
3092
+ },
3093
+ "&.Mui-focused fieldset": {
3094
+ borderColor: themeColors.input.borderFocus
3095
+ },
3096
+ "& input": {
3097
+ color: themeColors.input.text
3098
+ },
3099
+ "& input::placeholder": {
3100
+ color: themeColors.input.placeholder,
3101
+ opacity: 1
3102
+ }
3103
+ }
3104
+ }
3105
+ }
3106
+ },
3107
+ MuiInputBase: {
3108
+ styleOverrides: {
3109
+ input: {
3110
+ "&::placeholder": {
3111
+ color: themeColors.input.placeholder,
3112
+ opacity: 1
3113
+ }
3114
+ }
3115
+ }
3116
+ },
3117
+ MuiTypography: {
3118
+ styleOverrides: {
3119
+ h6: {
3120
+ color: themeColors.text.primary
3121
+ }
3122
+ }
3123
+ }
3124
+ },
3125
+ typography: {
3126
+ fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif'
3127
+ }
3128
+ });
3129
+ };
3130
+ var getCrudifyThemeFromCookies = () => {
3131
+ let themeColors = {};
3132
+ if (typeof document !== "undefined") {
3133
+ try {
3134
+ const colorsCookie = document.cookie.split("; ").find((row) => row.startsWith("colors="));
3135
+ if (colorsCookie) {
3136
+ const decodedColors = decodeURIComponent(colorsCookie.split("=")[1]);
3137
+ const parsedColors = JSON.parse(decodedColors);
3138
+ if (parsedColors.primaryColor) {
3139
+ themeColors.primary = {
3140
+ ...defaultCrudifyColors.primary,
3141
+ main: parsedColors.primaryColor
3142
+ };
3143
+ }
3144
+ if (parsedColors.bgColor) {
3145
+ themeColors.background = {
3146
+ ...defaultCrudifyColors.background,
3147
+ default: parsedColors.bgColor
3148
+ };
3149
+ }
3150
+ }
3151
+ } catch (error) {
3152
+ console.error("Error parsing colors from cookie:", error);
3153
+ }
3154
+ }
3155
+ return createCrudifyTheme(themeColors);
3156
+ };
3157
+
2935
3158
  // src/components/CrudifyLogin/index.tsx
2936
3159
  var import_jsx_runtime11 = require("react/jsx-runtime");
2937
3160
  var CrudifyLoginInternal = ({
@@ -3008,8 +3231,7 @@ var CrudifyLoginInternal = ({
3008
3231
  component: "h1",
3009
3232
  sx: {
3010
3233
  textAlign: "center",
3011
- mb: 2,
3012
- color: config.colors?.primaryColor || "#1066BA"
3234
+ mb: 2
3013
3235
  },
3014
3236
  children: config.appName
3015
3237
  }
@@ -3026,7 +3248,8 @@ var CrudifyLogin = ({
3026
3248
  ...props
3027
3249
  }) => {
3028
3250
  const { config } = useSessionContext();
3029
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(I18nProvider, { translations, translationsUrl, language, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(CrudifyProvider, { config, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(LoginStateProvider, { config, initialScreen, autoReadFromCookies, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(CrudifyLoginInternal, { ...props }) }) }) });
3251
+ const theme = getCrudifyThemeFromCookies();
3252
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_material7.ThemeProvider, { theme, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(I18nProvider, { translations, translationsUrl, language, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(CrudifyProvider, { config, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(LoginStateProvider, { config, initialScreen, autoReadFromCookies, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(CrudifyLoginInternal, { ...props }) }) }) }) });
3030
3253
  };
3031
3254
  var CrudifyLogin_default = CrudifyLogin;
3032
3255
 
@@ -4919,10 +5142,13 @@ var useCrudifyWithNotifications = (options = {}) => {
4919
5142
  SessionStatus,
4920
5143
  TokenStorage,
4921
5144
  UserProfileDisplay,
5145
+ createCrudifyTheme,
4922
5146
  createErrorTranslator,
4923
5147
  crudify,
4924
5148
  decodeJwtSafely,
5149
+ defaultCrudifyColors,
4925
5150
  getCookie,
5151
+ getCrudifyThemeFromCookies,
4926
5152
  getCurrentUserEmail,
4927
5153
  getErrorMessage,
4928
5154
  handleCrudifyError,
package/dist/index.mjs CHANGED
@@ -3,7 +3,7 @@ import { default as default2 } from "@nocios/crudify-browser";
3
3
  export * from "@nocios/crudify-browser";
4
4
 
5
5
  // src/components/CrudifyLogin/index.tsx
6
- import { Box as Box7, Typography as Typography6 } from "@mui/material";
6
+ import { Box as Box7, Typography as Typography6, ThemeProvider } from "@mui/material";
7
7
 
8
8
  // src/components/CrudifyLogin/context/I18nProvider.tsx
9
9
  import { createContext, useContext, useMemo } from "react";
@@ -2859,6 +2859,226 @@ var CrudifyInitializer = ({ children, fallback }) => {
2859
2859
  return /* @__PURE__ */ jsx10(Fragment6, { children });
2860
2860
  };
2861
2861
 
2862
+ // src/core/theme.ts
2863
+ import { createTheme } from "@mui/material/styles";
2864
+ var defaultCrudifyColors = {
2865
+ primary: {
2866
+ main: "#c2d66c",
2867
+ light: "#d4e289",
2868
+ dark: "#a8c248",
2869
+ contrastText: "#1a1a1a"
2870
+ },
2871
+ secondary: {
2872
+ main: "#6cc2d6",
2873
+ light: "#89d4e2",
2874
+ dark: "#48a8c2",
2875
+ contrastText: "#ffffff"
2876
+ },
2877
+ background: {
2878
+ default: "#f8faf4",
2879
+ paper: "#ffffff",
2880
+ light: "#e8f0d8"
2881
+ },
2882
+ button: {
2883
+ primary: {
2884
+ background: "#c2d66c",
2885
+ backgroundHover: "#a8c248",
2886
+ border: "#a8c248",
2887
+ borderHover: "#8fb03d",
2888
+ text: "#1a1a1a",
2889
+ textHover: "#1a1a1a"
2890
+ },
2891
+ secondary: {
2892
+ background: "transparent",
2893
+ backgroundHover: "#f8faf4",
2894
+ border: "#c2d66c",
2895
+ borderHover: "#a8c248",
2896
+ text: "#c2d66c",
2897
+ textHover: "#a8c248"
2898
+ }
2899
+ },
2900
+ input: {
2901
+ background: "#ffffff",
2902
+ border: "#d1d5db",
2903
+ borderFocus: "#c2d66c",
2904
+ text: "#1a1a1a",
2905
+ placeholder: "#6b7280"
2906
+ },
2907
+ text: {
2908
+ primary: "#1a1a1a",
2909
+ secondary: "#4b5563",
2910
+ disabled: "#9ca3af"
2911
+ },
2912
+ divider: "#e5e7eb",
2913
+ error: {
2914
+ main: "#ef4444",
2915
+ light: "#f87171",
2916
+ dark: "#dc2626"
2917
+ },
2918
+ warning: {
2919
+ main: "#f59e0b",
2920
+ light: "#fbbf24",
2921
+ dark: "#d97706"
2922
+ },
2923
+ success: {
2924
+ main: "#10b981",
2925
+ light: "#34d399",
2926
+ dark: "#059669"
2927
+ },
2928
+ info: {
2929
+ main: "#3b82f6",
2930
+ light: "#60a5fa",
2931
+ dark: "#2563eb"
2932
+ }
2933
+ };
2934
+ var createCrudifyTheme = (colors = {}) => {
2935
+ const themeColors = { ...defaultCrudifyColors, ...colors };
2936
+ return createTheme({
2937
+ palette: {
2938
+ primary: {
2939
+ main: themeColors.primary.main,
2940
+ light: themeColors.primary.light,
2941
+ dark: themeColors.primary.dark,
2942
+ contrastText: themeColors.primary.contrastText
2943
+ },
2944
+ secondary: {
2945
+ main: themeColors.secondary.main,
2946
+ light: themeColors.secondary.light,
2947
+ dark: themeColors.secondary.dark,
2948
+ contrastText: themeColors.secondary.contrastText
2949
+ },
2950
+ background: {
2951
+ default: themeColors.background.default,
2952
+ paper: themeColors.background.paper
2953
+ },
2954
+ text: {
2955
+ primary: themeColors.text.primary,
2956
+ secondary: themeColors.text.secondary,
2957
+ disabled: themeColors.text.disabled
2958
+ },
2959
+ divider: themeColors.divider,
2960
+ error: {
2961
+ main: themeColors.error.main,
2962
+ light: themeColors.error.light,
2963
+ dark: themeColors.error.dark
2964
+ },
2965
+ warning: {
2966
+ main: themeColors.warning.main,
2967
+ light: themeColors.warning.light,
2968
+ dark: themeColors.warning.dark
2969
+ },
2970
+ success: {
2971
+ main: themeColors.success.main,
2972
+ light: themeColors.success.light,
2973
+ dark: themeColors.success.dark
2974
+ },
2975
+ info: {
2976
+ main: themeColors.info.main,
2977
+ light: themeColors.info.light,
2978
+ dark: themeColors.info.dark
2979
+ }
2980
+ },
2981
+ components: {
2982
+ MuiButton: {
2983
+ styleOverrides: {
2984
+ contained: {
2985
+ backgroundColor: themeColors.button.primary.background,
2986
+ color: themeColors.button.primary.text,
2987
+ border: `1px solid ${themeColors.button.primary.border}`,
2988
+ "&:hover": {
2989
+ backgroundColor: themeColors.button.primary.backgroundHover,
2990
+ borderColor: themeColors.button.primary.borderHover,
2991
+ color: themeColors.button.primary.textHover
2992
+ }
2993
+ },
2994
+ outlined: {
2995
+ backgroundColor: themeColors.button.secondary.background,
2996
+ color: themeColors.button.secondary.text,
2997
+ border: `1px solid ${themeColors.button.secondary.border}`,
2998
+ "&:hover": {
2999
+ backgroundColor: themeColors.button.secondary.backgroundHover,
3000
+ borderColor: themeColors.button.secondary.borderHover,
3001
+ color: themeColors.button.secondary.textHover
3002
+ }
3003
+ }
3004
+ }
3005
+ },
3006
+ MuiTextField: {
3007
+ styleOverrides: {
3008
+ root: {
3009
+ "& .MuiOutlinedInput-root": {
3010
+ backgroundColor: themeColors.input.background,
3011
+ "& fieldset": {
3012
+ borderColor: themeColors.input.border
3013
+ },
3014
+ "&:hover fieldset": {
3015
+ borderColor: themeColors.input.borderFocus
3016
+ },
3017
+ "&.Mui-focused fieldset": {
3018
+ borderColor: themeColors.input.borderFocus
3019
+ },
3020
+ "& input": {
3021
+ color: themeColors.input.text
3022
+ },
3023
+ "& input::placeholder": {
3024
+ color: themeColors.input.placeholder,
3025
+ opacity: 1
3026
+ }
3027
+ }
3028
+ }
3029
+ }
3030
+ },
3031
+ MuiInputBase: {
3032
+ styleOverrides: {
3033
+ input: {
3034
+ "&::placeholder": {
3035
+ color: themeColors.input.placeholder,
3036
+ opacity: 1
3037
+ }
3038
+ }
3039
+ }
3040
+ },
3041
+ MuiTypography: {
3042
+ styleOverrides: {
3043
+ h6: {
3044
+ color: themeColors.text.primary
3045
+ }
3046
+ }
3047
+ }
3048
+ },
3049
+ typography: {
3050
+ fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif'
3051
+ }
3052
+ });
3053
+ };
3054
+ var getCrudifyThemeFromCookies = () => {
3055
+ let themeColors = {};
3056
+ if (typeof document !== "undefined") {
3057
+ try {
3058
+ const colorsCookie = document.cookie.split("; ").find((row) => row.startsWith("colors="));
3059
+ if (colorsCookie) {
3060
+ const decodedColors = decodeURIComponent(colorsCookie.split("=")[1]);
3061
+ const parsedColors = JSON.parse(decodedColors);
3062
+ if (parsedColors.primaryColor) {
3063
+ themeColors.primary = {
3064
+ ...defaultCrudifyColors.primary,
3065
+ main: parsedColors.primaryColor
3066
+ };
3067
+ }
3068
+ if (parsedColors.bgColor) {
3069
+ themeColors.background = {
3070
+ ...defaultCrudifyColors.background,
3071
+ default: parsedColors.bgColor
3072
+ };
3073
+ }
3074
+ }
3075
+ } catch (error) {
3076
+ console.error("Error parsing colors from cookie:", error);
3077
+ }
3078
+ }
3079
+ return createCrudifyTheme(themeColors);
3080
+ };
3081
+
2862
3082
  // src/components/CrudifyLogin/index.tsx
2863
3083
  import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
2864
3084
  var CrudifyLoginInternal = ({
@@ -2935,8 +3155,7 @@ var CrudifyLoginInternal = ({
2935
3155
  component: "h1",
2936
3156
  sx: {
2937
3157
  textAlign: "center",
2938
- mb: 2,
2939
- color: config.colors?.primaryColor || "#1066BA"
3158
+ mb: 2
2940
3159
  },
2941
3160
  children: config.appName
2942
3161
  }
@@ -2953,7 +3172,8 @@ var CrudifyLogin = ({
2953
3172
  ...props
2954
3173
  }) => {
2955
3174
  const { config } = useSessionContext();
2956
- return /* @__PURE__ */ jsx11(I18nProvider, { translations, translationsUrl, language, children: /* @__PURE__ */ jsx11(CrudifyProvider, { config, children: /* @__PURE__ */ jsx11(LoginStateProvider, { config, initialScreen, autoReadFromCookies, children: /* @__PURE__ */ jsx11(CrudifyLoginInternal, { ...props }) }) }) });
3175
+ const theme = getCrudifyThemeFromCookies();
3176
+ return /* @__PURE__ */ jsx11(ThemeProvider, { theme, children: /* @__PURE__ */ jsx11(I18nProvider, { translations, translationsUrl, language, children: /* @__PURE__ */ jsx11(CrudifyProvider, { config, children: /* @__PURE__ */ jsx11(LoginStateProvider, { config, initialScreen, autoReadFromCookies, children: /* @__PURE__ */ jsx11(CrudifyLoginInternal, { ...props }) }) }) }) });
2957
3177
  };
2958
3178
  var CrudifyLogin_default = CrudifyLogin;
2959
3179
 
@@ -4904,10 +5124,13 @@ export {
4904
5124
  SessionStatus,
4905
5125
  TokenStorage,
4906
5126
  UserProfileDisplay_default as UserProfileDisplay,
5127
+ createCrudifyTheme,
4907
5128
  createErrorTranslator,
4908
5129
  default2 as crudify,
4909
5130
  decodeJwtSafely,
5131
+ defaultCrudifyColors,
4910
5132
  getCookie,
5133
+ getCrudifyThemeFromCookies,
4911
5134
  getCurrentUserEmail,
4912
5135
  getErrorMessage,
4913
5136
  handleCrudifyError,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nocios/crudify-ui",
3
- "version": "4.0.1",
3
+ "version": "4.0.2",
4
4
  "description": "Biblioteca de componentes UI para Crudify",
5
5
  "author": "Nocios",
6
6
  "license": "MIT",