@nocios/crudify-ui 4.1.38 → 4.1.42

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.
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkAT74WV5Wjs = require('./chunk-AT74WV5W.js');var _cryptojs = require('crypto-js'); var _cryptojs2 = _interopRequireDefault(_cryptojs);var l=class l{static setStorageType(t){l.storageType=t}static generateEncryptionKey(){let t=[navigator.userAgent,navigator.language,navigator.platform,screen.width,screen.height,Date.now().toString(),Math.random().toString(36)].join("|");return _cryptojs2.default.SHA256(t).toString()}static getEncryptionKey(){if(l.encryptionKey)return l.encryptionKey;let t=window.localStorage;if(!t)return l.encryptionKey=l.generateEncryptionKey(),l.encryptionKey;try{let e=t.getItem(l.ENCRYPTION_KEY_STORAGE);return(!e||e.length<32)&&(e=l.generateEncryptionKey(),t.setItem(l.ENCRYPTION_KEY_STORAGE,e)),l.encryptionKey=e,e}catch (e2){return console.warn("Crudify: Cannot persist encryption key, using temporary key"),l.encryptionKey=l.generateEncryptionKey(),l.encryptionKey}}static isStorageAvailable(t){try{let e=window[t],r="__storage_test__";return e.setItem(r,"test"),e.removeItem(r),!0}catch (e3){return!1}}static getStorage(){return l.storageType==="none"?null:l.isStorageAvailable(l.storageType)?window[l.storageType]:(console.warn(`Crudify: ${l.storageType} not available, tokens won't persist`),null)}static encrypt(t){try{let e=l.getEncryptionKey();return _cryptojs2.default.AES.encrypt(t,e).toString()}catch(e){return console.error("Crudify: Encryption failed",e),t}}static decrypt(t){try{let e=l.getEncryptionKey();return _cryptojs2.default.AES.decrypt(t,e).toString(_cryptojs2.default.enc.Utf8)||t}catch(e){return console.error("Crudify: Decryption failed",e),t}}static saveTokens(t){let e=l.getStorage();if(e)try{let r={accessToken:t.accessToken,refreshToken:t.refreshToken,expiresAt:t.expiresAt,refreshExpiresAt:t.refreshExpiresAt,savedAt:Date.now()},i=l.encrypt(JSON.stringify(r));e.setItem(l.TOKEN_KEY,i),console.debug("Crudify: Tokens saved successfully")}catch(r){console.error("Crudify: Failed to save tokens",r)}}static getTokens(){let t=l.getStorage();if(!t)return null;try{let e=t.getItem(l.TOKEN_KEY);if(!e)return null;let r=l.decrypt(e),i=JSON.parse(r);return!i.accessToken||!i.refreshToken||!i.expiresAt||!i.refreshExpiresAt?(console.warn("Crudify: Incomplete token data found, clearing storage"),l.clearTokens(),null):Date.now()>=i.refreshExpiresAt?(console.info("Crudify: Refresh token expired, clearing storage"),l.clearTokens(),null):{accessToken:i.accessToken,refreshToken:i.refreshToken,expiresAt:i.expiresAt,refreshExpiresAt:i.refreshExpiresAt}}catch(e){return console.error("Crudify: Failed to retrieve tokens",e),l.clearTokens(),null}}static clearTokens(){let t=l.getStorage();if(t)try{t.removeItem(l.TOKEN_KEY),console.debug("Crudify: Tokens cleared from storage")}catch(e){console.error("Crudify: Failed to clear tokens",e)}}static rotateEncryptionKey(){try{l.clearTokens(),l.encryptionKey=null;let t=window.localStorage;t&&t.removeItem(l.ENCRYPTION_KEY_STORAGE),console.info("Crudify: Encryption key rotated successfully")}catch(t){console.error("Crudify: Failed to rotate encryption key",t)}}static hasValidTokens(){return l.getTokens()!==null}static getExpirationInfo(){let t=l.getTokens();if(!t)return null;let e=Date.now();return{accessExpired:e>=t.expiresAt,refreshExpired:e>=t.refreshExpiresAt,accessExpiresIn:Math.max(0,t.expiresAt-e),refreshExpiresIn:Math.max(0,t.refreshExpiresAt-e)}}static updateAccessToken(t,e){let r=l.getTokens();if(!r){console.warn("Crudify: Cannot update access token, no existing tokens found");return}l.saveTokens({...r,accessToken:t,expiresAt:e})}static subscribeToChanges(t){let e=r=>{if(r.key===l.TOKEN_KEY){if(r.newValue===null){console.debug("Crudify: Tokens removed in another tab"),t(null);return}if(r.newValue){console.debug("Crudify: Tokens updated in another tab");let i=l.getTokens();t(i)}}};return window.addEventListener("storage",e),()=>{window.removeEventListener("storage",e)}}};l.TOKEN_KEY="crudify_tokens",l.ENCRYPTION_KEY_STORAGE="crudify_enc_key",l.encryptionKey=null,l.storageType="localStorage";var f=l;var _crudifybrowser = require('@nocios/crudify-browser'); var _crudifybrowser2 = _interopRequireDefault(_crudifybrowser);var O=class o{constructor(){this.config={};this.initialized=!1;this.lastActivityTime=0;this.isRefreshingLocally=!1;this.refreshPromise=null}static getInstance(){return o.instance||(o.instance=new o),o.instance}async initialize(t={}){if(this.initialized){console.warn("SessionManager: Already initialized");return}this.config={storageType:"localStorage",autoRestore:!0,enableLogging:!1,...t},f.setStorageType(this.config.storageType||"localStorage"),this.config.enableLogging,_crudifybrowser2.default.setTokenInvalidationCallback(()=>{this.log("\u{1F514} Tokens invalidated by crudify-core"),_chunkAT74WV5Wjs.f.emit("SESSION_EXPIRED",{message:"Tu sesi\xF3n ha expirado. Por favor, inicia sesi\xF3n nuevamente.",source:"crudify-core.clearTokensAndRefreshState"})}),this.config.autoRestore&&await this.restoreSession(),this.initialized=!0,this.log("SessionManager initialized successfully")}async login(t,e){try{this.log("Attempting login...");let r=await _crudifybrowser2.default.login(t,e);if(!r.success)return this.log("Login failed:",r.errors),{success:!1,error:this.formatError(r.errors),rawResponse:r};let i={accessToken:r.data.token,refreshToken:r.data.refreshToken,expiresAt:r.data.expiresAt,refreshExpiresAt:r.data.refreshExpiresAt};return f.saveTokens(i),this.lastActivityTime=Date.now(),this.log("Login successful, tokens saved"),await this.fetchAndStoreAdminCredentials(),_optionalChain([this, 'access', _2 => _2.config, 'access', _3 => _3.onLoginSuccess, 'optionalCall', _4 => _4(i)]),{success:!0,tokens:i,data:r.data}}catch(r){return this.log("Login error:",r),{success:!1,error:r instanceof Error?r.message:"Unknown error"}}}async logout(){try{this.log("Logging out..."),await _crudifybrowser2.default.logout(),f.clearTokens(),this.log("Logout successful"),_optionalChain([this, 'access', _5 => _5.config, 'access', _6 => _6.onLogout, 'optionalCall', _7 => _7()])}catch(t){this.log("Logout error:",t),f.clearTokens()}}async restoreSession(){try{this.log("Attempting to restore session...");let t=f.getTokens();if(!t)return this.log("No valid tokens found in storage"),!1;if(Date.now()>=t.refreshExpiresAt)return this.log("Refresh token expired, clearing storage"),f.clearTokens(),!1;if(_crudifybrowser2.default.setTokens({accessToken:t.accessToken,refreshToken:t.refreshToken,expiresAt:t.expiresAt,refreshExpiresAt:t.refreshExpiresAt}),_crudifybrowser2.default.getTokenData().isValid===!1){if(this.log("Restored access token is invalid or expired"),Date.now()<t.refreshExpiresAt&&(this.log("Access token expired but refresh is valid, attempting refresh..."),await this.refreshTokens())){this.log("Session restored successfully via token refresh");let i=f.getTokens();return i&&_optionalChain([this, 'access', _8 => _8.config, 'access', _9 => _9.onSessionRestored, 'optionalCall', _10 => _10(i)]),!0}return f.clearTokens(),await _crudifybrowser2.default.logout(),!1}return this.log("Session restored successfully"),this.lastActivityTime=Date.now(),(!t.apiEndpointAdmin||!t.apiKeyEndpointAdmin)&&(this.log("Admin credentials missing, fetching from permissions..."),await this.fetchAndStoreAdminCredentials()),_optionalChain([this, 'access', _11 => _11.config, 'access', _12 => _12.onSessionRestored, 'optionalCall', _13 => _13(t)]),!0}catch(t){return this.log("Session restore error:",t),f.clearTokens(),await _crudifybrowser2.default.logout(),!1}}isAuthenticated(){return _crudifybrowser2.default.isLogin()||f.hasValidTokens()}getTokenInfo(){let t=_crudifybrowser2.default.getTokenData(),e=f.getExpirationInfo(),r=f.getTokens();return{isLoggedIn:this.isAuthenticated(),crudifyTokens:t,storageInfo:e,hasValidTokens:f.hasValidTokens(),apiEndpointAdmin:_optionalChain([r, 'optionalAccess', _14 => _14.apiEndpointAdmin]),apiKeyEndpointAdmin:_optionalChain([r, 'optionalAccess', _15 => _15.apiKeyEndpointAdmin])}}async fetchAndStoreAdminCredentials(){try{this.log("Fetching permissions to get admin API credentials...");let t=await _crudifybrowser2.default.getPermissions();if(!t.success)return this.log("Failed to fetch permissions:",t.errors),!1;let{apiEndpointAdmin:e,apiKeyEndpointAdmin:r}=t.data||{};if(e&&r){let i=f.getTokens();if(i)return f.saveTokens({...i,apiEndpointAdmin:e,apiKeyEndpointAdmin:r}),this.log("Admin API credentials stored successfully"),!0}else this.log("Admin credentials not found in permissions response");return!1}catch(t){return this.log("Error fetching admin credentials:",t),!1}}async refreshTokens(){if(this.isRefreshingLocally&&this.refreshPromise)return this.log("Refresh already in progress, waiting for existing promise..."),this.refreshPromise;this.isRefreshingLocally=!0,this.refreshPromise=this._performRefresh();try{return await this.refreshPromise}finally{this.isRefreshingLocally=!1,this.refreshPromise=null}}async _performRefresh(){try{this.log("Starting token refresh...");let t=await _crudifybrowser2.default.refreshAccessToken();if(!t.success)return this.log("Token refresh failed:",t.errors),f.clearTokens(),_optionalChain([this, 'access', _16 => _16.config, 'access', _17 => _17.showNotification, 'optionalCall', _18 => _18(this.getSessionExpiredMessage(),"warning")]),_optionalChain([this, 'access', _19 => _19.config, 'access', _20 => _20.onSessionExpired, 'optionalCall', _21 => _21()]),!1;let e={accessToken:t.data.token,refreshToken:t.data.refreshToken,expiresAt:t.data.expiresAt,refreshExpiresAt:t.data.refreshExpiresAt};return f.saveTokens(e),this.log("Tokens refreshed and saved successfully"),this.lastActivityTime=Date.now(),!0}catch(t){return this.log("Token refresh error:",t),f.clearTokens(),_optionalChain([this, 'access', _22 => _22.config, 'access', _23 => _23.showNotification, 'optionalCall', _24 => _24(this.getSessionExpiredMessage(),"warning")]),_optionalChain([this, 'access', _25 => _25.config, 'access', _26 => _26.onSessionExpired, 'optionalCall', _27 => _27()]),!1}}isRefreshing(){return this.isRefreshingLocally}setupResponseInterceptor(){_crudifybrowser2.default.setResponseInterceptor(async t=>{this.updateLastActivity();let e=this.detectAuthorizationError(t);if(e.isAuthError){if(this.log("\u{1F6A8} Authorization error detected:",{errorType:e.errorType,shouldLogout:e.shouldTriggerLogout}),e.isRefreshTokenInvalid||e.isTokenRefreshFailed)return this.log("Refresh token invalid, emitting TOKEN_REFRESH_FAILED event"),_chunkAT74WV5Wjs.f.emit("TOKEN_REFRESH_FAILED",{message:e.userFriendlyMessage,error:e.errorDetails,source:"SessionManager.setupResponseInterceptor"}),t;e.shouldTriggerLogout&&(f.hasValidTokens()&&!e.isIrrecoverable?(this.log("Access token expired, emitting TOKEN_EXPIRED event"),_chunkAT74WV5Wjs.f.emit("TOKEN_EXPIRED",{message:"Access token expired, refresh needed",error:e.errorDetails,source:"SessionManager.setupResponseInterceptor"})):(this.log("No valid tokens or irrecoverable error, emitting SESSION_EXPIRED event"),_chunkAT74WV5Wjs.f.emit("SESSION_EXPIRED",{message:e.userFriendlyMessage,error:e.errorDetails,source:"SessionManager.setupResponseInterceptor"})))}return t}),this.log("Response interceptor configured (non-blocking mode)")}detectAuthorizationError(t){let e={isAuthError:!1,isRefreshTokenInvalid:!1,isTokenRefreshFailed:!1,isTokenExpired:!1,isUnauthorized:!1,isIrrecoverable:!1,shouldTriggerLogout:!1,errorType:"",errorDetails:null,userFriendlyMessage:""};if(t.errors&&Array.isArray(t.errors)){let r=t.errors.find(i=>i.errorType==="Unauthorized"||_optionalChain([i, 'access', _28 => _28.message, 'optionalAccess', _29 => _29.includes, 'call', _30 => _30("Unauthorized")])||_optionalChain([i, 'access', _31 => _31.message, 'optionalAccess', _32 => _32.includes, 'call', _33 => _33("Not Authorized")])||_optionalChain([i, 'access', _34 => _34.message, 'optionalAccess', _35 => _35.includes, 'call', _36 => _36("NOT_AUTHORIZED")])||_optionalChain([i, 'access', _37 => _37.message, 'optionalAccess', _38 => _38.includes, 'call', _39 => _39("Token")])||_optionalChain([i, 'access', _40 => _40.message, 'optionalAccess', _41 => _41.includes, 'call', _42 => _42("TOKEN")])||_optionalChain([i, 'access', _43 => _43.message, 'optionalAccess', _44 => _44.includes, 'call', _45 => _45("Authentication")])||_optionalChain([i, 'access', _46 => _46.message, 'optionalAccess', _47 => _47.includes, 'call', _48 => _48("UNAUTHENTICATED")])||_optionalChain([i, 'access', _49 => _49.extensions, 'optionalAccess', _50 => _50.code])==="UNAUTHENTICATED"||_optionalChain([i, 'access', _51 => _51.extensions, 'optionalAccess', _52 => _52.code])==="FORBIDDEN");r&&(e.isAuthError=!0,e.errorType="GraphQL Array",e.errorDetails=r,e.shouldTriggerLogout=!0,e.userFriendlyMessage="Tu sesi\xF3n ha expirado. Por favor, inicia sesi\xF3n nuevamente.",(_optionalChain([r, 'access', _53 => _53.message, 'optionalAccess', _54 => _54.includes, 'call', _55 => _55("TOKEN")])||_optionalChain([r, 'access', _56 => _56.message, 'optionalAccess', _57 => _57.includes, 'call', _58 => _58("Token")]))&&(e.isTokenExpired=!0),_optionalChain([r, 'access', _59 => _59.extensions, 'optionalAccess', _60 => _60.code])==="UNAUTHENTICATED"&&(e.isUnauthorized=!0))}if(!e.isAuthError&&t.errors&&typeof t.errors=="object"&&!Array.isArray(t.errors)){let i=Object.values(t.errors).flat().find(u=>typeof u=="string"&&(u.includes("NOT_AUTHORIZED")||u.includes("TOKEN_REFRESH_FAILED")||u.includes("TOKEN_HAS_EXPIRED")||u.includes("PLEASE_LOGIN")||u.includes("Unauthorized")||u.includes("UNAUTHENTICATED")||u.includes("SESSION_EXPIRED")||u.includes("INVALID_TOKEN")));i&&typeof i=="string"&&(e.isAuthError=!0,e.errorType="GraphQL Object",e.errorDetails=t.errors,e.shouldTriggerLogout=!0,i.includes("TOKEN_REFRESH_FAILED")?(e.isTokenRefreshFailed=!0,e.isRefreshTokenInvalid=!0,e.isIrrecoverable=!0,e.userFriendlyMessage="Tu sesi\xF3n ha caducado. Por favor, inicia sesi\xF3n nuevamente."):i.includes("TOKEN_HAS_EXPIRED")||i.includes("SESSION_EXPIRED")?(e.isTokenExpired=!0,e.userFriendlyMessage="Tu sesi\xF3n ha expirado. Por favor, inicia sesi\xF3n nuevamente."):i.includes("INVALID_TOKEN")?(e.isTokenExpired=!0,e.isIrrecoverable=!0,e.userFriendlyMessage="Token inv\xE1lido. Por favor, inicia sesi\xF3n nuevamente."):e.userFriendlyMessage="Tu sesi\xF3n ha expirado. Por favor, inicia sesi\xF3n nuevamente.")}if(!e.isAuthError&&_optionalChain([t, 'access', _61 => _61.data, 'optionalAccess', _62 => _62.response, 'optionalAccess', _63 => _63.status])){let r=t.data.response.status.toUpperCase();(r==="UNAUTHORIZED"||r==="UNAUTHENTICATED")&&(e.isAuthError=!0,e.errorType="Status",e.errorDetails=t.data.response,e.isUnauthorized=!0,e.shouldTriggerLogout=!0,e.isIrrecoverable=!0,e.userFriendlyMessage="Tu sesi\xF3n ha expirado. Por favor, inicia sesi\xF3n nuevamente.")}if(!e.isAuthError&&_optionalChain([t, 'access', _64 => _64.data, 'optionalAccess', _65 => _65.response, 'optionalAccess', _66 => _66.data]))try{let r=typeof t.data.response.data=="string"?JSON.parse(t.data.response.data):t.data.response.data;(r.error==="REFRESH_TOKEN_INVALID"||r.error==="TOKEN_EXPIRED"||r.error==="INVALID_TOKEN")&&(e.isAuthError=!0,e.errorType="Parsed Data",e.errorDetails=r,e.shouldTriggerLogout=!0,e.isIrrecoverable=!0,r.error==="REFRESH_TOKEN_INVALID"?(e.isRefreshTokenInvalid=!0,e.isTokenRefreshFailed=!0,e.userFriendlyMessage="Tu sesi\xF3n ha caducado. Por favor, inicia sesi\xF3n nuevamente."):(e.isTokenExpired=!0,e.userFriendlyMessage="Tu sesi\xF3n ha expirado. Por favor, inicia sesi\xF3n nuevamente."))}catch (e4){}if(!e.isAuthError&&t.errorCode){let r=t.errorCode.toUpperCase();(r==="UNAUTHORIZED"||r==="UNAUTHENTICATED"||r==="TOKEN_EXPIRED"||r==="INVALID_TOKEN")&&(e.isAuthError=!0,e.errorType="Error Code",e.errorDetails={errorCode:r},e.shouldTriggerLogout=!0,r==="TOKEN_EXPIRED"?e.isTokenExpired=!0:e.isUnauthorized=!0,e.userFriendlyMessage="Tu sesi\xF3n ha expirado. Por favor, inicia sesi\xF3n nuevamente.")}return e}updateLastActivity(){this.lastActivityTime=Date.now(),this.log("Last activity updated")}getTimeSinceLastActivity(){return this.lastActivityTime===0?0:Date.now()-this.lastActivityTime}checkInactivity(){let t=this.getTimeSinceLastActivity(),e=_crudifybrowser2.default.getTokenData();if(this.lastActivityTime===0)return"none";let r=900*1e3,i=300*1e3,u=300*1e3;return t>r?(this.log(`Inactivity timeout: ${Math.floor(t/6e4)} minutes since last activity`),"logout"):t<i&&e.expiresIn<u&&e.expiresIn>0?(this.log(`User active recently (${Math.floor(t/6e4)}min ago) and token expiring soon, should refresh`),"refresh"):"none"}clearSession(){f.clearTokens(),_crudifybrowser2.default.logout(),this.lastActivityTime=0,this.log("Session cleared completely")}getSessionExpiredMessage(){return this.config.translateFn?_chunkAT74WV5Wjs.b.call(void 0, "SESSION_EXPIRED",{translateFn:this.config.translateFn,enableDebug:this.config.enableLogging}):"Tu sesi\xF3n ha expirado. Por favor, inicia sesi\xF3n nuevamente."}log(t,...e){this.config.enableLogging&&console.log(`[SessionManager] ${t}`,...e)}formatError(t){return t?typeof t=="string"?t:typeof t=="object"?Object.values(t).flat().join(", "):"Authentication failed":"Unknown error"}};var _react = require('react'); var _react2 = _interopRequireDefault(_react);function Y(o={}){let[t,e]=_react.useState.call(void 0, {isAuthenticated:!1,isLoading:!0,isInitialized:!1,tokens:null,error:null}),r=O.getInstance(),i=_react.useCallback.call(void 0, async()=>{try{e(a=>({...a,isLoading:!0,error:null}));let c={autoRestore:_nullishCoalesce(o.autoRestore, () => (!0)),enableLogging:_nullishCoalesce(o.enableLogging, () => (!1)),showNotification:o.showNotification,translateFn:o.translateFn,onSessionExpired:()=>{e(a=>({...a,isAuthenticated:!1,tokens:null,error:"Session expired"})),_optionalChain([o, 'access', _67 => _67.onSessionExpired, 'optionalCall', _68 => _68()])},onSessionRestored:a=>{e(g=>({...g,isAuthenticated:!0,tokens:a,error:null})),_optionalChain([o, 'access', _69 => _69.onSessionRestored, 'optionalCall', _70 => _70(a)])},onLoginSuccess:a=>{e(g=>({...g,isAuthenticated:!0,tokens:a,error:null}))},onLogout:()=>{e(a=>({...a,isAuthenticated:!1,tokens:null,error:null}))}};await r.initialize(c),r.setupResponseInterceptor();let s=r.isAuthenticated(),n=r.getTokenInfo();e(a=>({...a,isAuthenticated:s,isInitialized:!0,isLoading:!1,tokens:n.crudifyTokens.accessToken?{accessToken:n.crudifyTokens.accessToken,refreshToken:n.crudifyTokens.refreshToken,expiresAt:n.crudifyTokens.expiresAt,refreshExpiresAt:n.crudifyTokens.refreshExpiresAt}:null}))}catch(c){let s=c instanceof Error?c.message:"Initialization failed";e(n=>({...n,isLoading:!1,isInitialized:!0,error:s}))}},[o.autoRestore,o.enableLogging,o.onSessionExpired,o.onSessionRestored]),u=_react.useCallback.call(void 0, async(c,s)=>{e(n=>({...n,isLoading:!0,error:null}));try{let n=await r.login(c,s);return n.success&&n.tokens?e(a=>({...a,isAuthenticated:!0,tokens:n.tokens,isLoading:!1,error:null})):e(a=>({...a,isAuthenticated:!1,tokens:null,isLoading:!1,error:null})),n}catch(n){let a=n instanceof Error?n.message:"Login failed",g=a.includes("INVALID_CREDENTIALS")||a.includes("Invalid email")||a.includes("Invalid password")||a.includes("credentials");return e(m=>({...m,isAuthenticated:!1,tokens:null,isLoading:!1,error:g?null:a})),{success:!1,error:a}}},[r]),E=_react.useCallback.call(void 0, async()=>{e(c=>({...c,isLoading:!0}));try{await r.logout(),e(c=>({...c,isAuthenticated:!1,tokens:null,isLoading:!1,error:null}))}catch(c){e(s=>({...s,isAuthenticated:!1,tokens:null,isLoading:!1,error:c instanceof Error?c.message:"Logout error"}))}},[r]),h=_react.useCallback.call(void 0, async()=>{try{let c=await r.refreshTokens();if(c){let s=r.getTokenInfo();e(n=>({...n,tokens:s.crudifyTokens.accessToken?{accessToken:s.crudifyTokens.accessToken,refreshToken:s.crudifyTokens.refreshToken,expiresAt:s.crudifyTokens.expiresAt,refreshExpiresAt:s.crudifyTokens.refreshExpiresAt}:null,error:null}))}else e(s=>({...s,isAuthenticated:!1,tokens:null,error:"Token refresh failed"}));return c}catch(c){return e(s=>({...s,isAuthenticated:!1,tokens:null,error:c instanceof Error?c.message:"Token refresh failed"})),!1}},[r]),x=_react.useCallback.call(void 0, ()=>{e(c=>({...c,error:null}))},[]),y=_react.useCallback.call(void 0, ()=>r.getTokenInfo(),[r]);_react.useEffect.call(void 0, ()=>{i()},[i]),_react.useEffect.call(void 0, ()=>{if(!t.isAuthenticated||!t.tokens)return;let c=_chunkAT74WV5Wjs.g.getInstance(),s=()=>{r.updateLastActivity(),o.enableLogging&&console.log("\u{1F4CD} User navigating - activity updated")},n=c.subscribe(s);window.addEventListener("popstate",s);let a=setInterval(async()=>{if(r.isRefreshing()){o.enableLogging&&console.log("\u23F8\uFE0F Refresh already in progress, skipping inactivity check");return}let g=r.checkInactivity();if(g==="logout")o.enableLogging&&console.log("\u23F1\uFE0F Inactivity timeout - logging out user"),await E();else if(g==="refresh")if(o.enableLogging&&console.log("\u{1F504} User active, token expiring soon - refreshing..."),e(p=>({...p,isLoading:!0})),await r.refreshTokens()){let p=r.getTokenInfo();e(S=>({...S,isLoading:!1,tokens:p.crudifyTokens.accessToken?{accessToken:p.crudifyTokens.accessToken,refreshToken:p.crudifyTokens.refreshToken,expiresAt:p.crudifyTokens.expiresAt,refreshExpiresAt:p.crudifyTokens.refreshExpiresAt}:null}))}else e(p=>({...p,isLoading:!1,isAuthenticated:!1,tokens:null}))},120*1e3);return()=>{clearInterval(a),window.removeEventListener("popstate",s),n()}},[t.isAuthenticated,t.tokens,r,o.enableLogging,E]),_react.useEffect.call(void 0, ()=>{let c=_chunkAT74WV5Wjs.f.subscribe(async s=>{if(o.enableLogging&&console.log(`\u{1F4E2} useSession: Received auth event: ${s.type}`),s.type==="TOKEN_EXPIRED"){if(r.isRefreshing()){o.enableLogging&&console.log("\u23F8\uFE0F Refresh already in progress, skipping TOKEN_EXPIRED handler");return}o.enableLogging&&console.log("\u{1F504} Token expired, attempting refresh..."),e(n=>({...n,isLoading:!0}));try{if(await r.refreshTokens()){o.enableLogging&&console.log("\u2705 Token refreshed successfully");let a=r.getTokenInfo();e(g=>({...g,isLoading:!1,tokens:a.crudifyTokens.accessToken?{accessToken:a.crudifyTokens.accessToken,refreshToken:a.crudifyTokens.refreshToken,expiresAt:a.crudifyTokens.expiresAt,refreshExpiresAt:a.crudifyTokens.refreshExpiresAt}:null}))}else o.enableLogging&&console.log("\u274C Token refresh failed, session expired"),_chunkAT74WV5Wjs.f.emit("SESSION_EXPIRED",{message:"Failed to refresh token after detecting expiration",source:"useSession.TOKEN_EXPIRED handler"})}catch(n){o.enableLogging&&console.error("\u274C Error during token refresh:",n),_chunkAT74WV5Wjs.f.emit("SESSION_EXPIRED",{message:n instanceof Error?n.message:"Unknown error during refresh",source:"useSession.TOKEN_EXPIRED handler (error)"})}}(s.type==="SESSION_EXPIRED"||s.type==="TOKEN_REFRESH_FAILED")&&(o.enableLogging&&console.log(`\u{1F534} Session expired (${s.type}), logging out...`),e(n=>({...n,isAuthenticated:!1,tokens:null,isLoading:!1,error:_optionalChain([s, 'access', _71 => _71.details, 'optionalAccess', _72 => _72.message])||"Session expired"})),_optionalChain([o, 'access', _73 => _73.onSessionExpired, 'optionalCall', _74 => _74()]))});return()=>c()},[o.enableLogging,o.onSessionExpired,r]),_react.useEffect.call(void 0, ()=>{let c=f.subscribeToChanges(s=>{s?(o.enableLogging&&console.log("\u{1F504} Tokens updated in another tab"),e(n=>({...n,tokens:s,isAuthenticated:!0}))):(o.enableLogging&&console.log("\u{1F504} Logout detected in another tab"),e(n=>({...n,isAuthenticated:!1,tokens:null})),_chunkAT74WV5Wjs.f.emit("SESSION_EXPIRED",{message:"Sesi\xF3n cerrada en otra pesta\xF1a",source:"CrossTabSync"}))});return()=>c()},[o.enableLogging]);let I=_react.useCallback.call(void 0, ()=>{r.updateLastActivity()},[r]);return{...t,login:u,logout:E,refreshTokens:h,clearError:x,getTokenInfo:y,updateActivity:I,isExpiringSoon:t.tokens?t.tokens.expiresAt-Date.now()<300*1e3:!1,expiresIn:t.tokens?Math.max(0,t.tokens.expiresAt-Date.now()):0,refreshExpiresIn:t.tokens?Math.max(0,t.tokens.refreshExpiresAt-Date.now()):0}}var _material = require('@mui/material');var _uuid = require('uuid');var _dompurify = require('dompurify'); var _dompurify2 = _interopRequireDefault(_dompurify);var _jsxruntime = require('react/jsx-runtime');var B=_react.createContext.call(void 0, null),ue=o=>_dompurify2.default.sanitize(o,{ALLOWED_TAGS:["b","i","em","strong","br","span"],ALLOWED_ATTR:["class"],FORBID_TAGS:["script","iframe","object","embed"],FORBID_ATTR:["onload","onerror","onclick","onmouseover","onfocus","onblur"],WHOLE_DOCUMENT:!1,RETURN_DOM:!1,RETURN_DOM_FRAGMENT:!1,RETURN_TRUSTED_TYPE:!1}),W= exports.d =({children:o,maxNotifications:t=5,defaultAutoHideDuration:e=6e3,position:r={vertical:"top",horizontal:"right"},enabled:i=!1,allowHtml:u=!1})=>{let[E,h]=_react.useState.call(void 0, []),x=_react.useCallback.call(void 0, (s,n="info",a)=>{if(!i)return"";if(!s||typeof s!="string")return console.warn("\u26A0\uFE0F GlobalNotificationProvider: Invalid message provided"),"";s.length>1e3&&(console.warn("\u26A0\uFE0F GlobalNotificationProvider: Message too long, truncating"),s=s.substring(0,1e3)+"...");let g=_uuid.v4.call(void 0, ),m={id:g,message:s,severity:n,autoHideDuration:_nullishCoalesce(_optionalChain([a, 'optionalAccess', _75 => _75.autoHideDuration]), () => (e)),persistent:_nullishCoalesce(_optionalChain([a, 'optionalAccess', _76 => _76.persistent]), () => (!1)),allowHtml:_nullishCoalesce(_optionalChain([a, 'optionalAccess', _77 => _77.allowHtml]), () => (u))};return h(p=>[...p.length>=t?p.slice(-(t-1)):p,m]),g},[t,e,i,u]),y=_react.useCallback.call(void 0, s=>{h(n=>n.filter(a=>a.id!==s))},[]),I=_react.useCallback.call(void 0, ()=>{h([])},[]),c={showNotification:x,hideNotification:y,clearAllNotifications:I};return _jsxruntime.jsxs.call(void 0, B.Provider,{value:c,children:[o,i&&_jsxruntime.jsx.call(void 0, _material.Portal,{children:_jsxruntime.jsx.call(void 0, _material.Box,{sx:{position:"fixed",zIndex:9999,[r.vertical]:(r.vertical==="top",24),[r.horizontal]:r.horizontal==="right"||r.horizontal==="left"?24:"50%",...r.horizontal==="center"&&{transform:"translateX(-50%)"},display:"flex",flexDirection:r.vertical==="top"?"column":"column-reverse",gap:1,maxWidth:"400px",width:"auto"},children:E.map(s=>_jsxruntime.jsx.call(void 0, de,{notification:s,onClose:()=>y(s.id)},s.id))})})]})},de=({notification:o,onClose:t})=>{let[e,r]=_react.useState.call(void 0, !0),i=_react.useCallback.call(void 0, (u,E)=>{E!=="clickaway"&&(r(!1),setTimeout(t,300))},[t]);return _react.useEffect.call(void 0, ()=>{if(!o.persistent&&o.autoHideDuration){let u=setTimeout(()=>{i()},o.autoHideDuration);return()=>clearTimeout(u)}},[o.autoHideDuration,o.persistent,i]),_jsxruntime.jsx.call(void 0, _material.Snackbar,{open:e,onClose:i,sx:{position:"relative","& .MuiSnackbarContent-root":{minWidth:"auto"}},TransitionProps:{enter:!0,exit:!0},children:_jsxruntime.jsx.call(void 0, _material.Alert,{variant:"filled",severity:o.severity,onClose:i,sx:{width:"100%",minWidth:"280px",maxWidth:"400px",wordBreak:"break-word"},children:o.allowHtml?_jsxruntime.jsx.call(void 0, "span",{dangerouslySetInnerHTML:{__html:ue(o.message)}}):_jsxruntime.jsx.call(void 0, "span",{children:o.message})})})},$= exports.e =()=>{let o=_react.useContext.call(void 0, B);if(!o)throw new Error("useGlobalNotification debe ser usado dentro de un GlobalNotificationProvider");return o};var Z=_react.createContext.call(void 0, void 0);function Te({children:o,options:t={},config:e,showNotifications:r=!1,notificationOptions:i={}}){let u;try{let{showNotification:s}=$();u=s}catch (e5){}let E=_react2.default.useMemo(()=>({...t,showNotification:u,onSessionExpired:()=>{_optionalChain([t, 'access', _78 => _78.onSessionExpired, 'optionalCall', _79 => _79()])}}),[t,u]),h=Y(E),x=_react.useMemo.call(void 0, ()=>{let s,n,a,g,m,p="unknown";if(_optionalChain([e, 'optionalAccess', _80 => _80.publicApiKey])&&(s=e.publicApiKey,p="props"),_optionalChain([e, 'optionalAccess', _81 => _81.env])&&(n=e.env),_optionalChain([e, 'optionalAccess', _82 => _82.appName])&&(a=e.appName),_optionalChain([e, 'optionalAccess', _83 => _83.loginActions])&&(g=e.loginActions),_optionalChain([e, 'optionalAccess', _84 => _84.logo])&&(m=e.logo),!s){let S=_chunkAT74WV5Wjs.a.call(void 0, "publicApiKey"),N=_chunkAT74WV5Wjs.a.call(void 0, "environment"),L=_chunkAT74WV5Wjs.a.call(void 0, "appName"),b=_chunkAT74WV5Wjs.a.call(void 0, "loginActions"),d=_chunkAT74WV5Wjs.a.call(void 0, "logo");S&&(s=S,p="cookies"),N&&["dev","stg","prod"].includes(N)&&(n=N),L&&(a=decodeURIComponent(L)),b&&(g=decodeURIComponent(b).split(",").map(P=>P.trim()).filter(Boolean)),d&&(m=decodeURIComponent(d))}return{publicApiKey:s,env:n,appName:a,loginActions:g,logo:m}},[e]),y=_react.useMemo.call(void 0, ()=>{if(!_optionalChain([h, 'access', _85 => _85.tokens, 'optionalAccess', _86 => _86.accessToken])||!h.isAuthenticated)return null;try{let s=_chunkAT74WV5Wjs.h.call(void 0, h.tokens.accessToken);if(s&&s.sub&&s.email&&s.subscriber){let n={_id:s.sub,email:s.email,subscriberKey:s.subscriber};return Object.keys(s).forEach(a=>{["sub","email","subscriber"].includes(a)||(n[a]=s[a])}),n}}catch(s){console.error("Error decoding JWT token for sessionData:",s)}return null},[_optionalChain([h, 'access', _87 => _87.tokens, 'optionalAccess', _88 => _88.accessToken]),h.isAuthenticated]),I={...h,sessionData:y,config:x},c={enabled:r,maxNotifications:i.maxNotifications||5,defaultAutoHideDuration:i.defaultAutoHideDuration||6e3,position:i.position||{vertical:"top",horizontal:"right"}};return _jsxruntime.jsx.call(void 0, Z.Provider,{value:I,children:o})}function Qe(o){let t={enabled:o.showNotifications,maxNotifications:_optionalChain([o, 'access', _89 => _89.notificationOptions, 'optionalAccess', _90 => _90.maxNotifications])||5,defaultAutoHideDuration:_optionalChain([o, 'access', _91 => _91.notificationOptions, 'optionalAccess', _92 => _92.defaultAutoHideDuration])||6e3,position:_optionalChain([o, 'access', _93 => _93.notificationOptions, 'optionalAccess', _94 => _94.position])||{vertical:"top",horizontal:"right"},allowHtml:_optionalChain([o, 'access', _95 => _95.notificationOptions, 'optionalAccess', _96 => _96.allowHtml])||!1};return _jsxruntime.jsx.call(void 0, W,{...t,children:_jsxruntime.jsx.call(void 0, Te,{...o})})}function ye(){let o=_react.useContext.call(void 0, Z);if(o===void 0)throw new Error("useSessionContext must be used within a SessionProvider");return o}function et(){let o=ye();return o.isInitialized?_jsxruntime.jsxs.call(void 0, "div",{style:{padding:"10px",margin:"10px",border:"1px solid #ccc",borderRadius:"4px",fontSize:"12px",fontFamily:"monospace"},children:[_jsxruntime.jsx.call(void 0, "h4",{children:"Session Debug Info"}),_jsxruntime.jsxs.call(void 0, "div",{children:[_jsxruntime.jsx.call(void 0, "strong",{children:"Authenticated:"})," ",o.isAuthenticated?"Yes":"No"]}),_jsxruntime.jsxs.call(void 0, "div",{children:[_jsxruntime.jsx.call(void 0, "strong",{children:"Loading:"})," ",o.isLoading?"Yes":"No"]}),_jsxruntime.jsxs.call(void 0, "div",{children:[_jsxruntime.jsx.call(void 0, "strong",{children:"Error:"})," ",o.error||"None"]}),o.tokens&&_jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[_jsxruntime.jsxs.call(void 0, "div",{children:[_jsxruntime.jsx.call(void 0, "strong",{children:"Access Token:"})," ",o.tokens.accessToken.substring(0,20),"..."]}),_jsxruntime.jsxs.call(void 0, "div",{children:[_jsxruntime.jsx.call(void 0, "strong",{children:"Refresh Token:"})," ",o.tokens.refreshToken.substring(0,20),"..."]}),_jsxruntime.jsxs.call(void 0, "div",{children:[_jsxruntime.jsx.call(void 0, "strong",{children:"Access Expires In:"})," ",Math.round(o.expiresIn/1e3/60)," minutes"]}),_jsxruntime.jsxs.call(void 0, "div",{children:[_jsxruntime.jsx.call(void 0, "strong",{children:"Refresh Expires In:"})," ",Math.round(o.refreshExpiresIn/1e3/60/60)," hours"]}),_jsxruntime.jsxs.call(void 0, "div",{children:[_jsxruntime.jsx.call(void 0, "strong",{children:"Expiring Soon:"})," ",o.isExpiringSoon?"Yes":"No"]})]})]}):_jsxruntime.jsx.call(void 0, "div",{children:"Session not initialized"})}var nt=(o={})=>{let{autoFetch:t=!0,retryOnError:e=!1,maxRetries:r=3}=o,[i,u]=_react.useState.call(void 0, null),[E,h]=_react.useState.call(void 0, !1),[x,y]=_react.useState.call(void 0, null),[I,c]=_react.useState.call(void 0, {}),s=_react.useRef.call(void 0, null),n=_react.useRef.call(void 0, !0),a=_react.useRef.call(void 0, 0),g=_react.useRef.call(void 0, 0),m=_react.useCallback.call(void 0, ()=>{u(null),y(null),h(!1),c({})},[]),p=_react.useCallback.call(void 0, async()=>{let S=_chunkAT74WV5Wjs.i.call(void 0, );if(!S){n.current&&(y("No user email available"),h(!1));return}s.current&&s.current.abort();let N=new AbortController;s.current=N;let L=++a.current;try{n.current&&(h(!0),y(null));let b=await _crudifybrowser2.default.readItems("users",{filter:{email:S},pagination:{limit:1}});if(L===a.current&&n.current&&!N.signal.aborted)if(b.success&&b.data&&b.data.length>0){let d=b.data[0];u(d);let H={fullProfile:d,totalFields:Object.keys(d).length,displayData:{id:d.id,email:d.email,username:d.username,firstName:d.firstName,lastName:d.lastName,fullName:d.fullName||`${d.firstName||""} ${d.lastName||""}`.trim(),role:d.role,permissions:d.permissions||[],isActive:d.isActive,lastLogin:d.lastLogin,createdAt:d.createdAt,updatedAt:d.updatedAt,...Object.keys(d).filter(P=>!["id","email","username","firstName","lastName","fullName","role","permissions","isActive","lastLogin","createdAt","updatedAt"].includes(P)).reduce((P,z)=>({...P,[z]:d[z]}),{})}};c(H),y(null),g.current=0}else y("User profile not found"),u(null),c({})}catch(b){if(L===a.current&&n.current){let d=b;if(d.name==="AbortError")return;e&&g.current<r&&(_optionalChain([d, 'access', _97 => _97.message, 'optionalAccess', _98 => _98.includes, 'call', _99 => _99("Network Error")])||_optionalChain([d, 'access', _100 => _100.message, 'optionalAccess', _101 => _101.includes, 'call', _102 => _102("Failed to fetch")]))?(g.current++,setTimeout(()=>{n.current&&p()},1e3*g.current)):(y("Failed to load user profile"),u(null),c({}))}}finally{L===a.current&&n.current&&h(!1),s.current===N&&(s.current=null)}},[e,r]);return _react.useEffect.call(void 0, ()=>{t&&p()},[t,p]),_react.useEffect.call(void 0, ()=>(n.current=!0,()=>{n.current=!1,s.current&&(s.current.abort(),s.current=null)}),[]),{userProfile:i,loading:E,error:x,extendedData:I,refreshProfile:p,clearProfile:m}};exports.a = f; exports.b = O; exports.c = Y; exports.d = W; exports.e = $; exports.f = Qe; exports.g = ye; exports.h = et; exports.i = nt;
@@ -1 +0,0 @@
1
- import{e as Qe,g as Q,i as Ze}from"./chunk-47LRGZUJ.mjs";import{g as z}from"./chunk-BJ6PIVZR.mjs";import{a as Je,e as Xe}from"./chunk-5JKS55SE.mjs";import{Box as kr,Typography as Lr}from"@mui/material";import{createContext as $o,useContext as Ho,useMemo as oo}from"react";import{useState as Fe,useEffect as Mo}from"react";var eo=(e,t)=>{let[s,a]=Fe({}),[m,n]=Fe(!1),[i,p]=Fe(null);return Mo(()=>{if(console.log("\u{1F527} [I18nProvider] Hybrid translation loading:",{hasProvidedTranslations:!!t&&Object.keys(t).length>0,hasUrl:!!e,providedKeys:t?Object.keys(t).length:0}),t&&Object.keys(t).length>0){console.log("\u2705 [I18nProvider] Using provided translations (highest priority)"),a(t),n(!1),p(null);return}if(!e){console.log("\u26A0\uFE0F [I18nProvider] No translations provided, using empty object (keys will show as-is)"),a({}),n(!1),p(null);return}console.log("\u{1F310} [I18nProvider] Loading translations from URL:",e);let l=!1;return n(!0),p(null),fetch(e).then(y=>{if(!y.ok)throw new Error(`Failed to load translations: ${y.status}`);return y.json()}).then(y=>{l||(console.log("\u2705 [I18nProvider] Translations loaded successfully from URL:",{url:e,keysLoaded:Object.keys(y).length}),a(y),n(!1))}).catch(y=>{l||(console.error("\u274C [I18nProvider] Failed to load translations from URL:",e,y),p(y.message),console.log("\u{1F504} [I18nProvider] Falling back to empty translations (keys will show as-is)"),a({}),n(!1))}),()=>{l=!0}},[e,t]),{translations:s,loading:m,error:i}};import{jsx as ro}from"react/jsx-runtime";var to=$o(null),Ko=(e,t)=>e&&e[t]?e[t]:t.split(".").reduce((s,a)=>s&&typeof s=="object"?s[a]:void 0,e),no=({children:e,translations:t,translationsUrl:s,language:a="en"})=>{let{translations:m,loading:n}=eo(s,t),i=oo(()=>(l,y)=>{let c=Ko(m,l);return c==null&&(console.log(`\u{1F50D} [I18nProvider] Translation not found for key: "${l}" - showing key as-is`),c=l),y&&typeof c=="string"&&Object.entries(y).forEach(([x,d])=>{c=c.replace(new RegExp(`{{${x}}}`,"g"),d)}),typeof c=="string"?c:l},[m]),p=oo(()=>({t:i,language:a}),[i,a]);return n?ro("div",{children:"Loading translations..."}):ro(to.Provider,{value:p,children:e})},U=()=>{let e=Ho(to);if(!e)throw new Error("useTranslation must be used within I18nProvider");return e};import{createContext as jo,useContext as qo,useEffect as Go,useState as ve}from"react";import fe from"@nocios/crudify-browser";import{jsx as Yo}from"react/jsx-runtime";var io=jo(void 0),so=({config:e,children:t})=>{let[s,a]=ve(!0),[m,n]=ve(null),[i,p]=ve(!1),[l,y]=ve("");console.log("\u{1F50D} CrudifyProvider - Received config:",e),Go(()=>{if(console.log("\u{1F50D} CrudifyProvider - useEffect - config.publicApiKey:",e.publicApiKey),console.log("\u{1F50D} CrudifyProvider - useEffect - full config:",e),!e.publicApiKey){console.log("\u274C CrudifyProvider - No publicApiKey provided, setting error"),n("No publicApiKey provided"),a(!1),p(!1);return}console.log("\u2705 CrudifyProvider - publicApiKey found, proceeding with initialization");let x=`${e.publicApiKey}-${e.env}`;if(x===l&&i){a(!1);return}(async()=>{a(!0),n(null),p(!1);try{if(fe.config(e.env||"prod"),await fe.init(e.publicApiKey,"none"),typeof fe.transaction=="function"&&typeof fe.login=="function")p(!0),y(x);else throw new Error("Crudify methods not properly initialized")}catch(o){let r=o instanceof Error?o.message:"Failed to initialize Crudify";n(r),p(!1)}finally{a(!1)}})()},[e.publicApiKey,e.env,l,i]);let c={crudify:i?fe:null,isLoading:s,error:m,isInitialized:i};return Yo(io.Provider,{value:c,children:t})},q=()=>{let e=qo(io);if(e===void 0)throw new Error("useCrudify must be used within a CrudifyProvider");return e};import{createContext as Jo,useContext as Xo,useReducer as Qo,useEffect as ao}from"react";import{jsx as er}from"react/jsx-runtime";var lo={currentScreen:"login",searchParams:{},formData:{username:"",password:"",email:"",code:"",newPassword:"",confirmPassword:""},loading:!1,errors:{global:[]},emailSent:!1,codeAlreadyExists:!1,codeValidated:!1,fromCodeVerification:!1,config:{}};function Zo(e,t){switch(t.type){case"SET_SCREEN":let s={...e,currentScreen:t.payload.screen,searchParams:t.payload.params||e.searchParams,errors:{global:[]}},a=new URLSearchParams(s.searchParams),m=a.toString()?`?${a.toString()}`:window.location.pathname;try{window.history.replaceState({},"",m)}catch{}return s;case"SET_SEARCH_PARAMS":return{...e,searchParams:t.payload};case"UPDATE_FORM_DATA":return{...e,formData:{...e.formData,...t.payload},errors:{...e.errors,...Object.keys(t.payload).reduce((n,i)=>({...n,[i]:void 0}),{})}};case"SET_LOADING":return{...e,loading:t.payload};case"SET_ERRORS":return{...e,errors:{...e.errors,...t.payload}};case"CLEAR_ERRORS":return{...e,errors:{global:[]}};case"SET_EMAIL_SENT":return{...e,emailSent:t.payload};case"SET_CODE_ALREADY_EXISTS":return{...e,codeAlreadyExists:t.payload};case"SET_CODE_VALIDATED":return{...e,codeValidated:t.payload};case"SET_FROM_CODE_VERIFICATION":return{...e,fromCodeVerification:t.payload};case"RESET_FORM":return{...e,formData:lo.formData,errors:{global:[]},loading:!1,emailSent:!1,codeAlreadyExists:!1,codeValidated:!1,fromCodeVerification:!1};case"INIT_CONFIG":return{...e,config:t.payload};default:return e}}var co=Jo(void 0),uo=({children:e,initialScreen:t="login",config:s,autoReadFromCookies:a=!0})=>{let[m,n]=Qo(Zo,{...lo,currentScreen:t});ao(()=>{n({type:"INIT_CONFIG",payload:(()=>{let o={};if(a)try{let r=Je("logo");if(r){let u=decodeURIComponent(r);u.startsWith("http")&&(o.logo=u)}}catch(r){console.error("Error reading configuration from cookies:",r)}return{publicApiKey:s?.publicApiKey,env:s?.env,appName:s?.appName,logo:s?.logo||o.logo,loginActions:s?.loginActions}})()})},[s,a]),ao(()=>{let d=new URLSearchParams(window.location.search),o={};d.forEach((r,u)=>{o[u]=r}),Object.keys(o).length>0&&n({type:"SET_SEARCH_PARAMS",payload:o}),t==="checkCode"&&o.email&&n({type:"UPDATE_FORM_DATA",payload:{email:o.email,code:o.code||""}}),t==="resetPassword"&&o.link&&n({type:"SET_SEARCH_PARAMS",payload:o})},[t]);let x={state:m,dispatch:n,setScreen:(d,o)=>{n({type:"SET_SCREEN",payload:{screen:d,params:o}})},updateFormData:d=>{n({type:"UPDATE_FORM_DATA",payload:d})},setFieldError:(d,o)=>{n({type:"SET_ERRORS",payload:{[d]:o}})},clearErrors:()=>{n({type:"CLEAR_ERRORS"})},setLoading:d=>{n({type:"SET_LOADING",payload:d})}};return er(co.Provider,{value:x,children:e})},Te=()=>{let e=Xo(co);if(e===void 0)throw new Error("useLoginState must be used within a LoginStateProvider");return e};import{useEffect as or,useRef as rr}from"react";import{Typography as De,TextField as fo,Button as tr,Box as me,CircularProgress as nr,Alert as ir,Link as mo}from"@mui/material";import{Fragment as ar,jsx as M,jsxs as pe}from"react/jsx-runtime";var sr=({onScreenChange:e,onExternalNavigate:t,onLoginSuccess:s,onError:a,redirectUrl:m="/"})=>{let{crudify:n}=q(),{state:i,updateFormData:p,setFieldError:l,clearErrors:y,setLoading:c}=Te(),{login:x}=Q(),d=U(),{t:o}=d,r=d.i18n,u=rr(null),C=Xe(o,{currentLanguage:r?.language,enableDebug:!1}),P=()=>{if(i.searchParams.redirect)try{let g=decodeURIComponent(i.searchParams.redirect);if(g.startsWith("/")&&!g.startsWith("//"))return g}catch{}return m||"/"};or(()=>{let g=setTimeout(()=>{u.current&&u.current.focus()},100);return()=>clearTimeout(g)},[]);let f=g=>{console.log("\u{1F50D} [LoginForm] Translating parsed error:",g);let S=C.translateError({code:g.code,message:g.message,field:g.field});return console.log("\u{1F50D} [LoginForm] Translation result:",S),S},h=async()=>{if(!i.loading){if(!i.formData.username.trim()){l("username",o("login.usernameRequired"));return}if(!i.formData.password.trim()){l("password",o("login.passwordRequired"));return}y(),c(!0);try{let g=await x(i.formData.username,i.formData.password);if(c(!1),g.success){console.log("\u{1F510} LoginForm - Login successful via SessionProvider, calling onLoginSuccess");let S=P();s&&s(g.data,S)}else{let S=g.rawResponse||g;w(S)}}catch(g){c(!1);let J=z(g).map(f);l("global",J),a&&a(J.join(", "))}}},w=g=>{z(g).forEach(J=>{if(J.field)l(J.field,f(J));else{let de=i.errors.global||[];l("global",[...de,f(J)])}})};return pe(ar,{children:[pe(me,{component:"form",noValidate:!0,onSubmit:g=>{g.preventDefault(),h()},onKeyDown:g=>{g.key==="Enter"&&!i.loading&&(g.preventDefault(),h())},sx:{width:"100%",display:"flex",flexDirection:"column",gap:2},children:[pe(me,{sx:{mb:1},children:[M(De,{variant:"body2",component:"label",htmlFor:"email",sx:{display:"block",fontWeight:500,color:"grey.700",mb:.5},children:o("login.usernameOrEmailLabel")}),M(fo,{fullWidth:!0,id:"email",name:"email",type:"email",value:i.formData.username,disabled:i.loading,onChange:g=>p({username:g.target.value}),error:!!i.errors.username,helperText:i.errors.username,autoComplete:"email",placeholder:o("login.usernameOrEmailPlaceholder"),inputRef:u,required:!0})]}),pe(me,{sx:{mb:1},children:[M(De,{variant:"body2",component:"label",htmlFor:"password",sx:{display:"block",fontWeight:500,color:"grey.700",mb:.5},children:o("login.passwordLabel")}),M(fo,{fullWidth:!0,id:"password",name:"password",type:"password",value:i.formData.password,disabled:i.loading,onChange:g=>p({password:g.target.value}),error:!!i.errors.password,helperText:i.errors.password,autoComplete:"current-password",placeholder:o("login.passwordPlaceholder"),required:!0})]}),i.config.loginActions?.includes("forgotPassword")&&M(me,{sx:{display:"flex",justifyContent:"flex-end",alignItems:"center"},children:M(mo,{sx:{cursor:"pointer"},onClick:()=>{e?.("forgotPassword",i.searchParams)},variant:"body2",color:"secondary",children:o("login.forgotPasswordLink")})}),M(tr,{disabled:i.loading,type:"submit",fullWidth:!0,variant:"contained",color:"primary",sx:{mt:1,mb:2},children:i.loading?M(nr,{size:20}):o("login.loginButton")})]}),M(me,{children:i.errors.global&&i.errors.global.length>0&&i.errors.global.map((g,S)=>M(ir,{variant:"filled",sx:{mt:2},severity:"error",children:M("div",{children:g})},S))}),i.config.loginActions?.includes("createUser")&&pe(De,{variant:"body2",align:"center",sx:{color:"text.secondary",mt:3},children:[o("login.noAccountPrompt")," ",M(mo,{sx:{cursor:"pointer"},onClick:()=>{let S=`/public/users/create${Object.keys(i.searchParams).length>0?`?${new URLSearchParams(i.searchParams).toString()}`:""}`;t?.(S)},fontWeight:"medium",color:"secondary",children:o("login.signUpLink")})]})]})},po=sr;import{useState as ie}from"react";import{Typography as se,TextField as lr,Button as go,Box as Z,CircularProgress as cr,Alert as dr,Link as _e}from"@mui/material";import{Fragment as yo,jsx as B,jsxs as te}from"react/jsx-runtime";var ur=({onScreenChange:e,onError:t})=>{let{crudify:s}=q(),[a,m]=ie(""),[n,i]=ie(!1),[p,l]=ie([]),[y,c]=ie(null),[x,d]=ie(!1),[o,r]=ie(!1),{t:u}=U(),C=v=>{let E=[`errors.auth.${v.code}`,`errors.data.${v.code}`,`errors.system.${v.code}`,`errors.${v.code}`,`forgotPassword.${v.code.toLowerCase()}`];for(let g of E){let S=u(g);if(S!==g)return S}return v.message||u("error.unknown")},P=v=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v),f=async()=>{if(!(n||!s)){if(l([]),c(null),!a){c(u("forgotPassword.emailRequired"));return}if(!P(a)){c(u("forgotPassword.invalidEmail"));return}i(!0);try{let v=[{operation:"requestPasswordReset",data:{email:a}}],E=await s.transaction(v);if(E.success)E.data&&E.data.existingCodeValid?r(!0):d(!0);else{let S=z(E).map(C);l(S)}}catch(v){let g=z(v).map(C);l(g),t&&t(g.join(", "))}finally{i(!1)}}},h=()=>{e?.("login")},w=()=>{if(x||o){e?.("checkCode",{email:a});return}if(!a){c(u("forgotPassword.emailRequired"));return}if(!P(a)){c(u("forgotPassword.invalidEmail"));return}e?.("checkCode",{email:a})};return x||o?B(yo,{children:te(Z,{sx:{width:"100%",display:"flex",flexDirection:"column",gap:2,textAlign:"center"},children:[te(Z,{sx:{mb:2},children:[B(se,{variant:"h5",component:"h1",sx:{mb:1,fontWeight:600},children:u(o?"forgotPassword.codeAlreadyExistsMessage":"forgotPassword.emailSentMessage")}),B(se,{variant:"body2",sx:{color:o?"success.main":"grey.600"},children:u("forgotPassword.checkEmailInstructions")})]}),B(go,{type:"button",onClick:w,fullWidth:!0,variant:"contained",color:"primary",sx:{mt:2,mb:2},children:u("forgotPassword.enterCodeLink")}),B(Z,{sx:{display:"flex",justifyContent:"center",alignItems:"center"},children:B(_e,{sx:{cursor:"pointer"},onClick:h,variant:"body2",color:"secondary",children:u("common.back")})})]})}):te(yo,{children:[te(Z,{component:"form",noValidate:!0,sx:{width:"100%",display:"flex",flexDirection:"column",gap:2},children:[te(Z,{sx:{mb:2},children:[B(se,{variant:"h5",component:"h1",sx:{mb:1,fontWeight:600},children:u("forgotPassword.title")}),B(se,{variant:"body2",sx:{color:"grey.600"},children:u("forgotPassword.instructions")})]}),te(Z,{sx:{mb:1},children:[B(se,{variant:"body2",component:"label",htmlFor:"email",sx:{display:"block",fontWeight:500,color:"grey.700",mb:.5},children:u("forgotPassword.emailLabel")}),B(lr,{fullWidth:!0,id:"email",name:"email",type:"email",value:a,disabled:n,onChange:v=>m(v.target.value),error:!!y,helperText:y,autoComplete:"email",placeholder:u("forgotPassword.emailPlaceholder"),required:!0})]}),B(go,{disabled:n,type:"button",onClick:f,fullWidth:!0,variant:"contained",color:"primary",sx:{mt:2,mb:2},children:n?B(cr,{size:20}):u("forgotPassword.sendCodeButton")}),te(Z,{sx:{display:"flex",justifyContent:"center",alignItems:"center",gap:2},children:[B(_e,{sx:{cursor:"pointer"},onClick:h,variant:"body2",color:"secondary",children:u("common.back")}),B(se,{variant:"body2",sx:{color:"grey.400"},children:"\u2022"}),B(_e,{sx:{cursor:"pointer"},onClick:w,variant:"body2",color:"secondary",children:u("login.alreadyHaveCodeLink")})]})]}),B(Z,{children:p.length>0&&p.map((v,E)=>B(dr,{variant:"filled",sx:{mt:2},severity:"error",children:v},E))})]})},xo=ur;import{useState as V,useEffect as ho}from"react";import{Typography as Ee,TextField as bo,Button as fr,Box as ee,CircularProgress as wo,Alert as Co,Link as mr}from"@mui/material";import{Fragment as gr,jsx as F,jsxs as ge}from"react/jsx-runtime";var pr=({onScreenChange:e,onError:t,searchParams:s,onResetSuccess:a})=>{let{crudify:m}=q(),[n,i]=V(""),[p,l]=V(""),[y,c]=V(!1),[x,d]=V([]),[o,r]=V(null),[u,C]=V(null),[P,f]=V(""),[h,w]=V(""),[v,E]=V(!1),[g,S]=V(!0),[J,de]=V(!1),[we,Be]=V(null),[No,Ye]=V(!1),{t:I}=U(),Ce=T=>{let k=[`errors.auth.${T.code}`,`errors.data.${T.code}`,`errors.system.${T.code}`,`errors.${T.code}`,`resetPassword.${T.code.toLowerCase()}`];for(let O of k){let N=I(O);if(N!==O)return N}return T.message||I("error.unknown")},Pe=T=>s?s instanceof URLSearchParams?s.get(T):s[T]||null:null;ho(()=>{if(s){if(s){let T=Pe("fromCodeVerification"),k=Pe("email"),O=Pe("code");if(T==="true"&&k&&O){f(k),w(O),E(!0),de(!0),S(!1);return}let N=Pe("link");if(N)try{let $=decodeURIComponent(N),[H,ue]=$.split("/");if(H&&ue&&H.length===6){w(H),f(ue),E(!1),Be({email:ue,code:H});return}}catch{}if(k&&O){f(k),w(O),E(!1),Be({email:k,code:O});return}}d([I("resetPassword.invalidCode")]),S(!1),setTimeout(()=>e?.("forgotPassword"),3e3)}},[s,m,I,e]),ho(()=>{m&&we&&!No&&(Ye(!0),(async(k,O)=>{try{let N=[{operation:"validatePasswordResetCode",data:{email:k,codePassword:O}}],$=await m.transaction(N);if($.data&&Array.isArray($.data)){let H=$.data[0];if(H&&H.response&&H.response.status==="OK"){de(!0);return}}if($.success)de(!0);else{let ue=z($).map(Ce);d(ue),setTimeout(()=>e?.("forgotPassword"),3e3)}}catch(N){let H=z(N).map(Ce);d(H),setTimeout(()=>e?.("forgotPassword"),3e3)}finally{S(!1),Be(null),Ye(!1)}})(we.email,we.code))},[m,we,I,e]);let Vo=T=>T.length<8?I("resetPassword.passwordTooShort"):null,Wo=async()=>{if(y||!m)return;d([]),r(null),C(null);let T=!1;if(!n)r(I("resetPassword.newPasswordRequired")),T=!0;else{let k=Vo(n);k&&(r(k),T=!0)}if(p?n!==p&&(C(I("resetPassword.passwordsDoNotMatch")),T=!0):(C(I("resetPassword.confirmPasswordRequired")),T=!0),!T){c(!0);try{let k=[{operation:"validateAndResetPassword",data:{email:P,codePassword:h,newPassword:n}}],O=await m.transaction(k);if(O.success)d([]),setTimeout(()=>{a?.()},1e3);else{let $=z(O).map(Ce);d($)}}catch(k){let N=z(k).map(Ce);d(N),t&&t(N.join(", "))}c(!1)}},Uo=()=>{v?e?.("checkCode",{email:P}):e?.("forgotPassword")};return g?F(ee,{sx:{display:"flex",justifyContent:"center",alignItems:"center",minHeight:"300px"},children:F(wo,{})}):J?ge(gr,{children:[ge(ee,{component:"form",noValidate:!0,sx:{width:"100%",display:"flex",flexDirection:"column",gap:2},children:[ge(ee,{sx:{mb:2},children:[F(Ee,{variant:"h5",component:"h1",sx:{mb:1,fontWeight:600},children:I("resetPassword.title")}),F(Ee,{variant:"body2",sx:{color:"grey.600"},children:I("resetPassword.instructions")})]}),ge(ee,{sx:{mb:1},children:[F(Ee,{variant:"body2",component:"label",htmlFor:"newPassword",sx:{display:"block",fontWeight:500,color:"grey.700",mb:.5},children:I("resetPassword.newPasswordLabel")}),F(bo,{fullWidth:!0,id:"newPassword",name:"newPassword",type:"password",value:n,disabled:y,onChange:T=>i(T.target.value),error:!!o,helperText:o,autoComplete:"new-password",placeholder:I("resetPassword.newPasswordPlaceholder"),required:!0})]}),ge(ee,{sx:{mb:1},children:[F(Ee,{variant:"body2",component:"label",htmlFor:"confirmPassword",sx:{display:"block",fontWeight:500,color:"grey.700",mb:.5},children:I("resetPassword.confirmPasswordLabel")}),F(bo,{fullWidth:!0,id:"confirmPassword",name:"confirmPassword",type:"password",value:p,disabled:y,onChange:T=>l(T.target.value),error:!!u,helperText:u,autoComplete:"new-password",placeholder:I("resetPassword.confirmPasswordPlaceholder"),required:!0})]}),F(fr,{disabled:y,type:"button",onClick:Wo,fullWidth:!0,variant:"contained",color:"primary",sx:{mt:2,mb:2},children:y?F(wo,{size:20}):I("resetPassword.resetPasswordButton")}),F(ee,{sx:{display:"flex",justifyContent:"center",alignItems:"center"},children:F(mr,{sx:{cursor:"pointer"},onClick:Uo,variant:"body2",color:"secondary",children:I("common.back")})})]}),F(ee,{children:x.length>0&&x.map((T,k)=>F(Co,{variant:"filled",sx:{mt:2},severity:"error",children:T},k))})]}):F(ee,{children:x.length>0&&x.map((T,k)=>F(Co,{variant:"filled",sx:{mt:2},severity:"error",children:T},k))})},Po=pr;import{useState as ye,useEffect as yr}from"react";import{Typography as Oe,TextField as xr,Button as hr,Box as xe,CircularProgress as br,Alert as wr,Link as Cr}from"@mui/material";import{Fragment as vr,jsx as G,jsxs as Se}from"react/jsx-runtime";var Pr=({onScreenChange:e,onError:t,searchParams:s})=>{let{crudify:a}=q(),[m,n]=ye(""),[i,p]=ye(!1),[l,y]=ye([]),[c,x]=ye(null),[d,o]=ye(""),{t:r}=U(),u=w=>s?s instanceof URLSearchParams?s.get(w):s[w]||null:null,C=w=>{let v=[`errors.auth.${w.code}`,`errors.data.${w.code}`,`errors.system.${w.code}`,`errors.${w.code}`,`checkCode.${w.code.toLowerCase()}`];for(let E of v){let g=r(E);if(g!==E)return g}return w.message||r("error.unknown")};yr(()=>{let w=u("email");w?o(w):e?.("forgotPassword")},[s,e]);let P=async()=>{if(!(i||!a)){if(y([]),x(null),!m){x(r("checkCode.codeRequired"));return}if(m.length!==6){x(r("checkCode.codeRequired"));return}p(!0);try{let w=[{operation:"validatePasswordResetCode",data:{email:d,codePassword:m}}],v=await a.transaction(w);if(v.success)e?.("resetPassword",{email:d,code:m,fromCodeVerification:"true"});else{let g=z(v).map(C);y(g),p(!1)}}catch(w){let E=z(w).map(C);y(E),p(!1),t&&t(E.join(", "))}}},f=()=>{e?.("forgotPassword")},h=w=>{let v=w.target.value.replace(/\D/g,"").slice(0,6);n(v)};return Se(vr,{children:[Se(xe,{component:"form",noValidate:!0,sx:{width:"100%",display:"flex",flexDirection:"column",gap:2},children:[Se(xe,{sx:{mb:2},children:[G(Oe,{variant:"h5",component:"h1",sx:{mb:1,fontWeight:600},children:r("checkCode.title")}),G(Oe,{variant:"body2",sx:{color:"grey.600"},children:r("checkCode.instructions")})]}),Se(xe,{sx:{mb:1},children:[G(Oe,{variant:"body2",component:"label",htmlFor:"code",sx:{display:"block",fontWeight:500,color:"grey.700",mb:.5},children:r("checkCode.codeLabel")}),G(xr,{fullWidth:!0,id:"code",name:"code",type:"text",value:m,disabled:i,onChange:h,error:!!c,helperText:c,placeholder:r("checkCode.codePlaceholder"),inputProps:{maxLength:6,style:{textAlign:"center",fontSize:"1.5rem",letterSpacing:"0.4rem"}},required:!0})]}),G(hr,{disabled:i||m.length!==6,type:"button",onClick:P,fullWidth:!0,variant:"contained",color:"primary",sx:{mt:2,mb:2},children:i?G(br,{size:20}):r("checkCode.verifyButton")}),G(xe,{sx:{display:"flex",justifyContent:"center",alignItems:"center"},children:G(Cr,{sx:{cursor:"pointer"},onClick:f,variant:"body2",color:"secondary",children:r("common.back")})})]}),G(xe,{children:l.length>0&&l.map((w,v)=>G(wr,{sx:{mt:2},severity:"error",children:w},v))})]})},vo=Pr;import{Box as Tr,CircularProgress as Er,Alert as To,Typography as ze}from"@mui/material";import{Fragment as Sr,jsx as ae,jsxs as Eo}from"react/jsx-runtime";var So=({children:e,fallback:t})=>{let{isLoading:s,error:a,isInitialized:m}=q(),{t:n}=U();return s?t||Eo(Tr,{sx:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",minHeight:"200px",gap:2},children:[ae(Er,{}),ae(ze,{variant:"body2",color:"text.secondary",children:n("login.initializing")!=="login.initializing"?n("login.initializing"):"Initializing..."})]}):a?ae(To,{severity:"error",sx:{mt:2},children:Eo(ze,{variant:"body2",children:[n("login.initializationError")!=="login.initializationError"?n("login.initializationError"):"Initialization error",":"," ",a]})}):m?ae(Sr,{children:e}):ae(To,{severity:"warning",sx:{mt:2},children:ae(ze,{variant:"body2",children:n("login.notInitialized")!=="login.notInitialized"?n("login.notInitialized"):"System not initialized"})})};import{jsx as K,jsxs as Ir}from"react/jsx-runtime";var Rr=({onScreenChange:e,onExternalNavigate:t,onLoginSuccess:s,onError:a,redirectUrl:m="/"})=>{let{t:n}=U(),{state:i,setScreen:p}=Te(),{config:l}=Q(),{showNotification:y}=Qe(),c=(d,o)=>{let r=o;d==="login"?r={}:d==="forgotPassword"&&!o&&(r={}),p(d,r),e?.(d,r)},x=()=>{let d={onScreenChange:c,onExternalNavigate:t,onError:a,redirectUrl:m};switch(i.currentScreen){case"forgotPassword":return K(xo,{...d});case"checkCode":return K(vo,{...d,searchParams:i.searchParams});case"resetPassword":return K(Po,{...d,searchParams:i.searchParams,onResetSuccess:()=>{let o=n("resetPassword.successMessage");y(o,"success"),c("login")}});default:return K(po,{...d,onLoginSuccess:s})}};return Ir(So,{children:[K(kr,{sx:{display:"flex",justifyContent:"center",mb:3},children:K("img",{src:l.logo||"https://logos.crudia.com/nocios-default.png",alt:n("login.logoAlt"),style:{width:"100%",maxWidth:"150px",height:"auto"},onError:d=>{let o=d.target;o.src="https://logos.crudia.com/nocios-default.png"}})}),!l.logo&&l.appName&&K(Lr,{variant:"h6",component:"h1",sx:{textAlign:"center",mb:2},children:l.appName}),x()]})},Ar=({translations:e,translationsUrl:t,language:s="en",initialScreen:a="login",autoReadFromCookies:m=!0,...n})=>{let{config:i}=Q();return K(no,{translations:e,translationsUrl:t,language:s,children:K(so,{config:i,children:K(uo,{config:i,initialScreen:a,autoReadFromCookies:m,children:K(Rr,{...n})})})})},Wn=Ar;import{Box as W,Card as ko,CardContent as Lo,Typography as j,Chip as ke,Avatar as Br,Divider as Fr,CircularProgress as Dr,Alert as Ro,List as _r,ListItem as Ne,ListItemText as Ve,ListItemIcon as Or,Collapse as zr,IconButton as We}from"@mui/material";import{Person as Nr,Email as Vr,Badge as Wr,Security as Ur,Schedule as Mr,AccountCircle as $r,ExpandMore as Hr,ExpandLess as Kr,Info as jr}from"@mui/icons-material";import{useState as qr}from"react";import{Fragment as Jr,jsx as b,jsxs as L}from"react/jsx-runtime";var Gr=({showExtendedData:e=!0,showProfileCard:t=!0,autoRefresh:s=!0})=>{let{userProfile:a,loading:m,error:n,extendedData:i,refreshProfile:p}=Ze({autoFetch:s,retryOnError:!0,maxRetries:3}),[l,y]=qr(!1);if(m)return L(W,{display:"flex",justifyContent:"center",alignItems:"center",p:3,children:[b(Dr,{}),b(j,{variant:"body2",sx:{ml:2},children:"Cargando perfil de usuario..."})]});if(n)return L(Ro,{severity:"error",action:b(We,{color:"inherit",size:"small",onClick:p,children:b(j,{variant:"caption",children:"Reintentar"})}),children:["Error al cargar el perfil: ",n]});if(!a)return b(Ro,{severity:"warning",children:"No se encontr\xF3 informaci\xF3n del usuario"});let c=i?.displayData||{},x=i?.totalFields||0,d=f=>{if(!f)return"No disponible";try{return new Date(f).toLocaleString("es-ES",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return f}},o=(f,h)=>h==null?"No disponible":typeof h=="boolean"?h?"S\xED":"No":Array.isArray(h)?h.length>0?h.join(", "):"Ninguno":typeof h=="object"?JSON.stringify(h,null,2):String(h),r=[{key:"id",label:"ID",icon:b(Wr,{})},{key:"email",label:"Email",icon:b(Vr,{})},{key:"username",label:"Usuario",icon:b(Nr,{})},{key:"fullName",label:"Nombre completo",icon:b($r,{})},{key:"role",label:"Rol",icon:b(Ur,{})}],u=[{key:"firstName",label:"Nombre"},{key:"lastName",label:"Apellido"},{key:"isActive",label:"Activo"},{key:"lastLogin",label:"\xDAltimo login"},{key:"createdAt",label:"Creado"},{key:"updatedAt",label:"Actualizado"}],C=[...r.map(f=>f.key),...u.map(f=>f.key),"permissions"],P=Object.keys(c).filter(f=>!C.includes(f)).map(f=>({key:f,label:f}));return L(W,{children:[t&&b(ko,{sx:{mb:2},children:L(Lo,{children:[L(W,{display:"flex",alignItems:"center",mb:2,children:[b(Br,{src:c.avatar,sx:{width:56,height:56,mr:2},children:c.fullName?.[0]||c.username?.[0]||c.email?.[0]}),L(W,{children:[b(j,{variant:"h6",children:c.fullName||c.username||c.email}),b(j,{variant:"body2",color:"text.secondary",children:c.role||"Usuario"}),c.isActive!==void 0&&b(ke,{label:c.isActive?"Activo":"Inactivo",color:c.isActive?"success":"error",size:"small",sx:{mt:.5}})]})]}),b(W,{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(250px, 1fr))",gap:2,children:r.map(({key:f,label:h,icon:w})=>c[f]?L(W,{display:"flex",alignItems:"center",children:[b(W,{sx:{mr:1,color:"text.secondary"},children:w}),L(W,{children:[b(j,{variant:"caption",color:"text.secondary",children:h}),b(j,{variant:"body2",children:o(f,c[f])})]})]},f):null)}),c.permissions&&Array.isArray(c.permissions)&&c.permissions.length>0&&L(W,{mt:2,children:[b(j,{variant:"caption",color:"text.secondary",display:"block",children:"Permisos"}),L(W,{display:"flex",flexWrap:"wrap",gap:.5,mt:.5,children:[c.permissions.slice(0,5).map((f,h)=>b(ke,{label:f,size:"small",variant:"outlined"},h)),c.permissions.length>5&&b(ke,{label:`+${c.permissions.length-5} m\xE1s`,size:"small"})]})]})]})}),e&&b(ko,{children:L(Lo,{children:[L(W,{display:"flex",justifyContent:"space-between",alignItems:"center",mb:2,children:[L(j,{variant:"h6",display:"flex",alignItems:"center",children:[b(jr,{sx:{mr:1}}),"Informaci\xF3n Detallada"]}),b(ke,{label:`${x} campos totales`,size:"small"})]}),L(_r,{dense:!0,children:[u.map(({key:f,label:h})=>c[f]!==void 0&&L(Ne,{divider:!0,children:[b(Or,{children:b(Mr,{fontSize:"small"})}),b(Ve,{primary:h,secondary:f.includes("At")||f.includes("Login")?d(c[f]):o(f,c[f])})]},f)),P.length>0&&L(Jr,{children:[b(Fr,{sx:{my:1}}),b(Ne,{children:b(Ve,{primary:L(W,{display:"flex",justifyContent:"space-between",alignItems:"center",children:[L(j,{variant:"subtitle2",children:["Campos Personalizados (",P.length,")"]}),b(We,{size:"small",onClick:()=>y(!l),children:l?b(Kr,{}):b(Hr,{})})]})})}),b(zr,{in:l,children:P.map(({key:f,label:h})=>b(Ne,{sx:{pl:4},children:b(Ve,{primary:h,secondary:o(f,c[f])})},f))})]})]}),L(W,{mt:2,display:"flex",justifyContent:"space-between",alignItems:"center",children:[L(j,{variant:"caption",color:"text.secondary",children:["\xDAltima actualizaci\xF3n: ",d(c.updatedAt)]}),b(We,{size:"small",onClick:p,disabled:m,children:b(j,{variant:"caption",children:"Actualizar"})})]})]})})]})},Yr=Gr;var Ao=["create","read","update","delete"],Io=["create","read","update","delete"];import{useRef as wt}from"react";import{useTranslation as Ct}from"react-i18next";import{Box as Re,Typography as _o,Button as Pt,Stack as vt,Alert as Oo,Divider as Tt}from"@mui/material";import{Add as Et}from"@mui/icons-material";import{forwardRef as at}from"react";import{useTranslation as lt}from"react-i18next";import{Box as ne,FormControl as ct,InputLabel as dt,Select as ut,MenuItem as ft,IconButton as mt,Typography as le,FormHelperText as pt,Stack as Le,Paper as Do,Divider as gt,Button as Ke}from"@mui/material";import{Delete as yt,SelectAll as xt,ClearAll as ht}from"@mui/icons-material";import{useState as Xr,useEffect as Qr,useRef as Zr}from"react";import{useTranslation as et}from"react-i18next";import{Box as Ue,Typography as he,Button as Bo,Stack as Me,FormHelperText as Fo,ToggleButton as $e,ToggleButtonGroup as ot}from"@mui/material";import{CheckCircle as rt,Cancel as tt,SelectAll as nt,ClearAll as it}from"@mui/icons-material";import{jsx as D,jsxs as oe}from"react/jsx-runtime";var st=({value:e,onChange:t,availableFields:s,error:a,disabled:m=!1})=>{let{t:n}=et(),[i,p]=Xr("custom"),l=Zr(!1);Qr(()=>{let o=e||{allow:[],owner_allow:[],deny:[]},r=new Set(s),u=(o.allow||[]).filter(h=>r.has(h)),C=(o.owner_allow||[]).filter(h=>r.has(h)),P=(o.deny||[]).filter(h=>r.has(h));s.forEach(h=>{!u.includes(h)&&!C.includes(h)&&!P.includes(h)&&P.push(h)});let f={allow:u,owner_allow:C,deny:P};JSON.stringify(f)!==JSON.stringify(o)&&t(f),u.length===s.length?p("all"):P.length===s.length?p("none"):p("custom")},[s,e]);let y=()=>{l.current=!0,t({allow:[...s],owner_allow:[],deny:[]}),p("all"),setTimeout(()=>{l.current=!1},0)},c=()=>{l.current=!0,t({allow:[],owner_allow:[],deny:[...s]}),p("none"),setTimeout(()=>{l.current=!1},0)},x=o=>e?.allow?.includes(o)?"allow":e?.owner_allow?.includes(o)?"owner_allow":"deny",d=(o,r)=>{l.current=!0;let u=new Set(e?.allow||[]),C=new Set(e?.owner_allow||[]),P=new Set(e?.deny||[]);u.delete(o),C.delete(o),P.delete(o),r==="allow"&&u.add(o),r==="owner_allow"&&C.add(o),r==="deny"&&P.add(o),t({allow:Array.from(u),owner_allow:Array.from(C),deny:Array.from(P)}),p("custom"),setTimeout(()=>{l.current=!1},0)};return s.length===0?oe(Ue,{children:[D(he,{variant:"body2",color:"text.secondary",sx:{mb:1},children:n("modules.form.publicPolicies.fields.conditions.label")}),D(he,{variant:"body2",color:"text.secondary",sx:{fontStyle:"italic"},children:n("modules.form.publicPolicies.fields.conditions.noFieldsAvailable")}),a&&D(Fo,{error:!0,sx:{mt:1},children:a})]}):oe(Ue,{children:[D(he,{variant:"body2",color:"text.secondary",sx:{mb:2},children:n("modules.form.publicPolicies.fields.conditions.label")}),oe(Me,{direction:"row",spacing:1,sx:{mb:3},children:[D(Bo,{variant:i==="all"?"contained":"outlined",startIcon:D(nt,{}),onClick:y,disabled:m,size:"small",sx:{minWidth:120,...i==="all"&&{backgroundColor:"#16a34a","&:hover":{backgroundColor:"#15803d"}}},children:n("modules.form.publicPolicies.fields.conditions.allFields")}),D(Bo,{variant:i==="none"?"contained":"outlined",startIcon:D(it,{}),onClick:c,disabled:m,size:"small",sx:{minWidth:120,...i==="none"&&{backgroundColor:"#cf222e","&:hover":{backgroundColor:"#bc1f2c"}}},children:n("modules.form.publicPolicies.fields.conditions.noFields")})]}),oe(Ue,{sx:{p:2,border:"1px solid #d1d9e0",borderRadius:1,backgroundColor:"#f6f8fa"},children:[D(he,{variant:"body2",color:"text.secondary",sx:{mb:2},children:n("modules.form.publicPolicies.fields.conditions.help")}),D(Me,{spacing:1,children:s.map(o=>{let r=x(o);return oe(Me,{direction:"row",spacing:1,alignItems:"center",children:[D(he,{variant:"body2",sx:{minWidth:100,fontFamily:"monospace"},children:o}),oe(ot,{value:r,exclusive:!0,size:"small",children:[oe($e,{value:"allow",onClick:()=>d(o,"allow"),disabled:m,sx:{px:2,color:r==="allow"?"#ffffff":"#6b7280",backgroundColor:r==="allow"?"#16a34a":"#f3f4f6",borderColor:r==="allow"?"#16a34a":"#d1d5db","&:hover":{backgroundColor:r==="allow"?"#15803d":"#e5e7eb",borderColor:r==="allow"?"#15803d":"#9ca3af"},"&.Mui-selected":{backgroundColor:"#16a34a",color:"#ffffff","&:hover":{backgroundColor:"#15803d"}}},children:[D(rt,{sx:{fontSize:16,mr:.5}}),n("modules.form.publicPolicies.fields.conditions.states.allow")]}),D($e,{value:"owner_allow",onClick:()=>d(o,"owner_allow"),disabled:m,sx:{px:2,color:r==="owner_allow"?"#ffffff":"#6b7280",backgroundColor:r==="owner_allow"?"#0ea5e9":"#f3f4f6",borderColor:r==="owner_allow"?"#0ea5e9":"#d1d5db","&:hover":{backgroundColor:r==="owner_allow"?"#0284c7":"#e5e7eb",borderColor:r==="owner_allow"?"#0284c7":"#9ca3af"},"&.Mui-selected":{backgroundColor:"#0ea5e9",color:"#ffffff","&:hover":{backgroundColor:"#0284c7"}}},children:n("modules.form.publicPolicies.fields.conditions.states.ownerAllow")}),oe($e,{value:"deny",onClick:()=>d(o,"deny"),disabled:m,sx:{px:2,color:r==="deny"?"#ffffff":"#6b7280",backgroundColor:r==="deny"?"#dc2626":"#f3f4f6",borderColor:r==="deny"?"#dc2626":"#d1d5db","&:hover":{backgroundColor:r==="deny"?"#b91c1c":"#e5e7eb",borderColor:r==="deny"?"#b91c1c":"#9ca3af"},"&.Mui-selected":{backgroundColor:"#dc2626",color:"#ffffff","&:hover":{backgroundColor:"#b91c1c"}}},children:[D(tt,{sx:{fontSize:16,mr:.5}}),n("modules.form.publicPolicies.fields.conditions.states.deny")]})]})]},o)})})]}),a&&D(Fo,{error:!0,sx:{mt:1},children:a})]})},He=st;import{jsx as A,jsxs as _}from"react/jsx-runtime";var bt=at(({policy:e,onChange:t,onRemove:s,availableFields:a,isSubmitting:m=!1,usedActions:n,error:i},p)=>{let{t:l}=lt(),y=new Set(Array.from(n||[]));y.delete(e.action);let c=Ao.map(x=>({value:x,label:l(`modules.form.publicPolicies.fields.action.options.${x}`)}));return _(Do,{ref:p,sx:{p:3,border:"1px solid #d1d9e0",borderRadius:2,position:"relative",backgroundColor:"#ffffff"},children:[_(ne,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",mb:3},children:[A(le,{variant:"subtitle1",sx:{fontWeight:600,color:"#111418",fontSize:"1rem"},children:l("modules.form.publicPolicies.policyTitle")}),A(mt,{onClick:s,size:"small",disabled:m,"aria-label":l("modules.form.publicPolicies.removePolicy"),sx:{color:"#656d76","&:hover":{color:"#cf222e",backgroundColor:"rgba(207, 34, 46, 0.1)"}},children:A(yt,{})})]}),_(Le,{spacing:3,children:[A(Le,{direction:{xs:"column",md:"row"},spacing:2,children:A(ne,{sx:{flex:1,minWidth:200},children:_(ct,{fullWidth:!0,children:[A(dt,{children:l("modules.form.publicPolicies.fields.action.label")}),A(ut,{value:e.action,label:l("modules.form.publicPolicies.fields.action.label"),disabled:m,onChange:x=>{let d=x.target.value,o={...e,action:d};d==="delete"?(o.permission="deny",delete o.fields):(o.fields={allow:[],owner_allow:[],deny:a},delete o.permission),t(o)},sx:{backgroundColor:"#ffffff","&:hover .MuiOutlinedInput-notchedOutline":{borderColor:"#8c959f"},"&.Mui-focused .MuiOutlinedInput-notchedOutline":{borderColor:"#0969da",borderWidth:2}},children:c.map(x=>{let d=y.has(x.value);return A(ft,{value:x.value,disabled:d,children:x.label},x.value)})}),i&&A(pt,{error:!0,children:i})]})})}),e.action==="delete"?_(ne,{children:[A(le,{variant:"body2",color:"text.secondary",sx:{mb:2},children:l("modules.form.publicPolicies.fields.conditions.label")}),_(Le,{direction:"row",spacing:1,sx:{mb:3},children:[A(Ke,{variant:e.permission==="*"?"contained":"outlined",startIcon:A(xt,{}),onClick:()=>t({...e,permission:"*"}),disabled:m,size:"small",sx:{minWidth:140,whiteSpace:"nowrap",...e.permission==="*"&&{backgroundColor:"#16a34a","&:hover":{backgroundColor:"#15803d"}}},children:l("modules.form.publicPolicies.fields.conditions.allFields")}),A(Ke,{variant:e.permission==="owner"?"contained":"outlined",onClick:()=>t({...e,permission:"owner"}),disabled:m,size:"small",sx:{minWidth:140,whiteSpace:"nowrap",...e.permission==="owner"&&{backgroundColor:"#0ea5e9","&:hover":{backgroundColor:"#0284c7"}}},children:l("modules.form.publicPolicies.fields.conditions.states.ownerAllow")}),A(Ke,{variant:e.permission==="deny"?"contained":"outlined",startIcon:A(ht,{}),onClick:()=>t({...e,permission:"deny"}),disabled:m,size:"small",sx:{minWidth:140,whiteSpace:"nowrap",...e.permission==="deny"&&{backgroundColor:"#cf222e","&:hover":{backgroundColor:"#bc1f2c"}}},children:l("modules.form.publicPolicies.fields.conditions.noFields")})]})]}):A(He,{value:e.fields||{allow:[],owner_allow:[],deny:[]},onChange:x=>t({...e,fields:x}),availableFields:a,disabled:m}),A(Do,{variant:"outlined",sx:{p:2,backgroundColor:"#f9fafb"},children:e.action==="delete"?_(le,{variant:"body2",sx:{fontFamily:"monospace",color:"text.secondary"},children:[_(ne,{component:"span",sx:{color:e.permission==="*"?"#16a34a":e.permission==="owner"?"#0ea5e9":"#dc2626"},children:[l("modules.form.publicPolicies.fields.conditions.states.allow"),":"]})," ",e.permission||"-"]}):_(Le,{spacing:.5,divider:A(gt,{sx:{borderColor:"#e5e7eb"}}),children:[_(le,{variant:"body2",sx:{fontFamily:"monospace",color:"text.secondary"},children:[_(ne,{component:"span",sx:{color:"#16a34a"},children:[l("modules.form.publicPolicies.fields.conditions.states.allow"),":"]})," ",(e?.fields?.allow||[]).join(", ")||"-"]}),_(le,{variant:"body2",sx:{fontFamily:"monospace",color:"text.secondary"},children:[_(ne,{component:"span",sx:{color:"#0ea5e9"},children:[l("modules.form.publicPolicies.fields.conditions.states.ownerAllow"),":"]})," ",(e?.fields?.owner_allow||[]).join(", ")||"-"]}),_(le,{variant:"body2",sx:{fontFamily:"monospace",color:"text.secondary"},children:[_(ne,{component:"span",sx:{color:"#dc2626"},children:[l("modules.form.publicPolicies.fields.conditions.states.deny"),":"]})," ",(e?.fields?.deny||[]).join(", ")||"-"]})]})})]})]})}),je=bt;import{Fragment as Lt,jsx as Y,jsxs as Ae}from"react/jsx-runtime";var St=()=>{let e=globalThis?.crypto;return e&&typeof e.randomUUID=="function"?e.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`},kt=({policies:e,onChange:t,availableFields:s,errors:a,isSubmitting:m=!1})=>{let{t:n}=Ct(),i=wt({}),p=new Set((e||[]).map(r=>r.action).filter(Boolean)),l=Io.filter(r=>!p.has(r)),y=l.length>0,c=()=>{let r=l[0]||"create",u={id:St(),action:r};r==="delete"?u.permission="deny":u.fields={allow:[],owner_allow:[],deny:s};let C=[...e||[],u];t(C),setTimeout(()=>{let P=C.length-1,f=i.current[P];f&&f.scrollIntoView({behavior:"smooth",block:"center"})},100)},x=r=>{let u=[...e];u.splice(r,1),t(u)},d=(()=>{if(!a)return null;if(typeof a=="string")return a;let r=a._error;return typeof r=="string"?r:null})(),o=new Set((e||[]).map(r=>r.action));return Ae(Lt,{children:[Y(Tt,{sx:{borderColor:"#e0e4e7"}}),Ae(Re,{children:[Y(Re,{display:"flex",justifyContent:"space-between",alignItems:"center",mb:3,children:Ae(Re,{children:[Y(_o,{variant:"h6",sx:{fontWeight:600,color:"#111418",mb:1},children:n("modules.form.publicPolicies.title")}),Y(_o,{variant:"body2",color:"text.secondary",sx:{fontSize:"0.875rem"},children:n("modules.form.publicPolicies.description")})]})}),d&&Y(Oo,{severity:"error",sx:{mb:3},children:d}),Ae(vt,{spacing:3,children:[(e||[]).length===0?Y(Oo,{severity:"info",children:n("modules.form.publicPolicies.noPolicies")}):e.map((r,u)=>Y(je,{ref:C=>{i.current[u]=C},policy:r,onChange:C=>{let P=[...e];P[u]=C,t(P)},onRemove:()=>x(u),availableFields:s,isSubmitting:m,usedActions:o,error:typeof a=="object"&&a&&r.id in a?a[r.id]:void 0},r.id)),y&&Y(Re,{children:Y(Pt,{type:"button",variant:"outlined",startIcon:Y(Et,{}),onClick:c,disabled:m,sx:{borderColor:"#d0d7de",color:"#656d76","&:hover":{borderColor:"#8c959f",backgroundColor:"transparent"}},children:n("modules.form.publicPolicies.addPolicy")})})]})]})]})},Ti=kt;import{useState as qe}from"react";import{Button as Ie,TextField as zo,Box as ce,Alert as be,Typography as re,CircularProgress as Ge}from"@mui/material";import{jsx as R,jsxs as X}from"react/jsx-runtime";function Ii(){let[e,t]=qe(""),[s,a]=qe(""),[m,n]=qe(!1),{isAuthenticated:i,isLoading:p,error:l,login:y,logout:c,refreshTokens:x,clearError:d,isExpiringSoon:o,expiresIn:r}=Q(),u=async f=>{if(f.preventDefault(),!e||!s)return;(await y(e,s)).success&&(t(""),a(""),n(!1))},C=async()=>{await c()},P=async()=>{await x()};return i?X(ce,{sx:{maxWidth:600,mx:"auto",p:3},children:[R(re,{variant:"h4",gutterBottom:!0,children:"Welcome! \u{1F389}"}),R(be,{severity:"success",sx:{mb:3},children:"You are successfully logged in with Refresh Token Pattern enabled"}),X(ce,{sx:{mb:3,p:2,bgcolor:"background.paper",border:1,borderColor:"divider",borderRadius:1},children:[R(re,{variant:"h6",gutterBottom:!0,children:"Token Status"}),X(re,{variant:"body2",color:"text.secondary",children:["Access Token expires in: ",Math.round(r/1e3/60)," minutes"]}),o&&R(be,{severity:"warning",sx:{mt:1},children:"Token expires soon - automatic refresh will happen"})]}),X(ce,{sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[R(Ie,{variant:"contained",onClick:P,disabled:p,startIcon:p?R(Ge,{size:16}):null,children:"Refresh Tokens"}),R(Ie,{variant:"outlined",color:"error",onClick:C,disabled:p,children:"Logout"})]}),l&&R(be,{severity:"error",sx:{mt:2},onClose:d,children:l})]}):X(ce,{sx:{maxWidth:400,mx:"auto",p:3},children:[R(re,{variant:"h4",gutterBottom:!0,align:"center",children:"Login with Refresh Tokens"}),R(be,{severity:"info",sx:{mb:3},children:"This demo shows the new Refresh Token Pattern with automatic session management"}),m?X("form",{onSubmit:u,children:[R(zo,{fullWidth:!0,label:"Email",type:"email",value:e,onChange:f=>t(f.target.value),margin:"normal",required:!0,autoComplete:"email"}),R(zo,{fullWidth:!0,label:"Password",type:"password",value:s,onChange:f=>a(f.target.value),margin:"normal",required:!0,autoComplete:"current-password"}),R(Ie,{type:"submit",fullWidth:!0,variant:"contained",size:"large",disabled:p,startIcon:p?R(Ge,{size:16}):null,sx:{mt:3,mb:2},children:p?"Logging in...":"Login"})]}):R(Ie,{fullWidth:!0,variant:"contained",size:"large",onClick:()=>n(!0),sx:{mt:2},children:"Show Login Form"}),l&&R(be,{severity:"error",sx:{mt:2},onClose:d,children:l})]})}function Bi(){let{isAuthenticated:e,isLoading:t,isExpiringSoon:s,expiresIn:a}=Q();return t?X(ce,{sx:{display:"flex",alignItems:"center",gap:1},children:[R(Ge,{size:16}),R(re,{variant:"caption",children:"Loading session..."})]}):e?X(ce,{children:[R(re,{variant:"caption",color:"success.main",children:"\u2713 Authenticated"}),s&&X(re,{variant:"caption",color:"warning.main",display:"block",children:["\u26A0 Token expires in ",Math.round(a/1e3/60)," min"]})]}):R(re,{variant:"caption",color:"text.secondary",children:"Not logged in"})}export{Wn as a,Yr as b,Ao as c,Io as d,Ti as e,Ii as f,Bi as g};
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkCWOL4SNBjs = require('./chunk-CWOL4SNB.js');var _chunkYIIUEOXCjs = require('./chunk-YIIUEOXC.js');var _chunkAT74WV5Wjs = require('./chunk-AT74WV5W.js');var _material = require('@mui/material');var _react = require('react');var eo=(e,t)=>{let[s,a]=_react.useState.call(void 0, {}),[m,n]=_react.useState.call(void 0, !1),[i,p]=_react.useState.call(void 0, null);return _react.useEffect.call(void 0, ()=>{if(console.log("\u{1F527} [I18nProvider] Hybrid translation loading:",{hasProvidedTranslations:!!t&&Object.keys(t).length>0,hasUrl:!!e,providedKeys:t?Object.keys(t).length:0}),t&&Object.keys(t).length>0){console.log("\u2705 [I18nProvider] Using provided translations (highest priority)"),a(t),n(!1),p(null);return}if(!e){console.log("\u26A0\uFE0F [I18nProvider] No translations provided, using empty object (keys will show as-is)"),a({}),n(!1),p(null);return}console.log("\u{1F310} [I18nProvider] Loading translations from URL:",e);let l=!1;return n(!0),p(null),fetch(e).then(y=>{if(!y.ok)throw new Error(`Failed to load translations: ${y.status}`);return y.json()}).then(y=>{l||(console.log("\u2705 [I18nProvider] Translations loaded successfully from URL:",{url:e,keysLoaded:Object.keys(y).length}),a(y),n(!1))}).catch(y=>{l||(console.error("\u274C [I18nProvider] Failed to load translations from URL:",e,y),p(y.message),console.log("\u{1F504} [I18nProvider] Falling back to empty translations (keys will show as-is)"),a({}),n(!1))}),()=>{l=!0}},[e,t]),{translations:s,loading:m,error:i}};var _jsxruntime = require('react/jsx-runtime');var to=_react.createContext.call(void 0, null),Ko=(e,t)=>e&&e[t]?e[t]:t.split(".").reduce((s,a)=>s&&typeof s=="object"?s[a]:void 0,e),no=({children:e,translations:t,translationsUrl:s,language:a="en"})=>{let{translations:m,loading:n}=eo(s,t),i=_react.useMemo.call(void 0, ()=>(l,y)=>{let c=Ko(m,l);return c==null&&(console.log(`\u{1F50D} [I18nProvider] Translation not found for key: "${l}" - showing key as-is`),c=l),y&&typeof c=="string"&&Object.entries(y).forEach(([x,d])=>{c=c.replace(new RegExp(`{{${x}}}`,"g"),d)}),typeof c=="string"?c:l},[m]),p=_react.useMemo.call(void 0, ()=>({t:i,language:a}),[i,a]);return n?_jsxruntime.jsx.call(void 0, "div",{children:"Loading translations..."}):_jsxruntime.jsx.call(void 0, to.Provider,{value:p,children:e})},U=()=>{let e=_react.useContext.call(void 0, to);if(!e)throw new Error("useTranslation must be used within I18nProvider");return e};var _crudifybrowser = require('@nocios/crudify-browser'); var _crudifybrowser2 = _interopRequireDefault(_crudifybrowser);var io=_react.createContext.call(void 0, void 0),so=({config:e,children:t})=>{let[s,a]=_react.useState.call(void 0, !0),[m,n]=_react.useState.call(void 0, null),[i,p]=_react.useState.call(void 0, !1),[l,y]=_react.useState.call(void 0, "");console.log("\u{1F50D} CrudifyProvider - Received config:",e),_react.useEffect.call(void 0, ()=>{if(console.log("\u{1F50D} CrudifyProvider - useEffect - config.publicApiKey:",e.publicApiKey),console.log("\u{1F50D} CrudifyProvider - useEffect - full config:",e),!e.publicApiKey){console.log("\u274C CrudifyProvider - No publicApiKey provided, setting error"),n("No publicApiKey provided"),a(!1),p(!1);return}console.log("\u2705 CrudifyProvider - publicApiKey found, proceeding with initialization");let x=`${e.publicApiKey}-${e.env}`;if(x===l&&i){a(!1);return}(async()=>{a(!0),n(null),p(!1);try{if(_crudifybrowser2.default.config(e.env||"prod"),await _crudifybrowser2.default.init(e.publicApiKey,"none"),typeof _crudifybrowser2.default.transaction=="function"&&typeof _crudifybrowser2.default.login=="function")p(!0),y(x);else throw new Error("Crudify methods not properly initialized")}catch(o){let r=o instanceof Error?o.message:"Failed to initialize Crudify";n(r),p(!1)}finally{a(!1)}})()},[e.publicApiKey,e.env,l,i]);let c={crudify:i?_crudifybrowser2.default:null,isLoading:s,error:m,isInitialized:i};return _jsxruntime.jsx.call(void 0, io.Provider,{value:c,children:t})},q=()=>{let e=_react.useContext.call(void 0, io);if(e===void 0)throw new Error("useCrudify must be used within a CrudifyProvider");return e};var lo={currentScreen:"login",searchParams:{},formData:{username:"",password:"",email:"",code:"",newPassword:"",confirmPassword:""},loading:!1,errors:{global:[]},emailSent:!1,codeAlreadyExists:!1,codeValidated:!1,fromCodeVerification:!1,config:{}};function Zo(e,t){switch(t.type){case"SET_SCREEN":let s={...e,currentScreen:t.payload.screen,searchParams:t.payload.params||e.searchParams,errors:{global:[]}},a=new URLSearchParams(s.searchParams),m=a.toString()?`?${a.toString()}`:window.location.pathname;try{window.history.replaceState({},"",m)}catch (e2){}return s;case"SET_SEARCH_PARAMS":return{...e,searchParams:t.payload};case"UPDATE_FORM_DATA":return{...e,formData:{...e.formData,...t.payload},errors:{...e.errors,...Object.keys(t.payload).reduce((n,i)=>({...n,[i]:void 0}),{})}};case"SET_LOADING":return{...e,loading:t.payload};case"SET_ERRORS":return{...e,errors:{...e.errors,...t.payload}};case"CLEAR_ERRORS":return{...e,errors:{global:[]}};case"SET_EMAIL_SENT":return{...e,emailSent:t.payload};case"SET_CODE_ALREADY_EXISTS":return{...e,codeAlreadyExists:t.payload};case"SET_CODE_VALIDATED":return{...e,codeValidated:t.payload};case"SET_FROM_CODE_VERIFICATION":return{...e,fromCodeVerification:t.payload};case"RESET_FORM":return{...e,formData:lo.formData,errors:{global:[]},loading:!1,emailSent:!1,codeAlreadyExists:!1,codeValidated:!1,fromCodeVerification:!1};case"INIT_CONFIG":return{...e,config:t.payload};default:return e}}var co=_react.createContext.call(void 0, void 0),uo=({children:e,initialScreen:t="login",config:s,autoReadFromCookies:a=!0})=>{let[m,n]=_react.useReducer.call(void 0, Zo,{...lo,currentScreen:t});_react.useEffect.call(void 0, ()=>{n({type:"INIT_CONFIG",payload:(()=>{let o={};if(a)try{let r=_chunkAT74WV5Wjs.a.call(void 0, "logo");if(r){let u=decodeURIComponent(r);u.startsWith("http")&&(o.logo=u)}}catch(r){console.error("Error reading configuration from cookies:",r)}return{publicApiKey:_optionalChain([s, 'optionalAccess', _2 => _2.publicApiKey]),env:_optionalChain([s, 'optionalAccess', _3 => _3.env]),appName:_optionalChain([s, 'optionalAccess', _4 => _4.appName]),logo:_optionalChain([s, 'optionalAccess', _5 => _5.logo])||o.logo,loginActions:_optionalChain([s, 'optionalAccess', _6 => _6.loginActions])}})()})},[s,a]),_react.useEffect.call(void 0, ()=>{let d=new URLSearchParams(window.location.search),o={};d.forEach((r,u)=>{o[u]=r}),Object.keys(o).length>0&&n({type:"SET_SEARCH_PARAMS",payload:o}),t==="checkCode"&&o.email&&n({type:"UPDATE_FORM_DATA",payload:{email:o.email,code:o.code||""}}),t==="resetPassword"&&o.link&&n({type:"SET_SEARCH_PARAMS",payload:o})},[t]);let x={state:m,dispatch:n,setScreen:(d,o)=>{n({type:"SET_SCREEN",payload:{screen:d,params:o}})},updateFormData:d=>{n({type:"UPDATE_FORM_DATA",payload:d})},setFieldError:(d,o)=>{n({type:"SET_ERRORS",payload:{[d]:o}})},clearErrors:()=>{n({type:"CLEAR_ERRORS"})},setLoading:d=>{n({type:"SET_LOADING",payload:d})}};return _jsxruntime.jsx.call(void 0, co.Provider,{value:x,children:e})},Te=()=>{let e=_react.useContext.call(void 0, co);if(e===void 0)throw new Error("useLoginState must be used within a LoginStateProvider");return e};var sr=({onScreenChange:e,onExternalNavigate:t,onLoginSuccess:s,onError:a,redirectUrl:m="/"})=>{let{crudify:n}=q(),{state:i,updateFormData:p,setFieldError:l,clearErrors:y,setLoading:c}=Te(),{login:x}=_chunkCWOL4SNBjs.g.call(void 0, ),d=U(),{t:o}=d,r=d.i18n,u=_react.useRef.call(void 0, null),C=_chunkAT74WV5Wjs.e.call(void 0, o,{currentLanguage:_optionalChain([r, 'optionalAccess', _7 => _7.language]),enableDebug:!1}),P=()=>{if(i.searchParams.redirect)try{let g=decodeURIComponent(i.searchParams.redirect);if(g.startsWith("/")&&!g.startsWith("//"))return g}catch (e3){}return m||"/"};_react.useEffect.call(void 0, ()=>{let g=setTimeout(()=>{u.current&&u.current.focus()},100);return()=>clearTimeout(g)},[]);let f=g=>{console.log("\u{1F50D} [LoginForm] Translating parsed error:",g);let S=C.translateError({code:g.code,message:g.message,field:g.field});return console.log("\u{1F50D} [LoginForm] Translation result:",S),S},h=async()=>{if(!i.loading){if(!i.formData.username.trim()){l("username",o("login.usernameRequired"));return}if(!i.formData.password.trim()){l("password",o("login.passwordRequired"));return}y(),c(!0);try{let g=await x(i.formData.username,i.formData.password);if(c(!1),g.success){console.log("\u{1F510} LoginForm - Login successful via SessionProvider, calling onLoginSuccess");let S=P();s&&s(g.data,S)}else{let S=g.rawResponse||g;w(S)}}catch(g){c(!1);let J=_chunkYIIUEOXCjs.g.call(void 0, g).map(f);l("global",J),a&&a(J.join(", "))}}},w=g=>{_chunkYIIUEOXCjs.g.call(void 0, g).forEach(J=>{if(J.field)l(J.field,f(J));else{let de=i.errors.global||[];l("global",[...de,f(J)])}})};return _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[_jsxruntime.jsxs.call(void 0, _material.Box,{component:"form",noValidate:!0,onSubmit:g=>{g.preventDefault(),h()},onKeyDown:g=>{g.key==="Enter"&&!i.loading&&(g.preventDefault(),h())},sx:{width:"100%",display:"flex",flexDirection:"column",gap:2},children:[_jsxruntime.jsxs.call(void 0, _material.Box,{sx:{mb:1},children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",component:"label",htmlFor:"email",sx:{display:"block",fontWeight:500,color:"grey.700",mb:.5},children:o("login.usernameOrEmailLabel")}),_jsxruntime.jsx.call(void 0, _material.TextField,{fullWidth:!0,id:"email",name:"email",type:"email",value:i.formData.username,disabled:i.loading,onChange:g=>p({username:g.target.value}),error:!!i.errors.username,helperText:i.errors.username,autoComplete:"email",placeholder:o("login.usernameOrEmailPlaceholder"),inputRef:u,required:!0})]}),_jsxruntime.jsxs.call(void 0, _material.Box,{sx:{mb:1},children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",component:"label",htmlFor:"password",sx:{display:"block",fontWeight:500,color:"grey.700",mb:.5},children:o("login.passwordLabel")}),_jsxruntime.jsx.call(void 0, _material.TextField,{fullWidth:!0,id:"password",name:"password",type:"password",value:i.formData.password,disabled:i.loading,onChange:g=>p({password:g.target.value}),error:!!i.errors.password,helperText:i.errors.password,autoComplete:"current-password",placeholder:o("login.passwordPlaceholder"),required:!0})]}),_optionalChain([i, 'access', _8 => _8.config, 'access', _9 => _9.loginActions, 'optionalAccess', _10 => _10.includes, 'call', _11 => _11("forgotPassword")])&&_jsxruntime.jsx.call(void 0, _material.Box,{sx:{display:"flex",justifyContent:"flex-end",alignItems:"center"},children:_jsxruntime.jsx.call(void 0, _material.Link,{sx:{cursor:"pointer"},onClick:()=>{_optionalChain([e, 'optionalCall', _12 => _12("forgotPassword",i.searchParams)])},variant:"body2",color:"secondary",children:o("login.forgotPasswordLink")})}),_jsxruntime.jsx.call(void 0, _material.Button,{disabled:i.loading,type:"submit",fullWidth:!0,variant:"contained",color:"primary",sx:{mt:1,mb:2},children:i.loading?_jsxruntime.jsx.call(void 0, _material.CircularProgress,{size:20}):o("login.loginButton")})]}),_jsxruntime.jsx.call(void 0, _material.Box,{children:i.errors.global&&i.errors.global.length>0&&i.errors.global.map((g,S)=>_jsxruntime.jsx.call(void 0, _material.Alert,{variant:"filled",sx:{mt:2},severity:"error",children:_jsxruntime.jsx.call(void 0, "div",{children:g})},S))}),_optionalChain([i, 'access', _13 => _13.config, 'access', _14 => _14.loginActions, 'optionalAccess', _15 => _15.includes, 'call', _16 => _16("createUser")])&&_jsxruntime.jsxs.call(void 0, _material.Typography,{variant:"body2",align:"center",sx:{color:"text.secondary",mt:3},children:[o("login.noAccountPrompt")," ",_jsxruntime.jsx.call(void 0, _material.Link,{sx:{cursor:"pointer"},onClick:()=>{let S=`/public/users/create${Object.keys(i.searchParams).length>0?`?${new URLSearchParams(i.searchParams).toString()}`:""}`;_optionalChain([t, 'optionalCall', _17 => _17(S)])},fontWeight:"medium",color:"secondary",children:o("login.signUpLink")})]})]})},po=sr;var ur=({onScreenChange:e,onError:t})=>{let{crudify:s}=q(),[a,m]=_react.useState.call(void 0, ""),[n,i]=_react.useState.call(void 0, !1),[p,l]=_react.useState.call(void 0, []),[y,c]=_react.useState.call(void 0, null),[x,d]=_react.useState.call(void 0, !1),[o,r]=_react.useState.call(void 0, !1),{t:u}=U(),C=v=>{let E=[`errors.auth.${v.code}`,`errors.data.${v.code}`,`errors.system.${v.code}`,`errors.${v.code}`,`forgotPassword.${v.code.toLowerCase()}`];for(let g of E){let S=u(g);if(S!==g)return S}return v.message||u("error.unknown")},P=v=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v),f=async()=>{if(!(n||!s)){if(l([]),c(null),!a){c(u("forgotPassword.emailRequired"));return}if(!P(a)){c(u("forgotPassword.invalidEmail"));return}i(!0);try{let v=[{operation:"requestPasswordReset",data:{email:a}}],E=await s.transaction(v);if(E.success)E.data&&E.data.existingCodeValid?r(!0):d(!0);else{let S=_chunkYIIUEOXCjs.g.call(void 0, E).map(C);l(S)}}catch(v){let g=_chunkYIIUEOXCjs.g.call(void 0, v).map(C);l(g),t&&t(g.join(", "))}finally{i(!1)}}},h=()=>{_optionalChain([e, 'optionalCall', _18 => _18("login")])},w=()=>{if(x||o){_optionalChain([e, 'optionalCall', _19 => _19("checkCode",{email:a})]);return}if(!a){c(u("forgotPassword.emailRequired"));return}if(!P(a)){c(u("forgotPassword.invalidEmail"));return}_optionalChain([e, 'optionalCall', _20 => _20("checkCode",{email:a})])};return x||o?_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:_jsxruntime.jsxs.call(void 0, _material.Box,{sx:{width:"100%",display:"flex",flexDirection:"column",gap:2,textAlign:"center"},children:[_jsxruntime.jsxs.call(void 0, _material.Box,{sx:{mb:2},children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"h5",component:"h1",sx:{mb:1,fontWeight:600},children:u(o?"forgotPassword.codeAlreadyExistsMessage":"forgotPassword.emailSentMessage")}),_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",sx:{color:o?"success.main":"grey.600"},children:u("forgotPassword.checkEmailInstructions")})]}),_jsxruntime.jsx.call(void 0, _material.Button,{type:"button",onClick:w,fullWidth:!0,variant:"contained",color:"primary",sx:{mt:2,mb:2},children:u("forgotPassword.enterCodeLink")}),_jsxruntime.jsx.call(void 0, _material.Box,{sx:{display:"flex",justifyContent:"center",alignItems:"center"},children:_jsxruntime.jsx.call(void 0, _material.Link,{sx:{cursor:"pointer"},onClick:h,variant:"body2",color:"secondary",children:u("common.back")})})]})}):_jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[_jsxruntime.jsxs.call(void 0, _material.Box,{component:"form",noValidate:!0,sx:{width:"100%",display:"flex",flexDirection:"column",gap:2},children:[_jsxruntime.jsxs.call(void 0, _material.Box,{sx:{mb:2},children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"h5",component:"h1",sx:{mb:1,fontWeight:600},children:u("forgotPassword.title")}),_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",sx:{color:"grey.600"},children:u("forgotPassword.instructions")})]}),_jsxruntime.jsxs.call(void 0, _material.Box,{sx:{mb:1},children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",component:"label",htmlFor:"email",sx:{display:"block",fontWeight:500,color:"grey.700",mb:.5},children:u("forgotPassword.emailLabel")}),_jsxruntime.jsx.call(void 0, _material.TextField,{fullWidth:!0,id:"email",name:"email",type:"email",value:a,disabled:n,onChange:v=>m(v.target.value),error:!!y,helperText:y,autoComplete:"email",placeholder:u("forgotPassword.emailPlaceholder"),required:!0})]}),_jsxruntime.jsx.call(void 0, _material.Button,{disabled:n,type:"button",onClick:f,fullWidth:!0,variant:"contained",color:"primary",sx:{mt:2,mb:2},children:n?_jsxruntime.jsx.call(void 0, _material.CircularProgress,{size:20}):u("forgotPassword.sendCodeButton")}),_jsxruntime.jsxs.call(void 0, _material.Box,{sx:{display:"flex",justifyContent:"center",alignItems:"center",gap:2},children:[_jsxruntime.jsx.call(void 0, _material.Link,{sx:{cursor:"pointer"},onClick:h,variant:"body2",color:"secondary",children:u("common.back")}),_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",sx:{color:"grey.400"},children:"\u2022"}),_jsxruntime.jsx.call(void 0, _material.Link,{sx:{cursor:"pointer"},onClick:w,variant:"body2",color:"secondary",children:u("login.alreadyHaveCodeLink")})]})]}),_jsxruntime.jsx.call(void 0, _material.Box,{children:p.length>0&&p.map((v,E)=>_jsxruntime.jsx.call(void 0, _material.Alert,{variant:"filled",sx:{mt:2},severity:"error",children:v},E))})]})},xo=ur;var pr=({onScreenChange:e,onError:t,searchParams:s,onResetSuccess:a})=>{let{crudify:m}=q(),[n,i]=_react.useState.call(void 0, ""),[p,l]=_react.useState.call(void 0, ""),[y,c]=_react.useState.call(void 0, !1),[x,d]=_react.useState.call(void 0, []),[o,r]=_react.useState.call(void 0, null),[u,C]=_react.useState.call(void 0, null),[P,f]=_react.useState.call(void 0, ""),[h,w]=_react.useState.call(void 0, ""),[v,E]=_react.useState.call(void 0, !1),[g,S]=_react.useState.call(void 0, !0),[J,de]=_react.useState.call(void 0, !1),[we,Be]=_react.useState.call(void 0, null),[No,Ye]=_react.useState.call(void 0, !1),{t:I}=U(),Ce=T=>{let k=[`errors.auth.${T.code}`,`errors.data.${T.code}`,`errors.system.${T.code}`,`errors.${T.code}`,`resetPassword.${T.code.toLowerCase()}`];for(let O of k){let N=I(O);if(N!==O)return N}return T.message||I("error.unknown")},Pe=T=>s?s instanceof URLSearchParams?s.get(T):s[T]||null:null;_react.useEffect.call(void 0, ()=>{if(s){if(s){let T=Pe("fromCodeVerification"),k=Pe("email"),O=Pe("code");if(T==="true"&&k&&O){f(k),w(O),E(!0),de(!0),S(!1);return}let N=Pe("link");if(N)try{let $=decodeURIComponent(N),[H,ue]=$.split("/");if(H&&ue&&H.length===6){w(H),f(ue),E(!1),Be({email:ue,code:H});return}}catch (e4){}if(k&&O){f(k),w(O),E(!1),Be({email:k,code:O});return}}d([I("resetPassword.invalidCode")]),S(!1),setTimeout(()=>_optionalChain([e, 'optionalCall', _21 => _21("forgotPassword")]),3e3)}},[s,m,I,e]),_react.useEffect.call(void 0, ()=>{m&&we&&!No&&(Ye(!0),(async(k,O)=>{try{let N=[{operation:"validatePasswordResetCode",data:{email:k,codePassword:O}}],$=await m.transaction(N);if($.data&&Array.isArray($.data)){let H=$.data[0];if(H&&H.response&&H.response.status==="OK"){de(!0);return}}if($.success)de(!0);else{let ue=_chunkYIIUEOXCjs.g.call(void 0, $).map(Ce);d(ue),setTimeout(()=>_optionalChain([e, 'optionalCall', _22 => _22("forgotPassword")]),3e3)}}catch(N){let H=_chunkYIIUEOXCjs.g.call(void 0, N).map(Ce);d(H),setTimeout(()=>_optionalChain([e, 'optionalCall', _23 => _23("forgotPassword")]),3e3)}finally{S(!1),Be(null),Ye(!1)}})(we.email,we.code))},[m,we,I,e]);let Vo=T=>T.length<8?I("resetPassword.passwordTooShort"):null,Wo=async()=>{if(y||!m)return;d([]),r(null),C(null);let T=!1;if(!n)r(I("resetPassword.newPasswordRequired")),T=!0;else{let k=Vo(n);k&&(r(k),T=!0)}if(p?n!==p&&(C(I("resetPassword.passwordsDoNotMatch")),T=!0):(C(I("resetPassword.confirmPasswordRequired")),T=!0),!T){c(!0);try{let k=[{operation:"validateAndResetPassword",data:{email:P,codePassword:h,newPassword:n}}],O=await m.transaction(k);if(O.success)d([]),setTimeout(()=>{_optionalChain([a, 'optionalCall', _24 => _24()])},1e3);else{let $=_chunkYIIUEOXCjs.g.call(void 0, O).map(Ce);d($)}}catch(k){let N=_chunkYIIUEOXCjs.g.call(void 0, k).map(Ce);d(N),t&&t(N.join(", "))}c(!1)}},Uo=()=>{v?_optionalChain([e, 'optionalCall', _25 => _25("checkCode",{email:P})]):_optionalChain([e, 'optionalCall', _26 => _26("forgotPassword")])};return g?_jsxruntime.jsx.call(void 0, _material.Box,{sx:{display:"flex",justifyContent:"center",alignItems:"center",minHeight:"300px"},children:_jsxruntime.jsx.call(void 0, _material.CircularProgress,{})}):J?_jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[_jsxruntime.jsxs.call(void 0, _material.Box,{component:"form",noValidate:!0,sx:{width:"100%",display:"flex",flexDirection:"column",gap:2},children:[_jsxruntime.jsxs.call(void 0, _material.Box,{sx:{mb:2},children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"h5",component:"h1",sx:{mb:1,fontWeight:600},children:I("resetPassword.title")}),_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",sx:{color:"grey.600"},children:I("resetPassword.instructions")})]}),_jsxruntime.jsxs.call(void 0, _material.Box,{sx:{mb:1},children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",component:"label",htmlFor:"newPassword",sx:{display:"block",fontWeight:500,color:"grey.700",mb:.5},children:I("resetPassword.newPasswordLabel")}),_jsxruntime.jsx.call(void 0, _material.TextField,{fullWidth:!0,id:"newPassword",name:"newPassword",type:"password",value:n,disabled:y,onChange:T=>i(T.target.value),error:!!o,helperText:o,autoComplete:"new-password",placeholder:I("resetPassword.newPasswordPlaceholder"),required:!0})]}),_jsxruntime.jsxs.call(void 0, _material.Box,{sx:{mb:1},children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",component:"label",htmlFor:"confirmPassword",sx:{display:"block",fontWeight:500,color:"grey.700",mb:.5},children:I("resetPassword.confirmPasswordLabel")}),_jsxruntime.jsx.call(void 0, _material.TextField,{fullWidth:!0,id:"confirmPassword",name:"confirmPassword",type:"password",value:p,disabled:y,onChange:T=>l(T.target.value),error:!!u,helperText:u,autoComplete:"new-password",placeholder:I("resetPassword.confirmPasswordPlaceholder"),required:!0})]}),_jsxruntime.jsx.call(void 0, _material.Button,{disabled:y,type:"button",onClick:Wo,fullWidth:!0,variant:"contained",color:"primary",sx:{mt:2,mb:2},children:y?_jsxruntime.jsx.call(void 0, _material.CircularProgress,{size:20}):I("resetPassword.resetPasswordButton")}),_jsxruntime.jsx.call(void 0, _material.Box,{sx:{display:"flex",justifyContent:"center",alignItems:"center"},children:_jsxruntime.jsx.call(void 0, _material.Link,{sx:{cursor:"pointer"},onClick:Uo,variant:"body2",color:"secondary",children:I("common.back")})})]}),_jsxruntime.jsx.call(void 0, _material.Box,{children:x.length>0&&x.map((T,k)=>_jsxruntime.jsx.call(void 0, _material.Alert,{variant:"filled",sx:{mt:2},severity:"error",children:T},k))})]}):_jsxruntime.jsx.call(void 0, _material.Box,{children:x.length>0&&x.map((T,k)=>_jsxruntime.jsx.call(void 0, _material.Alert,{variant:"filled",sx:{mt:2},severity:"error",children:T},k))})},Po=pr;var Pr=({onScreenChange:e,onError:t,searchParams:s})=>{let{crudify:a}=q(),[m,n]=_react.useState.call(void 0, ""),[i,p]=_react.useState.call(void 0, !1),[l,y]=_react.useState.call(void 0, []),[c,x]=_react.useState.call(void 0, null),[d,o]=_react.useState.call(void 0, ""),{t:r}=U(),u=w=>s?s instanceof URLSearchParams?s.get(w):s[w]||null:null,C=w=>{let v=[`errors.auth.${w.code}`,`errors.data.${w.code}`,`errors.system.${w.code}`,`errors.${w.code}`,`checkCode.${w.code.toLowerCase()}`];for(let E of v){let g=r(E);if(g!==E)return g}return w.message||r("error.unknown")};_react.useEffect.call(void 0, ()=>{let w=u("email");w?o(w):_optionalChain([e, 'optionalCall', _27 => _27("forgotPassword")])},[s,e]);let P=async()=>{if(!(i||!a)){if(y([]),x(null),!m){x(r("checkCode.codeRequired"));return}if(m.length!==6){x(r("checkCode.codeRequired"));return}p(!0);try{let w=[{operation:"validatePasswordResetCode",data:{email:d,codePassword:m}}],v=await a.transaction(w);if(v.success)_optionalChain([e, 'optionalCall', _28 => _28("resetPassword",{email:d,code:m,fromCodeVerification:"true"})]);else{let g=_chunkYIIUEOXCjs.g.call(void 0, v).map(C);y(g),p(!1)}}catch(w){let E=_chunkYIIUEOXCjs.g.call(void 0, w).map(C);y(E),p(!1),t&&t(E.join(", "))}}},f=()=>{_optionalChain([e, 'optionalCall', _29 => _29("forgotPassword")])},h=w=>{let v=w.target.value.replace(/\D/g,"").slice(0,6);n(v)};return _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[_jsxruntime.jsxs.call(void 0, _material.Box,{component:"form",noValidate:!0,sx:{width:"100%",display:"flex",flexDirection:"column",gap:2},children:[_jsxruntime.jsxs.call(void 0, _material.Box,{sx:{mb:2},children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"h5",component:"h1",sx:{mb:1,fontWeight:600},children:r("checkCode.title")}),_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",sx:{color:"grey.600"},children:r("checkCode.instructions")})]}),_jsxruntime.jsxs.call(void 0, _material.Box,{sx:{mb:1},children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",component:"label",htmlFor:"code",sx:{display:"block",fontWeight:500,color:"grey.700",mb:.5},children:r("checkCode.codeLabel")}),_jsxruntime.jsx.call(void 0, _material.TextField,{fullWidth:!0,id:"code",name:"code",type:"text",value:m,disabled:i,onChange:h,error:!!c,helperText:c,placeholder:r("checkCode.codePlaceholder"),inputProps:{maxLength:6,style:{textAlign:"center",fontSize:"1.5rem",letterSpacing:"0.4rem"}},required:!0})]}),_jsxruntime.jsx.call(void 0, _material.Button,{disabled:i||m.length!==6,type:"button",onClick:P,fullWidth:!0,variant:"contained",color:"primary",sx:{mt:2,mb:2},children:i?_jsxruntime.jsx.call(void 0, _material.CircularProgress,{size:20}):r("checkCode.verifyButton")}),_jsxruntime.jsx.call(void 0, _material.Box,{sx:{display:"flex",justifyContent:"center",alignItems:"center"},children:_jsxruntime.jsx.call(void 0, _material.Link,{sx:{cursor:"pointer"},onClick:f,variant:"body2",color:"secondary",children:r("common.back")})})]}),_jsxruntime.jsx.call(void 0, _material.Box,{children:l.length>0&&l.map((w,v)=>_jsxruntime.jsx.call(void 0, _material.Alert,{sx:{mt:2},severity:"error",children:w},v))})]})},vo=Pr;var So=({children:e,fallback:t})=>{let{isLoading:s,error:a,isInitialized:m}=q(),{t:n}=U();return s?t||_jsxruntime.jsxs.call(void 0, _material.Box,{sx:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",minHeight:"200px",gap:2},children:[_jsxruntime.jsx.call(void 0, _material.CircularProgress,{}),_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",color:"text.secondary",children:n("login.initializing")!=="login.initializing"?n("login.initializing"):"Initializing..."})]}):a?_jsxruntime.jsx.call(void 0, _material.Alert,{severity:"error",sx:{mt:2},children:_jsxruntime.jsxs.call(void 0, _material.Typography,{variant:"body2",children:[n("login.initializationError")!=="login.initializationError"?n("login.initializationError"):"Initialization error",":"," ",a]})}):m?_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:e}):_jsxruntime.jsx.call(void 0, _material.Alert,{severity:"warning",sx:{mt:2},children:_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",children:n("login.notInitialized")!=="login.notInitialized"?n("login.notInitialized"):"System not initialized"})})};var Rr=({onScreenChange:e,onExternalNavigate:t,onLoginSuccess:s,onError:a,redirectUrl:m="/"})=>{let{t:n}=U(),{state:i,setScreen:p}=Te(),{config:l}=_chunkCWOL4SNBjs.g.call(void 0, ),{showNotification:y}=_chunkCWOL4SNBjs.e.call(void 0, ),c=(d,o)=>{let r=o;d==="login"?r={}:d==="forgotPassword"&&!o&&(r={}),p(d,r),_optionalChain([e, 'optionalCall', _30 => _30(d,r)])},x=()=>{let d={onScreenChange:c,onExternalNavigate:t,onError:a,redirectUrl:m};switch(i.currentScreen){case"forgotPassword":return _jsxruntime.jsx.call(void 0, xo,{...d});case"checkCode":return _jsxruntime.jsx.call(void 0, vo,{...d,searchParams:i.searchParams});case"resetPassword":return _jsxruntime.jsx.call(void 0, Po,{...d,searchParams:i.searchParams,onResetSuccess:()=>{let o=n("resetPassword.successMessage");y(o,"success"),c("login")}});default:return _jsxruntime.jsx.call(void 0, po,{...d,onLoginSuccess:s})}};return _jsxruntime.jsxs.call(void 0, So,{children:[_jsxruntime.jsx.call(void 0, _material.Box,{sx:{display:"flex",justifyContent:"center",mb:3},children:_jsxruntime.jsx.call(void 0, "img",{src:l.logo||"https://logos.crudia.com/nocios-default.png",alt:n("login.logoAlt"),style:{width:"100%",maxWidth:"150px",height:"auto"},onError:d=>{let o=d.target;o.src="https://logos.crudia.com/nocios-default.png"}})}),!l.logo&&l.appName&&_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"h6",component:"h1",sx:{textAlign:"center",mb:2},children:l.appName}),x()]})},Ar=({translations:e,translationsUrl:t,language:s="en",initialScreen:a="login",autoReadFromCookies:m=!0,...n})=>{let{config:i}=_chunkCWOL4SNBjs.g.call(void 0, );return _jsxruntime.jsx.call(void 0, no,{translations:e,translationsUrl:t,language:s,children:_jsxruntime.jsx.call(void 0, so,{config:i,children:_jsxruntime.jsx.call(void 0, uo,{config:i,initialScreen:a,autoReadFromCookies:m,children:_jsxruntime.jsx.call(void 0, Rr,{...n})})})})},Wn= exports.a =Ar;var _iconsmaterial = require('@mui/icons-material');var Gr=({showExtendedData:e=!0,showProfileCard:t=!0,autoRefresh:s=!0})=>{let{userProfile:a,loading:m,error:n,extendedData:i,refreshProfile:p}=_chunkCWOL4SNBjs.i.call(void 0, {autoFetch:s,retryOnError:!0,maxRetries:3}),[l,y]=_react.useState.call(void 0, !1);if(m)return _jsxruntime.jsxs.call(void 0, _material.Box,{display:"flex",justifyContent:"center",alignItems:"center",p:3,children:[_jsxruntime.jsx.call(void 0, _material.CircularProgress,{}),_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",sx:{ml:2},children:"Cargando perfil de usuario..."})]});if(n)return _jsxruntime.jsxs.call(void 0, _material.Alert,{severity:"error",action:_jsxruntime.jsx.call(void 0, _material.IconButton,{color:"inherit",size:"small",onClick:p,children:_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"caption",children:"Reintentar"})}),children:["Error al cargar el perfil: ",n]});if(!a)return _jsxruntime.jsx.call(void 0, _material.Alert,{severity:"warning",children:"No se encontr\xF3 informaci\xF3n del usuario"});let c=_optionalChain([i, 'optionalAccess', _31 => _31.displayData])||{},x=_optionalChain([i, 'optionalAccess', _32 => _32.totalFields])||0,d=f=>{if(!f)return"No disponible";try{return new Date(f).toLocaleString("es-ES",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch (e5){return f}},o=(f,h)=>h==null?"No disponible":typeof h=="boolean"?h?"S\xED":"No":Array.isArray(h)?h.length>0?h.join(", "):"Ninguno":typeof h=="object"?JSON.stringify(h,null,2):String(h),r=[{key:"id",label:"ID",icon:_jsxruntime.jsx.call(void 0, _iconsmaterial.Badge,{})},{key:"email",label:"Email",icon:_jsxruntime.jsx.call(void 0, _iconsmaterial.Email,{})},{key:"username",label:"Usuario",icon:_jsxruntime.jsx.call(void 0, _iconsmaterial.Person,{})},{key:"fullName",label:"Nombre completo",icon:_jsxruntime.jsx.call(void 0, _iconsmaterial.AccountCircle,{})},{key:"role",label:"Rol",icon:_jsxruntime.jsx.call(void 0, _iconsmaterial.Security,{})}],u=[{key:"firstName",label:"Nombre"},{key:"lastName",label:"Apellido"},{key:"isActive",label:"Activo"},{key:"lastLogin",label:"\xDAltimo login"},{key:"createdAt",label:"Creado"},{key:"updatedAt",label:"Actualizado"}],C=[...r.map(f=>f.key),...u.map(f=>f.key),"permissions"],P=Object.keys(c).filter(f=>!C.includes(f)).map(f=>({key:f,label:f}));return _jsxruntime.jsxs.call(void 0, _material.Box,{children:[t&&_jsxruntime.jsx.call(void 0, _material.Card,{sx:{mb:2},children:_jsxruntime.jsxs.call(void 0, _material.CardContent,{children:[_jsxruntime.jsxs.call(void 0, _material.Box,{display:"flex",alignItems:"center",mb:2,children:[_jsxruntime.jsx.call(void 0, _material.Avatar,{src:c.avatar,sx:{width:56,height:56,mr:2},children:_optionalChain([c, 'access', _33 => _33.fullName, 'optionalAccess', _34 => _34[0]])||_optionalChain([c, 'access', _35 => _35.username, 'optionalAccess', _36 => _36[0]])||_optionalChain([c, 'access', _37 => _37.email, 'optionalAccess', _38 => _38[0]])}),_jsxruntime.jsxs.call(void 0, _material.Box,{children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"h6",children:c.fullName||c.username||c.email}),_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",color:"text.secondary",children:c.role||"Usuario"}),c.isActive!==void 0&&_jsxruntime.jsx.call(void 0, _material.Chip,{label:c.isActive?"Activo":"Inactivo",color:c.isActive?"success":"error",size:"small",sx:{mt:.5}})]})]}),_jsxruntime.jsx.call(void 0, _material.Box,{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(250px, 1fr))",gap:2,children:r.map(({key:f,label:h,icon:w})=>c[f]?_jsxruntime.jsxs.call(void 0, _material.Box,{display:"flex",alignItems:"center",children:[_jsxruntime.jsx.call(void 0, _material.Box,{sx:{mr:1,color:"text.secondary"},children:w}),_jsxruntime.jsxs.call(void 0, _material.Box,{children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"caption",color:"text.secondary",children:h}),_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",children:o(f,c[f])})]})]},f):null)}),c.permissions&&Array.isArray(c.permissions)&&c.permissions.length>0&&_jsxruntime.jsxs.call(void 0, _material.Box,{mt:2,children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"caption",color:"text.secondary",display:"block",children:"Permisos"}),_jsxruntime.jsxs.call(void 0, _material.Box,{display:"flex",flexWrap:"wrap",gap:.5,mt:.5,children:[c.permissions.slice(0,5).map((f,h)=>_jsxruntime.jsx.call(void 0, _material.Chip,{label:f,size:"small",variant:"outlined"},h)),c.permissions.length>5&&_jsxruntime.jsx.call(void 0, _material.Chip,{label:`+${c.permissions.length-5} m\xE1s`,size:"small"})]})]})]})}),e&&_jsxruntime.jsx.call(void 0, _material.Card,{children:_jsxruntime.jsxs.call(void 0, _material.CardContent,{children:[_jsxruntime.jsxs.call(void 0, _material.Box,{display:"flex",justifyContent:"space-between",alignItems:"center",mb:2,children:[_jsxruntime.jsxs.call(void 0, _material.Typography,{variant:"h6",display:"flex",alignItems:"center",children:[_jsxruntime.jsx.call(void 0, _iconsmaterial.Info,{sx:{mr:1}}),"Informaci\xF3n Detallada"]}),_jsxruntime.jsx.call(void 0, _material.Chip,{label:`${x} campos totales`,size:"small"})]}),_jsxruntime.jsxs.call(void 0, _material.List,{dense:!0,children:[u.map(({key:f,label:h})=>c[f]!==void 0&&_jsxruntime.jsxs.call(void 0, _material.ListItem,{divider:!0,children:[_jsxruntime.jsx.call(void 0, _material.ListItemIcon,{children:_jsxruntime.jsx.call(void 0, _iconsmaterial.Schedule,{fontSize:"small"})}),_jsxruntime.jsx.call(void 0, _material.ListItemText,{primary:h,secondary:f.includes("At")||f.includes("Login")?d(c[f]):o(f,c[f])})]},f)),P.length>0&&_jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[_jsxruntime.jsx.call(void 0, _material.Divider,{sx:{my:1}}),_jsxruntime.jsx.call(void 0, _material.ListItem,{children:_jsxruntime.jsx.call(void 0, _material.ListItemText,{primary:_jsxruntime.jsxs.call(void 0, _material.Box,{display:"flex",justifyContent:"space-between",alignItems:"center",children:[_jsxruntime.jsxs.call(void 0, _material.Typography,{variant:"subtitle2",children:["Campos Personalizados (",P.length,")"]}),_jsxruntime.jsx.call(void 0, _material.IconButton,{size:"small",onClick:()=>y(!l),children:l?_jsxruntime.jsx.call(void 0, _iconsmaterial.ExpandLess,{}):_jsxruntime.jsx.call(void 0, _iconsmaterial.ExpandMore,{})})]})})}),_jsxruntime.jsx.call(void 0, _material.Collapse,{in:l,children:P.map(({key:f,label:h})=>_jsxruntime.jsx.call(void 0, _material.ListItem,{sx:{pl:4},children:_jsxruntime.jsx.call(void 0, _material.ListItemText,{primary:h,secondary:o(f,c[f])})},f))})]})]}),_jsxruntime.jsxs.call(void 0, _material.Box,{mt:2,display:"flex",justifyContent:"space-between",alignItems:"center",children:[_jsxruntime.jsxs.call(void 0, _material.Typography,{variant:"caption",color:"text.secondary",children:["\xDAltima actualizaci\xF3n: ",d(c.updatedAt)]}),_jsxruntime.jsx.call(void 0, _material.IconButton,{size:"small",onClick:p,disabled:m,children:_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"caption",children:"Actualizar"})})]})]})})]})},Yr= exports.b =Gr;var Ao=["create","read","update","delete"],Io= exports.d =["create","read","update","delete"];var _reacti18next = require('react-i18next');var st=({value:e,onChange:t,availableFields:s,error:a,disabled:m=!1})=>{let{t:n}=_reacti18next.useTranslation.call(void 0, ),[i,p]=_react.useState.call(void 0, "custom"),l=_react.useRef.call(void 0, !1);_react.useEffect.call(void 0, ()=>{let o=e||{allow:[],owner_allow:[],deny:[]},r=new Set(s),u=(o.allow||[]).filter(h=>r.has(h)),C=(o.owner_allow||[]).filter(h=>r.has(h)),P=(o.deny||[]).filter(h=>r.has(h));s.forEach(h=>{!u.includes(h)&&!C.includes(h)&&!P.includes(h)&&P.push(h)});let f={allow:u,owner_allow:C,deny:P};JSON.stringify(f)!==JSON.stringify(o)&&t(f),u.length===s.length?p("all"):P.length===s.length?p("none"):p("custom")},[s,e]);let y=()=>{l.current=!0,t({allow:[...s],owner_allow:[],deny:[]}),p("all"),setTimeout(()=>{l.current=!1},0)},c=()=>{l.current=!0,t({allow:[],owner_allow:[],deny:[...s]}),p("none"),setTimeout(()=>{l.current=!1},0)},x=o=>_optionalChain([e, 'optionalAccess', _39 => _39.allow, 'optionalAccess', _40 => _40.includes, 'call', _41 => _41(o)])?"allow":_optionalChain([e, 'optionalAccess', _42 => _42.owner_allow, 'optionalAccess', _43 => _43.includes, 'call', _44 => _44(o)])?"owner_allow":"deny",d=(o,r)=>{l.current=!0;let u=new Set(_optionalChain([e, 'optionalAccess', _45 => _45.allow])||[]),C=new Set(_optionalChain([e, 'optionalAccess', _46 => _46.owner_allow])||[]),P=new Set(_optionalChain([e, 'optionalAccess', _47 => _47.deny])||[]);u.delete(o),C.delete(o),P.delete(o),r==="allow"&&u.add(o),r==="owner_allow"&&C.add(o),r==="deny"&&P.add(o),t({allow:Array.from(u),owner_allow:Array.from(C),deny:Array.from(P)}),p("custom"),setTimeout(()=>{l.current=!1},0)};return s.length===0?_jsxruntime.jsxs.call(void 0, _material.Box,{children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",color:"text.secondary",sx:{mb:1},children:n("modules.form.publicPolicies.fields.conditions.label")}),_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",color:"text.secondary",sx:{fontStyle:"italic"},children:n("modules.form.publicPolicies.fields.conditions.noFieldsAvailable")}),a&&_jsxruntime.jsx.call(void 0, _material.FormHelperText,{error:!0,sx:{mt:1},children:a})]}):_jsxruntime.jsxs.call(void 0, _material.Box,{children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",color:"text.secondary",sx:{mb:2},children:n("modules.form.publicPolicies.fields.conditions.label")}),_jsxruntime.jsxs.call(void 0, _material.Stack,{direction:"row",spacing:1,sx:{mb:3},children:[_jsxruntime.jsx.call(void 0, _material.Button,{variant:i==="all"?"contained":"outlined",startIcon:_jsxruntime.jsx.call(void 0, _iconsmaterial.SelectAll,{}),onClick:y,disabled:m,size:"small",sx:{minWidth:120,...i==="all"&&{backgroundColor:"#16a34a","&:hover":{backgroundColor:"#15803d"}}},children:n("modules.form.publicPolicies.fields.conditions.allFields")}),_jsxruntime.jsx.call(void 0, _material.Button,{variant:i==="none"?"contained":"outlined",startIcon:_jsxruntime.jsx.call(void 0, _iconsmaterial.ClearAll,{}),onClick:c,disabled:m,size:"small",sx:{minWidth:120,...i==="none"&&{backgroundColor:"#cf222e","&:hover":{backgroundColor:"#bc1f2c"}}},children:n("modules.form.publicPolicies.fields.conditions.noFields")})]}),_jsxruntime.jsxs.call(void 0, _material.Box,{sx:{p:2,border:"1px solid #d1d9e0",borderRadius:1,backgroundColor:"#f6f8fa"},children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",color:"text.secondary",sx:{mb:2},children:n("modules.form.publicPolicies.fields.conditions.help")}),_jsxruntime.jsx.call(void 0, _material.Stack,{spacing:1,children:s.map(o=>{let r=x(o);return _jsxruntime.jsxs.call(void 0, _material.Stack,{direction:"row",spacing:1,alignItems:"center",children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",sx:{minWidth:100,fontFamily:"monospace"},children:o}),_jsxruntime.jsxs.call(void 0, _material.ToggleButtonGroup,{value:r,exclusive:!0,size:"small",children:[_jsxruntime.jsxs.call(void 0, _material.ToggleButton,{value:"allow",onClick:()=>d(o,"allow"),disabled:m,sx:{px:2,color:r==="allow"?"#ffffff":"#6b7280",backgroundColor:r==="allow"?"#16a34a":"#f3f4f6",borderColor:r==="allow"?"#16a34a":"#d1d5db","&:hover":{backgroundColor:r==="allow"?"#15803d":"#e5e7eb",borderColor:r==="allow"?"#15803d":"#9ca3af"},"&.Mui-selected":{backgroundColor:"#16a34a",color:"#ffffff","&:hover":{backgroundColor:"#15803d"}}},children:[_jsxruntime.jsx.call(void 0, _iconsmaterial.CheckCircle,{sx:{fontSize:16,mr:.5}}),n("modules.form.publicPolicies.fields.conditions.states.allow")]}),_jsxruntime.jsx.call(void 0, _material.ToggleButton,{value:"owner_allow",onClick:()=>d(o,"owner_allow"),disabled:m,sx:{px:2,color:r==="owner_allow"?"#ffffff":"#6b7280",backgroundColor:r==="owner_allow"?"#0ea5e9":"#f3f4f6",borderColor:r==="owner_allow"?"#0ea5e9":"#d1d5db","&:hover":{backgroundColor:r==="owner_allow"?"#0284c7":"#e5e7eb",borderColor:r==="owner_allow"?"#0284c7":"#9ca3af"},"&.Mui-selected":{backgroundColor:"#0ea5e9",color:"#ffffff","&:hover":{backgroundColor:"#0284c7"}}},children:n("modules.form.publicPolicies.fields.conditions.states.ownerAllow")}),_jsxruntime.jsxs.call(void 0, _material.ToggleButton,{value:"deny",onClick:()=>d(o,"deny"),disabled:m,sx:{px:2,color:r==="deny"?"#ffffff":"#6b7280",backgroundColor:r==="deny"?"#dc2626":"#f3f4f6",borderColor:r==="deny"?"#dc2626":"#d1d5db","&:hover":{backgroundColor:r==="deny"?"#b91c1c":"#e5e7eb",borderColor:r==="deny"?"#b91c1c":"#9ca3af"},"&.Mui-selected":{backgroundColor:"#dc2626",color:"#ffffff","&:hover":{backgroundColor:"#b91c1c"}}},children:[_jsxruntime.jsx.call(void 0, _iconsmaterial.Cancel,{sx:{fontSize:16,mr:.5}}),n("modules.form.publicPolicies.fields.conditions.states.deny")]})]})]},o)})})]}),a&&_jsxruntime.jsx.call(void 0, _material.FormHelperText,{error:!0,sx:{mt:1},children:a})]})},He=st;var bt=_react.forwardRef.call(void 0, ({policy:e,onChange:t,onRemove:s,availableFields:a,isSubmitting:m=!1,usedActions:n,error:i},p)=>{let{t:l}=_reacti18next.useTranslation.call(void 0, ),y=new Set(Array.from(n||[]));y.delete(e.action);let c=Ao.map(x=>({value:x,label:l(`modules.form.publicPolicies.fields.action.options.${x}`)}));return _jsxruntime.jsxs.call(void 0, _material.Paper,{ref:p,sx:{p:3,border:"1px solid #d1d9e0",borderRadius:2,position:"relative",backgroundColor:"#ffffff"},children:[_jsxruntime.jsxs.call(void 0, _material.Box,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",mb:3},children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"subtitle1",sx:{fontWeight:600,color:"#111418",fontSize:"1rem"},children:l("modules.form.publicPolicies.policyTitle")}),_jsxruntime.jsx.call(void 0, _material.IconButton,{onClick:s,size:"small",disabled:m,"aria-label":l("modules.form.publicPolicies.removePolicy"),sx:{color:"#656d76","&:hover":{color:"#cf222e",backgroundColor:"rgba(207, 34, 46, 0.1)"}},children:_jsxruntime.jsx.call(void 0, _iconsmaterial.Delete,{})})]}),_jsxruntime.jsxs.call(void 0, _material.Stack,{spacing:3,children:[_jsxruntime.jsx.call(void 0, _material.Stack,{direction:{xs:"column",md:"row"},spacing:2,children:_jsxruntime.jsx.call(void 0, _material.Box,{sx:{flex:1,minWidth:200},children:_jsxruntime.jsxs.call(void 0, _material.FormControl,{fullWidth:!0,children:[_jsxruntime.jsx.call(void 0, _material.InputLabel,{children:l("modules.form.publicPolicies.fields.action.label")}),_jsxruntime.jsx.call(void 0, _material.Select,{value:e.action,label:l("modules.form.publicPolicies.fields.action.label"),disabled:m,onChange:x=>{let d=x.target.value,o={...e,action:d};d==="delete"?(o.permission="deny",delete o.fields):(o.fields={allow:[],owner_allow:[],deny:a},delete o.permission),t(o)},sx:{backgroundColor:"#ffffff","&:hover .MuiOutlinedInput-notchedOutline":{borderColor:"#8c959f"},"&.Mui-focused .MuiOutlinedInput-notchedOutline":{borderColor:"#0969da",borderWidth:2}},children:c.map(x=>{let d=y.has(x.value);return _jsxruntime.jsx.call(void 0, _material.MenuItem,{value:x.value,disabled:d,children:x.label},x.value)})}),i&&_jsxruntime.jsx.call(void 0, _material.FormHelperText,{error:!0,children:i})]})})}),e.action==="delete"?_jsxruntime.jsxs.call(void 0, _material.Box,{children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",color:"text.secondary",sx:{mb:2},children:l("modules.form.publicPolicies.fields.conditions.label")}),_jsxruntime.jsxs.call(void 0, _material.Stack,{direction:"row",spacing:1,sx:{mb:3},children:[_jsxruntime.jsx.call(void 0, _material.Button,{variant:e.permission==="*"?"contained":"outlined",startIcon:_jsxruntime.jsx.call(void 0, _iconsmaterial.SelectAll,{}),onClick:()=>t({...e,permission:"*"}),disabled:m,size:"small",sx:{minWidth:140,whiteSpace:"nowrap",...e.permission==="*"&&{backgroundColor:"#16a34a","&:hover":{backgroundColor:"#15803d"}}},children:l("modules.form.publicPolicies.fields.conditions.allFields")}),_jsxruntime.jsx.call(void 0, _material.Button,{variant:e.permission==="owner"?"contained":"outlined",onClick:()=>t({...e,permission:"owner"}),disabled:m,size:"small",sx:{minWidth:140,whiteSpace:"nowrap",...e.permission==="owner"&&{backgroundColor:"#0ea5e9","&:hover":{backgroundColor:"#0284c7"}}},children:l("modules.form.publicPolicies.fields.conditions.states.ownerAllow")}),_jsxruntime.jsx.call(void 0, _material.Button,{variant:e.permission==="deny"?"contained":"outlined",startIcon:_jsxruntime.jsx.call(void 0, _iconsmaterial.ClearAll,{}),onClick:()=>t({...e,permission:"deny"}),disabled:m,size:"small",sx:{minWidth:140,whiteSpace:"nowrap",...e.permission==="deny"&&{backgroundColor:"#cf222e","&:hover":{backgroundColor:"#bc1f2c"}}},children:l("modules.form.publicPolicies.fields.conditions.noFields")})]})]}):_jsxruntime.jsx.call(void 0, He,{value:e.fields||{allow:[],owner_allow:[],deny:[]},onChange:x=>t({...e,fields:x}),availableFields:a,disabled:m}),_jsxruntime.jsx.call(void 0, _material.Paper,{variant:"outlined",sx:{p:2,backgroundColor:"#f9fafb"},children:e.action==="delete"?_jsxruntime.jsxs.call(void 0, _material.Typography,{variant:"body2",sx:{fontFamily:"monospace",color:"text.secondary"},children:[_jsxruntime.jsxs.call(void 0, _material.Box,{component:"span",sx:{color:e.permission==="*"?"#16a34a":e.permission==="owner"?"#0ea5e9":"#dc2626"},children:[l("modules.form.publicPolicies.fields.conditions.states.allow"),":"]})," ",e.permission||"-"]}):_jsxruntime.jsxs.call(void 0, _material.Stack,{spacing:.5,divider:_jsxruntime.jsx.call(void 0, _material.Divider,{sx:{borderColor:"#e5e7eb"}}),children:[_jsxruntime.jsxs.call(void 0, _material.Typography,{variant:"body2",sx:{fontFamily:"monospace",color:"text.secondary"},children:[_jsxruntime.jsxs.call(void 0, _material.Box,{component:"span",sx:{color:"#16a34a"},children:[l("modules.form.publicPolicies.fields.conditions.states.allow"),":"]})," ",(_optionalChain([e, 'optionalAccess', _48 => _48.fields, 'optionalAccess', _49 => _49.allow])||[]).join(", ")||"-"]}),_jsxruntime.jsxs.call(void 0, _material.Typography,{variant:"body2",sx:{fontFamily:"monospace",color:"text.secondary"},children:[_jsxruntime.jsxs.call(void 0, _material.Box,{component:"span",sx:{color:"#0ea5e9"},children:[l("modules.form.publicPolicies.fields.conditions.states.ownerAllow"),":"]})," ",(_optionalChain([e, 'optionalAccess', _50 => _50.fields, 'optionalAccess', _51 => _51.owner_allow])||[]).join(", ")||"-"]}),_jsxruntime.jsxs.call(void 0, _material.Typography,{variant:"body2",sx:{fontFamily:"monospace",color:"text.secondary"},children:[_jsxruntime.jsxs.call(void 0, _material.Box,{component:"span",sx:{color:"#dc2626"},children:[l("modules.form.publicPolicies.fields.conditions.states.deny"),":"]})," ",(_optionalChain([e, 'optionalAccess', _52 => _52.fields, 'optionalAccess', _53 => _53.deny])||[]).join(", ")||"-"]})]})})]})]})}),je=bt;var St=()=>{let e=_optionalChain([globalThis, 'optionalAccess', _54 => _54.crypto]);return e&&typeof e.randomUUID=="function"?e.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`},kt=({policies:e,onChange:t,availableFields:s,errors:a,isSubmitting:m=!1})=>{let{t:n}=_reacti18next.useTranslation.call(void 0, ),i=_react.useRef.call(void 0, {}),p=new Set((e||[]).map(r=>r.action).filter(Boolean)),l=Io.filter(r=>!p.has(r)),y=l.length>0,c=()=>{let r=l[0]||"create",u={id:St(),action:r};r==="delete"?u.permission="deny":u.fields={allow:[],owner_allow:[],deny:s};let C=[...e||[],u];t(C),setTimeout(()=>{let P=C.length-1,f=i.current[P];f&&f.scrollIntoView({behavior:"smooth",block:"center"})},100)},x=r=>{let u=[...e];u.splice(r,1),t(u)},d=(()=>{if(!a)return null;if(typeof a=="string")return a;let r=a._error;return typeof r=="string"?r:null})(),o=new Set((e||[]).map(r=>r.action));return _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[_jsxruntime.jsx.call(void 0, _material.Divider,{sx:{borderColor:"#e0e4e7"}}),_jsxruntime.jsxs.call(void 0, _material.Box,{children:[_jsxruntime.jsx.call(void 0, _material.Box,{display:"flex",justifyContent:"space-between",alignItems:"center",mb:3,children:_jsxruntime.jsxs.call(void 0, _material.Box,{children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"h6",sx:{fontWeight:600,color:"#111418",mb:1},children:n("modules.form.publicPolicies.title")}),_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"body2",color:"text.secondary",sx:{fontSize:"0.875rem"},children:n("modules.form.publicPolicies.description")})]})}),d&&_jsxruntime.jsx.call(void 0, _material.Alert,{severity:"error",sx:{mb:3},children:d}),_jsxruntime.jsxs.call(void 0, _material.Stack,{spacing:3,children:[(e||[]).length===0?_jsxruntime.jsx.call(void 0, _material.Alert,{severity:"info",children:n("modules.form.publicPolicies.noPolicies")}):e.map((r,u)=>_jsxruntime.jsx.call(void 0, je,{ref:C=>{i.current[u]=C},policy:r,onChange:C=>{let P=[...e];P[u]=C,t(P)},onRemove:()=>x(u),availableFields:s,isSubmitting:m,usedActions:o,error:typeof a=="object"&&a&&r.id in a?a[r.id]:void 0},r.id)),y&&_jsxruntime.jsx.call(void 0, _material.Box,{children:_jsxruntime.jsx.call(void 0, _material.Button,{type:"button",variant:"outlined",startIcon:_jsxruntime.jsx.call(void 0, _iconsmaterial.Add,{}),onClick:c,disabled:m,sx:{borderColor:"#d0d7de",color:"#656d76","&:hover":{borderColor:"#8c959f",backgroundColor:"transparent"}},children:n("modules.form.publicPolicies.addPolicy")})})]})]})]})},Ti= exports.e =kt;function Ii(){let[e,t]=_react.useState.call(void 0, ""),[s,a]=_react.useState.call(void 0, ""),[m,n]=_react.useState.call(void 0, !1),{isAuthenticated:i,isLoading:p,error:l,login:y,logout:c,refreshTokens:x,clearError:d,isExpiringSoon:o,expiresIn:r}=_chunkCWOL4SNBjs.g.call(void 0, ),u=async f=>{if(f.preventDefault(),!e||!s)return;(await y(e,s)).success&&(t(""),a(""),n(!1))},C=async()=>{await c()},P=async()=>{await x()};return i?_jsxruntime.jsxs.call(void 0, _material.Box,{sx:{maxWidth:600,mx:"auto",p:3},children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"h4",gutterBottom:!0,children:"Welcome! \u{1F389}"}),_jsxruntime.jsx.call(void 0, _material.Alert,{severity:"success",sx:{mb:3},children:"You are successfully logged in with Refresh Token Pattern enabled"}),_jsxruntime.jsxs.call(void 0, _material.Box,{sx:{mb:3,p:2,bgcolor:"background.paper",border:1,borderColor:"divider",borderRadius:1},children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"h6",gutterBottom:!0,children:"Token Status"}),_jsxruntime.jsxs.call(void 0, _material.Typography,{variant:"body2",color:"text.secondary",children:["Access Token expires in: ",Math.round(r/1e3/60)," minutes"]}),o&&_jsxruntime.jsx.call(void 0, _material.Alert,{severity:"warning",sx:{mt:1},children:"Token expires soon - automatic refresh will happen"})]}),_jsxruntime.jsxs.call(void 0, _material.Box,{sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[_jsxruntime.jsx.call(void 0, _material.Button,{variant:"contained",onClick:P,disabled:p,startIcon:p?_jsxruntime.jsx.call(void 0, _material.CircularProgress,{size:16}):null,children:"Refresh Tokens"}),_jsxruntime.jsx.call(void 0, _material.Button,{variant:"outlined",color:"error",onClick:C,disabled:p,children:"Logout"})]}),l&&_jsxruntime.jsx.call(void 0, _material.Alert,{severity:"error",sx:{mt:2},onClose:d,children:l})]}):_jsxruntime.jsxs.call(void 0, _material.Box,{sx:{maxWidth:400,mx:"auto",p:3},children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"h4",gutterBottom:!0,align:"center",children:"Login with Refresh Tokens"}),_jsxruntime.jsx.call(void 0, _material.Alert,{severity:"info",sx:{mb:3},children:"This demo shows the new Refresh Token Pattern with automatic session management"}),m?_jsxruntime.jsxs.call(void 0, "form",{onSubmit:u,children:[_jsxruntime.jsx.call(void 0, _material.TextField,{fullWidth:!0,label:"Email",type:"email",value:e,onChange:f=>t(f.target.value),margin:"normal",required:!0,autoComplete:"email"}),_jsxruntime.jsx.call(void 0, _material.TextField,{fullWidth:!0,label:"Password",type:"password",value:s,onChange:f=>a(f.target.value),margin:"normal",required:!0,autoComplete:"current-password"}),_jsxruntime.jsx.call(void 0, _material.Button,{type:"submit",fullWidth:!0,variant:"contained",size:"large",disabled:p,startIcon:p?_jsxruntime.jsx.call(void 0, _material.CircularProgress,{size:16}):null,sx:{mt:3,mb:2},children:p?"Logging in...":"Login"})]}):_jsxruntime.jsx.call(void 0, _material.Button,{fullWidth:!0,variant:"contained",size:"large",onClick:()=>n(!0),sx:{mt:2},children:"Show Login Form"}),l&&_jsxruntime.jsx.call(void 0, _material.Alert,{severity:"error",sx:{mt:2},onClose:d,children:l})]})}function Bi(){let{isAuthenticated:e,isLoading:t,isExpiringSoon:s,expiresIn:a}=_chunkCWOL4SNBjs.g.call(void 0, );return t?_jsxruntime.jsxs.call(void 0, _material.Box,{sx:{display:"flex",alignItems:"center",gap:1},children:[_jsxruntime.jsx.call(void 0, _material.CircularProgress,{size:16}),_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"caption",children:"Loading session..."})]}):e?_jsxruntime.jsxs.call(void 0, _material.Box,{children:[_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"caption",color:"success.main",children:"\u2713 Authenticated"}),s&&_jsxruntime.jsxs.call(void 0, _material.Typography,{variant:"caption",color:"warning.main",display:"block",children:["\u26A0 Token expires in ",Math.round(a/1e3/60)," min"]})]}):_jsxruntime.jsx.call(void 0, _material.Typography,{variant:"caption",color:"text.secondary",children:"Not logged in"})}exports.a = Wn; exports.b = Yr; exports.c = Ao; exports.d = Io; exports.e = Ti; exports.f = Ii; exports.g = Bi;