@nocios/crudify-ui 4.1.0 → 4.1.1

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 +1 @@
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 _chunkTLGRXZCSjs = require('./chunk-TLGRXZCS.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}=_chunkTLGRXZCSjs.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}=_chunkTLGRXZCSjs.g.call(void 0, ),{showNotification:y}=_chunkTLGRXZCSjs.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||"/nocios-default.png",alt:n("login.logoAlt"),style:{width:"100%",maxWidth:"150px",height:"auto"},onError:d=>{let o=d.target;o.src="/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}=_chunkTLGRXZCSjs.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}=_chunkTLGRXZCSjs.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}=_chunkTLGRXZCSjs.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}=_chunkTLGRXZCSjs.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;
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 _chunkTLGRXZCSjs = require('./chunk-TLGRXZCS.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}=_chunkTLGRXZCSjs.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}=_chunkTLGRXZCSjs.g.call(void 0, ),{showNotification:y}=_chunkTLGRXZCSjs.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}=_chunkTLGRXZCSjs.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}=_chunkTLGRXZCSjs.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}=_chunkTLGRXZCSjs.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}=_chunkTLGRXZCSjs.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;
@@ -1 +1 @@
1
- import{e as Qe,g as Q,i as Ze}from"./chunk-CTDQEJAU.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||"/nocios-default.png",alt:n("login.logoAlt"),style:{width:"100%",maxWidth:"150px",height:"auto"},onError:d=>{let o=d.target;o.src="/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
+ import{e as Qe,g as Q,i as Ze}from"./chunk-CTDQEJAU.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 +1 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkGFZGBKFGjs = require('./chunk-GFZGBKFG.js');var _chunkTLGRXZCSjs = require('./chunk-TLGRXZCS.js');require('./chunk-YIIUEOXC.js');require('./chunk-AT74WV5W.js');var _react = require('react');var _jsxruntime = require('react/jsx-runtime');function G({showBelowMinutes:d=5,position:f="bottom-right",colorNormal:m="#ed6c02",colorCritical:x="#d32f2f",style:g,className:u}={}){let{isAuthenticated:o,tokens:t}=_chunkTLGRXZCSjs.c.call(void 0, ),[i,h]=_react.useState.call(void 0, 0),[y,S]=_react.useState.call(void 0, 100);if(_react.useEffect.call(void 0, ()=>{if(!o||!t)return;let P=setInterval(()=>{let C=Date.now(),p=t.expiresAt-C,w=900*1e3;h(Math.max(0,p)),S(Math.max(0,p/w*100))},1e3);return()=>clearInterval(P)},[o,t]),!o||i<=0)return null;let e=Math.floor(i/6e4),b=Math.floor(i%6e4/1e3);if(e>=d)return null;let s=e<2,a=s?x:m,v={"top-left":{top:"16px",left:"16px"},"top-right":{top:"16px",right:"16px"},"bottom-left":{bottom:"16px",left:"16px"},"bottom-right":{bottom:"16px",right:"16px"}}[f];return _jsxruntime.jsxs.call(void 0, "div",{className:u,style:{position:"fixed",...v,padding:"12px 16px",backgroundColor:"white",borderRadius:"8px",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.15)",minWidth:"200px",zIndex:9999,fontFamily:"system-ui, -apple-system, sans-serif",...g},children:[_jsxruntime.jsxs.call(void 0, "div",{style:{marginBottom:"8px"},children:[_jsxruntime.jsx.call(void 0, "div",{style:{fontSize:"12px",fontWeight:600,color:a,marginBottom:"4px"},children:s?"\u26A0\uFE0F Sesi\xF3n expirando":"\u23F0 Sesi\xF3n por expirar"}),_jsxruntime.jsxs.call(void 0, "div",{style:{fontSize:"14px",color:"#333",fontWeight:500},children:[e,":",b.toString().padStart(2,"0")]})]}),_jsxruntime.jsx.call(void 0, "div",{style:{width:"100%",height:"6px",backgroundColor:"#e0e0e0",borderRadius:"3px",overflow:"hidden"},children:_jsxruntime.jsx.call(void 0, "div",{style:{width:`${y}%`,height:"100%",backgroundColor:a,transition:"width 1s linear"}})})]})}exports.CrudifyLogin = _chunkGFZGBKFGjs.a; exports.GlobalNotificationProvider = _chunkTLGRXZCSjs.d; exports.LoginComponent = _chunkGFZGBKFGjs.f; exports.Policies = _chunkGFZGBKFGjs.e; exports.SessionStatus = _chunkGFZGBKFGjs.g; exports.SessionTimeIndicator = G; exports.UserProfileDisplay = _chunkGFZGBKFGjs.b; exports.useGlobalNotification = _chunkTLGRXZCSjs.e;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkYQF2FVCXjs = require('./chunk-YQF2FVCX.js');var _chunkTLGRXZCSjs = require('./chunk-TLGRXZCS.js');require('./chunk-YIIUEOXC.js');require('./chunk-AT74WV5W.js');var _react = require('react');var _jsxruntime = require('react/jsx-runtime');function G({showBelowMinutes:d=5,position:f="bottom-right",colorNormal:m="#ed6c02",colorCritical:x="#d32f2f",style:g,className:u}={}){let{isAuthenticated:o,tokens:t}=_chunkTLGRXZCSjs.c.call(void 0, ),[i,h]=_react.useState.call(void 0, 0),[y,S]=_react.useState.call(void 0, 100);if(_react.useEffect.call(void 0, ()=>{if(!o||!t)return;let P=setInterval(()=>{let C=Date.now(),p=t.expiresAt-C,w=900*1e3;h(Math.max(0,p)),S(Math.max(0,p/w*100))},1e3);return()=>clearInterval(P)},[o,t]),!o||i<=0)return null;let e=Math.floor(i/6e4),b=Math.floor(i%6e4/1e3);if(e>=d)return null;let s=e<2,a=s?x:m,v={"top-left":{top:"16px",left:"16px"},"top-right":{top:"16px",right:"16px"},"bottom-left":{bottom:"16px",left:"16px"},"bottom-right":{bottom:"16px",right:"16px"}}[f];return _jsxruntime.jsxs.call(void 0, "div",{className:u,style:{position:"fixed",...v,padding:"12px 16px",backgroundColor:"white",borderRadius:"8px",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.15)",minWidth:"200px",zIndex:9999,fontFamily:"system-ui, -apple-system, sans-serif",...g},children:[_jsxruntime.jsxs.call(void 0, "div",{style:{marginBottom:"8px"},children:[_jsxruntime.jsx.call(void 0, "div",{style:{fontSize:"12px",fontWeight:600,color:a,marginBottom:"4px"},children:s?"\u26A0\uFE0F Sesi\xF3n expirando":"\u23F0 Sesi\xF3n por expirar"}),_jsxruntime.jsxs.call(void 0, "div",{style:{fontSize:"14px",color:"#333",fontWeight:500},children:[e,":",b.toString().padStart(2,"0")]})]}),_jsxruntime.jsx.call(void 0, "div",{style:{width:"100%",height:"6px",backgroundColor:"#e0e0e0",borderRadius:"3px",overflow:"hidden"},children:_jsxruntime.jsx.call(void 0, "div",{style:{width:`${y}%`,height:"100%",backgroundColor:a,transition:"width 1s linear"}})})]})}exports.CrudifyLogin = _chunkYQF2FVCXjs.a; exports.GlobalNotificationProvider = _chunkTLGRXZCSjs.d; exports.LoginComponent = _chunkYQF2FVCXjs.f; exports.Policies = _chunkYQF2FVCXjs.e; exports.SessionStatus = _chunkYQF2FVCXjs.g; exports.SessionTimeIndicator = G; exports.UserProfileDisplay = _chunkYQF2FVCXjs.b; exports.useGlobalNotification = _chunkTLGRXZCSjs.e;
@@ -1 +1 @@
1
- import{a as T,b as L,e as M,f as R,g as k}from"./chunk-GLR5HDJC.mjs";import{c as l,d as I,e as N}from"./chunk-CTDQEJAU.mjs";import"./chunk-BJ6PIVZR.mjs";import"./chunk-5JKS55SE.mjs";import{useEffect as B,useState as c}from"react";import{jsx as r,jsxs as n}from"react/jsx-runtime";function G({showBelowMinutes:d=5,position:f="bottom-right",colorNormal:m="#ed6c02",colorCritical:x="#d32f2f",style:g,className:u}={}){let{isAuthenticated:o,tokens:t}=l(),[i,h]=c(0),[y,S]=c(100);if(B(()=>{if(!o||!t)return;let P=setInterval(()=>{let C=Date.now(),p=t.expiresAt-C,w=900*1e3;h(Math.max(0,p)),S(Math.max(0,p/w*100))},1e3);return()=>clearInterval(P)},[o,t]),!o||i<=0)return null;let e=Math.floor(i/6e4),b=Math.floor(i%6e4/1e3);if(e>=d)return null;let s=e<2,a=s?x:m,v={"top-left":{top:"16px",left:"16px"},"top-right":{top:"16px",right:"16px"},"bottom-left":{bottom:"16px",left:"16px"},"bottom-right":{bottom:"16px",right:"16px"}}[f];return n("div",{className:u,style:{position:"fixed",...v,padding:"12px 16px",backgroundColor:"white",borderRadius:"8px",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.15)",minWidth:"200px",zIndex:9999,fontFamily:"system-ui, -apple-system, sans-serif",...g},children:[n("div",{style:{marginBottom:"8px"},children:[r("div",{style:{fontSize:"12px",fontWeight:600,color:a,marginBottom:"4px"},children:s?"\u26A0\uFE0F Sesi\xF3n expirando":"\u23F0 Sesi\xF3n por expirar"}),n("div",{style:{fontSize:"14px",color:"#333",fontWeight:500},children:[e,":",b.toString().padStart(2,"0")]})]}),r("div",{style:{width:"100%",height:"6px",backgroundColor:"#e0e0e0",borderRadius:"3px",overflow:"hidden"},children:r("div",{style:{width:`${y}%`,height:"100%",backgroundColor:a,transition:"width 1s linear"}})})]})}export{T as CrudifyLogin,I as GlobalNotificationProvider,R as LoginComponent,M as Policies,k as SessionStatus,G as SessionTimeIndicator,L as UserProfileDisplay,N as useGlobalNotification};
1
+ import{a as T,b as L,e as M,f as R,g as k}from"./chunk-ZA2SJDMK.mjs";import{c as l,d as I,e as N}from"./chunk-CTDQEJAU.mjs";import"./chunk-BJ6PIVZR.mjs";import"./chunk-5JKS55SE.mjs";import{useEffect as B,useState as c}from"react";import{jsx as r,jsxs as n}from"react/jsx-runtime";function G({showBelowMinutes:d=5,position:f="bottom-right",colorNormal:m="#ed6c02",colorCritical:x="#d32f2f",style:g,className:u}={}){let{isAuthenticated:o,tokens:t}=l(),[i,h]=c(0),[y,S]=c(100);if(B(()=>{if(!o||!t)return;let P=setInterval(()=>{let C=Date.now(),p=t.expiresAt-C,w=900*1e3;h(Math.max(0,p)),S(Math.max(0,p/w*100))},1e3);return()=>clearInterval(P)},[o,t]),!o||i<=0)return null;let e=Math.floor(i/6e4),b=Math.floor(i%6e4/1e3);if(e>=d)return null;let s=e<2,a=s?x:m,v={"top-left":{top:"16px",left:"16px"},"top-right":{top:"16px",right:"16px"},"bottom-left":{bottom:"16px",left:"16px"},"bottom-right":{bottom:"16px",right:"16px"}}[f];return n("div",{className:u,style:{position:"fixed",...v,padding:"12px 16px",backgroundColor:"white",borderRadius:"8px",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.15)",minWidth:"200px",zIndex:9999,fontFamily:"system-ui, -apple-system, sans-serif",...g},children:[n("div",{style:{marginBottom:"8px"},children:[r("div",{style:{fontSize:"12px",fontWeight:600,color:a,marginBottom:"4px"},children:s?"\u26A0\uFE0F Sesi\xF3n expirando":"\u23F0 Sesi\xF3n por expirar"}),n("div",{style:{fontSize:"14px",color:"#333",fontWeight:500},children:[e,":",b.toString().padStart(2,"0")]})]}),r("div",{style:{width:"100%",height:"6px",backgroundColor:"#e0e0e0",borderRadius:"3px",overflow:"hidden"},children:r("div",{style:{width:`${y}%`,height:"100%",backgroundColor:a,transition:"width 1s linear"}})})]})}export{T as CrudifyLogin,I as GlobalNotificationProvider,R as LoginComponent,M as Policies,k as SessionStatus,G as SessionTimeIndicator,L as UserProfileDisplay,N as useGlobalNotification};
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); } 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 _chunkGFZGBKFGjs = require('./chunk-GFZGBKFG.js');var _chunkX3HSMDZ7js = require('./chunk-X3HSMDZ7.js');var _chunkTLGRXZCSjs = require('./chunk-TLGRXZCS.js');var _chunkNNY4A73Vjs = require('./chunk-NNY4A73V.js');var _chunkYIIUEOXCjs = require('./chunk-YIIUEOXC.js');var _chunkAT74WV5Wjs = require('./chunk-AT74WV5W.js');var _crudifybrowser = require('@nocios/crudify-browser'); var _crudifybrowser2 = _interopRequireDefault(_crudifybrowser); _createStarExport(_crudifybrowser);var _reactrouterdom = require('react-router-dom');var _jsxruntime = require('react/jsx-runtime');var ne={border:"5px solid rgba(0, 0, 0, 0.1)",borderTopColor:"#3B82F6",borderRadius:"50%",width:"50px",height:"50px",animation:"spin 1s linear infinite"},ae=()=>_jsxruntime.jsx.call(void 0, "style",{children:`
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); } 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 _chunkYQF2FVCXjs = require('./chunk-YQF2FVCX.js');var _chunkX3HSMDZ7js = require('./chunk-X3HSMDZ7.js');var _chunkTLGRXZCSjs = require('./chunk-TLGRXZCS.js');var _chunkNNY4A73Vjs = require('./chunk-NNY4A73V.js');var _chunkYIIUEOXCjs = require('./chunk-YIIUEOXC.js');var _chunkAT74WV5Wjs = require('./chunk-AT74WV5W.js');var _crudifybrowser = require('@nocios/crudify-browser'); var _crudifybrowser2 = _interopRequireDefault(_crudifybrowser); _createStarExport(_crudifybrowser);var _reactrouterdom = require('react-router-dom');var _jsxruntime = require('react/jsx-runtime');var ne={border:"5px solid rgba(0, 0, 0, 0.1)",borderTopColor:"#3B82F6",borderRadius:"50%",width:"50px",height:"50px",animation:"spin 1s linear infinite"},ae=()=>_jsxruntime.jsx.call(void 0, "style",{children:`
2
2
  @keyframes spin {
3
3
  0% { transform: rotate(0deg); }
4
4
  100% { transform: rotate(360deg); }
5
5
  }
6
- `});function d({stage:e="loading",message:o}){let t=o||{initializing:"Initializing application...","validating-session":"Validating session...",loading:"Loading..."}[e];return _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[_jsxruntime.jsx.call(void 0, ae,{}),_jsxruntime.jsxs.call(void 0, "div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100vh",width:"100vw",backgroundColor:"#f0f2f5",fontFamily:'"Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',color:"#333",textAlign:"center",boxSizing:"border-box",padding:"20px",background:"#fff"},children:[_jsxruntime.jsx.call(void 0, "div",{style:ne}),_jsxruntime.jsx.call(void 0, "p",{style:{fontSize:"1.25em",fontWeight:"500",marginTop:"24px",color:"#1f2937"},children:t})]})]})}var pe=/^[a-zA-Z0-9\-_./\?=&%#]+$/,fe=[/^https?:\/\//i,/^ftp:\/\//i,/^\/\//,/javascript:/i,/data:/i,/vbscript:/i,/about:/i,/\.\.\//,/\.\.\\/,/%2e%2e%2f/i,/%2e%2e%5c/i,/%2f%2f/i,/%5c%5c/i,/[\x00-\x1f\x7f-\x9f]/,/\\/],p= exports.validateInternalRedirect =(e,o="/")=>{if(!e||typeof e!="string")return o;let r=e.trim();if(!r)return o;if(!r.startsWith("/"))return console.warn("\u{1F6A8} Open redirect blocked (relative path):",e),o;if(!pe.test(r))return console.warn("\u{1F6A8} Open redirect blocked (invalid characters):",e),o;let t=r.toLowerCase();for(let i of fe)if(i.test(t))return console.warn("\u{1F6A8} Open redirect blocked (dangerous pattern):",e),o;let s=r.split("?")[0].split("/").filter(Boolean);if(s.length===0)return r;for(let i of s)if(i===".."||i.includes(":")||i.length>100)return console.warn("\u{1F6A8} Open redirect blocked (suspicious path part):",i),o;return r},l= exports.extractSafeRedirectFromUrl =(e,o="/")=>{try{let t=(typeof e=="string"?new URLSearchParams(e):e).get("redirect");if(!t)return o;let s=decodeURIComponent(t);return p(s,o)}catch(r){return console.warn("\u{1F6A8} Error parsing redirect parameter:",r),o}};function x({children:e,loadingComponent:o,loginPath:r="/login"}){let{isAuthenticated:t,isLoading:s,isInitialized:i,tokens:n,error:y}=_chunkTLGRXZCSjs.g.call(void 0, ),u=_reactrouterdom.useLocation.call(void 0, );if(!i||s)return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:o||_jsxruntime.jsx.call(void 0, d,{stage:"validating-session"})});let P=t&&_optionalChain([n, 'optionalAccess', _2 => _2.accessToken])&&n.accessToken.length>0;if(y||!t||!P){n&&(!n.accessToken||n.accessToken.length===0)&&localStorage.removeItem("crudify_tokens");let h=u.pathname+u.search,C=p(h),L=encodeURIComponent(C);return _jsxruntime.jsx.call(void 0, _reactrouterdom.Navigate,{to:`${r}?redirect=${L}`,replace:!0})}return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:e})}function S({children:e,redirectTo:o="/"}){let{isAuthenticated:r}=_chunkTLGRXZCSjs.g.call(void 0, ),t=_reactrouterdom.useLocation.call(void 0, );if(r){let s=new URLSearchParams(t.search),i=l(s,o);return _jsxruntime.jsx.call(void 0, _reactrouterdom.Navigate,{to:i,replace:!0})}return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:e})}exports.AuthRoute = S; exports.CrudifyLogin = _chunkGFZGBKFGjs.a; exports.ERROR_CODES = _chunkYIIUEOXCjs.a; exports.ERROR_SEVERITY_MAP = _chunkYIIUEOXCjs.b; exports.GlobalNotificationProvider = _chunkTLGRXZCSjs.d; exports.LoginComponent = _chunkGFZGBKFGjs.f; exports.POLICY_ACTIONS = _chunkGFZGBKFGjs.c; exports.PREFERRED_POLICY_ORDER = _chunkGFZGBKFGjs.d; exports.Policies = _chunkGFZGBKFGjs.e; exports.ProtectedRoute = x; exports.SessionDebugInfo = _chunkTLGRXZCSjs.h; exports.SessionLoadingScreen = d; exports.SessionManager = _chunkTLGRXZCSjs.b; exports.SessionProvider = _chunkTLGRXZCSjs.f; exports.SessionStatus = _chunkGFZGBKFGjs.g; exports.TokenStorage = _chunkTLGRXZCSjs.a; exports.UserProfileDisplay = _chunkGFZGBKFGjs.b; exports.createErrorTranslator = _chunkAT74WV5Wjs.e; exports.crudify = _crudifybrowser2.default; exports.decodeJwtSafely = _chunkAT74WV5Wjs.h; exports.extractSafeRedirectFromUrl = l; exports.getCookie = _chunkAT74WV5Wjs.a; exports.getCurrentUserEmail = _chunkAT74WV5Wjs.i; exports.getErrorMessage = _chunkYIIUEOXCjs.e; exports.handleCrudifyError = _chunkYIIUEOXCjs.g; exports.isTokenExpired = _chunkAT74WV5Wjs.j; exports.parseApiError = _chunkYIIUEOXCjs.c; exports.parseJavaScriptError = _chunkYIIUEOXCjs.f; exports.parseTransactionError = _chunkYIIUEOXCjs.d; exports.secureLocalStorage = _chunkNNY4A73Vjs.b; exports.secureSessionStorage = _chunkNNY4A73Vjs.a; exports.translateError = _chunkAT74WV5Wjs.d; exports.translateErrorCode = _chunkAT74WV5Wjs.b; exports.translateErrorCodes = _chunkAT74WV5Wjs.c; exports.useAuth = _chunkX3HSMDZ7js.b; exports.useCrudifyWithNotifications = _chunkX3HSMDZ7js.d; exports.useData = _chunkX3HSMDZ7js.c; exports.useGlobalNotification = _chunkTLGRXZCSjs.e; exports.useSession = _chunkTLGRXZCSjs.c; exports.useSessionContext = _chunkTLGRXZCSjs.g; exports.useUserData = _chunkX3HSMDZ7js.a; exports.useUserProfile = _chunkTLGRXZCSjs.i; exports.validateInternalRedirect = p;
6
+ `});function d({stage:e="loading",message:o}){let t=o||{initializing:"Initializing application...","validating-session":"Validating session...",loading:"Loading..."}[e];return _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[_jsxruntime.jsx.call(void 0, ae,{}),_jsxruntime.jsxs.call(void 0, "div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100vh",width:"100vw",backgroundColor:"#f0f2f5",fontFamily:'"Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',color:"#333",textAlign:"center",boxSizing:"border-box",padding:"20px",background:"#fff"},children:[_jsxruntime.jsx.call(void 0, "div",{style:ne}),_jsxruntime.jsx.call(void 0, "p",{style:{fontSize:"1.25em",fontWeight:"500",marginTop:"24px",color:"#1f2937"},children:t})]})]})}var pe=/^[a-zA-Z0-9\-_./\?=&%#]+$/,fe=[/^https?:\/\//i,/^ftp:\/\//i,/^\/\//,/javascript:/i,/data:/i,/vbscript:/i,/about:/i,/\.\.\//,/\.\.\\/,/%2e%2e%2f/i,/%2e%2e%5c/i,/%2f%2f/i,/%5c%5c/i,/[\x00-\x1f\x7f-\x9f]/,/\\/],p= exports.validateInternalRedirect =(e,o="/")=>{if(!e||typeof e!="string")return o;let r=e.trim();if(!r)return o;if(!r.startsWith("/"))return console.warn("\u{1F6A8} Open redirect blocked (relative path):",e),o;if(!pe.test(r))return console.warn("\u{1F6A8} Open redirect blocked (invalid characters):",e),o;let t=r.toLowerCase();for(let i of fe)if(i.test(t))return console.warn("\u{1F6A8} Open redirect blocked (dangerous pattern):",e),o;let s=r.split("?")[0].split("/").filter(Boolean);if(s.length===0)return r;for(let i of s)if(i===".."||i.includes(":")||i.length>100)return console.warn("\u{1F6A8} Open redirect blocked (suspicious path part):",i),o;return r},l= exports.extractSafeRedirectFromUrl =(e,o="/")=>{try{let t=(typeof e=="string"?new URLSearchParams(e):e).get("redirect");if(!t)return o;let s=decodeURIComponent(t);return p(s,o)}catch(r){return console.warn("\u{1F6A8} Error parsing redirect parameter:",r),o}};function x({children:e,loadingComponent:o,loginPath:r="/login"}){let{isAuthenticated:t,isLoading:s,isInitialized:i,tokens:n,error:y}=_chunkTLGRXZCSjs.g.call(void 0, ),u=_reactrouterdom.useLocation.call(void 0, );if(!i||s)return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:o||_jsxruntime.jsx.call(void 0, d,{stage:"validating-session"})});let P=t&&_optionalChain([n, 'optionalAccess', _2 => _2.accessToken])&&n.accessToken.length>0;if(y||!t||!P){n&&(!n.accessToken||n.accessToken.length===0)&&localStorage.removeItem("crudify_tokens");let h=u.pathname+u.search,C=p(h),L=encodeURIComponent(C);return _jsxruntime.jsx.call(void 0, _reactrouterdom.Navigate,{to:`${r}?redirect=${L}`,replace:!0})}return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:e})}function S({children:e,redirectTo:o="/"}){let{isAuthenticated:r}=_chunkTLGRXZCSjs.g.call(void 0, ),t=_reactrouterdom.useLocation.call(void 0, );if(r){let s=new URLSearchParams(t.search),i=l(s,o);return _jsxruntime.jsx.call(void 0, _reactrouterdom.Navigate,{to:i,replace:!0})}return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:e})}exports.AuthRoute = S; exports.CrudifyLogin = _chunkYQF2FVCXjs.a; exports.ERROR_CODES = _chunkYIIUEOXCjs.a; exports.ERROR_SEVERITY_MAP = _chunkYIIUEOXCjs.b; exports.GlobalNotificationProvider = _chunkTLGRXZCSjs.d; exports.LoginComponent = _chunkYQF2FVCXjs.f; exports.POLICY_ACTIONS = _chunkYQF2FVCXjs.c; exports.PREFERRED_POLICY_ORDER = _chunkYQF2FVCXjs.d; exports.Policies = _chunkYQF2FVCXjs.e; exports.ProtectedRoute = x; exports.SessionDebugInfo = _chunkTLGRXZCSjs.h; exports.SessionLoadingScreen = d; exports.SessionManager = _chunkTLGRXZCSjs.b; exports.SessionProvider = _chunkTLGRXZCSjs.f; exports.SessionStatus = _chunkYQF2FVCXjs.g; exports.TokenStorage = _chunkTLGRXZCSjs.a; exports.UserProfileDisplay = _chunkYQF2FVCXjs.b; exports.createErrorTranslator = _chunkAT74WV5Wjs.e; exports.crudify = _crudifybrowser2.default; exports.decodeJwtSafely = _chunkAT74WV5Wjs.h; exports.extractSafeRedirectFromUrl = l; exports.getCookie = _chunkAT74WV5Wjs.a; exports.getCurrentUserEmail = _chunkAT74WV5Wjs.i; exports.getErrorMessage = _chunkYIIUEOXCjs.e; exports.handleCrudifyError = _chunkYIIUEOXCjs.g; exports.isTokenExpired = _chunkAT74WV5Wjs.j; exports.parseApiError = _chunkYIIUEOXCjs.c; exports.parseJavaScriptError = _chunkYIIUEOXCjs.f; exports.parseTransactionError = _chunkYIIUEOXCjs.d; exports.secureLocalStorage = _chunkNNY4A73Vjs.b; exports.secureSessionStorage = _chunkNNY4A73Vjs.a; exports.translateError = _chunkAT74WV5Wjs.d; exports.translateErrorCode = _chunkAT74WV5Wjs.b; exports.translateErrorCodes = _chunkAT74WV5Wjs.c; exports.useAuth = _chunkX3HSMDZ7js.b; exports.useCrudifyWithNotifications = _chunkX3HSMDZ7js.d; exports.useData = _chunkX3HSMDZ7js.c; exports.useGlobalNotification = _chunkTLGRXZCSjs.e; exports.useSession = _chunkTLGRXZCSjs.c; exports.useSessionContext = _chunkTLGRXZCSjs.g; exports.useUserData = _chunkX3HSMDZ7js.a; exports.useUserProfile = _chunkTLGRXZCSjs.i; exports.validateInternalRedirect = p;
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import{a as J,b as $,c as K,d as Z,e as Q,f as X,g as j}from"./chunk-GLR5HDJC.mjs";import{a as ee,b as oe,c as re,d as se}from"./chunk-KNEHDX2M.mjs";import{a as E,b as k,c as D,d as I,e as _,f as z,g as a,h as F,i as Y}from"./chunk-CTDQEJAU.mjs";import{a as te,b as ie}from"./chunk-T2CPA46I.mjs";import{a as M,b as G,c as V,d as q,e as H,f as W,g as B}from"./chunk-BJ6PIVZR.mjs";import{a as v,b as A,c as U,d as T,e as b,h as N,i as w,j as O}from"./chunk-5JKS55SE.mjs";import{default as Ie}from"@nocios/crudify-browser";export*from"@nocios/crudify-browser";import{Navigate as de,useLocation as le}from"react-router-dom";import{Fragment as ce,jsx as c,jsxs as m}from"react/jsx-runtime";var ne={border:"5px solid rgba(0, 0, 0, 0.1)",borderTopColor:"#3B82F6",borderRadius:"50%",width:"50px",height:"50px",animation:"spin 1s linear infinite"},ae=()=>c("style",{children:`
1
+ import{a as J,b as $,c as K,d as Z,e as Q,f as X,g as j}from"./chunk-ZA2SJDMK.mjs";import{a as ee,b as oe,c as re,d as se}from"./chunk-KNEHDX2M.mjs";import{a as E,b as k,c as D,d as I,e as _,f as z,g as a,h as F,i as Y}from"./chunk-CTDQEJAU.mjs";import{a as te,b as ie}from"./chunk-T2CPA46I.mjs";import{a as M,b as G,c as V,d as q,e as H,f as W,g as B}from"./chunk-BJ6PIVZR.mjs";import{a as v,b as A,c as U,d as T,e as b,h as N,i as w,j as O}from"./chunk-5JKS55SE.mjs";import{default as Ie}from"@nocios/crudify-browser";export*from"@nocios/crudify-browser";import{Navigate as de,useLocation as le}from"react-router-dom";import{Fragment as ce,jsx as c,jsxs as m}from"react/jsx-runtime";var ne={border:"5px solid rgba(0, 0, 0, 0.1)",borderTopColor:"#3B82F6",borderRadius:"50%",width:"50px",height:"50px",animation:"spin 1s linear infinite"},ae=()=>c("style",{children:`
2
2
  @keyframes spin {
3
3
  0% { transform: rotate(0deg); }
4
4
  100% { transform: rotate(360deg); }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nocios/crudify-ui",
3
- "version": "4.1.0",
3
+ "version": "4.1.01",
4
4
  "description": "Biblioteca de componentes UI para Crudify",
5
5
  "author": "Nocios",
6
6
  "license": "MIT",