1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3185],{32655:function(e,t,n){Promise.resolve().then(n.t.bind(n,84080,23)),Promise.resolve().then(n.t.bind(n,87706,23)),Promise.resolve().then(n.bind(n,94962)),Promise.resolve().then(n.t.bind(n,53054,23)),Promise.resolve().then(n.bind(n,59080)),Promise.resolve().then(n.bind(n,21631)),Promise.resolve().then(n.bind(n,86483)),Promise.resolve().then(n.t.bind(n,30775,23))},59080:function(e,t,n){"use strict";n.d(t,{Providers:function(){return N}});var r=n(57437),o=n(4993),a=n(87481),s=n(19593),i=n.n(s),l=n(77440),c=n(54662),d=n(29165);function u(){let{isOpen:e,closeLoginModal:t,onLoginSuccess:n,redirectTo:o}=(0,l.N)();return(0,r.jsx)(c.Vq,{open:e,onOpenChange:e=>!e&&t(),children:(0,r.jsxs)(c.cZ,{className:"max-w-md w-[calc(100vw-2rem)] p-0 gap-0 overflow-hidden",children:[(0,r.jsx)(c.$N,{className:"sr-only",children:"Login to Excelrs"}),(0,r.jsx)("div",{className:"min-w-0 overflow-x-hidden p-4 sm:p-6",children:(0,r.jsx)(d.default,{mode:"login",isModal:!0,onModalLoginSuccess:()=>{if(n&&n(),o&&window.location.pathname!==o){window.location.replace(o);return}t()}})})]})})}var f=n(2265),p=n(16463),m=n(44785),h=n(96450),g=n(34080),v=n(20357);let x="function"==typeof g.RA?g.RA:null,w=new Set(["/login","/signup"]);function b(e){let{children:t}=e,n=(0,p.usePathname)(),o=(0,p.useRouter)(),{user:a,token:s,refreshToken:i,isHydrated:l,setAuthData:c,clearAuthData:d}=(0,h.useAuthStore)(),u=w.has(n||""),g=(0,f.useCallback)(()=>{d(),m.Z.remove("auth-token"),m.Z.remove("token"),localStorage.removeItem("accessToken"),localStorage.removeItem("auth-token"),localStorage.removeItem("token"),localStorage.removeItem("user"),localStorage.removeItem("refreshToken"),o.replace("/login?session=expired")},[d,o]);return x?(0,r.jsx)(x,{projectId:v.env.NEXT_PUBLIC_PROJECT_ID||"678db178f70e70f6056b2c3d",user:a,token:s,refreshToken:i,isHydrated:l,appName:"Excelrs",appLogo:"/logo.png",steps:[],skip:u,requirePhoneVerification:!1,defaultCountry:"IN",international:!1,onSessionExpired:g,onTokenRefreshed:e=>{a&&c(a,e,i)},onUserUpdate:e=>{s&&c(e,s,i)},children:t}):(0,r.jsx)(r.Fragment,{children:t})}function N(e){let{children:t}=e;return(0,r.jsx)(o.n,{children:(0,r.jsx)(a.ChakraProvider,{children:(0,r.jsxs)(l.U,{children:[(0,r.jsx)(i(),{color:"#0d9488",height:3,showSpinner:!1,crawlSpeed:200}),(0,r.jsx)(b,{children:t}),(0,r.jsx)(u,{})]})})})}},86483:function(e,t,n){"use strict";n.d(t,{PWAInstaller:function(){return p}});var r=n(57437),o=n(2265),a=n(16463),s=n(99438),i=n(20357);let l=(i.env.NEXT_PUBLIC_API_URL||"http://localhost:3001/api").replace(/\/$/,"");async function c(){if("serviceWorker"in navigator)try{let e=await navigator.serviceWorker.register("/sw.js");return console.log("Service Worker registered with scope:",e.scope),e}catch(e){console.error("Service Worker registration failed:",e)}return null}async function d(e,t){let n=i.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY;if(!n)return console.warn("VAPID public key not configured"),null;try{let e=await navigator.serviceWorker.ready,r=await e.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:function(e){let t="=".repeat((4-e.length%4)%4);return new Uint8Array([...atob((e+t).replace(/-/g,"+").replace(/_/g,"/"))].map(e=>e.charCodeAt(0)))}(n)});if(t&&l){let e=await fetch("".concat(l,"/push/subscribe"),{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(t)},body:JSON.stringify({subscription:r.toJSON()})});if(!e.ok){let t=await e.json().catch(()=>({}));console.error("Failed to save push subscription:",t)}}return r}catch(e){return console.error("Error subscribing to push notifications:",e),null}}var u=n(96450);let f=["/my-workshops","/my-projects","/my-trainings"];function p(){let e=(0,a.usePathname)(),[t,n]=(0,o.useState)(null),[i,l]=(0,o.useState)(!1),[p,m]=(0,o.useState)("default"),{token:h}=(0,u.useAuthStore)();(0,o.useEffect)(()=>{window.matchMedia("(display-mode: standalone)").matches&&l(!1);let e=e=>{e.preventDefault(),n(e),l(!0)};return window.addEventListener("beforeinstallprompt",e),"Notification"in window&&m(Notification.permission),c(),()=>window.removeEventListener("beforeinstallprompt",e)},[]),(0,o.useEffect)(()=>{h&&"granted"===p&&c().then(e=>{e&&d(e,h)})},[h,p]);let g=async()=>
1{if(!t){l(!1);return}t.prompt();let{outcome:e}=await t.userChoice;"accepted"===e?console.log("User accepted the install prompt"):console.log("User dismissed the install prompt"),n(null),l(!1)};return null!=e&&f.some(t=>e===t||e.startsWith("".concat(t,"/")))?null:(0,r.jsx)("div",{"data-pwa-install":!0,className:"fixed bottom-4 right-4 z-50 flex flex-col gap-2",children:i&&t&&(0,r.jsx)(s.Button,{onClick:g,colorScheme:"blue",shadow:"lg",size:"md",children:"Install App"})})}},21631:function(e,t,n){"use strict";n.d(t,{PushNotificationListener:function(){return a}});var r=n(2265),o=n(94962);function a(){return(0,r.useEffect)(()=>{if("undefined"==typeof navigator||!navigator.serviceWorker)return;let e=e=>{var t;if((null===(t=e.data)||void 0===t?void 0:t.type)==="PUSH_NOTIFICATION"){let{title:t,body:n}=e.data;(0,o.ZP)("".concat(t).concat(n?": ".concat(n):""),{duration:4e3})}},t=navigator.serviceWorker;return t.addEventListener("message",e),()=>t.removeEventListener("message",e)},[]),null}},54662:function(e,t,n){"use strict";n.d(t,{$N:function(){return h},Be:function(){return g},GG:function(){return u},Vq:function(){return l},cZ:function(){return p},fK:function(){return m},hg:function(){return c}});var r=n(57437),o=n(2265),a=n(30721),s=n(74697),i=n(49354);let l=a.fC,c=a.xz,d=a.h_,u=a.x8,f=o.forwardRef((e,t)=>{let{className:n,...o}=e;return(0,r.jsx)(a.aV,{ref:t,className:(0,i.cn)("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",n),...o})});f.displayName=a.aV.displayName;let p=o.forwardRef((e,t)=>{let{className:n,children:o,...l}=e;return(0,r.jsxs)(d,{children:[(0,r.jsx)(f,{}),(0,r.jsxs)(a.VY,{ref:t,className:(0,i.cn)("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-neutral-200 bg-white p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg dark:border-neutral-800 dark:bg-neutral-950",n),...l,children:[o,(0,r.jsxs)(a.x8,{className:"absolute right-4 top-4 roun
1ded-sm opacity-70 ring-offset-white transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-neutral-950 focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-neutral-100 data-[state=open]:text-neutral-500 dark:ring-offset-neutral-950 dark:focus:ring-neutral-300 dark:data-[state=open]:bg-neutral-800 dark:data-[state=open]:text-neutral-400",children:[(0,r.jsx)(s.Z,{className:"h-4 w-4"}),(0,r.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})});p.displayName=a.VY.displayName;let m=e=>{let{className:t,...n}=e;return(0,r.jsx)("div",{className:(0,i.cn)("flex flex-col space-y-1.5 text-center sm:text-left",t),...n})};m.displayName="DialogHeader";let h=o.forwardRef((e,t)=>{let{className:n,...o}=e;return(0,r.jsx)(a.Dx,{ref:t,className:(0,i.cn)("text-lg font-semibold leading-none tracking-tight",n),...o})});h.displayName=a.Dx.displayName;let g=o.forwardRef((e,t)=>{let{className:n,...o}=e;return(0,r.jsx)(a.dk,{ref:t,className:(0,i.cn)("text-sm text-neutral-500 dark:text-neutral-400",n),...o})});g.displayName=a.dk.displayName},77440:function(e,t,n){"use strict";n.d(t,{N:function(){return i},U:function(){return s}});var r=n(57437),o=n(2265);let a=(0,o.createContext)(void 0);function s(e){let{children:t}=e,[n,s]=(0,o.useState)(!1),[i,l]=(0,o.useState)(void 0),[c,d]=(0,o.useState)(void 0),u=e=>{d(null==e?void 0:e.redirectTo),s(!0)};return(0,o.useEffect)(()=>{let e=()=>{u()};return window.addEventListener("openLoginModal",e),()=>{window.removeEventListener("openLoginModal",e)}},[]),(0,r.jsx)(a.Provider,{value:{isOpen:n,openLoginModal:u,closeLoginModal:()=>{s(!1),l(void 0),d(void 0)},onLoginSuccess:i,setOnLoginSuccess:e=>{l(()=>e)},redirectTo:c},children:t})}function i(){let e=(0,o.useContext)(a);if(!e)throw Error("useLoginModal must be used within LoginModalProvider");return e}},49354:function(e,t,n){"use strict";n.d(t,{cn:function(){return a}});var r=n(44839),o=n(96164);function a(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,o.m6)((0,r.W)(t))}},53054:function(){},30775:function(){}},function(e){e.O(0,[4911,9141,6740,9715,7971,7279,231,4868,6575,251,6648,1513,5171,9617,721,5223,6692,4962,2512,6077,9165,2971,7023,1744],function(){return e(e.s=32655)}),_N_E=e.O()}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.