velloo 0.8.0 → 0.9.0

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.
Files changed (73) hide show
  1. package/BUN-LICENSE.md +4 -3
  2. package/THIRD-PARTY-NOTICES.md +3 -3
  3. package/canvas/assets/index-DFOlwAKW.js +31 -0
  4. package/canvas/assets/{lucide-all-Cezxn40A.js → lucide-all-CezGNjGW.js} +1 -1
  5. package/canvas/index.html +1 -1
  6. package/{chunk-mqtnj8ws.js → chunk-00n2d68z.js} +1 -1
  7. package/{chunk-45wv1fs5.js → chunk-02gpgqj4.js} +5 -5
  8. package/{chunk-m0v3d581.js → chunk-0ztxyzac.js} +1 -1
  9. package/{chunk-07fxzrx2.js → chunk-2x5rw009.js} +3 -3
  10. package/{chunk-w30zfv3m.js → chunk-3f2p94wa.js} +1 -1
  11. package/{chunk-zgwvkgsz.js → chunk-3jqbybmp.js} +1 -1
  12. package/{chunk-mqx96m2g.js → chunk-5tatkt2j.js} +1 -1
  13. package/{chunk-qqagacne.js → chunk-640swnrm.js} +1 -1
  14. package/{chunk-v6ks5v53.js → chunk-6600wkmq.js} +1 -1
  15. package/{chunk-esg0x95a.js → chunk-6adv9eke.js} +1 -1
  16. package/{chunk-s1cwck4c.js → chunk-6wfvb07c.js} +1 -1
  17. package/{chunk-dqqpbmxt.js → chunk-8a2agf28.js} +1 -1
  18. package/{chunk-asqpx5v7.js → chunk-8kn6tp4b.js} +2 -2
  19. package/{chunk-cq2q36d1.js → chunk-9b4akcfp.js} +1 -1
  20. package/{chunk-8n07n0cr.js → chunk-9kvbe53e.js} +2 -2
  21. package/{chunk-3612470d.js → chunk-a5mxgvcz.js} +1 -1
  22. package/{chunk-sjxp2bx3.js → chunk-as4rn21e.js} +1 -1
  23. package/{chunk-qx83fdv2.js → chunk-avewjans.js} +4 -4
  24. package/chunk-bpb97rsk.js +17 -0
  25. package/{chunk-q7wwqn03.js → chunk-bsn761jv.js} +1 -1
  26. package/{chunk-rg86bhtb.js → chunk-c11n1tve.js} +1 -1
  27. package/{chunk-emty5315.js → chunk-cfksd3zh.js} +1 -1
  28. package/{chunk-hsk91jms.js → chunk-ck3bg8rf.js} +1 -1
  29. package/{chunk-r5y1sh4f.js → chunk-cy1nmr0f.js} +1 -1
  30. package/{chunk-nx0ex7qw.js → chunk-dqy6a75x.js} +1 -1
  31. package/{chunk-qgbat4fv.js → chunk-f8jchnwe.js} +1 -1
  32. package/{chunk-d19ttv1a.js → chunk-fejhav0p.js} +1 -1
  33. package/{chunk-x84qrz4q.js → chunk-fzqt4rsz.js} +1 -1
  34. package/{chunk-rrrn1mkq.js → chunk-g7pbfad5.js} +1 -1
  35. package/{chunk-cg0sjdqt.js → chunk-gv209d5j.js} +1 -1
  36. package/chunk-j4rt31qb.js +2 -0
  37. package/{chunk-t08391mh.js → chunk-kmsbcb3q.js} +1 -1
  38. package/{chunk-nrxqr4v5.js → chunk-ktps9v0k.js} +1 -1
  39. package/{chunk-rhfzy9c0.js → chunk-ktsdzzgx.js} +1 -1
  40. package/{chunk-8ztgcajz.js → chunk-kvxn1cyx.js} +1 -1
  41. package/{chunk-xg49s85z.js → chunk-n70zfv0m.js} +902 -902
  42. package/{chunk-djwvt6jx.js → chunk-n8pr0kc8.js} +1 -1
  43. package/{chunk-dy7qwj3t.js → chunk-pasvz8xw.js} +1 -1
  44. package/{chunk-t61vyqpd.js → chunk-qewarcqf.js} +1 -1
  45. package/{chunk-b4hny6hw.js → chunk-qf1c6jxh.js} +1 -1
  46. package/chunk-qn05hn7a.js +5 -0
  47. package/{chunk-majd3gx9.js → chunk-qvdvxqs0.js} +1 -1
  48. package/{chunk-aefn23tr.js → chunk-r014f76h.js} +1 -1
  49. package/{chunk-32cq4wpr.js → chunk-seaar5na.js} +1 -1
  50. package/{chunk-g3k8k6fq.js → chunk-tax7fxav.js} +1 -1
  51. package/{chunk-c4164x55.js → chunk-tmjs6xas.js} +1 -1
  52. package/{chunk-z6r6wxm6.js → chunk-v6w8akph.js} +1 -1
  53. package/{chunk-xxw67jpk.js → chunk-w40pqmyz.js} +4 -4
  54. package/{chunk-yjwtdm71.js → chunk-x05grjd9.js} +1 -1
  55. package/{chunk-ffm2jpxp.js → chunk-x61f42fj.js} +2 -2
  56. package/{chunk-h3ser37q.js → chunk-xc6mats8.js} +1 -1
  57. package/chunk-yp39f93e.js +815 -0
  58. package/{chunk-ez720ked.js → chunk-ysf9388d.js} +1 -1
  59. package/{chunk-6w42sr61.js → chunk-z3r8px3d.js} +1 -1
  60. package/{chunk-8qf0ne1p.js → chunk-z9kcdgj8.js} +1 -1
  61. package/chunk-zexzy6zv.js +2 -0
  62. package/chunk-zjbbd87h.js +2 -0
  63. package/cli.js +1 -1
  64. package/package.json +9 -9
  65. package/pkgs/schema/src/index.ts +1 -0
  66. package/pkgs/schema/src/snippet-resolve.ts +43 -0
  67. package/canvas/assets/index-CcPwhD7W.js +0 -31
  68. package/chunk-4g4c9h7k.js +0 -2
  69. package/chunk-9g45c5md.js +0 -815
  70. package/chunk-bntsn3wj.js +0 -2
  71. package/chunk-ejpccmcj.js +0 -18
  72. package/chunk-jxgwdz2r.js +0 -5
  73. package/chunk-kvq7pcph.js +0 -2
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{isCancel,confirm,log,cancel,note,spinner,select,text}from"./chunk-80fjfyha.js";import{designNameIssue,CURRENT_SCHEMA_VERSION,schemaVersionOf,APP_PATH_PREFIX,planMigration,ConfigSchema}from"./chunk-xxw67jpk.js";import{writeJsonAtomic,managedDesignPath,managedDesignId,localDesignOf,writeLocalDesign,removeLocalDesign,resolveAppPath,recordedDesignName,pickDesign,readRepoFeedback,writeRepoFeedback,writeFeedbackContactOk,loadDesignFolder,hostAppRootFrom,recordThemeSource,topUpTokens}from"./chunk-9g45c5md.js";import{CHROMIUM_INSTALL_CMD,chromiumExecutable}from"./chunk-xg49s85z.js";import{PROJECT_AGENT_IDS,resolveProjectRoot,manualSetupText,askAgentWiring,globallyWiredAgents,connect}from"./chunk-07fxzrx2.js";import{TOOL_VERSION}from"./chunk-rrrn1mkq.js";import{fail}from"./chunk-s23gtejf.js";import{daemonRoot,ensureDaemon,stopDaemon}from"./chunk-qgbat4fv.js";import{detectHost,findComponentsDir}from"./chunk-cg0sjdqt.js";import{installedVellooBin,updateStatus,upgradeInstalledVelloo}from"./chunk-d19ttv1a.js";import{dirExists,discoverScanRoots,scanApps,primaryApp,buildScreensFromScan,buildBoardsFromScan,hasAppToMatch,DEFAULT_THEME_PRESET,NEUTRAL_THEME_PRESET,isValidPreset,WIZARD_PROVIDERS,LIBRARY_IDS,DEFAULT_LIBRARY_ID,interactiveLibraryChoices,planInstall,scanAdoption,libraryForApp,libraryForSample,DEFAULT_STACK_ID,stackForFramework,isValidStack,importThemeFromDesignMd,isEmptyOrMissing,resolveTheme,buildScaffold,writeScaffold,displayPath,printSummary,printThemeImport,printExitInstructions,printScreenshotReadiness,promptShellCompletions}from"./chunk-45wv1fs5.js";import{loadCredential,saveCredential,verifyCredential,performDeviceLogin}from"./chunk-rg86bhtb.js";import{installChromiumInteractive}from"./chunk-dy7qwj3t.js";import{copyToClipboard}from"./chunk-vbk1qhdz.js";import{openUrl}from"./chunk-hggap8fq.js";import{upgradeFolder}from"./chunk-ez720ked.js";import{findManifest,manifestListing,findDesigns,withoutDesign,isWithin,findGitRoot,chooseDesignName,registerDesign,registerLocalDesign,existingDesignFolder,isDesignFolderSync,isEmptyOrMissingSync,hasDesignConfig,resolveDesign}from"./chunk-6w42sr61.js";import{defaultCloudUrl}from"./chunk-w30zfv3m.js";import{require_picocolors}from"./chunk-jrsknzjt.js";import{__toESM,defineCommand}from"./chunk-2smsg2ct.js";import{randomUUID as randomUUID2}from"crypto";import{dirname as dirname2,relative as relative7,resolve as resolve7}from"path";var import_picocolors11=__toESM(require_picocolors(),1);import{existsSync}from"fs";import{readFile}from"fs/promises";import{join,relative,resolve,sep}from"path";function isSentinel(path){return path==="binary"||path.startsWith("~/")}function toPosix(path){return path.split(sep).join("/")||"."}function isUnder(parent,child){let rel=relative(parent,child);return rel===""||!rel.startsWith("..")&&!/^(?:[\\/]|[A-Za-z]:)/.test(rel)}async function readConfig(folder){return ConfigSchema.parse(JSON.parse(await readFile(join(folder,".design","config.json"),"utf8")))}async function recordedAppRoot(designFolder){let folder=resolve(designFolder),local=localDesignOf(folder);if(local){let path=resolve(local.appRoot);return{path,kind:"local",localId:local.id,checkout:local.root,...appShape(path)}}let recorded=(await readConfig(folder)).hostApp?.root,path=recorded&&!isSentinel(recorded)?resolveAppPath(folder,recorded):resolve(folder,".."),found=await manifestListing(folder).catch(()=>null),designName=recordedDesignName(folder);return{path,kind:"in-repo",...designName?{designName}:{},...found?{manifestPath:found.path}:{},...appShape(path)}}function appShape(path){let exists=existsSync(path);return{exists,looksLikeApp:exists&&existsSync(join(path,"package.json"))}}function pathSlots(config){let slots=[];for(let[name,app]of Object.entries(config.hostApps??{}))slots.push({field:`hostApps.${name}.root`,kind:"folder",value:app.root,set:(next)=>{app.root=next}});for(let[name,library]of Object.entries(config.libraries)){if(library.source!=="in-repo")continue;slots.push({field:`libraries.${name}.componentsPath`,kind:"folder",value:library.componentsPath,set:(next)=>{library.componentsPath=next}})}let aliases=config.hostApp?.aliases;for(let[pattern,target]of Object.entries(aliases??{}))slots.push({field:`hostApp.aliases["${pattern}"]`,kind:"app",value:target,set:(next)=>{if(aliases)aliases[pattern]=next}});let include=config.hostApp?.components?.include;for(let[index,entry]of(include??[]).entries())slots.push({field:`hostApp.components.include[${index}]`,kind:"app",value:entry,onlyIfExists:!0,set:(next)=>{if(include)include[index]=next}});let codegen=config.codegen;if(codegen?.componentsDir!==void 0)slots.push({field:"codegen.componentsDir",kind:"app",value:codegen.componentsDir,set:(next)=>{codegen.componentsDir=next}});return slots}async function planAppRootChange(designFolder,newRoot){let folder=resolve(designFolder),current=await recordedAppRoot(folder),from=current.path,to=resolve(newRoot),change={from,to,rewritten:[]},local=current.kind==="local"&&current.localId!==void 0;if(current.kind==="local"&&current.localId&&current.checkout){if(!isUnder(current.checkout,to))throw Error(`An application root must live inside the design's checkout (${current.checkout}). ${to} is outside it.`);change.local={id:current.localId,root:current.checkout}}let config=await readConfig(folder);if(!local){let stored=config.hostApp?.root,next=toPosix(relative(folder,to));if(stored===void 0||!isSentinel(stored)&&next!==stored)change.rewritten.push({field:"hostApp.root",from:stored??"(unset)",to:next})}let nested=isUnder(from,to)||isUnder(to,from),staysPut=(abs,moved)=>{if(!nested)return!1;let here=existsSync(abs);if(here!==existsSync(moved))return here;return isUnder(to,abs)};for(let slot of pathSlots(config)){if(isSentinel(slot.value))continue;let appRef=slot.kind==="folder"&&slot.value.startsWith(APP_PATH_PREFIX),tail=slot.kind==="app"?/\/?\*?$/.exec(slot.value)?.[0]??"":"",stored=slot.value.slice(0,slot.value.length-tail.length),abs=slot.kind==="app"?resolve(from,stored):resolveAppPath(folder,stored);if(!isUnder(from,abs))continue;if(slot.onlyIfExists&&!existsSync(abs))continue;let stays=staysPut(abs,join(to,relative(from,abs))),followsRoot=slot.kind==="app"||appRef;if(stays!==followsRoot)continue;let next;if(!stays)next=toPosix(relative(folder,join(to,relative(from,abs))));else{let rel=abs===to?"":toPosix(relative(to,abs));if(appRef)next=`${APP_PATH_PREFIX}${rel||"."}`;else next=rel===""?tail.replace(/^\//,"")||".":`${rel}${tail}`}if(next!==slot.value)change.rewritten.push({field:slot.field,from:slot.value,to:next})}return change}async function applyAppRootChange(designFolder,change){let folder=resolve(designFolder);if(change.rewritten.length>0){let config=await readConfig(folder),patch=new Map(change.rewritten.map((r)=>[r.field,r.to])),hostRoot=patch.get("hostApp.root");if(hostRoot!==void 0)config.hostApp=config.hostApp?{...config.hostApp,root:hostRoot}:{root:hostRoot};for(let slot of pathSlots(config)){let next=patch.get(slot.field);if(next!==void 0)slot.set(next)}await writeJsonAtomic(join(folder,".design","config.json"),ConfigSchema.parse(config))}if(change.local)await writeLocalDesign(change.local.id,{root:change.local.root,appRoot:change.to,...managedDesignId(folder)?{}:{designPath:folder}})}async function appRootCandidates(near){let start=resolve(near),from=(await findManifest(start).catch(()=>null))?.dir??await findGitRoot(start)??start;return(await discoverScanRoots(from)).map((app)=>({dir:app.dir,rel:relative(from,app.dir)||"."}))}async function appRootIsNotAnApp(appRoot){let abs=resolve(appRoot);if(existsSync(join(abs,"package.json"))&&(await discoverScanRoots(abs))[0]?.dir===abs)return null;let candidates=(await appRootCandidates(abs)).filter((c)=>c.dir!==abs);return candidates.length>0?candidates:null}async function promptAppRootChoice(current,opts={}){let message=opts.message??"Which application is this design for?",currentHint=opts.currentHint??"recorded now",abs=resolve(current),candidates=await appRootCandidates(abs),options=candidates.map((c)=>({value:c.dir,label:c.rel,...c.dir===abs?{hint:currentHint}:{}}));if(!candidates.some((c)=>c.dir===abs))options.push({value:abs,label:current,hint:currentHint});if(options.length<=1)return null;let chosen=await select({message,options});if(isCancel(chosen))return null;return chosen}import{createHash,randomUUID}from"crypto";import{existsSync as existsSync2,lstatSync,realpathSync}from"fs";import{cp,lstat,mkdir,readdir,readFile as readFile2,rm}from"fs/promises";import{basename,dirname,join as join2,relative as relative2,resolve as resolve2,sep as sep2}from"path";function physicalDestination(path){if(lstatSync(path,{throwIfNoEntry:!1}))return realpathSync(path);let parent=dirname(path);return join2(physicalDestination(parent),relative2(parent,path))}var RUNTIME=[".design/cache",".velloo","node_modules"];async function rebaseDesignConfig(source,destination,appRoot,external){let config=ConfigSchema.parse(JSON.parse(await readFile2(join2(destination,".design/config.json"),"utf8"))),rebase=(path)=>{if(path==="binary"||path.startsWith("~/"))return path;let abs=resolveAppPath(source,path),withinDesign=relative2(source,abs);if(withinDesign===""||withinDesign!==".."&&!withinDesign.startsWith(`..${sep2}`)&&!/^(?:[\\/]|[A-Za-z]:)/.test(withinDesign))return withinDesign.split(sep2).join("/")||".";return external?`${APP_PATH_PREFIX}${relative2(appRoot,abs).split(sep2).join("/")||"."}`:relative2(destination,abs).split(sep2).join("/")||"."};config.hostApp=config.hostApp?{...config.hostApp,root:rebase(config.hostApp.root)}:{root:rebase("..")};for(let app of Object.values(config.hostApps??{}))app.root=rebase(app.root);for(let library of Object.values(config.libraries))if(library.componentsPath)library.componentsPath=rebase(library.componentsPath);await writeJsonAtomic(join2(destination,".design/config.json"),config)}async function fingerprint(folder){let hash=createHash("sha256");async function walk(rel){if(rel===".git"||RUNTIME.some((p)=>rel===p||rel.startsWith(`${p}/`)))return;let path=join2(folder,rel),stat=await lstat(path);if(stat.isSymbolicLink())throw Error(`Cannot relocate symbolic link ${path}. Replace it with its actual design content first.`);if(stat.isDirectory())for(let name of(await readdir(path)).sort())await walk(rel?`${rel}/${name}`:name);else if(stat.isFile())hash.update(rel).update("\x00").update(await readFile2(path));else throw Error(`Unsupported filesystem entry: ${path}`)}return await walk(""),hash.digest("hex")}async function planRelocation(source,cwd,to,external){if(Boolean(to)===external)throw Error("Choose exactly one destination: --external or --to <path>.");let designs=await findDesigns(cwd),physicalSource=realpathSync(source),local=designs?.local.find((design)=>realOr(design.designRoot)===physicalSource),repo=designs?.repo??null,index=repo?.folders.findIndex((path)=>existsSync2(path)&&realpathSync(path)===physicalSource)??-1;if(!local&&index===-1)throw Error("Run relocation from the checkout the design belongs to; the source must be one of its designs.");let root=local?.root??repo?.dir,name=recordedDesignName(source);if(!name)throw Error(`${source} has no design name \u2014 run \`velloo upgrade\` first.`);let physicalRoot=realpathSync(root);if(physicalSource===physicalRoot)throw Error("Cannot relocate the application repository itself. Use a separate design directory.");if(external&&managedDesignId(source))throw Error("This design already lives in managed storage.");let destination=external?managedDesignPath(local?.id??randomUUID()):resolve2(cwd,to??""),physicalTarget=physicalDestination(destination),inRepo=!external&&isWithin(physicalRoot,physicalTarget);if(physicalTarget===physicalSource||physicalTarget.startsWith(physicalSource+sep2)||physicalSource.startsWith(physicalTarget+sep2))throw Error("Source and destination cannot contain each other.");if(existsSync2(destination))throw Error(`Destination is occupied: ${destination}. Choose a new path; nothing was changed.`);let manifestPath=repo?.path??join2(root,"velloo.json"),before=repo?await readFile2(repo.path,"utf8"):null,manifest,destinationManifestPath;if(repo?.legacy)throw Error(`${repo.path} is in the pre-designs format \u2014 run \`velloo upgrade\` first.`);if(inRepo){destinationManifestPath=relative2(physicalRoot,physicalTarget).split(sep2).join("/")||".";let designs=[...repo?.manifest.designs??[]];if(index===-1)designs.push(destinationManifestPath);else designs[index]=destinationManifestPath;manifest={...repo?.manifest??{},designs}}else if(repo&&index!==-1)manifest=withoutDesign(repo.manifest,index,name);let config=ConfigSchema.parse(JSON.parse(await readFile2(join2(source,".design/config.json"),"utf8")));return{source,destination,root,appRoot:local?.appRoot??hostAppRootFrom(source,config.hostApp),designName:name,sourceLocalId:local?.id,sourceManifestPath:index===-1?void 0:repo?.manifest.designs[index],destinationManifestPath,destinationLocal:inRepo?void 0:{id:local?.id??(external?basename(destination):randomUUID()),...external?{}:{designPath:destination}},manifestPath,before,manifest}}function realOr(path){return existsSync2(path)?realpathSync(path):resolve2(path)}async function relocateDesign(plan){await stopDaemon(daemonRoot(plan.source));let original=await fingerprint(plan.source);await mkdir(dirname(plan.destination),{recursive:!0}),await mkdir(plan.destination);let committed=!1;try{for(let entry of await readdir(plan.source))await cp(join2(plan.source,entry),join2(plan.destination,entry),{recursive:!0,errorOnExist:!0,force:!1,filter:(path)=>!RUNTIME.some((p)=>{let rel=relative2(plan.source,path).split(sep2).join("/");return rel===p||rel.startsWith(`${p}/`)})});if(await fingerprint(plan.destination)!==original)throw Error("Copied content did not match the source.");if(await rebaseDesignConfig(plan.source,plan.destination,plan.appRoot,plan.destinationLocal!==void 0),await loadDesignFolder(plan.destination,{preferences:!1}),await fingerprint(plan.source)!==original)throw Error("The source changed during relocation. Close editors and retry.");if(await readFile2(plan.manifestPath,"utf8").catch(()=>null)!==plan.before)throw Error("The manifest changed during relocation. Review it and retry.");if(plan.destinationLocal){if(plan.sourceLocalId&&plan.sourceLocalId!==plan.destinationLocal.id)await removeLocalDesign(plan.sourceLocalId);await writeLocalDesign(plan.destinationLocal.id,{root:plan.root,appRoot:plan.appRoot,...plan.destinationLocal.designPath?{designPath:plan.destinationLocal.designPath}:{}})}else if(plan.sourceLocalId)await removeLocalDesign(plan.sourceLocalId);if(plan.manifest===null)await rm(plan.manifestPath,{force:!0});else if(plan.manifest)await writeJsonAtomic(plan.manifestPath,plan.manifest);committed=!0}finally{if(!committed)await rm(plan.destination,{recursive:!0,force:!0})}try{await rm(plan.source,{recursive:!0})}catch(error){throw Error(`Relocation completed to ${plan.destination}, but the old copy remains at ${plan.source}. Remove it after checking the destination. ${error}`)}}var import_picocolors=__toESM(require_picocolors(),1);async function offerUpgradeBeforeInit(argv){if(process.env.VELLOO_DISABLE_UPDATE_CHECK==="1"||!process.stdin.isTTY)return!1;let status;try{status=await updateStatus({refresh:!0})}catch{return!1}if(!status.available||!status.upgradable||!status.latest)return!1;console.log(""),console.log(`${import_picocolors.default.yellow("A newer velloo is available:")} ${status.current} \u2192 ${import_picocolors.default.bold(status.latest)}`);let yes=await confirm({message:"Upgrade before setting up this design folder?",initialValue:!0});if(isCancel(yes)||!yes)return console.log(import_picocolors.default.dim(" Continuing on the current version.")),!1;try{if(!(await upgradeInstalledVelloo()).upgraded)return!1;let bin=installedVellooBin();if(!bin)return console.log(import_picocolors.default.dim(" Upgraded. Run `velloo init` again to continue on the new version.")),!0;let code=await Bun.spawn([bin,...argv],{stdin:"inherit",stdout:"inherit",stderr:"inherit",env:{...process.env,VELLOO_DISABLE_UPDATE_CHECK:"1"}}).exited;process.exit(code)}catch(error){return console.log(import_picocolors.default.yellow(` Could not upgrade (${error instanceof Error?error.message:String(error)}) \u2014 continuing on the current version.`)),!1}}import{resolve as resolve3}from"path";var START_TO_CONTENT={"redesign-screen":"redesign-screen","redesign-component":"component",custom:"custom",sample:"sample",blank:"blank",scratch:"sample",scan:"scan"};function isValidLibraryId(v){return LIBRARY_IDS.includes(v)}function isValidContent(v){return v==="sample"||v==="blank"||v==="scan"||v==="redesign-screen"||v==="component"||v==="custom"}function isValidStart(v){return v in START_TO_CONTENT}function shouldRunWizard(args,stdinIsTTY){if(args.nonInteractive)return!1;return stdinIsTTY}function answersFromArgs(args){if(args.library&&!isValidLibraryId(args.library))throw Error(`unknown --library ${JSON.stringify(args.library)}. Valid: ${LIBRARY_IDS.join(" | ")}.`);if(args.start&&!isValidStart(args.start))throw Error(`unknown --start ${JSON.stringify(args.start)}. Valid: redesign-screen | redesign-component | custom | sample | blank | scan.`);if(args.initialContent&&!isValidContent(args.initialContent))throw Error(`unknown --initial-content ${JSON.stringify(args.initialContent)}. Valid: sample | blank | scan | redesign-screen | component | custom.`);let themePreset=args.themePreset?.trim()||void 0;if(themePreset&&!isValidPreset(themePreset))throw Error(`unknown --theme-preset ${JSON.stringify(args.themePreset)}.`);let stack=args.stack?.trim()||void 0;if(stack&&!isValidStack(stack))throw Error(`unknown --stack ${JSON.stringify(args.stack)}. Valid: nextjs | vite | astro | remix.`);let appRoot=resolve3(args.folder??"."),folder=resolve3(appRoot,args.designFolder??"velloo"),library=args.library??DEFAULT_LIBRARY_ID,initialContent=args.initialContent??"sample";if(args.start)initialContent=START_TO_CONTENT[args.start]??initialContent;let screenName=args.screenName?.trim()||void 0,componentDescription=args.component?.trim()||void 0,customRequest=args.request?.trim()||void 0;if(initialContent==="component"&&!componentDescription)throw Error("--component is required for --start=redesign-component.");if(initialContent==="custom"&&!customRequest)throw Error("--request is required for --start=custom.");if(initialContent==="redesign-screen"&&!screenName&&args.start==="redesign-screen");let source=WIZARD_PROVIDERS[library].defaultSource;return{appRoot,scanRoot:appRoot,folder,library,source,componentsRelative:args.componentsDir??findComponentsDir(appRoot)??"src/components/ui",initialContent,themePreset,...args.designMd===!1?{useDesignMd:!1}:{},...stack?{stack}:{},...screenName?{screenName}:{},...componentDescription?{componentDescription}:{},...customRequest?{customRequest}:{}}}import{relative as relative3,sep as sep3}from"path";var SCREENS_PLACEHOLDER="{{screens}}";function appContext(answers){let appRels=[...new Set((answers.selectedRoutes??[]).map((r)=>r.appRel).filter(Boolean))];if(appRels.length>1)return[`It's a monorepo with ${appRels.length} apps (${appRels.map((r)=>`\`${r}\``).join(", ")}), one board each.`];let uiRel=relative3(answers.appRoot,answers.scanRoot).split(sep3).join("/");return uiRel&&!uiRel.startsWith("..")?[`The app lives in \`${uiRel}/\`.`]:[]}var SETUP="Set Velloo up for my app (theme, fonts, components).",RECREATE_BAR="keep fixing `compare_to_url`'s top mismatches and don't stop below 0.9. Start the app yourself.",ALTERNATIVES="Explore a few different directions beside it on the same board.";function steps(answers,...rest){return[...hasAppToMatch(answers)?[SETUP]:[],...rest].map((step,i)=>`${i+1}. ${step}`)}function wantsHandoff(answers){switch(answers.initialContent){case"scan":case"redesign-screen":case"component":case"custom":return!0;default:return!1}}function buildHandoffPrompt(answers,screens){return[...goalLines(answers,screens),...appContext(answers)].join(`
2
+ import{isCancel,confirm,log,cancel,note,spinner,select,text}from"./chunk-80fjfyha.js";import{designNameIssue,CURRENT_SCHEMA_VERSION,schemaVersionOf,APP_PATH_PREFIX,planMigration,ConfigSchema}from"./chunk-w40pqmyz.js";import{writeJsonAtomic,managedDesignPath,managedDesignId,localDesignOf,writeLocalDesign,removeLocalDesign,resolveAppPath,recordedDesignName,pickDesign,readRepoFeedback,writeRepoFeedback,writeFeedbackContactOk,loadDesignFolder,hostAppRootFrom,recordThemeSource,topUpTokens}from"./chunk-yp39f93e.js";import{CHROMIUM_INSTALL_CMD,chromiumExecutable}from"./chunk-n70zfv0m.js";import{PROJECT_AGENT_IDS,resolveProjectRoot,manualSetupText,askAgentWiring,globallyWiredAgents,connect}from"./chunk-2x5rw009.js";import{TOOL_VERSION}from"./chunk-g7pbfad5.js";import{fail}from"./chunk-s23gtejf.js";import{daemonRoot,ensureDaemon,stopDaemon}from"./chunk-f8jchnwe.js";import{detectHost,findComponentsDir}from"./chunk-gv209d5j.js";import{installedVellooBin,updateStatus,upgradeInstalledVelloo}from"./chunk-fejhav0p.js";import{dirExists,discoverScanRoots,scanApps,primaryApp,buildScreensFromScan,buildBoardsFromScan,hasAppToMatch,DEFAULT_THEME_PRESET,NEUTRAL_THEME_PRESET,isValidPreset,WIZARD_PROVIDERS,LIBRARY_IDS,DEFAULT_LIBRARY_ID,interactiveLibraryChoices,planInstall,scanAdoption,libraryForApp,libraryForSample,DEFAULT_STACK_ID,stackForFramework,isValidStack,importThemeFromDesignMd,isEmptyOrMissing,resolveTheme,buildScaffold,writeScaffold,displayPath,printSummary,printThemeImport,printExitInstructions,printScreenshotReadiness,promptShellCompletions}from"./chunk-02gpgqj4.js";import{loadCredential,saveCredential,verifyCredential,performDeviceLogin}from"./chunk-c11n1tve.js";import{installChromiumInteractive}from"./chunk-pasvz8xw.js";import{copyToClipboard}from"./chunk-vbk1qhdz.js";import{openUrl}from"./chunk-hggap8fq.js";import{upgradeFolder}from"./chunk-ysf9388d.js";import{findManifest,manifestListing,findDesigns,withoutDesign,isWithin,findGitRoot,chooseDesignName,registerDesign,registerLocalDesign,existingDesignFolder,isDesignFolderSync,isEmptyOrMissingSync,hasDesignConfig,resolveDesign}from"./chunk-z3r8px3d.js";import{defaultCloudUrl}from"./chunk-3f2p94wa.js";import{require_picocolors}from"./chunk-jrsknzjt.js";import{__toESM,defineCommand}from"./chunk-2smsg2ct.js";import{randomUUID as randomUUID2}from"crypto";import{dirname as dirname2,relative as relative7,resolve as resolve7}from"path";var import_picocolors11=__toESM(require_picocolors(),1);import{existsSync}from"fs";import{readFile}from"fs/promises";import{join,relative,resolve,sep}from"path";function isSentinel(path){return path==="binary"||path.startsWith("~/")}function toPosix(path){return path.split(sep).join("/")||"."}function isUnder(parent,child){let rel=relative(parent,child);return rel===""||!rel.startsWith("..")&&!/^(?:[\\/]|[A-Za-z]:)/.test(rel)}async function readConfig(folder){return ConfigSchema.parse(JSON.parse(await readFile(join(folder,".design","config.json"),"utf8")))}async function recordedAppRoot(designFolder){let folder=resolve(designFolder),local=localDesignOf(folder);if(local){let path=resolve(local.appRoot);return{path,kind:"local",localId:local.id,checkout:local.root,...appShape(path)}}let recorded=(await readConfig(folder)).hostApp?.root,path=recorded&&!isSentinel(recorded)?resolveAppPath(folder,recorded):resolve(folder,".."),found=await manifestListing(folder).catch(()=>null),designName=recordedDesignName(folder);return{path,kind:"in-repo",...designName?{designName}:{},...found?{manifestPath:found.path}:{},...appShape(path)}}function appShape(path){let exists=existsSync(path);return{exists,looksLikeApp:exists&&existsSync(join(path,"package.json"))}}function pathSlots(config){let slots=[];for(let[name,app]of Object.entries(config.hostApps??{}))slots.push({field:`hostApps.${name}.root`,kind:"folder",value:app.root,set:(next)=>{app.root=next}});for(let[name,library]of Object.entries(config.libraries)){if(library.source!=="in-repo")continue;slots.push({field:`libraries.${name}.componentsPath`,kind:"folder",value:library.componentsPath,set:(next)=>{library.componentsPath=next}})}let aliases=config.hostApp?.aliases;for(let[pattern,target]of Object.entries(aliases??{}))slots.push({field:`hostApp.aliases["${pattern}"]`,kind:"app",value:target,set:(next)=>{if(aliases)aliases[pattern]=next}});let include=config.hostApp?.components?.include;for(let[index,entry]of(include??[]).entries())slots.push({field:`hostApp.components.include[${index}]`,kind:"app",value:entry,onlyIfExists:!0,set:(next)=>{if(include)include[index]=next}});let codegen=config.codegen;if(codegen?.componentsDir!==void 0)slots.push({field:"codegen.componentsDir",kind:"app",value:codegen.componentsDir,set:(next)=>{codegen.componentsDir=next}});return slots}async function planAppRootChange(designFolder,newRoot){let folder=resolve(designFolder),current=await recordedAppRoot(folder),from=current.path,to=resolve(newRoot),change={from,to,rewritten:[]},local=current.kind==="local"&&current.localId!==void 0;if(current.kind==="local"&&current.localId&&current.checkout){if(!isUnder(current.checkout,to))throw Error(`An application root must live inside the design's checkout (${current.checkout}). ${to} is outside it.`);change.local={id:current.localId,root:current.checkout}}let config=await readConfig(folder);if(!local){let stored=config.hostApp?.root,next=toPosix(relative(folder,to));if(stored===void 0||!isSentinel(stored)&&next!==stored)change.rewritten.push({field:"hostApp.root",from:stored??"(unset)",to:next})}let nested=isUnder(from,to)||isUnder(to,from),staysPut=(abs,moved)=>{if(!nested)return!1;let here=existsSync(abs);if(here!==existsSync(moved))return here;return isUnder(to,abs)};for(let slot of pathSlots(config)){if(isSentinel(slot.value))continue;let appRef=slot.kind==="folder"&&slot.value.startsWith(APP_PATH_PREFIX),tail=slot.kind==="app"?/\/?\*?$/.exec(slot.value)?.[0]??"":"",stored=slot.value.slice(0,slot.value.length-tail.length),abs=slot.kind==="app"?resolve(from,stored):resolveAppPath(folder,stored);if(!isUnder(from,abs))continue;if(slot.onlyIfExists&&!existsSync(abs))continue;let stays=staysPut(abs,join(to,relative(from,abs))),followsRoot=slot.kind==="app"||appRef;if(stays!==followsRoot)continue;let next;if(!stays)next=toPosix(relative(folder,join(to,relative(from,abs))));else{let rel=abs===to?"":toPosix(relative(to,abs));if(appRef)next=`${APP_PATH_PREFIX}${rel||"."}`;else next=rel===""?tail.replace(/^\//,"")||".":`${rel}${tail}`}if(next!==slot.value)change.rewritten.push({field:slot.field,from:slot.value,to:next})}return change}async function applyAppRootChange(designFolder,change){let folder=resolve(designFolder);if(change.rewritten.length>0){let config=await readConfig(folder),patch=new Map(change.rewritten.map((r)=>[r.field,r.to])),hostRoot=patch.get("hostApp.root");if(hostRoot!==void 0)config.hostApp=config.hostApp?{...config.hostApp,root:hostRoot}:{root:hostRoot};for(let slot of pathSlots(config)){let next=patch.get(slot.field);if(next!==void 0)slot.set(next)}await writeJsonAtomic(join(folder,".design","config.json"),ConfigSchema.parse(config))}if(change.local)await writeLocalDesign(change.local.id,{root:change.local.root,appRoot:change.to,...managedDesignId(folder)?{}:{designPath:folder}})}async function appRootCandidates(near){let start=resolve(near),from=(await findManifest(start).catch(()=>null))?.dir??await findGitRoot(start)??start;return(await discoverScanRoots(from)).map((app)=>({dir:app.dir,rel:relative(from,app.dir)||"."}))}async function appRootIsNotAnApp(appRoot){let abs=resolve(appRoot);if(existsSync(join(abs,"package.json"))&&(await discoverScanRoots(abs))[0]?.dir===abs)return null;let candidates=(await appRootCandidates(abs)).filter((c)=>c.dir!==abs);return candidates.length>0?candidates:null}async function promptAppRootChoice(current,opts={}){let message=opts.message??"Which application is this design for?",currentHint=opts.currentHint??"recorded now",abs=resolve(current),candidates=await appRootCandidates(abs),options=candidates.map((c)=>({value:c.dir,label:c.rel,...c.dir===abs?{hint:currentHint}:{}}));if(!candidates.some((c)=>c.dir===abs))options.push({value:abs,label:current,hint:currentHint});if(options.length<=1)return null;let chosen=await select({message,options});if(isCancel(chosen))return null;return chosen}import{createHash,randomUUID}from"crypto";import{existsSync as existsSync2,lstatSync,realpathSync}from"fs";import{cp,lstat,mkdir,readdir,readFile as readFile2,rm}from"fs/promises";import{basename,dirname,join as join2,relative as relative2,resolve as resolve2,sep as sep2}from"path";function physicalDestination(path){if(lstatSync(path,{throwIfNoEntry:!1}))return realpathSync(path);let parent=dirname(path);return join2(physicalDestination(parent),relative2(parent,path))}var RUNTIME=[".design/cache",".velloo","node_modules"];async function rebaseDesignConfig(source,destination,appRoot,external){let config=ConfigSchema.parse(JSON.parse(await readFile2(join2(destination,".design/config.json"),"utf8"))),rebase=(path)=>{if(path==="binary"||path.startsWith("~/"))return path;let abs=resolveAppPath(source,path),withinDesign=relative2(source,abs);if(withinDesign===""||withinDesign!==".."&&!withinDesign.startsWith(`..${sep2}`)&&!/^(?:[\\/]|[A-Za-z]:)/.test(withinDesign))return withinDesign.split(sep2).join("/")||".";return external?`${APP_PATH_PREFIX}${relative2(appRoot,abs).split(sep2).join("/")||"."}`:relative2(destination,abs).split(sep2).join("/")||"."};config.hostApp=config.hostApp?{...config.hostApp,root:rebase(config.hostApp.root)}:{root:rebase("..")};for(let app of Object.values(config.hostApps??{}))app.root=rebase(app.root);for(let library of Object.values(config.libraries))if(library.componentsPath)library.componentsPath=rebase(library.componentsPath);await writeJsonAtomic(join2(destination,".design/config.json"),config)}async function fingerprint(folder){let hash=createHash("sha256");async function walk(rel){if(rel===".git"||RUNTIME.some((p)=>rel===p||rel.startsWith(`${p}/`)))return;let path=join2(folder,rel),stat=await lstat(path);if(stat.isSymbolicLink())throw Error(`Cannot relocate symbolic link ${path}. Replace it with its actual design content first.`);if(stat.isDirectory())for(let name of(await readdir(path)).sort())await walk(rel?`${rel}/${name}`:name);else if(stat.isFile())hash.update(rel).update("\x00").update(await readFile2(path));else throw Error(`Unsupported filesystem entry: ${path}`)}return await walk(""),hash.digest("hex")}async function planRelocation(source,cwd,to,external){if(Boolean(to)===external)throw Error("Choose exactly one destination: --external or --to <path>.");let designs=await findDesigns(cwd),physicalSource=realpathSync(source),local=designs?.local.find((design)=>realOr(design.designRoot)===physicalSource),repo=designs?.repo??null,index=repo?.folders.findIndex((path)=>existsSync2(path)&&realpathSync(path)===physicalSource)??-1;if(!local&&index===-1)throw Error("Run relocation from the checkout the design belongs to; the source must be one of its designs.");let root=local?.root??repo?.dir,name=recordedDesignName(source);if(!name)throw Error(`${source} has no design name \u2014 run \`velloo upgrade\` first.`);let physicalRoot=realpathSync(root);if(physicalSource===physicalRoot)throw Error("Cannot relocate the application repository itself. Use a separate design directory.");if(external&&managedDesignId(source))throw Error("This design already lives in managed storage.");let destination=external?managedDesignPath(local?.id??randomUUID()):resolve2(cwd,to??""),physicalTarget=physicalDestination(destination),inRepo=!external&&isWithin(physicalRoot,physicalTarget);if(physicalTarget===physicalSource||physicalTarget.startsWith(physicalSource+sep2)||physicalSource.startsWith(physicalTarget+sep2))throw Error("Source and destination cannot contain each other.");if(existsSync2(destination))throw Error(`Destination is occupied: ${destination}. Choose a new path; nothing was changed.`);let manifestPath=repo?.path??join2(root,"velloo.json"),before=repo?await readFile2(repo.path,"utf8"):null,manifest,destinationManifestPath;if(repo?.legacy)throw Error(`${repo.path} is in the pre-designs format \u2014 run \`velloo upgrade\` first.`);if(inRepo){destinationManifestPath=relative2(physicalRoot,physicalTarget).split(sep2).join("/")||".";let designs=[...repo?.manifest.designs??[]];if(index===-1)designs.push(destinationManifestPath);else designs[index]=destinationManifestPath;manifest={...repo?.manifest??{},designs}}else if(repo&&index!==-1)manifest=withoutDesign(repo.manifest,index,name);let config=ConfigSchema.parse(JSON.parse(await readFile2(join2(source,".design/config.json"),"utf8")));return{source,destination,root,appRoot:local?.appRoot??hostAppRootFrom(source,config.hostApp),designName:name,sourceLocalId:local?.id,sourceManifestPath:index===-1?void 0:repo?.manifest.designs[index],destinationManifestPath,destinationLocal:inRepo?void 0:{id:local?.id??(external?basename(destination):randomUUID()),...external?{}:{designPath:destination}},manifestPath,before,manifest}}function realOr(path){return existsSync2(path)?realpathSync(path):resolve2(path)}async function relocateDesign(plan){await stopDaemon(daemonRoot(plan.source));let original=await fingerprint(plan.source);await mkdir(dirname(plan.destination),{recursive:!0}),await mkdir(plan.destination);let committed=!1;try{for(let entry of await readdir(plan.source))await cp(join2(plan.source,entry),join2(plan.destination,entry),{recursive:!0,errorOnExist:!0,force:!1,filter:(path)=>!RUNTIME.some((p)=>{let rel=relative2(plan.source,path).split(sep2).join("/");return rel===p||rel.startsWith(`${p}/`)})});if(await fingerprint(plan.destination)!==original)throw Error("Copied content did not match the source.");if(await rebaseDesignConfig(plan.source,plan.destination,plan.appRoot,plan.destinationLocal!==void 0),await loadDesignFolder(plan.destination,{preferences:!1}),await fingerprint(plan.source)!==original)throw Error("The source changed during relocation. Close editors and retry.");if(await readFile2(plan.manifestPath,"utf8").catch(()=>null)!==plan.before)throw Error("The manifest changed during relocation. Review it and retry.");if(plan.destinationLocal){if(plan.sourceLocalId&&plan.sourceLocalId!==plan.destinationLocal.id)await removeLocalDesign(plan.sourceLocalId);await writeLocalDesign(plan.destinationLocal.id,{root:plan.root,appRoot:plan.appRoot,...plan.destinationLocal.designPath?{designPath:plan.destinationLocal.designPath}:{}})}else if(plan.sourceLocalId)await removeLocalDesign(plan.sourceLocalId);if(plan.manifest===null)await rm(plan.manifestPath,{force:!0});else if(plan.manifest)await writeJsonAtomic(plan.manifestPath,plan.manifest);committed=!0}finally{if(!committed)await rm(plan.destination,{recursive:!0,force:!0})}try{await rm(plan.source,{recursive:!0})}catch(error){throw Error(`Relocation completed to ${plan.destination}, but the old copy remains at ${plan.source}. Remove it after checking the destination. ${error}`)}}var import_picocolors=__toESM(require_picocolors(),1);async function offerUpgradeBeforeInit(argv){if(process.env.VELLOO_DISABLE_UPDATE_CHECK==="1"||!process.stdin.isTTY)return!1;let status;try{status=await updateStatus({refresh:!0})}catch{return!1}if(!status.available||!status.upgradable||!status.latest)return!1;console.log(""),console.log(`${import_picocolors.default.yellow("A newer velloo is available:")} ${status.current} \u2192 ${import_picocolors.default.bold(status.latest)}`);let yes=await confirm({message:"Upgrade before setting up this design folder?",initialValue:!0});if(isCancel(yes)||!yes)return console.log(import_picocolors.default.dim(" Continuing on the current version.")),!1;try{if(!(await upgradeInstalledVelloo()).upgraded)return!1;let bin=installedVellooBin();if(!bin)return console.log(import_picocolors.default.dim(" Upgraded. Run `velloo init` again to continue on the new version.")),!0;let code=await Bun.spawn([bin,...argv],{stdin:"inherit",stdout:"inherit",stderr:"inherit",env:{...process.env,VELLOO_DISABLE_UPDATE_CHECK:"1"}}).exited;process.exit(code)}catch(error){return console.log(import_picocolors.default.yellow(` Could not upgrade (${error instanceof Error?error.message:String(error)}) \u2014 continuing on the current version.`)),!1}}import{resolve as resolve3}from"path";var START_TO_CONTENT={"redesign-screen":"redesign-screen","redesign-component":"component",custom:"custom",sample:"sample",blank:"blank",scratch:"sample",scan:"scan"};function isValidLibraryId(v){return LIBRARY_IDS.includes(v)}function isValidContent(v){return v==="sample"||v==="blank"||v==="scan"||v==="redesign-screen"||v==="component"||v==="custom"}function isValidStart(v){return v in START_TO_CONTENT}function shouldRunWizard(args,stdinIsTTY){if(args.nonInteractive)return!1;return stdinIsTTY}function answersFromArgs(args){if(args.library&&!isValidLibraryId(args.library))throw Error(`unknown --library ${JSON.stringify(args.library)}. Valid: ${LIBRARY_IDS.join(" | ")}.`);if(args.start&&!isValidStart(args.start))throw Error(`unknown --start ${JSON.stringify(args.start)}. Valid: redesign-screen | redesign-component | custom | sample | blank | scan.`);if(args.initialContent&&!isValidContent(args.initialContent))throw Error(`unknown --initial-content ${JSON.stringify(args.initialContent)}. Valid: sample | blank | scan | redesign-screen | component | custom.`);let themePreset=args.themePreset?.trim()||void 0;if(themePreset&&!isValidPreset(themePreset))throw Error(`unknown --theme-preset ${JSON.stringify(args.themePreset)}.`);let stack=args.stack?.trim()||void 0;if(stack&&!isValidStack(stack))throw Error(`unknown --stack ${JSON.stringify(args.stack)}. Valid: nextjs | vite | astro | remix.`);let appRoot=resolve3(args.folder??"."),folder=resolve3(appRoot,args.designFolder??"velloo"),library=args.library??DEFAULT_LIBRARY_ID,initialContent=args.initialContent??"sample";if(args.start)initialContent=START_TO_CONTENT[args.start]??initialContent;let screenName=args.screenName?.trim()||void 0,componentDescription=args.component?.trim()||void 0,customRequest=args.request?.trim()||void 0;if(initialContent==="component"&&!componentDescription)throw Error("--component is required for --start=redesign-component.");if(initialContent==="custom"&&!customRequest)throw Error("--request is required for --start=custom.");if(initialContent==="redesign-screen"&&!screenName&&args.start==="redesign-screen");let source=WIZARD_PROVIDERS[library].defaultSource;return{appRoot,scanRoot:appRoot,folder,library,source,componentsRelative:args.componentsDir??findComponentsDir(appRoot)??"src/components/ui",initialContent,themePreset,...args.designMd===!1?{useDesignMd:!1}:{},...stack?{stack}:{},...screenName?{screenName}:{},...componentDescription?{componentDescription}:{},...customRequest?{customRequest}:{}}}import{relative as relative3,sep as sep3}from"path";var SCREENS_PLACEHOLDER="{{screens}}";function appContext(answers){let appRels=[...new Set((answers.selectedRoutes??[]).map((r)=>r.appRel).filter(Boolean))];if(appRels.length>1)return[`It's a monorepo with ${appRels.length} apps (${appRels.map((r)=>`\`${r}\``).join(", ")}), one board each.`];let uiRel=relative3(answers.appRoot,answers.scanRoot).split(sep3).join("/");return uiRel&&!uiRel.startsWith("..")?[`The app lives in \`${uiRel}/\`.`]:[]}var SETUP="Set Velloo up for my app (theme, fonts, components).",RECREATE_BAR="keep fixing `compare_to_url`'s top mismatches and don't stop below 0.9. Start the app yourself.",ALTERNATIVES="Explore a few different directions beside it on the same board.";function steps(answers,...rest){return[...hasAppToMatch(answers)?[SETUP]:[],...rest].map((step,i)=>`${i+1}. ${step}`)}function wantsHandoff(answers){switch(answers.initialContent){case"scan":case"redesign-screen":case"component":case"custom":return!0;default:return!1}}function buildHandoffPrompt(answers,screens){return[...goalLines(answers,screens),...appContext(answers)].join(`
3
3
  `)}function goalLines(answers,screens){switch(answers.initialContent){case"redesign-screen":return[`Use Velloo to redesign **${answers.screenName?.trim()||screens[0]?.name||screens[0]?.id||"the chosen screen"}**:`,...steps(answers,`Recreate the whole real page on its scaffolded screen \u2014 ${RECREATE_BAR}`,ALTERNATIVES)];case"component":return[`Use Velloo to redesign **${answers.componentDescription?.trim()||"the component"}**:`,...steps(answers,`Recreate it on the scaffolded board \u2014 ${RECREATE_BAR}`,ALTERNATIVES)];case"custom":return["Use Velloo to design this, with alternative directions side by side on the board:","",answers.customRequest?.trim()||"the design I described",...answers.captureUrl?["",`It's based on ${answers.captureUrl}: capture it with \`start_capture_session\` first \u2014 I'll sign in if needed.`]:hasAppToMatch(answers)?["",`First: ${SETUP}`]:[]];default:return[`Use Velloo to recreate my app's pages, ${screens.length>0?"one scaffolded screen each:":"one screen per route:"}`,...screens.length>0?[SCREENS_PLACEHOLDER]:[],...steps(answers,`Recreate each page top to bottom, the most important first \u2014 ${RECREATE_BAR}`,"Each screen has a desktop and a mobile frame; make both hold up.")]}}function expandHandoffPrompt(prompt,screens){if(!prompt.includes(SCREENS_PLACEHOLDER))return prompt;let list=screens.map((s)=>` - ${s.name||s.id}`).join(`
4
4
  `);return prompt.split(SCREENS_PLACEHOLDER).join(list)}import{readFile as readFile3,rm as rm2,writeFile}from"fs/promises";import{tmpdir}from"os";import{join as join3}from"path";var import_picocolors2=__toESM(require_picocolors(),1);function detectEditor(){let env=(process.env.VISUAL||process.env.EDITOR||"").trim();if(env){let parts=env.split(/\s+/);if(parts[0]&&Bun.which(parts[0]))return parts}for(let cand of["nano","vim","vi"])if(Bun.which(cand))return[cand];return["vi"]}async function editPrompt(prompt){let file=join3(tmpdir(),`velloo-handoff-${process.pid}-${Date.now()}.md`);await writeFile(file,prompt,"utf8");let editor=detectEditor();try{return await Bun.spawn([...editor,file],{stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited,(await readFile3(file,"utf8")).trim()}catch{return null}finally{await rm2(file,{force:!0})}}var AGENT_LAUNCHERS=[{bin:"claude",label:"Claude Code",agentIds:["claude-code","claude-code-global"],argv:(p)=>["claude",p]},{bin:"cursor-agent",label:"Cursor CLI",agentIds:["cursor","cursor-global"],argv:(p)=>["cursor-agent",p]},{bin:"codex",label:"Codex CLI",agentIds:["codex","codex-global"],argv:(p)=>["codex",p]},{bin:"opencode",label:"opencode",agentIds:["opencode","opencode-global"],argv:(p)=>["opencode","--prompt",p]},{bin:"droid",label:"Droid",agentIds:["droid-global"],argv:(p)=>["droid",p]},{bin:"cline",label:"Cline",agentIds:["cline-global"],argv:(p)=>["cline",p]},{bin:"gemini",label:"Gemini CLI",agentIds:["gemini","gemini-global"],argv:(p)=>["gemini","-i",p]}];async function printAgentHandoff(answers,scaffold,interactive,wiredIds){if(!wantsHandoff(answers))return;let{screens}=scaffold,prompt=buildHandoffPrompt(answers,screens);console.log(import_picocolors2.default.bold(" Start your agent")),console.log(import_picocolors2.default.dim(" Paste this to your AI agent:")),console.log("");for(let line of prompt.split(`
5
5
  `))console.log(import_picocolors2.default.cyan(` ${line}`));if(prompt.includes(SCREENS_PLACEHOLDER))console.log(""),console.log(import_picocolors2.default.dim(` ${SCREENS_PLACEHOLDER} is replaced with your selected screens when the prompt is sent (an agent can also discover them with list_screens).`));if(console.log(""),!interactive)return;let launchers=AGENT_LAUNCHERS.filter((l)=>Bun.which(l.bin)&&l.agentIds.some((id)=>wiredIds.includes(id))),first=launchers[0],action=await select({message:first?"Start velloo and launch your agent to do this now?":"No wired agent CLI to launch \u2014 what next?",options:[...launchers.map((l)=>({value:`launch:${l.bin}`,label:`Yes \u2014 launch ${l.label} with this prompt`})),...first?[{value:"edit",label:"Edit the prompt first",hint:`opens ${detectEditor()[0]??"your editor"}`}]:[],{value:"copy",label:"Copy the prompt to my clipboard"},{value:"skip",label:first?"No \u2014 I'll run it later":"Skip"}],initialValue:first?`launch:${first.bin}`:"copy"});if(isCancel(action)||action==="skip")return;if(action==="copy"){let copied=await copyToClipboard(expandHandoffPrompt(prompt,screens));console.log(copied?` ${import_picocolors2.default.green("\u2713")} Prompt copied \u2014 paste it into your agent.`:import_picocolors2.default.dim(" Couldn't reach a clipboard tool \u2014 copy the prompt printed above."));return}let finalPrompt=prompt,launcher=first;if(action.startsWith("launch:"))launcher=launchers.find((l)=>`launch:${l.bin}`===action);else{let edited=await editPrompt(prompt);if(edited===null){console.error(" Couldn't open an editor. Set $EDITOR and retry, or copy the prompt above.");return}if(edited===""){console.log(import_picocolors2.default.dim(" Prompt was emptied \u2014 nothing launched."));return}if(finalPrompt=edited,launchers.length>1){let pick=await select({message:"Launch which agent?",options:launchers.map((l)=>({value:l.bin,label:l.label})),...launchers[0]?{initialValue:launchers[0].bin}:{}});if(isCancel(pick))return;launcher=launchers.find((l)=>l.bin===pick)}}if(!launcher)return;finalPrompt=expandHandoffPrompt(finalPrompt,screens);let canvasUrl;try{canvasUrl=(await ensureDaemon(answers.folder)).canvasUrl}catch(err){console.error(` Couldn't start the canvas (${err.message}). Run \`velloo run ${answers.folder}\` yourself, then paste the prompt above.`);return}let openCanvas=await confirm({message:"Open the board in your browser to watch? (your agent runs here in this terminal and may ask for MCP approval first)",initialValue:!0});if(!isCancel(openCanvas)&&openCanvas)await openUrl(canvasUrl);console.log(""),console.log(` Canvas running at ${import_picocolors2.default.cyan(canvasUrl)}.`),console.log(import_picocolors2.default.dim(` Launching ${launcher.label} here \u2014 it may ask you to approve the velloo MCP server first.`)),await Bun.spawn(launcher.argv(finalPrompt),{stdout:"inherit",stderr:"inherit",stdin:"inherit"}).exited}var import_picocolors3=__toESM(require_picocolors(),1),RGB={amber:[255,171,31],coral:[255,111,77]},ANSI256={amber:214,coral:209},TAGLINE="Design like a developer. Build like a designer.",V=[" "," ","oooo ooo"," `88. .8' "," `88..8' "," `888' "," `8' "],E=[" "," "," .ooooo. ","d88' `88b","888ooo888","888 .o","`Y8bod8P'"],L=["oooo ","`888 "," 888 "," 888 "," 888 "," 888 ","o888o"],O=[" "," "," .ooooo. ","d88' `88b","888 888","888 888","`Y8bod8P'"],MARK=[" .o8888888o. ","d88 88b ","88 .o8888888o. ","88 d88 88 88b","88 88 88 88","Y88 88 88P 88"," `o8888888P' 88"," Y88 88P"," `o8888888P' "],MARK_OWN=[" ccccccccccc ","ccc ccc ","cc aaaaaccaaaa ","cc aaa cc aaa","cc aa cc aa","ccc aa ccc aa"," ccccaaccccc aa"," aaa aaa"," aaaaaaaaaaa "];function supportsTruecolor(){let colorterm=process.env.COLORTERM??"";if(/truecolor|24bit/i.test(colorterm))return!0;if(process.env.TERM_PROGRAM==="Apple_Terminal")return!1;let program=process.env.TERM_PROGRAM??"";if(["iTerm.app","vscode","ghostty","WarpTerminal","WezTerm"].includes(program))return!0;return/truecolor|-direct$/i.test(process.env.TERM??"")}function paint(frame,text){if(!text||!import_picocolors3.default.isColorSupported)return text;if(supportsTruecolor()){let[r,g,b]=RGB[frame];return`\x1B[38;2;${r};${g};${b}m${text}\x1B[39m`}return`\x1B[38;5;${ANSI256[frame]}m${text}\x1B[39m`}function paintMarkRow(chars,owners){let out="",i=0;while(i<chars.length){let who=owners[i],j=i+1;while(j<owners.length&&owners[j]===who)j++;let slice=chars.slice(i,j);out+=who==="c"?paint("coral",slice):who==="a"?paint("amber",slice):slice,i=j}return out}function renderLogo(){return[...MARK.map((chars,i)=>{let mark=paintMarkRow(chars,MARK_OWN[i]??""),k=i-1,v=V[k],o=O[k],right=v===void 0||o===void 0?"":` ${import_picocolors3.default.bold(`${v}${E[k]}${L[k]}${L[k]}`)}${paint("amber",o)} ${paint("coral",o)}`;return` ${mark}${right}`}),""," "+import_picocolors3.default.dim(TAGLINE)].join(`
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{COMMANDS}from"./chunk-32cq4wpr.js";var SHELLS=["zsh","bash","fish"],zshName=(name)=>name.replace(/\\/g,"\\\\").replace(/:/g,"\\:");function zshArguments(c,indent){let flagSpecs=c.flags.map((f)=>`${indent} '${f.flag}${f.takesValue?"=":""}[${f.description}]'`).join(" \\\n");return flagSpecs?`${indent}_arguments \\
2
+ import{COMMANDS}from"./chunk-seaar5na.js";import{existsSync}from"fs";import{appendFile,mkdir,readFile,writeFile}from"fs/promises";import{homedir}from"os";import{basename,dirname,join,sep}from"path";var SHELLS=["zsh","bash","fish"],zshName=(name)=>name.replace(/\\/g,"\\\\").replace(/:/g,"\\:");function zshArguments(c,indent){let flagSpecs=c.flags.map((f)=>`${indent} '${f.flag}${f.takesValue?"=":""}[${f.description}]'`).join(" \\\n");return flagSpecs?`${indent}_arguments \\
3
3
  ${flagSpecs} \\
4
4
  ${indent} '*:file:_files'`:`${indent}_files`}function zshScript(specs){let commandLines=specs.map((c)=>` '${zshName(c.name)}:${c.description}'`).join(`
5
5
  `),cases=specs.map((c)=>{if(c.subcommands.length===0)return` ${c.name})
@@ -79,7 +79,7 @@ complete -o default -F _velloo velloo
79
79
  `}function fishFlags(c,condition){return c.flags.map((f)=>{let long=f.flag.replace(/^--/,"");return`complete -c velloo -n "${condition}" -l ${long}${f.takesValue?" -r":""} -d "${f.description}"`})}function fishScript(specs){let lines=["# velloo shell completions (fish) \u2014 generated by `velloo completions`.","function __velloo_is"," set -l words"," for token in (commandline -opc)[2..-1]"," string match -q -- '-*' $token; or set -a words $token"," end",' test "$words[1]" = "$argv[1]"; or return 1'," test (count $argv) -lt 2; and return 0",' test "$words[2]" = "$argv[2]"',"end","function __velloo_words"," set -l words"," for token in (commandline -opc)[2..-1]"," string match -q -- '-*' $token; or set -a words $token"," end"," count $words","end"];for(let c of specs){if(lines.push(`complete -c velloo -f -n "__fish_use_subcommand" -a "${c.name}" -d "${c.description}"`),c.subcommands.length===0){lines.push(...fishFlags(c,`__velloo_is ${c.name}`));continue}for(let sub of c.subcommands)lines.push(`complete -c velloo -f -n "__velloo_is ${c.name}; and test (__velloo_words) -eq 1" -a "${sub.name}" -d "${sub.description}"`),lines.push(...fishFlags(sub,`__velloo_is ${c.name} ${sub.name}`));let notSub=c.subcommands.map((sub)=>`; and not __velloo_is ${c.name} ${sub.name}`).join("");lines.push(...fishFlags(c,`__velloo_is ${c.name}${notSub}`))}return`${lines.join(`
80
80
  `)}
81
81
  `}function completionScript(shell,specs){switch(shell){case"zsh":return zshScript(specs);case"bash":return bashScript(specs);case"fish":return fishScript(specs)}}async function resolvable(value){return typeof value==="function"?await value():value}var kebab=(name)=>name.replace(/[A-Z]/g,(c)=>`-${c.toLowerCase()}`);function sanitize(desc){return(desc??"").split(`
82
- `)[0]?.replace(/['"[\]:`$\\]/g,"").trim()??""}function flagSpecs(args){let flags=[];for(let[argName,def]of Object.entries(args)){if(def.type==="positional")continue;let isBool=def.type==="boolean",negated=isBool&&def.default===!0;flags.push({flag:negated?`--no-${kebab(argName)}`:`--${kebab(argName)}`,description:sanitize(def.description),takesValue:!isBool})}return flags}async function commandSpec(name,load,depth){let cmd,meta,args;try{cmd=await resolvable(load),meta=cmd.meta?await resolvable(cmd.meta):void 0,args=cmd.args?await resolvable(cmd.args):{}}catch{return null}if(meta?.hidden)return null;let subcommands=[];if(depth===0&&cmd.subCommands)for(let[child,loadChild]of Object.entries(await resolvable(cmd.subCommands))){let spec=await commandSpec(child,loadChild,depth+1);if(spec)subcommands.push(spec)}return{name,description:sanitize(meta?.description),flags:flagSpecs(args),subcommands}}async function commandSpecs(){let out=[];for(let[name,load]of Object.entries(COMMANDS)){if(name.startsWith("__"))continue;let spec=await commandSpec(name,load,0);if(spec)out.push(spec)}return out}import{existsSync}from"fs";import{appendFile,mkdir,readFile,writeFile}from"fs/promises";import{homedir}from"os";import{basename,dirname,join,sep}from"path";function detectShell(env=process.env){let name=basename(env.SHELL??"");return SHELLS.includes(name)?name:null}var RC_MARKER="# velloo completions";function targets(shell,homeDir){switch(shell){case"zsh":return{scriptPath:join(homeDir,".velloo","completions","velloo.zsh"),rcPath:join(homeDir,".zshrc")};case"bash":return{scriptPath:join(homeDir,".velloo","completions","velloo.bash"),rcPath:join(homeDir,".bashrc")};case"fish":return{scriptPath:join(homeDir,".config","fish","completions","velloo.fish")}}}function completionsInstalled(homeDir=homedir(),shell){return(shell?[shell]:SHELLS).some((s)=>existsSync(targets(s,homeDir).scriptPath))}async function installCompletions(shell,homeDir=homedir()){let{scriptPath,rcPath}=targets(shell,homeDir),script=completionScript(shell,await commandSpecs());await mkdir(dirname(scriptPath),{recursive:!0}),await writeFile(scriptPath,script);let rcUpdated=!1;if(rcPath){let rc=await readFile(rcPath,"utf8").catch(()=>"");if(!rc.includes(RC_MARKER)){let rel=scriptPath.slice(homeDir.length+1).split(sep).join("/"),line=`[ -f "$HOME/${rel}" ] && source "$HOME/${rel}" ${RC_MARKER}`;await appendFile(rcPath,`${rc.endsWith(`
82
+ `)[0]?.replace(/['"[\]:`$\\]/g,"").trim()??""}function flagSpecs(args){let flags=[];for(let[argName,def]of Object.entries(args)){if(def.type==="positional")continue;let isBool=def.type==="boolean",negated=isBool&&def.default===!0;flags.push({flag:negated?`--no-${kebab(argName)}`:`--${kebab(argName)}`,description:sanitize(def.description),takesValue:!isBool})}return flags}async function commandSpec(name,load,depth){let cmd,meta,args;try{cmd=await resolvable(load),meta=cmd.meta?await resolvable(cmd.meta):void 0,args=cmd.args?await resolvable(cmd.args):{}}catch{return null}if(meta?.hidden)return null;let subcommands=[];if(depth===0&&cmd.subCommands)for(let[child,loadChild]of Object.entries(await resolvable(cmd.subCommands))){let spec=await commandSpec(child,loadChild,depth+1);if(spec)subcommands.push(spec)}return{name,description:sanitize(meta?.description),flags:flagSpecs(args),subcommands}}async function commandSpecs(){let out=[];for(let[name,load]of Object.entries(COMMANDS)){if(name.startsWith("__"))continue;let spec=await commandSpec(name,load,0);if(spec)out.push(spec)}return out}function detectShell(env=process.env){let name=basename(env.SHELL??"");return SHELLS.includes(name)?name:null}var RC_MARKER="# velloo completions";function targets(shell,homeDir){switch(shell){case"zsh":return{scriptPath:join(homeDir,".velloo","completions","velloo.zsh"),rcPath:join(homeDir,".zshrc")};case"bash":return{scriptPath:join(homeDir,".velloo","completions","velloo.bash"),rcPath:join(homeDir,".bashrc")};case"fish":return{scriptPath:join(homeDir,".config","fish","completions","velloo.fish")}}}function completionsInstalled(homeDir=homedir(),shell){return(shell?[shell]:SHELLS).some((s)=>existsSync(targets(s,homeDir).scriptPath))}async function installCompletions(shell,homeDir=homedir()){let{scriptPath,rcPath}=targets(shell,homeDir),script=completionScript(shell,await commandSpecs());await mkdir(dirname(scriptPath),{recursive:!0}),await writeFile(scriptPath,script);let rcUpdated=!1;if(rcPath){let rc=await readFile(rcPath,"utf8").catch(()=>"");if(!rc.includes(RC_MARKER)){let rel=scriptPath.slice(homeDir.length+1).split(sep).join("/"),line=`[ -f "$HOME/${rel}" ] && source "$HOME/${rel}" ${RC_MARKER}`;await appendFile(rcPath,`${rc.endsWith(`
83
83
  `)||rc===""?"":`
84
84
  `}${line}
85
85
  `),rcUpdated=!0}}return{shell,scriptPath,rcPath,rcUpdated}}
@@ -1,3 +1,3 @@
1
1
  // @bun
2
- import{recordedDesignName}from"./chunk-9g45c5md.js";import{displayPath}from"./chunk-45wv1fs5.js";import{basename,relative,resolve}from"path";function designWithFolder(folder,name,opts={}){let shown=name??recordedDesignName(folder)??basename(folder),rel=relative(resolve("."),folder),where=rel!==""&&!rel.startsWith("..")&&!opts.absolute?`./${rel}`:displayPath(folder);return`"${shown}" (${where})`}
2
+ import{recordedDesignName}from"./chunk-yp39f93e.js";import{displayPath}from"./chunk-02gpgqj4.js";import{basename,relative,resolve}from"path";function designWithFolder(folder,name,opts={}){let shown=name??recordedDesignName(folder)??basename(folder),rel=relative(resolve("."),folder),where=rel!==""&&!rel.startsWith("..")&&!opts.absolute?`./${rel}`:displayPath(folder);return`"${shown}" (${where})`}
3
3
  export{designWithFolder};
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{helpersRegistry,parse_default,formatRgb,helperSourcePath}from"./chunk-9g45c5md.js";import{sanitizeCssTokenValue,resolveColors,DEFAULT_TYPESET_NAME,typesetScale}from"./chunk-xxw67jpk.js";import{require_react_is_development,require_object_assign,require_emotion_serialize_development_cjs,$_default,import_emotion_react_development_cjs,$_default2,$_default3}from"./chunk-ejpccmcj.js";import{SX_PROP,catalogFromManifest,require_react_development,require_react_dom}from"./chunk-xg49s85z.js";import{__toESM,__commonJS}from"./chunk-2smsg2ct.js";import{MUI_VERSION}from"./chunk-mzhdrawd.js";import{_objectWithoutPropertiesLoose,_extends,_assertThisInitialized,_setPrototypeOf}from"./chunk-h6gchare.js";import{resolveProviderSrcDir}from"./chunk-v6c3h9ft.js";import{require_react_jsx_runtime_development}from"./chunk-8ztgcajz.js";var require_ReactPropTypesSecret=__commonJS(function(exports,module){var ReactPropTypesSecret="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";module.exports=ReactPropTypesSecret});var require_has=__commonJS(function(exports,module){module.exports=Function.call.bind(Object.prototype.hasOwnProperty)});var require_checkPropTypes=__commonJS(function(exports,module){var printWarning=function(){};ReactPropTypesSecret=require_ReactPropTypesSecret(),loggedTypeFailures={},has=require_has(),printWarning=function(text){var message="Warning: "+text;if(typeof console<"u")console.error(message);try{throw Error(message)}catch(x){}};var ReactPropTypesSecret,loggedTypeFailures,has;function checkPropTypes(typeSpecs,values,location,componentName,getStack){for(var typeSpecName in typeSpecs)if(has(typeSpecs,typeSpecName)){var error;try{if(typeof typeSpecs[typeSpecName]!=="function"){var err=Error((componentName||"React class")+": "+location+" type `"+typeSpecName+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof typeSpecs[typeSpecName]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw err.name="Invariant Violation",err}error=typeSpecs[typeSpecName](values,typeSpecName,componentName,location,null,ReactPropTypesSecret)}catch(ex){error=ex}if(error&&!(error instanceof Error))printWarning((componentName||"React class")+": type specification of "+location+" `"+typeSpecName+"` is invalid; the type checker function must return `null` or an `Error` but returned a "+typeof error+". You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).");if(error instanceof Error&&!(error.message in loggedTypeFailures)){loggedTypeFailures[error.message]=!0;var stack=getStack?getStack():"";printWarning("Failed "+location+" type: "+error.message+(stack!=null?stack:""))}}}checkPropTypes.resetWarningCache=function(){loggedTypeFailures={}};module.exports=checkPropTypes});var require_factoryWithTypeCheckers=__commonJS(function(exports,module){var ReactIs=__toESM(require_react_is_development()),assign=require_object_assign(),ReactPropTypesSecret=require_ReactPropTypesSecret(),has=require_has(),checkPropTypes=require_checkPropTypes(),printWarning=function(){};printWarning=function(text){var message="Warning: "+text;if(typeof console<"u")console.error(message);try{throw Error(message)}catch(x){}};function emptyFunctionThatReturnsNull(){return null}module.exports=function(isValidElement,throwOnDirectAccess){var ITERATOR_SYMBOL=typeof Symbol==="function"&&Symbol.iterator,FAUX_ITERATOR_SYMBOL="@@iterator";function getIteratorFn(maybeIterable){var iteratorFn=maybeIterable&&(ITERATOR_SYMBOL&&maybeIterable[ITERATOR_SYMBOL]||maybeIterable[FAUX_ITERATOR_SYMBOL]);if(typeof iteratorFn==="function")return iteratorFn}var ANONYMOUS="<<anonymous>>",ReactPropTypes={array:createPrimitiveTypeChecker("array"),bigint:createPrimitiveTypeChecker("bigint"),bool:createPrimitiveTypeChecker("boolean"),func:createPrimitiveTypeChecker("function"),number:createPrimitiveTypeChecker("number"),object:createPrimitiveTypeChecker("object"),string:createPrimitiveTypeChecker("string"),symbol:createPrimitiveTypeChecker("symbol"),any:createAnyTypeChecker(),arrayOf:createArrayOfTypeChecker,element:createElementTypeChecker(),elementType:createElementTypeTypeChecker(),instanceOf:createInstanceTypeChecker,node:createNodeChecker(),objectOf:createObjectOfTypeChecker,oneOf:createEnumTypeChecker,oneOfType:createUnionTypeChecker,shape:createShapeTypeChecker,exact:createStrictShapeTypeChecker};function is(x,y){if(x===y)return x!==0||1/x===1/y;else return x!==x&&y!==y}function PropTypeError(message,data){this.message=message,this.data=data&&typeof data==="object"?data:{},this.stack=""}PropTypeError.prototype=Error.prototype;function createChainableTypeChecker(validate){var manualPropTypeCallCache={},manualPropTypeWarningCount=0;function checkType(isRequired,props,propName,componentName,location,propFullName,secret){if(componentName=componentName||ANONYMOUS,propFullName=propFullName||propName,secret!==ReactPropTypesSecret){if(throwOnDirectAccess){var err=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use `PropTypes.checkPropTypes()` to call them. Read more at http://fb.me/use-check-prop-types");throw err.name="Invariant Violation",err}else if(typeof console<"u"){var cacheKey=componentName+":"+propName;if(!manualPropTypeCallCache[cacheKey]&&manualPropTypeWarningCount<3)printWarning("You are manually calling a React.PropTypes validation function for the `"+propFullName+"` prop on `"+componentName+"`. This is deprecated and will throw in the standalone `prop-types` package. You may be seeing this warning due to a third-party PropTypes library. See https://fb.me/react-warning-dont-call-proptypes for details."),manualPropTypeCallCache[cacheKey]=!0,manualPropTypeWarningCount++}}if(props[propName]==null){if(isRequired){if(props[propName]===null)return new PropTypeError("The "+location+" `"+propFullName+"` is marked as required "+("in `"+componentName+"`, but its value is `null`."));return new PropTypeError("The "+location+" `"+propFullName+"` is marked as required in "+("`"+componentName+"`, but its value is `undefined`."))}return null}else return validate(props,propName,componentName,location,propFullName)}var chainedCheckType=checkType.bind(null,!1);return chainedCheckType.isRequired=checkType.bind(null,!0),chainedCheckType}function createPrimitiveTypeChecker(expectedType){function validate(props,propName,componentName,location,propFullName,secret){var propValue=props[propName],propType=getPropType(propValue);if(propType!==expectedType){var preciseType=getPreciseType(propValue);return new PropTypeError("Invalid "+location+" `"+propFullName+"` of type "+("`"+preciseType+"` supplied to `"+componentName+"`, expected ")+("`"+expectedType+"`."),{expectedType})}return null}return createChainableTypeChecker(validate)}function createAnyTypeChecker(){return createChainableTypeChecker(emptyFunctionThatReturnsNull)}function createArrayOfTypeChecker(typeChecker){function validate(props,propName,componentName,location,propFullName){if(typeof typeChecker!=="function")return new PropTypeError("Property `"+propFullName+"` of component `"+componentName+"` has invalid PropType notation inside arrayOf.");var propValue=props[propName];if(!Array.isArray(propValue)){var propType=getPropType(propValue);return new PropTypeError("Invalid "+location+" `"+propFullName+"` of type "+("`"+propType+"` supplied to `"+componentName+"`, expected an array."))}for(var i=0;i<propValue.length;i++){var error=typeChecker(propValue,i,componentName,location,propFullName+"["+i+"]",ReactPropTypesSecret);if(error instanceof Error)return error}return null}return createChainableTypeChecker(validate)}function createElementTypeChecker(){function validate(props,propName,componentName,location,propFullName){var propValue=props[propName];if(!isValidElement(propValue)){var propType=getPropType(propValue);return new PropTypeError("Invalid "+location+" `"+propFullName+"` of type "+("`"+propType+"` supplied to `"+componentName+"`, expected a single ReactElement."))}return null}return createChainableTypeChecker(validate)}function createElementTypeTypeChecker(){function validate(props,propName,componentName,location,propFullName){var propValue=props[propName];if(!ReactIs.isValidElementType(propValue)){var propType=getPropType(propValue);return new PropTypeError("Invalid "+location+" `"+propFullName+"` of type "+("`"+propType+"` supplied to `"+componentName+"`, expected a single ReactElement type."))}return null}return createChainableTypeChecker(validate)}function createInstanceTypeChecker(expectedClass){function validate(props,propName,componentName,location,propFullName){if(!(props[propName]instanceof expectedClass)){var expectedClassName=expectedClass.name||ANONYMOUS,actualClassName=getClassName(props[propName]);return new PropTypeError("Invalid "+location+" `"+propFullName+"` of type "+("`"+actualClassName+"` supplied to `"+componentName+"`, expected ")+("instance of `"+expectedClassName+"`."))}return null}return createChainableTypeChecker(validate)}function createEnumTypeChecker(expectedValues){if(!Array.isArray(expectedValues)){if(arguments.length>1)printWarning("Invalid arguments supplied to oneOf, expected an array, got "+arguments.length+" arguments. A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).");else printWarning("Invalid argument supplied to oneOf, expected an array.");return emptyFunctionThatReturnsNull}function validate(props,propName,componentName,location,propFullName){var propValue=props[propName];for(var i=0;i<expectedValues.length;i++)if(is(propValue,expectedValues[i]))return null;var valuesString=JSON.stringify(expectedValues,function(key,value){var type=getPreciseType(value);if(type==="symbol")return String(value);return value});return new PropTypeError("Invalid "+location+" `"+propFullName+"` of value `"+String(propValue)+"` "+("supplied to `"+componentName+"`, expected one of "+valuesString+"."))}return createChainableTypeChecker(validate)}function createObjectOfTypeChecker(typeChecker){function validate(props,propName,componentName,location,propFullName){if(typeof typeChecker!=="function")return new PropTypeError("Property `"+propFullName+"` of component `"+componentName+"` has invalid PropType notation inside objectOf.");var propValue=props[propName],propType=getPropType(propValue);if(propType!=="object")return new PropTypeError("Invalid "+location+" `"+propFullName+"` of type "+("`"+propType+"` supplied to `"+componentName+"`, expected an object."));for(var key in propValue)if(has(propValue,key)){var error=typeChecker(propValue,key,componentName,location,propFullName+"."+key,ReactPropTypesSecret);if(error instanceof Error)return error}return null}return createChainableTypeChecker(validate)}function createUnionTypeChecker(arrayOfTypeCheckers){if(!Array.isArray(arrayOfTypeCheckers))return printWarning("Invalid argument supplied to oneOfType, expected an instance of array."),emptyFunctionThatReturnsNull;for(var i=0;i<arrayOfTypeCheckers.length;i++){var checker=arrayOfTypeCheckers[i];if(typeof checker!=="function")return printWarning("Invalid argument supplied to oneOfType. Expected an array of check functions, but received "+getPostfixForTypeWarning(checker)+" at index "+i+"."),emptyFunctionThatReturnsNull}function validate(props,propName,componentName,location,propFullName){var expectedTypes=[];for(var i=0;i<arrayOfTypeCheckers.length;i++){var checker=arrayOfTypeCheckers[i],checkerResult=checker(props,propName,componentName,location,propFullName,ReactPropTypesSecret);if(checkerResult==null)return null;if(checkerResult.data&&has(checkerResult.data,"expectedType"))expectedTypes.push(checkerResult.data.expectedType)}var expectedTypesMessage=expectedTypes.length>0?", expected one of type ["+expectedTypes.join(", ")+"]":"";return new PropTypeError("Invalid "+location+" `"+propFullName+"` supplied to "+("`"+componentName+"`"+expectedTypesMessage+"."))}return createChainableTypeChecker(validate)}function createNodeChecker(){function validate(props,propName,componentName,location,propFullName){if(!isNode(props[propName]))return new PropTypeError("Invalid "+location+" `"+propFullName+"` supplied to "+("`"+componentName+"`, expected a ReactNode."));return null}return createChainableTypeChecker(validate)}function invalidValidatorError(componentName,location,propFullName,key,type){return new PropTypeError((componentName||"React class")+": "+location+" type `"+propFullName+"."+key+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+type+"`.")}function createShapeTypeChecker(shapeTypes){function validate(props,propName,componentName,location,propFullName){var propValue=props[propName],propType=getPropType(propValue);if(propType!=="object")return new PropTypeError("Invalid "+location+" `"+propFullName+"` of type `"+propType+"` "+("supplied to `"+componentName+"`, expected `object`."));for(var key in shapeTypes){var checker=shapeTypes[key];if(typeof checker!=="function")return invalidValidatorError(componentName,location,propFullName,key,getPreciseType(checker));var error=checker(propValue,key,componentName,location,propFullName+"."+key,ReactPropTypesSecret);if(error)return error}return null}return createChainableTypeChecker(validate)}function createStrictShapeTypeChecker(shapeTypes){function validate(props,propName,componentName,location,propFullName){var propValue=props[propName],propType=getPropType(propValue);if(propType!=="object")return new PropTypeError("Invalid "+location+" `"+propFullName+"` of type `"+propType+"` "+("supplied to `"+componentName+"`, expected `object`."));var allKeys=assign({},props[propName],shapeTypes);for(var key in allKeys){var checker=shapeTypes[key];if(has(shapeTypes,key)&&typeof checker!=="function")return invalidValidatorError(componentName,location,propFullName,key,getPreciseType(checker));if(!checker)return new PropTypeError("Invalid "+location+" `"+propFullName+"` key `"+key+"` supplied to `"+componentName+"`.\nBad object: "+JSON.stringify(props[propName],null," ")+`
2
+ import{helpersRegistry,parse_default,formatRgb,helperSourcePath}from"./chunk-yp39f93e.js";import{sanitizeCssTokenValue,resolveColors,DEFAULT_TYPESET_NAME,typesetScale}from"./chunk-w40pqmyz.js";import{require_react_is_development,require_object_assign,require_emotion_serialize_development_cjs,$_default,import_emotion_react_development_cjs,$_default2,$_default3}from"./chunk-bpb97rsk.js";import{SX_PROP,catalogFromManifest,require_react_development,require_react_dom}from"./chunk-n70zfv0m.js";import{__toESM,__commonJS}from"./chunk-2smsg2ct.js";import{MUI_VERSION}from"./chunk-mzhdrawd.js";import{_objectWithoutPropertiesLoose,_extends,_assertThisInitialized,_setPrototypeOf}from"./chunk-h6gchare.js";import{resolveProviderSrcDir}from"./chunk-v6c3h9ft.js";import{require_react_jsx_runtime_development}from"./chunk-kvxn1cyx.js";var require_ReactPropTypesSecret=__commonJS(function(exports,module){var ReactPropTypesSecret="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";module.exports=ReactPropTypesSecret});var require_has=__commonJS(function(exports,module){module.exports=Function.call.bind(Object.prototype.hasOwnProperty)});var require_checkPropTypes=__commonJS(function(exports,module){var printWarning=function(){};ReactPropTypesSecret=require_ReactPropTypesSecret(),loggedTypeFailures={},has=require_has(),printWarning=function(text){var message="Warning: "+text;if(typeof console<"u")console.error(message);try{throw Error(message)}catch(x){}};var ReactPropTypesSecret,loggedTypeFailures,has;function checkPropTypes(typeSpecs,values,location,componentName,getStack){for(var typeSpecName in typeSpecs)if(has(typeSpecs,typeSpecName)){var error;try{if(typeof typeSpecs[typeSpecName]!=="function"){var err=Error((componentName||"React class")+": "+location+" type `"+typeSpecName+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof typeSpecs[typeSpecName]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw err.name="Invariant Violation",err}error=typeSpecs[typeSpecName](values,typeSpecName,componentName,location,null,ReactPropTypesSecret)}catch(ex){error=ex}if(error&&!(error instanceof Error))printWarning((componentName||"React class")+": type specification of "+location+" `"+typeSpecName+"` is invalid; the type checker function must return `null` or an `Error` but returned a "+typeof error+". You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).");if(error instanceof Error&&!(error.message in loggedTypeFailures)){loggedTypeFailures[error.message]=!0;var stack=getStack?getStack():"";printWarning("Failed "+location+" type: "+error.message+(stack!=null?stack:""))}}}checkPropTypes.resetWarningCache=function(){loggedTypeFailures={}};module.exports=checkPropTypes});var require_factoryWithTypeCheckers=__commonJS(function(exports,module){var ReactIs=__toESM(require_react_is_development()),assign=require_object_assign(),ReactPropTypesSecret=require_ReactPropTypesSecret(),has=require_has(),checkPropTypes=require_checkPropTypes(),printWarning=function(){};printWarning=function(text){var message="Warning: "+text;if(typeof console<"u")console.error(message);try{throw Error(message)}catch(x){}};function emptyFunctionThatReturnsNull(){return null}module.exports=function(isValidElement,throwOnDirectAccess){var ITERATOR_SYMBOL=typeof Symbol==="function"&&Symbol.iterator,FAUX_ITERATOR_SYMBOL="@@iterator";function getIteratorFn(maybeIterable){var iteratorFn=maybeIterable&&(ITERATOR_SYMBOL&&maybeIterable[ITERATOR_SYMBOL]||maybeIterable[FAUX_ITERATOR_SYMBOL]);if(typeof iteratorFn==="function")return iteratorFn}var ANONYMOUS="<<anonymous>>",ReactPropTypes={array:createPrimitiveTypeChecker("array"),bigint:createPrimitiveTypeChecker("bigint"),bool:createPrimitiveTypeChecker("boolean"),func:createPrimitiveTypeChecker("function"),number:createPrimitiveTypeChecker("number"),object:createPrimitiveTypeChecker("object"),string:createPrimitiveTypeChecker("string"),symbol:createPrimitiveTypeChecker("symbol"),any:createAnyTypeChecker(),arrayOf:createArrayOfTypeChecker,element:createElementTypeChecker(),elementType:createElementTypeTypeChecker(),instanceOf:createInstanceTypeChecker,node:createNodeChecker(),objectOf:createObjectOfTypeChecker,oneOf:createEnumTypeChecker,oneOfType:createUnionTypeChecker,shape:createShapeTypeChecker,exact:createStrictShapeTypeChecker};function is(x,y){if(x===y)return x!==0||1/x===1/y;else return x!==x&&y!==y}function PropTypeError(message,data){this.message=message,this.data=data&&typeof data==="object"?data:{},this.stack=""}PropTypeError.prototype=Error.prototype;function createChainableTypeChecker(validate){var manualPropTypeCallCache={},manualPropTypeWarningCount=0;function checkType(isRequired,props,propName,componentName,location,propFullName,secret){if(componentName=componentName||ANONYMOUS,propFullName=propFullName||propName,secret!==ReactPropTypesSecret){if(throwOnDirectAccess){var err=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use `PropTypes.checkPropTypes()` to call them. Read more at http://fb.me/use-check-prop-types");throw err.name="Invariant Violation",err}else if(typeof console<"u"){var cacheKey=componentName+":"+propName;if(!manualPropTypeCallCache[cacheKey]&&manualPropTypeWarningCount<3)printWarning("You are manually calling a React.PropTypes validation function for the `"+propFullName+"` prop on `"+componentName+"`. This is deprecated and will throw in the standalone `prop-types` package. You may be seeing this warning due to a third-party PropTypes library. See https://fb.me/react-warning-dont-call-proptypes for details."),manualPropTypeCallCache[cacheKey]=!0,manualPropTypeWarningCount++}}if(props[propName]==null){if(isRequired){if(props[propName]===null)return new PropTypeError("The "+location+" `"+propFullName+"` is marked as required "+("in `"+componentName+"`, but its value is `null`."));return new PropTypeError("The "+location+" `"+propFullName+"` is marked as required in "+("`"+componentName+"`, but its value is `undefined`."))}return null}else return validate(props,propName,componentName,location,propFullName)}var chainedCheckType=checkType.bind(null,!1);return chainedCheckType.isRequired=checkType.bind(null,!0),chainedCheckType}function createPrimitiveTypeChecker(expectedType){function validate(props,propName,componentName,location,propFullName,secret){var propValue=props[propName],propType=getPropType(propValue);if(propType!==expectedType){var preciseType=getPreciseType(propValue);return new PropTypeError("Invalid "+location+" `"+propFullName+"` of type "+("`"+preciseType+"` supplied to `"+componentName+"`, expected ")+("`"+expectedType+"`."),{expectedType})}return null}return createChainableTypeChecker(validate)}function createAnyTypeChecker(){return createChainableTypeChecker(emptyFunctionThatReturnsNull)}function createArrayOfTypeChecker(typeChecker){function validate(props,propName,componentName,location,propFullName){if(typeof typeChecker!=="function")return new PropTypeError("Property `"+propFullName+"` of component `"+componentName+"` has invalid PropType notation inside arrayOf.");var propValue=props[propName];if(!Array.isArray(propValue)){var propType=getPropType(propValue);return new PropTypeError("Invalid "+location+" `"+propFullName+"` of type "+("`"+propType+"` supplied to `"+componentName+"`, expected an array."))}for(var i=0;i<propValue.length;i++){var error=typeChecker(propValue,i,componentName,location,propFullName+"["+i+"]",ReactPropTypesSecret);if(error instanceof Error)return error}return null}return createChainableTypeChecker(validate)}function createElementTypeChecker(){function validate(props,propName,componentName,location,propFullName){var propValue=props[propName];if(!isValidElement(propValue)){var propType=getPropType(propValue);return new PropTypeError("Invalid "+location+" `"+propFullName+"` of type "+("`"+propType+"` supplied to `"+componentName+"`, expected a single ReactElement."))}return null}return createChainableTypeChecker(validate)}function createElementTypeTypeChecker(){function validate(props,propName,componentName,location,propFullName){var propValue=props[propName];if(!ReactIs.isValidElementType(propValue)){var propType=getPropType(propValue);return new PropTypeError("Invalid "+location+" `"+propFullName+"` of type "+("`"+propType+"` supplied to `"+componentName+"`, expected a single ReactElement type."))}return null}return createChainableTypeChecker(validate)}function createInstanceTypeChecker(expectedClass){function validate(props,propName,componentName,location,propFullName){if(!(props[propName]instanceof expectedClass)){var expectedClassName=expectedClass.name||ANONYMOUS,actualClassName=getClassName(props[propName]);return new PropTypeError("Invalid "+location+" `"+propFullName+"` of type "+("`"+actualClassName+"` supplied to `"+componentName+"`, expected ")+("instance of `"+expectedClassName+"`."))}return null}return createChainableTypeChecker(validate)}function createEnumTypeChecker(expectedValues){if(!Array.isArray(expectedValues)){if(arguments.length>1)printWarning("Invalid arguments supplied to oneOf, expected an array, got "+arguments.length+" arguments. A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).");else printWarning("Invalid argument supplied to oneOf, expected an array.");return emptyFunctionThatReturnsNull}function validate(props,propName,componentName,location,propFullName){var propValue=props[propName];for(var i=0;i<expectedValues.length;i++)if(is(propValue,expectedValues[i]))return null;var valuesString=JSON.stringify(expectedValues,function(key,value){var type=getPreciseType(value);if(type==="symbol")return String(value);return value});return new PropTypeError("Invalid "+location+" `"+propFullName+"` of value `"+String(propValue)+"` "+("supplied to `"+componentName+"`, expected one of "+valuesString+"."))}return createChainableTypeChecker(validate)}function createObjectOfTypeChecker(typeChecker){function validate(props,propName,componentName,location,propFullName){if(typeof typeChecker!=="function")return new PropTypeError("Property `"+propFullName+"` of component `"+componentName+"` has invalid PropType notation inside objectOf.");var propValue=props[propName],propType=getPropType(propValue);if(propType!=="object")return new PropTypeError("Invalid "+location+" `"+propFullName+"` of type "+("`"+propType+"` supplied to `"+componentName+"`, expected an object."));for(var key in propValue)if(has(propValue,key)){var error=typeChecker(propValue,key,componentName,location,propFullName+"."+key,ReactPropTypesSecret);if(error instanceof Error)return error}return null}return createChainableTypeChecker(validate)}function createUnionTypeChecker(arrayOfTypeCheckers){if(!Array.isArray(arrayOfTypeCheckers))return printWarning("Invalid argument supplied to oneOfType, expected an instance of array."),emptyFunctionThatReturnsNull;for(var i=0;i<arrayOfTypeCheckers.length;i++){var checker=arrayOfTypeCheckers[i];if(typeof checker!=="function")return printWarning("Invalid argument supplied to oneOfType. Expected an array of check functions, but received "+getPostfixForTypeWarning(checker)+" at index "+i+"."),emptyFunctionThatReturnsNull}function validate(props,propName,componentName,location,propFullName){var expectedTypes=[];for(var i=0;i<arrayOfTypeCheckers.length;i++){var checker=arrayOfTypeCheckers[i],checkerResult=checker(props,propName,componentName,location,propFullName,ReactPropTypesSecret);if(checkerResult==null)return null;if(checkerResult.data&&has(checkerResult.data,"expectedType"))expectedTypes.push(checkerResult.data.expectedType)}var expectedTypesMessage=expectedTypes.length>0?", expected one of type ["+expectedTypes.join(", ")+"]":"";return new PropTypeError("Invalid "+location+" `"+propFullName+"` supplied to "+("`"+componentName+"`"+expectedTypesMessage+"."))}return createChainableTypeChecker(validate)}function createNodeChecker(){function validate(props,propName,componentName,location,propFullName){if(!isNode(props[propName]))return new PropTypeError("Invalid "+location+" `"+propFullName+"` supplied to "+("`"+componentName+"`, expected a ReactNode."));return null}return createChainableTypeChecker(validate)}function invalidValidatorError(componentName,location,propFullName,key,type){return new PropTypeError((componentName||"React class")+": "+location+" type `"+propFullName+"."+key+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+type+"`.")}function createShapeTypeChecker(shapeTypes){function validate(props,propName,componentName,location,propFullName){var propValue=props[propName],propType=getPropType(propValue);if(propType!=="object")return new PropTypeError("Invalid "+location+" `"+propFullName+"` of type `"+propType+"` "+("supplied to `"+componentName+"`, expected `object`."));for(var key in shapeTypes){var checker=shapeTypes[key];if(typeof checker!=="function")return invalidValidatorError(componentName,location,propFullName,key,getPreciseType(checker));var error=checker(propValue,key,componentName,location,propFullName+"."+key,ReactPropTypesSecret);if(error)return error}return null}return createChainableTypeChecker(validate)}function createStrictShapeTypeChecker(shapeTypes){function validate(props,propName,componentName,location,propFullName){var propValue=props[propName],propType=getPropType(propValue);if(propType!=="object")return new PropTypeError("Invalid "+location+" `"+propFullName+"` of type `"+propType+"` "+("supplied to `"+componentName+"`, expected `object`."));var allKeys=assign({},props[propName],shapeTypes);for(var key in allKeys){var checker=shapeTypes[key];if(has(shapeTypes,key)&&typeof checker!=="function")return invalidValidatorError(componentName,location,propFullName,key,getPreciseType(checker));if(!checker)return new PropTypeError("Invalid "+location+" `"+propFullName+"` key `"+key+"` supplied to `"+componentName+"`.\nBad object: "+JSON.stringify(props[propName],null," ")+`
3
3
  Valid keys: `+JSON.stringify(Object.keys(shapeTypes),null," "));var error=checker(propValue,key,componentName,location,propFullName+"."+key,ReactPropTypesSecret);if(error)return error}return null}return createChainableTypeChecker(validate)}function isNode(propValue){switch(typeof propValue){case"number":case"string":case"undefined":return!0;case"boolean":return!propValue;case"object":if(Array.isArray(propValue))return propValue.every(isNode);if(propValue===null||isValidElement(propValue))return!0;var iteratorFn=getIteratorFn(propValue);if(iteratorFn){var iterator=iteratorFn.call(propValue),step;if(iteratorFn!==propValue.entries){while(!(step=iterator.next()).done)if(!isNode(step.value))return!1}else while(!(step=iterator.next()).done){var entry=step.value;if(entry){if(!isNode(entry[1]))return!1}}}else return!1;return!0;default:return!1}}function isSymbol(propType,propValue){if(propType==="symbol")return!0;if(!propValue)return!1;if(propValue["@@toStringTag"]==="Symbol")return!0;if(typeof Symbol==="function"&&propValue instanceof Symbol)return!0;return!1}function getPropType(propValue){var propType=typeof propValue;if(Array.isArray(propValue))return"array";if(propValue instanceof RegExp)return"object";if(isSymbol(propType,propValue))return"symbol";return propType}function getPreciseType(propValue){if(typeof propValue>"u"||propValue===null)return""+propValue;var propType=getPropType(propValue);if(propType==="object"){if(propValue instanceof Date)return"date";else if(propValue instanceof RegExp)return"regexp"}return propType}function getPostfixForTypeWarning(value){var type=getPreciseType(value);switch(type){case"array":case"object":return"an "+type;case"boolean":case"date":case"regexp":return"a "+type;default:return type}}function getClassName(propValue){if(!propValue.constructor||!propValue.constructor.name)return ANONYMOUS;return propValue.constructor.name}return ReactPropTypes.checkPropTypes=checkPropTypes,ReactPropTypes.resetWarningCache=checkPropTypes.resetWarningCache,ReactPropTypes.PropTypes=ReactPropTypes,ReactPropTypes}});var require_prop_types=__commonJS(function(exports,module){var ReactIs=__toESM(require_react_is_development());throwOnDirectAccess=!0,module.exports=require_factoryWithTypeCheckers()(ReactIs.isElement,throwOnDirectAccess);var throwOnDirectAccess});var require_react_is_development2=__commonJS(function(exports){(function(){function typeOf(object){if(typeof object==="object"&&object!==null){var $$typeof=object.$$typeof;switch($$typeof){case REACT_ELEMENT_TYPE:switch(object=object.type,object){case REACT_FRAGMENT_TYPE:case REACT_PROFILER_TYPE:case REACT_STRICT_MODE_TYPE:case REACT_SUSPENSE_TYPE:case REACT_SUSPENSE_LIST_TYPE:case REACT_VIEW_TRANSITION_TYPE:return object;default:switch(object=object&&object.$$typeof,object){case REACT_CONTEXT_TYPE:case REACT_FORWARD_REF_TYPE:case REACT_LAZY_TYPE:case REACT_MEMO_TYPE:return object;case REACT_CONSUMER_TYPE:return object;default:return $$typeof}}case REACT_PORTAL_TYPE:return $$typeof}}}var REACT_ELEMENT_TYPE=Symbol.for("react.transitional.element"),REACT_PORTAL_TYPE=Symbol.for("react.portal"),REACT_FRAGMENT_TYPE=Symbol.for("react.fragment"),REACT_STRICT_MODE_TYPE=Symbol.for("react.strict_mode"),REACT_PROFILER_TYPE=Symbol.for("react.profiler"),REACT_CONSUMER_TYPE=Symbol.for("react.consumer"),REACT_CONTEXT_TYPE=Symbol.for("react.context"),REACT_FORWARD_REF_TYPE=Symbol.for("react.forward_ref"),REACT_SUSPENSE_TYPE=Symbol.for("react.suspense"),REACT_SUSPENSE_LIST_TYPE=Symbol.for("react.suspense_list"),REACT_MEMO_TYPE=Symbol.for("react.memo"),REACT_LAZY_TYPE=Symbol.for("react.lazy"),REACT_VIEW_TRANSITION_TYPE=Symbol.for("react.view_transition"),REACT_CLIENT_REFERENCE=Symbol.for("react.client.reference");exports.ContextConsumer=REACT_CONSUMER_TYPE,exports.ContextProvider=REACT_CONTEXT_TYPE,exports.Element=REACT_ELEMENT_TYPE,exports.ForwardRef=REACT_FORWARD_REF_TYPE,exports.Fragment=REACT_FRAGMENT_TYPE,exports.Lazy=REACT_LAZY_TYPE,exports.Memo=REACT_MEMO_TYPE,exports.Portal=REACT_PORTAL_TYPE,exports.Profiler=REACT_PROFILER_TYPE,exports.StrictMode=REACT_STRICT_MODE_TYPE,exports.Suspense=REACT_SUSPENSE_TYPE,exports.SuspenseList=REACT_SUSPENSE_LIST_TYPE,exports.isContextConsumer=function(object){return typeOf(object)===REACT_CONSUMER_TYPE},exports.isContextProvider=function(object){return typeOf(object)===REACT_CONTEXT_TYPE},exports.isElement=function(object){return typeof object==="object"&&object!==null&&object.$$typeof===REACT_ELEMENT_TYPE},exports.isForwardRef=function(object){return typeOf(object)===REACT_FORWARD_REF_TYPE},exports.isFragment=function(object){return typeOf(object)===REACT_FRAGMENT_TYPE},exports.isLazy=function(object){return typeOf(object)===REACT_LAZY_TYPE},exports.isMemo=function(object){return typeOf(object)===REACT_MEMO_TYPE},exports.isPortal=function(object){return typeOf(object)===REACT_PORTAL_TYPE},exports.isProfiler=function(object){return typeOf(object)===REACT_PROFILER_TYPE},exports.isStrictMode=function(object){return typeOf(object)===REACT_STRICT_MODE_TYPE},exports.isSuspense=function(object){return typeOf(object)===REACT_SUSPENSE_TYPE},exports.isSuspenseList=function(object){return typeOf(object)===REACT_SUSPENSE_LIST_TYPE},exports.isValidElementType=function(type){return typeof type==="string"||typeof type==="function"||type===REACT_FRAGMENT_TYPE||type===REACT_PROFILER_TYPE||type===REACT_STRICT_MODE_TYPE||type===REACT_SUSPENSE_TYPE||type===REACT_SUSPENSE_LIST_TYPE||typeof type==="object"&&type!==null&&(type.$$typeof===REACT_LAZY_TYPE||type.$$typeof===REACT_MEMO_TYPE||type.$$typeof===REACT_CONTEXT_TYPE||type.$$typeof===REACT_CONSUMER_TYPE||type.$$typeof===REACT_FORWARD_REF_TYPE||type.$$typeof===REACT_CLIENT_REFERENCE||type.getModuleId!==void 0)?!0:!1},exports.typeOf=typeOf})()});import{dirname,join}from"path";import{fileURLToPath}from"url";var MUI_INTRO=["**This folder targets Material UI.** Components are real MUI: `Box`/`Stack`/`Container`/`Paper` for layout, `Card`/`CardContent`/`CardHeader`/`CardActions`, `Typography` (ALL text \u2014 pick `variant` for the type scale), `Button`/`IconButton`, `TextField`, `Chip`, `Divider`, `Avatar`, `List`/`ListItem`, `Table*`, `Tabs`/`Tab`, `Alert`, `Tooltip`, and the overlay surface `Dialog`/`Menu`/`Popover`/`Drawer`/`Snackbar` (rendered open + inline in design mode). Call `list_components` for the full set and per-component `example` props.","",'**Style through `sx`.** `update_props { style: { display: "flex", alignItems: "center", gap: 2, p: 3, color: "primary.main" } }` \u2014 an object of MUI system props, where spacing is theme units (`p: 2` = 16px). It merges shallowly; an inner `null` drops a key, `style: null` clears. `emit_code` emits `<Component sx={{\u2026}} />` importing from `@mui/material`; `emit_theme` emits a `createTheme(...)` module. Tailwind utility diagnostics do not apply here \u2014 style via `sx` plus the shared theme tokens from `get_theme`, which project onto MUI.',""];var sx={name:"sx",type:"SxProps | undefined",optional:!0,control:"string"},children={name:"children",type:"ReactNode",optional:!0,control:"string"},enumProp=(name,values,defaultValue)=>({name,type:values.map((v)=>`"${v}"`).join(" | "),optional:!0,control:"enum",enumValues:values,defaultValue});function ui(id,props,notes,example){return{id,category:"ui",source:"mui",props:[...props,sx],designModeNotes:notes,example}}var className={name:"className",type:"string | undefined",optional:!0,control:"string"};function helper(id,props,notes,example){return{id,category:"ui",source:"velloo",props:[...props,className],designModeNotes:notes,example}}var MUI_MANIFEST=[ui("Box",[children,{name:"as",type:"string",optional:!0,control:"string",nativeName:"component"}],'Generic layout primitive; style via sx. `as` renders another HTML tag ("span", "section") and emits as MUI\'s `component`.'),ui("Stack",[children,enumProp("direction",["row","column"],"column")],"Flex layout; set spacing via sx or the spacing prop."),ui("Container",[children,enumProp("maxWidth",["xs","sm","md","lg","xl"],"lg")],"Centers + max-widths content."),ui("Paper",[children,enumProp("variant",["elevation","outlined"],"elevation")]),ui("Card",[children,enumProp("variant",["elevation","outlined"],"elevation")]),ui("CardContent",[children]),ui("CardHeader",[{name:"title",type:"ReactNode",optional:!0,control:"string"},{name:"subheader",type:"ReactNode",optional:!0,control:"string"}]),ui("CardActions",[children]),ui("Button",[children,enumProp("variant",["text","outlined","contained"],"text"),enumProp("color",["primary","secondary","success","error","inherit"],"primary"),enumProp("size",["small","medium","large"],"medium")],"Action button.",{variant:"contained",color:"primary",children:"Submit"}),ui("Typography",[children,enumProp("variant",["h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","caption","overline"],"body1"),enumProp("color",["text.primary","text.secondary","primary","error"])],"All text. Pick variant for the type scale; this is MUI's Heading + Text.",{variant:"h4",children:"Team analytics"}),ui("TextField",[enumProp("variant",["outlined","filled","standard"],"outlined"),{name:"label",type:"string",optional:!0,control:"string"},{name:"placeholder",type:"string",optional:!0,control:"string"}]),ui("Chip",[{name:"label",type:"ReactNode",optional:!0,control:"string"},enumProp("variant",["filled","outlined"],"filled"),enumProp("color",["default","primary","success","warning","error"],"default"),enumProp("size",["small","medium"],"medium")]),ui("Divider",[]),ui("Avatar",[children,{name:"src",type:"string",optional:!0,control:"string"}]),ui("LinearProgress",[{name:"value",type:"number",optional:!0,control:"number"},enumProp("variant",["determinate","indeterminate"],"indeterminate")]),ui("AppBar",[children,enumProp("position",["fixed","static","sticky"],"fixed"),enumProp("color",["primary","default","transparent","inherit"],"primary")]),ui("Toolbar",[children]),ui("IconButton",[children,enumProp("size",["small","medium","large"],"medium")]),ui("Link",[children,{name:"href",type:"string",optional:!0,control:"string"}]),ui("List",[children]),ui("ListItem",[children]),ui("ListItemText",[{name:"primary",type:"ReactNode",optional:!0,control:"string"},{name:"secondary",type:"ReactNode",optional:!0,control:"string"}]),ui("Table",[children]),ui("TableHead",[children]),ui("TableBody",[children]),ui("TableRow",[children]),ui("TableCell",[children,enumProp("align",["left","center","right"],"left")]),ui("Tabs",[children,{name:"value",type:"number | string",optional:!0,control:"string"}]),ui("Tab",[{name:"label",type:"ReactNode",optional:!0,control:"string"}]),ui("Badge",[children,{name:"badgeContent",type:"ReactNode",optional:!0,control:"string"}]),ui("Checkbox",[{name:"checked",type:"boolean",optional:!0,control:"boolean"}]),ui("Switch",[{name:"checked",type:"boolean",optional:!0,control:"boolean"}]),ui("Select",[children,enumProp("variant",["outlined","filled","standard"],"outlined")]),ui("MenuItem",[children,{name:"value",type:"string | number",optional:!0,control:"string"}]),ui("Tooltip",[children,{name:"title",type:"ReactNode",optional:!0,control:"string"}]),ui("Alert",[children,enumProp("severity",["success","info","warning","error"],"success")]),ui("Dialog",[children,enumProp("maxWidth",["xs","sm","md","lg","xl"],"sm")],"Modal dialog surface \u2014 renders open + inline in design mode. Fill it with DialogTitle / DialogContent / DialogActions.",{maxWidth:"sm"}),ui("DialogTitle",[children],"The dialog's heading row."),ui("DialogContent",[children],"The dialog's body."),ui("DialogContentText",[children],"Secondary text inside DialogContent."),ui("DialogActions",[children],"The dialog's button row (right-aligned)."),ui("Menu",[children],"A menu surface holding MenuItems \u2014 renders open + inline in design mode."),ui("Popover",[children],"A popover surface \u2014 renders open + inline in design mode."),ui("Drawer",[children],"A side panel \u2014 renders inline as a fixed-width column in design mode."),ui("Snackbar",[children,{name:"message",type:"ReactNode",optional:!0,control:"string"}],"A toast \u2014 renders inline as a dark pill in design mode. Use `message` or children.",{message:"Saved"}),helper("Icon",[{name:"name",type:"string",optional:!1,control:"icon"},{name:"size",type:"number",optional:!0,control:"number"}],"A lucide icon \u2014 MUI has no bundled icon set. Set the pixel `size` prop (not Tailwind). `name` is a lucide id (PascalCase or kebab). Emits a `lucide-react` import.",{name:"ArrowRight",size:20}),helper("Image",[{name:"src",type:"string",optional:!1,control:"string"},{name:"alt",type:"string",optional:!1,control:"string"}],"An image. Use velloo assets (`/assets/\u2026`) or a URL."),helper("Placeholder",[{name:"label",type:"string",optional:!0,control:"string"}],"A labeled placeholder box for imagery you haven't authored yet (avatars, hero shots)."),helper("SVG",[{name:"content",type:"string",optional:!1,control:"string"},{name:"viewBox",type:"string",optional:!1,control:"string"},{name:"preserveAspectRatio",type:"string",optional:!0,control:"string"}],"Raw inline SVG markup."),helper("Layer",[children],"An absolutely-positioned overlay layer for stacked composition."),helper("Gradient",[{name:"from",type:"string",optional:!0,control:"color"}],"A gradient fill block."),helper("Prose",[children,{name:"preset",type:"string",optional:!0,control:"string"},{name:"as",type:"string",optional:!0,control:"string"}],"A long-form content region. Everything inside \u2014 Typography, headings, lists, quotes, code, tables \u2014 picks up the theme typeset's proportions and vertical rhythm automatically. `preset` selects a named typeset (see set_typeset). Reach for this for articles, docs, and marketing copy instead of setting sizes block by block.",{as:"article"})];var React49=__toESM(require_react_development()),import_prop_types26=__toESM(require_prop_types());import clsx13 from"clsx";function composeClasses(slots,getUtilityClass,classes=void 0){let output={};for(let slotName in slots){let slot=slots[slotName],buffer="",start=!0;for(let i=0;i<slot.length;i+=1){let value=slot[i];if(value){if(buffer+=(start===!0?"":" ")+getUtilityClass(value),start=!1,classes&&classes[value])buffer+=" "+classes[value]}}output[slotName]=buffer}return output}function clamp(val,min=Number.MIN_SAFE_INTEGER,max=Number.MAX_SAFE_INTEGER){return Math.max(min,Math.min(val,max))}var clamp_default=clamp;function clampWrapper(value,min=0,max=1){if(value<min||value>max)console.error(`MUI: The value provided ${value} is out of range [${min}, ${max}].`);return clamp_default(value,min,max)}function hexToRgb(color){color=color.slice(1);let re=new RegExp(`.{1,${color.length>=6?2:1}}`,"g"),colors=color.match(re);if(colors&&colors[0].length===1)colors=colors.map((n)=>n+n);if(color.length!==color.trim().length)console.error(`MUI: The color: "${color}" is invalid. Make sure the color input doesn't contain leading/trailing space.`);return colors?`rgb${colors.length===4?"a":""}(${colors.map((n,index)=>index<3?parseInt(n,16):Math.round(parseInt(n,16)/255*1000)/1000).join(", ")})`:""}function decomposeColor(color){if(color.type)return color;if(color.charAt(0)==="#")return decomposeColor(hexToRgb(color));let marker=color.indexOf("("),type=color.substring(0,marker);if(!["rgb","rgba","hsl","hsla","color"].includes(type))throw Error(`MUI: Unsupported \`${color}\` color.
4
4
  The following formats are supported: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color().`);let values=color.substring(marker+1,color.length-1),colorSpace;if(type==="color"){if(values=values.split(" "),colorSpace=values.shift(),values.length===4&&values[3].charAt(0)==="/")values[3]=values[3].slice(1);if(!["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].includes(colorSpace))throw Error(`MUI: unsupported \`${colorSpace}\` color space.
5
5
  The following color spaces are supported: srgb, display-p3, a98-rgb, prophoto-rgb, rec-2020.`)}else values=values.split(",");return values=values.map((value)=>parseFloat(value)),{type,values,colorSpace}}var colorChannel=(color)=>{let decomposedColor=decomposeColor(color);return decomposedColor.values.slice(0,3).map((val,idx)=>decomposedColor.type.includes("hsl")&&idx!==0?`${val}%`:val).join(" ")},private_safeColorChannel=(color,warning)=>{try{return colorChannel(color)}catch(error){if(warning)console.warn(warning);return color}};function recomposeColor(color){let{type,colorSpace}=color,{values}=color;if(type.includes("rgb"))values=values.map((n,i)=>i<3?parseInt(n,10):n);else if(type.includes("hsl"))values[1]=`${values[1]}%`,values[2]=`${values[2]}%`;if(type.includes("color"))values=`${colorSpace} ${values.join(" ")}`;else values=`${values.join(", ")}`;return`${type}(${values})`}function hslToRgb(color){color=decomposeColor(color);let{values}=color,h=values[0],s=values[1]/100,l=values[2]/100,a=s*Math.min(l,1-l),f=(n,k=(n+h/30)%12)=>l-a*Math.max(Math.min(k-3,9-k,1),-1),type="rgb",rgb=[Math.round(f(0)*255),Math.round(f(8)*255),Math.round(f(4)*255)];if(color.type==="hsla")type+="a",rgb.push(values[3]);return recomposeColor({type,values:rgb})}function getLuminance(color){color=decomposeColor(color);let rgb=color.type==="hsl"||color.type==="hsla"?decomposeColor(hslToRgb(color)).values:color.values;return rgb=rgb.map((val)=>{if(color.type!=="color")val/=255;return val<=0.03928?val/12.92:((val+0.055)/1.055)**2.4}),Number((0.2126*rgb[0]+0.7152*rgb[1]+0.0722*rgb[2]).toFixed(3))}function getContrastRatio(foreground,background){let lumA=getLuminance(foreground),lumB=getLuminance(background);return(Math.max(lumA,lumB)+0.05)/(Math.min(lumA,lumB)+0.05)}function alpha(color,value){if(color=decomposeColor(color),value=clampWrapper(value),color.type==="rgb"||color.type==="hsl")color.type+="a";if(color.type==="color")color.values[3]=`/${value}`;else color.values[3]=value;return recomposeColor(color)}function private_safeAlpha(color,value,warning){try{return alpha(color,value)}catch(error){if(warning)console.warn(warning);return color}}function darken(color,coefficient){if(color=decomposeColor(color),coefficient=clampWrapper(coefficient),color.type.includes("hsl"))color.values[2]*=1-coefficient;else if(color.type.includes("rgb")||color.type.includes("color"))for(let i=0;i<3;i+=1)color.values[i]*=1-coefficient;return recomposeColor(color)}function private_safeDarken(color,coefficient,warning){try{return darken(color,coefficient)}catch(error){if(warning)console.warn(warning);return color}}function lighten(color,coefficient){if(color=decomposeColor(color),coefficient=clampWrapper(coefficient),color.type.includes("hsl"))color.values[2]+=(100-color.values[2])*coefficient;else if(color.type.includes("rgb"))for(let i=0;i<3;i+=1)color.values[i]+=(255-color.values[i])*coefficient;else if(color.type.includes("color"))for(let i=0;i<3;i+=1)color.values[i]+=(1-color.values[i])*coefficient;return recomposeColor(color)}function private_safeLighten(color,coefficient,warning){try{return lighten(color,coefficient)}catch(error){if(warning)console.warn(warning);return color}}function emphasize(color,coefficient=0.15){return getLuminance(color)>0.5?darken(color,coefficient):lighten(color,coefficient)}function private_safeEmphasize(color,coefficient,warning){try{return emphasize(color,coefficient)}catch(error){if(warning)console.warn(warning);return color}}var React27=__toESM(require_react_development());function capitalize(string){if(typeof string!=="string")throw Error("MUI: `capitalize(string)` expects a string argument.");return string.charAt(0).toUpperCase()+string.slice(1)}var React=__toESM(require_react_development()),import_react_is=__toESM(require_react_is_development2());function isPlainObject(item){if(typeof item!=="object"||item===null)return!1;let prototype=Object.getPrototypeOf(item);return(prototype===null||prototype===Object.prototype||Object.getPrototypeOf(prototype)===null)&&!(Symbol.toStringTag in item)&&!(Symbol.iterator in item)}function deepClone(source){if(React.isValidElement(source)||import_react_is.isValidElementType(source)||!isPlainObject(source))return source;let output={};return Object.keys(source).forEach((key)=>{output[key]=deepClone(source[key])}),output}function deepmerge(target,source,options={clone:!0}){let output=options.clone?{...target}:target;if(isPlainObject(target)&&isPlainObject(source))Object.keys(source).forEach((key)=>{if(React.isValidElement(source[key])||import_react_is.isValidElementType(source[key]))output[key]=source[key];else if(isPlainObject(source[key])&&Object.prototype.hasOwnProperty.call(target,key)&&isPlainObject(target[key]))output[key]=deepmerge(target[key],source[key],options);else if(options.clone)output[key]=isPlainObject(source[key])?deepClone(source[key]):source[key];else output[key]=source[key]});return output}function merge(acc,item){if(!item)return acc;return deepmerge(acc,item,{clone:!1})}var merge_default=merge;var import_prop_types=__toESM(require_prop_types()),responsivePropType=import_prop_types.default.oneOfType([import_prop_types.default.number,import_prop_types.default.string,import_prop_types.default.object,import_prop_types.default.array]),responsivePropType_default=responsivePropType;function sortContainerQueries(theme,css){if(!theme.containerQueries)return css;let sorted=Object.keys(css).filter((key)=>key.startsWith("@container")).sort((a,b)=>{let regex=/min-width:\s*([0-9.]+)/;return+(a.match(regex)?.[1]||0)-+(b.match(regex)?.[1]||0)});if(!sorted.length)return css;return sorted.reduce((acc,key)=>{let value=css[key];return delete acc[key],acc[key]=value,acc},{...css})}function isCqShorthand(breakpointKeys,value){return value==="@"||value.startsWith("@")&&(breakpointKeys.some((key)=>value.startsWith(`@${key}`))||!!value.match(/^@\d/))}function getContainerQuery(theme,shorthand){let matches=shorthand.match(/^@([^/]+)?\/?(.+)?$/);if(!matches)throw Error(`MUI: The provided shorthand ${`(${shorthand})`} is invalid. The format should be \`@<breakpoint | number>\` or \`@<breakpoint | number>/<container>\`.
@@ -7,7 +7,7 @@ For example, \`@sm\` or \`@600\` or \`@40rem/sidebar\`.`);let[,containerQuery,co
7
7
  `));else if(abs>themeSpacing.length-1)console.error([`MUI: The value provided (${abs}) overflows.`,`The supported values are: ${JSON.stringify(themeSpacing)}.`,`${abs} > ${themeSpacing.length-1}, you need to add the missing values.`].join(`
8
8
  `));let transformed=themeSpacing[abs];if(val>=0)return transformed;if(typeof transformed==="number")return-transformed;return`-${transformed}`};if(typeof themeSpacing==="function")return themeSpacing;return console.error([`MUI: The \`theme.${themeKey}\` value (${themeSpacing}) is invalid.`,"It should be a number, an array or a function."].join(`
9
9
  `)),()=>{return}}function createUnarySpacing(theme){return createUnaryUnit(theme,"spacing",8,"spacing")}function getValue(transformer,propValue){if(typeof propValue==="string"||propValue==null)return propValue;return transformer(propValue)}function getStyleFromPropValue(cssProperties,transformer){return(propValue)=>cssProperties.reduce((acc,cssProperty)=>(acc[cssProperty]=getValue(transformer,propValue),acc),{})}function resolveCssProperty(props,keys,prop,transformer){if(!keys.includes(prop))return null;let cssProperties=getCssProperties(prop),styleFromPropValue=getStyleFromPropValue(cssProperties,transformer),propValue=props[prop];return handleBreakpoints(props,propValue,styleFromPropValue)}function style3(props,keys){let transformer=createUnarySpacing(props.theme);return Object.keys(props).map((prop)=>resolveCssProperty(props,keys,prop,transformer)).reduce(merge_default,{})}function margin(props){return style3(props,marginKeys)}margin.propTypes=marginKeys.reduce((obj,key)=>(obj[key]=responsivePropType_default,obj),{});margin.filterProps=marginKeys;function padding(props){return style3(props,paddingKeys)}padding.propTypes=paddingKeys.reduce((obj,key)=>(obj[key]=responsivePropType_default,obj),{});padding.filterProps=paddingKeys;function spacing(props){return style3(props,spacingKeys)}spacing.propTypes=spacingKeys.reduce((obj,key)=>(obj[key]=responsivePropType_default,obj),{});spacing.filterProps=spacingKeys;function compose(...styles){let handlers=styles.reduce((acc,style)=>(style.filterProps.forEach((prop)=>{acc[prop]=style}),acc),{}),fn=(props)=>Object.keys(props).reduce((acc,prop)=>{if(handlers[prop])return merge_default(acc,handlers[prop](props));return acc},{});return fn.propTypes=styles.reduce((acc,style)=>Object.assign(acc,style.propTypes),{}),fn.filterProps=styles.reduce((acc,style)=>acc.concat(style.filterProps),[]),fn}var compose_default=compose;function borderTransform(value){if(typeof value!=="number")return value;return`${value}px solid`}function createBorderStyle(prop,transform){return style_default({prop,themeKey:"borders",transform})}var border=createBorderStyle("border",borderTransform),borderTop=createBorderStyle("borderTop",borderTransform),borderRight=createBorderStyle("borderRight",borderTransform),borderBottom=createBorderStyle("borderBottom",borderTransform),borderLeft=createBorderStyle("borderLeft",borderTransform),borderColor=createBorderStyle("borderColor"),borderTopColor=createBorderStyle("borderTopColor"),borderRightColor=createBorderStyle("borderRightColor"),borderBottomColor=createBorderStyle("borderBottomColor"),borderLeftColor=createBorderStyle("borderLeftColor"),outline=createBorderStyle("outline",borderTransform),outlineColor=createBorderStyle("outlineColor"),borderRadius=(props)=>{if(props.borderRadius!==void 0&&props.borderRadius!==null){let transformer=createUnaryUnit(props.theme,"shape.borderRadius",4,"borderRadius"),styleFromPropValue=(propValue)=>({borderRadius:getValue(transformer,propValue)});return handleBreakpoints(props,props.borderRadius,styleFromPropValue)}return null};borderRadius.propTypes={borderRadius:responsivePropType_default};borderRadius.filterProps=["borderRadius"];var borders=compose_default(border,borderTop,borderRight,borderBottom,borderLeft,borderColor,borderTopColor,borderRightColor,borderBottomColor,borderLeftColor,borderRadius,outline,outlineColor);var gap=(props)=>{if(props.gap!==void 0&&props.gap!==null){let transformer=createUnaryUnit(props.theme,"spacing",8,"gap"),styleFromPropValue=(propValue)=>({gap:getValue(transformer,propValue)});return handleBreakpoints(props,props.gap,styleFromPropValue)}return null};gap.propTypes={gap:responsivePropType_default};gap.filterProps=["gap"];var columnGap=(props)=>{if(props.columnGap!==void 0&&props.columnGap!==null){let transformer=createUnaryUnit(props.theme,"spacing",8,"columnGap"),styleFromPropValue=(propValue)=>({columnGap:getValue(transformer,propValue)});return handleBreakpoints(props,props.columnGap,styleFromPropValue)}return null};columnGap.propTypes={columnGap:responsivePropType_default};columnGap.filterProps=["columnGap"];var rowGap=(props)=>{if(props.rowGap!==void 0&&props.rowGap!==null){let transformer=createUnaryUnit(props.theme,"spacing",8,"rowGap"),styleFromPropValue=(propValue)=>({rowGap:getValue(transformer,propValue)});return handleBreakpoints(props,props.rowGap,styleFromPropValue)}return null};rowGap.propTypes={rowGap:responsivePropType_default};rowGap.filterProps=["rowGap"];var gridColumn=style_default({prop:"gridColumn"}),gridRow=style_default({prop:"gridRow"}),gridAutoFlow=style_default({prop:"gridAutoFlow"}),gridAutoColumns=style_default({prop:"gridAutoColumns"}),gridAutoRows=style_default({prop:"gridAutoRows"}),gridTemplateColumns=style_default({prop:"gridTemplateColumns"}),gridTemplateRows=style_default({prop:"gridTemplateRows"}),gridTemplateAreas=style_default({prop:"gridTemplateAreas"}),gridArea=style_default({prop:"gridArea"}),grid=compose_default(gap,columnGap,rowGap,gridColumn,gridRow,gridAutoFlow,gridAutoColumns,gridAutoRows,gridTemplateColumns,gridTemplateRows,gridTemplateAreas,gridArea);function paletteTransform(value,userValue){if(userValue==="grey")return userValue;return value}var color=style_default({prop:"color",themeKey:"palette",transform:paletteTransform}),bgcolor=style_default({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:paletteTransform}),backgroundColor=style_default({prop:"backgroundColor",themeKey:"palette",transform:paletteTransform}),palette=compose_default(color,bgcolor,backgroundColor);function sizingTransform(value){return value<=1&&value!==0?`${value*100}%`:value}var width=style_default({prop:"width",transform:sizingTransform}),maxWidth=(props)=>{if(props.maxWidth!==void 0&&props.maxWidth!==null){let styleFromPropValue=(propValue)=>{let breakpoint=props.theme?.breakpoints?.values?.[propValue]||values[propValue];if(!breakpoint)return{maxWidth:sizingTransform(propValue)};if(props.theme?.breakpoints?.unit!=="px")return{maxWidth:`${breakpoint}${props.theme.breakpoints.unit}`};return{maxWidth:breakpoint}};return handleBreakpoints(props,props.maxWidth,styleFromPropValue)}return null};maxWidth.filterProps=["maxWidth"];var minWidth=style_default({prop:"minWidth",transform:sizingTransform}),height=style_default({prop:"height",transform:sizingTransform}),maxHeight=style_default({prop:"maxHeight",transform:sizingTransform}),minHeight=style_default({prop:"minHeight",transform:sizingTransform}),sizeWidth=style_default({prop:"size",cssProperty:"width",transform:sizingTransform}),sizeHeight=style_default({prop:"size",cssProperty:"height",transform:sizingTransform}),boxSizing=style_default({prop:"boxSizing"}),sizing=compose_default(width,maxWidth,minWidth,height,maxHeight,minHeight,boxSizing);var defaultSxConfig={border:{themeKey:"borders",transform:borderTransform},borderTop:{themeKey:"borders",transform:borderTransform},borderRight:{themeKey:"borders",transform:borderTransform},borderBottom:{themeKey:"borders",transform:borderTransform},borderLeft:{themeKey:"borders",transform:borderTransform},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},outline:{themeKey:"borders",transform:borderTransform},outlineColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:borderRadius},color:{themeKey:"palette",transform:paletteTransform},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:paletteTransform},backgroundColor:{themeKey:"palette",transform:paletteTransform},p:{style:padding},pt:{style:padding},pr:{style:padding},pb:{style:padding},pl:{style:padding},px:{style:padding},py:{style:padding},padding:{style:padding},paddingTop:{style:padding},paddingRight:{style:padding},paddingBottom:{style:padding},paddingLeft:{style:padding},paddingX:{style:padding},paddingY:{style:padding},paddingInline:{style:padding},paddingInlineStart:{style:padding},paddingInlineEnd:{style:padding},paddingBlock:{style:padding},paddingBlockStart:{style:padding},paddingBlockEnd:{style:padding},m:{style:margin},mt:{style:margin},mr:{style:margin},mb:{style:margin},ml:{style:margin},mx:{style:margin},my:{style:margin},margin:{style:margin},marginTop:{style:margin},marginRight:{style:margin},marginBottom:{style:margin},marginLeft:{style:margin},marginX:{style:margin},marginY:{style:margin},marginInline:{style:margin},marginInlineStart:{style:margin},marginInlineEnd:{style:margin},marginBlock:{style:margin},marginBlockStart:{style:margin},marginBlockEnd:{style:margin},displayPrint:{cssProperty:!1,transform:(value)=>({"@media print":{display:value}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:gap},rowGap:{style:rowGap},columnGap:{style:columnGap},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:sizingTransform},maxWidth:{style:maxWidth},minWidth:{transform:sizingTransform},height:{transform:sizingTransform},maxHeight:{transform:sizingTransform},minHeight:{transform:sizingTransform},boxSizing:{},font:{themeKey:"font"},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}},defaultSxConfig_default=defaultSxConfig;function objectsHaveSameKeys(...objects){let allKeys=objects.reduce((keys,object)=>keys.concat(Object.keys(object)),[]),union=new Set(allKeys);return objects.every((object)=>union.size===Object.keys(object).length)}function callIfFn(maybeFn,arg){return typeof maybeFn==="function"?maybeFn(arg):maybeFn}function unstable_createStyleFunctionSx(){function getThemeValue(prop,val,theme,config){let props={[prop]:val,theme},options=config[prop];if(!options)return{[prop]:val};let{cssProperty=prop,themeKey,transform,style}=options;if(val==null)return null;if(themeKey==="typography"&&val==="inherit")return{[prop]:val};let themeMapping=getPath(theme,themeKey)||{};if(style)return style(props);return handleBreakpoints(props,val,(propValueFinal)=>{let value=getStyleValue(themeMapping,transform,propValueFinal);if(propValueFinal===value&&typeof propValueFinal==="string")value=getStyleValue(themeMapping,transform,`${prop}${propValueFinal==="default"?"":capitalize(propValueFinal)}`,propValueFinal);if(cssProperty===!1)return value;return{[cssProperty]:value}})}function styleFunctionSx(props){let{sx,theme={},nested}=props||{};if(!sx)return null;let config=theme.unstable_sxConfig??defaultSxConfig_default;function traverse(sxInput){let sxObject=sxInput;if(typeof sxInput==="function")sxObject=sxInput(theme);else if(typeof sxInput!=="object")return sxInput;if(!sxObject)return null;let emptyBreakpoints=createEmptyBreakpointObject(theme.breakpoints),breakpointsKeys=Object.keys(emptyBreakpoints),css=emptyBreakpoints;if(Object.keys(sxObject).forEach((styleKey)=>{let value=callIfFn(sxObject[styleKey],theme);if(value!==null&&value!==void 0)if(typeof value==="object")if(config[styleKey])css=merge_default(css,getThemeValue(styleKey,value,theme,config));else{let breakpointsValues=handleBreakpoints({theme},value,(x)=>({[styleKey]:x}));if(objectsHaveSameKeys(breakpointsValues,value))css[styleKey]=styleFunctionSx({sx:value,theme,nested:!0});else css=merge_default(css,breakpointsValues)}else css=merge_default(css,getThemeValue(styleKey,value,theme,config))}),!nested&&theme.modularCssLayers)return{"@layer sx":sortContainerQueries(theme,removeUnusedBreakpoints(breakpointsKeys,css))};return sortContainerQueries(theme,removeUnusedBreakpoints(breakpointsKeys,css))}return Array.isArray(sx)?sx.map(traverse):traverse(sx)}return styleFunctionSx}var styleFunctionSx=unstable_createStyleFunctionSx();styleFunctionSx.filterProps=["sx"];var styleFunctionSx_default=styleFunctionSx;var splitProps=(props)=>{let result={systemProps:{},otherProps:{}},config=props?.theme?.unstable_sxConfig??defaultSxConfig_default;return Object.keys(props).forEach((prop)=>{if(config[prop])result.systemProps[prop]=props[prop];else result.otherProps[prop]=props[prop]}),result};function extendSxProp(props){let{sx:inSx,...other}=props,{systemProps,otherProps}=splitProps(other),finalSx;if(Array.isArray(inSx))finalSx=[systemProps,...inSx];else if(typeof inSx==="function")finalSx=(...args)=>{let result=inSx(...args);if(!isPlainObject(result))return systemProps;return{...systemProps,...result}};else finalSx={...systemProps,...inSx};return{...otherProps,sx:finalSx}}var React25=__toESM(require_react_development());var import_emotion_serialize_development_cjs=__toESM(require_emotion_serialize_development_cjs(),1);var React2=__toESM(require_react_development()),import_prop_types2=__toESM(require_prop_types());var import_jsx_runtime=__toESM(require_react_jsx_runtime_development());function isEmpty(obj){return obj===void 0||obj===null||Object.keys(obj).length===0}function GlobalStyles(props){let{styles,defaultTheme={}}=props;return import_jsx_runtime.jsx(import_emotion_react_development_cjs.Global,{styles:typeof styles==="function"?(themeInput)=>styles(isEmpty(themeInput)?defaultTheme:themeInput):styles})}GlobalStyles.propTypes={defaultTheme:import_prop_types2.default.object,styles:import_prop_types2.default.oneOfType([import_prop_types2.default.array,import_prop_types2.default.string,import_prop_types2.default.object,import_prop_types2.default.func])};function styled(tag,options){let stylesFactory=$_default(tag,options);return(...styles)=>{let component=typeof tag==="string"?`"${tag}"`:"component";if(styles.length===0)console.error([`MUI: Seems like you called \`styled(${component})()\` without a \`style\` argument.`,'You must provide a `styles` argument: `styled("div")(styleYouForgotToPass)`.'].join(`
10
- `));else if(styles.some((style)=>style===void 0))console.error(`MUI: the styled(${component})(...args) API requires all its args to be defined.`);return stylesFactory(...styles)}}function internal_mutateStyles(tag,processor){if(Array.isArray(tag.__emotion_styles))tag.__emotion_styles=processor(tag.__emotion_styles)}var wrapper=[];function internal_serializeStyles(styles){return wrapper[0]=styles,import_emotion_serialize_development_cjs.serializeStyles(wrapper)}var React4=__toESM(require_react_development()),import_prop_types3=__toESM(require_prop_types());var sortBreakpointsValues=(values)=>{let breakpointsAsArray=Object.keys(values).map((key)=>({key,val:values[key]}))||[];return breakpointsAsArray.sort((breakpoint1,breakpoint2)=>breakpoint1.val-breakpoint2.val),breakpointsAsArray.reduce((acc,obj)=>({...acc,[obj.key]:obj.val}),{})};function createBreakpoints(breakpoints){let{values={xs:0,sm:600,md:900,lg:1200,xl:1536},unit="px",step=5,...other}=breakpoints,sortedValues=sortBreakpointsValues(values),keys=Object.keys(sortedValues);function up(key){return`@media (min-width:${typeof values[key]==="number"?values[key]:key}${unit})`}function down(key){return`@media (max-width:${(typeof values[key]==="number"?values[key]:key)-step/100}${unit})`}function between(start,end){let endIndex=keys.indexOf(end);return`@media (min-width:${typeof values[start]==="number"?values[start]:start}${unit}) and (max-width:${(endIndex!==-1&&typeof values[keys[endIndex]]==="number"?values[keys[endIndex]]:end)-step/100}${unit})`}function only(key){if(keys.indexOf(key)+1<keys.length)return between(key,keys[keys.indexOf(key)+1]);return up(key)}function not(key){let keyIndex=keys.indexOf(key);if(keyIndex===0)return up(keys[1]);if(keyIndex===keys.length-1)return down(keys[keyIndex]);return between(key,keys[keys.indexOf(key)+1]).replace("@media","@media not all and")}return{keys,values:sortedValues,up,down,between,only,not,unit,...other}}var shape={borderRadius:4},shape_default=shape;function createSpacing(spacingInput=8,transform=createUnarySpacing({spacing:spacingInput})){if(spacingInput.mui)return spacingInput;let spacing=(...argsInput)=>{if(!(argsInput.length<=4))console.error(`MUI: Too many arguments provided, expected between 0 and 4, got ${argsInput.length}`);return(argsInput.length===0?[1]:argsInput).map((argument)=>{let output=transform(argument);return typeof output==="number"?`${output}px`:output}).join(" ")};return spacing.mui=!0,spacing}function applyStyles(key,styles){let theme=this;if(theme.vars){if(!theme.colorSchemes?.[key]||typeof theme.getColorSchemeSelector!=="function")return{};let selector=theme.getColorSchemeSelector(key);if(selector==="&")return styles;if(selector.includes("data-")||selector.includes("."))selector=`*:where(${selector.replace(/\s*&$/,"")}) &`;return{[selector]:styles}}if(theme.palette.mode===key)return styles;return{}}function createTheme(options={},...args){let{breakpoints:breakpointsInput={},palette:paletteInput={},spacing:spacingInput,shape:shapeInput={},...other}=options,breakpoints=createBreakpoints(breakpointsInput),spacing=createSpacing(spacingInput),muiTheme=deepmerge({breakpoints,direction:"ltr",components:{},palette:{mode:"light",...paletteInput},spacing,shape:{...shape_default,...shapeInput}},other);return muiTheme=cssContainerQueries(muiTheme),muiTheme.applyStyles=applyStyles,muiTheme=args.reduce((acc,argument)=>deepmerge(acc,argument),muiTheme),muiTheme.unstable_sxConfig={...defaultSxConfig_default,...other?.unstable_sxConfig},muiTheme.unstable_sx=function(props){return styleFunctionSx_default({sx:props,theme:this})},muiTheme}var createTheme_default=createTheme;var React3=__toESM(require_react_development());function isObjectEmpty(obj){return Object.keys(obj).length===0}function useTheme(defaultTheme=null){let contextTheme=React3.useContext(import_emotion_react_development_cjs.ThemeContext);return!contextTheme||isObjectEmpty(contextTheme)?defaultTheme:contextTheme}var useThemeWithoutDefault_default=useTheme;var systemDefaultTheme=createTheme_default();function useTheme2(defaultTheme=systemDefaultTheme){return useThemeWithoutDefault_default(defaultTheme)}var useTheme_default=useTheme2;var import_jsx_runtime2=__toESM(require_react_jsx_runtime_development());function wrapGlobalLayer(styles){let serialized=internal_serializeStyles(styles);if(styles!==serialized&&serialized.styles){if(!serialized.styles.match(/^@layer\s+[^{]*$/))serialized.styles=`@layer global{${serialized.styles}}`;return serialized}return styles}function GlobalStyles2({styles,themeId,defaultTheme={}}){let upperTheme=useTheme_default(defaultTheme),resolvedTheme=themeId?upperTheme[themeId]||upperTheme:upperTheme,globalStyles=typeof styles==="function"?styles(resolvedTheme):styles;if(resolvedTheme.modularCssLayers)if(Array.isArray(globalStyles))globalStyles=globalStyles.map((styleArg)=>{if(typeof styleArg==="function")return wrapGlobalLayer(styleArg(resolvedTheme));return wrapGlobalLayer(styleArg)});else globalStyles=wrapGlobalLayer(globalStyles);return import_jsx_runtime2.jsx(GlobalStyles,{styles:globalStyles})}GlobalStyles2.propTypes={defaultTheme:import_prop_types3.default.object,styles:import_prop_types3.default.oneOfType([import_prop_types3.default.array,import_prop_types3.default.func,import_prop_types3.default.number,import_prop_types3.default.object,import_prop_types3.default.string,import_prop_types3.default.bool]),themeId:import_prop_types3.default.string};var GlobalStyles_default=GlobalStyles2;var defaultGenerator=(componentName)=>componentName,createClassNameGenerator=()=>{let generate=defaultGenerator;return{configure(generator){generate=generator},generate(componentName){return generate(componentName)},reset(){generate=defaultGenerator}}},ClassNameGenerator=createClassNameGenerator(),ClassNameGenerator_default=ClassNameGenerator;var React5=__toESM(require_react_development());import clsx from"clsx";var import_jsx_runtime3=__toESM(require_react_jsx_runtime_development());function createBox(options={}){let{themeId,defaultTheme,defaultClassName="MuiBox-root",generateClassName}=options,BoxRoot=styled("div",{shouldForwardProp:(prop)=>prop!=="theme"&&prop!=="sx"&&prop!=="as"})(styleFunctionSx_default);return React5.forwardRef(function(inProps,ref){let theme=useTheme_default(defaultTheme),{className,component="div",...other}=extendSxProp(inProps);return import_jsx_runtime3.jsx(BoxRoot,{as:component,ref,className:clsx(className,generateClassName?generateClassName(defaultClassName):defaultClassName),theme:themeId?theme[themeId]||theme:theme,...other})})}var globalStateClasses={active:"active",checked:"checked",completed:"completed",disabled:"disabled",error:"error",expanded:"expanded",focused:"focused",focusVisible:"focusVisible",open:"open",readOnly:"readOnly",required:"required",selected:"selected"};function generateUtilityClass(componentName,slot,globalStatePrefix="Mui"){let globalStateClass=globalStateClasses[slot];return globalStateClass?`${globalStatePrefix}-${globalStateClass}`:`${ClassNameGenerator_default.generate(componentName)}-${slot}`}function generateUtilityClasses(componentName,slots,globalStatePrefix="Mui"){let result={};return slots.forEach((slot)=>{result[slot]=generateUtilityClass(componentName,slot,globalStatePrefix)}),result}var import_react_is2=__toESM(require_react_is_development2());function getFunctionComponentName(Component,fallback=""){return Component.displayName||Component.name||fallback}function getWrappedName(outerType,innerType,wrapperName){let functionName=getFunctionComponentName(innerType);return outerType.displayName||(functionName!==""?`${wrapperName}(${functionName})`:wrapperName)}function getDisplayName(Component){if(Component==null)return;if(typeof Component==="string")return Component;if(typeof Component==="function")return getFunctionComponentName(Component,"Component");if(typeof Component==="object")switch(Component.$$typeof){case import_react_is2.ForwardRef:return getWrappedName(Component,Component.render,"ForwardRef");case import_react_is2.Memo:return getWrappedName(Component,Component.type,"memo");default:return}return}function preprocessStyles(input){let{variants,...style}=input,result={variants,style:internal_serializeStyles(style),isProcessed:!0};if(result.style===style)return result;if(variants)variants.forEach((variant)=>{if(typeof variant.style!=="function")variant.style=internal_serializeStyles(variant.style)});return result}var systemDefaultTheme2=createTheme_default();function shouldForwardProp(prop){return prop!=="ownerState"&&prop!=="theme"&&prop!=="sx"&&prop!=="as"}function shallowLayer(serialized,layerName){if(layerName&&serialized&&typeof serialized==="object"&&serialized.styles&&!serialized.styles.startsWith("@layer"))serialized.styles=`@layer ${layerName}{${String(serialized.styles)}}`;return serialized}function defaultOverridesResolver(slot){if(!slot)return null;return(_props,styles)=>styles[slot]}function attachTheme(props,themeId,defaultTheme){props.theme=isObjectEmpty2(props.theme)?defaultTheme:props.theme[themeId]||props.theme}function processStyle(props,style,layerName){let resolvedStyle=typeof style==="function"?style(props):style;if(Array.isArray(resolvedStyle))return resolvedStyle.flatMap((subStyle)=>processStyle(props,subStyle,layerName));if(Array.isArray(resolvedStyle?.variants)){let rootStyle;if(resolvedStyle.isProcessed)rootStyle=layerName?shallowLayer(resolvedStyle.style,layerName):resolvedStyle.style;else{let{variants,...otherStyles}=resolvedStyle;rootStyle=layerName?shallowLayer(internal_serializeStyles(otherStyles),layerName):otherStyles}return processStyleVariants(props,resolvedStyle.variants,[rootStyle],layerName)}if(resolvedStyle?.isProcessed)return layerName?shallowLayer(internal_serializeStyles(resolvedStyle.style),layerName):resolvedStyle.style;return layerName?shallowLayer(internal_serializeStyles(resolvedStyle),layerName):resolvedStyle}function processStyleVariants(props,variants,results=[],layerName=void 0){let mergedState;variantLoop:for(let i=0;i<variants.length;i+=1){let variant=variants[i];if(typeof variant.props==="function"){if(mergedState??={...props,...props.ownerState,ownerState:props.ownerState},!variant.props(mergedState))continue}else for(let key in variant.props)if(props[key]!==variant.props[key]&&props.ownerState?.[key]!==variant.props[key])continue variantLoop;if(typeof variant.style==="function")mergedState??={...props,...props.ownerState,ownerState:props.ownerState},results.push(layerName?shallowLayer(internal_serializeStyles(variant.style(mergedState)),layerName):variant.style(mergedState));else results.push(layerName?shallowLayer(internal_serializeStyles(variant.style),layerName):variant.style)}return results}function createStyled(input={}){let{themeId,defaultTheme=systemDefaultTheme2,rootShouldForwardProp=shouldForwardProp,slotShouldForwardProp=shouldForwardProp}=input;function styleAttachTheme(props){attachTheme(props,themeId,defaultTheme)}return(tag,inputOptions={})=>{internal_mutateStyles(tag,(styles)=>styles.filter((style)=>style!==styleFunctionSx_default));let{name:componentName,slot:componentSlot,skipVariantsResolver:inputSkipVariantsResolver,skipSx:inputSkipSx,overridesResolver=defaultOverridesResolver(lowercaseFirstLetter(componentSlot)),...options}=inputOptions,layerName=componentName&&componentName.startsWith("Mui")||!!componentSlot?"components":"custom",skipVariantsResolver=inputSkipVariantsResolver!==void 0?inputSkipVariantsResolver:componentSlot&&componentSlot!=="Root"&&componentSlot!=="root"||!1,skipSx=inputSkipSx||!1,shouldForwardPropOption=shouldForwardProp;if(componentSlot==="Root"||componentSlot==="root")shouldForwardPropOption=rootShouldForwardProp;else if(componentSlot)shouldForwardPropOption=slotShouldForwardProp;else if(isStringTag(tag))shouldForwardPropOption=void 0;let defaultStyledResolver=styled(tag,{shouldForwardProp:shouldForwardPropOption,label:generateStyledLabel(componentName,componentSlot),...options}),transformStyle=(style)=>{if(style.__emotion_real===style)return style;if(typeof style==="function")return function(props){return processStyle(props,style,props.theme.modularCssLayers?layerName:void 0)};if(isPlainObject(style)){let serialized=preprocessStyles(style);return function(props){if(!serialized.variants)return props.theme.modularCssLayers?shallowLayer(serialized.style,layerName):serialized.style;return processStyle(props,serialized,props.theme.modularCssLayers?layerName:void 0)}}return style},muiStyledResolver=(...expressionsInput)=>{let expressionsHead=[],expressionsBody=expressionsInput.map(transformStyle),expressionsTail=[];if(expressionsHead.push(styleAttachTheme),componentName&&overridesResolver)expressionsTail.push(function(props){let styleOverrides=props.theme.components?.[componentName]?.styleOverrides;if(!styleOverrides)return null;let resolvedStyleOverrides={};for(let slotKey in styleOverrides)resolvedStyleOverrides[slotKey]=processStyle(props,styleOverrides[slotKey],props.theme.modularCssLayers?"theme":void 0);return overridesResolver(props,resolvedStyleOverrides)});if(componentName&&!skipVariantsResolver)expressionsTail.push(function(props){let themeVariants=props.theme?.components?.[componentName]?.variants;if(!themeVariants)return null;return processStyleVariants(props,themeVariants,[],props.theme.modularCssLayers?"theme":void 0)});if(!skipSx)expressionsTail.push(styleFunctionSx_default);if(Array.isArray(expressionsBody[0])){let inputStrings=expressionsBody.shift(),placeholdersHead=Array(expressionsHead.length).fill(""),placeholdersTail=Array(expressionsTail.length).fill(""),outputStrings;outputStrings=[...placeholdersHead,...inputStrings,...placeholdersTail],outputStrings.raw=[...placeholdersHead,...inputStrings.raw,...placeholdersTail],expressionsHead.unshift(outputStrings)}let expressions=[...expressionsHead,...expressionsBody,...expressionsTail],Component=defaultStyledResolver(...expressions);if(tag.muiName)Component.muiName=tag.muiName;return Component.displayName=generateDisplayName(componentName,componentSlot,tag),Component};if(defaultStyledResolver.withConfig)muiStyledResolver.withConfig=defaultStyledResolver.withConfig;return muiStyledResolver}}function generateDisplayName(componentName,componentSlot,tag){if(componentName)return`${componentName}${capitalize(componentSlot||"")}`;return`Styled(${getDisplayName(tag)})`}function generateStyledLabel(componentName,componentSlot){let label;if(componentName)label=`${componentName}-${lowercaseFirstLetter(componentSlot||"Root")}`;return label}function isObjectEmpty2(object){for(let _ in object)return!1;return!0}function isStringTag(tag){return typeof tag==="string"&&tag.charCodeAt(0)>96}function lowercaseFirstLetter(string){if(!string)return string;return string.charAt(0).toLowerCase()+string.slice(1)}var styled2=createStyled(),styled_default=styled2;function resolveProps(defaultProps,props){let output={...props};for(let key in defaultProps)if(Object.prototype.hasOwnProperty.call(defaultProps,key)){let propName=key;if(propName==="components"||propName==="slots")output[propName]={...defaultProps[propName],...output[propName]};else if(propName==="componentsProps"||propName==="slotProps"){let defaultSlotProps=defaultProps[propName],slotProps=props[propName];if(!slotProps)output[propName]=defaultSlotProps||{};else if(!defaultSlotProps)output[propName]=slotProps;else{output[propName]={...slotProps};for(let slotKey in defaultSlotProps)if(Object.prototype.hasOwnProperty.call(defaultSlotProps,slotKey)){let slotPropName=slotKey;output[propName][slotPropName]=resolveProps(defaultSlotProps[slotPropName],slotProps[slotPropName])}}}else if(output[propName]===void 0)output[propName]=defaultProps[propName]}return output}function getThemeProps(params){let{theme,name,props}=params;if(!theme||!theme.components||!theme.components[name]||!theme.components[name].defaultProps)return props;return resolveProps(theme.components[name].defaultProps,props)}function useThemeProps({props,name,defaultTheme,themeId}){let theme=useTheme_default(defaultTheme);if(themeId)theme=theme[themeId]||theme;return getThemeProps({theme,name,props})}var React6=__toESM(require_react_development()),useEnhancedEffect=typeof window<"u"?React6.useLayoutEffect:React6.useEffect,useEnhancedEffect_default=useEnhancedEffect;var React18=__toESM(require_react_development()),import_prop_types9=__toESM(require_prop_types());var React13=__toESM(require_react_development()),import_prop_types6=__toESM(require_prop_types());function chainPropTypes(propType1,propType2){return function(...args){return propType1(...args)||propType2(...args)}}var import_prop_types4=__toESM(require_prop_types());function isClassComponent(elementType){let{prototype={}}=elementType;return Boolean(prototype.isReactComponent)}function acceptingRef(props,propName,componentName,location,propFullName){let element=props[propName],safePropName=propFullName||propName;if(element==null||typeof window>"u")return null;let warningHint,elementType=element.type;if(typeof elementType==="function"&&!isClassComponent(elementType))warningHint="Did you accidentally use a plain function component for an element instead?";if(warningHint!==void 0)return Error(`Invalid ${location} \`${safePropName}\` supplied to \`${componentName}\`. Expected an element that can hold a ref. ${warningHint} For more information see https://mui.com/r/caveat-with-refs-guide`);return null}var elementAcceptingRef=chainPropTypes(import_prop_types4.default.element,acceptingRef);elementAcceptingRef.isRequired=chainPropTypes(import_prop_types4.default.element.isRequired,acceptingRef);var elementAcceptingRef_default=elementAcceptingRef;function exactProp(propTypes){return{...propTypes,["exact-prop: \u200B"]:(props)=>{let unsupportedProps=Object.keys(props).filter((prop)=>!propTypes.hasOwnProperty(prop));if(unsupportedProps.length>0)return Error(`The following props are not supported: ${unsupportedProps.map((prop)=>`\`${prop}\``).join(", ")}. Please remove them.`);return null}}}function HTMLElementType(props,propName,componentName,location,propFullName){let propValue=props[propName],safePropName=propFullName||propName;if(propValue==null)return null;if(propValue&&propValue.nodeType!==1)return Error(`Invalid ${location} \`${safePropName}\` supplied to \`${componentName}\`. Expected an HTMLElement.`);return null}var import_prop_types5=__toESM(require_prop_types()),refType=import_prop_types5.default.oneOfType([import_prop_types5.default.func,import_prop_types5.default.object]),refType_default=refType;function createChainedFunction(...funcs){return funcs.reduce((acc,func)=>{if(func==null)return acc;return function(...args){acc.apply(this,args),func.apply(this,args)}},()=>{})}function debounce(func,wait=166){let timeout;function debounced(...args){let later=()=>{func.apply(this,args)};clearTimeout(timeout),timeout=setTimeout(later,wait)}return debounced.clear=()=>{clearTimeout(timeout)},debounced}function ownerDocument(node){return node&&node.ownerDocument||document}function ownerWindow(node){return ownerDocument(node).defaultView||window}function setRef(ref,value){if(typeof ref==="function")ref(value);else if(ref)ref.current=value}var React7=__toESM(require_react_development());function useEventCallback(fn){let ref=React7.useRef(fn);return useEnhancedEffect_default(()=>{ref.current=fn}),React7.useRef((...args)=>(0,ref.current)(...args)).current}var useEventCallback_default=useEventCallback;var React8=__toESM(require_react_development());function useForkRef(...refs){let cleanupRef=React8.useRef(void 0),refEffect=React8.useCallback((instance)=>{let cleanups=refs.map((ref)=>{if(ref==null)return null;if(typeof ref==="function"){let refCallback=ref,refCleanup=refCallback(instance);return typeof refCleanup==="function"?refCleanup:()=>{refCallback(null)}}return ref.current=instance,()=>{ref.current=null}});return()=>{cleanups.forEach((refCleanup)=>refCleanup?.())}},refs);return React8.useMemo(()=>{if(refs.every((ref)=>ref==null))return null;return(value)=>{if(cleanupRef.current)cleanupRef.current(),cleanupRef.current=void 0;if(value!=null)cleanupRef.current=refEffect(value)}},refs)}function getScrollbarSize(win=window){let documentWidth=win.document.documentElement.clientWidth;return win.innerWidth-documentWidth}var React9=__toESM(require_react_development()),usePreviousProps=(value)=>{let ref=React9.useRef({});return React9.useEffect(()=>{ref.current=value}),ref.current},usePreviousProps_default=usePreviousProps;var React10=__toESM(require_react_development());function getReactElementRef(element){if(parseInt(React10.version,10)>=19)return element?.props?.ref||null;return element?.ref||null}var React11=__toESM(require_react_development()),ThemeContext2=React11.createContext(null);ThemeContext2.displayName="ThemeContext";var ThemeContext_default=ThemeContext2;var React12=__toESM(require_react_development());function useTheme4(){let theme=React12.useContext(ThemeContext_default);return React12.useDebugValue(theme),theme}var hasSymbol=typeof Symbol==="function"&&Symbol.for,nested_default=hasSymbol?Symbol.for("mui.nested"):"__THEME_NESTED__";var import_jsx_runtime4=__toESM(require_react_jsx_runtime_development());function mergeOuterLocalTheme(outerTheme,localTheme){if(typeof localTheme==="function"){let mergedTheme=localTheme(outerTheme);if(!mergedTheme)console.error(["MUI: You should return an object from your theme function, i.e.","<ThemeProvider theme={() => ({})} />"].join(`
10
+ `));else if(styles.some((style)=>style===void 0))console.error(`MUI: the styled(${component})(...args) API requires all its args to be defined.`);return stylesFactory(...styles)}}function internal_mutateStyles(tag,processor){if(Array.isArray(tag.__emotion_styles))tag.__emotion_styles=processor(tag.__emotion_styles)}var wrapper=[];function internal_serializeStyles(styles){return wrapper[0]=styles,import_emotion_serialize_development_cjs.serializeStyles(wrapper)}var React4=__toESM(require_react_development()),import_prop_types3=__toESM(require_prop_types());var sortBreakpointsValues=(values)=>{let breakpointsAsArray=Object.keys(values).map((key)=>({key,val:values[key]}))||[];return breakpointsAsArray.sort((breakpoint1,breakpoint2)=>breakpoint1.val-breakpoint2.val),breakpointsAsArray.reduce((acc,obj)=>({...acc,[obj.key]:obj.val}),{})};function createBreakpoints(breakpoints){let{values={xs:0,sm:600,md:900,lg:1200,xl:1536},unit="px",step=5,...other}=breakpoints,sortedValues=sortBreakpointsValues(values),keys=Object.keys(sortedValues);function up(key){return`@media (min-width:${typeof values[key]==="number"?values[key]:key}${unit})`}function down(key){return`@media (max-width:${(typeof values[key]==="number"?values[key]:key)-step/100}${unit})`}function between(start,end){let endIndex=keys.indexOf(end);return`@media (min-width:${typeof values[start]==="number"?values[start]:start}${unit}) and (max-width:${(endIndex!==-1&&typeof values[keys[endIndex]]==="number"?values[keys[endIndex]]:end)-step/100}${unit})`}function only(key){if(keys.indexOf(key)+1<keys.length)return between(key,keys[keys.indexOf(key)+1]);return up(key)}function not(key){let keyIndex=keys.indexOf(key);if(keyIndex===0)return up(keys[1]);if(keyIndex===keys.length-1)return down(keys[keyIndex]);return between(key,keys[keys.indexOf(key)+1]).replace("@media","@media not all and")}return{keys,values:sortedValues,up,down,between,only,not,unit,...other}}var shape={borderRadius:4},shape_default=shape;function createSpacing(spacingInput=8,transform=createUnarySpacing({spacing:spacingInput})){if(spacingInput.mui)return spacingInput;let spacing=(...argsInput)=>{if(!(argsInput.length<=4))console.error(`MUI: Too many arguments provided, expected between 0 and 4, got ${argsInput.length}`);return(argsInput.length===0?[1]:argsInput).map((argument)=>{let output=transform(argument);return typeof output==="number"?`${output}px`:output}).join(" ")};return spacing.mui=!0,spacing}function applyStyles(key,styles){let theme=this;if(theme.vars){if(!theme.colorSchemes?.[key]||typeof theme.getColorSchemeSelector!=="function")return{};let selector=theme.getColorSchemeSelector(key);if(selector==="&")return styles;if(selector.includes("data-")||selector.includes("."))selector=`*:where(${selector.replace(/\s*&$/,"")}) &`;return{[selector]:styles}}if(theme.palette.mode===key)return styles;return{}}function createTheme(options={},...args){let{breakpoints:breakpointsInput={},palette:paletteInput={},spacing:spacingInput,shape:shapeInput={},...other}=options,breakpoints=createBreakpoints(breakpointsInput),spacing=createSpacing(spacingInput),muiTheme=deepmerge({breakpoints,direction:"ltr",components:{},palette:{mode:"light",...paletteInput},spacing,shape:{...shape_default,...shapeInput}},other);return muiTheme=cssContainerQueries(muiTheme),muiTheme.applyStyles=applyStyles,muiTheme=args.reduce((acc,argument)=>deepmerge(acc,argument),muiTheme),muiTheme.unstable_sxConfig={...defaultSxConfig_default,...other?.unstable_sxConfig},muiTheme.unstable_sx=function(props){return styleFunctionSx_default({sx:props,theme:this})},muiTheme}var createTheme_default=createTheme;var React3=__toESM(require_react_development());function isObjectEmpty(obj){return Object.keys(obj).length===0}function useTheme(defaultTheme=null){let contextTheme=React3.useContext(import_emotion_react_development_cjs.ThemeContext);return!contextTheme||isObjectEmpty(contextTheme)?defaultTheme:contextTheme}var useThemeWithoutDefault_default=useTheme;var systemDefaultTheme=createTheme_default();function useTheme2(defaultTheme=systemDefaultTheme){return useThemeWithoutDefault_default(defaultTheme)}var useTheme_default=useTheme2;var import_jsx_runtime2=__toESM(require_react_jsx_runtime_development());function wrapGlobalLayer(styles){let serialized=internal_serializeStyles(styles);if(styles!==serialized&&serialized.styles){if(!serialized.styles.match(/^@layer\s+[^{]*$/))serialized.styles=`@layer global{${serialized.styles}}`;return serialized}return styles}function GlobalStyles2({styles,themeId,defaultTheme={}}){let upperTheme=useTheme_default(defaultTheme),resolvedTheme=themeId?upperTheme[themeId]||upperTheme:upperTheme,globalStyles=typeof styles==="function"?styles(resolvedTheme):styles;if(resolvedTheme.modularCssLayers)if(Array.isArray(globalStyles))globalStyles=globalStyles.map((styleArg)=>{if(typeof styleArg==="function")return wrapGlobalLayer(styleArg(resolvedTheme));return wrapGlobalLayer(styleArg)});else globalStyles=wrapGlobalLayer(globalStyles);return import_jsx_runtime2.jsx(GlobalStyles,{styles:globalStyles})}GlobalStyles2.propTypes={defaultTheme:import_prop_types3.default.object,styles:import_prop_types3.default.oneOfType([import_prop_types3.default.array,import_prop_types3.default.func,import_prop_types3.default.number,import_prop_types3.default.object,import_prop_types3.default.string,import_prop_types3.default.bool]),themeId:import_prop_types3.default.string};var GlobalStyles_default=GlobalStyles2;var defaultGenerator=(componentName)=>componentName,createClassNameGenerator=()=>{let generate=defaultGenerator;return{configure(generator){generate=generator},generate(componentName){return generate(componentName)},reset(){generate=defaultGenerator}}},ClassNameGenerator=createClassNameGenerator(),ClassNameGenerator_default=ClassNameGenerator;var React5=__toESM(require_react_development());import clsx from"clsx";var import_jsx_runtime3=__toESM(require_react_jsx_runtime_development());function createBox(options={}){let{themeId,defaultTheme,defaultClassName="MuiBox-root",generateClassName}=options,BoxRoot=styled("div",{shouldForwardProp:(prop)=>prop!=="theme"&&prop!=="sx"&&prop!=="as"})(styleFunctionSx_default);return React5.forwardRef(function(inProps,ref){let theme=useTheme_default(defaultTheme),{className,component="div",...other}=extendSxProp(inProps);return import_jsx_runtime3.jsx(BoxRoot,{as:component,ref,className:clsx(className,generateClassName?generateClassName(defaultClassName):defaultClassName),theme:themeId?theme[themeId]||theme:theme,...other})})}var globalStateClasses={active:"active",checked:"checked",completed:"completed",disabled:"disabled",error:"error",expanded:"expanded",focused:"focused",focusVisible:"focusVisible",open:"open",readOnly:"readOnly",required:"required",selected:"selected"};function generateUtilityClass(componentName,slot,globalStatePrefix="Mui"){let globalStateClass=globalStateClasses[slot];return globalStateClass?`${globalStatePrefix}-${globalStateClass}`:`${ClassNameGenerator_default.generate(componentName)}-${slot}`}function generateUtilityClasses(componentName,slots,globalStatePrefix="Mui"){let result={};return slots.forEach((slot)=>{result[slot]=generateUtilityClass(componentName,slot,globalStatePrefix)}),result}var import_react_is2=__toESM(require_react_is_development2());function getFunctionComponentName(Component,fallback=""){return Component.displayName||Component.name||fallback}function getWrappedName(outerType,innerType,wrapperName){let functionName=getFunctionComponentName(innerType);return outerType.displayName||(functionName!==""?`${wrapperName}(${functionName})`:wrapperName)}function getDisplayName(Component){if(Component==null)return;if(typeof Component==="string")return Component;if(typeof Component==="function")return getFunctionComponentName(Component,"Component");if(typeof Component==="object")switch(Component.$$typeof){case import_react_is2.ForwardRef:return getWrappedName(Component,Component.render,"ForwardRef");case import_react_is2.Memo:return getWrappedName(Component,Component.type,"memo");default:return}return}function preprocessStyles(input){let{variants,...style}=input,result={variants,style:internal_serializeStyles(style),isProcessed:!0};if(result.style===style)return result;if(variants)variants.forEach((variant)=>{if(typeof variant.style!=="function")variant.style=internal_serializeStyles(variant.style)});return result}var systemDefaultTheme2=createTheme_default();function shouldForwardProp(prop){return prop!=="ownerState"&&prop!=="theme"&&prop!=="sx"&&prop!=="as"}function shallowLayer(serialized,layerName){if(layerName&&serialized&&typeof serialized==="object"&&serialized.styles&&!serialized.styles.startsWith("@layer"))serialized.styles=`@layer ${layerName}{${String(serialized.styles)}}`;return serialized}function defaultOverridesResolver(slot){if(!slot)return null;return(_props,styles)=>styles[slot]}function attachTheme(props,themeId,defaultTheme){props.theme=isObjectEmpty2(props.theme)?defaultTheme:props.theme[themeId]||props.theme}function processStyle(props,style,layerName){let resolvedStyle=typeof style==="function"?style(props):style;if(Array.isArray(resolvedStyle))return resolvedStyle.flatMap((subStyle)=>processStyle(props,subStyle,layerName));if(Array.isArray(resolvedStyle?.variants)){let rootStyle;if(resolvedStyle.isProcessed)rootStyle=layerName?shallowLayer(resolvedStyle.style,layerName):resolvedStyle.style;else{let{variants,...otherStyles}=resolvedStyle;rootStyle=layerName?shallowLayer(internal_serializeStyles(otherStyles),layerName):otherStyles}return processStyleVariants(props,resolvedStyle.variants,[rootStyle],layerName)}if(resolvedStyle?.isProcessed)return layerName?shallowLayer(internal_serializeStyles(resolvedStyle.style),layerName):resolvedStyle.style;return layerName?shallowLayer(internal_serializeStyles(resolvedStyle),layerName):resolvedStyle}function processStyleVariants(props,variants,results=[],layerName=void 0){let mergedState;variantLoop:for(let i=0;i<variants.length;i+=1){let variant=variants[i];if(typeof variant.props==="function"){if(mergedState??={...props,...props.ownerState,ownerState:props.ownerState},!variant.props(mergedState))continue}else for(let key in variant.props)if(props[key]!==variant.props[key]&&props.ownerState?.[key]!==variant.props[key])continue variantLoop;if(typeof variant.style==="function")mergedState??={...props,...props.ownerState,ownerState:props.ownerState},results.push(layerName?shallowLayer(internal_serializeStyles(variant.style(mergedState)),layerName):variant.style(mergedState));else results.push(layerName?shallowLayer(internal_serializeStyles(variant.style),layerName):variant.style)}return results}function createStyled(input={}){let{themeId,defaultTheme=systemDefaultTheme2,rootShouldForwardProp=shouldForwardProp,slotShouldForwardProp=shouldForwardProp}=input;function styleAttachTheme(props){attachTheme(props,themeId,defaultTheme)}return(tag,inputOptions={})=>{internal_mutateStyles(tag,(styles)=>styles.filter((style)=>style!==styleFunctionSx_default));let{name:componentName,slot:componentSlot,skipVariantsResolver:inputSkipVariantsResolver,skipSx:inputSkipSx,overridesResolver=defaultOverridesResolver(lowercaseFirstLetter(componentSlot)),...options}=inputOptions,layerName=componentName&&componentName.startsWith("Mui")||!!componentSlot?"components":"custom",skipVariantsResolver=inputSkipVariantsResolver!==void 0?inputSkipVariantsResolver:componentSlot&&componentSlot!=="Root"&&componentSlot!=="root"||!1,skipSx=inputSkipSx||!1,shouldForwardPropOption=shouldForwardProp;if(componentSlot==="Root"||componentSlot==="root")shouldForwardPropOption=rootShouldForwardProp;else if(componentSlot)shouldForwardPropOption=slotShouldForwardProp;else if(isStringTag(tag))shouldForwardPropOption=void 0;let defaultStyledResolver=styled(tag,{shouldForwardProp:shouldForwardPropOption,label:generateStyledLabel(componentName,componentSlot),...options}),transformStyle=(style)=>{if(style.__emotion_real===style)return style;if(typeof style==="function")return function(props){return processStyle(props,style,props.theme.modularCssLayers?layerName:void 0)};if(isPlainObject(style)){let serialized=preprocessStyles(style);return function(props){if(!serialized.variants)return props.theme.modularCssLayers?shallowLayer(serialized.style,layerName):serialized.style;return processStyle(props,serialized,props.theme.modularCssLayers?layerName:void 0)}}return style},muiStyledResolver=(...expressionsInput)=>{let expressionsHead=[],expressionsBody=expressionsInput.map(transformStyle),expressionsTail=[];if(expressionsHead.push(styleAttachTheme),componentName&&overridesResolver)expressionsTail.push(function(props){let styleOverrides=props.theme.components?.[componentName]?.styleOverrides;if(!styleOverrides)return null;let resolvedStyleOverrides={};for(let slotKey in styleOverrides)resolvedStyleOverrides[slotKey]=processStyle(props,styleOverrides[slotKey],props.theme.modularCssLayers?"theme":void 0);return overridesResolver(props,resolvedStyleOverrides)});if(componentName&&!skipVariantsResolver)expressionsTail.push(function(props){let themeVariants=props.theme?.components?.[componentName]?.variants;if(!themeVariants)return null;return processStyleVariants(props,themeVariants,[],props.theme.modularCssLayers?"theme":void 0)});if(!skipSx)expressionsTail.push(styleFunctionSx_default);if(Array.isArray(expressionsBody[0])){let inputStrings=expressionsBody.shift(),placeholdersHead=Array(expressionsHead.length).fill(""),placeholdersTail=Array(expressionsTail.length).fill(""),outputStrings;outputStrings=[...placeholdersHead,...inputStrings,...placeholdersTail],outputStrings.raw=[...placeholdersHead,...inputStrings.raw,...placeholdersTail],expressionsHead.unshift(outputStrings)}let expressions=[...expressionsHead,...expressionsBody,...expressionsTail],Component=defaultStyledResolver(...expressions);if(tag.muiName)Component.muiName=tag.muiName;return Component.displayName=generateDisplayName(componentName,componentSlot,tag),Component};if(defaultStyledResolver.withConfig)muiStyledResolver.withConfig=defaultStyledResolver.withConfig;return muiStyledResolver}}function generateDisplayName(componentName,componentSlot,tag){if(componentName)return`${componentName}${capitalize(componentSlot||"")}`;return`Styled(${getDisplayName(tag)})`}function generateStyledLabel(componentName,componentSlot){let label;if(componentName)label=`${componentName}-${lowercaseFirstLetter(componentSlot||"Root")}`;return label}function isObjectEmpty2(object){for(let _ in object)return!1;return!0}function isStringTag(tag){return typeof tag==="string"&&tag.charCodeAt(0)>96}function lowercaseFirstLetter(string){if(!string)return string;return string.charAt(0).toLowerCase()+string.slice(1)}var styled2=createStyled(),styled_default=styled2;function resolveProps(defaultProps,props){let output={...props};for(let key in defaultProps)if(Object.prototype.hasOwnProperty.call(defaultProps,key)){let propName=key;if(propName==="components"||propName==="slots")output[propName]={...defaultProps[propName],...output[propName]};else if(propName==="componentsProps"||propName==="slotProps"){let defaultSlotProps=defaultProps[propName],slotProps=props[propName];if(!slotProps)output[propName]=defaultSlotProps||{};else if(!defaultSlotProps)output[propName]=slotProps;else{output[propName]={...slotProps};for(let slotKey in defaultSlotProps)if(Object.prototype.hasOwnProperty.call(defaultSlotProps,slotKey)){let slotPropName=slotKey;output[propName][slotPropName]=resolveProps(defaultSlotProps[slotPropName],slotProps[slotPropName])}}}else if(output[propName]===void 0)output[propName]=defaultProps[propName]}return output}function getThemeProps(params){let{theme,name,props}=params;if(!theme||!theme.components||!theme.components[name]||!theme.components[name].defaultProps)return props;return resolveProps(theme.components[name].defaultProps,props)}function useThemeProps({props,name,defaultTheme,themeId}){let theme=useTheme_default(defaultTheme);if(themeId)theme=theme[themeId]||theme;return getThemeProps({theme,name,props})}var React6=__toESM(require_react_development()),useEnhancedEffect=typeof window<"u"?React6.useLayoutEffect:React6.useEffect,useEnhancedEffect_default=useEnhancedEffect;var React18=__toESM(require_react_development()),import_prop_types9=__toESM(require_prop_types());var React13=__toESM(require_react_development()),import_prop_types6=__toESM(require_prop_types());function chainPropTypes(propType1,propType2){return function(...args){return propType1(...args)||propType2(...args)}}var import_prop_types4=__toESM(require_prop_types());function isClassComponent(elementType){let{prototype={}}=elementType;return Boolean(prototype.isReactComponent)}function acceptingRef(props,propName,componentName,location,propFullName){let element=props[propName],safePropName=propFullName||propName;if(element==null||typeof window>"u")return null;let warningHint,elementType=element.type;if(typeof elementType==="function"&&!isClassComponent(elementType))warningHint="Did you accidentally use a plain function component for an element instead?";if(warningHint!==void 0)return Error(`Invalid ${location} \`${safePropName}\` supplied to \`${componentName}\`. Expected an element that can hold a ref. ${warningHint} For more information see https://mui.com/r/caveat-with-refs-guide`);return null}var elementAcceptingRef=chainPropTypes(import_prop_types4.default.element,acceptingRef);elementAcceptingRef.isRequired=chainPropTypes(import_prop_types4.default.element.isRequired,acceptingRef);var elementAcceptingRef_default=elementAcceptingRef;function exactProp(propTypes){return{...propTypes,["exact-prop: \u200B"]:(props)=>{let unsupportedProps=Object.keys(props).filter((prop)=>!propTypes.hasOwnProperty(prop));if(unsupportedProps.length>0)return Error(`The following props are not supported: ${unsupportedProps.map((prop)=>`\`${prop}\``).join(", ")}. Please remove them.`);return null}}}function HTMLElementType(props,propName,componentName,location,propFullName){let propValue=props[propName],safePropName=propFullName||propName;if(propValue==null)return null;if(propValue&&propValue.nodeType!==1)return Error(`Invalid ${location} \`${safePropName}\` supplied to \`${componentName}\`. Expected an HTMLElement.`);return null}var import_prop_types5=__toESM(require_prop_types()),refType=import_prop_types5.default.oneOfType([import_prop_types5.default.func,import_prop_types5.default.object]),refType_default=refType;function createChainedFunction(...funcs){return funcs.reduce((acc,func)=>{if(func==null)return acc;return function(...args){acc.apply(this,args),func.apply(this,args)}},()=>{})}function debounce(func,wait=166){let timeout;function debounced(...args){let later=()=>{func.apply(this,args)};clearTimeout(timeout),timeout=setTimeout(later,wait)}return debounced.clear=()=>{clearTimeout(timeout)},debounced}function ownerDocument(node){return node&&node.ownerDocument||document}function ownerWindow(node){return ownerDocument(node).defaultView||window}function setRef(ref,value){if(typeof ref==="function")ref(value);else if(ref)ref.current=value}var React7=__toESM(require_react_development());function useEventCallback(fn){let ref=React7.useRef(fn);return useEnhancedEffect_default(()=>{ref.current=fn}),React7.useRef((...args)=>(0,ref.current)(...args)).current}var useEventCallback_default=useEventCallback;var React8=__toESM(require_react_development());function useForkRef(...refs){let cleanupRef=React8.useRef(void 0),refEffect=React8.useCallback((instance)=>{let cleanups=refs.map((ref)=>{if(ref==null)return null;if(typeof ref==="function"){let refCallback=ref,refCleanup=refCallback(instance);return typeof refCleanup==="function"?refCleanup:()=>{refCallback(null)}}return ref.current=instance,()=>{ref.current=null}});return()=>{cleanups.forEach((refCleanup)=>refCleanup?.())}},refs);return React8.useMemo(()=>{if(refs.every((ref)=>ref==null))return null;return(value)=>{if(cleanupRef.current)cleanupRef.current(),cleanupRef.current=void 0;if(value!=null)cleanupRef.current=refEffect(value)}},refs)}function getScrollbarSize(win=window){let documentWidth=win.document.documentElement.clientWidth;return win.innerWidth-documentWidth}var React9=__toESM(require_react_development()),usePreviousProps=(value)=>{let ref=React9.useRef({});return React9.useEffect(()=>{ref.current=value}),ref.current},usePreviousProps_default=usePreviousProps;var React10=__toESM(require_react_development());function getReactElementRef(element){if(parseInt(React10.version,10)>=19)return element?.props?.ref||null;return element?.ref||null}var React11=__toESM(require_react_development()),ThemeContext=React11.createContext(null);ThemeContext.displayName="ThemeContext";var ThemeContext_default=ThemeContext;var React12=__toESM(require_react_development());function useTheme4(){let theme=React12.useContext(ThemeContext_default);return React12.useDebugValue(theme),theme}var hasSymbol=typeof Symbol==="function"&&Symbol.for,nested_default=hasSymbol?Symbol.for("mui.nested"):"__THEME_NESTED__";var import_jsx_runtime4=__toESM(require_react_jsx_runtime_development());function mergeOuterLocalTheme(outerTheme,localTheme){if(typeof localTheme==="function"){let mergedTheme=localTheme(outerTheme);if(!mergedTheme)console.error(["MUI: You should return an object from your theme function, i.e.","<ThemeProvider theme={() => ({})} />"].join(`
11
11
  `));return mergedTheme}return{...outerTheme,...localTheme}}function ThemeProvider(props){let{children,theme:localTheme}=props,outerTheme=useTheme4();if(outerTheme===null&&typeof localTheme==="function")console.error(["MUI: You are providing a theme function prop to the ThemeProvider component:","<ThemeProvider theme={outerTheme => outerTheme} />","","However, no outer theme is present.","Make sure a theme is already injected higher in the React tree or provide a theme object."].join(`
12
12
  `));let theme=React13.useMemo(()=>{let output=outerTheme===null?{...localTheme}:mergeOuterLocalTheme(outerTheme,localTheme);if(output!=null)output[nested_default]=outerTheme!==null;return output},[localTheme,outerTheme]);return import_jsx_runtime4.jsx(ThemeContext_default.Provider,{value:theme,children})}ThemeProvider.propTypes={children:import_prop_types6.default.node,theme:import_prop_types6.default.oneOfType([import_prop_types6.default.object,import_prop_types6.default.func]).isRequired};ThemeProvider.propTypes=exactProp(ThemeProvider.propTypes);var ThemeProvider_default=ThemeProvider;var React14=__toESM(require_react_development()),import_prop_types7=__toESM(require_prop_types()),import_jsx_runtime5=__toESM(require_react_jsx_runtime_development()),RtlContext=React14.createContext();function RtlProvider({value,...props}){return import_jsx_runtime5.jsx(RtlContext.Provider,{value:value??!0,...props})}RtlProvider.propTypes={children:import_prop_types7.default.node,value:import_prop_types7.default.bool};var useRtl=()=>React14.useContext(RtlContext)??!1,RtlProvider_default=RtlProvider;var React15=__toESM(require_react_development()),import_prop_types8=__toESM(require_prop_types());var import_jsx_runtime6=__toESM(require_react_jsx_runtime_development()),PropsContext=React15.createContext(void 0);function DefaultPropsProvider({value,children}){return import_jsx_runtime6.jsx(PropsContext.Provider,{value,children})}DefaultPropsProvider.propTypes={children:import_prop_types8.default.node,value:import_prop_types8.default.object};function getThemeProps2(params){let{theme,name,props}=params;if(!theme||!theme.components||!theme.components[name])return props;let config=theme.components[name];if(config.defaultProps)return resolveProps(config.defaultProps,props);if(!config.styleOverrides&&!config.variants)return resolveProps(config,props);return props}function useDefaultProps({props,name}){let ctx=React15.useContext(PropsContext);return getThemeProps2({props,name,theme:{components:ctx}})}var DefaultPropsProvider_default=DefaultPropsProvider;var React17=__toESM(require_react_development());var React16=__toESM(require_react_development()),globalId=0;function useGlobalId(idOverride){let[defaultId,setDefaultId]=React16.useState(idOverride),id=idOverride||defaultId;return React16.useEffect(()=>{if(defaultId==null)globalId+=1,setDefaultId(`mui-${globalId}`)},[defaultId]),id}var safeReact={...React16},maybeReactUseId=safeReact.useId;function useId(idOverride){if(maybeReactUseId!==void 0){let reactId=maybeReactUseId();return idOverride??reactId}return useGlobalId(idOverride)}var import_jsx_runtime7=__toESM(require_react_jsx_runtime_development());function useLayerOrder(theme){let upperTheme=useThemeWithoutDefault_default(),id=useId()||"",{modularCssLayers}=theme,layerOrder="mui.global, mui.components, mui.theme, mui.custom, mui.sx";if(!modularCssLayers||upperTheme!==null)layerOrder="";else if(typeof modularCssLayers==="string")layerOrder=modularCssLayers.replace(/mui(?!\.)/g,layerOrder);else layerOrder=`@layer ${layerOrder};`;if(useEnhancedEffect_default(()=>{let head=document.querySelector("head");if(!head)return;let firstChild=head.firstChild;if(layerOrder){if(firstChild&&firstChild.hasAttribute?.("data-mui-layer-order")&&firstChild.getAttribute("data-mui-layer-order")===id)return;let styleElement=document.createElement("style");styleElement.setAttribute("data-mui-layer-order",id),styleElement.textContent=layerOrder,head.prepend(styleElement)}else head.querySelector(`style[data-mui-layer-order="${id}"]`)?.remove()},[layerOrder,id]),!layerOrder)return null;return import_jsx_runtime7.jsx(GlobalStyles_default,{styles:layerOrder})}var import_jsx_runtime8=__toESM(require_react_jsx_runtime_development()),EMPTY_THEME={};function useThemeScoping(themeId,upperTheme,localTheme,isPrivate=!1){return React18.useMemo(()=>{let resolvedTheme=themeId?upperTheme[themeId]||upperTheme:upperTheme;if(typeof localTheme==="function"){let mergedTheme=localTheme(resolvedTheme),result=themeId?{...upperTheme,[themeId]:mergedTheme}:mergedTheme;if(isPrivate)return()=>result;return result}return themeId?{...upperTheme,[themeId]:localTheme}:{...upperTheme,...localTheme}},[themeId,upperTheme,localTheme,isPrivate])}function ThemeProvider3(props){let{children,theme:localTheme,themeId}=props,upperTheme=useThemeWithoutDefault_default(EMPTY_THEME),upperPrivateTheme=useTheme4()||EMPTY_THEME;if(upperTheme===null&&typeof localTheme==="function"||themeId&&upperTheme&&!upperTheme[themeId]&&typeof localTheme==="function")console.error(["MUI: You are providing a theme function prop to the ThemeProvider component:","<ThemeProvider theme={outerTheme => outerTheme} />","","However, no outer theme is present.","Make sure a theme is already injected higher in the React tree or provide a theme object."].join(`
13
13
  `));let engineTheme=useThemeScoping(themeId,upperTheme,localTheme),privateTheme=useThemeScoping(themeId,upperPrivateTheme,localTheme,!0),rtlValue=(themeId?engineTheme[themeId]:engineTheme).direction==="rtl",layerOrder=useLayerOrder(engineTheme);return import_jsx_runtime8.jsx(ThemeProvider_default,{theme:privateTheme,children:import_jsx_runtime8.jsx(import_emotion_react_development_cjs.ThemeContext.Provider,{value:engineTheme,children:import_jsx_runtime8.jsx(RtlProvider_default,{value:rtlValue,children:import_jsx_runtime8.jsxs(DefaultPropsProvider_default,{value:themeId?engineTheme[themeId].components:engineTheme.components,children:[layerOrder,children]})})})})}ThemeProvider3.propTypes={children:import_prop_types9.default.node,theme:import_prop_types9.default.oneOfType([import_prop_types9.default.func,import_prop_types9.default.object]).isRequired,themeId:import_prop_types9.default.string};ThemeProvider3.propTypes=exactProp(ThemeProvider3.propTypes);var ThemeProvider_default2=ThemeProvider3;var arg={theme:void 0};function unstable_memoTheme(styleFn){let lastValue,lastTheme;return function(props){let value=lastValue;if(value===void 0||props.theme!==lastTheme)arg.theme=props.theme,value=preprocessStyles(styleFn(arg)),lastValue=value,lastTheme=props.theme;return value}}var React21=__toESM(require_react_development()),import_prop_types10=__toESM(require_prop_types());var React19=__toESM(require_react_development()),import_jsx_runtime9=__toESM(require_react_jsx_runtime_development()),DEFAULT_MODE_STORAGE_KEY="mode",DEFAULT_COLOR_SCHEME_STORAGE_KEY="color-scheme",DEFAULT_ATTRIBUTE="data-color-scheme";function InitColorSchemeScript(options){let{defaultMode="system",defaultLightColorScheme="light",defaultDarkColorScheme="dark",modeStorageKey=DEFAULT_MODE_STORAGE_KEY,colorSchemeStorageKey=DEFAULT_COLOR_SCHEME_STORAGE_KEY,attribute:initialAttribute=DEFAULT_ATTRIBUTE,colorSchemeNode="document.documentElement",nonce}=options||{},setter="",attribute=initialAttribute;if(initialAttribute==="class")attribute=".%s";if(initialAttribute==="data")attribute="[data-%s]";if(attribute.startsWith(".")){let selector=attribute.substring(1);setter+=`${colorSchemeNode}.classList.remove('${selector}'.replace('%s', light), '${selector}'.replace('%s', dark));
@@ -1,3 +1,3 @@
1
1
  // @bun
2
- import{topUpTokens}from"./chunk-9g45c5md.js";import"./chunk-xxw67jpk.js";import"./chunk-xg49s85z.js";import"./chunk-bntsn3wj.js";import{normalizeCloudUrl,loadCredential,saveCredential,verifyCredential,performDeviceLogin}from"./chunk-rg86bhtb.js";import{fail}from"./chunk-s23gtejf.js";import{defaultCloudUrl}from"./chunk-w30zfv3m.js";import{defineCommand}from"./chunk-2smsg2ct.js";import{createInterface}from"readline/promises";async function waitForEnter(message){if(!process.stdin.isTTY)return;let rl=createInterface({input:process.stdin,output:process.stdout});try{await rl.question(message)}finally{rl.close()}}var login_default=defineCommand({meta:{name:"login",description:"Log in to velloo-cloud (opens the browser, saves a CLI token)"},args:{url:{type:"string",description:"velloo-cloud base URL (default: $VELLOO_CLOUD_URL or the built-in default)"},force:{type:"boolean",description:"Re-authenticate even if already logged in",default:!1}},async run({args}){let cloudUrl=args.url?normalizeCloudUrl(args.url):defaultCloudUrl();if(!args.force){let existing=await loadCredential(cloudUrl),email=existing&&await verifyCredential(cloudUrl,existing.token);if(email){console.log(`velloo login: already logged in to ${cloudUrl} as ${email}.`),console.log(" Use `velloo login --force` to switch accounts, or `velloo logout` to sign out.");return}}let result;try{result=await performDeviceLogin(cloudUrl,async({verificationUrl,userCode})=>{console.log(`
2
+ import{topUpTokens}from"./chunk-yp39f93e.js";import"./chunk-w40pqmyz.js";import"./chunk-n70zfv0m.js";import"./chunk-zexzy6zv.js";import{normalizeCloudUrl,loadCredential,saveCredential,verifyCredential,performDeviceLogin}from"./chunk-c11n1tve.js";import{fail}from"./chunk-s23gtejf.js";import{defaultCloudUrl}from"./chunk-3f2p94wa.js";import{defineCommand}from"./chunk-2smsg2ct.js";import{createInterface}from"readline/promises";async function waitForEnter(message){if(!process.stdin.isTTY)return;let rl=createInterface({input:process.stdin,output:process.stdout});try{await rl.question(message)}finally{rl.close()}}var login_default=defineCommand({meta:{name:"login",description:"Log in to velloo-cloud (opens the browser, saves a CLI token)"},args:{url:{type:"string",description:"velloo-cloud base URL (default: $VELLOO_CLOUD_URL or the built-in default)"},force:{type:"boolean",description:"Re-authenticate even if already logged in",default:!1}},async run({args}){let cloudUrl=args.url?normalizeCloudUrl(args.url):defaultCloudUrl();if(!args.force){let existing=await loadCredential(cloudUrl),email=existing&&await verifyCredential(cloudUrl,existing.token);if(email){console.log(`velloo login: already logged in to ${cloudUrl} as ${email}.`),console.log(" Use `velloo login --force` to switch accounts, or `velloo logout` to sign out.");return}}let result;try{result=await performDeviceLogin(cloudUrl,async({verificationUrl,userCode})=>{console.log(`
3
3
  velloo login will open your browser to approve this device (code ${userCode}).`),await waitForEnter("Press Enter to open the browser\u2026 "),console.log(`Opening ${verificationUrl}`),console.log(`If the browser doesn't open, visit that URL and enter: ${userCode}`)})}catch(err){fail("login",err instanceof Error?err.message:String(err))}let path=await saveCredential(cloudUrl,result);console.log(`velloo login: logged in to ${cloudUrl} as ${result.email}`),console.log(` credentials saved to ${path}`);try{await topUpTokens({url:cloudUrl,token:result.token},10)}catch{}}});export{login_default as default};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{recordedDesignName}from"./chunk-9g45c5md.js";import"./chunk-xxw67jpk.js";import"./chunk-xg49s85z.js";import"./chunk-bntsn3wj.js";import"./chunk-rrrn1mkq.js";import{assertLoopbackHost,daemonRoot,isLive,ensureDaemon,stopDaemon}from"./chunk-qgbat4fv.js";import"./chunk-80fjfyha.js";import{fail}from"./chunk-s23gtejf.js";import"./chunk-dy7qwj3t.js";import"./chunk-32cq4wpr.js";import"./chunk-p93x4pn2.js";import"./chunk-45wv1fs5.js";import{openUrl}from"./chunk-hggap8fq.js";import{createProgress}from"./chunk-pjtg3wnm.js";import{designWithFolder}from"./chunk-cq2q36d1.js";import"./chunk-z6r6wxm6.js";import"./chunk-asqpx5v7.js";import{findDesigns,DESIGN_ARG_DESCRIPTION,resolveDesign}from"./chunk-6w42sr61.js";import"./chunk-w30zfv3m.js";import{traceEnabled}from"./chunk-6tx68d90.js";import{require_picocolors}from"./chunk-jrsknzjt.js";import{__toESM,defineCommand}from"./chunk-2smsg2ct.js";import{basename,join}from"path";var import_picocolors=__toESM(require_picocolors(),1);function actionForRunKey(key,targetCount=1){if(key==="b")return{kind:"background"};if(key==="q"||key==="\x03")return{kind:"stop"};if(targetCount<=1)return key==="o"?{kind:"open"}:null;if(key==="a"||key==="o")return{kind:"open"};if(/^[1-9]$/.test(key)){let index=Number(key);return index<=targetCount?{kind:"open",index}:null}return null}function shouldStayForeground(opts){return!opts.background&&opts.stdinIsTTY}function bindRunKeys(onKey){let stdin=process.stdin;if(!stdin.isTTY)return()=>{};stdin.setRawMode(!0),stdin.resume(),stdin.setEncoding("utf8");let onData=(chunk)=>{onKey(chunk)};return stdin.on("data",onData),()=>{if(stdin.off("data",onData),stdin.isTTY)stdin.setRawMode(!1);stdin.pause()}}var LIVE_POLL_MS=2000;async function waitInForeground(opts){return await new Promise((resolve)=>{let settled=!1,unbind=()=>{},timer,finish=(outcome)=>{if(settled)return;if(settled=!0,unbind(),timer!==void 0)clearInterval(timer);process.off("SIGINT",onStop),process.off("SIGTERM",onStop),resolve(outcome)},onStop=()=>finish("stop");unbind=bindRunKeys((key)=>{let action=actionForRunKey(key,opts.targetCount??1);if(!action)return;if(action.kind==="open")opts.onOpen(action.index);else finish(action.kind)}),process.on("SIGINT",onStop),process.on("SIGTERM",onStop),timer=setInterval(()=>{opts.isLive().then((live)=>{if(!live)finish("died")})},LIVE_POLL_MS)})}import{resolve}from"path";async function resolveRunTargets(arg,opts={}){let cwd=resolve(opts.cwd??"."),single=async()=>{let folder=await resolveDesign(arg,"run",{interactive:!0,requireConfig:!0,cwd});return[{name:recordedDesignName(folder)??void 0,folder}]};if(arg)return single();let found;try{found=await findDesigns(cwd)}catch{return single()}if(!found||found.designs.length<2)return single();let targets=[];for(let design of found.designs)if(design.exists&&!design.outsideRepo)targets.push({name:design.name,folder:design.root});if(targets.length===0)return single();if(targets.length===1)return targets;let defaultDesign=found.defaultDesign;if(defaultDesign)targets.sort((a,b)=>a.name===defaultDesign?-1:b.name===defaultDesign?1:0);return targets}function label(target){return recordedDesignName(target.folder)??target.name??basename(target.folder)}function printKeys(attached){if(console.log(""),attached.length>1)attached.forEach(({target},i)=>{console.log(` ${import_picocolors.default.cyan(String(i+1))} open ${label(target)}`)}),console.log(` ${import_picocolors.default.cyan("a")} open all`);else console.log(` ${import_picocolors.default.cyan("o")} open the browser`);console.log(` ${import_picocolors.default.cyan("b")} run in the background`),console.log(` ${import_picocolors.default.cyan("q")} stop`),console.log("")}function printBackgroundStay(designArg){console.log(`velloo: it keeps running in the background \u2014 awake while the canvas is open or an agent is connected. Stop it anytime with \`velloo stop${designArg}\`.`)}var run_default=defineCommand({meta:{name:"run",description:"Open the canvas for a design folder and stay in the foreground (starts a persistent canvas if none is running)"},args:{design:{type:"positional",required:!1,description:DESIGN_ARG_DESCRIPTION},port:{type:"string",description:"Preferred canvas port when starting fresh (default: the port this folder ran on last, else 7300)"},host:{type:"string",description:"Loopback bind hostname: 127.0.0.1 (default), localhost or ::1"},open:{type:"boolean",default:!1,description:"Open the canvas in your browser"},background:{type:"boolean",default:!1,description:"Leave the canvas running and return to the shell (the default when stdin is not a TTY)"}},async run({args}){assertLoopbackHost(args.host??"127.0.0.1");let targets=await resolveRunTargets(args.design,{}),preferredPort=args.port?Number(args.port):void 0;if(preferredPort!==void 0&&(!Number.isFinite(preferredPort)||preferredPort<0))fail("run",`invalid --port ${JSON.stringify(args.port)}`);let progress=createProgress();progress.start(targets.length>1?"starting canvases":"starting canvas");let spawned=0,running=[];try{for(let[index,target]of targets.entries()){if(targets.length>1)progress.step(`starting ${label(target)}`);let rec=await ensureDaemon(target.folder,{...preferredPort!==void 0&&index===0?{preferredPort}:{},host:args.host,onSpawn:()=>{spawned++,progress.step(`waiting for ${label(target)}`)}});running.push({target,rec})}progress.succeed(spawned===0?targets.length>1?"connected to running canvases":"connected to running canvas":targets.length>1?`started ${targets.length} canvases`:"started canvas")}catch(error){throw progress.fail("could not start canvas"),error}let designArg=args.design?` ${args.design}`:"",first=running[0];if(running.length===1)console.log(`velloo: design ${designWithFolder(first.target.folder,first.target.name)}`),console.log(`velloo: canvas at ${first.rec.canvasUrl}`);else{console.log("velloo: canvases");let rows=running.map(({target,rec})=>({design:designWithFolder(target.folder,target.name),url:rec.canvasUrl})),width=Math.max(...rows.map((row)=>row.design.length));for(let row of rows)console.log(` ${import_picocolors.default.bold(row.design.padEnd(width))} ${row.url}`)}if(traceEnabled())if(spawned>0)console.log(`velloo: \u29BF trace recording ON \u2014 agent MCP calls tape to ${join(first.target.folder,".velloo","trace")} (view with \`velloo trace\`)`);else console.log(`velloo: VELLOO_TRACE is set, but a canvas was already running \u2014 recording is NOT active on it. Run \`velloo stop${designArg}\`, then re-run to record. The agent must also connect through this same (trace-enabled) velloo.`);let foreground=shouldStayForeground({background:Boolean(args.background),stdinIsTTY:Boolean(process.stdin.isTTY)});if(foreground)printKeys(running);else printBackgroundStay(designArg);let attached=running,openTarget=(index)=>{let picked=index===void 0?attached:[attached[index-1]];for(let entry of picked)if(entry)openUrl(entry.rec.canvasUrl)};if(args.open)openTarget(running.length>1?void 0:1);if(!foreground)return;for(;;){let outcome=await waitInForeground({isLive:async()=>{for(let{rec}of attached)if(!await isLive(rec))return!1;return!0},onOpen:openTarget,targetCount:attached.length});if(outcome==="background"){printBackgroundStay(designArg);return}if(outcome==="died"){let alive=[];for(let entry of attached)if(await isLive(entry.rec))alive.push(entry);else console.log(`velloo: the canvas for "${label(entry.target)}" stopped.`);if(attached=alive,attached.length===0){console.log(`velloo: no canvases left. Start again with \`velloo run${designArg}\`.`);return}console.log(import_picocolors.default.dim(` Still running: ${attached.map(({target})=>label(target)).join(", ")}.`)),printKeys(attached);continue}for(let{target}of attached){let stopped=await stopDaemon(daemonRoot(target.folder));console.log(stopped?`velloo: stopped ${designWithFolder(target.folder)}`:`velloo: no canvas running for ${designWithFolder(target.folder)}`)}return}}});export{run_default as default};
2
+ import{recordedDesignName}from"./chunk-yp39f93e.js";import"./chunk-w40pqmyz.js";import"./chunk-n70zfv0m.js";import"./chunk-zexzy6zv.js";import"./chunk-g7pbfad5.js";import{assertLoopbackHost,daemonRoot,isLive,ensureDaemon,stopDaemon}from"./chunk-f8jchnwe.js";import"./chunk-80fjfyha.js";import{fail}from"./chunk-s23gtejf.js";import"./chunk-pasvz8xw.js";import"./chunk-seaar5na.js";import"./chunk-p93x4pn2.js";import"./chunk-02gpgqj4.js";import{openUrl}from"./chunk-hggap8fq.js";import{createProgress}from"./chunk-pjtg3wnm.js";import{designWithFolder}from"./chunk-9b4akcfp.js";import"./chunk-v6w8akph.js";import"./chunk-8kn6tp4b.js";import{findDesigns,DESIGN_ARG_DESCRIPTION,resolveDesign}from"./chunk-z3r8px3d.js";import"./chunk-3f2p94wa.js";import{traceEnabled}from"./chunk-6tx68d90.js";import{require_picocolors}from"./chunk-jrsknzjt.js";import{__toESM,defineCommand}from"./chunk-2smsg2ct.js";import{basename,join}from"path";var import_picocolors=__toESM(require_picocolors(),1);function actionForRunKey(key,targetCount=1){if(key==="b")return{kind:"background"};if(key==="q"||key==="\x03")return{kind:"stop"};if(targetCount<=1)return key==="o"?{kind:"open"}:null;if(key==="a"||key==="o")return{kind:"open"};if(/^[1-9]$/.test(key)){let index=Number(key);return index<=targetCount?{kind:"open",index}:null}return null}function shouldStayForeground(opts){return!opts.background&&opts.stdinIsTTY}function bindRunKeys(onKey){let stdin=process.stdin;if(!stdin.isTTY)return()=>{};stdin.setRawMode(!0),stdin.resume(),stdin.setEncoding("utf8");let onData=(chunk)=>{onKey(chunk)};return stdin.on("data",onData),()=>{if(stdin.off("data",onData),stdin.isTTY)stdin.setRawMode(!1);stdin.pause()}}var LIVE_POLL_MS=2000;async function waitInForeground(opts){return await new Promise((resolve)=>{let settled=!1,unbind=()=>{},timer,finish=(outcome)=>{if(settled)return;if(settled=!0,unbind(),timer!==void 0)clearInterval(timer);process.off("SIGINT",onStop),process.off("SIGTERM",onStop),resolve(outcome)},onStop=()=>finish("stop");unbind=bindRunKeys((key)=>{let action=actionForRunKey(key,opts.targetCount??1);if(!action)return;if(action.kind==="open")opts.onOpen(action.index);else finish(action.kind)}),process.on("SIGINT",onStop),process.on("SIGTERM",onStop),timer=setInterval(()=>{opts.isLive().then((live)=>{if(!live)finish("died")})},LIVE_POLL_MS)})}import{resolve}from"path";async function resolveRunTargets(arg,opts={}){let cwd=resolve(opts.cwd??"."),single=async()=>{let folder=await resolveDesign(arg,"run",{interactive:!0,requireConfig:!0,cwd});return[{name:recordedDesignName(folder)??void 0,folder}]};if(arg)return single();let found;try{found=await findDesigns(cwd)}catch{return single()}if(!found||found.designs.length<2)return single();let targets=[];for(let design of found.designs)if(design.exists&&!design.outsideRepo)targets.push({name:design.name,folder:design.root});if(targets.length===0)return single();if(targets.length===1)return targets;let defaultDesign=found.defaultDesign;if(defaultDesign)targets.sort((a,b)=>a.name===defaultDesign?-1:b.name===defaultDesign?1:0);return targets}function label(target){return recordedDesignName(target.folder)??target.name??basename(target.folder)}function printKeys(attached){if(console.log(""),attached.length>1)attached.forEach(({target},i)=>{console.log(` ${import_picocolors.default.cyan(String(i+1))} open ${label(target)}`)}),console.log(` ${import_picocolors.default.cyan("a")} open all`);else console.log(` ${import_picocolors.default.cyan("o")} open the browser`);console.log(` ${import_picocolors.default.cyan("b")} run in the background`),console.log(` ${import_picocolors.default.cyan("q")} stop`),console.log("")}function printBackgroundStay(designArg){console.log(`velloo: it keeps running in the background \u2014 awake while the canvas is open or an agent is connected. Stop it anytime with \`velloo stop${designArg}\`.`)}var run_default=defineCommand({meta:{name:"run",description:"Open the canvas for a design folder and stay in the foreground (starts a persistent canvas if none is running)"},args:{design:{type:"positional",required:!1,description:DESIGN_ARG_DESCRIPTION},port:{type:"string",description:"Preferred canvas port when starting fresh (default: the port this folder ran on last, else 7300)"},host:{type:"string",description:"Loopback bind hostname: 127.0.0.1 (default), localhost or ::1"},open:{type:"boolean",default:!1,description:"Open the canvas in your browser"},background:{type:"boolean",default:!1,description:"Leave the canvas running and return to the shell (the default when stdin is not a TTY)"}},async run({args}){assertLoopbackHost(args.host??"127.0.0.1");let targets=await resolveRunTargets(args.design,{}),preferredPort=args.port?Number(args.port):void 0;if(preferredPort!==void 0&&(!Number.isFinite(preferredPort)||preferredPort<0))fail("run",`invalid --port ${JSON.stringify(args.port)}`);let progress=createProgress();progress.start(targets.length>1?"starting canvases":"starting canvas");let spawned=0,running=[];try{for(let[index,target]of targets.entries()){if(targets.length>1)progress.step(`starting ${label(target)}`);let rec=await ensureDaemon(target.folder,{...preferredPort!==void 0&&index===0?{preferredPort}:{},host:args.host,onSpawn:()=>{spawned++,progress.step(`waiting for ${label(target)}`)}});running.push({target,rec})}progress.succeed(spawned===0?targets.length>1?"connected to running canvases":"connected to running canvas":targets.length>1?`started ${targets.length} canvases`:"started canvas")}catch(error){throw progress.fail("could not start canvas"),error}let designArg=args.design?` ${args.design}`:"",first=running[0];if(running.length===1)console.log(`velloo: design ${designWithFolder(first.target.folder,first.target.name)}`),console.log(`velloo: canvas at ${first.rec.canvasUrl}`);else{console.log("velloo: canvases");let rows=running.map(({target,rec})=>({design:designWithFolder(target.folder,target.name),url:rec.canvasUrl})),width=Math.max(...rows.map((row)=>row.design.length));for(let row of rows)console.log(` ${import_picocolors.default.bold(row.design.padEnd(width))} ${row.url}`)}if(traceEnabled())if(spawned>0)console.log(`velloo: \u29BF trace recording ON \u2014 agent MCP calls tape to ${join(first.target.folder,".velloo","trace")} (view with \`velloo trace\`)`);else console.log(`velloo: VELLOO_TRACE is set, but a canvas was already running \u2014 recording is NOT active on it. Run \`velloo stop${designArg}\`, then re-run to record. The agent must also connect through this same (trace-enabled) velloo.`);let foreground=shouldStayForeground({background:Boolean(args.background),stdinIsTTY:Boolean(process.stdin.isTTY)});if(foreground)printKeys(running);else printBackgroundStay(designArg);let attached=running,openTarget=(index)=>{let picked=index===void 0?attached:[attached[index-1]];for(let entry of picked)if(entry)openUrl(entry.rec.canvasUrl)};if(args.open)openTarget(running.length>1?void 0:1);if(!foreground)return;for(;;){let outcome=await waitInForeground({isLive:async()=>{for(let{rec}of attached)if(!await isLive(rec))return!1;return!0},onOpen:openTarget,targetCount:attached.length});if(outcome==="background"){printBackgroundStay(designArg);return}if(outcome==="died"){let alive=[];for(let entry of attached)if(await isLive(entry.rec))alive.push(entry);else console.log(`velloo: the canvas for "${label(entry.target)}" stopped.`);if(attached=alive,attached.length===0){console.log(`velloo: no canvases left. Start again with \`velloo run${designArg}\`.`);return}console.log(import_picocolors.default.dim(` Still running: ${attached.map(({target})=>label(target)).join(", ")}.`)),printKeys(attached);continue}for(let{target}of attached){let stopped=await stopDaemon(daemonRoot(target.folder));console.log(stopped?`velloo: stopped ${designWithFolder(target.folder)}`:`velloo: no canvas running for ${designWithFolder(target.folder)}`)}return}}});export{run_default as default};