PageSourceSearch

https://tidaltasks.app/_next/static/chunks/3955-e5835a2c77788ad8.js

js tidaltasks.app collected 2026-09-24 14:32:49 UTC 17,775 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3955],{3998:(e,t,r)=>{r.d(t,{$:()=>c});var a=r(95155),o=r(12115),n=r(64269);let s={classic:{base:"bg-sky-600 text-white border-sky-700",shadow:"bg-sky-500",hover:"hover:bg-sky-700",active:"active:bg-sky-800"},solid:{base:"bg-blue-600 text-white border-blue-700",shadow:"bg-blue-500",hover:"hover:bg-blue-700",active:"active:bg-blue-800"},soft:{base:"bg-[var(--muted)] text-[var(--foreground)] border-[color:var(--border)]",shadow:"bg-[var(--skeleton-base)] dark:bg-[var(--skeleton-base)]/40",hover:"hover:bg-[var(--card-hover)] dark:hover:bg-[var(--card-hover)]",active:"active:bg-[var(--accent)]/40"},surface:{base:"bg-[var(--card)] text-[var(--foreground)] border-[color:var(--border)] border-t",shadow:"bg-[var(--muted)]",hover:"hover:bg-[var(--card-hover)]",active:"active:bg-[var(--muted)]"},outline:{base:"bg-transparent text-sky-600 border-sky-300 border border-t-2",shadow:"bg-transparent",hover:"hover:bg-sky-50 dark:hover:bg-sky-900/30",active:"active:bg-sky-100"},ghost:{base:"bg-transparent text-[var(--foreground)] border-transparent",shadow:"bg-transparent",hover:"hover:bg-[var(--card-hover)]",active:"active:bg-[var(--muted)]"}},i={1:"h-8 px-3 py-1 text-xs",2:"h-9 px-4 py-2 text-sm",3:"h-10 px-4 py-2 text-sm",4:"h-11 px-6 py-3 text-base"},l={blue:{solid:{base:"bg-blue-600 text-white border-blue-700",shadow:"bg-blue-500",hover:"hover:bg-blue-700",active:"active:bg-blue-800"},soft:{base:"bg-transparent text-blue-600 border-blue-300 dark:bg-blue-600 dark:border-blue-500 dark:text-blue-50",shadow:"bg-blue-100 dark:bg-blue-600",hover:"hover:bg-blue-200 dark:hover:bg-blue-600",active:"active:bg-blue-300 dark:active:bg-blue-200"},ghost:{base:"bg-transparent text-blue-600 border-transparent",shadow:"bg-transparent",hover:"hover:bg-blue-100",active:"active:bg-blue-200"}},teal:{classic:{base:"bg-[#A3C6D1] text-gray-900 border-[#6E94A0]",shadow:"bg-[#6D8F9A]",hover:"hover:bg-[#A3C6D1]",active:"active:bg-[#89AEB9]"},solid:{base:"bg-[#A3C6D1] text-gray-900 border-[#8FB5C0]",shadow:"bg-[#8FB7C3]",hover:"hover:bg-[#96BCC7]",active:"active:bg-[#89AEB9]"},soft:{base:"bg-[#D8E8ED] text-gray-900 border-[#C6DCE3]",shadow:"bg-[#CBE0E6]",hover:"hover:bg-[#CFE3E9]",active:"active:bg-[#C0D7DE]"},ghost:{base:"bg-transparent text-[#4A6B75] border-transparent",shadow:"bg-transparent",hover:"hover:bg-[#EAF3F6]",active:"active:bg-[#DFECF1]"}},red:{solid:{base:"bg-red-600 text-white border-red-700",shadow:"bg-red-500",hover:"hover:bg-red-700",active:"active:bg-red-800"},soft:{base:"bg-red-100 text-red-900 border-red-200",shadow:"bg-red-500",hover:"hover:bg-red-200",active:"active:bg-red-300"},ghost:{base:"bg-red-300 text-red-600 border-transparent",shadow:"bg-red-200",hover:"hover:bg-red-400",active:"active:bg-red-300"},outline:{base:"bg-transparent text-red-600 border-red-200 border border-t-2",shadow:"bg-transparent",hover:"hover:bg-red-50",active:"active:bg-red-100"}},gray:{solid:{base:"bg-gray-600 text-white border-gray-700",shadow:"bg-gray-500",hover:"hover:bg-gray-700",active:"active:bg-gray-800"},soft:{base:"bg-gray-100 text-gray-900 border-gray-200 dark:bg-gray-800/60 dark:text-gray-100 dark:border-gray-600/60",shadow:"bg-gray-50 dark:bg-gray-600/60",hover:"hover:bg-gray-200 dark:hover:bg-gray-600/60",active:"active:bg-gray-300 dark:active:bg-gray-600/60"},ghost:{base:"bg-transparent text-gray-600 border-transparent dark:text-gray-300 dark:border-transparent",shadow:"bg-transparent",hover:"hover:bg-gray-100 dark:hover:bg-gray-600/60",active:"active:bg-gray-200"}},green:{solid:{base:"bg-green-600 text-white border-green-700",shadow:"bg-green-500",hover:"hover:bg-green-700",active:"active:bg-green-800"},soft:{base:"bg-green-100 text-green-900 border-green-200",shadow:"bg-green-500",hover:"hover:bg-green-200",active:"active:bg-green-300"},ghost:{base:"bg-green-300 text-green-600 border-transparent",shadow:"bg-green-200",hover:"hover:bg-green-400",active:"active:bg-green-300"}}},c=o.forwardRef((e,t)=>{let{variant:r="classic",size:o="3",color:c,className:d,children:u,disabled:g,...b}=e,h=c&&l[c]&&l[c][r]?l[c][r]:s[r]||s.classic,v=i[o]||i["3"],f=(0,n.cn)("relative inline-flex items-center justify-center","font-bold uppercase tracking-wider","rounded-lg cursor-pointer touch-manipulation","transition-all duration-200 transform-gpu","border-b-4 border-solid","outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-sky-500",v,h.base,h.hover,h.active,"active:border-b-0 active:border-t-4","disabled:cursor-not-allowed disabled:opacity-50",d);return(0,a.jsxs)("button",{ref:t,className:f,disabled:g,...b,children:[u,(0,a.jsx)("span",{className:(0,n.cn)("absolute inset-0 -z-10 rounded-lg border-b-4 border-solid border-transparent",h.shadow)})]})});c.displayName="Button"},41444:(e,t,r)=>{function a(e,t,r){if("debug"===e||"info"===e)return;let a={level:e,msg:t,ts:new Date().toISOString(),...null!=r?r:{}};"error"===e?console.error(JSON.stringify(a)):"warn"===e?console.warn(JSON.stringify(a)):console.log(JSON.stringify(a))}r.d(t,{v:()=>o});let o={debug:(e,t)=>a("debug",e,t),info:(e,t)=>a("info",e,t),warn:(e,t)=>a("warn",e,t),error:(e,t)=>
1a("error",e,t)}},60080:(e,t,r)=>{r.d(t,{$:()=>i});var a=r(18281),o=r(84746),n=r(41444);let s=(async()=>await (0,a.TT)()?(0,a.P5)(o.xv):null)(),i=async(e,t)=>{try{let r=await s;r&&(0,a.$s)(r,e,t)}catch(e){n.v.error("Failed to log analytics event:",{err:String(e)})}}},64269:(e,t,r)=>{r.d(t,{Af:()=>u,Dj:()=>l,K1:()=>d,Yq:()=>h,cn:()=>n,fU:()=>b,qX:()=>c,r6:()=>v,s2:()=>i,tX:()=>f,y$:()=>s});var a=r(2821),o=r(75889);function n(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,o.QP)((0,a.$)(t))}r(41444).v.info("Production environment detected, using Vercel URL");let s=6,i=25,l=5,c=100;function d(e){let t=JSON.parse(JSON.stringify(e)),r=(e,t,r)=>Array.isArray(e)?e.slice(0,t).map(e=>"string"==typeof e?e:null).filter(e=>"string"==typeof e&&e.length>0).map(e=>e.slice(0,r)):[];return t.goalsAndReflections&&["academicGoals","strengths","weaknesses","timeManagement"].forEach(e=>{t.goalsAndReflections[e]=r(t.goalsAndReflections[e],s,i)}),t.aiSettings||(t.aiSettings={memories:[]}),t.aiSettings.memories=r(t.aiSettings.memories,l,c),t}function u(e){let t=e.toLowerCase().trim(),r={today:0,tomorrow:1,monday:g(1),tuesday:g(2),wednesday:g(3),thursday:g(4),friday:g(5),saturday:g(6),sunday:g(0)},a=new Date,o=!1,n=0,s=0;for(let e of[/\bat (\d{1,2})(?::(\d{2}))?\s*(am|pm)?\b/i,/\b(\d{1,2})(?::(\d{2}))?\s*(am|pm)\b/i,/\b(\d{1,2})(?::(\d{2}))?\s*(?:o'?clock)?\b/i]){let r=t.match(e);if(r){var i;n=parseInt(r[1]),s=r[2]?parseInt(r[2]):0;let e=null==(i=r[3])?void 0:i.toLowerCase();if("pm"===e&&12!==n?n+=12:"am"===e&&12===n?n=0:!e&&n<8&&(n+=12),n>=0&&n<=23&&s>=0&&s<=59){o=!0;break}}}let l=0,c=!1;for(let[e,a]of Object.entries(r))if(t.includes(e)){l=a,c=!0;break}return a.setDate(a.getDate()+l),a.setHours(n,s,0,0),c||o?a:null}function g(e){let t=e-new Date().getDay();return t<=0&&(t+=7),t}function b(e){if(e)return new Date(e).toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})}function h(e){if(e)return new Date(e).toLocaleDateString([],{month:"short",day:"numeric"})}function v(e){if(e)return new Date(e).toLocaleString([],{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})}function f(e,t){let r=h(e),a=h(t);return r&&a?r===a?r:"".concat(r," – ").concat(a):r||a}},65380:(e,t,r)=>{r.d(t,{A:()=>m,AuthProvider:()=>f});var a=r(95155),o=r(12115),n=r(33885),s=r(84746),i=r(85338),l=r(85919),c=r(19708),d=r(60080),u=r(64269);function g(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone||void 0}catch(e){return}}function b(e){return!function(e){if(!e)return!1;try{return Intl.DateTimeFormat(void 0,{timeZone:e}).format(new Date),!0}catch(e){return!1}}(e)?void 0:e}let h={education:{type:"High School"},subjectsAndActivities:{subjects:[],extracurriculars:[]},goalsAndReflections:{academicGoals:[],strengths:[],weaknesses:[],timeManagement:[]},preferencesAndSchedule:{studyTime:["Flexible"],schoolStartTime:"8:00 AM",schoolEndTime:"3:00 PM",schoolDays:["Monday","Tuesday","Wednesday","Thursday","Friday"],weekdayBedtime:"10:00 PM",weekendBedtime:"11:00 PM"},appSettings:{theme:"System",notificationsEnabled:!0},aiSettings:{memories:[]},onboardingCompleted:!1},v=(0,o.createContext)({isAuthenticated:!1,user:null,userProfile:null,loadingProfile:!0,sessionReady:!1,logout:async()=>{},deleteUserAccount:async()=>{},saveProfile:async()=>{},renewSession:async()=>{}});function f(e){let{children:t}=e,[r,f]=(0,o.useState)(!1),[m,y]=(0,o.useState)(null),[p,w]=(0,o.useState)(null),[S,A]=(0,o.useState)(!0),[x,k]=(0,o.useState)(!1),E=(0,o.useRef)(null),C=(0,o.useRef)(null),I="tt_session_meta",D=(0,o.useRef)(null),N=(0,o.useCallback)(()=>{try{let e=localStorage.getItem(I);if(!e)return null;let t=JSON.parse(e);if(t&&"number"==typeof t.lastRenew&&"number"==typeof t.maxAge)return t}catch(e){console.warn("[AuthContext] loadSessionMeta failed",e)}return null},[]),j=(0,o.useCallback)(e=>{try{localStorage.setItem(I,JSON.stringify(e))}catch(e){console.warn("[AuthContext] storeSessionMeta failed",e)}},[]),O=(0,o.useCallback)(e=>{if(null===e)return null;if(Array.isArray(e))return e.map(O);if("object"==typeof e){let t={};
1return Object.entries(e).forEach(e=>{let[r,a]=e;if(void 0===a)return;let o=O(a);void 0!==o&&(t[r]=o)}),t}return e},[]);(0,o.useEffect)(()=>{let e=(0,n.hg)(s.j2,async e=>{if(y(e),f(!!e),e){A(!0);try{let n=(0,c.H9)(s.db,"users",e.uid),i=await (0,c.x7)(n);if(i.exists()){var t,r,a,o;let s=i.data(),l={...h,...s,education:{...h.education,...s.education},subjectsAndActivities:{...h.subjectsAndActivities,...s.subjectsAndActivities},goalsAndReflections:{...h.goalsAndReflections,...s.goalsAndReflections},preferencesAndSchedule:{...h.preferencesAndSchedule,...s.preferencesAndSchedule},appSettings:{...h.appSettings,...s.appSettings},aiSettings:{memories:(null==(t=s.aiSettings)?void 0:t.memories)||h.aiSettings.memories}},d=g(),v=!1,f={};e.photoURL&&l.photoURL!==e.photoURL&&(l.photoURL=e.photoURL,f.photoURL=e.photoURL,v=!0),e.displayName&&!l.displayName&&(l.displayName=e.displayName,f.displayName=e.displayName,v=!0),e.email&&!l.email&&(l.email=e.email,f.email=e.email,v=!0);let m=b(null==(r=l.preferencesAndSchedule)?void 0:r.timezone),y=!!(null==(a=l.preferencesAndSchedule)?void 0:a.timezone)&&!m,p=(null==(o=l.preferencesAndSchedule)?void 0:o.timezoneAutoDetected)===!0,S=d||m||"UTC";(y||!m||p&&d&&m!==d)&&(l.preferencesAndSchedule={...l.preferencesAndSchedule,timezone:S,timezoneAutoDetected:!!d},f.preferencesAndSchedule={timezone:S,timezoneAutoDetected:!!d},v=!0);let A=(0,u.K1)(l);v&&await (0,c.BN)(n,f,{merge:!0}),w(A),localStorage.setItem("userProfile_".concat(e.uid),JSON.stringify(A))}else{let t=O(h),r=g(),a=r?{...t,preferencesAndSchedule:{...t.preferencesAndSchedule,timezone:r,timezoneAutoDetected:!0}}:t,o=(0,u.K1)(a);w(o),await (0,c.BN)(n,o),localStorage.setItem("userProfile_".concat(e.uid),JSON.stringify(o))}}catch(e){console.error("Failed to fetch user profile from Firestore:",e)}finally{A(!1)}}else{w(null),A(!1),k(!1);try{localStorage.removeItem(I)}catch(e){console.warn("[AuthContext] removeItem SESSION_META_KEY failed",e)}try{Object.keys(localStorage).forEach(e=>{e.startsWith("userProfile_")&&localStorage.removeItem(e)}),i.P.clear();try{sessionStorage.clear()}catch(e){console.warn("[AuthContext] sessionStorage.clear failed",e)}}catch(e){console.warn("[AuthContext] logout cleanup failed",e)}try{l.i.publish("auth-logout")}catch(e){console.warn("[AuthContext] auth-logout publish failed",e)}}});return()=>e()},[O]);let R=(0,o.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!s.j2.currentUser)return;if(E.current)return E.current;let t=Date.now(),r=D.current;if(!e&&r&&t-r.lastRenew<Math.min(.5*r.maxAge,216e5))return void k(!0);let a=(async()=>{try{var a;let o=!1;e&&r?o=!0:r&&t-r.lastRenew>.8*r.maxAge&&(o=!0);let i=await (null==(a=s.j2.currentUser)?void 0:a.getIdToken(o));if(!i)return;let l=await fetch("/api/auth/session",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({idToken:i}),credentials:"include"});if(l.ok){let e;k(!0);try{let t=await l.json();"number"==typeof(null==t?void 0:t.expiresInMs)&&(e=t.expiresInMs)}catch(e){console.warn("[AuthContext] Failed to parse session response",e)}let t={lastRenew:Date.now(),maxAge:e||(null==r?void 0:r.maxAge)||6048e5};D.current=t,j(t)}else 401===l.status&&(k(!1),await (0,n.CI)(s.j2),window.location.href="/login?error=SessionExpired")}catch(e){console.error("Session renewal failed",e)}finally{E.current=null}})();return E.current=a,a},[j]);(0,o.useEffect)(()=>{if(!m)return;let e=N();D.current=e;let t=Date.now();if(e){k(!0);let r=t-e.lastRenew;(r>.85*e.maxAge||r>e.maxAge+12e4)&&R(!0)}else R(!0);C.current=window.setInterval(()=>{R(!1)},36e5);let r=()=>{"visible"===document.visibilityState&&R(!1)};return document.addEventListener("visibilitychange",r),()=>{C.current&&window.clearInterval(C.current),document.removeEventListener("visibilitychange",r)}},[m,R,N]),(0,o.useEffect)(()=>{(async()=>{{let t=new URLSearchParams(window.location.search).get("customToken");if(t)try{await (0,n.p)(s.j2,t);try{var e;let t=await (null==(e=s.j2.currentUser)?void 0:e.getIdToken());t&&(await fetch("/api/auth/session",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({idToken:t}),credentials:"include"}),k(!0),(0,d.$)("login",{method:"google_oauth"}))}catch(e){console.error("Failed to set session cookie",e),k(!1)}window.history.replaceState({},document.title,window.location.pathname)}catch(e){console.error("Failed to sign in with custom token:",e),window.history.replaceState({},document.title,window.location.pathname),window.location.href="/login?error=CustomTokenSignInFailed"}}})()},[]);let T=async e=>{if(!m)throw Error("User not authenticated.");let t=g(),r=b(e.preferencesAndSchedule.timezone),a={...e,preferencesAndSchedule:{...e.preferencesAndSchedule,...r?{timezone:r}:e.preferencesAndSchedule.timezone?{timezone:t||"UTC",timezoneAutoDetected:!!t}:{}}},o=O((0,u.K1)(a));w(o),localStorage.setItem("userProfile_".concat(m.uid),JSON.stringify(o));try{let e=(0,c.H9)(s.db,"users",m.uid);await (0,c.BN)(e,o,{merge:!0})}catch(e){console.error("Error saving profile to Firestore:",e)}},P=(0,o.useCallback)(async()=>{let e=null==m?void 0:m.uid;await (0,n.CI)(s.j2),w(null);try{await fetch("/api/auth/session",{method:"DELETE",credentials:"include"})}catch(e){console.warn("[AuthContext] logout session delete failed",e)}try{localStorage.removeItem(I)}catch(e){console.warn("[AuthContext] logout removeItem failed",e)}try{e&&localStorage.removeItem("userProfile_".concat(e)),Object.keys(localStorage).forEach(e
1=>{e.startsWith("userProfile_")&&localStorage.removeItem(e)}),i.P.clear();try{sessionStorage.clear()}catch(e){console.warn("[AuthContext] sessionStorage clear failed",e)}}catch(e){console.warn("[AuthContext] logout localStorage cleanup failed",e)}try{l.i.publish("auth-logout")}catch(e){console.warn("[AuthContext] auth-logout publish failed",e)}(0,d.$)("logout"),window.location.href="/login"},[m]),F=(0,o.useCallback)(async()=>{if(!m)throw Error("User not authenticated.");let e=await m.getIdToken();await fetch("/api/user/delete-account",{method:"POST",headers:{Authorization:"Bearer ".concat(e)}}),await P()},[m,P]);return(0,a.jsx)(v.Provider,{value:{isAuthenticated:r,user:m,userProfile:p,loadingProfile:S,sessionReady:x,logout:P,deleteUserAccount:F,saveProfile:T,renewSession:R},children:t})}function m(){let e=(0,o.useContext)(v);if(!e)throw Error("useAuth must be used within an AuthProvider");return e}},84746:(e,t,r)=>{r.d(t,{dG:()=>d,db:()=>c,j2:()=>l,xv:()=>i});var a=r(52078),o=r(33885),n=r(19708);r(18281);let s={apiKey:"AIzaSyAlchEmQ-aXaWoUgMXHZ70--b0v2Jcc5Sk",authDomain:"tidaltasks-app.firebaseapp.com",projectId:"tidaltasks-app",storageBucket:"tidaltasks-app.firebasestorage.app",messagingSenderId:"953882206050",appId:"1:953882206050:web:342fdce829bffb6c73563b",measurementId:r(95704).env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID},i=(0,a.Wp)(s),l=(0,o.xI)(i),c=(0,n.aU)(i),d=async()=>{{let{getMessaging:e}=await r.e(4274).then(r.bind(r,54274));return e(i)}}},85338:(e,t,r)=>{r.d(t,{O:()=>i,P:()=>s});var a=r(41444);let o="tidal-cache-",n=new Map,s={get:e=>{let t="".concat(o).concat(e),r=localStorage.getItem(t);if(!r)return null;try{let e=JSON.parse(r);if(new Date().getTime()-e.timestamp>36e5)return localStorage.removeItem(t),null;return e.data}catch(r){return a.v.error('Failed to parse cache for key "'.concat(e,'":'),{err:String(r)}),localStorage.removeItem(t),null}},set:(e,t)=>{let r="".concat(o).concat(e),n={timestamp:new Date().getTime(),data:t};try{localStorage.setItem(r,JSON.stringify(n))}catch(t){a.v.error('Failed to set cache for key "'.concat(e,'":'),{err:String(t)})}},remove:e=>{let t="".concat(o).concat(e);localStorage.removeItem(t)},clear:()=>{Object.keys(localStorage).forEach(e=>{e.startsWith(o)&&localStorage.removeItem(e)})},forEach:e=>{Object.keys(localStorage).forEach(t=>{if(t.startsWith(o)){let r=localStorage.getItem(t);if(r)try{let a=JSON.parse(r),n=t.replace(o,"");e(n,a.data)}catch(e){a.v.error("Error parsing cache item during iteration:",{err:String(e)})}}})}};async function i(e,t){if(n.has(e))return n.get(e);let r=t().finally(()=>{n.delete(e)});return n.set(e,r),r}},85919:(e,t,r)=>{r.d(t,{i:()=>n});var a=r(41444);class o{subscribe(e,t){this.events[e]||(this.events[e]=[]),this.events[e].push(t)}unsubscribe(e,t){this.events[e]&&(this.events[e]=this.events[e].filter(e=>e!==t))}publish(e,t){this.events[e]&&this.events[e].forEach(r=>{try{r(t)}catch(t){a.v.error("Error in event bus callback for ".concat(e,":"),{err:String(t)})}})}constructor(){this.events={}}}let n=new 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.