progy 0.13.1 → 0.13.3

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/cli.js CHANGED
@@ -164,7 +164,7 @@ ${B.message?` > ${B.message.replace(/\n/g,`
164
164
 
165
165
  `:`\u274C Failed
166
166
 
167
- `)+q}}var $8=process.env.PROGY_API_URL||"https://progy.francy.workers.dev",N1=G8({baseURL:`${$8}/api/auth`,plugins:[K8()],fetchOptions:{async onRequest(q){let Q=await O0();if(Q.token)q.options.headers={...q.options.headers,Authorization:`Bearer ${Q.token}`}}}});var i=H0(tq(),".progy","solutions-repo");async function E1(q){try{return await aq(q),!0}catch{return!1}}class w1{static async runGit(q,Q){return new Promise((Y)=>{let X=V8("git",q,{cwd:Q}),J="",W="";X.stdout?.on("data",(K)=>J+=K.toString()),X.stderr?.on("data",(K)=>W+=K.toString()),X.on("close",(K)=>Y({success:K===0,stdout:J,stderr:W}))})}static async getGitHubAccessToken(){try{let q=await N1.getAccessToken({providerId:"github"});if(q?.data?.accessToken)return q.data.accessToken;return null}catch(q){return console.error(`[SYNC] Failed to get Access Token: ${q}`),null}}static async getGitHubUser(q){try{let Q=await fetch("https://api.github.com/user",{headers:{Authorization:`Bearer ${q}`}});if(!Q.ok)return null;return await Q.json()}catch{return null}}static async isPaidUser(){try{let Q=(await N1.getSession())?.data?.user?.subscription;return Q==="pro"||Q==="lifetime"}catch{return!1}}static async ensureRepo(){if(!await this.isPaidUser())return!1;let q=await this.getGitHubAccessToken();if(!q)return console.warn("[SYNC] No GitHub access token found. Sync disabled."),!1;let Q=await this.getGitHubUser(q);if(!Q)return console.warn("[SYNC] Could not fetch GitHub user. Sync disabled."),!1;let Y=`https://x-access-token:${q}@github.com/${Q.login}/progy-solutions.git`;if(!await E1(i)){if(await Z1(H0(tq(),".progy"),{recursive:!0}),console.log("[SYNC] Attempting to clone progy-solutions repo..."),!(await this.runGit(["clone",Y,i])).success){console.log(`[SYNC] Repo not found on GitHub account ${Q.login}. Creating private 'progy-solutions'...`);let J=await fetch("https://api.github.com/user/repos",{method:"POST",headers:{Authorization:`Bearer ${q}`,"Content-Type":"application/json"},body:JSON.stringify({name:"progy-solutions",private:!0,description:"My Progy course solutions"})});if(J.ok){console.log("[SYNC] Successfully created repo on GitHub.");let W=await this.runGit(["clone",Y,i]);if(!W.success)return console.error(`[SYNC] Clone failed even after creation: ${W.stderr}`),!1}else return console.error(`[SYNC] Failed to create repo: ${await J.text()}`),!1}}else await this.runGit(["remote","set-url","origin",Y],i);return!0}static async syncUp(q,Q,Y){try{if(!await this.ensureRepo())return;let X=q.replace(/https?:\/\//i,"").replace(/[\/:]/g,"__"),J=H0(i,X,Q);if(await Z1(J,{recursive:!0}),(await aq(Y)).isDirectory())await D1(Y,J,{recursive:!0});else{let $=Y.split(/[\\/]/).pop();await D1(Y,H0(J,$))}if(await this.runGit(["add","."],i),(await this.runGit(["status","--porcelain"],i)).stdout.trim().length>0){console.log("[SYNC] Changes detected. Committing..."),await this.runGit(["commit","-m",`Sync solution: ${q}/${Q}`],i);let $=await this.runGit(["push"],i);if($.success)console.log(`[SYNC] Successfully pushed solution for ${Q} to GitHub.`);else console.warn(`[SYNC] Push failed: ${$.stderr}`)}else console.log(`[SYNC] No changes to commit for ${Q}.`)}catch(X){console.error(`[SYNC] Error during syncUp: ${X}`)}}static async hydrateCourse(q,Q,Y){try{if(!await this.ensureRepo())return;console.log("[SYNC] Fetching solutions from GitHub...");let X=await this.runGit(["pull"],i);if(!X.success)console.warn(`[SYNC] Pull failed: ${X.stderr}`);let J=q.replace(/https?:\/\//i,"").replace(/[\/:]/g,"__"),W=H0(i,J);if(!await E1(W)){console.log(`[SYNC] No solutions found for ${q} in GitHub repository.`);return}console.log(`[SYNC] Hydrating ${q} solutions into ${Q}...`);let K=H0(Q,Y);if(!await E1(K))await Z1(K,{recursive:!0});await D1(W,K,{recursive:!0}),console.log("[SYNC] Hydration complete.")}catch(X){console.error(`[SYNC] Error during hydration: ${X}`)}}}var T1={name:"progy",version:"0.13.1",description:"The interactive CLI and learning platform for Progy courses.",license:"MIT",repository:{type:"git",url:"git+https://github.com/fhorray/progy.git"},keywords:["cli","education","learning","rust","go","interactive"],author:"Progy Team",type:"module",main:"./dist/cli.js",module:"./dist/cli.js",bin:{progy:"./dist/cli.js"},files:["dist"],publishConfig:{access:"public"},scripts:{dev:"bun run --hot src/backend/server.ts",start:"bun run src/backend/server.ts",build:"bun run ../../scripts/build.ts",prepublishOnly:"bun run build"},devDependencies:{"@nanostores/query":"^0.3.4","@nanostores/react":"^0.7.2","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.8","@radix-ui/react-tabs":"^1.1.13","@types/adm-zip":"^0.5.7","@types/bun":"latest","@types/react":"^19.0.0","@types/react-dom":"^19.0.0",autoprefixer:"^10.4.19","class-variance-authority":"^0.7.0",clsx:"^2.1.1","highlight.js":"^11.11.1","lucide-react":"^0.394.0",nanostores:"^0.10.3","radix-ui":"^1.0.1",react:"19.2.4","react-dom":"19.2.4","react-markdown":"^9.0.1","rehype-highlight":"^7.0.0","tailwind-merge":"^2.3.0"},peerDependencies:{typescript:"^5"},dependencies:{"@ai-sdk/react":"^3.0.79",ai:"^6.0.77","adm-zip":"^0.5.16","better-auth":"^1.4.18",cmdk:"^1.1.1",commander:"^12.1.0","use-stick-to-bottom":"^1.1.3",zod:"^4.3.6"}};var F1=T(b0(),".progy"),P1=T(F1,"config.json"),j8=process.env.PROGY_API_URL||"https://progy.francy.workers.dev",R8=process.env.PROGY_FRONTEND_URL||"https://progy.francy.workers.dev",q9=!import.meta.file.includes("node_modules"),I8=q9?"\x1B[33m(local/dev)\x1B[0m":"\x1B[32m(npm)\x1B[0m";if(!process.argv.includes("--completion")&&!process.argv.includes("completion"))console.log(`\x1B[1m[Progy]\x1B[0m v${T1.version} ${I8}`);var A0="course.json";async function f(q){try{return await U8(q),!0}catch{return!1}}async function M8(){let q=T(import.meta.dir,"../../../courses");if(await f(q))return q;return null}async function N8(q){if(!await f(F1))await Y0(F1,{recursive:!0});await p(P1,JSON.stringify({token:q}))}async function Z8(){if(!await f(P1))return null;try{return JSON.parse(await C0(P1,"utf-8")).token||null}catch{return null}}function D8(q){let Q=process.platform==="win32"?"start":process.platform==="darwin"?"open":"xdg-open";eq(Q,[q],{shell:!0}).unref()}async function Q9(q,Q,Y){console.log(`[INFO] Starting UI in ${Q?"OFFLINE":"ONLINE"} mode...`);let J=import.meta.file.endsWith(".ts")?"ts":"js",K=["run",T(import.meta.dir,"backend",`server.${J}`)];if(process.env.ENABLE_HMR==="true")K.splice(1,0,"--hot");let $=eq("bun",K,{stdio:"inherit",env:{...process.env,PROG_CWD:q,PROGY_OFFLINE:Q?"true":"false"}}),L=()=>{if($&&!$.killed)$.kill();process.exit(0)};if(process.on("SIGINT",L),process.on("SIGTERM",L),process.on("exit",()=>{if($&&!$.killed)$.kill()}),Y){console.log("[SYNC] Auto-save enabled.");let{watch:B}=await import("fs"),I=null,N=B(q,{recursive:!0},(w,V)=>{if(!V||V.includes(".git")||V.includes("node_modules"))return;if(I)clearTimeout(I);I=setTimeout(async()=>{try{await J0.sync(q,Y)}catch(z){console.error(`[SYNC] Failed to save: ${z}`)}},1000)});$.on("close",()=>{N.close(),console.log("[SYNC] Final save..."),J0.sync(q,Y).then(()=>process.exit(0))})}else $.on("close",(B)=>process.exit(B??0))}async function d0(q,Q){let Y=process.cwd(),X=!!Q.offline,J=Y,W=null;if(q&&q.endsWith(".progy")&&await f(q))W=O1(q);else{let $=(await z8(Y)).filter((L)=>L.endsWith(".progy"));if($.length>0){if($.length>1)console.warn(`[WARN] Multiple .progy files found. Using ${$[0]}`);W=T(Y,$[0])}}if(W){console.log(`[OPEN] Opening course: ${H8(W)}...`);try{if(J=await J0.unpack(W),console.log(`[KT] Runtime ready at: ${J}`),!X)try{let K=await e.validateCourse(J);await w1.hydrateCourse(K.id,J,K.content.exercises)}catch(K){console.warn(`[SYNC] Hydration skipped: ${K}`)}}catch(K){console.error(`[ERROR] Failed to unpack course: ${K}`),process.exit(1)}}else if(await f(T(Y,A0)))console.log("[INFO] Legacy course directory detected.");else console.log("[INFO] No .progy file or course structure found."),console.log("Run 'progy init' to create a new course.");await Q9(J,X,W)}r.name("progy").description("Universal programming course runner").version(`${T1.version} ${q9?"(local/dev)":"(npm)"}`);r.command("validate").description("Validate the current directory as a Progy course").argument("[path]","Path to course directory",".").action(async(q)=>{let Q=O1(q);console.log(`[VAL] Validating course at: ${Q}`);try{let Y=await e.validateCourse(Q);console.log(`
167
+ `)+q}}var $8=process.env.PROGY_API_URL||"https://progy.francy.workers.dev",N1=G8({baseURL:`${$8}/api/auth`,plugins:[K8()],fetchOptions:{async onRequest(q){let Q=await O0();if(Q.token)q.options.headers={...q.options.headers,Authorization:`Bearer ${Q.token}`}}}});var i=H0(tq(),".progy","solutions-repo");async function E1(q){try{return await aq(q),!0}catch{return!1}}class w1{static async runGit(q,Q){return new Promise((Y)=>{let X=V8("git",q,{cwd:Q}),J="",W="";X.stdout?.on("data",(K)=>J+=K.toString()),X.stderr?.on("data",(K)=>W+=K.toString()),X.on("close",(K)=>Y({success:K===0,stdout:J,stderr:W}))})}static async getGitHubAccessToken(){try{let q=await N1.getAccessToken({providerId:"github"});if(q?.data?.accessToken)return q.data.accessToken;return null}catch(q){return console.error(`[SYNC] Failed to get Access Token: ${q}`),null}}static async getGitHubUser(q){try{let Q=await fetch("https://api.github.com/user",{headers:{Authorization:`Bearer ${q}`}});if(!Q.ok)return null;return await Q.json()}catch{return null}}static async isPaidUser(){try{let Q=(await N1.getSession())?.data?.user?.subscription;return Q==="pro"||Q==="lifetime"}catch{return!1}}static async ensureRepo(){if(!await this.isPaidUser())return!1;let q=await this.getGitHubAccessToken();if(!q)return console.warn("[SYNC] No GitHub access token found. Sync disabled."),!1;let Q=await this.getGitHubUser(q);if(!Q)return console.warn("[SYNC] Could not fetch GitHub user. Sync disabled."),!1;let Y=`https://x-access-token:${q}@github.com/${Q.login}/progy-solutions.git`;if(!await E1(i)){if(await Z1(H0(tq(),".progy"),{recursive:!0}),console.log("[SYNC] Attempting to clone progy-solutions repo..."),!(await this.runGit(["clone",Y,i])).success){console.log(`[SYNC] Repo not found on GitHub account ${Q.login}. Creating private 'progy-solutions'...`);let J=await fetch("https://api.github.com/user/repos",{method:"POST",headers:{Authorization:`Bearer ${q}`,"Content-Type":"application/json"},body:JSON.stringify({name:"progy-solutions",private:!0,description:"My Progy course solutions"})});if(J.ok){console.log("[SYNC] Successfully created repo on GitHub.");let W=await this.runGit(["clone",Y,i]);if(!W.success)return console.error(`[SYNC] Clone failed even after creation: ${W.stderr}`),!1}else return console.error(`[SYNC] Failed to create repo: ${await J.text()}`),!1}}else await this.runGit(["remote","set-url","origin",Y],i);return!0}static async syncUp(q,Q,Y){try{if(!await this.ensureRepo())return;let X=q.replace(/https?:\/\//i,"").replace(/[\/:]/g,"__"),J=H0(i,X,Q);if(await Z1(J,{recursive:!0}),(await aq(Y)).isDirectory())await D1(Y,J,{recursive:!0});else{let $=Y.split(/[\\/]/).pop();await D1(Y,H0(J,$))}if(await this.runGit(["add","."],i),(await this.runGit(["status","--porcelain"],i)).stdout.trim().length>0){console.log("[SYNC] Changes detected. Committing..."),await this.runGit(["commit","-m",`Sync solution: ${q}/${Q}`],i);let $=await this.runGit(["push"],i);if($.success)console.log(`[SYNC] Successfully pushed solution for ${Q} to GitHub.`);else console.warn(`[SYNC] Push failed: ${$.stderr}`)}else console.log(`[SYNC] No changes to commit for ${Q}.`)}catch(X){console.error(`[SYNC] Error during syncUp: ${X}`)}}static async hydrateCourse(q,Q,Y){try{if(!await this.ensureRepo())return;console.log("[SYNC] Fetching solutions from GitHub...");let X=await this.runGit(["pull"],i);if(!X.success)console.warn(`[SYNC] Pull failed: ${X.stderr}`);let J=q.replace(/https?:\/\//i,"").replace(/[\/:]/g,"__"),W=H0(i,J);if(!await E1(W)){console.log(`[SYNC] No solutions found for ${q} in GitHub repository.`);return}console.log(`[SYNC] Hydrating ${q} solutions into ${Q}...`);let K=H0(Q,Y);if(!await E1(K))await Z1(K,{recursive:!0});await D1(W,K,{recursive:!0}),console.log("[SYNC] Hydration complete.")}catch(X){console.error(`[SYNC] Error during hydration: ${X}`)}}}var T1={name:"progy",version:"0.13.3",description:"The interactive CLI and learning platform for Progy courses.",license:"MIT",repository:{type:"git",url:"git+https://github.com/fhorray/progy.git"},keywords:["cli","education","learning","rust","go","interactive"],author:"Progy Team",type:"module",main:"./dist/cli.js",module:"./dist/cli.js",bin:{progy:"./dist/cli.js"},files:["dist"],publishConfig:{access:"public"},scripts:{dev:"bun run --hot src/backend/server.ts",start:"bun run src/backend/server.ts",build:"bun run ../../scripts/build.ts",prepublishOnly:"bun run build"},devDependencies:{"@nanostores/query":"^0.3.4","@nanostores/react":"^0.7.2","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.8","@radix-ui/react-tabs":"^1.1.13","@types/adm-zip":"^0.5.7","@types/bun":"latest","@types/react":"^19.0.0","@types/react-dom":"^19.0.0",autoprefixer:"^10.4.19","class-variance-authority":"^0.7.0",clsx:"^2.1.1","highlight.js":"^11.11.1","lucide-react":"^0.394.0",nanostores:"^0.10.3","radix-ui":"^1.0.1",react:"19.2.4","react-dom":"19.2.4","react-markdown":"^9.0.1","rehype-highlight":"^7.0.0","tailwind-merge":"^2.3.0"},peerDependencies:{typescript:"^5"},dependencies:{"@ai-sdk/react":"^3.0.79",ai:"^6.0.77","adm-zip":"^0.5.16","better-auth":"^1.4.18",cmdk:"^1.1.1",commander:"^12.1.0","use-stick-to-bottom":"^1.1.3",zod:"^4.3.6"}};var F1=T(b0(),".progy"),P1=T(F1,"config.json"),j8=process.env.PROGY_API_URL||"https://progy.francy.workers.dev",R8=process.env.PROGY_FRONTEND_URL||"https://progy.francy.workers.dev",q9=!import.meta.file.includes("node_modules"),I8=q9?"\x1B[33m(local/dev)\x1B[0m":"\x1B[32m(npm)\x1B[0m";if(!process.argv.includes("--completion")&&!process.argv.includes("completion"))console.log(`\x1B[1m[Progy]\x1B[0m v${T1.version} ${I8}`);var A0="course.json";async function f(q){try{return await U8(q),!0}catch{return!1}}async function M8(){let q=T(import.meta.dir,"../../../courses");if(await f(q))return q;return null}async function N8(q){if(!await f(F1))await Y0(F1,{recursive:!0});await p(P1,JSON.stringify({token:q}))}async function Z8(){if(!await f(P1))return null;try{return JSON.parse(await C0(P1,"utf-8")).token||null}catch{return null}}function D8(q){let Q=process.platform==="win32"?"start":process.platform==="darwin"?"open":"xdg-open";eq(Q,[q],{shell:!0}).unref()}async function Q9(q,Q,Y){console.log(`[INFO] Starting UI in ${Q?"OFFLINE":"ONLINE"} mode...`);let J=import.meta.file.endsWith(".ts")?"ts":"js",K=["run",T(import.meta.dir,"backend",`server.${J}`)];if(process.env.ENABLE_HMR==="true")K.splice(1,0,"--hot");let $=eq("bun",K,{stdio:"inherit",env:{...process.env,PROG_CWD:q,PROGY_OFFLINE:Q?"true":"false"}}),L=()=>{if($&&!$.killed)$.kill();process.exit(0)};if(process.on("SIGINT",L),process.on("SIGTERM",L),process.on("exit",()=>{if($&&!$.killed)$.kill()}),Y){console.log("[SYNC] Auto-save enabled.");let{watch:B}=await import("fs"),I=null,N=B(q,{recursive:!0},(w,V)=>{if(!V||V.includes(".git")||V.includes("node_modules"))return;if(I)clearTimeout(I);I=setTimeout(async()=>{try{await J0.sync(q,Y)}catch(z){console.error(`[SYNC] Failed to save: ${z}`)}},1000)});$.on("close",()=>{N.close(),console.log("[SYNC] Final save..."),J0.sync(q,Y).then(()=>process.exit(0))})}else $.on("close",(B)=>process.exit(B??0))}async function d0(q,Q){let Y=process.cwd(),X=!!Q.offline,J=Y,W=null;if(q&&q.endsWith(".progy")&&await f(q))W=O1(q);else{let $=(await z8(Y)).filter((L)=>L.endsWith(".progy"));if($.length>0){if($.length>1)console.warn(`[WARN] Multiple .progy files found. Using ${$[0]}`);W=T(Y,$[0])}}if(W){console.log(`[OPEN] Opening course: ${H8(W)}...`);try{if(J=await J0.unpack(W),console.log(`[KT] Runtime ready at: ${J}`),!X)try{let K=await e.validateCourse(J);await w1.hydrateCourse(K.id,J,K.content.exercises)}catch(K){console.warn(`[SYNC] Hydration skipped: ${K}`)}}catch(K){console.error(`[ERROR] Failed to unpack course: ${K}`),process.exit(1)}}else if(await f(T(Y,A0)))console.log("[INFO] Legacy course directory detected.");else console.log("[INFO] No .progy file or course structure found."),console.log("Run 'progy init' to create a new course.");await Q9(J,X,W)}r.name("progy").description("Universal programming course runner").version(`${T1.version} ${q9?"(local/dev)":"(npm)"}`);r.command("validate").description("Validate the current directory as a Progy course").argument("[path]","Path to course directory",".").action(async(q)=>{let Q=O1(q);console.log(`[VAL] Validating course at: ${Q}`);try{let Y=await e.validateCourse(Q);console.log(`
168
168
  \u2705 Course is Valid!`),console.log(` ID: ${Y.id}`),console.log(` Name: ${Y.name}`),console.log(` Content: ${Y.content.root}`)}catch(Y){console.error(`
169
169
  \u274C Validation Failed:`),console.error(Y.message),process.exit(1)}});r.command("dev").description("Run the current directory as a course (Hot-reload/No-packaging)").option("--offline","Run in offline mode").action(async(q)=>{let Q=process.cwd();try{await e.validateCourse(Q)}catch(Y){console.error("[ERROR] Current directory is not a valid course:"),console.error(Y.message),process.exit(1)}console.log(`[DEV] Starting in Development Mode (Source: ${Q})`),await Q9(Q,!!q.offline,null)});r.command("pack").description("Package the current directory into a .progy file").option("-o, --out <file>","Output filename").action(async(q)=>{let Q=process.cwd();try{let Y=await e.validateCourse(Q),X=q.out||`${Y.id}.progy`,J=O1(X);console.log(`[PACK] Packaging course '${Y.id}'...`),await J0.pack(Q,J),console.log(`[SUCCESS] Created: ${X}`)}catch(Y){console.error(`
170
170
  \u274C Packaging Failed:`),console.error(Y.message),process.exit(1)}});r.command("init").description("Initialize a new course in the current directory").option("-c, --course <course>","Language/Course to initialize (e.g., rust)").option("--offline","Run in offline mode (Guest access, local storage only)").action(async(q)=>{let Q=process.cwd(),Y=!!q.offline,X=T(Q,A0),J=await f(X),W=null,K=q.course||"generic";if(J&&!q.course){console.log(`[INFO] Detected '${A0}'. Starting progy...`);let V=JSON.parse(await C0(X,"utf-8"));console.log(`[INFO] Course '${V.name}' found.`),await d0(void 0,{offline:Y});return}let $=null;if(!Y){if($=await Z8(),!$)console.error("\u274C Authentication required for Online Mode."),process.exit(1)}if(console.log(`[INFO] Initializing ${K} course in ${Q}...`),K==="generic"){let V=x0.generic;if(!V)throw Error("Generic template not found");await p(T(Q,A0),JSON.stringify(V.courseJson,null,2)),await p(T(Q,"SETUP.md"),V.setupMd);let z=T(Q,"content","01_intro");await Y0(z,{recursive:!0}),await p(T(z,"README.md"),V.introReadme),await p(T(z,V.introFilename),V.introCode);let j=T(Q,"runner");await Y0(j,{recursive:!0}),await p(T(j,"README.md"),r1),await p(T(j,"index.js"),`
@@ -286,7 +286,7 @@ If you want to hide the \`${q.titleName}\`, you can wrap it with our VisuallyHid
286
286
 
287
287
  For more information, see https://radix-ui.com/primitives/docs/components/${q.docsSlug}`;return Q5.useEffect(()=>{if(J){if(!document.getElementById(J))console.error(X)}},[X,J]),null},ig="DialogDescriptionWarning",ag=({contentRef:J,descriptionId:q})=>{let Y=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${eb(ig).contentName}}.`;return Q5.useEffect(()=>{let K=J.current?.getAttribute("aria-describedby");if(q&&K){if(!document.getElementById(q))console.warn(Y)}},[Y,J,q]),null},OF=FF,rg=UF,IF=LF,TF=VF,DF=NF,_F=PF,RF=AF,ng=CF;var ZO=H0(v0(),1);function zO(J){let[q,X]=ZO.useState(void 0);return r4(()=>{if(J){X({width:J.offsetWidth,height:J.offsetHeight});let Y=new ResizeObserver((K)=>{if(!Array.isArray(K))return;if(!K.length)return;let B=K[0],$,F;if("borderBoxSize"in B){let V=B.borderBoxSize,N=Array.isArray(V)?V[0]:V;$=N.inlineSize,F=N.blockSize}else $=J.offsetWidth,F=J.offsetHeight;X({width:$,height:F})});return Y.observe(J,{box:"border-box"}),()=>Y.unobserve(J)}else X(void 0)},[J]),q}var f0=H0(v0(),1);var e4=H0(v0(),1);var qO=["top","right","bottom","left"];var{min:z9,max:j4,round:DQ,floor:_Q}=Math,$8=(J)=>({x:J,y:J}),sg={left:"right",right:"left",bottom:"top",top:"bottom"},og={start:"end",end:"start"};function VY(J,q,X){return j4(J,z9(q,X))}function J9(J,q){return typeof J==="function"?J(q):J}function Q9(J){return J.split("-")[0]}function JZ(J){return J.split("-")[1]}function NY(J){return J==="x"?"y":"x"}function MY(J){return J==="y"?"height":"width"}var tg=new Set(["top","bottom"]);function F8(J){return tg.has(Q9(J))?"y":"x"}function PY(J){return NY(F8(J))}function XO(J,q,X){if(X===void 0)X=!1;let Y=JZ(J),K=PY(J),B=MY(K),$=K==="x"?Y===(X?"end":"start")?"right":"left":Y==="start"?"bottom":"top";if(q.reference[B]>q.floating[B])$=TQ($);return[$,TQ($)]}function HO(J){let q=TQ(J);return[LY(J),q,LY(q)]}function LY(J){return J.replace(/start|end/g,(q)=>og[q])}var JO=["left","right"],QO=["right","left"],eg=["top","bottom"],ZE=["bottom","top"];function zE(J,q,X){switch(J){case"top":case"bottom":if(X)return q?QO:JO;return q?JO:QO;case"left":case"right":return q?eg:ZE;default:return[]}}function YO(J,q,X,Y){let K=JZ(J),B=zE(Q9(J),X==="start",Y);if(K){if(B=B.map(($)=>$+"-"+K),q)B=B.concat(B.map(LY))}return B}function TQ(J){return J.replace(/left|right|bottom|top/g,(q)=>sg[q])}function JE(J){return{top:0,right:0,bottom:0,left:0,...J}}function jF(J){return typeof J!=="number"?JE(J):{top:J,right:J,bottom:J,left:J}}function QZ(J){let{x:q,y:X,width:Y,height:K}=J;return{width:Y,height:K,top:X,left:q,right:q+Y,bottom:X+K,x:q,y:X}}function WO(J,q,X){let{reference:Y,floating:K}=J,B=F8(q),$=PY(q),F=MY($),V=Q9(q),N=B==="y",U=Y.x+Y.width/2-K.width/2,L=Y.y+Y.height/2-K.height/2,P=Y[F]/2-K[F]/2,A;switch(V){case"top":A={x:U,y:Y.y-K.height};break;case"bottom":A={x:U,y:Y.y+Y.height};break;case"right":A={x:Y.x+Y.width,y:L};break;case"left":A={x:Y.x-K.width,y:L};break;default:A={x:Y.x,y:Y.y}}switch(JZ(q)){case"start":A[$]-=P*(X&&N?-1:1);break;case"end":A[$]+=P*(X&&N?-1:1);break}return A}async function BO(J,q){var X;if(q===void 0)q={};let{x:Y,y:K,platform:B,rects:$,elements:F,strategy:V}=J,{boundary:N="clippingAncestors",rootBoundary:U="viewport",elementContext:L="floating",altBoundary:P=!1,padding:A=0}=J9(q,J),R=jF(A),j=F[P?L==="floating"?"reference":"floating":L],k=QZ(await B.getClippingRect({element:((X=await(B.isElement==null?void 0:B.isElement(j)))!=null?X:!0)?j:j.contextElement||await(B.getDocumentElement==null?void 0:B.getDocumentElement(F.floating)),boundary:N,rootBoundary:U,strategy:V})),v=L==="floating"?{x:Y,y:K,width:$.floating.width,height:$.floating.height}:$.reference,E=await(B.getOffsetParent==null?void 0:B.getOffsetParent(F.floating)),x=await(B.isElement==null?void 0:B.isElement(E))?await(B.getScale==null?void 0:B.getScale(E))||{x:1,y:1}:{x:1,y:1},e=QZ(B.convertOffsetParentRelativeRectToViewportRelativeRect?await B.convertOffsetParentRelativeRectToViewportRelativeRect({elements:F,rect:v,offsetParent:E,strategy:V}):v);return{top:(k.top-e.top+R.top)/x.y,bottom:(e.bottom-k.bottom+R.bottom)/x.y,left:(k.left-e.left+R.left)/x.x,right:(e.right-k.right+R.right)/x.x}}var $O=async(J,q,X)=>{let{placement:Y="bottom",strategy:K="absolute",middleware:B=[],platform:$}=X,F=B.filter(Boolean),V=await($.isRTL==null?void 0:$.isRTL(q)),N=await $.getElementRects({reference:J,floating:q,strategy:K}),{x:U,y:L}=WO(N,Y,V),P=Y,A={},R=0;for(let j=0;j<F.length;j++){var O;let{name:k,fn:v}=F[j],{x:E,y:x,data:e,reset:y}=await v({x:U,y:L,initialPlacement:Y,placement:P,strategy:K,middlewareData:A,rects:N,platform:{...$,detectOverflow:(O=$.detectOverflow)!=null?O:BO},elements:{reference:J,floating:q}});if(U=E!=null?E:U,L=x!=null?x:L,A={...A,[k]:{...A[k],...e}},y&&R<=50){if(R++,typeof y==="object"){if(y.placement)P=y.placement;if(y.rects)N=y.rects===!0?await $.getElementRects({reference:J,floating:q,strategy:K}):y.rects;({x:U,y:L}=WO(N,P,V))}j=-1}}return{x:U,y:L,placement:P,strategy:K,middlewareData:A}},FO=(J)=>({name:"arrow",options:J,async fn(q){let{x:X,y:Y,placement:K,rects:B,platform:$,elements:F,middlewareData:V}=q,{element:N,padding:U=0}=J9(J,q)||{};if(N==null)return{};let L=jF(U),P={x:X,y:Y},A=PY(K),R=MY(A),O=await $.getDimensions(N),j=A==="y",k=j?"top":"left",v=j?"bottom":"right",E=j?"clientHeight":"clientWidth",x=B.reference[R]+B.reference[A]-P[A]-B.floating[R],e=P[A]-B.reference[A],y=await($.getOffsetParent==null?void 0:$.getOffsetParent(N)),J0=y?y[E]:0;if(!J0||!await($.isElement==null?void 0:$.isElement(y)))J0=F.floating[E]||B.floating[R];let Z0=x/2-e/2,$0=J0/2-O[R]/2-1,t=z9(L[k],$0),P0=z9(L[v],$0),K0=t,z0=J0-O[R]-P0,Y0=J0/2-O[R]/2+Z0,n=VY(K0,Y0,z0),u=!V.arrow&&JZ(K)!=null&&Y0!==n&&B.reference[R]/2-(Y0<K0?t:P0)-O[R]/2<0,s=u?Y0<K0?Y0-K0:Y0-z0:0;return{[A]:P[A]+s,data:{[A]:n,centerOffset:Y0-n-s,...u&&{alignmentOffset:s}},reset:u}}});var UO=function(J){if(J===void 0)J={};return{name:"flip",options:J,async fn(q){var X,Y;let{placement:K,middlewareData:B,rects:$,initialPlacement:F,platform:V,elements:N}=q,{mainAxis:U=!0,crossAxis:L=!0,fallbackPlacements:P,fallbackStrategy:A="bestFit",fallbackAxisSideDirection:R="none",flipAlignment:O=!0,...j}=J9(J,q);if((X=B.arrow)!=null&&X.alignmentOffset)return{};let k=Q9(K),v=F8(F),E=Q9(F)===F,x=await(V.isRTL==null?void 0:V.isRTL(N.floating)),e=P||(E||!O?[TQ(F)]:HO(F)),y=R!=="none";if(!P&&y)e.push(...YO(F,O,R,x));let J0=[F,...e],Z0=await V.detectOverflow(q,j),$0=[],t=((Y=B.flip)==null?void 0:Y.overflows)||[];if(U)$0.push(Z0[k]);if(L){let Y0=XO(K,$,x);$0.push(Z0[Y0[0]],Z0[Y0[1]])}if(t=[...t,{placement:K,overflows:$0}],!$0.every((Y0)=>Y0<=0)){var P0,K0;let Y0=(((P0=B.flip)==null?void 0:P0.index)||0)+1,n=J0[Y0];if(n){if(!(L==="alignment"?v!==F8(n):!1)||t.every((Q0)=>F8(Q0.placement)===v?Q0.overflows[0]>0:!0))return{data:{index:Y0,overflows:t},reset:{placement:n}}}let u=(K0=t.filter((s)=>s.overflows[0]<=0).sort((s,Q0)=>s.overflows[1]-Q0.overflows[1])[0])==null?void 0:K0.placement;if(!u)switch(A){case"bestFit":{var z0;let s=(z0=t.filter((Q0)=>{if(y){let i=F8(Q0.placement);return i===v||i==="y"}return!0}).map((Q0)=>[Q0.placement,Q0.overflows.filter((i)=>i>0).reduce((i,C)=>i+C,0)]).sort((Q0,i)=>Q0[1]-i[1])[0])==null?void 0:z0[0];if(s)u=s;break}case"initialPlacement":u=F;break}if(K!==u)return{reset:{placement:u}}}return{}}}};function KO(J,q){return{top:J.top-q.height,right:J.right-q.width,bottom:J.bottom-q.height,left:J.left-q.width}}function GO(J){return qO.some((q)=>J[q]>=0)}var wO=function(J){if(J===void 0)J={};return{name:"hide",options:J,async fn(q){let{rects:X,platform:Y}=q,{strategy:K="referenceHidden",...B}=J9(J,q);switch(K){case"referenceHidden":{let $=await Y.detectOverflow(q,{...B,elementContext:"reference"}),F=KO($,X.reference);return{data:{referenceHiddenOffsets:F,referenceHidden:GO(F)}}}case"escaped":{let $=await Y.detectOverflow(q,{...B,altBoundary:!0}),F=KO($,X.floating);return{data:{escapedOffsets:F,escaped:GO(F)}}}default:return{}}}}};var LO=new Set(["left","top"]);async function QE(J,q){let{placement:X,platform:Y,elements:K}=J,B=await(Y.isRTL==null?void 0:Y.isRTL(K.floating)),$=Q9(X),F=JZ(X),V=F8(X)==="y",N=LO.has($)?-1:1,U=B&&V?-1:1,L=J9(q,J),{mainAxis:P,crossAxis:A,alignmentAxis:R}=typeof L==="number"?{mainAxis:L,crossAxis:0,alignmentAxis:null}:{mainAxis:L.mainAxis||0,crossAxis:L.crossAxis||0,alignmentAxis:L.alignmentAxis};if(F&&typeof R==="number")A=F==="end"?R*-1:R;return V?{x:A*U,y:P*N}:{x:P*N,y:A*U}}var VO=function(J){if(J===void 0)J=0;return{name:"offset",options:J,async fn(q){var X,Y;let{x:K,y:B,placement:$,middlewareData:F}=q,V=await QE(q,J);if($===((X=F.offset)==null?void 0:X.placement)&&(Y=F.arrow)!=null&&Y.alignmentOffset)return{};return{x:K+V.x,y:B+V.y,data:{...V,placement:$}}}}},NO=function(J){if(J===void 0)J={};return{name:"shift",options:J,async fn(q){let{x:X,y:Y,placement:K,platform:B}=q,{mainAxis:$=!0,crossAxis:F=!1,limiter:V={fn:(k)=>{let{x:v,y:E}=k;return{x:v,y:E}}},...N}=J9(J,q),U={x:X,y:Y},L=await B.detectOverflow(q,N),P=F8(Q9(K)),A=NY(P),R=U[A],O=U[P];if($){let k=A==="y"?"top":"left",v=A==="y"?"bottom":"right",E=R+L[k],x=R-L[v];R=VY(E,R,x)}if(F){let k=P==="y"?"top":"left",v=P==="y"?"bottom":"right",E=O+L[k],x=O-L[v];O=VY(E,O,x)}let j=V.fn({...q,[A]:R,[P]:O});return{...j,data:{x:j.x-X,y:j.y-Y,enabled:{[A]:$,[P]:F}}}}}},MO=function(J){if(J===void 0)J={};return{options:J,fn(q){let{x:X,y:Y,placement:K,rects:B,middlewareData:$}=q,{offset:F=0,mainAxis:V=!0,crossAxis:N=!0}=J9(J,q),U={x:X,y:Y},L=F8(K),P=NY(L),A=U[P],R=U[L],O=J9(F,q),j=typeof O==="number"?{mainAxis:O,crossAxis:0}:{mainAxis:0,crossAxis:0,...O};if(V){let E=P==="y"?"height":"width",x=B.reference[P]-B.floating[E]+j.mainAxis,e=B.reference[P]+B.reference[E]-j.mainAxis;if(A<x)A=x;else if(A>e)A=e}if(N){var k,v;let E=P==="y"?"width":"height",x=LO.has(Q9(K)),e=B.reference[L]-B.floating[E]+(x?((k=$.offset)==null?void 0:k[L])||0:0)+(x?0:j.crossAxis),y=B.reference[L]+B.reference[E]+(x?0:((v=$.offset)==null?void 0:v[L])||0)-(x?j.crossAxis:0);if(R<e)R=e;else if(R>y)R=y}return{[P]:A,[L]:R}}}},PO=function(J){if(J===void 0)J={};return{name:"size",options:J,async fn(q){var X,Y;let{placement:K,rects:B,platform:$,elements:F}=q,{apply:V=()=>{},...N}=J9(J,q),U=await $.detectOverflow(q,N),L=Q9(K),P=JZ(K),A=F8(K)==="y",{width:R,height:O}=B.floating,j,k;if(L==="top"||L==="bottom")j=L,k=P===(await($.isRTL==null?void 0:$.isRTL(F.floating))?"start":"end")?"left":"right";else k=L,j=P==="end"?"top":"bottom";let v=O-U.top-U.bottom,E=R-U.left-U.right,x=z9(O-U[j],v),e=z9(R-U[k],E),y=!q.middlewareData.shift,J0=x,Z0=e;if((X=q.middlewareData.shift)!=null&&X.enabled.x)Z0=E;if((Y=q.middlewareData.shift)!=null&&Y.enabled.y)J0=v;if(y&&!P){let t=j4(U.left,0),P0=j4(U.right,0),K0=j4(U.top,0),z0=j4(U.bottom,0);if(A)Z0=R-2*(t!==0||P0!==0?t+P0:j4(U.left,U.right));else J0=O-2*(K0!==0||z0!==0?K0+z0:j4(U.top,U.bottom))}await V({...q,availableWidth:Z0,availableHeight:J0});let $0=await $.getDimensions(F.floating);if(R!==$0.width||O!==$0.height)return{reset:{rects:!0}};return{}}}};function AY(){return typeof window<"u"}function XZ(J){if(CO(J))return(J.nodeName||"").toLowerCase();return"#document"}function t4(J){var q;return(J==null||(q=J.ownerDocument)==null?void 0:q.defaultView)||window}function U8(J){var q;return(q=(CO(J)?J.ownerDocument:J.document)||window.document)==null?void 0:q.documentElement}function CO(J){if(!AY())return!1;return J instanceof Node||J instanceof t4(J).Node}function d2(J){if(!AY())return!1;return J instanceof Element||J instanceof t4(J).Element}function w8(J){if(!AY())return!1;return J instanceof HTMLElement||J instanceof t4(J).HTMLElement}function AO(J){if(!AY()||typeof ShadowRoot>"u")return!1;return J instanceof ShadowRoot||J instanceof t4(J).ShadowRoot}var qE=new Set(["inline","contents"]);function u3(J){let{overflow:q,overflowX:X,overflowY:Y,display:K}=c2(J);return/auto|scroll|overlay|hidden|clip/.test(q+Y+X)&&!qE.has(K)}var XE=new Set(["table","td","th"]);function bO(J){return XE.has(XZ(J))}var HE=[":popover-open",":modal"];function RQ(J){return HE.some((q)=>{try{return J.matches(q)}catch(X){return!1}})}var YE=["transform","translate","scale","rotate","perspective"],WE=["transform","translate","scale","rotate","perspective","filter"],KE=["paint","layout","strict","content"];function CY(J){let q=bY(),X=d2(J)?c2(J):J;return YE.some((Y)=>X[Y]?X[Y]!=="none":!1)||(X.containerType?X.containerType!=="normal":!1)||!q&&(X.backdropFilter?X.backdropFilter!=="none":!1)||!q&&(X.filter?X.filter!=="none":!1)||WE.some((Y)=>(X.willChange||"").includes(Y))||KE.some((Y)=>(X.contain||"").includes(Y))}function OO(J){let q=u9(J);while(w8(q)&&!HZ(q)){if(CY(q))return q;else if(RQ(q))return null;q=u9(q)}return null}function bY(){if(typeof CSS>"u"||!CSS.supports)return!1;return CSS.supports("-webkit-backdrop-filter","none")}var GE=new Set(["html","body","#document"]);function HZ(J){return GE.has(XZ(J))}function c2(J){return t4(J).getComputedStyle(J)}function jQ(J){if(d2(J))return{scrollLeft:J.scrollLeft,scrollTop:J.scrollTop};return{scrollLeft:J.scrollX,scrollTop:J.scrollY}}function u9(J){if(XZ(J)==="html")return J;let q=J.assignedSlot||J.parentNode||AO(J)&&J.host||U8(J);return AO(q)?q.host:q}function IO(J){let q=u9(J);if(HZ(q))return J.ownerDocument?J.ownerDocument.body:J.body;if(w8(q)&&u3(q))return q;return IO(q)}function qZ(J,q,X){var Y;if(q===void 0)q=[];if(X===void 0)X=!0;let K=IO(J),B=K===((Y=J.ownerDocument)==null?void 0:Y.body),$=t4(K);if(B){let F=OY($);return q.concat($,$.visualViewport||[],u3(K)?K:[],F&&X?qZ(F):[])}return q.concat(K,qZ(K,[],X))}function OY(J){return J.parent&&Object.getPrototypeOf(J.parent)?J.frameElement:null}function RO(J){let q=c2(J),X=parseFloat(q.width)||0,Y=parseFloat(q.height)||0,K=w8(J),B=K?J.offsetWidth:X,$=K?J.offsetHeight:Y,F=DQ(X)!==B||DQ(Y)!==$;if(F)X=B,Y=$;return{width:X,height:Y,$:F}}function SF(J){return!d2(J)?J.contextElement:J}function p3(J){let q=SF(J);if(!w8(q))return $8(1);let X=q.getBoundingClientRect(),{width:Y,height:K,$:B}=RO(q),$=(B?DQ(X.width):X.width)/Y,F=(B?DQ(X.height):X.height)/K;if(!$||!Number.isFinite($))$=1;if(!F||!Number.isFinite(F))F=1;return{x:$,y:F}}var BE=$8(0);function jO(J){let q=t4(J);if(!bY()||!q.visualViewport)return BE;return{x:q.visualViewport.offsetLeft,y:q.visualViewport.offsetTop}}function $E(J,q,X){if(q===void 0)q=!1;if(!X||q&&X!==t4(J))return!1;return q}function YZ(J,q,X,Y){if(q===void 0)q=!1;if(X===void 0)X=!1;let K=J.getBoundingClientRect(),B=SF(J),$=$8(1);if(q)if(Y){if(d2(Y))$=p3(Y)}else $=p3(J);let F=$E(B,X,Y)?jO(B):$8(0),V=(K.left+F.x)/$.x,N=(K.top+F.y)/$.y,U=K.width/$.x,L=K.height/$.y;if(B){let P=t4(B),A=Y&&d2(Y)?t4(Y):Y,R=P,O=OY(R);while(O&&Y&&A!==R){let j=p3(O),k=O.getBoundingClientRect(),v=c2(O),E=k.left+(O.clientLeft+parseFloat(v.paddingLeft))*j.x,x=k.top+(O.clientTop+parseFloat(v.paddingTop))*j.y;V*=j.x,N*=j.y,U*=j.x,L*=j.y,V+=E,N+=x,R=t4(O),O=OY(R)}}return QZ({width:U,height:L,x:V,y:N})}function IY(J,q){let X=jQ(J).scrollLeft;if(!q)return YZ(U8(J)).left+X;return q.left+X}function kO(J,q){let X=J.getBoundingClientRect(),Y=X.left+q.scrollLeft-IY(J,X),K=X.top+q.scrollTop;return{x:Y,y:K}}function FE(J){let{elements:q,rect:X,offsetParent:Y,strategy:K}=J,B=K==="fixed",$=U8(Y),F=q?RQ(q.floating):!1;if(Y===$||F&&B)return X;let V={scrollLeft:0,scrollTop:0},N=$8(1),U=$8(0),L=w8(Y);if(L||!L&&!B){if(XZ(Y)!=="body"||u3($))V=jQ(Y);if(w8(Y)){let A=YZ(Y);N=p3(Y),U.x=A.x+Y.clientLeft,U.y=A.y+Y.clientTop}}let P=$&&!L&&!B?kO($,V):$8(0);return{width:X.width*N.x,height:X.height*N.y,x:X.x*N.x-V.scrollLeft*N.x+U.x+P.x,y:X.y*N.y-V.scrollTop*N.y+U.y+P.y}}function UE(J){return Array.from(J.getClientRects())}function wE(J){let q=U8(J),X=jQ(J),Y=J.ownerDocument.body,K=j4(q.scrollWidth,q.clientWidth,Y.scrollWidth,Y.clientWidth),B=j4(q.scrollHeight,q.clientHeight,Y.scrollHeight,Y.clientHeight),$=-X.scrollLeft+IY(J),F=-X.scrollTop;if(c2(Y).direction==="rtl")$+=j4(q.clientWidth,Y.clientWidth)-K;return{width:K,height:B,x:$,y:F}}var TO=25;function LE(J,q){let X=t4(J),Y=U8(J),K=X.visualViewport,B=Y.clientWidth,$=Y.clientHeight,F=0,V=0;if(K){B=K.width,$=K.height;let U=bY();if(!U||U&&q==="fixed")F=K.offsetLeft,V=K.offsetTop}let N=IY(Y);if(N<=0){let U=Y.ownerDocument,L=U.body,P=getComputedStyle(L),A=U.compatMode==="CSS1Compat"?parseFloat(P.marginLeft)+parseFloat(P.marginRight)||0:0,R=Math.abs(Y.clientWidth-L.clientWidth-A);if(R<=TO)B-=R}else if(N<=TO)B+=N;return{width:B,height:$,x:F,y:V}}var VE=new Set(["absolute","fixed"]);function NE(J,q){let X=YZ(J,!0,q==="fixed"),Y=X.top+J.clientTop,K=X.left+J.clientLeft,B=w8(J)?p3(J):$8(1),$=J.clientWidth*B.x,F=J.clientHeight*B.y,V=K*B.x,N=Y*B.y;return{width:$,height:F,x:V,y:N}}function DO(J,q,X){let Y;if(q==="viewport")Y=LE(J,X);else if(q==="document")Y=wE(U8(J));else if(d2(q))Y=NE(q,X);else{let K=jO(J);Y={x:q.x-K.x,y:q.y-K.y,width:q.width,height:q.height}}return QZ(Y)}function SO(J,q){let X=u9(J);if(X===q||!d2(X)||HZ(X))return!1;return c2(X).position==="fixed"||SO(X,q)}function ME(J,q){let X=q.get(J);if(X)return X;let Y=qZ(J,[],!1).filter((F)=>d2(F)&&XZ(F)!=="body"),K=null,B=c2(J).position==="fixed",$=B?u9(J):J;while(d2($)&&!HZ($)){let F=c2($),V=CY($);if(!V&&F.position==="fixed")K=null;if(B?!V&&!K:!V&&F.position==="static"&&!!K&&VE.has(K.position)||u3($)&&!V&&SO(J,$))Y=Y.filter((U)=>U!==$);else K=F;$=u9($)}return q.set(J,Y),Y}function PE(J){let{element:q,boundary:X,rootBoundary:Y,strategy:K}=J,$=[...X==="clippingAncestors"?RQ(q)?[]:ME(q,this._c):[].concat(X),Y],F=$[0],V=$.reduce((N,U)=>{let L=DO(q,U,K);return N.top=j4(L.top,N.top),N.right=z9(L.right,N.right),N.bottom=z9(L.bottom,N.bottom),N.left=j4(L.left,N.left),N},DO(q,F,K));return{width:V.right-V.left,height:V.bottom-V.top,x:V.left,y:V.top}}function AE(J){let{width:q,height:X}=RO(J);return{width:q,height:X}}function CE(J,q,X){let Y=w8(q),K=U8(q),B=X==="fixed",$=YZ(J,!0,B,q),F={scrollLeft:0,scrollTop:0},V=$8(0);function N(){V.x=IY(K)}if(Y||!Y&&!B){if(XZ(q)!=="body"||u3(K))F=jQ(q);if(Y){let A=YZ(q,!0,B,q);V.x=A.x+q.clientLeft,V.y=A.y+q.clientTop}else if(K)N()}if(B&&!Y&&K)N();let U=K&&!Y&&!B?kO(K,F):$8(0),L=$.left+F.scrollLeft-V.x-U.x,P=$.top+F.scrollTop-V.y-U.y;return{x:L,y:P,width:$.width,height:$.height}}function kF(J){return c2(J).position==="static"}function _O(J,q){if(!w8(J)||c2(J).position==="fixed")return null;if(q)return q(J);let X=J.offsetParent;if(U8(J)===X)X=X.ownerDocument.body;return X}function yO(J,q){let X=t4(J);if(RQ(J))return X;if(!w8(J)){let K=u9(J);while(K&&!HZ(K)){if(d2(K)&&!kF(K))return K;K=u9(K)}return X}let Y=_O(J,q);while(Y&&bO(Y)&&kF(Y))Y=_O(Y,q);if(Y&&HZ(Y)&&kF(Y)&&!CY(Y))return X;return Y||OO(J)||X}var bE=async function(J){let q=this.getOffsetParent||yO,X=this.getDimensions,Y=await X(J.floating);return{reference:CE(J.reference,await q(J.floating),J.strategy),floating:{x:0,y:0,width:Y.width,height:Y.height}}};function OE(J){return c2(J).direction==="rtl"}var xO={convertOffsetParentRelativeRectToViewportRelativeRect:FE,getDocumentElement:U8,getClippingRect:PE,getOffsetParent:yO,getElementRects:bE,getClientRects:UE,getDimensions:AE,getScale:p3,isElement:d2,isRTL:OE};function vO(J,q){return J.x===q.x&&J.y===q.y&&J.width===q.width&&J.height===q.height}function IE(J,q){let X=null,Y,K=U8(J);function B(){var F;clearTimeout(Y),(F=X)==null||F.disconnect(),X=null}function $(F,V){if(F===void 0)F=!1;if(V===void 0)V=1;B();let N=J.getBoundingClientRect(),{left:U,top:L,width:P,height:A}=N;if(!F)q();if(!P||!A)return;let R=_Q(L),O=_Q(K.clientWidth-(U+P)),j=_Q(K.clientHeight-(L+A)),k=_Q(U),E={rootMargin:-R+"px "+-O+"px "+-j+"px "+-k+"px",threshold:j4(0,z9(1,V))||1},x=!0;function e(y){let J0=y[0].intersectionRatio;if(J0!==V){if(!x)return $();if(!J0)Y=setTimeout(()=>{$(!1,0.0000001)},1000);else $(!1,J0)}if(J0===1&&!vO(N,J.getBoundingClientRect()))$();x=!1}try{X=new IntersectionObserver(e,{...E,root:K.ownerDocument})}catch(y){X=new IntersectionObserver(e,E)}X.observe(J)}return $(!0),B}function yF(J,q,X,Y){if(Y===void 0)Y={};let{ancestorScroll:K=!0,ancestorResize:B=!0,elementResize:$=typeof ResizeObserver==="function",layoutShift:F=typeof IntersectionObserver==="function",animationFrame:V=!1}=Y,N=SF(J),U=K||B?[...N?qZ(N):[],...qZ(q)]:[];U.forEach((k)=>{K&&k.addEventListener("scroll",X,{passive:!0}),B&&k.addEventListener("resize",X)});let L=N&&F?IE(N,X):null,P=-1,A=null;if($){if(A=new ResizeObserver((k)=>{let[v]=k;if(v&&v.target===N&&A)A.unobserve(q),cancelAnimationFrame(P),P=requestAnimationFrame(()=>{var E;(E=A)==null||E.observe(q)});X()}),N&&!V)A.observe(N);A.observe(q)}let R,O=V?YZ(J):null;if(V)j();function j(){let k=YZ(J);if(O&&!vO(O,k))X();O=k,R=requestAnimationFrame(j)}return X(),()=>{var k;if(U.forEach((v)=>{K&&v.removeEventListener("scroll",X),B&&v.removeEventListener("resize",X)}),L==null||L(),(k=A)==null||k.disconnect(),A=null,V)cancelAnimationFrame(R)}}var gO=VO;var EO=NO,hO=UO,mO=PO,fO=wO,xF=FO;var uO=MO,vF=(J,q,X)=>{let Y=new Map,K={platform:xO,...X},B={...K.platform,_c:Y};return $O(J,q,{...K,platform:B})};var y5=H0(v0(),1),lO=H0(v0(),1),dO=H0(eJ(),1),TE=typeof document<"u",DE=function(){},TY=TE?lO.useLayoutEffect:DE;function DY(J,q){if(J===q)return!0;if(typeof J!==typeof q)return!1;if(typeof J==="function"&&J.toString()===q.toString())return!0;let X,Y,K;if(J&&q&&typeof J==="object"){if(Array.isArray(J)){if(X=J.length,X!==q.length)return!1;for(Y=X;Y--!==0;)if(!DY(J[Y],q[Y]))return!1;return!0}if(K=Object.keys(J),X=K.length,X!==Object.keys(q).length)return!1;for(Y=X;Y--!==0;)if(!{}.hasOwnProperty.call(q,K[Y]))return!1;for(Y=X;Y--!==0;){let B=K[Y];if(B==="_owner"&&J.$$typeof)continue;if(!DY(J[B],q[B]))return!1}return!0}return J!==J&&q!==q}function cO(J){if(typeof window>"u")return 1;return(J.ownerDocument.defaultView||window).devicePixelRatio||1}function pO(J,q){let X=cO(J);return Math.round(q*X)/X}function gF(J){let q=y5.useRef(J);return TY(()=>{q.current=J}),q}function iO(J){if(J===void 0)J={};let{placement:q="bottom",strategy:X="absolute",middleware:Y=[],platform:K,elements:{reference:B,floating:$}={},transform:F=!0,whileElementsMounted:V,open:N}=J,[U,L]=y5.useState({x:0,y:0,strategy:X,placement:q,middlewareData:{},isPositioned:!1}),[P,A]=y5.useState(Y);if(!DY(P,Y))A(Y);let[R,O]=y5.useState(null),[j,k]=y5.useState(null),v=y5.useCallback((Q0)=>{if(Q0!==y.current)y.current=Q0,O(Q0)},[]),E=y5.useCallback((Q0)=>{if(Q0!==J0.current)J0.current=Q0,k(Q0)},[]),x=B||R,e=$||j,y=y5.useRef(null),J0=y5.useRef(null),Z0=y5.useRef(U),$0=V!=null,t=gF(V),P0=gF(K),K0=gF(N),z0=y5.useCallback(()=>{if(!y.current||!J0.current)return;let Q0={placement:q,strategy:X,middleware:P};if(P0.current)Q0.platform=P0.current;vF(y.current,J0.current,Q0).then((i)=>{let C={...i,isPositioned:K0.current!==!1};if(Y0.current&&!DY(Z0.current,C))Z0.current=C,dO.flushSync(()=>{L(C)})})},[P,q,X,P0,K0]);TY(()=>{if(N===!1&&Z0.current.isPositioned)Z0.current.isPositioned=!1,L((Q0)=>({...Q0,isPositioned:!1}))},[N]);let Y0=y5.useRef(!1);TY(()=>{return Y0.current=!0,()=>{Y0.current=!1}},[]),TY(()=>{if(x)y.current=x;if(e)J0.current=e;if(x&&e){if(t.current)return t.current(x,e,z0);z0()}},[x,e,z0,t,$0]);let n=y5.useMemo(()=>({reference:y,floating:J0,setReference:v,setFloating:E}),[v,E]),u=y5.useMemo(()=>({reference:x,floating:e}),[x,e]),s=y5.useMemo(()=>{let Q0={position:X,left:0,top:0};if(!u.floating)return Q0;let i=pO(u.floating,U.x),C=pO(u.floating,U.y);if(F)return{...Q0,transform:"translate("+i+"px, "+C+"px)",...cO(u.floating)>=1.5&&{willChange:"transform"}};return{position:X,left:i,top:C}},[X,F,u.floating,U.x,U.y]);return y5.useMemo(()=>({...U,update:z0,refs:n,elements:u,floatingStyles:s}),[U,z0,n,u,s])}var _E=(J)=>{function q(X){return{}.hasOwnProperty.call(X,"current")}return{name:"arrow",options:J,fn(X){let{element:Y,padding:K}=typeof J==="function"?J(X):J;if(Y&&q(Y)){if(Y.current!=null)return xF({element:Y.current,padding:K}).fn(X);return{}}if(Y)return xF({element:Y,padding:K}).fn(X);return{}}}},aO=(J,q)=>({...gO(J),options:[J,q]}),rO=(J,q)=>({...EO(J),options:[J,q]}),nO=(J,q)=>({...uO(J),options:[J,q]}),sO=(J,q)=>({...hO(J),options:[J,q]}),oO=(J,q)=>({...mO(J),options:[J,q]});var tO=(J,q)=>({...fO(J),options:[J,q]});var eO=(J,q)=>({..._E(J),options:[J,q]});var ZI=H0(v0(),1);var EF=H0(f5(),1),RE="Arrow",zI=ZI.forwardRef((J,q)=>{let{children:X,width:Y=10,height:K=5,...B}=J;return EF.jsx(T1.svg,{...B,ref:q,width:Y,height:K,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:J.asChild?X:EF.jsx("polygon",{points:"0,0 30,0 15,10"})})});zI.displayName=RE;var JI=zI;var l6=H0(f5(),1);var hF="Popper",[QI,mF]=a4(hF),[kE,qI]=QI(hF),XI=(J)=>{let{__scopePopper:q,children:X}=J,[Y,K]=e4.useState(null);return l6.jsx(kE,{scope:q,anchor:Y,onAnchorChange:K,children:X})};XI.displayName=hF;var HI="PopperAnchor",YI=e4.forwardRef((J,q)=>{let{__scopePopper:X,virtualRef:Y,...K}=J,B=qI(HI,X),$=e4.useRef(null),F=Y5(q,$),V=e4.useRef(null);return e4.useEffect(()=>{let N=V.current;if(V.current=Y?.current||$.current,N!==V.current)B.onAnchorChange(V.current)}),Y?null:l6.jsx(T1.div,{...K,ref:F})});YI.displayName=HI;var fF="PopperContent",[SE,yE]=QI(fF),WI=e4.forwardRef((J,q)=>{let{__scopePopper:X,side:Y="bottom",sideOffset:K=0,align:B="center",alignOffset:$=0,arrowPadding:F=0,avoidCollisions:V=!0,collisionBoundary:N=[],collisionPadding:U=0,sticky:L="partial",hideWhenDetached:P=!1,updatePositionStrategy:A="optimized",onPlaced:R,...O}=J,j=qI(fF,X),[k,v]=e4.useState(null),E=Y5(q,(m0)=>v(m0)),[x,e]=e4.useState(null),y=zO(x),J0=y?.width??0,Z0=y?.height??0,$0=Y+(B!=="center"?"-"+B:""),t=typeof U==="number"?U:{top:0,right:0,bottom:0,left:0,...U},P0=Array.isArray(N)?N:[N],K0=P0.length>0,z0={padding:t,boundary:P0.filter(vE),altBoundary:K0},{refs:Y0,floatingStyles:n,placement:u,isPositioned:s,middlewareData:Q0}=iO({strategy:"fixed",placement:$0,whileElementsMounted:(...m0)=>{return yF(...m0,{animationFrame:A==="always"})},elements:{reference:j.anchor},middleware:[aO({mainAxis:K+Z0,alignmentAxis:$}),V&&rO({mainAxis:!0,crossAxis:!1,limiter:L==="partial"?nO():void 0,...z0}),V&&sO({...z0}),oO({...z0,apply:({elements:m0,rects:E0,availableWidth:_1,availableHeight:C1})=>{let{width:L0,height:X1}=E0.reference,b1=m0.floating.style;b1.setProperty("--radix-popper-available-width",`${_1}px`),b1.setProperty("--radix-popper-available-height",`${C1}px`),b1.setProperty("--radix-popper-anchor-width",`${L0}px`),b1.setProperty("--radix-popper-anchor-height",`${X1}px`)}}),x&&eO({element:x,padding:F}),gE({arrowWidth:J0,arrowHeight:Z0}),P&&tO({strategy:"referenceHidden",...z0})]}),[i,C]=BI(u),o=L4(R);r4(()=>{if(s)o?.()},[s,o]);let G0=Q0.arrow?.x,S=Q0.arrow?.y,A0=Q0.arrow?.centerOffset!==0,[g0,D0]=e4.useState();return r4(()=>{if(k)D0(window.getComputedStyle(k).zIndex)},[k]),l6.jsx("div",{ref:Y0.setFloating,"data-radix-popper-content-wrapper":"",style:{...n,transform:s?n.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:g0,["--radix-popper-transform-origin"]:[Q0.transformOrigin?.x,Q0.transformOrigin?.y].join(" "),...Q0.hide?.referenceHidden&&{visibility:"hidden",pointerEvents:"none"}},dir:J.dir,children:l6.jsx(SE,{scope:X,placedSide:i,onArrowChange:e,arrowX:G0,arrowY:S,shouldHideArrow:A0,children:l6.jsx(T1.div,{"data-side":i,"data-align":C,...O,ref:E,style:{...O.style,animation:!s?"none":void 0}})})})});WI.displayName=fF;var KI="PopperArrow",xE={top:"bottom",right:"left",bottom:"top",left:"right"},GI=e4.forwardRef(function(q,X){let{__scopePopper:Y,...K}=q,B=yE(KI,Y),$=xE[B.placedSide];return l6.jsx("span",{ref:B.onArrowChange,style:{position:"absolute",left:B.arrowX,top:B.arrowY,[$]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[B.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[B.placedSide],visibility:B.shouldHideArrow?"hidden":void 0},children:l6.jsx(JI,{...K,ref:X,style:{...K.style,display:"block"}})})});GI.displayName=KI;function vE(J){return J!==null}var gE=(J)=>({name:"transformOrigin",options:J,fn(q){let{placement:X,rects:Y,middlewareData:K}=q,$=K.arrow?.centerOffset!==0,F=$?0:J.arrowWidth,V=$?0:J.arrowHeight,[N,U]=BI(X),L={start:"0%",center:"50%",end:"100%"}[U],P=(K.arrow?.x??0)+F/2,A=(K.arrow?.y??0)+V/2,R="",O="";if(N==="bottom")R=$?L:`${P}px`,O=`${-V}px`;else if(N==="top")R=$?L:`${P}px`,O=`${Y.floating.height+V}px`;else if(N==="right")R=`${-V}px`,O=$?L:`${A}px`;else if(N==="left")R=`${Y.floating.width+V}px`,O=$?L:`${A}px`;return{data:{x:R,y:O}}}});function BI(J){let[q,X="center"]=J.split("-");return[q,X]}var uF=XI,$I=YI,FI=WI,UI=GI;var n5=H0(v0(),1);var d6=H0(f5(),1),pF="rovingFocusGroup.onEntryFocus",hE={bubbles:!1,cancelable:!0},kQ="RovingFocusGroup",[lF,wI,mE]=eH(kQ),[fE,l3]=a4(kQ,[mE]),[uE,pE]=fE(kQ),LI=n5.forwardRef((J,q)=>{return d6.jsx(lF.Provider,{scope:J.__scopeRovingFocusGroup,children:d6.jsx(lF.Slot,{scope:J.__scopeRovingFocusGroup,children:d6.jsx(lE,{...J,ref:q})})})});LI.displayName=kQ;var lE=n5.forwardRef((J,q)=>{let{__scopeRovingFocusGroup:X,orientation:Y,loop:K=!1,dir:B,currentTabStopId:$,defaultCurrentTabStopId:F,onCurrentTabStopIdChange:V,onEntryFocus:N,preventScrollOnEntryFocus:U=!1,...L}=J,P=n5.useRef(null),A=Y5(q,P),R=x3(B),[O,j]=u6({prop:$,defaultProp:F??null,onChange:V,caller:kQ}),[k,v]=n5.useState(!1),E=L4(N),x=wI(X),e=n5.useRef(!1),[y,J0]=n5.useState(0);return n5.useEffect(()=>{let Z0=P.current;if(Z0)return Z0.addEventListener(pF,E),()=>Z0.removeEventListener(pF,E)},[E]),d6.jsx(uE,{scope:X,orientation:Y,dir:R,loop:K,currentTabStopId:O,onItemFocus:n5.useCallback((Z0)=>j(Z0),[j]),onItemShiftTab:n5.useCallback(()=>v(!0),[]),onFocusableItemAdd:n5.useCallback(()=>J0((Z0)=>Z0+1),[]),onFocusableItemRemove:n5.useCallback(()=>J0((Z0)=>Z0-1),[]),children:d6.jsx(T1.div,{tabIndex:k||y===0?-1:0,"data-orientation":Y,...L,ref:A,style:{outline:"none",...J.style},onMouseDown:e0(J.onMouseDown,()=>{e.current=!0}),onFocus:e0(J.onFocus,(Z0)=>{let $0=!e.current;if(Z0.target===Z0.currentTarget&&$0&&!k){let t=new CustomEvent(pF,hE);if(Z0.currentTarget.dispatchEvent(t),!t.defaultPrevented){let P0=x().filter((u)=>u.focusable),K0=P0.find((u)=>u.active),z0=P0.find((u)=>u.id===O),n=[K0,z0,...P0].filter(Boolean).map((u)=>u.ref.current);MI(n,U)}}e.current=!1}),onBlur:e0(J.onBlur,()=>v(!1))})})}),VI="RovingFocusGroupItem",NI=n5.forwardRef((J,q)=>{let{__scopeRovingFocusGroup:X,focusable:Y=!0,active:K=!1,tabStopId:B,children:$,...F}=J,V=s4(),N=B||V,U=pE(VI,X),L=U.currentTabStopId===N,P=wI(X),{onFocusableItemAdd:A,onFocusableItemRemove:R,currentTabStopId:O}=U;return n5.useEffect(()=>{if(Y)return A(),()=>R()},[Y,A,R]),d6.jsx(lF.ItemSlot,{scope:X,id:N,focusable:Y,active:K,children:d6.jsx(T1.span,{tabIndex:L?0:-1,"data-orientation":U.orientation,...F,ref:q,onMouseDown:e0(J.onMouseDown,(j)=>{if(!Y)j.preventDefault();else U.onItemFocus(N)}),onFocus:e0(J.onFocus,()=>U.onItemFocus(N)),onKeyDown:e0(J.onKeyDown,(j)=>{if(j.key==="Tab"&&j.shiftKey){U.onItemShiftTab();return}if(j.target!==j.currentTarget)return;let k=iE(j,U.orientation,U.dir);if(k!==void 0){if(j.metaKey||j.ctrlKey||j.altKey||j.shiftKey)return;j.preventDefault();let E=P().filter((x)=>x.focusable).map((x)=>x.ref.current);if(k==="last")E.reverse();else if(k==="prev"||k==="next"){if(k==="prev")E.reverse();let x=E.indexOf(j.currentTarget);E=U.loop?aE(E,x+1):E.slice(x+1)}setTimeout(()=>MI(E))}}),children:typeof $==="function"?$({isCurrentTabStop:L,hasTabStop:O!=null}):$})})});NI.displayName=VI;var dE={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function cE(J,q){if(q!=="rtl")return J;return J==="ArrowLeft"?"ArrowRight":J==="ArrowRight"?"ArrowLeft":J}function iE(J,q,X){let Y=cE(J.key,X);if(q==="vertical"&&["ArrowLeft","ArrowRight"].includes(Y))return;if(q==="horizontal"&&["ArrowUp","ArrowDown"].includes(Y))return;return dE[Y]}function MI(J,q=!1){let X=document.activeElement;for(let Y of J){if(Y===X)return;if(Y.focus({preventScroll:q}),document.activeElement!==X)return}}function aE(J,q){return J.map((X,Y)=>J[(q+Y)%J.length])}var _Y=LI,RY=NI;var Q1=H0(f5(),1),dF=["Enter"," "],rE=["ArrowDown","PageUp","Home"],CI=["ArrowUp","PageDown","End"],nE=[...rE,...CI],sE={ltr:[...dF,"ArrowRight"],rtl:[...dF,"ArrowLeft"]},oE={ltr:["ArrowLeft"],rtl:["ArrowRight"]},vQ="Menu",[yQ,tE,eE]=eH(vQ),[WZ,cF]=a4(vQ,[eE,mF,l3]),gQ=mF(),bI=l3(),[OI,c6]=WZ(vQ),[Zh,EQ]=WZ(vQ),II=(J)=>{let{__scopeMenu:q,open:X=!1,children:Y,dir:K,onOpenChange:B,modal:$=!0}=J,F=gQ(q),[V,N]=f0.useState(null),U=f0.useRef(!1),L=L4(B),P=x3(K);return f0.useEffect(()=>{let A=()=>{U.current=!0,document.addEventListener("pointerdown",R,{capture:!0,once:!0}),document.addEventListener("pointermove",R,{capture:!0,once:!0})},R=()=>U.current=!1;return document.addEventListener("keydown",A,{capture:!0}),()=>{document.removeEventListener("keydown",A,{capture:!0}),document.removeEventListener("pointerdown",R,{capture:!0}),document.removeEventListener("pointermove",R,{capture:!0})}},[]),Q1.jsx(uF,{...F,children:Q1.jsx(OI,{scope:q,open:X,onOpenChange:L,content:V,onContentChange:N,children:Q1.jsx(Zh,{scope:q,onClose:f0.useCallback(()=>L(!1),[L]),isUsingKeyboardRef:U,dir:P,modal:$,children:Y})})})};II.displayName=vQ;var zh="MenuAnchor",iF=f0.forwardRef((J,q)=>{let{__scopeMenu:X,...Y}=J,K=gQ(X);return Q1.jsx($I,{...K,...Y,ref:q})});iF.displayName=zh;var aF="MenuPortal",[Jh,TI]=WZ(aF,{forceMount:void 0}),DI=(J)=>{let{__scopeMenu:q,forceMount:X,children:Y,container:K}=J,B=c6(aF,q);return Q1.jsx(Jh,{scope:q,forceMount:X,children:Q1.jsx(u2,{present:X||B.open,children:Q1.jsx(CQ,{asChild:!0,container:K,children:Y})})})};DI.displayName=aF;var i2="MenuContent",[Qh,rF]=WZ(i2),_I=f0.forwardRef((J,q)=>{let X=TI(i2,J.__scopeMenu),{forceMount:Y=X.forceMount,...K}=J,B=c6(i2,J.__scopeMenu),$=EQ(i2,J.__scopeMenu);return Q1.jsx(yQ.Provider,{scope:J.__scopeMenu,children:Q1.jsx(u2,{present:Y||B.open,children:Q1.jsx(yQ.Slot,{scope:J.__scopeMenu,children:$.modal?Q1.jsx(qh,{...K,ref:q}):Q1.jsx(Xh,{...K,ref:q})})})})}),qh=f0.forwardRef((J,q)=>{let X=c6(i2,J.__scopeMenu),Y=f0.useRef(null),K=Y5(q,Y);return f0.useEffect(()=>{let B=Y.current;if(B)return FY(B)},[]),Q1.jsx(nF,{...J,ref:K,trapFocus:X.open,disableOutsidePointerEvents:X.open,disableOutsideScroll:!0,onFocusOutside:e0(J.onFocusOutside,(B)=>B.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>X.onOpenChange(!1)})}),Xh=f0.forwardRef((J,q)=>{let X=c6(i2,J.__scopeMenu);return Q1.jsx(nF,{...J,ref:q,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>X.onOpenChange(!1)})}),Hh=f9("MenuContent.ScrollLock"),nF=f0.forwardRef((J,q)=>{let{__scopeMenu:X,loop:Y=!1,trapFocus:K,onOpenAutoFocus:B,onCloseAutoFocus:$,disableOutsidePointerEvents:F,onEntryFocus:V,onEscapeKeyDown:N,onPointerDownOutside:U,onFocusOutside:L,onInteractOutside:P,onDismiss:A,disableOutsideScroll:R,...O}=J,j=c6(i2,X),k=EQ(i2,X),v=gQ(X),E=bI(X),x=tE(X),[e,y]=f0.useState(null),J0=f0.useRef(null),Z0=Y5(q,J0,j.onContentChange),$0=f0.useRef(0),t=f0.useRef(""),P0=f0.useRef(0),K0=f0.useRef(null),z0=f0.useRef("right"),Y0=f0.useRef(0),n=R?IQ:f0.Fragment,u=R?{as:Hh,allowPinchZoom:!0}:void 0,s=(i)=>{let C=t.current+i,o=x().filter((m0)=>!m0.disabled),G0=document.activeElement,S=o.find((m0)=>m0.ref.current===G0)?.textValue,A0=o.map((m0)=>m0.textValue),g0=Mh(A0,C,S),D0=o.find((m0)=>m0.textValue===g0)?.ref.current;if(function m0(E0){if(t.current=E0,window.clearTimeout($0.current),E0!=="")$0.current=window.setTimeout(()=>m0(""),1000)}(C),D0)setTimeout(()=>D0.focus())};f0.useEffect(()=>{return()=>window.clearTimeout($0.current)},[]),qY();let Q0=f0.useCallback((i)=>{return z0.current===K0.current?.side&&Ah(i,K0.current?.area)},[]);return Q1.jsx(Qh,{scope:X,searchRef:t,onItemEnter:f0.useCallback((i)=>{if(Q0(i))i.preventDefault()},[Q0]),onItemLeave:f0.useCallback((i)=>{if(Q0(i))return;J0.current?.focus(),y(null)},[Q0]),onTriggerLeave:f0.useCallback((i)=>{if(Q0(i))i.preventDefault()},[Q0]),pointerGraceTimerRef:P0,onPointerGraceIntentChange:f0.useCallback((i)=>{K0.current=i},[]),children:Q1.jsx(n,{...u,children:Q1.jsx(AQ,{asChild:!0,trapped:K,onMountAutoFocus:e0(B,(i)=>{i.preventDefault(),J0.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:$,children:Q1.jsx(PQ,{asChild:!0,disableOutsidePointerEvents:F,onEscapeKeyDown:N,onPointerDownOutside:U,onFocusOutside:L,onInteractOutside:P,onDismiss:A,children:Q1.jsx(_Y,{asChild:!0,...E,dir:k.dir,orientation:"vertical",loop:Y,currentTabStopId:e,onCurrentTabStopIdChange:y,onEntryFocus:e0(V,(i)=>{if(!k.isUsingKeyboardRef.current)i.preventDefault()}),preventScrollOnEntryFocus:!0,children:Q1.jsx(FI,{role:"menu","aria-orientation":"vertical","data-state":dI(j.open),"data-radix-menu-content":"",dir:k.dir,...v,...O,ref:Z0,style:{outline:"none",...O.style},onKeyDown:e0(O.onKeyDown,(i)=>{let o=i.target.closest("[data-radix-menu-content]")===i.currentTarget,G0=i.ctrlKey||i.altKey||i.metaKey,S=i.key.length===1;if(o){if(i.key==="Tab")i.preventDefault();if(!G0&&S)s(i.key)}let A0=J0.current;if(i.target!==A0)return;if(!nE.includes(i.key))return;i.preventDefault();let D0=x().filter((m0)=>!m0.disabled).map((m0)=>m0.ref.current);if(CI.includes(i.key))D0.reverse();Vh(D0)}),onBlur:e0(J.onBlur,(i)=>{if(!i.currentTarget.contains(i.target))window.clearTimeout($0.current),t.current=""}),onPointerMove:e0(J.onPointerMove,xQ((i)=>{let C=i.target,o=Y0.current!==i.clientX;if(i.currentTarget.contains(C)&&o){let G0=i.clientX>Y0.current?"right":"left";z0.current=G0,Y0.current=i.clientX}}))})})})})})})});_I.displayName=i2;var Yh="MenuGroup",sF=f0.forwardRef((J,q)=>{let{__scopeMenu:X,...Y}=J;return Q1.jsx(T1.div,{role:"group",...Y,ref:q})});sF.displayName=Yh;var Wh="MenuLabel",RI=f0.forwardRef((J,q)=>{let{__scopeMenu:X,...Y}=J;return Q1.jsx(T1.div,{...Y,ref:q})});RI.displayName=Wh;var jY="MenuItem",AI="menu.itemSelect",SY=f0.forwardRef((J,q)=>{let{disabled:X=!1,onSelect:Y,...K}=J,B=f0.useRef(null),$=EQ(jY,J.__scopeMenu),F=rF(jY,J.__scopeMenu),V=Y5(q,B),N=f0.useRef(!1),U=()=>{let L=B.current;if(!X&&L){let P=new CustomEvent(AI,{bubbles:!0,cancelable:!0});if(L.addEventListener(AI,(A)=>Y?.(A),{once:!0}),oH(L,P),P.defaultPrevented)N.current=!1;else $.onClose()}};return Q1.jsx(jI,{...K,ref:V,disabled:X,onClick:e0(J.onClick,U),onPointerDown:(L)=>{J.onPointerDown?.(L),N.current=!0},onPointerUp:e0(J.onPointerUp,(L)=>{if(!N.current)L.currentTarget?.click()}),onKeyDown:e0(J.onKeyDown,(L)=>{let P=F.searchRef.current!=="";if(X||P&&L.key===" ")return;if(dF.includes(L.key))L.currentTarget.click(),L.preventDefault()})})});SY.displayName=jY;var jI=f0.forwardRef((J,q)=>{let{__scopeMenu:X,disabled:Y=!1,textValue:K,...B}=J,$=rF(jY,X),F=bI(X),V=f0.useRef(null),N=Y5(q,V),[U,L]=f0.useState(!1),[P,A]=f0.useState("");return f0.useEffect(()=>{let R=V.current;if(R)A((R.textContent??"").trim())},[B.children]),Q1.jsx(yQ.ItemSlot,{scope:X,disabled:Y,textValue:K??P,children:Q1.jsx(RY,{asChild:!0,...F,focusable:!Y,children:Q1.jsx(T1.div,{role:"menuitem","data-highlighted":U?"":void 0,"aria-disabled":Y||void 0,"data-disabled":Y?"":void 0,...B,ref:N,onPointerMove:e0(J.onPointerMove,xQ((R)=>{if(Y)$.onItemLeave(R);else if($.onItemEnter(R),!R.defaultPrevented)R.currentTarget.focus({preventScroll:!0})})),onPointerLeave:e0(J.onPointerLeave,xQ((R)=>$.onItemLeave(R))),onFocus:e0(J.onFocus,()=>L(!0)),onBlur:e0(J.onBlur,()=>L(!1))})})})}),Kh="MenuCheckboxItem",kI=f0.forwardRef((J,q)=>{let{checked:X=!1,onCheckedChange:Y,...K}=J;return Q1.jsx(gI,{scope:J.__scopeMenu,checked:X,children:Q1.jsx(SY,{role:"menuitemcheckbox","aria-checked":kY(X)?"mixed":X,...K,ref:q,"data-state":eF(X),onSelect:e0(K.onSelect,()=>Y?.(kY(X)?!0:!X),{checkForDefaultPrevented:!1})})})});kI.displayName=Kh;var SI="MenuRadioGroup",[Gh,Bh]=WZ(SI,{value:void 0,onValueChange:()=>{}}),yI=f0.forwardRef((J,q)=>{let{value:X,onValueChange:Y,...K}=J,B=L4(Y);return Q1.jsx(Gh,{scope:J.__scopeMenu,value:X,onValueChange:B,children:Q1.jsx(sF,{...K,ref:q})})});yI.displayName=SI;var xI="MenuRadioItem",vI=f0.forwardRef((J,q)=>{let{value:X,...Y}=J,K=Bh(xI,J.__scopeMenu),B=X===K.value;return Q1.jsx(gI,{scope:J.__scopeMenu,checked:B,children:Q1.jsx(SY,{role:"menuitemradio","aria-checked":B,...Y,ref:q,"data-state":eF(B),onSelect:e0(Y.onSelect,()=>K.onValueChange?.(X),{checkForDefaultPrevented:!1})})})});vI.displayName=xI;var oF="MenuItemIndicator",[gI,$h]=WZ(oF,{checked:!1}),EI=f0.forwardRef((J,q)=>{let{__scopeMenu:X,forceMount:Y,...K}=J,B=$h(oF,X);return Q1.jsx(u2,{present:Y||kY(B.checked)||B.checked===!0,children:Q1.jsx(T1.span,{...K,ref:q,"data-state":eF(B.checked)})})});EI.displayName=oF;var Fh="MenuSeparator",hI=f0.forwardRef((J,q)=>{let{__scopeMenu:X,...Y}=J;return Q1.jsx(T1.div,{role:"separator","aria-orientation":"horizontal",...Y,ref:q})});hI.displayName=Fh;var Uh="MenuArrow",mI=f0.forwardRef((J,q)=>{let{__scopeMenu:X,...Y}=J,K=gQ(X);return Q1.jsx(UI,{...K,...Y,ref:q})});mI.displayName=Uh;var tF="MenuSub",[wh,fI]=WZ(tF),Lh=(J)=>{let{__scopeMenu:q,children:X,open:Y=!1,onOpenChange:K}=J,B=c6(tF,q),$=gQ(q),[F,V]=f0.useState(null),[N,U]=f0.useState(null),L=L4(K);return f0.useEffect(()=>{if(B.open===!1)L(!1);return()=>L(!1)},[B.open,L]),Q1.jsx(uF,{...$,children:Q1.jsx(OI,{scope:q,open:Y,onOpenChange:L,content:N,onContentChange:U,children:Q1.jsx(wh,{scope:q,contentId:s4(),triggerId:s4(),trigger:F,onTriggerChange:V,children:X})})})};Lh.displayName=tF;var SQ="MenuSubTrigger",uI=f0.forwardRef((J,q)=>{let X=c6(SQ,J.__scopeMenu),Y=EQ(SQ,J.__scopeMenu),K=fI(SQ,J.__scopeMenu),B=rF(SQ,J.__scopeMenu),$=f0.useRef(null),{pointerGraceTimerRef:F,onPointerGraceIntentChange:V}=B,N={__scopeMenu:J.__scopeMenu},U=f0.useCallback(()=>{if($.current)window.clearTimeout($.current);$.current=null},[]);return f0.useEffect(()=>U,[U]),f0.useEffect(()=>{let L=F.current;return()=>{window.clearTimeout(L),V(null)}},[F,V]),Q1.jsx(iF,{asChild:!0,...N,children:Q1.jsx(jI,{id:K.triggerId,"aria-haspopup":"menu","aria-expanded":X.open,"aria-controls":K.contentId,"data-state":dI(X.open),...J,ref:s7(q,K.onTriggerChange),onClick:(L)=>{if(J.onClick?.(L),J.disabled||L.defaultPrevented)return;if(L.currentTarget.focus(),!X.open)X.onOpenChange(!0)},onPointerMove:e0(J.onPointerMove,xQ((L)=>{if(B.onItemEnter(L),L.defaultPrevented)return;if(!J.disabled&&!X.open&&!$.current)B.onPointerGraceIntentChange(null),$.current=window.setTimeout(()=>{X.onOpenChange(!0),U()},100)})),onPointerLeave:e0(J.onPointerLeave,xQ((L)=>{U();let P=X.content?.getBoundingClientRect();if(P){let A=X.content?.dataset.side,R=A==="right",O=R?-5:5,j=P[R?"left":"right"],k=P[R?"right":"left"];B.onPointerGraceIntentChange({area:[{x:L.clientX+O,y:L.clientY},{x:j,y:P.top},{x:k,y:P.top},{x:k,y:P.bottom},{x:j,y:P.bottom}],side:A}),window.clearTimeout(F.current),F.current=window.setTimeout(()=>B.onPointerGraceIntentChange(null),300)}else{if(B.onTriggerLeave(L),L.defaultPrevented)return;B.onPointerGraceIntentChange(null)}})),onKeyDown:e0(J.onKeyDown,(L)=>{let P=B.searchRef.current!=="";if(J.disabled||P&&L.key===" ")return;if(sE[Y.dir].includes(L.key))X.onOpenChange(!0),X.content?.focus(),L.preventDefault()})})})});uI.displayName=SQ;var pI="MenuSubContent",lI=f0.forwardRef((J,q)=>{let X=TI(i2,J.__scopeMenu),{forceMount:Y=X.forceMount,...K}=J,B=c6(i2,J.__scopeMenu),$=EQ(i2,J.__scopeMenu),F=fI(pI,J.__scopeMenu),V=f0.useRef(null),N=Y5(q,V);return Q1.jsx(yQ.Provider,{scope:J.__scopeMenu,children:Q1.jsx(u2,{present:Y||B.open,children:Q1.jsx(yQ.Slot,{scope:J.__scopeMenu,children:Q1.jsx(nF,{id:F.contentId,"aria-labelledby":F.triggerId,...K,ref:N,align:"start",side:$.dir==="rtl"?"left":"right",disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:(U)=>{if($.isUsingKeyboardRef.current)V.current?.focus();U.preventDefault()},onCloseAutoFocus:(U)=>U.preventDefault(),onFocusOutside:e0(J.onFocusOutside,(U)=>{if(U.target!==F.trigger)B.onOpenChange(!1)}),onEscapeKeyDown:e0(J.onEscapeKeyDown,(U)=>{$.onClose(),U.preventDefault()}),onKeyDown:e0(J.onKeyDown,(U)=>{let L=U.currentTarget.contains(U.target),P=oE[$.dir].includes(U.key);if(L&&P)B.onOpenChange(!1),F.trigger?.focus(),U.preventDefault()})})})})})});lI.displayName=pI;function dI(J){return J?"open":"closed"}function kY(J){return J==="indeterminate"}function eF(J){return kY(J)?"indeterminate":J?"checked":"unchecked"}function Vh(J){let q=document.activeElement;for(let X of J){if(X===q)return;if(X.focus(),document.activeElement!==q)return}}function Nh(J,q){return J.map((X,Y)=>J[(q+Y)%J.length])}function Mh(J,q,X){let K=q.length>1&&Array.from(q).every((N)=>N===q[0])?q[0]:q,B=X?J.indexOf(X):-1,$=Nh(J,Math.max(B,0));if(K.length===1)$=$.filter((N)=>N!==X);let V=$.find((N)=>N.toLowerCase().startsWith(K.toLowerCase()));return V!==X?V:void 0}function Ph(J,q){let{x:X,y:Y}=J,K=!1;for(let B=0,$=q.length-1;B<q.length;$=B++){let F=q[B],V=q[$],N=F.x,U=F.y,L=V.x,P=V.y;if(U>Y!==P>Y&&X<(L-N)*(Y-U)/(P-U)+N)K=!K}return K}function Ah(J,q){if(!q)return!1;let X={x:J.clientX,y:J.clientY};return Ph(X,q)}function xQ(J){return(q)=>q.pointerType==="mouse"?J(q):void 0}var cI=II,iI=iF,aI=DI,rI=_I,nI=sF,sI=RI,oI=SY,tI=kI,eI=yI,ZT=vI,zT=EI,JT=hI,QT=mI;var qT=uI,XT=lI;var p5=H0(v0(),1);var s5=H0(f5(),1),yY="DropdownMenu",[bh,J00]=a4(yY,[cF]),k4=cF(),[Oh,HT]=bh(yY),YT=(J)=>{let{__scopeDropdownMenu:q,children:X,dir:Y,open:K,defaultOpen:B,onOpenChange:$,modal:F=!0}=J,V=k4(q),N=p5.useRef(null),[U,L]=u6({prop:K,defaultProp:B??!1,onChange:$,caller:yY});return s5.jsx(Oh,{scope:q,triggerId:s4(),triggerRef:N,contentId:s4(),open:U,onOpenChange:L,onOpenToggle:p5.useCallback(()=>L((P)=>!P),[L]),modal:F,children:s5.jsx(cI,{...V,open:U,onOpenChange:L,dir:Y,modal:F,children:X})})};YT.displayName=yY;var WT="DropdownMenuTrigger",KT=p5.forwardRef((J,q)=>{let{__scopeDropdownMenu:X,disabled:Y=!1,...K}=J,B=HT(WT,X),$=k4(X);return s5.jsx(iI,{asChild:!0,...$,children:s5.jsx(T1.button,{type:"button",id:B.triggerId,"aria-haspopup":"menu","aria-expanded":B.open,"aria-controls":B.open?B.contentId:void 0,"data-state":B.open?"open":"closed","data-disabled":Y?"":void 0,disabled:Y,...K,ref:s7(q,B.triggerRef),onPointerDown:e0(J.onPointerDown,(F)=>{if(!Y&&F.button===0&&F.ctrlKey===!1){if(B.onOpenToggle(),!B.open)F.preventDefault()}}),onKeyDown:e0(J.onKeyDown,(F)=>{if(Y)return;if(["Enter"," "].includes(F.key))B.onOpenToggle();if(F.key==="ArrowDown")B.onOpenChange(!0);if(["Enter"," ","ArrowDown"].includes(F.key))F.preventDefault()})})})});KT.displayName=WT;var Ih="DropdownMenuPortal",GT=(J)=>{let{__scopeDropdownMenu:q,...X}=J,Y=k4(q);return s5.jsx(aI,{...Y,...X})};GT.displayName=Ih;var BT="DropdownMenuContent",$T=p5.forwardRef((J,q)=>{let{__scopeDropdownMenu:X,...Y}=J,K=HT(BT,X),B=k4(X),$=p5.useRef(!1);return s5.jsx(rI,{id:K.contentId,"aria-labelledby":K.triggerId,...B,...Y,ref:q,onCloseAutoFocus:e0(J.onCloseAutoFocus,(F)=>{if(!$.current)K.triggerRef.current?.focus();$.current=!1,F.preventDefault()}),onInteractOutside:e0(J.onInteractOutside,(F)=>{let V=F.detail.originalEvent,N=V.button===0&&V.ctrlKey===!0,U=V.button===2||N;if(!K.modal||U)$.current=!0}),style:{...J.style,...{"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}}})});$T.displayName=BT;var Th="DropdownMenuGroup",Dh=p5.forwardRef((J,q)=>{let{__scopeDropdownMenu:X,...Y}=J,K=k4(X);return s5.jsx(nI,{...K,...Y,ref:q})});Dh.displayName=Th;var _h="DropdownMenuLabel",Rh=p5.forwardRef((J,q)=>{let{__scopeDropdownMenu:X,...Y}=J,K=k4(X);return s5.jsx(sI,{...K,...Y,ref:q})});Rh.displayName=_h;var jh="DropdownMenuItem",FT=p5.forwardRef((J,q)=>{let{__scopeDropdownMenu:X,...Y}=J,K=k4(X);return s5.jsx(oI,{...K,...Y,ref:q})});FT.displayName=jh;var kh="DropdownMenuCheckboxItem",Sh=p5.forwardRef((J,q)=>{let{__scopeDropdownMenu:X,...Y}=J,K=k4(X);return s5.jsx(tI,{...K,...Y,ref:q})});Sh.displayName=kh;var yh="DropdownMenuRadioGroup",xh=p5.forwardRef((J,q)=>{let{__scopeDropdownMenu:X,...Y}=J,K=k4(X);return s5.jsx(eI,{...K,...Y,ref:q})});xh.displayName=yh;var vh="DropdownMenuRadioItem",gh=p5.forwardRef((J,q)=>{let{__scopeDropdownMenu:X,...Y}=J,K=k4(X);return s5.jsx(ZT,{...K,...Y,ref:q})});gh.displayName=vh;var Eh="DropdownMenuItemIndicator",hh=p5.forwardRef((J,q)=>{let{__scopeDropdownMenu:X,...Y}=J,K=k4(X);return s5.jsx(zT,{...K,...Y,ref:q})});hh.displayName=Eh;var mh="DropdownMenuSeparator",fh=p5.forwardRef((J,q)=>{let{__scopeDropdownMenu:X,...Y}=J,K=k4(X);return s5.jsx(JT,{...K,...Y,ref:q})});fh.displayName=mh;var uh="DropdownMenuArrow",ph=p5.forwardRef((J,q)=>{let{__scopeDropdownMenu:X,...Y}=J,K=k4(X);return s5.jsx(QT,{...K,...Y,ref:q})});ph.displayName=uh;var lh="DropdownMenuSubTrigger",dh=p5.forwardRef((J,q)=>{let{__scopeDropdownMenu:X,...Y}=J,K=k4(X);return s5.jsx(qT,{...K,...Y,ref:q})});dh.displayName=lh;var ch="DropdownMenuSubContent",ih=p5.forwardRef((J,q)=>{let{__scopeDropdownMenu:X,...Y}=J,K=k4(X);return s5.jsx(XT,{...K,...Y,ref:q,style:{...J.style,...{"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}}})});ih.displayName=ch;var UT=YT,wT=KT,LT=GT,VT=$T;var xY=FT;var vY={};tJ(vY,{Root:()=>nh,Label:()=>ZU});var NT=H0(v0(),1);var MT=H0(f5(),1),rh="Label",ZU=NT.forwardRef((J,q)=>{return MT.jsx(T1.label,{...J,ref:q,onMouseDown:(X)=>{if(X.target.closest("button, input, select, textarea"))return;if(J.onMouseDown?.(X),!X.defaultPrevented&&X.detail>1)X.preventDefault()}})});ZU.displayName=rh;var nh=ZU;var KZ={};tJ(KZ,{createTabsScope:()=>oh,Trigger:()=>zm,TabsTrigger:()=>qU,TabsList:()=>QU,TabsContent:()=>XU,Tabs:()=>JU,Root:()=>eh,List:()=>Zm,Content:()=>Jm});var l9=H0(v0(),1);var p9=H0(f5(),1),gY="Tabs",[sh,oh]=a4(gY,[l3]),PT=l3(),[th,zU]=sh(gY),JU=l9.forwardRef((J,q)=>{let{__scopeTabs:X,value:Y,onValueChange:K,defaultValue:B,orientation:$="horizontal",dir:F,activationMode:V="automatic",...N}=J,U=x3(F),[L,P]=u6({prop:Y,onChange:K,defaultProp:B??"",caller:gY});return p9.jsx(th,{scope:X,baseId:s4(),value:L,onValueChange:P,orientation:$,dir:U,activationMode:V,children:p9.jsx(T1.div,{dir:U,"data-orientation":$,...N,ref:q})})});JU.displayName=gY;var AT="TabsList",QU=l9.forwardRef((J,q)=>{let{__scopeTabs:X,loop:Y=!0,...K}=J,B=zU(AT,X),$=PT(X);return p9.jsx(_Y,{asChild:!0,...$,orientation:B.orientation,dir:B.dir,loop:Y,children:p9.jsx(T1.div,{role:"tablist","aria-orientation":B.orientation,...K,ref:q})})});QU.displayName=AT;var CT="TabsTrigger",qU=l9.forwardRef((J,q)=>{let{__scopeTabs:X,value:Y,disabled:K=!1,...B}=J,$=zU(CT,X),F=PT(X),V=OT($.baseId,Y),N=IT($.baseId,Y),U=Y===$.value;return p9.jsx(RY,{asChild:!0,...F,focusable:!K,active:U,children:p9.jsx(T1.button,{type:"button",role:"tab","aria-selected":U,"aria-controls":N,"data-state":U?"active":"inactive","data-disabled":K?"":void 0,disabled:K,id:V,...B,ref:q,onMouseDown:e0(J.onMouseDown,(L)=>{if(!K&&L.button===0&&L.ctrlKey===!1)$.onValueChange(Y);else L.preventDefault()}),onKeyDown:e0(J.onKeyDown,(L)=>{if([" ","Enter"].includes(L.key))$.onValueChange(Y)}),onFocus:e0(J.onFocus,()=>{let L=$.activationMode!=="manual";if(!U&&!K&&L)$.onValueChange(Y)})})})});qU.displayName=CT;var bT="TabsContent",XU=l9.forwardRef((J,q)=>{let{__scopeTabs:X,value:Y,forceMount:K,children:B,...$}=J,F=zU(bT,X),V=OT(F.baseId,Y),N=IT(F.baseId,Y),U=Y===F.value,L=l9.useRef(U);return l9.useEffect(()=>{let P=requestAnimationFrame(()=>L.current=!1);return()=>cancelAnimationFrame(P)},[]),p9.jsx(u2,{present:K||U,children:({present:P})=>p9.jsx(T1.div,{"data-state":U?"active":"inactive","data-orientation":F.orientation,role:"tabpanel","aria-labelledby":V,hidden:!P,id:N,tabIndex:0,...$,ref:q,style:{...J.style,animationDuration:L.current?"0s":void 0},children:P&&B})})});XU.displayName=bT;function OT(J,q){return`${J}-trigger-${q}`}function IT(J,q){return`${J}-content-${q}`}var eh=JU,Zm=QU,zm=qU,Jm=XU;var Qm=(J)=>{let q=Xm(J),{conflictingClassGroups:X,conflictingClassGroupModifiers:Y}=J;return{getClassGroupId:($)=>{let F=$.split("-");if(F[0]===""&&F.length!==1)F.shift();return _T(F,q)||qm($)},getConflictingClassGroupIds:($,F)=>{let V=X[$]||[];if(F&&Y[$])return[...V,...Y[$]];return V}}},_T=(J,q)=>{if(J.length===0)return q.classGroupId;let X=J[0],Y=q.nextPart.get(X),K=Y?_T(J.slice(1),Y):void 0;if(K)return K;if(q.validators.length===0)return;let B=J.join("-");return q.validators.find(({validator:$})=>$(B))?.classGroupId},TT=/^\[(.+)\]$/,qm=(J)=>{if(TT.test(J)){let q=TT.exec(J)[1],X=q?.substring(0,q.indexOf(":"));if(X)return"arbitrary.."+X}},Xm=(J)=>{let{theme:q,prefix:X}=J,Y={nextPart:new Map,validators:[]};return Ym(Object.entries(J.classGroups),X).forEach(([B,$])=>{YU($,Y,B,q)}),Y},YU=(J,q,X,Y)=>{J.forEach((K)=>{if(typeof K==="string"){let B=K===""?q:DT(q,K);B.classGroupId=X;return}if(typeof K==="function"){if(Hm(K)){YU(K(Y),q,X,Y);return}q.validators.push({validator:K,classGroupId:X});return}Object.entries(K).forEach(([B,$])=>{YU($,DT(q,B),X,Y)})})},DT=(J,q)=>{let X=J;return q.split("-").forEach((Y)=>{if(!X.nextPart.has(Y))X.nextPart.set(Y,{nextPart:new Map,validators:[]});X=X.nextPart.get(Y)}),X},Hm=(J)=>J.isThemeGetter,Ym=(J,q)=>{if(!q)return J;return J.map(([X,Y])=>{let K=Y.map((B)=>{if(typeof B==="string")return q+B;if(typeof B==="object")return Object.fromEntries(Object.entries(B).map(([$,F])=>[q+$,F]));return B});return[X,K]})},Wm=(J)=>{if(J<1)return{get:()=>{return},set:()=>{}};let q=0,X=new Map,Y=new Map,K=(B,$)=>{if(X.set(B,$),q++,q>J)q=0,Y=X,X=new Map};return{get(B){let $=X.get(B);if($!==void 0)return $;if(($=Y.get(B))!==void 0)return K(B,$),$},set(B,$){if(X.has(B))X.set(B,$);else K(B,$)}}};var Km=(J)=>{let{separator:q,experimentalParseClassName:X}=J,Y=q.length===1,K=q[0],B=q.length,$=(F)=>{let V=[],N=0,U=0,L;for(let j=0;j<F.length;j++){let k=F[j];if(N===0){if(k===K&&(Y||F.slice(j,j+B)===q)){V.push(F.slice(U,j)),U=j+B;continue}if(k==="/"){L=j;continue}}if(k==="[")N++;else if(k==="]")N--}let P=V.length===0?F:F.substring(U),A=P.startsWith("!"),R=A?P.substring(1):P,O=L&&L>U?L-U:void 0;return{modifiers:V,hasImportantModifier:A,baseClassName:R,maybePostfixModifierPosition:O}};if(X)return(F)=>X({className:F,parseClassName:$});return $},Gm=(J)=>{if(J.length<=1)return J;let q=[],X=[];return J.forEach((Y)=>{if(Y[0]==="[")q.push(...X.sort(),Y),X=[];else X.push(Y)}),q.push(...X.sort()),q},Bm=(J)=>({cache:Wm(J.cacheSize),parseClassName:Km(J),...Qm(J)}),$m=/\s+/,Fm=(J,q)=>{let{parseClassName:X,getClassGroupId:Y,getConflictingClassGroupIds:K}=q,B=[],$=J.trim().split($m),F="";for(let V=$.length-1;V>=0;V-=1){let N=$[V],{modifiers:U,hasImportantModifier:L,baseClassName:P,maybePostfixModifierPosition:A}=X(N),R=Boolean(A),O=Y(R?P.substring(0,A):P);if(!O){if(!R){F=N+(F.length>0?" "+F:F);continue}if(O=Y(P),!O){F=N+(F.length>0?" "+F:F);continue}R=!1}let j=Gm(U).join(":"),k=L?j+"!":j,v=k+O;if(B.includes(v))continue;B.push(v);let E=K(O,R);for(let x=0;x<E.length;++x){let e=E[x];B.push(k+e)}F=N+(F.length>0?" "+F:F)}return F};function Um(){let J=0,q,X,Y="";while(J<arguments.length)if(q=arguments[J++]){if(X=RT(q))Y&&(Y+=" "),Y+=X}return Y}var RT=(J)=>{if(typeof J==="string")return J;let q,X="";for(let Y=0;Y<J.length;Y++)if(J[Y]){if(q=RT(J[Y]))X&&(X+=" "),X+=q}return X};function wm(J,...q){let X,Y,K,B=$;function $(V){let N=q.reduce((U,L)=>L(U),J());return X=Bm(N),Y=X.cache.get,K=X.cache.set,B=F,F(V)}function F(V){let N=Y(V);if(N)return N;let U=Fm(V,X);return K(V,U),U}return function(){return B(Um.apply(null,arguments))}}var K5=(J)=>{let q=(X)=>X[J]||[];return q.isThemeGetter=!0,q},jT=/^\[(?:([a-z-]+):)?(.+)\]$/i,Lm=/^\d+\/\d+$/,Vm=new Set(["px","full","screen"]),Nm=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Mm=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,Pm=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,Am=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Cm=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,d9=(J)=>d3(J)||Vm.has(J)||Lm.test(J),i6=(J)=>c3(J,"length",jm),d3=(J)=>Boolean(J)&&!Number.isNaN(Number(J)),HU=(J)=>c3(J,"number",d3),hQ=(J)=>Boolean(J)&&Number.isInteger(Number(J)),bm=(J)=>J.endsWith("%")&&d3(J.slice(0,-1)),U1=(J)=>jT.test(J),a6=(J)=>Nm.test(J),Om=new Set(["length","size","percentage"]),Im=(J)=>c3(J,Om,kT),Tm=(J)=>c3(J,"position",kT),Dm=new Set(["image","url"]),_m=(J)=>c3(J,Dm,Sm),Rm=(J)=>c3(J,"",km),mQ=()=>!0,c3=(J,q,X)=>{let Y=jT.exec(J);if(Y){if(Y[1])return typeof q==="string"?Y[1]===q:q.has(Y[1]);return X(Y[2])}return!1},jm=(J)=>Mm.test(J)&&!Pm.test(J),kT=()=>!1,km=(J)=>Am.test(J),Sm=(J)=>Cm.test(J);var ym=()=>{let J=K5("colors"),q=K5("spacing"),X=K5("blur"),Y=K5("brightness"),K=K5("borderColor"),B=K5("borderRadius"),$=K5("borderSpacing"),F=K5("borderWidth"),V=K5("contrast"),N=K5("grayscale"),U=K5("hueRotate"),L=K5("invert"),P=K5("gap"),A=K5("gradientColorStops"),R=K5("gradientColorStopPositions"),O=K5("inset"),j=K5("margin"),k=K5("opacity"),v=K5("padding"),E=K5("saturate"),x=K5("scale"),e=K5("sepia"),y=K5("skew"),J0=K5("space"),Z0=K5("translate"),$0=()=>["auto","contain","none"],t=()=>["auto","hidden","clip","visible","scroll"],P0=()=>["auto",U1,q],K0=()=>[U1,q],z0=()=>["",d9,i6],Y0=()=>["auto",d3,U1],n=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],u=()=>["solid","dashed","dotted","double","none"],s=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],Q0=()=>["start","end","center","between","around","evenly","stretch"],i=()=>["","0",U1],C=()=>["auto","avoid","all","avoid-page","page","left","right","column"],o=()=>[d3,U1];return{cacheSize:500,separator:":",theme:{colors:[mQ],spacing:[d9,i6],blur:["none","",a6,U1],brightness:o(),borderColor:[J],borderRadius:["none","","full",a6,U1],borderSpacing:K0(),borderWidth:z0(),contrast:o(),grayscale:i(),hueRotate:o(),invert:i(),gap:K0(),gradientColorStops:[J],gradientColorStopPositions:[bm,i6],inset:P0(),margin:P0(),opacity:o(),padding:K0(),saturate:o(),scale:o(),sepia:i(),skew:o(),space:K0(),translate:K0()},classGroups:{aspect:[{aspect:["auto","square","video",U1]}],container:["container"],columns:[{columns:[a6]}],"break-after":[{"break-after":C()}],"break-before":[{"break-before":C()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...n(),U1]}],overflow:[{overflow:t()}],"overflow-x":[{"overflow-x":t()}],"overflow-y":[{"overflow-y":t()}],overscroll:[{overscroll:$0()}],"overscroll-x":[{"overscroll-x":$0()}],"overscroll-y":[{"overscroll-y":$0()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[O]}],"inset-x":[{"inset-x":[O]}],"inset-y":[{"inset-y":[O]}],start:[{start:[O]}],end:[{end:[O]}],top:[{top:[O]}],right:[{right:[O]}],bottom:[{bottom:[O]}],left:[{left:[O]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",hQ,U1]}],basis:[{basis:P0()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",U1]}],grow:[{grow:i()}],shrink:[{shrink:i()}],order:[{order:["first","last","none",hQ,U1]}],"grid-cols":[{"grid-cols":[mQ]}],"col-start-end":[{col:["auto",{span:["full",hQ,U1]},U1]}],"col-start":[{"col-start":Y0()}],"col-end":[{"col-end":Y0()}],"grid-rows":[{"grid-rows":[mQ]}],"row-start-end":[{row:["auto",{span:[hQ,U1]},U1]}],"row-start":[{"row-start":Y0()}],"row-end":[{"row-end":Y0()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",U1]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",U1]}],gap:[{gap:[P]}],"gap-x":[{"gap-x":[P]}],"gap-y":[{"gap-y":[P]}],"justify-content":[{justify:["normal",...Q0()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...Q0(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...Q0(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[v]}],px:[{px:[v]}],py:[{py:[v]}],ps:[{ps:[v]}],pe:[{pe:[v]}],pt:[{pt:[v]}],pr:[{pr:[v]}],pb:[{pb:[v]}],pl:[{pl:[v]}],m:[{m:[j]}],mx:[{mx:[j]}],my:[{my:[j]}],ms:[{ms:[j]}],me:[{me:[j]}],mt:[{mt:[j]}],mr:[{mr:[j]}],mb:[{mb:[j]}],ml:[{ml:[j]}],"space-x":[{"space-x":[J0]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[J0]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",U1,q]}],"min-w":[{"min-w":[U1,q,"min","max","fit"]}],"max-w":[{"max-w":[U1,q,"none","full","min","max","fit","prose",{screen:[a6]},a6]}],h:[{h:[U1,q,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[U1,q,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[U1,q,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[U1,q,"auto","min","max","fit"]}],"font-size":[{text:["base",a6,i6]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",HU]}],"font-family":[{font:[mQ]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",U1]}],"line-clamp":[{"line-clamp":["none",d3,HU]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",d9,U1]}],"list-image":[{"list-image":["none",U1]}],"list-style-type":[{list:["none","disc","decimal",U1]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[J]}],"placeholder-opacity":[{"placeholder-opacity":[k]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[J]}],"text-opacity":[{"text-opacity":[k]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...u(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",d9,i6]}],"underline-offset":[{"underline-offset":["auto",d9,U1]}],"text-decoration-color":[{decoration:[J]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:K0()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",U1]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",U1]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[k]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...n(),Tm]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",Im]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},_m]}],"bg-color":[{bg:[J]}],"gradient-from-pos":[{from:[R]}],"gradient-via-pos":[{via:[R]}],"gradient-to-pos":[{to:[R]}],"gradient-from":[{from:[A]}],"gradient-via":[{via:[A]}],"gradient-to":[{to:[A]}],rounded:[{rounded:[B]}],"rounded-s":[{"rounded-s":[B]}],"rounded-e":[{"rounded-e":[B]}],"rounded-t":[{"rounded-t":[B]}],"rounded-r":[{"rounded-r":[B]}],"rounded-b":[{"rounded-b":[B]}],"rounded-l":[{"rounded-l":[B]}],"rounded-ss":[{"rounded-ss":[B]}],"rounded-se":[{"rounded-se":[B]}],"rounded-ee":[{"rounded-ee":[B]}],"rounded-es":[{"rounded-es":[B]}],"rounded-tl":[{"rounded-tl":[B]}],"rounded-tr":[{"rounded-tr":[B]}],"rounded-br":[{"rounded-br":[B]}],"rounded-bl":[{"rounded-bl":[B]}],"border-w":[{border:[F]}],"border-w-x":[{"border-x":[F]}],"border-w-y":[{"border-y":[F]}],"border-w-s":[{"border-s":[F]}],"border-w-e":[{"border-e":[F]}],"border-w-t":[{"border-t":[F]}],"border-w-r":[{"border-r":[F]}],"border-w-b":[{"border-b":[F]}],"border-w-l":[{"border-l":[F]}],"border-opacity":[{"border-opacity":[k]}],"border-style":[{border:[...u(),"hidden"]}],"divide-x":[{"divide-x":[F]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[F]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[k]}],"divide-style":[{divide:u()}],"border-color":[{border:[K]}],"border-color-x":[{"border-x":[K]}],"border-color-y":[{"border-y":[K]}],"border-color-s":[{"border-s":[K]}],"border-color-e":[{"border-e":[K]}],"border-color-t":[{"border-t":[K]}],"border-color-r":[{"border-r":[K]}],"border-color-b":[{"border-b":[K]}],"border-color-l":[{"border-l":[K]}],"divide-color":[{divide:[K]}],"outline-style":[{outline:["",...u()]}],"outline-offset":[{"outline-offset":[d9,U1]}],"outline-w":[{outline:[d9,i6]}],"outline-color":[{outline:[J]}],"ring-w":[{ring:z0()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[J]}],"ring-opacity":[{"ring-opacity":[k]}],"ring-offset-w":[{"ring-offset":[d9,i6]}],"ring-offset-color":[{"ring-offset":[J]}],shadow:[{shadow:["","inner","none",a6,Rm]}],"shadow-color":[{shadow:[mQ]}],opacity:[{opacity:[k]}],"mix-blend":[{"mix-blend":[...s(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":s()}],filter:[{filter:["","none"]}],blur:[{blur:[X]}],brightness:[{brightness:[Y]}],contrast:[{contrast:[V]}],"drop-shadow":[{"drop-shadow":["","none",a6,U1]}],grayscale:[{grayscale:[N]}],"hue-rotate":[{"hue-rotate":[U]}],invert:[{invert:[L]}],saturate:[{saturate:[E]}],sepia:[{sepia:[e]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[X]}],"backdrop-brightness":[{"backdrop-brightness":[Y]}],"backdrop-contrast":[{"backdrop-contrast":[V]}],"backdrop-grayscale":[{"backdrop-grayscale":[N]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[U]}],"backdrop-invert":[{"backdrop-invert":[L]}],"backdrop-opacity":[{"backdrop-opacity":[k]}],"backdrop-saturate":[{"backdrop-saturate":[E]}],"backdrop-sepia":[{"backdrop-sepia":[e]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[$]}],"border-spacing-x":[{"border-spacing-x":[$]}],"border-spacing-y":[{"border-spacing-y":[$]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",U1]}],duration:[{duration:o()}],ease:[{ease:["linear","in","out","in-out",U1]}],delay:[{delay:o()}],animate:[{animate:["none","spin","ping","pulse","bounce",U1]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[x]}],"scale-x":[{"scale-x":[x]}],"scale-y":[{"scale-y":[x]}],rotate:[{rotate:[hQ,U1]}],"translate-x":[{"translate-x":[Z0]}],"translate-y":[{"translate-y":[Z0]}],"skew-x":[{"skew-x":[y]}],"skew-y":[{"skew-y":[y]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",U1]}],accent:[{accent:["auto",J]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",U1]}],"caret-color":[{caret:[J]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":K0()}],"scroll-mx":[{"scroll-mx":K0()}],"scroll-my":[{"scroll-my":K0()}],"scroll-ms":[{"scroll-ms":K0()}],"scroll-me":[{"scroll-me":K0()}],"scroll-mt":[{"scroll-mt":K0()}],"scroll-mr":[{"scroll-mr":K0()}],"scroll-mb":[{"scroll-mb":K0()}],"scroll-ml":[{"scroll-ml":K0()}],"scroll-p":[{"scroll-p":K0()}],"scroll-px":[{"scroll-px":K0()}],"scroll-py":[{"scroll-py":K0()}],"scroll-ps":[{"scroll-ps":K0()}],"scroll-pe":[{"scroll-pe":K0()}],"scroll-pt":[{"scroll-pt":K0()}],"scroll-pr":[{"scroll-pr":K0()}],"scroll-pb":[{"scroll-pb":K0()}],"scroll-pl":[{"scroll-pl":K0()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",U1]}],fill:[{fill:[J,"none"]}],"stroke-w":[{stroke:[d9,i6,HU]}],stroke:[{stroke:[J,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}};var ST=wm(ym);function y1(...J){return ST(nH(J))}var fQ=H0(l0(),1);function i3({className:J,orientation:q="horizontal",...X}){return fQ.jsxDEV(KZ.Root,{"data-slot":"tabs","data-orientation":q,className:y1("gap-2 group/tabs flex data-horizontal:flex-col",J),...X},void 0,!1,void 0,this)}var vm=eC("rounded-lg p-[3px] group-data-horizontal/tabs:h-8 data-[variant=line]:rounded-none group/tabs-list text-muted-foreground inline-flex w-fit items-center justify-center group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col",{variants:{variant:{default:"bg-muted",line:"gap-1 bg-transparent"}},defaultVariants:{variant:"default"}});function a3({className:J,variant:q="default",...X}){return fQ.jsxDEV(KZ.List,{"data-slot":"tabs-list","data-variant":q,className:y1(vm({variant:q}),J),...X},void 0,!1,void 0,this)}function L8({className:J,...q}){return fQ.jsxDEV(KZ.Trigger,{"data-slot":"tabs-trigger",className:y1("cursor-pointer gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg:not([class*='size-'])]:size-4 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-foreground/60 hover:text-foreground dark:text-muted-foreground dark:hover:text-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center whitespace-nowrap transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0","group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent","data-active:bg-background dark:data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 data-active:text-foreground","after:bg-foreground after:absolute after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100",J),...q},void 0,!1,void 0,this)}function r6({className:J,...q}){return fQ.jsxDEV(KZ.Content,{"data-slot":"tabs-content",className:y1("text-sm flex-1 outline-none",J),...q},void 0,!1,void 0,this)}var yT=H0(v0(),1);var xT=H0(l0(),1),q9=yT.forwardRef(({className:J,children:q,...X},Y)=>xT.jsxDEV("div",{ref:Y,className:y1("relative overflow-auto custom-scrollbar",J),...X,children:q},void 0,!1,void 0,this));q9.displayName="ScrollArea";var N4=H0(v0(),1);var X9=H0(l0(),1),EY=N4.createContext({}),WU=N4.forwardRef(({className:J,type:q="single",collapsible:X,defaultValue:Y,...K},B)=>{let[$,F]=N4.useState(Y||"");return X9.jsxDEV(EY.Provider,{value:{value:$,onValueChange:(V)=>{if(q==="single")F(X&&$===V?"":V)}},children:X9.jsxDEV("div",{ref:B,className:y1("",J),...K},void 0,!1,void 0,this)},void 0,!1,void 0,this)});WU.displayName="Accordion";var KU=N4.createContext({}),GU=N4.forwardRef(({className:J,value:q,...X},Y)=>{let{value:K}=N4.useContext(EY),B=K===q;return X9.jsxDEV(KU.Provider,{value:{value:q},children:X9.jsxDEV("div",{ref:Y,className:y1("border-b border-zinc-800",J),"data-state":B?"open":"closed",...X},void 0,!1,void 0,this)},void 0,!1,void 0,this)});GU.displayName="AccordionItem";var BU=N4.forwardRef(({className:J,children:q,...X},Y)=>{let{value:K,onValueChange:B}=N4.useContext(EY),{value:$}=N4.useContext(KU),F=K===$;return X9.jsxDEV("div",{className:"flex",children:X9.jsxDEV("button",{ref:Y,type:"button",onClick:()=>$&&B?.($),className:y1("cursor-pointer flex flex-1 items-center justify-between py-4 font-medium transition-all hover:text-rust text-zinc-400 [&[data-state=open]>svg]:rotate-180",J),"data-state":F?"open":"closed",...X,children:[q,X9.jsxDEV(c7,{className:"h-4 w-4 shrink-0 transition-transform duration-200"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)});BU.displayName="AccordionTrigger";var $U=N4.forwardRef(({className:J,children:q,...X},Y)=>{let{value:K}=N4.useContext(EY),{value:B}=N4.useContext(KU),$=K===B;return X9.jsxDEV("div",{ref:Y,className:y1("overflow-hidden text-sm transition-all",$?"block animate-accordion-down":"hidden animate-accordion-up",J),"data-state":$?"open":"closed",...X,children:X9.jsxDEV("div",{className:"pb-4 pt-0 h-full",children:q},void 0,!1,void 0,this)},void 0,!1,void 0,this)});$U.displayName="AccordionContent";var vT=H0(v0(),1);var gT=H0(l0(),1),Z2=vT.forwardRef(({className:J,variant:q="default",...X},Y)=>{return gT.jsxDEV("div",{ref:Y,className:y1("inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-zinc-400 focus:ring-offset-2",{default:"border-transparent bg-rust text-white shadow hover:bg-rust-dark",secondary:"border-transparent bg-zinc-800 text-zinc-100 hover:bg-zinc-700",destructive:"border-transparent bg-red-900 text-red-100 hover:bg-red-800",outline:"text-zinc-100 border-zinc-700"}[q],J),...X},void 0,!1,void 0,this)});Z2.displayName="Badge";var ET=()=>({emit(J,...q){for(let X=this.events[J]||[],Y=0,K=X.length;Y<K;Y++)X[Y](...q)},events:{},on(J,q){return(this.events[J]||=[]).push(q),()=>{this.events[J]=this.events[J]?.filter((X)=>q!==X)}}});function gm({retryCount:J}){return~~((Math.random()+0.5)*(1<<(J<8?J:8)))*2000}var Em=([J,q,X])=>{let Y=({cache:k=new Map,fetcher:v,...E}={})=>{let x=ET(),e=!0;q(()=>{e=J(),e&&x.emit(F)}),X(()=>x.emit(V));let y=new Map,J0=new Map,Z0=new Map,$0={},t=(i)=>{let C=k.get(i);if(!C)return[];return(C.expires||0)>A()?[C.data,C.error]:[]},P0=async([i,C],o,G0)=>{if(!e)return;let S=(j1)=>{if(o.key===i)o.set(j1),x.emit(L,i,j1,!0)},A0=(j1)=>{S({...j1===void 0?{}:{data:j1},...O,promise:Z0.get(i)})},{dedupeTime:g0=4000,cacheLifetime:D0=1/0,fetcher:m0,onErrorRetry:E0=gm}={...G0,...$0};if(D0<g0)D0=g0;let _1=A();if(Z0.has(i)){if(!o.value.loading)A0(t(i)[0]);return}let C1,L0,X1=k.get(i);if(X1?.data!==void 0||X1?.error){if([C1,L0]=t(i),(X1.created||0)+g0>_1){if(o.value.data!=C1||o.value.error!=L0)S({...j,data:C1,error:L0});return}}let b1=m$();try{clearTimeout(J0.get(i));let j1=m0(...C);Z0.set(i,j1),A0(C1);let s0=await j1;k.set(i,{data:s0,created:A(),expires:A()+D0}),S({data:s0,...j})}catch(j1){G0.onError?.(j1);let s0=(k.get(i)?.retryCount||0)+1;if(k.set(i,{error:j1,created:A(),expires:A()+D0,retryCount:s0}),E0){let j0=E0({error:j1,key:i,retryCount:s0});if(j0)J0.set(i,setTimeout(()=>{Y0(i),k.set(i,{retryCount:s0})},j0))}S({data:o.value.data,error:j1,...j})}finally{b1(),Z0.delete(i)}},K0=(i,{fetcher:C=v,...o}={})=>{if(!C)throw Error("You need to set up either global fetcher of fetcher in createFetcherStore");let G0=j3({...j}),S={...E,...o,fetcher:C};G0._=R,G0.invalidate=()=>{let{key:X1}=G0;if(X1)Y0(X1)},G0.revalidate=()=>{let{key:X1}=G0;if(X1)n(X1)},G0.mutate=(X1)=>{let{key:b1}=G0;if(b1)u(b1,X1)},G0.fetch=async()=>{let X1,b1=new Promise((s0)=>X1=s0),j1=G0.listen(({error:s0,data:j0})=>{if(s0!==void 0)X1({error:s0});if(j0!==void 0)X1({data:j0})});return b1.finally(j1)};let A0,g0,D0,m0,E0,_1=[];u$(G0,()=>{let X1=!A0;[E0,A0]=B(i),m0=E0.subscribe((P5)=>{if(P5){let[u0,P1]=P5;G0.key=u0,P0([u0,P1],G0,S),g0=u0,D0=P1}else G0.key=g0=D0=void 0,G0.set({...j})});let b1=E0.get();if(b1){if([g0,D0]=b1,X1)C1()}let{revalidateInterval:j1=0,revalidateOnFocus:s0,revalidateOnReconnect:j0}=S,M5=()=>{if(g0)P0([g0,D0],G0,S)};if(j1>0)y.set(i,setInterval(M5,j1));if(s0)_1.push(x.on(F,M5));if(j0)_1.push(x.on(V,M5));let V0=(P5)=>{if(g0&&P(g0,P5))P0([g0,D0],G0,S)};_1.push(x.on(N,V0),x.on(U,V0),x.on(L,(P5,u0,P1)=>{if(g0&&P(g0,P5)&&G0.value!==u0&&G0.value.data!==u0)G0.set(P1?u0:{data:u0,...j})}))});let C1=()=>{if(g0&&D0)P0([g0,D0],G0,S)},L0=G0.listen;return G0.listen=(X1)=>{let b1=L0(X1);return X1(G0.value),C1(),b1},cH(G0,()=>{G0.value={...j},A0?.(),_1.forEach((X1)=>X1()),_1=[],m0?.(),clearInterval(y.get(i))}),G0},z0=(i,C)=>{for(let o of k.keys())if(P(o,i))C(o)},Y0=(i)=>{z0(i,(C)=>{k.delete(C)}),x.emit(N,i)},n=(i)=>{z0(i,(C)=>{let o=k.get(C);if(o)k.set(C,{...o,created:-1/0})}),x.emit(U,i)},u=(i,C)=>{z0(i,(o)=>{if(C===void 0)k.delete(o);else k.set(o,{data:C,created:A(),expires:A()+(E.cacheLifetime??8000)})}),x.emit(L,i,C)};function s(i,C){let{throttleCalls:o,onError:G0}=C??{throttleCalls:!0,onError:E?.onError},S=async(g0)=>{if(o&&A0.value?.loading)return;let D0=$0.fetcher??i,m0=[],E0=[],_1=(C1,L0)=>{if(A0.lc)A0.setKey(C1,L0)};try{A0.set({error:void 0,data:void 0,mutate:S,...O});let C1=await D0({data:g0,invalidate:(L0)=>{m0.push(L0)},revalidate:(L0)=>{E0.push(L0)},getCacheUpdater:(L0,X1=!0)=>[(b1)=>{if(u(L0,b1),X1)E0.push(L0)},k.get(L0)?.data]});return _1("data",C1),C1}catch(C1){G0?.(C1),_1("error",C1),A0.setKey("error",C1)}finally{_1("loading",!1),m0.forEach(Y0),E0.forEach(n)}},A0=j3({mutate:S,...j});return cH(A0,()=>A0.set({mutate:S,...j})),A0.mutate=S,A0}return[K0,s,{__unsafeOverruleSettings:(i)=>{console.warn("You should only use __unsafeOverruleSettings in test environment"),$0=i},invalidateKeys:Y0,revalidateKeys:n,mutateCache:u}]};function K(k){return typeof k==="string"||typeof k==="number"||k===!0}let B=(k)=>{if(K(k))return[u1([""+k,[k]]),()=>{}];let v=[],E=u1(null),x=new Map,e=()=>{if(v.some((Z0)=>Z0===null||Z0===void 0||Z0===!1))E.set(null);else E.set([v.join(""),v])};for(let Z0=0;Z0<k.length;Z0++){let $0=k[Z0];if(K($0))v.push($0);else v.push(null),x.set($0,Z0)}let y=[...x.keys()],J0=l$(y,(...Z0)=>{for(let $0=0;$0<Z0.length;$0++){let t=y[$0],P0=x.get(t);v[P0]=t._===R?t.value&&"data"in t.value?t.key:null:Z0[$0]}e()});return e(),[E,J0.subscribe($)]};function $(){}let F=1,V=2,N=3,U=4,L=5,P=(k,v)=>{if(Array.isArray(v))return v.includes(k);else if(typeof v==="function")return v(k);else return k===v},A=()=>new Date().getTime(),R=Symbol(),O={loading:!0},j={loading:!1};return Y},hT=(J,q)=>{if(!(typeof window>"u"))addEventListener(J,q)},hm=[()=>!document.hidden,(J)=>hT("visibilitychange",J),(J)=>hT("online",J)],mT=Em(hm);var[uQ,E00,{invalidateKeys:h00,revalidateKeys:m00,mutateCache:fT}]=mT({fetcher:(...J)=>fetch(J.join("")).then((q)=>q.json())});var H9=u1(null),V8=u1({}),hY=u1(!1),N8=u1("https://progy.francy.workers.dev"),pQ=u1(!1),FU=u1(!0),c9=R4(H9,(J)=>J?.user||null),UU=async()=>{hY.set(!0);try{let q=await(await fetch("/api/config")).json();if(q.remoteApiUrl)N8.set(q.remoteApiUrl);pQ.set(q.isOffline||!1),FU.set(q.isOfficial!==!1);let X=await fetch("/api/auth/token"),{token:Y}=await X.json();if(!Y){H9.set(null);return}console.log("[DEBUG] Fetching session with token:",Y.substring(0,5)+"...");let K=await fetch(`${N8.get()}/api/auth/get-session`,{headers:{Authorization:`Bearer ${Y}`}});if(K.ok){let B=await K.json();console.log("[DEBUG] Session data received:",B?.user?.name,"Plan:",B?.user?.subscription),H9.set(B)}else{let B=await K.text();console.warn("[WARN] Session fetch failed:",K.status,B),H9.set(null)}}catch(J){console.error("Failed to fetch user session",J),H9.set(null)}finally{hY.set(!1)}},mY=async()=>{try{let q=await(await fetch("/api/local-settings")).json();V8.set(q)}catch(J){console.error("Failed to fetch local settings",J)}},uT=async(J)=>{try{if((await fetch("/api/local-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(J)})).ok)V8.set({...V8.get(),...J})}catch(q){console.error("Failed to update local settings",q)}},pT=async(J)=>{let q=c9.get(),X=await fetch("/api/auth/token"),{token:Y}=await X.json();if(!q||!Y)return;try{if((await fetch(`${N8.get()}/api/auth/update-user`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Y}`},body:JSON.stringify({data:{metadata:JSON.stringify(J)}})})).ok){let B=H9.get();if(B)H9.set({...B,user:{...B.user,metadata:JSON.stringify(J)}})}}catch(K){console.error("Failed to update metadata",K)}},lT=async()=>{try{await fetch("/api/auth/token",{method:"POST"}),H9.set(null),UU(),console.log("[AUTH] Logged out successfully")}catch(J){console.error("[AUTH] Logout failed",J)}};var wU=null;async function lQ(J){let q=V8.get(),X=N8.get();if(!wU){let V=await fetch("/api/auth/token"),{token:N}=await V.json();wU=N}let Y=wU,K=q.aiProvider||"openai",B=q.openaiKey;if(K==="anthropic")B=q.anthropicKey;else if(K==="google")B=q.geminiKey;else if(K==="xai")B=q.xaiKey;let $={provider:K,model:q.aiModel,apiKey:B},F=await fetch(`${X}/api/ai/${J.endpoint}`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Y}`},body:JSON.stringify({context:J.context,prompt:J.prompt,difficulty:J.difficulty,messages:J.messages,config:$})});if(!F.ok){let V=await F.json().catch(()=>({}));throw Error(V.error||`HTTP error! status: ${F.status}`)}if(J.onChunk&&F.body){let V=F.body.getReader(),N=new TextDecoder,U=!1;while(!U){let{value:L,done:P}=await V.read();U=P;let A=N.decode(L);if(A)J.onChunk(A)}return null}return await F.json()}var dQ=u1("editor"),LU=u1("learning"),VU=u1("description"),r3=u1(!1),fY=(J)=>dQ.set(J),dT=(J)=>LU.set(J),n3=(J)=>VU.set(J),NU=()=>r3.set(!0),uY=()=>r3.set(!1);var cQ=uQ(["/api/exercises"]),cT=uQ(["/api/progress"]),S4=u1(null),iQ=uQ(["/api/exercises/code?path=",R4(S4,(J)=>J?.path||null),"&markdownPath=",R4(S4,(J)=>J?.markdownPath||null)]),MU=uQ(["/api/exercises/quiz?path=",R4(S4,(J)=>J?.hasQuiz?J.path:null)]),Y9=j3({}),aQ=u1(null),iT=u1(null),n6=u1(""),rQ=u1(""),s3=u1(!1),M8=u1(!1),z2=u1(null),PU=u1(!0),pY=R4([c9,pQ,V8],(J,q,X)=>{if(J?.subscription==="pro")return!1;let Y=X.aiProvider||"openai";if(Y==="openai"&&X.openaiKey||Y==="anthropic"&&X.anthropicKey||Y==="google"&&X.geminiKey||Y==="xai"&&X.xaiKey)return!1;return J?.subscription==="free"||q||!J}),aT=async()=>{let J=S4.get(),q=iQ.get();if(!J)return;if(pY.get()){NU();return}M8.set(!0),z2.set(null);try{let X=await lQ({endpoint:"hint",context:{exerciseName:J.friendlyName||J.name,code:q.data?.code||"",error:rQ.get()||n6.get()}});if(X.hint)z2.set(X.hint)}catch(X){z2.set(`Error: ${X.message||"Failed to get AI hint."}`)}finally{M8.set(!1)}},rT=async()=>{let J=S4.get(),q=iQ.get(),X=z2.get();if(!J||M8.get()||X&&!X.startsWith("Error:"))return;if(pY.get()){NU();return}M8.set(!0),z2.set("");try{await lQ({endpoint:"explain",context:{exerciseName:J.friendlyName||J.name,instructions:q.data?.markdown||void 0,code:q.data?.code||""},onChunk:(K)=>{let B=z2.get()||"",$=B+K;if($.startsWith('{"explanation":"'))$=$.replace('{"explanation":"',""),$=$.replace(/\\n/g,`
288
288
  `).replace(/\\"/g,'"');if(z2.set($),!B||B==="")n3("ai")}});let Y=z2.get()||"";if(Y.startsWith('{"explanation":"'))Y=Y.replace('{"explanation":"',"");if(Y.endsWith('"}'))Y=Y.substring(0,Y.length-2);Y=Y.replace(/\\n/g,`
289
- `).replace(/\\"/g,'"').replace(/\\\\/g,"\\").replace(/\\t/g,"\t").replace(/\\r/g,"\r"),z2.set(Y.trim()),n3("ai")}catch(Y){z2.set(`Error: ${Y.message||"Failed to get explanation."}`)}finally{M8.set(!1)}},nQ=R4(cQ,(J)=>J.data||{}),AU=R4(cT,(J)=>J.data||null),nT=R4(iQ,(J)=>J.data?.markdown||null),sT=R4(MU,(J)=>J.data||null),CU=R4(nQ,(J)=>Object.values(J).reduce((q,X)=>q+(Array.isArray(X)?X.length:0),0)),bU=R4(Y9,(J)=>Object.values(J).filter((q)=>q==="pass").length),oT=R4([CU,bU],(J,q)=>J>0?Math.round(q/J*100):0);var tT=(J)=>PU.set(J);var BZ=(J)=>{if(S4.set(J),z2.set(null),M8.set(!1),!J)n6.set(""),rQ.set("")};var OU=()=>cT.revalidate(),eT=async()=>{let J=S4.get();if(!J)return;s3.set(!0);try{let X=await(await fetch("/api/exercises/run",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({exerciseName:J.exerciseName,id:J.id,module:J.module})})).json();n6.set(X.rawOutput||X.output||""),rQ.set(X.friendlyOutput||"");let Y=X.success?"pass":"fail";if(Y9.setKey(J.id,Y),X.success)if(X.progress)fT("/api/progress",X.progress);else OU()}catch(q){n6.set("Failed to run tests."),Y9.setKey(J.id,"fail")}finally{s3.set(!1)}};AU.subscribe((J)=>{if(J&&J.exercises){let q={};for(let[X,Y]of Object.entries(J.exercises))q[X]=Y.status;Y9.set(q)}});var lY=Symbol.for("better-auth:broadcast-channel"),mm=()=>Math.floor(Date.now()/1000),fm=class{listeners=new Set;name;constructor(J="better-auth.message"){this.name=J}subscribe(J){return this.listeners.add(J),()=>{this.listeners.delete(J)}}post(J){if(typeof window>"u")return;try{localStorage.setItem(this.name,JSON.stringify({...J,timestamp:mm()}))}catch{}}setup(){if(typeof window>"u"||typeof window.addEventListener>"u")return()=>{};let J=(q)=>{if(q.key!==this.name)return;let X=JSON.parse(q.newValue??"{}");if(X?.event!=="session"||!X?.data)return;this.listeners.forEach((Y)=>Y(X))};return window.addEventListener("storage",J),()=>{window.removeEventListener("storage",J)}}};function sQ(J="better-auth.message"){if(!globalThis[lY])globalThis[lY]=new fm(J);return globalThis[lY]}var dY=Symbol.for("better-auth:focus-manager"),um=class{listeners=new Set;subscribe(J){return this.listeners.add(J),()=>{this.listeners.delete(J)}}setFocused(J){this.listeners.forEach((q)=>q(J))}setup(){if(typeof window>"u"||typeof document>"u"||typeof window.addEventListener>"u")return()=>{};let J=()=>{if(document.visibilityState==="visible")this.setFocused(!0)};return document.addEventListener("visibilitychange",J,!1),()=>{document.removeEventListener("visibilitychange",J,!1)}}};function IU(){if(!globalThis[dY])globalThis[dY]=new um;return globalThis[dY]}var cY=Symbol.for("better-auth:online-manager"),pm=class{listeners=new Set;isOnline=typeof navigator<"u"?navigator.onLine:!0;subscribe(J){return this.listeners.add(J),()=>{this.listeners.delete(J)}}setOnline(J){this.isOnline=J,this.listeners.forEach((q)=>q(J))}setup(){if(typeof window>"u"||typeof window.addEventListener>"u")return()=>{};let J=()=>this.setOnline(!0),q=()=>this.setOnline(!1);return window.addEventListener("online",J,!1),window.addEventListener("offline",q,!1),()=>{window.removeEventListener("online",J,!1),window.removeEventListener("offline",q,!1)}}};function iY(){if(!globalThis[cY])globalThis[cY]=new pm;return globalThis[cY]}var oQ=Symbol("clean");var P8=[],s6=0,aY=4,lm=0,tQ=(J)=>{let q=[],X={get(){if(!X.lc)X.listen(()=>{})();return X.value},lc:0,listen(Y){return X.lc=q.push(Y),()=>{for(let B=s6+aY;B<P8.length;)if(P8[B]===Y)P8.splice(B,aY);else B+=aY;let K=q.indexOf(Y);if(~K){if(q.splice(K,1),!--X.lc)X.off()}}},notify(Y,K){lm++;let B=!P8.length;for(let $ of q)P8.push($,X.value,Y,K);if(B){for(s6=0;s6<P8.length;s6+=aY)P8[s6](P8[s6+1],P8[s6+2],P8[s6+3]);P8.length=0}},off(){},set(Y){let K=X.value;if(K!==Y)X.value=Y,X.notify(K)},subscribe(Y){let K=X.listen(Y);return Y(X.value),K},value:J};return X[oQ]=()=>{q=[],X.lc=0,X.off()},X};var dm=5,o3=6,rY=10,cm=(J,q,X,Y)=>{if(J.events=J.events||{},!J.events[X+rY])J.events[X+rY]=Y((K)=>{J.events[X].reduceRight((B,$)=>($(B),B),{shared:{},...K})});return J.events[X]=J.events[X]||[],J.events[X].push(q),()=>{let K=J.events[X],B=K.indexOf(q);if(K.splice(B,1),!K.length)delete J.events[X],J.events[X+rY](),delete J.events[X+rY]}};var ZD=1000,eQ=(J,q)=>{return cm(J,(Y)=>{let K=q(Y);if(K)J.events[o3].push(K)},dm,(Y)=>{let K=J.listen;J.listen=(...$)=>{if(!J.lc&&!J.active)J.active=!0,Y();return K(...$)};let B=J.off;J.events[o3]=[],J.off=()=>{B(),setTimeout(()=>{if(J.active&&!J.lc){J.active=!1;for(let $ of J.events[o3])$();J.events[o3]=[]}},ZD)};{let $=J[oQ];J[oQ]=()=>{for(let F of J.events[o3])F();J.events[o3]=[],J.active=!1,$()}}return()=>{J.listen=K,J.off=B}})};var im=()=>typeof window>"u",TU=(J,q,X,Y)=>{let K=tQ({data:null,error:null,isPending:!0,isRefetching:!1,refetch:(F)=>B(F)}),B=async(F)=>{return new Promise((V)=>{let N=typeof Y==="function"?Y({data:K.get().data,error:K.get().error,isPending:K.get().isPending}):Y;X(q,{...N,query:{...N?.query,...F?.query},async onSuccess(U){K.set({data:U.data,error:null,isPending:!1,isRefetching:!1,refetch:K.value.refetch}),await N?.onSuccess?.(U)},async onError(U){let{request:L}=U,P=typeof L.retry==="number"?L.retry:L.retry?.attempts,A=L.retryAttempt||0;if(P&&A<P)return;K.set({error:U.error,data:null,isPending:!1,isRefetching:!1,refetch:K.value.refetch}),await N?.onError?.(U)},async onRequest(U){let L=K.get();K.set({isPending:L.data===null,data:L.data,error:null,isRefetching:!0,refetch:K.value.refetch}),await N?.onRequest?.(U)}}).catch((U)=>{K.set({error:U,data:null,isPending:!1,isRefetching:!1,refetch:K.value.refetch})}).finally(()=>{V(void 0)})})};J=Array.isArray(J)?J:[J];let $=!1;for(let F of J)F.subscribe(async()=>{if(im())return;if($)await B();else eQ(K,()=>{let V=setTimeout(async()=>{if(!$)await B(),$=!0},0);return()=>{K.off(),F.off(),clearTimeout(V)}})});return K};var t3=()=>Math.floor(Date.now()/1000),am=5;function DU(J){let{sessionAtom:q,sessionSignal:X,$fetch:Y,options:K={}}=J,B=K.sessionOptions?.refetchInterval??0,$=K.sessionOptions?.refetchOnWindowFocus??!0,F=K.sessionOptions?.refetchWhenOffline??!1,V={lastSync:0,lastSessionRequest:0,cachedSession:void 0},N=()=>{return F||iY().isOnline},U=(v)=>{if(!N())return;if(v?.event==="storage"){V.lastSync=t3(),X.set(!X.get());return}let E=q.get();if(v?.event==="poll"){V.lastSessionRequest=t3(),Y("/get-session").then((x)=>{if(x.error)q.set({...E,data:null,error:x.error});else q.set({...E,data:x.data,error:null});V.lastSync=t3(),X.set(!X.get())}).catch(()=>{});return}if(v?.event==="visibilitychange"){if(t3()-V.lastSessionRequest<am)return;V.lastSessionRequest=t3()}if(E?.data===null||E?.data===void 0||v?.event==="visibilitychange")V.lastSync=t3(),X.set(!X.get())},L=(v)=>{sQ().post({event:"session",data:{trigger:v},clientId:Math.random().toString(36).substring(7)})},P=()=>{if(B&&B>0)V.pollInterval=setInterval(()=>{if(q.get()?.data)U({event:"poll"})},B*1000)},A=()=>{V.unsubscribeBroadcast=sQ().subscribe(()=>{U({event:"storage"})})},R=()=>{if(!$)return;V.unsubscribeFocus=IU().subscribe(()=>{U({event:"visibilitychange"})})},O=()=>{V.unsubscribeOnline=iY().subscribe((v)=>{if(v)U({event:"visibilitychange"})})};return{init:()=>{P(),A(),R(),O(),sQ().setup(),IU().setup(),iY().setup()},cleanup:()=>{if(V.pollInterval)clearInterval(V.pollInterval),V.pollInterval=void 0;if(V.unsubscribeBroadcast)V.unsubscribeBroadcast(),V.unsubscribeBroadcast=void 0;if(V.unsubscribeFocus)V.unsubscribeFocus(),V.unsubscribeFocus=void 0;if(V.unsubscribeOnline)V.unsubscribeOnline(),V.unsubscribeOnline=void 0;V.lastSync=0,V.lastSessionRequest=0,V.cachedSession=void 0},triggerRefetch:U,broadcastSessionUpdate:L}}var nY=Object.create(null),Zq=(J)=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(J?nY:globalThis),y4=new Proxy(nY,{get(J,q){return Zq()[q]??nY[q]},has(J,q){return q in Zq()||q in nY},set(J,q,X){let Y=Zq(!0);return Y[q]=X,!0},deleteProperty(J,q){if(!q)return!1;let X=Zq(!0);return delete X[q],!0},ownKeys(){let J=Zq(!0);return Object.keys(J)}});var rm=typeof process<"u"&&process.env&&"development"||"";function p1(J,q){if(typeof process<"u"&&process.env)return process.env[J]??q;if(typeof Deno<"u")return Deno.env.get(J)??q;if(typeof Bun<"u")return Bun.env[J]??q;return q}var nm=Object.freeze({get BETTER_AUTH_SECRET(){return p1("BETTER_AUTH_SECRET")},get AUTH_SECRET(){return p1("AUTH_SECRET")},get BETTER_AUTH_TELEMETRY(){return p1("BETTER_AUTH_TELEMETRY")},get BETTER_AUTH_TELEMETRY_ID(){return p1("BETTER_AUTH_TELEMETRY_ID")},get NODE_ENV(){return p1("NODE_ENV","development")},get PACKAGE_VERSION(){return p1("PACKAGE_VERSION","0.0.0")},get BETTER_AUTH_TELEMETRY_ENDPOINT(){return p1("BETTER_AUTH_TELEMETRY_ENDPOINT","")}});var zq=1,o5=4,W9=8,A2=24,zD={eterm:o5,cons25:o5,console:o5,cygwin:o5,dtterm:o5,gnome:o5,hurd:o5,jfbterm:o5,konsole:o5,kterm:o5,mlterm:o5,mosh:A2,putty:o5,st:o5,"rxvt-unicode-24bit":A2,terminator:A2,"xterm-kitty":A2},sm=new Map(Object.entries({APPVEYOR:W9,BUILDKITE:W9,CIRCLECI:A2,DRONE:W9,GITEA_ACTIONS:A2,GITHUB_ACTIONS:A2,GITLAB_CI:W9,TRAVIS:W9})),om=[/ansi/,/color/,/linux/,/direct/,/^con[0-9]*x[0-9]/,/^rxvt/,/^screen/,/^xterm/,/^vt100/,/^vt220/];function _U(){if(p1("FORCE_COLOR")!==void 0)switch(p1("FORCE_COLOR")){case"":case"1":case"true":return o5;case"2":return W9;case"3":return A2;default:return zq}if(p1("NODE_DISABLE_COLORS")!==void 0&&p1("NODE_DISABLE_COLORS")!==""||p1("NO_COLOR")!==void 0&&p1("NO_COLOR")!==""||p1("TERM")==="dumb")return zq;if(p1("TMUX"))return A2;if("TF_BUILD"in y4&&"AGENT_NAME"in y4)return o5;if("CI"in y4){for(let{0:J,1:q}of sm)if(J in y4)return q;if(p1("CI_NAME")==="codeship")return W9;return zq}if("TEAMCITY_VERSION"in y4)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.exec(p1("TEAMCITY_VERSION"))!==null?o5:zq;switch(p1("TERM_PROGRAM")){case"iTerm.app":if(!p1("TERM_PROGRAM_VERSION")||/^[0-2]\./.exec(p1("TERM_PROGRAM_VERSION"))!==null)return W9;return A2;case"HyperTerm":case"MacTerm":return A2;case"Apple_Terminal":return W9}if(p1("COLORTERM")==="truecolor"||p1("COLORTERM")==="24bit")return A2;if(p1("TERM")){if(/truecolor/.exec(p1("TERM"))!==null)return A2;if(/^xterm-256/.exec(p1("TERM"))!==null)return W9;let J=p1("TERM").toLowerCase();if(zD[J])return zD[J];if(om.some((q)=>q.exec(J)!==null))return o5}if(p1("COLORTERM"))return o5;return zq}var A8={reset:"\x1B[0m",bright:"\x1B[1m",dim:"\x1B[2m",undim:"\x1B[22m",underscore:"\x1B[4m",blink:"\x1B[5m",reverse:"\x1B[7m",hidden:"\x1B[8m",fg:{black:"\x1B[30m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",white:"\x1B[37m"},bg:{black:"\x1B[40m",red:"\x1B[41m",green:"\x1B[42m",yellow:"\x1B[43m",blue:"\x1B[44m",magenta:"\x1B[45m",cyan:"\x1B[46m",white:"\x1B[47m"}},sY=["debug","info","success","warn","error"];function JD(J,q){return sY.indexOf(q)>=sY.indexOf(J)}var tm={info:A8.fg.blue,success:A8.fg.green,warn:A8.fg.yellow,error:A8.fg.red,debug:A8.fg.magenta},em=(J,q,X)=>{let Y=new Date().toISOString();if(X)return`${A8.dim}${Y}${A8.reset} ${tm[J]}${J.toUpperCase()}${A8.reset} ${A8.bright}[Better Auth]:${A8.reset} ${q}`;return`${Y} ${J.toUpperCase()} [Better Auth]: ${q}`},QD=(J)=>{let q=J?.disabled!==!0,X=J?.level??"warn",Y=J?.disableColors!==void 0?!J.disableColors:_U()!==1,K=(B,$,F=[])=>{if(!q||!JD(X,B))return;let V=em(B,$,Y);if(!J||typeof J.log!=="function"){if(B==="error")console.error(V,...F);else if(B==="warn")console.warn(V,...F);else console.log(V,...F);return}J.log(B==="success"?"info":B,$,...F)};return{...Object.fromEntries(sY.map((B)=>[B,(...[$,...F])=>K(B,$,F)])),get level(){return X}}},qD=QD();function RU(J){return J}function jU(J){return J.charAt(0).toUpperCase()+J.slice(1)}var Zf=RU({USER_NOT_FOUND:"User not found",FAILED_TO_CREATE_USER:"Failed to create user",FAILED_TO_CREATE_SESSION:"Failed to create session",FAILED_TO_UPDATE_USER:"Failed to update user",FAILED_TO_GET_SESSION:"Failed to get session",INVALID_PASSWORD:"Invalid password",INVALID_EMAIL:"Invalid email",INVALID_EMAIL_OR_PASSWORD:"Invalid email or password",SOCIAL_ACCOUNT_ALREADY_LINKED:"Social account already linked",PROVIDER_NOT_FOUND:"Provider not found",INVALID_TOKEN:"Invalid token",ID_TOKEN_NOT_SUPPORTED:"id_token not supported",FAILED_TO_GET_USER_INFO:"Failed to get user info",USER_EMAIL_NOT_FOUND:"User email not found",EMAIL_NOT_VERIFIED:"Email not verified",PASSWORD_TOO_SHORT:"Password too short",PASSWORD_TOO_LONG:"Password too long",USER_ALREADY_EXISTS:"User already exists.",USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:"User already exists. Use another email.",EMAIL_CAN_NOT_BE_UPDATED:"Email can not be updated",CREDENTIAL_ACCOUNT_NOT_FOUND:"Credential account not found",SESSION_EXPIRED:"Session expired. Re-authenticate to perform this action.",FAILED_TO_UNLINK_LAST_ACCOUNT:"You can't unlink your last account",ACCOUNT_NOT_FOUND:"Account not found",USER_ALREADY_HAS_PASSWORD:"User already has a password. Provide that to delete the account.",CROSS_SITE_NAVIGATION_LOGIN_BLOCKED:"Cross-site navigation login blocked. This request appears to be a CSRF attack.",VERIFICATION_EMAIL_NOT_ENABLED:"Verification email isn't enabled",EMAIL_ALREADY_VERIFIED:"Email is already verified",EMAIL_MISMATCH:"Email mismatch",SESSION_NOT_FRESH:"Session is not fresh",LINKED_ACCOUNT_ALREADY_EXISTS:"Linked account already exists",INVALID_ORIGIN:"Invalid origin",INVALID_CALLBACK_URL:"Invalid callbackURL",INVALID_REDIRECT_URL:"Invalid redirectURL",INVALID_ERROR_CALLBACK_URL:"Invalid errorCallbackURL",INVALID_NEW_USER_CALLBACK_URL:"Invalid newUserCallbackURL",MISSING_OR_NULL_ORIGIN:"Missing or null Origin",CALLBACK_URL_REQUIRED:"callbackURL is required",FAILED_TO_CREATE_VERIFICATION:"Unable to create verification",FIELD_NOT_ALLOWED:"Field not allowed to be set",ASYNC_VALIDATION_NOT_SUPPORTED:"Async validation is not supported",VALIDATION_ERROR:"Validation Error",MISSING_FIELD:"Field is required"});var e3=class extends Error{constructor(J,q){super(J,q);this.name="BetterAuthError",this.message=J,this.stack=""}};function zf(J){try{return(new URL(J).pathname.replace(/\/+$/,"")||"/")!=="/"}catch{throw new e3(`Invalid base URL: ${J}. Please provide a valid base URL.`)}}function Jf(J){try{let q=new URL(J);if(q.protocol!=="http:"&&q.protocol!=="https:")throw new e3(`Invalid base URL: ${J}. URL must include 'http://' or 'https://'`)}catch(q){if(q instanceof e3)throw q;throw new e3(`Invalid base URL: ${J}. Please provide a valid base URL.`,{cause:q})}}function Jq(J,q="/api/auth"){if(Jf(J),zf(J))return J;let X=J.replace(/\/+$/,"");if(!q||q==="/")return X;return q=q.startsWith("/")?q:`/${q}`,`${X}${q}`}function XD(J,q){if(!J||J.trim()==="")return!1;if(q==="proto")return J==="http"||J==="https";if(q==="host"){if([/\.\./,/\0/,/[\s]/,/^[.]/,/[<>'"]/,/javascript:/i,/file:/i,/data:/i].some((X)=>X.test(J)))return!1;return/^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*(:[0-9]{1,5})?$/.test(J)||/^(\d{1,3}\.){3}\d{1,3}(:[0-9]{1,5})?$/.test(J)||/^\[[0-9a-fA-F:]+\](:[0-9]{1,5})?$/.test(J)||/^localhost(:[0-9]{1,5})?$/i.test(J)}return!1}function HD(J,q,X,Y,K){if(J)return Jq(J,q);if(Y!==!1){let F=y4.BETTER_AUTH_URL||y4.NEXT_PUBLIC_BETTER_AUTH_URL||y4.PUBLIC_BETTER_AUTH_URL||y4.NUXT_PUBLIC_BETTER_AUTH_URL||y4.NUXT_PUBLIC_AUTH_URL||(y4.BASE_URL!=="/"?y4.BASE_URL:void 0);if(F)return Jq(F,q)}let B=X?.headers.get("x-forwarded-host"),$=X?.headers.get("x-forwarded-proto");if(B&&$&&K){if(XD($,"proto")&&XD(B,"host"))try{return Jq(`${$}://${B}`,q)}catch(F){}}if(X){let F=Qf(X.url);if(!F)throw new e3("Could not get origin from request. Please provide a valid base URL.");return Jq(F,q)}if(typeof window<"u"&&window.location)return Jq(window.location.origin,q)}function Qf(J){try{let q=new URL(J);return q.origin==="null"?null:q.origin}catch{return null}}var YD={id:"redirect",name:"Redirect",hooks:{onSuccess(J){if(J.data?.url&&J.data?.redirect){if(typeof window<"u"&&window.location){if(window.location)try{window.location.href=J.data.url}catch{}}}}}};var qf={proto:/"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/,constructor:/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/,protoShort:/"__proto__"\s*:/,constructorShort:/"constructor"\s*:/},Xf=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/,WD={true:!0,false:!1,null:null,undefined:void 0,nan:NaN,infinity:Number.POSITIVE_INFINITY,"-infinity":Number.NEGATIVE_INFINITY},Hf=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,7}))?(?:Z|([+-])(\d{2}):(\d{2}))$/;function Yf(J){return J instanceof Date&&!isNaN(J.getTime())}function Wf(J){let q=Hf.exec(J);if(!q)return null;let[,X,Y,K,B,$,F,V,N,U,L]=q,P=new Date(Date.UTC(parseInt(X,10),parseInt(Y,10)-1,parseInt(K,10),parseInt(B,10),parseInt($,10),parseInt(F,10),V?parseInt(V.padEnd(3,"0"),10):0));if(N){let A=(parseInt(U,10)*60+parseInt(L,10))*(N==="+"?-1:1);P.setUTCMinutes(P.getUTCMinutes()+A)}return Yf(P)?P:null}function Kf(J,q={}){let{strict:X=!1,warnings:Y=!1,reviver:K,parseDates:B=!0}=q;if(typeof J!=="string")return J;let $=J.trim();if($.length>0&&$[0]==='"'&&$.endsWith('"')&&!$.slice(1,-1).includes('"'))return $.slice(1,-1);let F=$.toLowerCase();if(F.length<=9&&F in WD)return WD[F];if(!Xf.test($)){if(X)throw SyntaxError("[better-json] Invalid JSON");return J}if(Object.entries(qf).some(([V,N])=>{let U=N.test($);if(U&&Y)console.warn(`[better-json] Detected potential prototype pollution attempt using ${V} pattern`);return U})&&X)throw Error("[better-json] Potential prototype pollution attempt detected");try{return JSON.parse($,(N,U)=>{if(N==="__proto__"||N==="constructor"&&U&&typeof U==="object"&&"prototype"in U){if(Y)console.warn(`[better-json] Dropping "${N}" key to prevent prototype pollution`);return}if(B&&typeof U==="string"){let L=Wf(U);if(L)return L}return K?K(N,U):U})}catch(V){if(X)throw V;return J}}function KD(J,q={strict:!0}){return Kf(J,q)}function GD(J,q){let X=tQ(!1),Y=TU(X,"/get-session",J,{method:"GET"});return eQ(Y,()=>{let K=DU({sessionAtom:Y,sessionSignal:X,$fetch:J,options:q});return K.init(),()=>{K.cleanup()}}),{session:Y,$sessionSignal:X}}function kU(J){if(J===null||typeof J!=="object")return!1;let q=Object.getPrototypeOf(J);if(q!==null&&q!==Object.prototype&&Object.getPrototypeOf(q)!==null)return!1;if(Symbol.iterator in J)return!1;if(Symbol.toStringTag in J)return Object.prototype.toString.call(J)==="[object Module]";return!0}function SU(J,q,X=".",Y){if(!kU(q))return SU(J,{},X,Y);let K=Object.assign({},q);for(let B in J){if(B==="__proto__"||B==="constructor")continue;let $=J[B];if($===null||$===void 0)continue;if(Y&&Y(K,B,$,X))continue;if(Array.isArray($)&&Array.isArray(K[B]))K[B]=[...$,...K[B]];else if(kU($)&&kU(K[B]))K[B]=SU($,K[B],(X?`${X}.`:"")+B.toString(),Y);else K[B]=$}return K}function yU(J){return(...q)=>q.reduce((X,Y)=>SU(X,Y,"",J),{})}var BD=yU(),_50=yU((J,q,X)=>{if(J[q]!==void 0&&typeof X==="function")return J[q]=X(J[q]),!0}),R50=yU((J,q,X)=>{if(Array.isArray(J[q])&&typeof X==="function")return J[q]=X(J[q]),!0});var{defineProperty:Gf,defineProperties:Bf,getOwnPropertyDescriptors:$f,getOwnPropertySymbols:$D}=Object,Ff=Object.prototype.hasOwnProperty,Uf=Object.prototype.propertyIsEnumerable,FD=(J,q,X)=>(q in J)?Gf(J,q,{enumerable:!0,configurable:!0,writable:!0,value:X}):J[q]=X,C8=(J,q)=>{for(var X in q||(q={}))if(Ff.call(q,X))FD(J,X,q[X]);if($D){for(var X of $D(q))if(Uf.call(q,X))FD(J,X,q[X])}return J},K9=(J,q)=>Bf(J,$f(q)),wf=class extends Error{constructor(J,q,X){super(q||J.toString(),{cause:X});this.status=J,this.statusText=q,this.error=X,Error.captureStackTrace(this,this.constructor)}},Lf=async(J,q)=>{var X,Y,K,B,$,F;let V=q||{},N={onRequest:[q==null?void 0:q.onRequest],onResponse:[q==null?void 0:q.onResponse],onSuccess:[q==null?void 0:q.onSuccess],onError:[q==null?void 0:q.onError],onRetry:[q==null?void 0:q.onRetry]};if(!q||!(q==null?void 0:q.plugins))return{url:J,options:V,hooks:N};for(let U of(q==null?void 0:q.plugins)||[]){if(U.init){let L=await((X=U.init)==null?void 0:X.call(U,J.toString(),q));V=L.options||V,J=L.url}N.onRequest.push((Y=U.hooks)==null?void 0:Y.onRequest),N.onResponse.push((K=U.hooks)==null?void 0:K.onResponse),N.onSuccess.push((B=U.hooks)==null?void 0:B.onSuccess),N.onError.push(($=U.hooks)==null?void 0:$.onError),N.onRetry.push((F=U.hooks)==null?void 0:F.onRetry)}return{url:J,options:V,hooks:N}},UD=class{constructor(J){this.options=J}shouldAttemptRetry(J,q){if(this.options.shouldRetry)return Promise.resolve(J<this.options.attempts&&this.options.shouldRetry(q));return Promise.resolve(J<this.options.attempts)}getDelay(){return this.options.delay}},Vf=class{constructor(J){this.options=J}shouldAttemptRetry(J,q){if(this.options.shouldRetry)return Promise.resolve(J<this.options.attempts&&this.options.shouldRetry(q));return Promise.resolve(J<this.options.attempts)}getDelay(J){return Math.min(this.options.maxDelay,this.options.baseDelay*2**J)}};function Nf(J){if(typeof J==="number")return new UD({type:"linear",attempts:J,delay:1000});switch(J.type){case"linear":return new UD(J);case"exponential":return new Vf(J);default:throw Error("Invalid retry strategy")}}var Mf=async(J)=>{let q={},X=async(Y)=>typeof Y==="function"?await Y():Y;if(J==null?void 0:J.auth){if(J.auth.type==="Bearer"){let Y=await X(J.auth.token);if(!Y)return q;q.authorization=`Bearer ${Y}`}else if(J.auth.type==="Basic"){let[Y,K]=await Promise.all([X(J.auth.username),X(J.auth.password)]);if(!Y||!K)return q;q.authorization=`Basic ${btoa(`${Y}:${K}`)}`}else if(J.auth.type==="Custom"){let[Y,K]=await Promise.all([X(J.auth.prefix),X(J.auth.value)]);if(!K)return q;q.authorization=`${Y!=null?Y:""} ${K}`}}return q},Pf=/^application\/(?:[\w!#$%&*.^`~-]*\+)?json(;.+)?$/i;function Af(J){let q=J.headers.get("content-type"),X=new Set(["image/svg","application/xml","application/xhtml","application/html"]);if(!q)return"json";let Y=q.split(";").shift()||"";if(Pf.test(Y))return"json";if(X.has(Y)||Y.startsWith("text/"))return"text";return"blob"}function Cf(J){try{return JSON.parse(J),!0}catch(q){return!1}}function xU(J){if(J===void 0)return!1;let q=typeof J;if(q==="string"||q==="number"||q==="boolean"||q===null)return!0;if(q!=="object")return!1;if(Array.isArray(J))return!0;if(J.buffer)return!1;return J.constructor&&J.constructor.name==="Object"||typeof J.toJSON==="function"}function wD(J){try{return JSON.parse(J)}catch(q){return J}}function LD(J){return typeof J==="function"}function bf(J){if(J==null?void 0:J.customFetchImpl)return J.customFetchImpl;if(typeof globalThis<"u"&&LD(globalThis.fetch))return globalThis.fetch;if(typeof window<"u"&&LD(window.fetch))return window.fetch;throw Error("No fetch implementation found")}async function Of(J){let q=new Headers(J==null?void 0:J.headers),X=await Mf(J);for(let[Y,K]of Object.entries(X||{}))q.set(Y,K);if(!q.has("content-type")){let Y=If(J==null?void 0:J.body);if(Y)q.set("content-type",Y)}return q}function If(J){if(xU(J))return"application/json";return null}function Tf(J){if(!(J==null?void 0:J.body))return null;let q=new Headers(J==null?void 0:J.headers);if(xU(J.body)&&!q.has("content-type")){for(let[X,Y]of Object.entries(J==null?void 0:J.body))if(Y instanceof Date)J.body[X]=Y.toISOString();return JSON.stringify(J.body)}if(q.has("content-type")&&q.get("content-type")==="application/x-www-form-urlencoded"){if(xU(J.body))return new URLSearchParams(J.body).toString();return J.body}return J.body}function Df(J,q){var X;if(q==null?void 0:q.method)return q.method.toUpperCase();if(J.startsWith("@")){let Y=(X=J.split("@")[1])==null?void 0:X.split("/")[0];if(!VD.includes(Y))return(q==null?void 0:q.body)?"POST":"GET";return Y.toUpperCase()}return(q==null?void 0:q.body)?"POST":"GET"}function _f(J,q){let X;if(!(J==null?void 0:J.signal)&&(J==null?void 0:J.timeout))X=setTimeout(()=>q==null?void 0:q.abort(),J==null?void 0:J.timeout);return{abortTimeout:X,clearTimeout:()=>{if(X)clearTimeout(X)}}}var Rf=class J extends Error{constructor(q,X){super(X||JSON.stringify(q,null,2));this.issues=q,Object.setPrototypeOf(this,J.prototype)}};async function oY(J,q){let X=await J["~standard"].validate(q);if(X.issues)throw new Rf(X.issues);return X.value}var VD=["get","post","put","patch","delete"];var jf=(J)=>({id:"apply-schema",name:"Apply Schema",version:"1.0.0",async init(q,X){var Y,K,B,$;let F=((K=(Y=J.plugins)==null?void 0:Y.find((V)=>{var N;return((N=V.schema)==null?void 0:N.config)?q.startsWith(V.schema.config.baseURL||"")||q.startsWith(V.schema.config.prefix||""):!1}))==null?void 0:K.schema)||J.schema;if(F){let V=q;if((B=F.config)==null?void 0:B.prefix){if(V.startsWith(F.config.prefix)){if(V=V.replace(F.config.prefix,""),F.config.baseURL)q=q.replace(F.config.prefix,F.config.baseURL)}}if(($=F.config)==null?void 0:$.baseURL){if(V.startsWith(F.config.baseURL))V=V.replace(F.config.baseURL,"")}let N=F.schema[V];if(N){let U=K9(C8({},X),{method:N.method,output:N.output});if(!(X==null?void 0:X.disableValidation))U=K9(C8({},U),{body:N.input?await oY(N.input,X==null?void 0:X.body):X==null?void 0:X.body,params:N.params?await oY(N.params,X==null?void 0:X.params):X==null?void 0:X.params,query:N.query?await oY(N.query,X==null?void 0:X.query):X==null?void 0:X.query});return{url:q,options:U}}}return{url:q,options:X}}}),ND=(J)=>{async function q(X,Y){let K=K9(C8(C8({},J),Y),{plugins:[...(J==null?void 0:J.plugins)||[],jf(J||{}),...(Y==null?void 0:Y.plugins)||[]]});if(J==null?void 0:J.catchAllError)try{return await vU(X,K)}catch(B){return{data:null,error:{status:500,statusText:"Fetch Error",message:"Fetch related error. Captured by catchAllError option. See error property for more details.",error:B}}}return await vU(X,K)}return q};function kf(J,q){let{baseURL:X,params:Y,query:K}=q||{query:{},params:{},baseURL:""},B=J.startsWith("http")?J.split("/").slice(0,3).join("/"):X||"";if(J.startsWith("@")){let L=J.toString().split("@")[1].split("/")[0];if(VD.includes(L))J=J.replace(`@${L}/`,"/")}if(!B.endsWith("/"))B+="/";let[$,F]=J.replace(B,"").split("?"),V=new URLSearchParams(F);for(let[L,P]of Object.entries(K||{})){if(P==null)continue;let A;if(typeof P==="string")A=P;else if(Array.isArray(P)){for(let R of P)V.append(L,R);continue}else A=JSON.stringify(P);V.set(L,A)}if(Y)if(Array.isArray(Y)){let L=$.split("/").filter((P)=>P.startsWith(":"));for(let[P,A]of L.entries()){let R=Y[P];$=$.replace(A,R)}}else for(let[L,P]of Object.entries(Y))$=$.replace(`:${L}`,String(P));if($=$.split("/").map(encodeURIComponent).join("/"),$.startsWith("/"))$=$.slice(1);let N=V.toString();if(N=N.length>0?`?${N}`.replace(/\+/g,"%20"):"",!B.startsWith("http"))return`${B}${$}${N}`;return new URL(`${$}${N}`,B)}var vU=async(J,q)=>{var X,Y,K,B,$,F,V,N;let{hooks:U,url:L,options:P}=await Lf(J,q),A=bf(P),R=new AbortController,O=(X=P.signal)!=null?X:R.signal,j=kf(L,P),k=Tf(P),v=await Of(P),E=Df(L,P),x=K9(C8({},P),{url:j,headers:v,body:k,method:E,signal:O});for(let z0 of U.onRequest)if(z0){let Y0=await z0(x);if(typeof Y0==="object"&&Y0!==null)x=Y0}if("pipeTo"in x&&typeof x.pipeTo==="function"||typeof((Y=q==null?void 0:q.body)==null?void 0:Y.pipe)==="function"){if(!("duplex"in x))x.duplex="half"}let{clearTimeout:e}=_f(P,R),y=await A(x.url,x);e();let J0={response:y,request:x};for(let z0 of U.onResponse)if(z0){let Y0=await z0(K9(C8({},J0),{response:((K=q==null?void 0:q.hookOptions)==null?void 0:K.cloneResponse)?y.clone():y}));if(Y0 instanceof Response)y=Y0;else if(typeof Y0==="object"&&Y0!==null)y=Y0.response}if(y.ok){if(x.method==="HEAD")return{data:"",error:null};let Y0=Af(y),n={data:null,response:y,request:x};if(Y0==="json"||Y0==="text"){let u=await y.text(),s=(B=x.jsonParser)!=null?B:wD;n.data=await s(u)}else n.data=await y[Y0]();if(x==null?void 0:x.output){if(x.output&&!x.disableValidation)n.data=await oY(x.output,n.data)}for(let u of U.onSuccess)if(u)await u(K9(C8({},n),{response:(($=q==null?void 0:q.hookOptions)==null?void 0:$.cloneResponse)?y.clone():y}));if(q==null?void 0:q.throw)return n.data;return{data:n.data,error:null}}let Z0=(F=q==null?void 0:q.jsonParser)!=null?F:wD,$0=await y.text(),t=Cf($0),P0=t?await Z0($0):null,K0={response:y,responseText:$0,request:x,error:K9(C8({},P0),{status:y.status,statusText:y.statusText})};for(let z0 of U.onError)if(z0)await z0(K9(C8({},K0),{response:((V=q==null?void 0:q.hookOptions)==null?void 0:V.cloneResponse)?y.clone():y}));if(q==null?void 0:q.retry){let z0=Nf(q.retry),Y0=(N=q.retryAttempt)!=null?N:0;if(await z0.shouldAttemptRetry(Y0,y)){for(let u of U.onRetry)if(u)await u(J0);let n=z0.getDelay(Y0);return await new Promise((u)=>setTimeout(u,n)),await vU(J,K9(C8({},q),{retryAttempt:Y0+1}))}}if(q==null?void 0:q.throw)throw new wf(y.status,y.statusText,t?P0:$0);return{data:null,error:K9(C8({},P0),{status:y.status,statusText:y.statusText})}};var MD=(J,q)=>{let X="credentials"in Request.prototype,Y=HD(J?.baseURL,J?.basePath,void 0,q)??"/api/auth",K=J?.plugins?.flatMap((x)=>x.fetchPlugins).filter((x)=>x!==void 0)||[],B={id:"lifecycle-hooks",name:"lifecycle-hooks",hooks:{onSuccess:J?.fetchOptions?.onSuccess,onError:J?.fetchOptions?.onError,onRequest:J?.fetchOptions?.onRequest,onResponse:J?.fetchOptions?.onResponse}},{onSuccess:$,onError:F,onRequest:V,onResponse:N,...U}=J?.fetchOptions||{},L=ND({baseURL:Y,...X?{credentials:"include"}:{},method:"GET",jsonParser(x){if(!x)return null;return KD(x,{strict:!1})},customFetchImpl:fetch,...U,plugins:[B,...U.plugins||[],...J?.disableDefaultFetchPlugins?[]:[YD],...K]}),{$sessionSignal:P,session:A}=GD(L,J),R=J?.plugins||[],O={},j={$sessionSignal:P,session:A},k={"/sign-out":"POST","/revoke-sessions":"POST","/revoke-other-sessions":"POST","/delete-user":"POST"},v=[{signal:"$sessionSignal",matcher(x){return x==="/sign-out"||x==="/update-user"||x==="/sign-up/email"||x==="/sign-in/email"||x==="/delete-user"||x==="/verify-email"||x==="/revoke-sessions"||x==="/revoke-session"||x==="/change-email"}}];for(let x of R){if(x.getAtoms)Object.assign(j,x.getAtoms?.(L));if(x.pathMethods)Object.assign(k,x.pathMethods);if(x.atomListeners)v.push(...x.atomListeners)}let E={notify:(x)=>{j[x].set(!j[x].get())},listen:(x,e)=>{j[x].subscribe(e)},atoms:j};for(let x of R)if(x.getActions)O=BD(x.getActions?.(L,E,J)??{},O);return{get baseURL(){return Y},pluginsActions:O,pluginsAtoms:j,pluginPathMethods:k,atomListeners:v,$fetch:L,$store:E}};function PD(J){return typeof J==="object"&&J!==null&&"get"in J&&typeof J.get==="function"&&"lc"in J&&typeof J.lc==="number"}function Sf(J,q,X){let Y=q[J],{fetchOptions:K,query:B,...$}=X||{};if(Y)return Y;if(K?.method)return K.method;if($&&Object.keys($).length>0)return"POST";return"GET"}function AD(J,q,X,Y,K){function B($=[]){return new Proxy(function(){},{get(F,V){if(typeof V!=="string")return;if(V==="then"||V==="catch"||V==="finally")return;let N=[...$,V],U=J;for(let L of N)if(U&&typeof U==="object"&&L in U)U=U[L];else{U=void 0;break}if(typeof U==="function")return U;if(PD(U))return U;return B(N)},apply:async(F,V,N)=>{let U="/"+$.map((v)=>v.replace(/[A-Z]/g,(E)=>`-${E.toLowerCase()}`)).join("/"),L=N[0]||{},P=N[1]||{},{query:A,fetchOptions:R,...O}=L,j={...P,...R},k=Sf(U,X,L);return await q(U,{...j,body:k==="GET"?void 0:{...O,...j?.body||{}},query:A||j?.query,method:k,async onSuccess(v){if(await j?.onSuccess?.(v),!K||j.disableSignal)return;let E=K.filter((e)=>e.matcher(U));if(!E.length)return;let x=new Set;for(let e of E){let y=Y[e.signal];if(!y)return;if(x.has(e.signal))continue;x.add(e.signal);let J0=y.get();setTimeout(()=>{y.set(!J0)},10)}}})}})}return B()}function gU(J){let{pluginPathMethods:q,pluginsActions:X,pluginsAtoms:Y,$fetch:K,atomListeners:B,$store:$}=MD(J),F={};for(let[V,N]of Object.entries(Y))F[`use${jU(V)}`]=N;return AD({...X,...F,$fetch:K,$store:$},K,q,Y,B)}var EU=gU({baseURL:`${N8.get()}/api/auth`,fetchOptions:{async onRequest(J){try{let q=await fetch("/api/auth/token"),{token:X}=await q.json();if(X)J.options.headers={...J.options.headers,Authorization:`Bearer ${X}`}}catch(q){console.error("[AUTH] Failed to fetch token for request",q)}}}});var a0=H0(l0(),1);function CD(){let J=h0(nQ),q=h0(cQ),X=h0(S4),Y=h0(Y9),K=h0(LU),B=h0(oT),$=h0(c9),F=h0(N8),N=($?.subscription==="pro"||$?.subscription==="lifetime")&&!$?.githubScopeGranted;return a0.jsxDEV("aside",{className:"lg:col-span-3 h-full flex flex-col overflow-hidden rounded-2xl border border-zinc-800/50 bg-zinc-900/30 backdrop-blur-sm",children:[N&&a0.jsxDEV("div",{className:"mx-2 mt-2 mb-1 p-3 bg-rust/10 border border-rust/20 rounded-xl animate-in fade-in slide-in-from-top-2 duration-500",children:[a0.jsxDEV("div",{className:"flex items-center gap-2 mb-1",children:[a0.jsxDEV("div",{className:"w-1.5 h-1.5 rounded-full bg-rust animate-pulse"},void 0,!1,void 0,this),a0.jsxDEV("p",{className:"text-[10px] text-rust-light font-black uppercase tracking-wider",children:"Solution Sync Inactive"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),a0.jsxDEV("p",{className:"text-[11px] text-zinc-400 mb-2 leading-tight",children:"Backup your solutions to a private GitHub repo. Grant repository permissions to enable."},void 0,!1,void 0,this),a0.jsxDEV("button",{onClick:async()=>{try{await EU.linkSocial({provider:"github",callbackURL:window.location.origin}),setTimeout(()=>location.reload(),1000)}catch(U){console.error("Failed to link social account",U),await EU.signIn.social({provider:"github",callbackURL:window.location.origin})}},className:"w-full text-[10px] font-bold bg-rust text-white px-2 py-1.5 rounded-lg hover:brightness-110 active:scale-[0.98] transition-all",children:"Enable GitHub Sync"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),a0.jsxDEV("div",{className:"flex items-center gap-3 bg-zinc-900/50 rounded-full px-4 py-2 border border-zinc-800/50",children:[a0.jsxDEV("div",{className:"h-1.5 w-full bg-zinc-800 rounded-full overflow-hidden",children:a0.jsxDEV("div",{className:"h-full bg-gradient-to-r from-rust to-orange-400 transition-all duration-700 ease-out",style:{width:`${B}%`}},void 0,!1,void 0,this)},void 0,!1,void 0,this),a0.jsxDEV("span",{className:"text-xs font-bold text-zinc-300 tabular-nums",children:[B,"%"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),a0.jsxDEV(i3,{value:K,onValueChange:(U)=>dT(U),className:"flex flex-col h-full",children:[a0.jsxDEV("div",{className:"p-2 border-b border-zinc-800/50 bg-zinc-900/50",children:a0.jsxDEV(a3,{className:"w-full bg-zinc-800/50",children:[a0.jsxDEV(L8,{value:"learning",className:"flex-1 gap-2 data-[state=active]:bg-zinc-700 py-2",children:[a0.jsxDEV(W8,{className:"w-3.5 h-3.5"},void 0,!1,void 0,this),"Learning Path"]},void 0,!0,void 0,this),a0.jsxDEV(L8,{value:"practice",className:"flex-1 gap-2 data-[state=active]:bg-rust py-2",children:[a0.jsxDEV(i4,{className:"w-3.5 h-3.5"},void 0,!1,void 0,this),"Practice"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),a0.jsxDEV(r6,{value:"learning",className:"flex-1 overflow-hidden m-0 text-zinc-100",children:a0.jsxDEV(q9,{className:"h-full px-2 py-2",children:q.loading&&Object.keys(J).length===0?a0.jsxDEV("div",{className:"space-y-4 p-2",children:[a0.jsxDEV("div",{className:"h-10 bg-zinc-800/50 rounded-xl animate-pulse"},void 0,!1,void 0,this),a0.jsxDEV("div",{className:"h-10 bg-zinc-800/50 rounded-xl animate-pulse"},void 0,!1,void 0,this),a0.jsxDEV("div",{className:"h-10 bg-zinc-800/50 rounded-xl animate-pulse"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):a0.jsxDEV(WU,{type:"single",collapsible:!0,className:"w-full space-y-1",children:Object.keys(J).filter((U)=>U!=="practice").map((U)=>{let L=J[U]||[],P=L.filter((R)=>Y[R.id]==="pass").length,A=P===L.length&&L.length>0;return a0.jsxDEV(GU,{value:U,className:"border-none",children:[a0.jsxDEV(BU,{className:"hover:no-underline py-3 px-3 rounded-xl hover:bg-zinc-800/30 text-zinc-300 text-sm transition-colors [&[data-state=open]]:bg-zinc-800/50",children:[a0.jsxDEV("div",{className:"flex items-center gap-3 truncate",children:[A?a0.jsxDEV("div",{className:"w-5 h-5 rounded-full bg-emerald-500/20 flex items-center justify-center",children:a0.jsxDEV(e8,{className:"w-3 h-3 text-emerald-400"},void 0,!1,void 0,this)},void 0,!1,void 0,this):a0.jsxDEV("div",{className:"w-5 h-5 rounded-full bg-zinc-800 flex items-center justify-center",children:a0.jsxDEV("span",{className:"text-[8px] font-bold text-zinc-500",children:P},void 0,!1,void 0,this)},void 0,!1,void 0,this),a0.jsxDEV("span",{className:`font-semibold truncate ${A?"text-zinc-500":""}`,children:L[0]?.moduleTitle||U.replace(/^\d+_/,"").replace(/_/g," ")},void 0,!1,void 0,this)]},void 0,!0,void 0,this),a0.jsxDEV(Z2,{variant:A?"outline":"secondary",className:`ml-auto mr-2 text-[10px] h-5 px-2 ${A?"text-emerald-400 border-emerald-500/30 bg-emerald-500/10":""}`,children:[P,"/",L.length]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),a0.jsxDEV($U,{className:"pb-2 pt-1 space-y-1",children:L.map((R)=>{let O=Y[R.id],j=X?.id===R.id;return a0.jsxDEV("button",{onClick:()=>BZ(R),className:`cursor-pointer w-full text-left pl-10 pr-3 py-2.5 text-xs rounded-lg transition-all flex items-center gap-2 group
289
+ `).replace(/\\"/g,'"').replace(/\\\\/g,"\\").replace(/\\t/g,"\t").replace(/\\r/g,"\r"),z2.set(Y.trim()),n3("ai")}catch(Y){z2.set(`Error: ${Y.message||"Failed to get explanation."}`)}finally{M8.set(!1)}},nQ=R4(cQ,(J)=>J.data||{}),AU=R4(cT,(J)=>J.data||null),nT=R4(iQ,(J)=>J.data?.markdown||null),sT=R4(MU,(J)=>J.data||null),CU=R4(nQ,(J)=>Object.values(J).reduce((q,X)=>q+(Array.isArray(X)?X.length:0),0)),bU=R4(Y9,(J)=>Object.values(J).filter((q)=>q==="pass").length),oT=R4([CU,bU],(J,q)=>J>0?Math.round(q/J*100):0);var tT=(J)=>PU.set(J);var BZ=(J)=>{if(S4.set(J),z2.set(null),M8.set(!1),!J)n6.set(""),rQ.set("")};var OU=()=>cT.revalidate(),eT=async()=>{let J=S4.get();if(!J)return;s3.set(!0);try{let X=await(await fetch("/api/exercises/run",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({exerciseName:J.exerciseName,id:J.id,module:J.module})})).json();n6.set(X.rawOutput||X.output||""),rQ.set(X.friendlyOutput||"");let Y=X.success?"pass":"fail";if(Y9.setKey(J.id,Y),X.success)if(X.progress)fT("/api/progress",X.progress);else OU()}catch(q){n6.set("Failed to run tests."),Y9.setKey(J.id,"fail")}finally{s3.set(!1)}};AU.subscribe((J)=>{if(J&&J.exercises){let q={};for(let[X,Y]of Object.entries(J.exercises))q[X]=Y.status;Y9.set(q)}});var lY=Symbol.for("better-auth:broadcast-channel"),mm=()=>Math.floor(Date.now()/1000),fm=class{listeners=new Set;name;constructor(J="better-auth.message"){this.name=J}subscribe(J){return this.listeners.add(J),()=>{this.listeners.delete(J)}}post(J){if(typeof window>"u")return;try{localStorage.setItem(this.name,JSON.stringify({...J,timestamp:mm()}))}catch{}}setup(){if(typeof window>"u"||typeof window.addEventListener>"u")return()=>{};let J=(q)=>{if(q.key!==this.name)return;let X=JSON.parse(q.newValue??"{}");if(X?.event!=="session"||!X?.data)return;this.listeners.forEach((Y)=>Y(X))};return window.addEventListener("storage",J),()=>{window.removeEventListener("storage",J)}}};function sQ(J="better-auth.message"){if(!globalThis[lY])globalThis[lY]=new fm(J);return globalThis[lY]}var dY=Symbol.for("better-auth:focus-manager"),um=class{listeners=new Set;subscribe(J){return this.listeners.add(J),()=>{this.listeners.delete(J)}}setFocused(J){this.listeners.forEach((q)=>q(J))}setup(){if(typeof window>"u"||typeof document>"u"||typeof window.addEventListener>"u")return()=>{};let J=()=>{if(document.visibilityState==="visible")this.setFocused(!0)};return document.addEventListener("visibilitychange",J,!1),()=>{document.removeEventListener("visibilitychange",J,!1)}}};function IU(){if(!globalThis[dY])globalThis[dY]=new um;return globalThis[dY]}var cY=Symbol.for("better-auth:online-manager"),pm=class{listeners=new Set;isOnline=typeof navigator<"u"?navigator.onLine:!0;subscribe(J){return this.listeners.add(J),()=>{this.listeners.delete(J)}}setOnline(J){this.isOnline=J,this.listeners.forEach((q)=>q(J))}setup(){if(typeof window>"u"||typeof window.addEventListener>"u")return()=>{};let J=()=>this.setOnline(!0),q=()=>this.setOnline(!1);return window.addEventListener("online",J,!1),window.addEventListener("offline",q,!1),()=>{window.removeEventListener("online",J,!1),window.removeEventListener("offline",q,!1)}}};function iY(){if(!globalThis[cY])globalThis[cY]=new pm;return globalThis[cY]}var oQ=Symbol("clean");var P8=[],s6=0,aY=4,lm=0,tQ=(J)=>{let q=[],X={get(){if(!X.lc)X.listen(()=>{})();return X.value},lc:0,listen(Y){return X.lc=q.push(Y),()=>{for(let B=s6+aY;B<P8.length;)if(P8[B]===Y)P8.splice(B,aY);else B+=aY;let K=q.indexOf(Y);if(~K){if(q.splice(K,1),!--X.lc)X.off()}}},notify(Y,K){lm++;let B=!P8.length;for(let $ of q)P8.push($,X.value,Y,K);if(B){for(s6=0;s6<P8.length;s6+=aY)P8[s6](P8[s6+1],P8[s6+2],P8[s6+3]);P8.length=0}},off(){},set(Y){let K=X.value;if(K!==Y)X.value=Y,X.notify(K)},subscribe(Y){let K=X.listen(Y);return Y(X.value),K},value:J};return X[oQ]=()=>{q=[],X.lc=0,X.off()},X};var dm=5,o3=6,rY=10,cm=(J,q,X,Y)=>{if(J.events=J.events||{},!J.events[X+rY])J.events[X+rY]=Y((K)=>{J.events[X].reduceRight((B,$)=>($(B),B),{shared:{},...K})});return J.events[X]=J.events[X]||[],J.events[X].push(q),()=>{let K=J.events[X],B=K.indexOf(q);if(K.splice(B,1),!K.length)delete J.events[X],J.events[X+rY](),delete J.events[X+rY]}};var ZD=1000,eQ=(J,q)=>{return cm(J,(Y)=>{let K=q(Y);if(K)J.events[o3].push(K)},dm,(Y)=>{let K=J.listen;J.listen=(...$)=>{if(!J.lc&&!J.active)J.active=!0,Y();return K(...$)};let B=J.off;J.events[o3]=[],J.off=()=>{B(),setTimeout(()=>{if(J.active&&!J.lc){J.active=!1;for(let $ of J.events[o3])$();J.events[o3]=[]}},ZD)};{let $=J[oQ];J[oQ]=()=>{for(let F of J.events[o3])F();J.events[o3]=[],J.active=!1,$()}}return()=>{J.listen=K,J.off=B}})};var im=()=>typeof window>"u",TU=(J,q,X,Y)=>{let K=tQ({data:null,error:null,isPending:!0,isRefetching:!1,refetch:(F)=>B(F)}),B=async(F)=>{return new Promise((V)=>{let N=typeof Y==="function"?Y({data:K.get().data,error:K.get().error,isPending:K.get().isPending}):Y;X(q,{...N,query:{...N?.query,...F?.query},async onSuccess(U){K.set({data:U.data,error:null,isPending:!1,isRefetching:!1,refetch:K.value.refetch}),await N?.onSuccess?.(U)},async onError(U){let{request:L}=U,P=typeof L.retry==="number"?L.retry:L.retry?.attempts,A=L.retryAttempt||0;if(P&&A<P)return;K.set({error:U.error,data:null,isPending:!1,isRefetching:!1,refetch:K.value.refetch}),await N?.onError?.(U)},async onRequest(U){let L=K.get();K.set({isPending:L.data===null,data:L.data,error:null,isRefetching:!0,refetch:K.value.refetch}),await N?.onRequest?.(U)}}).catch((U)=>{K.set({error:U,data:null,isPending:!1,isRefetching:!1,refetch:K.value.refetch})}).finally(()=>{V(void 0)})})};J=Array.isArray(J)?J:[J];let $=!1;for(let F of J)F.subscribe(async()=>{if(im())return;if($)await B();else eQ(K,()=>{let V=setTimeout(async()=>{if(!$)await B(),$=!0},0);return()=>{K.off(),F.off(),clearTimeout(V)}})});return K};var t3=()=>Math.floor(Date.now()/1000),am=5;function DU(J){let{sessionAtom:q,sessionSignal:X,$fetch:Y,options:K={}}=J,B=K.sessionOptions?.refetchInterval??0,$=K.sessionOptions?.refetchOnWindowFocus??!0,F=K.sessionOptions?.refetchWhenOffline??!1,V={lastSync:0,lastSessionRequest:0,cachedSession:void 0},N=()=>{return F||iY().isOnline},U=(v)=>{if(!N())return;if(v?.event==="storage"){V.lastSync=t3(),X.set(!X.get());return}let E=q.get();if(v?.event==="poll"){V.lastSessionRequest=t3(),Y("/get-session").then((x)=>{if(x.error)q.set({...E,data:null,error:x.error});else q.set({...E,data:x.data,error:null});V.lastSync=t3(),X.set(!X.get())}).catch(()=>{});return}if(v?.event==="visibilitychange"){if(t3()-V.lastSessionRequest<am)return;V.lastSessionRequest=t3()}if(E?.data===null||E?.data===void 0||v?.event==="visibilitychange")V.lastSync=t3(),X.set(!X.get())},L=(v)=>{sQ().post({event:"session",data:{trigger:v},clientId:Math.random().toString(36).substring(7)})},P=()=>{if(B&&B>0)V.pollInterval=setInterval(()=>{if(q.get()?.data)U({event:"poll"})},B*1000)},A=()=>{V.unsubscribeBroadcast=sQ().subscribe(()=>{U({event:"storage"})})},R=()=>{if(!$)return;V.unsubscribeFocus=IU().subscribe(()=>{U({event:"visibilitychange"})})},O=()=>{V.unsubscribeOnline=iY().subscribe((v)=>{if(v)U({event:"visibilitychange"})})};return{init:()=>{P(),A(),R(),O(),sQ().setup(),IU().setup(),iY().setup()},cleanup:()=>{if(V.pollInterval)clearInterval(V.pollInterval),V.pollInterval=void 0;if(V.unsubscribeBroadcast)V.unsubscribeBroadcast(),V.unsubscribeBroadcast=void 0;if(V.unsubscribeFocus)V.unsubscribeFocus(),V.unsubscribeFocus=void 0;if(V.unsubscribeOnline)V.unsubscribeOnline(),V.unsubscribeOnline=void 0;V.lastSync=0,V.lastSessionRequest=0,V.cachedSession=void 0},triggerRefetch:U,broadcastSessionUpdate:L}}var nY=Object.create(null),Zq=(J)=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(J?nY:globalThis),y4=new Proxy(nY,{get(J,q){return Zq()[q]??nY[q]},has(J,q){return q in Zq()||q in nY},set(J,q,X){let Y=Zq(!0);return Y[q]=X,!0},deleteProperty(J,q){if(!q)return!1;let X=Zq(!0);return delete X[q],!0},ownKeys(){let J=Zq(!0);return Object.keys(J)}});var rm=typeof process<"u"&&process.env&&"development"||"";function p1(J,q){if(typeof process<"u"&&process.env)return process.env[J]??q;if(typeof Deno<"u")return Deno.env.get(J)??q;if(typeof Bun<"u")return Bun.env[J]??q;return q}var nm=Object.freeze({get BETTER_AUTH_SECRET(){return p1("BETTER_AUTH_SECRET")},get AUTH_SECRET(){return p1("AUTH_SECRET")},get BETTER_AUTH_TELEMETRY(){return p1("BETTER_AUTH_TELEMETRY")},get BETTER_AUTH_TELEMETRY_ID(){return p1("BETTER_AUTH_TELEMETRY_ID")},get NODE_ENV(){return p1("NODE_ENV","development")},get PACKAGE_VERSION(){return p1("PACKAGE_VERSION","0.0.0")},get BETTER_AUTH_TELEMETRY_ENDPOINT(){return p1("BETTER_AUTH_TELEMETRY_ENDPOINT","")}});var zq=1,o5=4,W9=8,A2=24,zD={eterm:o5,cons25:o5,console:o5,cygwin:o5,dtterm:o5,gnome:o5,hurd:o5,jfbterm:o5,konsole:o5,kterm:o5,mlterm:o5,mosh:A2,putty:o5,st:o5,"rxvt-unicode-24bit":A2,terminator:A2,"xterm-kitty":A2},sm=new Map(Object.entries({APPVEYOR:W9,BUILDKITE:W9,CIRCLECI:A2,DRONE:W9,GITEA_ACTIONS:A2,GITHUB_ACTIONS:A2,GITLAB_CI:W9,TRAVIS:W9})),om=[/ansi/,/color/,/linux/,/direct/,/^con[0-9]*x[0-9]/,/^rxvt/,/^screen/,/^xterm/,/^vt100/,/^vt220/];function _U(){if(p1("FORCE_COLOR")!==void 0)switch(p1("FORCE_COLOR")){case"":case"1":case"true":return o5;case"2":return W9;case"3":return A2;default:return zq}if(p1("NODE_DISABLE_COLORS")!==void 0&&p1("NODE_DISABLE_COLORS")!==""||p1("NO_COLOR")!==void 0&&p1("NO_COLOR")!==""||p1("TERM")==="dumb")return zq;if(p1("TMUX"))return A2;if("TF_BUILD"in y4&&"AGENT_NAME"in y4)return o5;if("CI"in y4){for(let{0:J,1:q}of sm)if(J in y4)return q;if(p1("CI_NAME")==="codeship")return W9;return zq}if("TEAMCITY_VERSION"in y4)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.exec(p1("TEAMCITY_VERSION"))!==null?o5:zq;switch(p1("TERM_PROGRAM")){case"iTerm.app":if(!p1("TERM_PROGRAM_VERSION")||/^[0-2]\./.exec(p1("TERM_PROGRAM_VERSION"))!==null)return W9;return A2;case"HyperTerm":case"MacTerm":return A2;case"Apple_Terminal":return W9}if(p1("COLORTERM")==="truecolor"||p1("COLORTERM")==="24bit")return A2;if(p1("TERM")){if(/truecolor/.exec(p1("TERM"))!==null)return A2;if(/^xterm-256/.exec(p1("TERM"))!==null)return W9;let J=p1("TERM").toLowerCase();if(zD[J])return zD[J];if(om.some((q)=>q.exec(J)!==null))return o5}if(p1("COLORTERM"))return o5;return zq}var A8={reset:"\x1B[0m",bright:"\x1B[1m",dim:"\x1B[2m",undim:"\x1B[22m",underscore:"\x1B[4m",blink:"\x1B[5m",reverse:"\x1B[7m",hidden:"\x1B[8m",fg:{black:"\x1B[30m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",white:"\x1B[37m"},bg:{black:"\x1B[40m",red:"\x1B[41m",green:"\x1B[42m",yellow:"\x1B[43m",blue:"\x1B[44m",magenta:"\x1B[45m",cyan:"\x1B[46m",white:"\x1B[47m"}},sY=["debug","info","success","warn","error"];function JD(J,q){return sY.indexOf(q)>=sY.indexOf(J)}var tm={info:A8.fg.blue,success:A8.fg.green,warn:A8.fg.yellow,error:A8.fg.red,debug:A8.fg.magenta},em=(J,q,X)=>{let Y=new Date().toISOString();if(X)return`${A8.dim}${Y}${A8.reset} ${tm[J]}${J.toUpperCase()}${A8.reset} ${A8.bright}[Better Auth]:${A8.reset} ${q}`;return`${Y} ${J.toUpperCase()} [Better Auth]: ${q}`},QD=(J)=>{let q=J?.disabled!==!0,X=J?.level??"warn",Y=J?.disableColors!==void 0?!J.disableColors:_U()!==1,K=(B,$,F=[])=>{if(!q||!JD(X,B))return;let V=em(B,$,Y);if(!J||typeof J.log!=="function"){if(B==="error")console.error(V,...F);else if(B==="warn")console.warn(V,...F);else console.log(V,...F);return}J.log(B==="success"?"info":B,$,...F)};return{...Object.fromEntries(sY.map((B)=>[B,(...[$,...F])=>K(B,$,F)])),get level(){return X}}},qD=QD();function RU(J){return J}function jU(J){return J.charAt(0).toUpperCase()+J.slice(1)}var Zf=RU({USER_NOT_FOUND:"User not found",FAILED_TO_CREATE_USER:"Failed to create user",FAILED_TO_CREATE_SESSION:"Failed to create session",FAILED_TO_UPDATE_USER:"Failed to update user",FAILED_TO_GET_SESSION:"Failed to get session",INVALID_PASSWORD:"Invalid password",INVALID_EMAIL:"Invalid email",INVALID_EMAIL_OR_PASSWORD:"Invalid email or password",SOCIAL_ACCOUNT_ALREADY_LINKED:"Social account already linked",PROVIDER_NOT_FOUND:"Provider not found",INVALID_TOKEN:"Invalid token",ID_TOKEN_NOT_SUPPORTED:"id_token not supported",FAILED_TO_GET_USER_INFO:"Failed to get user info",USER_EMAIL_NOT_FOUND:"User email not found",EMAIL_NOT_VERIFIED:"Email not verified",PASSWORD_TOO_SHORT:"Password too short",PASSWORD_TOO_LONG:"Password too long",USER_ALREADY_EXISTS:"User already exists.",USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:"User already exists. Use another email.",EMAIL_CAN_NOT_BE_UPDATED:"Email can not be updated",CREDENTIAL_ACCOUNT_NOT_FOUND:"Credential account not found",SESSION_EXPIRED:"Session expired. Re-authenticate to perform this action.",FAILED_TO_UNLINK_LAST_ACCOUNT:"You can't unlink your last account",ACCOUNT_NOT_FOUND:"Account not found",USER_ALREADY_HAS_PASSWORD:"User already has a password. Provide that to delete the account.",CROSS_SITE_NAVIGATION_LOGIN_BLOCKED:"Cross-site navigation login blocked. This request appears to be a CSRF attack.",VERIFICATION_EMAIL_NOT_ENABLED:"Verification email isn't enabled",EMAIL_ALREADY_VERIFIED:"Email is already verified",EMAIL_MISMATCH:"Email mismatch",SESSION_NOT_FRESH:"Session is not fresh",LINKED_ACCOUNT_ALREADY_EXISTS:"Linked account already exists",INVALID_ORIGIN:"Invalid origin",INVALID_CALLBACK_URL:"Invalid callbackURL",INVALID_REDIRECT_URL:"Invalid redirectURL",INVALID_ERROR_CALLBACK_URL:"Invalid errorCallbackURL",INVALID_NEW_USER_CALLBACK_URL:"Invalid newUserCallbackURL",MISSING_OR_NULL_ORIGIN:"Missing or null Origin",CALLBACK_URL_REQUIRED:"callbackURL is required",FAILED_TO_CREATE_VERIFICATION:"Unable to create verification",FIELD_NOT_ALLOWED:"Field not allowed to be set",ASYNC_VALIDATION_NOT_SUPPORTED:"Async validation is not supported",VALIDATION_ERROR:"Validation Error",MISSING_FIELD:"Field is required"});var e3=class extends Error{constructor(J,q){super(J,q);this.name="BetterAuthError",this.message=J,this.stack=""}};function zf(J){try{return(new URL(J).pathname.replace(/\/+$/,"")||"/")!=="/"}catch{throw new e3(`Invalid base URL: ${J}. Please provide a valid base URL.`)}}function Jf(J){try{let q=new URL(J);if(q.protocol!=="http:"&&q.protocol!=="https:")throw new e3(`Invalid base URL: ${J}. URL must include 'http://' or 'https://'`)}catch(q){if(q instanceof e3)throw q;throw new e3(`Invalid base URL: ${J}. Please provide a valid base URL.`,{cause:q})}}function Jq(J,q="/api/auth"){if(Jf(J),zf(J))return J;let X=J.replace(/\/+$/,"");if(!q||q==="/")return X;return q=q.startsWith("/")?q:`/${q}`,`${X}${q}`}function XD(J,q){if(!J||J.trim()==="")return!1;if(q==="proto")return J==="http"||J==="https";if(q==="host"){if([/\.\./,/\0/,/[\s]/,/^[.]/,/[<>'"]/,/javascript:/i,/file:/i,/data:/i].some((X)=>X.test(J)))return!1;return/^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*(:[0-9]{1,5})?$/.test(J)||/^(\d{1,3}\.){3}\d{1,3}(:[0-9]{1,5})?$/.test(J)||/^\[[0-9a-fA-F:]+\](:[0-9]{1,5})?$/.test(J)||/^localhost(:[0-9]{1,5})?$/i.test(J)}return!1}function HD(J,q,X,Y,K){if(J)return Jq(J,q);if(Y!==!1){let F=y4.BETTER_AUTH_URL||y4.NEXT_PUBLIC_BETTER_AUTH_URL||y4.PUBLIC_BETTER_AUTH_URL||y4.NUXT_PUBLIC_BETTER_AUTH_URL||y4.NUXT_PUBLIC_AUTH_URL||(y4.BASE_URL!=="/"?y4.BASE_URL:void 0);if(F)return Jq(F,q)}let B=X?.headers.get("x-forwarded-host"),$=X?.headers.get("x-forwarded-proto");if(B&&$&&K){if(XD($,"proto")&&XD(B,"host"))try{return Jq(`${$}://${B}`,q)}catch(F){}}if(X){let F=Qf(X.url);if(!F)throw new e3("Could not get origin from request. Please provide a valid base URL.");return Jq(F,q)}if(typeof window<"u"&&window.location)return Jq(window.location.origin,q)}function Qf(J){try{let q=new URL(J);return q.origin==="null"?null:q.origin}catch{return null}}var YD={id:"redirect",name:"Redirect",hooks:{onSuccess(J){if(J.data?.url&&J.data?.redirect){if(typeof window<"u"&&window.location){if(window.location)try{window.location.href=J.data.url}catch{}}}}}};var qf={proto:/"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/,constructor:/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/,protoShort:/"__proto__"\s*:/,constructorShort:/"constructor"\s*:/},Xf=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/,WD={true:!0,false:!1,null:null,undefined:void 0,nan:NaN,infinity:Number.POSITIVE_INFINITY,"-infinity":Number.NEGATIVE_INFINITY},Hf=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,7}))?(?:Z|([+-])(\d{2}):(\d{2}))$/;function Yf(J){return J instanceof Date&&!isNaN(J.getTime())}function Wf(J){let q=Hf.exec(J);if(!q)return null;let[,X,Y,K,B,$,F,V,N,U,L]=q,P=new Date(Date.UTC(parseInt(X,10),parseInt(Y,10)-1,parseInt(K,10),parseInt(B,10),parseInt($,10),parseInt(F,10),V?parseInt(V.padEnd(3,"0"),10):0));if(N){let A=(parseInt(U,10)*60+parseInt(L,10))*(N==="+"?-1:1);P.setUTCMinutes(P.getUTCMinutes()+A)}return Yf(P)?P:null}function Kf(J,q={}){let{strict:X=!1,warnings:Y=!1,reviver:K,parseDates:B=!0}=q;if(typeof J!=="string")return J;let $=J.trim();if($.length>0&&$[0]==='"'&&$.endsWith('"')&&!$.slice(1,-1).includes('"'))return $.slice(1,-1);let F=$.toLowerCase();if(F.length<=9&&F in WD)return WD[F];if(!Xf.test($)){if(X)throw SyntaxError("[better-json] Invalid JSON");return J}if(Object.entries(qf).some(([V,N])=>{let U=N.test($);if(U&&Y)console.warn(`[better-json] Detected potential prototype pollution attempt using ${V} pattern`);return U})&&X)throw Error("[better-json] Potential prototype pollution attempt detected");try{return JSON.parse($,(N,U)=>{if(N==="__proto__"||N==="constructor"&&U&&typeof U==="object"&&"prototype"in U){if(Y)console.warn(`[better-json] Dropping "${N}" key to prevent prototype pollution`);return}if(B&&typeof U==="string"){let L=Wf(U);if(L)return L}return K?K(N,U):U})}catch(V){if(X)throw V;return J}}function KD(J,q={strict:!0}){return Kf(J,q)}function GD(J,q){let X=tQ(!1),Y=TU(X,"/get-session",J,{method:"GET"});return eQ(Y,()=>{let K=DU({sessionAtom:Y,sessionSignal:X,$fetch:J,options:q});return K.init(),()=>{K.cleanup()}}),{session:Y,$sessionSignal:X}}function kU(J){if(J===null||typeof J!=="object")return!1;let q=Object.getPrototypeOf(J);if(q!==null&&q!==Object.prototype&&Object.getPrototypeOf(q)!==null)return!1;if(Symbol.iterator in J)return!1;if(Symbol.toStringTag in J)return Object.prototype.toString.call(J)==="[object Module]";return!0}function SU(J,q,X=".",Y){if(!kU(q))return SU(J,{},X,Y);let K=Object.assign({},q);for(let B in J){if(B==="__proto__"||B==="constructor")continue;let $=J[B];if($===null||$===void 0)continue;if(Y&&Y(K,B,$,X))continue;if(Array.isArray($)&&Array.isArray(K[B]))K[B]=[...$,...K[B]];else if(kU($)&&kU(K[B]))K[B]=SU($,K[B],(X?`${X}.`:"")+B.toString(),Y);else K[B]=$}return K}function yU(J){return(...q)=>q.reduce((X,Y)=>SU(X,Y,"",J),{})}var BD=yU(),_50=yU((J,q,X)=>{if(J[q]!==void 0&&typeof X==="function")return J[q]=X(J[q]),!0}),R50=yU((J,q,X)=>{if(Array.isArray(J[q])&&typeof X==="function")return J[q]=X(J[q]),!0});var{defineProperty:Gf,defineProperties:Bf,getOwnPropertyDescriptors:$f,getOwnPropertySymbols:$D}=Object,Ff=Object.prototype.hasOwnProperty,Uf=Object.prototype.propertyIsEnumerable,FD=(J,q,X)=>(q in J)?Gf(J,q,{enumerable:!0,configurable:!0,writable:!0,value:X}):J[q]=X,C8=(J,q)=>{for(var X in q||(q={}))if(Ff.call(q,X))FD(J,X,q[X]);if($D){for(var X of $D(q))if(Uf.call(q,X))FD(J,X,q[X])}return J},K9=(J,q)=>Bf(J,$f(q)),wf=class extends Error{constructor(J,q,X){super(q||J.toString(),{cause:X});this.status=J,this.statusText=q,this.error=X,Error.captureStackTrace(this,this.constructor)}},Lf=async(J,q)=>{var X,Y,K,B,$,F;let V=q||{},N={onRequest:[q==null?void 0:q.onRequest],onResponse:[q==null?void 0:q.onResponse],onSuccess:[q==null?void 0:q.onSuccess],onError:[q==null?void 0:q.onError],onRetry:[q==null?void 0:q.onRetry]};if(!q||!(q==null?void 0:q.plugins))return{url:J,options:V,hooks:N};for(let U of(q==null?void 0:q.plugins)||[]){if(U.init){let L=await((X=U.init)==null?void 0:X.call(U,J.toString(),q));V=L.options||V,J=L.url}N.onRequest.push((Y=U.hooks)==null?void 0:Y.onRequest),N.onResponse.push((K=U.hooks)==null?void 0:K.onResponse),N.onSuccess.push((B=U.hooks)==null?void 0:B.onSuccess),N.onError.push(($=U.hooks)==null?void 0:$.onError),N.onRetry.push((F=U.hooks)==null?void 0:F.onRetry)}return{url:J,options:V,hooks:N}},UD=class{constructor(J){this.options=J}shouldAttemptRetry(J,q){if(this.options.shouldRetry)return Promise.resolve(J<this.options.attempts&&this.options.shouldRetry(q));return Promise.resolve(J<this.options.attempts)}getDelay(){return this.options.delay}},Vf=class{constructor(J){this.options=J}shouldAttemptRetry(J,q){if(this.options.shouldRetry)return Promise.resolve(J<this.options.attempts&&this.options.shouldRetry(q));return Promise.resolve(J<this.options.attempts)}getDelay(J){return Math.min(this.options.maxDelay,this.options.baseDelay*2**J)}};function Nf(J){if(typeof J==="number")return new UD({type:"linear",attempts:J,delay:1000});switch(J.type){case"linear":return new UD(J);case"exponential":return new Vf(J);default:throw Error("Invalid retry strategy")}}var Mf=async(J)=>{let q={},X=async(Y)=>typeof Y==="function"?await Y():Y;if(J==null?void 0:J.auth){if(J.auth.type==="Bearer"){let Y=await X(J.auth.token);if(!Y)return q;q.authorization=`Bearer ${Y}`}else if(J.auth.type==="Basic"){let[Y,K]=await Promise.all([X(J.auth.username),X(J.auth.password)]);if(!Y||!K)return q;q.authorization=`Basic ${btoa(`${Y}:${K}`)}`}else if(J.auth.type==="Custom"){let[Y,K]=await Promise.all([X(J.auth.prefix),X(J.auth.value)]);if(!K)return q;q.authorization=`${Y!=null?Y:""} ${K}`}}return q},Pf=/^application\/(?:[\w!#$%&*.^`~-]*\+)?json(;.+)?$/i;function Af(J){let q=J.headers.get("content-type"),X=new Set(["image/svg","application/xml","application/xhtml","application/html"]);if(!q)return"json";let Y=q.split(";").shift()||"";if(Pf.test(Y))return"json";if(X.has(Y)||Y.startsWith("text/"))return"text";return"blob"}function Cf(J){try{return JSON.parse(J),!0}catch(q){return!1}}function xU(J){if(J===void 0)return!1;let q=typeof J;if(q==="string"||q==="number"||q==="boolean"||q===null)return!0;if(q!=="object")return!1;if(Array.isArray(J))return!0;if(J.buffer)return!1;return J.constructor&&J.constructor.name==="Object"||typeof J.toJSON==="function"}function wD(J){try{return JSON.parse(J)}catch(q){return J}}function LD(J){return typeof J==="function"}function bf(J){if(J==null?void 0:J.customFetchImpl)return J.customFetchImpl;if(typeof globalThis<"u"&&LD(globalThis.fetch))return globalThis.fetch;if(typeof window<"u"&&LD(window.fetch))return window.fetch;throw Error("No fetch implementation found")}async function Of(J){let q=new Headers(J==null?void 0:J.headers),X=await Mf(J);for(let[Y,K]of Object.entries(X||{}))q.set(Y,K);if(!q.has("content-type")){let Y=If(J==null?void 0:J.body);if(Y)q.set("content-type",Y)}return q}function If(J){if(xU(J))return"application/json";return null}function Tf(J){if(!(J==null?void 0:J.body))return null;let q=new Headers(J==null?void 0:J.headers);if(xU(J.body)&&!q.has("content-type")){for(let[X,Y]of Object.entries(J==null?void 0:J.body))if(Y instanceof Date)J.body[X]=Y.toISOString();return JSON.stringify(J.body)}if(q.has("content-type")&&q.get("content-type")==="application/x-www-form-urlencoded"){if(xU(J.body))return new URLSearchParams(J.body).toString();return J.body}return J.body}function Df(J,q){var X;if(q==null?void 0:q.method)return q.method.toUpperCase();if(J.startsWith("@")){let Y=(X=J.split("@")[1])==null?void 0:X.split("/")[0];if(!VD.includes(Y))return(q==null?void 0:q.body)?"POST":"GET";return Y.toUpperCase()}return(q==null?void 0:q.body)?"POST":"GET"}function _f(J,q){let X;if(!(J==null?void 0:J.signal)&&(J==null?void 0:J.timeout))X=setTimeout(()=>q==null?void 0:q.abort(),J==null?void 0:J.timeout);return{abortTimeout:X,clearTimeout:()=>{if(X)clearTimeout(X)}}}var Rf=class J extends Error{constructor(q,X){super(X||JSON.stringify(q,null,2));this.issues=q,Object.setPrototypeOf(this,J.prototype)}};async function oY(J,q){let X=await J["~standard"].validate(q);if(X.issues)throw new Rf(X.issues);return X.value}var VD=["get","post","put","patch","delete"];var jf=(J)=>({id:"apply-schema",name:"Apply Schema",version:"1.0.0",async init(q,X){var Y,K,B,$;let F=((K=(Y=J.plugins)==null?void 0:Y.find((V)=>{var N;return((N=V.schema)==null?void 0:N.config)?q.startsWith(V.schema.config.baseURL||"")||q.startsWith(V.schema.config.prefix||""):!1}))==null?void 0:K.schema)||J.schema;if(F){let V=q;if((B=F.config)==null?void 0:B.prefix){if(V.startsWith(F.config.prefix)){if(V=V.replace(F.config.prefix,""),F.config.baseURL)q=q.replace(F.config.prefix,F.config.baseURL)}}if(($=F.config)==null?void 0:$.baseURL){if(V.startsWith(F.config.baseURL))V=V.replace(F.config.baseURL,"")}let N=F.schema[V];if(N){let U=K9(C8({},X),{method:N.method,output:N.output});if(!(X==null?void 0:X.disableValidation))U=K9(C8({},U),{body:N.input?await oY(N.input,X==null?void 0:X.body):X==null?void 0:X.body,params:N.params?await oY(N.params,X==null?void 0:X.params):X==null?void 0:X.params,query:N.query?await oY(N.query,X==null?void 0:X.query):X==null?void 0:X.query});return{url:q,options:U}}}return{url:q,options:X}}}),ND=(J)=>{async function q(X,Y){let K=K9(C8(C8({},J),Y),{plugins:[...(J==null?void 0:J.plugins)||[],jf(J||{}),...(Y==null?void 0:Y.plugins)||[]]});if(J==null?void 0:J.catchAllError)try{return await vU(X,K)}catch(B){return{data:null,error:{status:500,statusText:"Fetch Error",message:"Fetch related error. Captured by catchAllError option. See error property for more details.",error:B}}}return await vU(X,K)}return q};function kf(J,q){let{baseURL:X,params:Y,query:K}=q||{query:{},params:{},baseURL:""},B=J.startsWith("http")?J.split("/").slice(0,3).join("/"):X||"";if(J.startsWith("@")){let L=J.toString().split("@")[1].split("/")[0];if(VD.includes(L))J=J.replace(`@${L}/`,"/")}if(!B.endsWith("/"))B+="/";let[$,F]=J.replace(B,"").split("?"),V=new URLSearchParams(F);for(let[L,P]of Object.entries(K||{})){if(P==null)continue;let A;if(typeof P==="string")A=P;else if(Array.isArray(P)){for(let R of P)V.append(L,R);continue}else A=JSON.stringify(P);V.set(L,A)}if(Y)if(Array.isArray(Y)){let L=$.split("/").filter((P)=>P.startsWith(":"));for(let[P,A]of L.entries()){let R=Y[P];$=$.replace(A,R)}}else for(let[L,P]of Object.entries(Y))$=$.replace(`:${L}`,String(P));if($=$.split("/").map(encodeURIComponent).join("/"),$.startsWith("/"))$=$.slice(1);let N=V.toString();if(N=N.length>0?`?${N}`.replace(/\+/g,"%20"):"",!B.startsWith("http"))return`${B}${$}${N}`;return new URL(`${$}${N}`,B)}var vU=async(J,q)=>{var X,Y,K,B,$,F,V,N;let{hooks:U,url:L,options:P}=await Lf(J,q),A=bf(P),R=new AbortController,O=(X=P.signal)!=null?X:R.signal,j=kf(L,P),k=Tf(P),v=await Of(P),E=Df(L,P),x=K9(C8({},P),{url:j,headers:v,body:k,method:E,signal:O});for(let z0 of U.onRequest)if(z0){let Y0=await z0(x);if(typeof Y0==="object"&&Y0!==null)x=Y0}if("pipeTo"in x&&typeof x.pipeTo==="function"||typeof((Y=q==null?void 0:q.body)==null?void 0:Y.pipe)==="function"){if(!("duplex"in x))x.duplex="half"}let{clearTimeout:e}=_f(P,R),y=await A(x.url,x);e();let J0={response:y,request:x};for(let z0 of U.onResponse)if(z0){let Y0=await z0(K9(C8({},J0),{response:((K=q==null?void 0:q.hookOptions)==null?void 0:K.cloneResponse)?y.clone():y}));if(Y0 instanceof Response)y=Y0;else if(typeof Y0==="object"&&Y0!==null)y=Y0.response}if(y.ok){if(x.method==="HEAD")return{data:"",error:null};let Y0=Af(y),n={data:null,response:y,request:x};if(Y0==="json"||Y0==="text"){let u=await y.text(),s=(B=x.jsonParser)!=null?B:wD;n.data=await s(u)}else n.data=await y[Y0]();if(x==null?void 0:x.output){if(x.output&&!x.disableValidation)n.data=await oY(x.output,n.data)}for(let u of U.onSuccess)if(u)await u(K9(C8({},n),{response:(($=q==null?void 0:q.hookOptions)==null?void 0:$.cloneResponse)?y.clone():y}));if(q==null?void 0:q.throw)return n.data;return{data:n.data,error:null}}let Z0=(F=q==null?void 0:q.jsonParser)!=null?F:wD,$0=await y.text(),t=Cf($0),P0=t?await Z0($0):null,K0={response:y,responseText:$0,request:x,error:K9(C8({},P0),{status:y.status,statusText:y.statusText})};for(let z0 of U.onError)if(z0)await z0(K9(C8({},K0),{response:((V=q==null?void 0:q.hookOptions)==null?void 0:V.cloneResponse)?y.clone():y}));if(q==null?void 0:q.retry){let z0=Nf(q.retry),Y0=(N=q.retryAttempt)!=null?N:0;if(await z0.shouldAttemptRetry(Y0,y)){for(let u of U.onRetry)if(u)await u(J0);let n=z0.getDelay(Y0);return await new Promise((u)=>setTimeout(u,n)),await vU(J,K9(C8({},q),{retryAttempt:Y0+1}))}}if(q==null?void 0:q.throw)throw new wf(y.status,y.statusText,t?P0:$0);return{data:null,error:K9(C8({},P0),{status:y.status,statusText:y.statusText})}};var MD=(J,q)=>{let X="credentials"in Request.prototype,Y=HD(J?.baseURL,J?.basePath,void 0,q)??"/api/auth",K=J?.plugins?.flatMap((x)=>x.fetchPlugins).filter((x)=>x!==void 0)||[],B={id:"lifecycle-hooks",name:"lifecycle-hooks",hooks:{onSuccess:J?.fetchOptions?.onSuccess,onError:J?.fetchOptions?.onError,onRequest:J?.fetchOptions?.onRequest,onResponse:J?.fetchOptions?.onResponse}},{onSuccess:$,onError:F,onRequest:V,onResponse:N,...U}=J?.fetchOptions||{},L=ND({baseURL:Y,...X?{credentials:"include"}:{},method:"GET",jsonParser(x){if(!x)return null;return KD(x,{strict:!1})},customFetchImpl:fetch,...U,plugins:[B,...U.plugins||[],...J?.disableDefaultFetchPlugins?[]:[YD],...K]}),{$sessionSignal:P,session:A}=GD(L,J),R=J?.plugins||[],O={},j={$sessionSignal:P,session:A},k={"/sign-out":"POST","/revoke-sessions":"POST","/revoke-other-sessions":"POST","/delete-user":"POST"},v=[{signal:"$sessionSignal",matcher(x){return x==="/sign-out"||x==="/update-user"||x==="/sign-up/email"||x==="/sign-in/email"||x==="/delete-user"||x==="/verify-email"||x==="/revoke-sessions"||x==="/revoke-session"||x==="/change-email"}}];for(let x of R){if(x.getAtoms)Object.assign(j,x.getAtoms?.(L));if(x.pathMethods)Object.assign(k,x.pathMethods);if(x.atomListeners)v.push(...x.atomListeners)}let E={notify:(x)=>{j[x].set(!j[x].get())},listen:(x,e)=>{j[x].subscribe(e)},atoms:j};for(let x of R)if(x.getActions)O=BD(x.getActions?.(L,E,J)??{},O);return{get baseURL(){return Y},pluginsActions:O,pluginsAtoms:j,pluginPathMethods:k,atomListeners:v,$fetch:L,$store:E}};function PD(J){return typeof J==="object"&&J!==null&&"get"in J&&typeof J.get==="function"&&"lc"in J&&typeof J.lc==="number"}function Sf(J,q,X){let Y=q[J],{fetchOptions:K,query:B,...$}=X||{};if(Y)return Y;if(K?.method)return K.method;if($&&Object.keys($).length>0)return"POST";return"GET"}function AD(J,q,X,Y,K){function B($=[]){return new Proxy(function(){},{get(F,V){if(typeof V!=="string")return;if(V==="then"||V==="catch"||V==="finally")return;let N=[...$,V],U=J;for(let L of N)if(U&&typeof U==="object"&&L in U)U=U[L];else{U=void 0;break}if(typeof U==="function")return U;if(PD(U))return U;return B(N)},apply:async(F,V,N)=>{let U="/"+$.map((v)=>v.replace(/[A-Z]/g,(E)=>`-${E.toLowerCase()}`)).join("/"),L=N[0]||{},P=N[1]||{},{query:A,fetchOptions:R,...O}=L,j={...P,...R},k=Sf(U,X,L);return await q(U,{...j,body:k==="GET"?void 0:{...O,...j?.body||{}},query:A||j?.query,method:k,async onSuccess(v){if(await j?.onSuccess?.(v),!K||j.disableSignal)return;let E=K.filter((e)=>e.matcher(U));if(!E.length)return;let x=new Set;for(let e of E){let y=Y[e.signal];if(!y)return;if(x.has(e.signal))continue;x.add(e.signal);let J0=y.get();setTimeout(()=>{y.set(!J0)},10)}}})}})}return B()}function gU(J){let{pluginPathMethods:q,pluginsActions:X,pluginsAtoms:Y,$fetch:K,atomListeners:B,$store:$}=MD(J),F={};for(let[V,N]of Object.entries(Y))F[`use${jU(V)}`]=N;return AD({...X,...F,$fetch:K,$store:$},K,q,Y,B)}var EU=gU({baseURL:`${N8.get()}/api/auth`,fetchOptions:{async onRequest(J){try{let q=await fetch("/api/auth/token"),{token:X}=await q.json();if(X)J.options.headers={...J.options.headers,Authorization:`Bearer ${X}`}}catch(q){console.error("[AUTH] Failed to fetch token for request",q)}}}});var a0=H0(l0(),1);function CD(){let J=h0(nQ),q=h0(cQ),X=h0(S4),Y=h0(Y9),K=h0(LU),B=h0(oT),$=h0(c9),F=h0(N8),N=($?.subscription==="pro"||$?.subscription==="lifetime")&&!$?.githubScopeGranted;return a0.jsxDEV("aside",{className:"lg:col-span-3 h-full flex flex-col overflow-hidden rounded-2xl border border-zinc-800/50 bg-zinc-900/30 backdrop-blur-sm",children:[N&&a0.jsxDEV("div",{className:"mx-2 mt-2 mb-1 p-3 bg-rust/10 border border-rust/20 rounded-xl animate-in fade-in slide-in-from-top-2 duration-500",children:[a0.jsxDEV("div",{className:"flex items-center gap-2 mb-1",children:[a0.jsxDEV("div",{className:"w-1.5 h-1.5 rounded-full bg-rust animate-pulse"},void 0,!1,void 0,this),a0.jsxDEV("p",{className:"text-[10px] text-rust-light font-black uppercase tracking-wider",children:"Solution Sync Inactive"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),a0.jsxDEV("p",{className:"text-[11px] text-zinc-400 mb-2 leading-tight",children:"Backup your solutions to a private GitHub repo. Grant repository permissions to enable."},void 0,!1,void 0,this),a0.jsxDEV("button",{onClick:async()=>{try{await EU.linkSocial({provider:"github",callbackURL:window.location.origin})}catch(U){console.error("Failed to link GitHub account:",U),await EU.signIn.social({provider:"github",callbackURL:window.location.origin})}},className:"w-full text-[10px] font-bold bg-rust text-white px-2 py-1.5 rounded-lg hover:brightness-110 active:scale-[0.98] transition-all",children:"Enable GitHub Sync"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),a0.jsxDEV("div",{className:"flex items-center gap-3 bg-zinc-900/50 rounded-full px-4 py-2 border border-zinc-800/50",children:[a0.jsxDEV("div",{className:"h-1.5 w-full bg-zinc-800 rounded-full overflow-hidden",children:a0.jsxDEV("div",{className:"h-full bg-gradient-to-r from-rust to-orange-400 transition-all duration-700 ease-out",style:{width:`${B}%`}},void 0,!1,void 0,this)},void 0,!1,void 0,this),a0.jsxDEV("span",{className:"text-xs font-bold text-zinc-300 tabular-nums",children:[B,"%"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),a0.jsxDEV(i3,{value:K,onValueChange:(U)=>dT(U),className:"flex flex-col h-full",children:[a0.jsxDEV("div",{className:"p-2 border-b border-zinc-800/50 bg-zinc-900/50",children:a0.jsxDEV(a3,{className:"w-full bg-zinc-800/50",children:[a0.jsxDEV(L8,{value:"learning",className:"flex-1 gap-2 data-[state=active]:bg-zinc-700 py-2",children:[a0.jsxDEV(W8,{className:"w-3.5 h-3.5"},void 0,!1,void 0,this),"Learning Path"]},void 0,!0,void 0,this),a0.jsxDEV(L8,{value:"practice",className:"flex-1 gap-2 data-[state=active]:bg-rust py-2",children:[a0.jsxDEV(i4,{className:"w-3.5 h-3.5"},void 0,!1,void 0,this),"Practice"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),a0.jsxDEV(r6,{value:"learning",className:"flex-1 overflow-hidden m-0 text-zinc-100",children:a0.jsxDEV(q9,{className:"h-full px-2 py-2",children:q.loading&&Object.keys(J).length===0?a0.jsxDEV("div",{className:"space-y-4 p-2",children:[a0.jsxDEV("div",{className:"h-10 bg-zinc-800/50 rounded-xl animate-pulse"},void 0,!1,void 0,this),a0.jsxDEV("div",{className:"h-10 bg-zinc-800/50 rounded-xl animate-pulse"},void 0,!1,void 0,this),a0.jsxDEV("div",{className:"h-10 bg-zinc-800/50 rounded-xl animate-pulse"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):a0.jsxDEV(WU,{type:"single",collapsible:!0,className:"w-full space-y-1",children:Object.keys(J).filter((U)=>U!=="practice").map((U)=>{let L=J[U]||[],P=L.filter((R)=>Y[R.id]==="pass").length,A=P===L.length&&L.length>0;return a0.jsxDEV(GU,{value:U,className:"border-none",children:[a0.jsxDEV(BU,{className:"hover:no-underline py-3 px-3 rounded-xl hover:bg-zinc-800/30 text-zinc-300 text-sm transition-colors [&[data-state=open]]:bg-zinc-800/50",children:[a0.jsxDEV("div",{className:"flex items-center gap-3 truncate",children:[A?a0.jsxDEV("div",{className:"w-5 h-5 rounded-full bg-emerald-500/20 flex items-center justify-center",children:a0.jsxDEV(e8,{className:"w-3 h-3 text-emerald-400"},void 0,!1,void 0,this)},void 0,!1,void 0,this):a0.jsxDEV("div",{className:"w-5 h-5 rounded-full bg-zinc-800 flex items-center justify-center",children:a0.jsxDEV("span",{className:"text-[8px] font-bold text-zinc-500",children:P},void 0,!1,void 0,this)},void 0,!1,void 0,this),a0.jsxDEV("span",{className:`font-semibold truncate ${A?"text-zinc-500":""}`,children:L[0]?.moduleTitle||U.replace(/^\d+_/,"").replace(/_/g," ")},void 0,!1,void 0,this)]},void 0,!0,void 0,this),a0.jsxDEV(Z2,{variant:A?"outline":"secondary",className:`ml-auto mr-2 text-[10px] h-5 px-2 ${A?"text-emerald-400 border-emerald-500/30 bg-emerald-500/10":""}`,children:[P,"/",L.length]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),a0.jsxDEV($U,{className:"pb-2 pt-1 space-y-1",children:L.map((R)=>{let O=Y[R.id],j=X?.id===R.id;return a0.jsxDEV("button",{onClick:()=>BZ(R),className:`cursor-pointer w-full text-left pl-10 pr-3 py-2.5 text-xs rounded-lg transition-all flex items-center gap-2 group
290
290
  ${j?"bg-gradient-to-r from-rust/20 to-transparent text-rust font-bold border-l-2 border-rust":"text-zinc-500 hover:text-zinc-300 hover:bg-zinc-800/30 border-l-2 border-transparent"}`,children:[a0.jsxDEV(WQ,{className:`w-3 h-3 ${j?"text-rust":"text-zinc-600 group-hover:text-zinc-400"}`},void 0,!1,void 0,this),a0.jsxDEV("span",{className:"truncate flex-1",children:R.friendlyName||R.exerciseName},void 0,!1,void 0,this),O==="pass"&&a0.jsxDEV(m5,{className:"w-3.5 h-3.5 text-emerald-400"},void 0,!1,void 0,this),O==="fail"&&a0.jsxDEV(K8,{className:"w-3.5 h-3.5 text-red-400"},void 0,!1,void 0,this)]},R.id,!0,void 0,this)})},void 0,!1,void 0,this)]},U,!0,void 0,this)})},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),a0.jsxDEV(r6,{value:"practice",className:"flex-1 overflow-hidden m-0 text-zinc-100",children:a0.jsxDEV(q9,{className:"h-full px-2 py-2",children:J.practice&&Array.isArray(J.practice)?a0.jsxDEV("div",{className:"space-y-1",children:J.practice.map((U)=>{let L=Y[U.id],P=X?.id===U.id;return a0.jsxDEV("button",{onClick:()=>BZ(U),className:`w-full text-left px-3 py-3 text-xs rounded-lg transition-all flex items-center gap-3 group
291
291
  ${P?"bg-gradient-to-r from-rust/20 to-transparent text-rust font-bold border-l-2 border-rust":"text-zinc-400 hover:text-zinc-200 hover:bg-zinc-800/30 border-l-2 border-transparent"}`,children:[a0.jsxDEV(i4,{className:`w-4 h-4 ${P?"text-rust":"text-zinc-600"}`},void 0,!1,void 0,this),a0.jsxDEV("span",{className:"truncate flex-1",children:U.exerciseName},void 0,!1,void 0,this),L==="pass"&&a0.jsxDEV(m5,{className:"w-3.5 h-3.5 text-emerald-400"},void 0,!1,void 0,this),L==="fail"&&a0.jsxDEV(K8,{className:"w-3.5 h-3.5 text-red-400"},void 0,!1,void 0,this)]},U.id,!0,void 0,this)})},void 0,!1,void 0,this):a0.jsxDEV("div",{className:"text-center py-8 text-zinc-500",children:[a0.jsxDEV(i4,{className:"w-8 h-8 mx-auto mb-3 text-zinc-700"},void 0,!1,void 0,this),a0.jsxDEV("p",{className:"text-sm",children:"Nenhum exercício gerado ainda"},void 0,!1,void 0,this),a0.jsxDEV("p",{className:"text-xs text-zinc-600 mt-1",children:'Clique em "Gerar Desafio" para criar um!'},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var $Z=H0(v0(),1);var FZ=H0(l0(),1),b8=$Z.forwardRef(({className:J,...q},X)=>FZ.jsxDEV("div",{ref:X,className:y1("rounded-xl border border-zinc-800 bg-zinc-950/50 text-zinc-100 shadow",J),...q},void 0,!1,void 0,this));b8.displayName="Card";var tY=$Z.forwardRef(({className:J,...q},X)=>FZ.jsxDEV("div",{ref:X,className:y1("flex flex-col space-y-1.5 p-6",J),...q},void 0,!1,void 0,this));tY.displayName="CardHeader";var eY=$Z.forwardRef(({className:J,...q},X)=>FZ.jsxDEV("h3",{ref:X,className:y1("font-semibold leading-none tracking-tight",J),...q},void 0,!1,void 0,this));eY.displayName="CardTitle";var yf=$Z.forwardRef(({className:J,...q},X)=>FZ.jsxDEV("p",{ref:X,className:y1("text-sm text-zinc-400",J),...q},void 0,!1,void 0,this));yf.displayName="CardDescription";var ZW=$Z.forwardRef(({className:J,...q},X)=>FZ.jsxDEV("div",{ref:X,className:y1("p-6 pt-0",J),...q},void 0,!1,void 0,this));ZW.displayName="CardContent";var hU=$Z.forwardRef(({className:J,...q},X)=>FZ.jsxDEV("div",{ref:X,className:y1("flex items-center p-6 pt-0",J),...q},void 0,!1,void 0,this));hU.displayName="CardFooter";var bD=H0(v0(),1);var OD=H0(l0(),1),q5=bD.forwardRef(({className:J,variant:q="default",size:X="default",...Y},K)=>{let B={default:"bg-rust text-white hover:bg-rust-dark shadow-sm",destructive:"bg-red-900 text-red-100 hover:bg-red-800 shadow-sm",outline:"border border-zinc-700 bg-transparent shadow-sm hover:bg-zinc-800 hover:text-zinc-100",secondary:"bg-zinc-800 text-zinc-100 shadow-sm hover:bg-zinc-700",ghost:"hover:bg-zinc-800 hover:text-zinc-100",link:"text-primary underline-offset-4 hover:underline"},$={default:"h-9 px-4 py-2",sm:"h-8 rounded-md px-3 text-xs",lg:"h-10 rounded-md px-8",icon:"h-9 w-9"};return OD.jsxDEV("button",{ref:K,className:y1("inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-zinc-400 disabled:pointer-events-none disabled:opacity-50 cursor-pointer",B[q],$[X],J),...Y},void 0,!1,void 0,this)});q5.displayName="Button";var mU=H0(v0(),1);var G9=H0(l0(),1);function ID({path:J,children:q,className:X,...Y}){let[K,B]=mU.useState(!1),[$,F]=mU.useState(!1),V=h0(V8),N=async(L)=>{if(L.stopPropagation(),K)return;B(!0);try{if((await fetch("/api/ide/open",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:J})})).ok)F(!0),setTimeout(()=>F(!1),2000);else console.error("Failed to open in IDE")}catch(P){console.error("Error opening IDE:",P)}finally{B(!1)}},U=V.ide||"IDE";return G9.jsxDEV("button",{onClick:N,disabled:K,title:`Open in ${U}`,className:y1("relative cursor-pointer transition-all active:scale-95 disabled:opacity-70 disabled:cursor-not-allowed group",$?"text-emerald-400":"",X),...Y,children:[G9.jsxDEV("div",{className:y1("flex items-center gap-2",K?"opacity-0":"opacity-100"),children:q||G9.jsxDEV(G9.Fragment,{children:[G9.jsxDEV("span",{children:["Open in ",U]},void 0,!0,void 0,this),G9.jsxDEV(YQ,{className:"w-3 h-3"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),K&&G9.jsxDEV("div",{className:"absolute inset-0 flex items-center justify-center",children:G9.jsxDEV(V5,{className:"w-3 h-3 animate-spin text-rust"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var t1=H0(l0(),1);function TD({isRunning:J,isAiLoading:q,hasOutput:X,onRunTests:Y,onExplain:K,onGetAiHint:B}){let $=h0(S4),F=h0(Y9),V=h0(pY);if(!$)return t1.jsxDEV(b8,{className:"flex-none p-5 border-zinc-800/50 bg-gradient-to-br from-zinc-900/60 via-zinc-900/40 to-transparent backdrop-blur-sm",children:t1.jsxDEV("div",{className:"text-center py-8 text-zinc-500",children:[t1.jsxDEV(n7,{className:"w-10 h-10 mx-auto mb-3 text-zinc-700"},void 0,!1,void 0,this),t1.jsxDEV("p",{children:"Select an exercise to start coding"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this);let N=F[$.id];return t1.jsxDEV(b8,{className:"flex-none p-5 border-zinc-800/50 bg-gradient-to-br from-zinc-900/60 via-zinc-900/40 to-transparent backdrop-blur-sm",children:t1.jsxDEV("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[t1.jsxDEV("div",{className:"space-y-1",children:[t1.jsxDEV("div",{className:"flex items-center gap-2",children:N==="pass"?t1.jsxDEV(Z2,{className:"bg-emerald-500/20 text-emerald-400 border-emerald-500/30 text-[10px]",children:[t1.jsxDEV(m5,{className:"w-3 h-3 mr-1"},void 0,!1,void 0,this)," Mastered"]},void 0,!0,void 0,this):t1.jsxDEV(Z2,{className:"bg-rust/20 text-rust border-rust/30 text-[10px]",children:"Active Challenge"},void 0,!1,void 0,this)},void 0,!1,void 0,this),t1.jsxDEV("h2",{className:"text-2xl font-black tracking-tight text-white line-clamp-1",children:$.friendlyName||$.exerciseName},void 0,!1,void 0,this),t1.jsxDEV("p",{className:"text-zinc-500 text-xs flex items-center gap-2",children:[t1.jsxDEV("span",{className:"text-zinc-600",children:$.moduleTitle||$.module.replace(/_/g," ")},void 0,!1,void 0,this),t1.jsxDEV("span",{className:"text-zinc-700",children:"•"},void 0,!1,void 0,this),t1.jsxDEV(ID,{path:$.path,className:"bg-zinc-800/50 hover:bg-zinc-700/50 px-2 py-1 rounded text-zinc-400 hover:text-zinc-300 text-[10px] w-auto h-auto transition-colors font-mono",children:$.path.split("prog").pop()},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),t1.jsxDEV("div",{className:"flex items-center gap-2",children:[t1.jsxDEV(q5,{size:"lg",disabled:J,onClick:Y,className:"font-bold shadow-xl shadow-rust/20 bg-gradient-to-r from-rust to-orange-500 hover:from-rust/90 hover:to-orange-500/90",children:[J?t1.jsxDEV(V5,{className:"mr-2 h-4 w-4 animate-spin"},void 0,!1,void 0,this):t1.jsxDEV(a7,{className:"mr-2 h-4 w-4 fill-white"},void 0,!1,void 0,this),J?"Compiling...":"Run Tests"]},void 0,!0,void 0,this),t1.jsxDEV(q5,{variant:"secondary",size:"lg",onClick:K,disabled:q,className:"font-semibold bg-zinc-800/50 hover:bg-zinc-800 border-zinc-700/50",children:[V?t1.jsxDEV(h6,{className:"mr-2 h-4 w-4 text-zinc-500"},void 0,!1,void 0,this):t1.jsxDEV(S5,{className:"mr-2 h-4 w-4 text-purple-400"},void 0,!1,void 0,this),"Explain"]},void 0,!0,void 0,this),t1.jsxDEV(q5,{variant:"secondary",size:"lg",onClick:B,disabled:q,className:"font-semibold bg-zinc-800/50 hover:bg-zinc-800 border-zinc-700/50",children:[V?t1.jsxDEV(h6,{className:"mr-2 h-4 w-4 text-zinc-500"},void 0,!1,void 0,this):t1.jsxDEV(S5,{className:"mr-2 h-4 w-4 text-rust"},void 0,!1,void 0,this),"Hint"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var DD=H0(l0(),1);function Qq({className:J,...q}){return DD.jsxDEV(vY.Root,{"data-slot":"label",className:y1("gap-2 text-sm leading-none font-medium group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50 flex items-center select-none group-data-[disabled=true]:pointer-events-none peer-disabled:cursor-not-allowed",J),...q},void 0,!1,void 0,this)}var fU=H0(l0(),1);function _D({checked:J,onCheckedChange:q,id:X,disabled:Y,className:K}){return fU.jsxDEV("button",{role:"switch","aria-checked":J,id:X,disabled:Y,onClick:()=>q(!J),className:`
292
292
  peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "progy",
3
- "version": "0.13.1",
3
+ "version": "0.13.3",
4
4
  "description": "The interactive CLI and learning platform for Progy courses.",
5
5
  "license": "MIT",
6
6
  "repository": {