@nocios/crudify-ui 4.0.94 → 4.0.96
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{index-DxFMT2hN.d.ts → LoginComponent-saSn0o5x.d.mts} +0 -1
- package/dist/{index-CY6Qkw3q.d.mts → LoginComponent-saSn0o5x.d.ts} +0 -1
- package/dist/chunk-ATAGEVFK.js +1 -0
- package/dist/chunk-HMJY3MMZ.mjs +1 -0
- package/dist/{chunk-5PZJJNHP.mjs → chunk-JYDCSNNQ.mjs} +1 -1
- package/dist/{chunk-3SLGRD36.js → chunk-LP5NJV2P.js} +1 -1
- package/dist/chunk-MMYGRMGB.mjs +1 -0
- package/dist/chunk-RHG74IMW.js +1 -0
- package/dist/{chunk-Q7FTH5JW.js → chunk-WG3ZXCPF.js} +1 -1
- package/dist/{chunk-5INZZQD6.mjs → chunk-Y72XFXMI.mjs} +1 -1
- package/dist/components.d.mts +22 -2
- package/dist/components.d.ts +22 -2
- package/dist/components.js +1 -1
- package/dist/components.mjs +1 -1
- package/dist/errorTranslation-CBbQYNWR.d.ts +124 -0
- package/dist/errorTranslation-DqdgLEUy.d.mts +124 -0
- package/dist/hooks.d.mts +1 -1
- package/dist/hooks.d.ts +1 -1
- package/dist/hooks.js +1 -1
- package/dist/hooks.mjs +1 -1
- package/dist/{index-BoWx_rFw.d.mts → index-CUbUeMMS.d.mts} +7 -2
- package/dist/{index-CQttyYlB.d.ts → index-DZdMugLk.d.ts} +7 -2
- package/dist/index.d.mts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/utils.d.mts +49 -118
- package/dist/utils.d.ts +49 -118
- package/dist/utils.js +1 -1
- package/dist/utils.mjs +1 -1
- package/package.json +2 -2
- package/dist/chunk-2OSNNNID.js +0 -1
- package/dist/chunk-6EBMA4HZ.js +0 -1
- package/dist/chunk-VVXZWBHL.mjs +0 -1
- package/dist/chunk-YS3C7YG5.mjs +0 -1
|
@@ -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 _chunk2OSNNNIDjs = require('./chunk-2OSNNNID.js');var _chunkYIIUEOXCjs = require('./chunk-YIIUEOXC.js');var _chunk6EBMA4HZjs = require('./chunk-6EBMA4HZ.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=_chunk6EBMA4HZjs.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}=_chunk2OSNNNIDjs.g.call(void 0, ),d=U(),{t:o}=d,r=d.i18n,u=_react.useRef.call(void 0, null),C=_chunk6EBMA4HZjs.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}=_chunk2OSNNNIDjs.g.call(void 0, ),{showNotification:y}=_chunk2OSNNNIDjs.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}=_chunk2OSNNNIDjs.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}=_chunk2OSNNNIDjs.j.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}=_chunk2OSNNNIDjs.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}=_chunk2OSNNNIDjs.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 _chunkRHG74IMWjs = require('./chunk-RHG74IMW.js');var _chunkYIIUEOXCjs = require('./chunk-YIIUEOXC.js');var _chunkATAGEVFKjs = require('./chunk-ATAGEVFK.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=_chunkATAGEVFKjs.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}=_chunkRHG74IMWjs.g.call(void 0, ),d=U(),{t:o}=d,r=d.i18n,u=_react.useRef.call(void 0, null),C=_chunkATAGEVFKjs.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}=_chunkRHG74IMWjs.g.call(void 0, ),{showNotification:y}=_chunkRHG74IMWjs.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}=_chunkRHG74IMWjs.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}=_chunkRHG74IMWjs.j.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}=_chunkRHG74IMWjs.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}=_chunkRHG74IMWjs.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 $,g as D}from"./chunk-VVXZWBHL.mjs";import{useState as K,useEffect as z,useCallback as j,useRef as F}from"react";import Q from"@nocios/crudify-browser";var G=(S={})=>{let{autoFetch:c=!0,retryOnError:N=!1,maxRetries:g=3}=S,{isAuthenticated:T,isInitialized:I,sessionData:a,tokens:R}=D(),[E,d]=K(null),[y,O]=K(!1),[A,p]=K(null),u=F(null),o=F(!0),m=F(0),l=F(0),L=j(()=>a&&(a.email||a["cognito:username"])||null,[a]),P=j(()=>{d(null),p(null),O(!1),l.current=0},[]),w=j(async()=>{let x=L();if(!x){o.current&&(p("No user email available from session data"),O(!1));return}if(!I){o.current&&(p("Session not initialized"),O(!1));return}u.current&&u.current.abort();let e=new AbortController;u.current=e;let i=++m.current;try{o.current&&(O(!0),p(null));let r=await Q.readItems("users",{filter:{email:x},pagination:{limit:1}});if(i===m.current&&o.current&&!e.signal.aborted){let t=null;if(r.success){if(Array.isArray(r.data)&&r.data.length>0)t=r.data[0];else if(r.data?.response?.data)try{let s=r.data.response.data,n=typeof s=="string"?JSON.parse(s):s;n&&n.items&&Array.isArray(n.items)&&n.items.length>0&&(t=n.items[0])}catch{}else if(r.data&&typeof r.data=="object")r.data.items&&Array.isArray(r.data.items)&&r.data.items.length>0&&(t=r.data.items[0]);else if(r.data?.data?.response?.data)try{let s=r.data.data.response.data,n=typeof s=="string"?JSON.parse(s):s;n&&n.items&&Array.isArray(n.items)&&n.items.length>0&&(t=n.items[0])}catch{}}t?(d(t),p(null),l.current=0):(p("User profile not found in database"),d(null))}}catch(r){if(i===m.current&&o.current){let t=r;if(t.name==="AbortError")return;N&&l.current<g&&(t.message?.includes("Network Error")||t.message?.includes("Failed to fetch"))?(l.current++,setTimeout(()=>{o.current&&w()},1e3*l.current)):(p("Failed to load user profile from database"),d(null))}}finally{i===m.current&&o.current&&O(!1),u.current===e&&(u.current=null)}},[I,L,N,g]);return z(()=>{c&&T&&I?w():T||P()},[c,T,I,w,P]),z(()=>(o.current=!0,()=>{o.current=!1,u.current&&(u.current.abort(),u.current=null)}),[]),{user:{session:a,data:E},loading:y,error:A,refreshProfile:w,clearProfile:P}};import{useCallback as W}from"react";var ee=()=>{let{isAuthenticated:S,isLoading:c,isInitialized:N,tokens:g,error:T,sessionData:I,login:a,logout:R,refreshTokens:E,clearError:d,getTokenInfo:y,isExpiringSoon:O,expiresIn:A,refreshExpiresIn:p}=D(),u=W(m=>{m?console.warn("useAuth.setToken() is deprecated. Use login() method instead for better security."):R()},[R]),o=g?.expiresAt?new Date(g.expiresAt):null;return{isAuthenticated:S,loading:c,error:T,token:g?.accessToken||null,user:I,tokenExpiration:o,setToken:u,logout:R,refreshToken:E,login:a,isExpiringSoon:O,expiresIn:A,refreshExpiresIn:p,getTokenInfo:y,clearError:d}};import{useCallback as h}from"react";import U from"@nocios/crudify-browser";var oe=()=>{let{isInitialized:S,isLoading:c,error:N,isAuthenticated:g,login:T}=D(),I=h(()=>S&&!c&&!N,[S,c,N]),a=h(async()=>new Promise((o,m)=>{let l=()=>{I()?o():N?m(new Error(N)):setTimeout(l,100)};l()}),[I,N]),R=h(async()=>{if(!I())throw new Error("System not ready. Check isInitialized, isLoading, and error states.")},[I]),E=h(async(o,m,l)=>(await R(),await U.readItems(o,m||{},l)),[R]),d=h(async(o,m,l)=>(await R(),await U.readItem(o,m,l)),[R]),y=h(async(o,m,l)=>(await R(),await U.createItem(o,m,l)),[R]),O=h(async(o,m,l)=>(await R(),await U.updateItem(o,m,l)),[R]),A=h(async(o,m,l)=>(await R(),await U.deleteItem(o,m,l)),[R]),p=h(async(o,m)=>(await R(),await U.transaction(o,m)),[R]),u=h(async(o,m)=>{try{let l=await T(o,m);return l.success?{success:!0,data:l.tokens}:{success:!1,errors:l.error||"Login failed"}}catch(l){return{success:!1,errors:l instanceof Error?l.message:"Login failed"}}},[T]);return{readItems:E,readItem:d,createItem:y,updateItem:O,deleteItem:A,transaction:p,login:u,isInitialized:S,isInitializing:c,initializationError:N,isReady:I,waitForReady:a}};import{useCallback as C}from"react";import b from"@nocios/crudify-browser";var Y={INVALID_CREDENTIALS:"warning",UNAUTHORIZED:"warning",INVALID_API_KEY:"error",USER_NOT_FOUND:"warning",USER_NOT_ACTIVE:"warning",NO_PERMISSION:"warning",ITEM_NOT_FOUND:"info",NOT_FOUND:"info",IN_USE:"warning",FIELD_ERROR:"warning",BAD_REQUEST:"warning",INTERNAL_SERVER_ERROR:"error",DATABASE_CONNECTION_ERROR:"error",INVALID_CONFIGURATION:"error",UNKNOWN_OPERATION:"error",TOO_MANY_REQUESTS:"warning"},v={INVALID_CREDENTIALS:"errors.auth.INVALID_CREDENTIALS",UNAUTHORIZED:"errors.auth.UNAUTHORIZED",INVALID_API_KEY:"errors.auth.INVALID_API_KEY",USER_NOT_FOUND:"errors.auth.USER_NOT_FOUND",USER_NOT_ACTIVE:"errors.auth.USER_NOT_ACTIVE",NO_PERMISSION:"errors.auth.NO_PERMISSION",ITEM_NOT_FOUND:"errors.data.ITEM_NOT_FOUND",NOT_FOUND:"errors.data.NOT_FOUND",IN_USE:"errors.data.IN_USE",FIELD_ERROR:"errors.data.FIELD_ERROR",BAD_REQUEST:"errors.data.BAD_REQUEST",INTERNAL_SERVER_ERROR:"errors.system.INTERNAL_SERVER_ERROR",DATABASE_CONNECTION_ERROR:"errors.system.DATABASE_CONNECTION_ERROR",INVALID_CONFIGURATION:"errors.system.INVALID_CONFIGURATION",UNKNOWN_OPERATION:"errors.system.UNKNOWN_OPERATION",TOO_MANY_REQUESTS:"errors.system.TOO_MANY_REQUESTS"},le=(S={})=>{let{showNotification:c}=$(),{showSuccessNotifications:N=!1,showErrorNotifications:g=!0,customErrorMessages:T={},defaultErrorMessage:I="Ha ocurrido un error inesperado",autoHideDuration:a=6e3,appStructure:R=[],translateFn:E=e=>e}=S,d=C(e=>!(!e.success&&e.errors&&(Object.keys(e.errors).some(r=>r!=="_error"&&r!=="_graphql"&&r!=="_transaction")||e.errors._transaction?.includes("ONE_OR_MORE_OPERATIONS_FAILED")||e.errors._error?.includes("TOO_MANY_REQUESTS"))||!e.success&&e.data?.response?.status==="TOO_MANY_REQUESTS"),[]),y=C((e,i)=>{let r=E(e);return r===e?i||E("error.unknown"):r},[E]),O=C(e=>["create","update","delete"].includes(e),[]),A=C((e,i)=>N?O(e)&&i?!0:R.some(r=>r.key===e):!1,[N,R,O]),p=C((e,i,r)=>{let t=r?.key&&typeof r.key=="string"?r.key:e,s=`action.onSuccess.${t}`,n=y(s);if(n!==E("error.unknown")){if(O(t)&&i){let f=`action.${i}Singular`,_=y(f);if(_!==E("error.unknown"))return E(s,{item:_});{let M=`action.onSuccess.${t}WithoutItem`,k=y(M);return k!==E("error.unknown")?k:n}}return n}return E("success.transaction")},[y,E,O]),u=C(e=>{if(e.errorCode&&T[e.errorCode])return T[e.errorCode];if(e.errorCode&&v[e.errorCode])return y(v[e.errorCode]);if(e.errorCode){let i=[`errors.auth.${e.errorCode}`,`errors.data.${e.errorCode}`,`errors.system.${e.errorCode}`,`errors.${e.errorCode}`];for(let r of i){let t=y(r);if(t!==E("error.unknown"))return t}}if(typeof e.data=="string"&&e.data.startsWith("errors.")){let i=y(e.data);if(i!==E("error.unknown"))return i}if(e.errors&&Object.keys(e.errors).length>0){let i=Object.keys(e.errors);if(i.length===1&&i[0]==="_transaction"){let r=e.errors._transaction;if(r?.includes("ONE_OR_MORE_OPERATIONS_FAILED"))return"";if(Array.isArray(r)&&r.length>0){let t=r[0];if(typeof t=="string"&&t!=="ONE_OR_MORE_OPERATIONS_FAILED")try{let s=JSON.parse(t);if(Array.isArray(s)&&s.length>0){let n=s[0];if(n?.response?.errorCode){let f=n.response.errorCode;if(v[f])return y(v[f]);let _=[`errors.auth.${f}`,`errors.data.${f}`,`errors.system.${f}`,`errors.${f}`];for(let M of _){let k=y(M);if(k!==y("error.unknown"))return k}}if(n?.response?.data)return n.response.data}if(s?.response?.message){let n=s.response.message.toLowerCase();return n.includes("expired")?y("resetPassword.linkExpired","El enlace ha expirado"):n.includes("invalid")?y("resetPassword.invalidCode","C\xF3digo inv\xE1lido"):s.response.message}}catch{return t.toLowerCase().includes("expired")?y("resetPassword.linkExpired","El enlace ha expirado"):t.toLowerCase().includes("invalid")?y("resetPassword.invalidCode","C\xF3digo inv\xE1lido"):t}}return y("error.transaction","Error en la operaci\xF3n")}if(i.length===1&&i[0]==="_error"){let r=e.errors._error;return Array.isArray(r)?r[0]:String(r)}return i.length===1&&i[0]==="_graphql"?y("errors.system.DATABASE_CONNECTION_ERROR"):`${y("errors.data.FIELD_ERROR")}: ${i.join(", ")}`}return I||E("error.unknown")},[T,I,E,y]),o=C(e=>e.errorCode&&Y[e.errorCode]?Y[e.errorCode]:"error",[]),m=C(async(e,i,r)=>{let t=await b.createItem(e,i,r);if(!t.success&&g&&d(t)){let s=u(t),n=o(t);c(s,n,{autoHideDuration:a})}else if(t.success){let s=r?.actionConfig,n=s?.key||"create",f=s?.moduleKey||e;if(A(n,f)){let _=p(n,f,s);c(_,"success",{autoHideDuration:a})}}return t},[g,A,c,u,o,p,a,d]),l=C(async(e,i,r)=>{let t=await b.updateItem(e,i,r);if(!t.success&&g&&d(t)){let s=u(t),n=o(t);c(s,n,{autoHideDuration:a})}else if(t.success){let s=r?.actionConfig,n=s?.key||"update",f=s?.moduleKey||e;if(A(n,f)){let _=p(n,f,s);c(_,"success",{autoHideDuration:a})}}return t},[g,A,c,u,o,p,a,d]),L=C(async(e,i,r)=>{let t=await b.deleteItem(e,i,r);if(!t.success&&g&&d(t)){let s=u(t),n=o(t);c(s,n,{autoHideDuration:a})}else if(t.success){let s=r?.actionConfig,n=s?.key||"delete",f=s?.moduleKey||e;if(A(n,f)){let _=p(n,f,s);c(_,"success",{autoHideDuration:a})}}return t},[g,A,c,u,o,p,a,d]),P=C(async(e,i,r)=>{let t=await b.readItem(e,i,r);if(!t.success&&g&&d(t)){let s=u(t),n=o(t);c(s,n,{autoHideDuration:a})}return t},[g,c,u,o,a,d]),w=C(async(e,i,r)=>{let t=await b.readItems(e,i,r);if(!t.success&&g&&d(t)){let s=u(t),n=o(t);c(s,n,{autoHideDuration:a})}return t},[g,c,u,o,a,d]),V=C(async(e,i)=>{let r=await b.transaction(e,i),t=i?.skipNotifications===!0;if(!t&&!r.success&&g&&d(r)){let s=u(r),n=o(r);c(s,n,{autoHideDuration:a})}else if(!t&&r.success){let s="transaction",n,f=null;if(i?.actionConfig?(f=i.actionConfig,s=f.key,n=f.moduleKey):Array.isArray(e)&&e.length>0&&e[0].operation&&(s=e[0].operation,f=R.find(_=>_.key===s),f&&(n=f.moduleKey)),A(s,n)){let _=p(s,n,f);c(_,"success",{autoHideDuration:a})}}return r},[g,A,c,u,o,p,a,d,R]),x=C((e,i)=>{if(!e.success&&g&&d(e)){let r=u(e),t=o(e);c(r,t,{autoHideDuration:a})}else e.success&&N&&i&&c(i,"success",{autoHideDuration:a});return e},[g,N,c,u,o,a,d,E]);return{createItem:m,updateItem:l,deleteItem:L,readItem:P,readItems:w,transaction:V,handleResponse:x,getErrorMessage:u,getErrorSeverity:o,shouldShowNotification:d}};export{G as a,ee as b,oe as c,le as d};
|
|
1
|
+
import{e as $,g as D}from"./chunk-MMYGRMGB.mjs";import{useState as K,useEffect as z,useCallback as j,useRef as F}from"react";import Q from"@nocios/crudify-browser";var G=(S={})=>{let{autoFetch:c=!0,retryOnError:N=!1,maxRetries:g=3}=S,{isAuthenticated:T,isInitialized:I,sessionData:a,tokens:R}=D(),[E,d]=K(null),[y,O]=K(!1),[A,p]=K(null),u=F(null),o=F(!0),m=F(0),l=F(0),L=j(()=>a&&(a.email||a["cognito:username"])||null,[a]),P=j(()=>{d(null),p(null),O(!1),l.current=0},[]),w=j(async()=>{let x=L();if(!x){o.current&&(p("No user email available from session data"),O(!1));return}if(!I){o.current&&(p("Session not initialized"),O(!1));return}u.current&&u.current.abort();let e=new AbortController;u.current=e;let i=++m.current;try{o.current&&(O(!0),p(null));let r=await Q.readItems("users",{filter:{email:x},pagination:{limit:1}});if(i===m.current&&o.current&&!e.signal.aborted){let t=null;if(r.success){if(Array.isArray(r.data)&&r.data.length>0)t=r.data[0];else if(r.data?.response?.data)try{let s=r.data.response.data,n=typeof s=="string"?JSON.parse(s):s;n&&n.items&&Array.isArray(n.items)&&n.items.length>0&&(t=n.items[0])}catch{}else if(r.data&&typeof r.data=="object")r.data.items&&Array.isArray(r.data.items)&&r.data.items.length>0&&(t=r.data.items[0]);else if(r.data?.data?.response?.data)try{let s=r.data.data.response.data,n=typeof s=="string"?JSON.parse(s):s;n&&n.items&&Array.isArray(n.items)&&n.items.length>0&&(t=n.items[0])}catch{}}t?(d(t),p(null),l.current=0):(p("User profile not found in database"),d(null))}}catch(r){if(i===m.current&&o.current){let t=r;if(t.name==="AbortError")return;N&&l.current<g&&(t.message?.includes("Network Error")||t.message?.includes("Failed to fetch"))?(l.current++,setTimeout(()=>{o.current&&w()},1e3*l.current)):(p("Failed to load user profile from database"),d(null))}}finally{i===m.current&&o.current&&O(!1),u.current===e&&(u.current=null)}},[I,L,N,g]);return z(()=>{c&&T&&I?w():T||P()},[c,T,I,w,P]),z(()=>(o.current=!0,()=>{o.current=!1,u.current&&(u.current.abort(),u.current=null)}),[]),{user:{session:a,data:E},loading:y,error:A,refreshProfile:w,clearProfile:P}};import{useCallback as W}from"react";var ee=()=>{let{isAuthenticated:S,isLoading:c,isInitialized:N,tokens:g,error:T,sessionData:I,login:a,logout:R,refreshTokens:E,clearError:d,getTokenInfo:y,isExpiringSoon:O,expiresIn:A,refreshExpiresIn:p}=D(),u=W(m=>{m?console.warn("useAuth.setToken() is deprecated. Use login() method instead for better security."):R()},[R]),o=g?.expiresAt?new Date(g.expiresAt):null;return{isAuthenticated:S,loading:c,error:T,token:g?.accessToken||null,user:I,tokenExpiration:o,setToken:u,logout:R,refreshToken:E,login:a,isExpiringSoon:O,expiresIn:A,refreshExpiresIn:p,getTokenInfo:y,clearError:d}};import{useCallback as h}from"react";import U from"@nocios/crudify-browser";var oe=()=>{let{isInitialized:S,isLoading:c,error:N,isAuthenticated:g,login:T}=D(),I=h(()=>S&&!c&&!N,[S,c,N]),a=h(async()=>new Promise((o,m)=>{let l=()=>{I()?o():N?m(new Error(N)):setTimeout(l,100)};l()}),[I,N]),R=h(async()=>{if(!I())throw new Error("System not ready. Check isInitialized, isLoading, and error states.")},[I]),E=h(async(o,m,l)=>(await R(),await U.readItems(o,m||{},l)),[R]),d=h(async(o,m,l)=>(await R(),await U.readItem(o,m,l)),[R]),y=h(async(o,m,l)=>(await R(),await U.createItem(o,m,l)),[R]),O=h(async(o,m,l)=>(await R(),await U.updateItem(o,m,l)),[R]),A=h(async(o,m,l)=>(await R(),await U.deleteItem(o,m,l)),[R]),p=h(async(o,m)=>(await R(),await U.transaction(o,m)),[R]),u=h(async(o,m)=>{try{let l=await T(o,m);return l.success?{success:!0,data:l.tokens}:{success:!1,errors:l.error||"Login failed"}}catch(l){return{success:!1,errors:l instanceof Error?l.message:"Login failed"}}},[T]);return{readItems:E,readItem:d,createItem:y,updateItem:O,deleteItem:A,transaction:p,login:u,isInitialized:S,isInitializing:c,initializationError:N,isReady:I,waitForReady:a}};import{useCallback as C}from"react";import b from"@nocios/crudify-browser";var Y={INVALID_CREDENTIALS:"warning",UNAUTHORIZED:"warning",INVALID_API_KEY:"error",USER_NOT_FOUND:"warning",USER_NOT_ACTIVE:"warning",NO_PERMISSION:"warning",ITEM_NOT_FOUND:"info",NOT_FOUND:"info",IN_USE:"warning",FIELD_ERROR:"warning",BAD_REQUEST:"warning",INTERNAL_SERVER_ERROR:"error",DATABASE_CONNECTION_ERROR:"error",INVALID_CONFIGURATION:"error",UNKNOWN_OPERATION:"error",TOO_MANY_REQUESTS:"warning"},v={INVALID_CREDENTIALS:"errors.auth.INVALID_CREDENTIALS",UNAUTHORIZED:"errors.auth.UNAUTHORIZED",INVALID_API_KEY:"errors.auth.INVALID_API_KEY",USER_NOT_FOUND:"errors.auth.USER_NOT_FOUND",USER_NOT_ACTIVE:"errors.auth.USER_NOT_ACTIVE",NO_PERMISSION:"errors.auth.NO_PERMISSION",ITEM_NOT_FOUND:"errors.data.ITEM_NOT_FOUND",NOT_FOUND:"errors.data.NOT_FOUND",IN_USE:"errors.data.IN_USE",FIELD_ERROR:"errors.data.FIELD_ERROR",BAD_REQUEST:"errors.data.BAD_REQUEST",INTERNAL_SERVER_ERROR:"errors.system.INTERNAL_SERVER_ERROR",DATABASE_CONNECTION_ERROR:"errors.system.DATABASE_CONNECTION_ERROR",INVALID_CONFIGURATION:"errors.system.INVALID_CONFIGURATION",UNKNOWN_OPERATION:"errors.system.UNKNOWN_OPERATION",TOO_MANY_REQUESTS:"errors.system.TOO_MANY_REQUESTS"},le=(S={})=>{let{showNotification:c}=$(),{showSuccessNotifications:N=!1,showErrorNotifications:g=!0,customErrorMessages:T={},defaultErrorMessage:I="Ha ocurrido un error inesperado",autoHideDuration:a=6e3,appStructure:R=[],translateFn:E=e=>e}=S,d=C(e=>!(!e.success&&e.errors&&(Object.keys(e.errors).some(r=>r!=="_error"&&r!=="_graphql"&&r!=="_transaction")||e.errors._transaction?.includes("ONE_OR_MORE_OPERATIONS_FAILED")||e.errors._error?.includes("TOO_MANY_REQUESTS"))||!e.success&&e.data?.response?.status==="TOO_MANY_REQUESTS"),[]),y=C((e,i)=>{let r=E(e);return r===e?i||E("error.unknown"):r},[E]),O=C(e=>["create","update","delete"].includes(e),[]),A=C((e,i)=>N?O(e)&&i?!0:R.some(r=>r.key===e):!1,[N,R,O]),p=C((e,i,r)=>{let t=r?.key&&typeof r.key=="string"?r.key:e,s=`action.onSuccess.${t}`,n=y(s);if(n!==E("error.unknown")){if(O(t)&&i){let f=`action.${i}Singular`,_=y(f);if(_!==E("error.unknown"))return E(s,{item:_});{let M=`action.onSuccess.${t}WithoutItem`,k=y(M);return k!==E("error.unknown")?k:n}}return n}return E("success.transaction")},[y,E,O]),u=C(e=>{if(e.errorCode&&T[e.errorCode])return T[e.errorCode];if(e.errorCode&&v[e.errorCode])return y(v[e.errorCode]);if(e.errorCode){let i=[`errors.auth.${e.errorCode}`,`errors.data.${e.errorCode}`,`errors.system.${e.errorCode}`,`errors.${e.errorCode}`];for(let r of i){let t=y(r);if(t!==E("error.unknown"))return t}}if(typeof e.data=="string"&&e.data.startsWith("errors.")){let i=y(e.data);if(i!==E("error.unknown"))return i}if(e.errors&&Object.keys(e.errors).length>0){let i=Object.keys(e.errors);if(i.length===1&&i[0]==="_transaction"){let r=e.errors._transaction;if(r?.includes("ONE_OR_MORE_OPERATIONS_FAILED"))return"";if(Array.isArray(r)&&r.length>0){let t=r[0];if(typeof t=="string"&&t!=="ONE_OR_MORE_OPERATIONS_FAILED")try{let s=JSON.parse(t);if(Array.isArray(s)&&s.length>0){let n=s[0];if(n?.response?.errorCode){let f=n.response.errorCode;if(v[f])return y(v[f]);let _=[`errors.auth.${f}`,`errors.data.${f}`,`errors.system.${f}`,`errors.${f}`];for(let M of _){let k=y(M);if(k!==y("error.unknown"))return k}}if(n?.response?.data)return n.response.data}if(s?.response?.message){let n=s.response.message.toLowerCase();return n.includes("expired")?y("resetPassword.linkExpired","El enlace ha expirado"):n.includes("invalid")?y("resetPassword.invalidCode","C\xF3digo inv\xE1lido"):s.response.message}}catch{return t.toLowerCase().includes("expired")?y("resetPassword.linkExpired","El enlace ha expirado"):t.toLowerCase().includes("invalid")?y("resetPassword.invalidCode","C\xF3digo inv\xE1lido"):t}}return y("error.transaction","Error en la operaci\xF3n")}if(i.length===1&&i[0]==="_error"){let r=e.errors._error;return Array.isArray(r)?r[0]:String(r)}return i.length===1&&i[0]==="_graphql"?y("errors.system.DATABASE_CONNECTION_ERROR"):`${y("errors.data.FIELD_ERROR")}: ${i.join(", ")}`}return I||E("error.unknown")},[T,I,E,y]),o=C(e=>e.errorCode&&Y[e.errorCode]?Y[e.errorCode]:"error",[]),m=C(async(e,i,r)=>{let t=await b.createItem(e,i,r);if(!t.success&&g&&d(t)){let s=u(t),n=o(t);c(s,n,{autoHideDuration:a})}else if(t.success){let s=r?.actionConfig,n=s?.key||"create",f=s?.moduleKey||e;if(A(n,f)){let _=p(n,f,s);c(_,"success",{autoHideDuration:a})}}return t},[g,A,c,u,o,p,a,d]),l=C(async(e,i,r)=>{let t=await b.updateItem(e,i,r);if(!t.success&&g&&d(t)){let s=u(t),n=o(t);c(s,n,{autoHideDuration:a})}else if(t.success){let s=r?.actionConfig,n=s?.key||"update",f=s?.moduleKey||e;if(A(n,f)){let _=p(n,f,s);c(_,"success",{autoHideDuration:a})}}return t},[g,A,c,u,o,p,a,d]),L=C(async(e,i,r)=>{let t=await b.deleteItem(e,i,r);if(!t.success&&g&&d(t)){let s=u(t),n=o(t);c(s,n,{autoHideDuration:a})}else if(t.success){let s=r?.actionConfig,n=s?.key||"delete",f=s?.moduleKey||e;if(A(n,f)){let _=p(n,f,s);c(_,"success",{autoHideDuration:a})}}return t},[g,A,c,u,o,p,a,d]),P=C(async(e,i,r)=>{let t=await b.readItem(e,i,r);if(!t.success&&g&&d(t)){let s=u(t),n=o(t);c(s,n,{autoHideDuration:a})}return t},[g,c,u,o,a,d]),w=C(async(e,i,r)=>{let t=await b.readItems(e,i,r);if(!t.success&&g&&d(t)){let s=u(t),n=o(t);c(s,n,{autoHideDuration:a})}return t},[g,c,u,o,a,d]),V=C(async(e,i)=>{let r=await b.transaction(e,i),t=i?.skipNotifications===!0;if(!t&&!r.success&&g&&d(r)){let s=u(r),n=o(r);c(s,n,{autoHideDuration:a})}else if(!t&&r.success){let s="transaction",n,f=null;if(i?.actionConfig?(f=i.actionConfig,s=f.key,n=f.moduleKey):Array.isArray(e)&&e.length>0&&e[0].operation&&(s=e[0].operation,f=R.find(_=>_.key===s),f&&(n=f.moduleKey)),A(s,n)){let _=p(s,n,f);c(_,"success",{autoHideDuration:a})}}return r},[g,A,c,u,o,p,a,d,R]),x=C((e,i)=>{if(!e.success&&g&&d(e)){let r=u(e),t=o(e);c(r,t,{autoHideDuration:a})}else e.success&&N&&i&&c(i,"success",{autoHideDuration:a});return e},[g,N,c,u,o,a,d,E]);return{createItem:m,updateItem:l,deleteItem:L,readItem:P,readItems:w,transaction:V,handleResponse:x,getErrorMessage:u,getErrorSeverity:o,shouldShowNotification:d}};export{G as a,ee as b,oe as c,le as d};
|
package/dist/components.d.mts
CHANGED
|
@@ -1,4 +1,24 @@
|
|
|
1
|
-
export { B as BoxScreenType, C as CrudifyLogin, d as CrudifyLoginConfig, e as CrudifyLoginProps, f as CrudifyLoginTranslations, L as LoginComponent, P as Policies, c as PolicyAction, S as SessionStatus, g as UserLoginData, U as UserProfileDisplay } from './
|
|
1
|
+
export { B as BoxScreenType, C as CrudifyLogin, d as CrudifyLoginConfig, e as CrudifyLoginProps, f as CrudifyLoginTranslations, L as LoginComponent, P as Policies, c as PolicyAction, S as SessionStatus, g as UserLoginData, U as UserProfileDisplay } from './LoginComponent-saSn0o5x.mjs';
|
|
2
2
|
export { G as GlobalNotificationProvider, a as GlobalNotificationProviderProps, N as Notification, b as NotificationSeverity, u as useGlobalNotification } from './GlobalNotificationProvider-C3iWgM1z.mjs';
|
|
3
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
4
|
import 'react';
|
|
4
|
-
|
|
5
|
+
|
|
6
|
+
type SessionTimeIndicatorProps = {
|
|
7
|
+
/** Tiempo mínimo (en minutos) para mostrar el indicador. Default: 5 */
|
|
8
|
+
showBelowMinutes?: number;
|
|
9
|
+
/** Posición del indicador. Default: "bottom-right" */
|
|
10
|
+
position?: "top-left" | "top-right" | "bottom-left" | "bottom-right";
|
|
11
|
+
/** Color del indicador cuando quedan >2 minutos. Default: "warning" */
|
|
12
|
+
colorNormal?: string;
|
|
13
|
+
/** Color del indicador cuando quedan <2 minutos. Default: "error" */
|
|
14
|
+
colorCritical?: string;
|
|
15
|
+
/** Permitir personalizar el estilo del contenedor */
|
|
16
|
+
style?: React.CSSProperties;
|
|
17
|
+
/** Permitir personalizar clases CSS */
|
|
18
|
+
className?: string;
|
|
19
|
+
};
|
|
20
|
+
declare function SessionTimeIndicator({ showBelowMinutes, position, colorNormal, // orange (warning)
|
|
21
|
+
colorCritical, // red (error)
|
|
22
|
+
style, className, }?: SessionTimeIndicatorProps): react_jsx_runtime.JSX.Element | null;
|
|
23
|
+
|
|
24
|
+
export { SessionTimeIndicator, type SessionTimeIndicatorProps };
|
package/dist/components.d.ts
CHANGED
|
@@ -1,4 +1,24 @@
|
|
|
1
|
-
export { B as BoxScreenType, C as CrudifyLogin, d as CrudifyLoginConfig, e as CrudifyLoginProps, f as CrudifyLoginTranslations, L as LoginComponent, P as Policies, c as PolicyAction, S as SessionStatus, g as UserLoginData, U as UserProfileDisplay } from './
|
|
1
|
+
export { B as BoxScreenType, C as CrudifyLogin, d as CrudifyLoginConfig, e as CrudifyLoginProps, f as CrudifyLoginTranslations, L as LoginComponent, P as Policies, c as PolicyAction, S as SessionStatus, g as UserLoginData, U as UserProfileDisplay } from './LoginComponent-saSn0o5x.js';
|
|
2
2
|
export { G as GlobalNotificationProvider, a as GlobalNotificationProviderProps, N as Notification, b as NotificationSeverity, u as useGlobalNotification } from './GlobalNotificationProvider-C3iWgM1z.js';
|
|
3
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
4
|
import 'react';
|
|
4
|
-
|
|
5
|
+
|
|
6
|
+
type SessionTimeIndicatorProps = {
|
|
7
|
+
/** Tiempo mínimo (en minutos) para mostrar el indicador. Default: 5 */
|
|
8
|
+
showBelowMinutes?: number;
|
|
9
|
+
/** Posición del indicador. Default: "bottom-right" */
|
|
10
|
+
position?: "top-left" | "top-right" | "bottom-left" | "bottom-right";
|
|
11
|
+
/** Color del indicador cuando quedan >2 minutos. Default: "warning" */
|
|
12
|
+
colorNormal?: string;
|
|
13
|
+
/** Color del indicador cuando quedan <2 minutos. Default: "error" */
|
|
14
|
+
colorCritical?: string;
|
|
15
|
+
/** Permitir personalizar el estilo del contenedor */
|
|
16
|
+
style?: React.CSSProperties;
|
|
17
|
+
/** Permitir personalizar clases CSS */
|
|
18
|
+
className?: string;
|
|
19
|
+
};
|
|
20
|
+
declare function SessionTimeIndicator({ showBelowMinutes, position, colorNormal, // orange (warning)
|
|
21
|
+
colorCritical, // red (error)
|
|
22
|
+
style, className, }?: SessionTimeIndicatorProps): react_jsx_runtime.JSX.Element | null;
|
|
23
|
+
|
|
24
|
+
export { SessionTimeIndicator, type SessionTimeIndicatorProps };
|
package/dist/components.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkWG3ZXCPFjs = require('./chunk-WG3ZXCPF.js');var _chunkRHG74IMWjs = require('./chunk-RHG74IMW.js');require('./chunk-YIIUEOXC.js');require('./chunk-ATAGEVFK.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}=_chunkRHG74IMWjs.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 = _chunkWG3ZXCPFjs.a; exports.GlobalNotificationProvider = _chunkRHG74IMWjs.d; exports.LoginComponent = _chunkWG3ZXCPFjs.f; exports.Policies = _chunkWG3ZXCPFjs.e; exports.SessionStatus = _chunkWG3ZXCPFjs.g; exports.SessionTimeIndicator = G; exports.UserProfileDisplay = _chunkWG3ZXCPFjs.b; exports.useGlobalNotification = _chunkRHG74IMWjs.e;
|
package/dist/components.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as
|
|
1
|
+
import{a as T,b as L,e as M,f as R,g as k}from"./chunk-JYDCSNNQ.mjs";import{c as l,d as I,e as N}from"./chunk-MMYGRMGB.mjs";import"./chunk-BJ6PIVZR.mjs";import"./chunk-HMJY3MMZ.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};
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { J as JwtPayload } from './api-Djqihi4n.js';
|
|
2
|
+
|
|
3
|
+
interface JWTPayload extends JwtPayload {
|
|
4
|
+
"cognito:username"?: string;
|
|
5
|
+
}
|
|
6
|
+
declare const decodeJwtSafely: (token: string) => JWTPayload | null;
|
|
7
|
+
declare const getCurrentUserEmail: () => string | null;
|
|
8
|
+
declare const isTokenExpired: (token: string) => boolean;
|
|
9
|
+
|
|
10
|
+
declare const getCookie: (name: string) => string | null;
|
|
11
|
+
|
|
12
|
+
declare class SecureStorage {
|
|
13
|
+
private readonly encryptionKey;
|
|
14
|
+
private readonly storage;
|
|
15
|
+
constructor(storageType?: "localStorage" | "sessionStorage");
|
|
16
|
+
private generateEncryptionKey;
|
|
17
|
+
setItem(key: string, value: string, expiryMinutes?: number): void;
|
|
18
|
+
getItem(key: string): string | null;
|
|
19
|
+
removeItem(key: string): void;
|
|
20
|
+
setToken(token: string): void;
|
|
21
|
+
getToken(): string | null;
|
|
22
|
+
}
|
|
23
|
+
declare const secureSessionStorage: SecureStorage;
|
|
24
|
+
declare const secureLocalStorage: SecureStorage;
|
|
25
|
+
|
|
26
|
+
declare const ERROR_CODES: {
|
|
27
|
+
readonly INVALID_CREDENTIALS: "INVALID_CREDENTIALS";
|
|
28
|
+
readonly UNAUTHORIZED: "UNAUTHORIZED";
|
|
29
|
+
readonly INVALID_API_KEY: "INVALID_API_KEY";
|
|
30
|
+
readonly USER_NOT_FOUND: "USER_NOT_FOUND";
|
|
31
|
+
readonly USER_NOT_ACTIVE: "USER_NOT_ACTIVE";
|
|
32
|
+
readonly NO_PERMISSION: "NO_PERMISSION";
|
|
33
|
+
readonly ITEM_NOT_FOUND: "ITEM_NOT_FOUND";
|
|
34
|
+
readonly NOT_FOUND: "NOT_FOUND";
|
|
35
|
+
readonly IN_USE: "IN_USE";
|
|
36
|
+
readonly FIELD_ERROR: "FIELD_ERROR";
|
|
37
|
+
readonly BAD_REQUEST: "BAD_REQUEST";
|
|
38
|
+
readonly INVALID_EMAIL: "INVALID_EMAIL";
|
|
39
|
+
readonly INVALID_CODE: "INVALID_CODE";
|
|
40
|
+
readonly INTERNAL_SERVER_ERROR: "INTERNAL_SERVER_ERROR";
|
|
41
|
+
readonly DATABASE_CONNECTION_ERROR: "DATABASE_CONNECTION_ERROR";
|
|
42
|
+
readonly INVALID_CONFIGURATION: "INVALID_CONFIGURATION";
|
|
43
|
+
readonly UNKNOWN_OPERATION: "UNKNOWN_OPERATION";
|
|
44
|
+
readonly TOO_MANY_REQUESTS: "TOO_MANY_REQUESTS";
|
|
45
|
+
readonly NETWORK_ERROR: "NETWORK_ERROR";
|
|
46
|
+
readonly TIMEOUT_ERROR: "TIMEOUT_ERROR";
|
|
47
|
+
};
|
|
48
|
+
type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];
|
|
49
|
+
type ErrorSeverity = "info" | "warning" | "error" | "critical";
|
|
50
|
+
declare const ERROR_SEVERITY_MAP: Record<ErrorCode, ErrorSeverity>;
|
|
51
|
+
interface ParsedError {
|
|
52
|
+
code: ErrorCode;
|
|
53
|
+
message: string;
|
|
54
|
+
severity: ErrorSeverity;
|
|
55
|
+
field?: string;
|
|
56
|
+
details?: Record<string, unknown>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Parse a Crudify API response and extract standardized error information
|
|
60
|
+
*/
|
|
61
|
+
declare function parseApiError(response: unknown): ParsedError[];
|
|
62
|
+
/**
|
|
63
|
+
* Parse transaction response errors
|
|
64
|
+
*/
|
|
65
|
+
declare function parseTransactionError(response: unknown): ParsedError[];
|
|
66
|
+
/**
|
|
67
|
+
* Get a human-readable error message for an error code
|
|
68
|
+
*/
|
|
69
|
+
declare function getErrorMessage(code: ErrorCode): string;
|
|
70
|
+
/**
|
|
71
|
+
* Handle JavaScript/Network errors and convert to ParsedError
|
|
72
|
+
*/
|
|
73
|
+
declare function parseJavaScriptError(error: unknown): ParsedError;
|
|
74
|
+
/**
|
|
75
|
+
* Universal error handler that can process any type of error from Crudify APIs
|
|
76
|
+
*/
|
|
77
|
+
declare function handleCrudifyError(error: unknown): ParsedError[];
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Utilidad robusta para traducir códigos de error con fallbacks inteligentes
|
|
81
|
+
* Busca en múltiples namespaces y devuelve la traducción más específica disponible
|
|
82
|
+
*/
|
|
83
|
+
interface ErrorTranslationConfig {
|
|
84
|
+
/** Función de traducción de i18next */
|
|
85
|
+
translateFn: (key: string) => string;
|
|
86
|
+
/** Idioma actual (opcional, para logging) */
|
|
87
|
+
currentLanguage?: string;
|
|
88
|
+
/** Habilitar logs de debug */
|
|
89
|
+
enableDebug?: boolean;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Traduce un código de error usando jerarquía de fallbacks
|
|
93
|
+
*/
|
|
94
|
+
declare function translateErrorCode(errorCode: string, config: ErrorTranslationConfig): string;
|
|
95
|
+
/**
|
|
96
|
+
* Traduce múltiples códigos de error
|
|
97
|
+
*/
|
|
98
|
+
declare function translateErrorCodes(errorCodes: string[], config: ErrorTranslationConfig): string[];
|
|
99
|
+
/**
|
|
100
|
+
* Traduce un error completo (código + mensaje personalizado)
|
|
101
|
+
*/
|
|
102
|
+
declare function translateError(error: {
|
|
103
|
+
code: string;
|
|
104
|
+
message?: string;
|
|
105
|
+
field?: string;
|
|
106
|
+
}, config: ErrorTranslationConfig): string;
|
|
107
|
+
/**
|
|
108
|
+
* Hook para usar en componentes React con i18next
|
|
109
|
+
*/
|
|
110
|
+
declare function createErrorTranslator(translateFn: (key: string) => string, options?: {
|
|
111
|
+
currentLanguage?: string;
|
|
112
|
+
enableDebug?: boolean;
|
|
113
|
+
}): {
|
|
114
|
+
translateErrorCode: (code: string) => string;
|
|
115
|
+
translateErrorCodes: (codes: string[]) => string[];
|
|
116
|
+
translateError: (error: {
|
|
117
|
+
code: string;
|
|
118
|
+
message?: string;
|
|
119
|
+
field?: string;
|
|
120
|
+
}) => string;
|
|
121
|
+
translateApiError: (apiResponse: any) => string;
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
export { ERROR_CODES as E, type ParsedError as P, getCookie as a, secureLocalStorage as b, parseTransactionError as c, decodeJwtSafely as d, parseJavaScriptError as e, getErrorMessage as f, getCurrentUserEmail as g, handleCrudifyError as h, isTokenExpired as i, ERROR_SEVERITY_MAP as j, type ErrorCode as k, type ErrorSeverity as l, translateErrorCodes as m, translateError as n, createErrorTranslator as o, parseApiError as p, type ErrorTranslationConfig as q, secureSessionStorage as s, translateErrorCode as t };
|