velloo 0.2.0 → 0.3.1

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 (88) hide show
  1. package/README.md +1 -1
  2. package/canvas/assets/index-DZFrkC4P.js +29 -0
  3. package/canvas/assets/index-gB0StCrx.css +2 -0
  4. package/canvas/assets/lucide-all-Bu8-9UDF.js +1 -0
  5. package/canvas/assets/{radix-C3HaOB-d.js → radix-gmpYzWRH.js} +1 -1
  6. package/canvas/index.html +3 -3
  7. package/chunk-0s6drs3n.js +2 -0
  8. package/chunk-0zen7bzb.js +3 -0
  9. package/{chunk-er1fxb7d.js → chunk-1xb88e07.js} +1 -1
  10. package/{chunk-jv0xggh0.js → chunk-2e3nd4tz.js} +1 -1
  11. package/{chunk-08sv3k41.js → chunk-2fgfex9b.js} +1 -1
  12. package/{chunk-a84n72m2.js → chunk-2p37rp3j.js} +1 -1
  13. package/{chunk-ydhwv29b.js → chunk-2zbn6641.js} +2 -2
  14. package/{chunk-6w6ch4ce.js → chunk-3px2d1j1.js} +1 -1
  15. package/{chunk-2c7jbx46.js → chunk-4e9jh482.js} +1 -1
  16. package/{chunk-dgwjpbp9.js → chunk-4g250157.js} +1 -1
  17. package/{chunk-sjgqnykd.js → chunk-4ma2wnqw.js} +1 -1
  18. package/{chunk-x4f4k9pp.js → chunk-59zas5y2.js} +7 -7
  19. package/{chunk-0fe83yzt.js → chunk-5wv5a52y.js} +1 -1
  20. package/{chunk-bwnvcncx.js → chunk-6zz9kfbd.js} +1 -1
  21. package/{chunk-mh2pr7cq.js → chunk-7cvhnp9h.js} +1 -1
  22. package/{chunk-1h55s5he.js → chunk-7s8frnag.js} +1 -1
  23. package/chunk-7t13w87m.js +2 -0
  24. package/{chunk-zb6hc1y0.js → chunk-7yaafw73.js} +1 -1
  25. package/chunk-88eqqdk1.js +688 -0
  26. package/{chunk-ampmdzz4.js → chunk-8z3ykvcs.js} +1 -1
  27. package/{chunk-r22epxz2.js → chunk-98vvrj0c.js} +1 -1
  28. package/{chunk-vdkrbzh1.js → chunk-9cdwhrkh.js} +1 -1
  29. package/{chunk-xt5ayg7g.js → chunk-9p1dk5cb.js} +1 -1
  30. package/{chunk-dg6z4vdd.js → chunk-9psr8atb.js} +1 -1
  31. package/{chunk-4fj5tahv.js → chunk-9ydc34wc.js} +1 -1
  32. package/{chunk-pp86v6m6.js → chunk-as08hzp3.js} +1 -1
  33. package/chunk-asbajsmd.js +5 -0
  34. package/{chunk-vgmr98cv.js → chunk-avkfsc3p.js} +1 -1
  35. package/{chunk-ngnymg2q.js → chunk-bhx8k09w.js} +1 -1
  36. package/{chunk-3e8vez4d.js → chunk-c4fym47a.js} +63 -19
  37. package/{chunk-jb21jkp1.js → chunk-c6hywdvq.js} +1 -1
  38. package/{chunk-rpwpeph5.js → chunk-f0vsjfpc.js} +1 -1
  39. package/{chunk-ek71z2fv.js → chunk-g71v35gd.js} +1 -1
  40. package/{chunk-80r93t2e.js → chunk-hfzg98c8.js} +1 -1
  41. package/{chunk-jfx9xjmr.js → chunk-js6mz7h1.js} +1 -1
  42. package/{chunk-4dn75m6t.js → chunk-mfbxfb9b.js} +1 -1
  43. package/{chunk-mnapdp1y.js → chunk-mt8ds8zj.js} +1 -1
  44. package/chunk-n9t36h0q.js +2 -0
  45. package/{chunk-fsbsksga.js → chunk-nev5mv85.js} +1 -1
  46. package/{chunk-40xgcth8.js → chunk-nte0t7v3.js} +2 -2
  47. package/{chunk-hcb68zt7.js → chunk-p62fygqz.js} +1 -1
  48. package/{chunk-ayrb3qnm.js → chunk-p6e1eg76.js} +1 -1
  49. package/{chunk-7eq7nx37.js → chunk-ph2jfg1x.js} +1 -1
  50. package/{chunk-n9gs6yx9.js → chunk-pve2mmnr.js} +1 -1
  51. package/{chunk-avns4dbf.js → chunk-sn9vg42q.js} +1 -1
  52. package/{chunk-dy41n60j.js → chunk-t2w8a591.js} +5 -5
  53. package/{chunk-735ezz23.js → chunk-t5m5mznb.js} +2 -2
  54. package/{chunk-6nqghjda.js → chunk-t947mxr1.js} +1 -1
  55. package/chunk-tt7fys2w.js +2 -0
  56. package/chunk-wafb2xm9.js +6 -0
  57. package/{chunk-sn3x2m0m.js → chunk-whw3epmr.js} +1 -1
  58. package/{chunk-j11fyeqh.js → chunk-wndntr7s.js} +1 -1
  59. package/{chunk-7eyb8yrf.js → chunk-wnwgqvtd.js} +1 -1
  60. package/{chunk-v40fn08f.js → chunk-wp123630.js} +2 -2
  61. package/{chunk-ccszg02q.js → chunk-wvs939t5.js} +1 -1
  62. package/{chunk-jr0ss0mm.js → chunk-z21hg6j3.js} +2 -2
  63. package/cli.js +1 -1
  64. package/package.json +1 -1
  65. package/pkgs/helpers/src/descriptors.ts +7 -1
  66. package/pkgs/provider-antd/src/index.ts +1 -0
  67. package/pkgs/provider-chakra/src/index.ts +1 -0
  68. package/pkgs/provider-mui/src/index.ts +1 -0
  69. package/pkgs/provider-none/src/index.ts +42 -1
  70. package/pkgs/provider-none/src/intro.ts +2 -2
  71. package/pkgs/schema/src/config.ts +19 -0
  72. package/pkgs/schema/src/extension.ts +26 -0
  73. package/pkgs/schema/src/index.ts +10 -0
  74. package/pkgs/schema/src/node.ts +99 -0
  75. package/pkgs/schema/src/screen.ts +7 -0
  76. package/pkgs/shadcn-snapshot/dist/manifest.json +9 -1
  77. package/skills/velloo-setup/SKILL.md +70 -48
  78. package/canvas/assets/index-BCvDZiBo.css +0 -2
  79. package/canvas/assets/index-ClaBqcaS.js +0 -28
  80. package/canvas/assets/lucide-all-iIF-pmzN.js +0 -1
  81. package/chunk-308ynsxd.js +0 -2
  82. package/chunk-9vg3yafz.js +0 -3
  83. package/chunk-eyr8hrzf.js +0 -2
  84. package/chunk-k17gfwq3.js +0 -2
  85. package/chunk-rgasy862.js +0 -5
  86. package/chunk-t448rrfr.js +0 -2
  87. package/chunk-tdsk5wxa.js +0 -451
  88. package/chunk-vsv8z729.js +0 -6
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import"./chunk-t448rrfr.js";import"./chunk-40xgcth8.js";import{loadCredential}from"./chunk-80r93t2e.js";import"./chunk-tdsk5wxa.js";import"./chunk-3e8vez4d.js";import"./chunk-dg6z4vdd.js";import{listDaemons}from"./chunk-sjgqnykd.js";import"./chunk-80fjfyha.js";import"./chunk-s23gtejf.js";import"./chunk-08sv3k41.js";import"./chunk-4fj5tahv.js";import"./chunk-cvn689d5.js";import"./chunk-dy41n60j.js";import{designWithFolder}from"./chunk-dgwjpbp9.js";import{verifyCredential}from"./chunk-bwnvcncx.js";import"./chunk-735ezz23.js";import{defaultCloudUrl}from"./chunk-pp86v6m6.js";import{require_picocolors}from"./chunk-jrsknzjt.js";import{__toESM,defineCommand}from"./chunk-2smsg2ct.js";var import_picocolors=__toESM(require_picocolors(),1);var status_default=defineCommand({meta:{name:"status",description:"List the velloo canvas daemons running on this machine + cloud sign-in"},args:{},async run(){let daemons=await listDaemons();if(daemons.length===0)console.log("velloo: no canvas daemons running.");else for(let d of daemons)console.log(`${d.canvasUrl} ${designWithFolder(d.root,void 0,{absolute:!0})} (pid ${d.pid}, since ${d.startedAt})`);let cloudUrl=defaultCloudUrl(),cred=await loadCredential(cloudUrl);if(!cred){console.log(import_picocolors.default.dim(`cloud: not signed in (${cloudUrl}) \u2014 run \`velloo login\` to share.`));return}let email=await verifyCredential(cloudUrl,cred.token,3000);console.log(email?`cloud: signed in as ${email} (${cloudUrl})`:import_picocolors.default.dim(`cloud: stored credential for ${cred.email} (${cloudUrl}) \u2014 expired or cloud unreachable; \`velloo login\` to refresh.`))}});export{status_default as default};
2
+ import"./chunk-n9t36h0q.js";import"./chunk-nte0t7v3.js";import{loadCredential}from"./chunk-hfzg98c8.js";import"./chunk-88eqqdk1.js";import"./chunk-c4fym47a.js";import"./chunk-9psr8atb.js";import{listDaemons}from"./chunk-4ma2wnqw.js";import"./chunk-80fjfyha.js";import"./chunk-s23gtejf.js";import"./chunk-2fgfex9b.js";import"./chunk-9ydc34wc.js";import"./chunk-cvn689d5.js";import"./chunk-t2w8a591.js";import{designWithFolder}from"./chunk-4g250157.js";import{verifyCredential}from"./chunk-6zz9kfbd.js";import"./chunk-t5m5mznb.js";import{defaultCloudUrl}from"./chunk-as08hzp3.js";import{require_picocolors}from"./chunk-jrsknzjt.js";import{__toESM,defineCommand}from"./chunk-2smsg2ct.js";var import_picocolors=__toESM(require_picocolors(),1);var status_default=defineCommand({meta:{name:"status",description:"List the velloo canvas daemons running on this machine + cloud sign-in"},args:{},async run(){let daemons=await listDaemons();if(daemons.length===0)console.log("velloo: no canvas daemons running.");else for(let d of daemons)console.log(`${d.canvasUrl} ${designWithFolder(d.root,void 0,{absolute:!0})} (pid ${d.pid}, since ${d.startedAt})`);let cloudUrl=defaultCloudUrl(),cred=await loadCredential(cloudUrl);if(!cred){console.log(import_picocolors.default.dim(`cloud: not signed in (${cloudUrl}) \u2014 run \`velloo login\` to share.`));return}let email=await verifyCredential(cloudUrl,cred.token,3000);console.log(email?`cloud: signed in as ${email} (${cloudUrl})`:import_picocolors.default.dim(`cloud: stored credential for ${cred.email} (${cloudUrl}) \u2014 expired or cloud unreachable; \`velloo login\` to refresh.`))}});export{status_default as default};
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{isCancel,confirm}from"./chunk-80fjfyha.js";import{CHROMIUM_INSTALL_ARGV,CHROMIUM_INSTALL_CMD,CHROMIUM_DEPS_INSTALL_ARGV,CHROMIUM_DEPS_INSTALL_CMD,BrowserMissingError}from"./chunk-3e8vez4d.js";import{fail}from"./chunk-s23gtejf.js";import{require_picocolors}from"./chunk-jrsknzjt.js";import{__toESM}from"./chunk-2smsg2ct.js";var import_picocolors=__toESM(require_picocolors(),1);var BROWSER_PROMPT_DETAIL=import_picocolors.default.dim("Headless Chromium \u2014 powers the agent's screenshot tool, velloo render --to=png, and PNG/PDF export. The canvas itself never needs it."),BROWSER_PROMPT_SIZE="(~110MB, one-time)";async function runChromiumInstall(){let proc=Bun.spawn([...CHROMIUM_INSTALL_ARGV],{stdout:"pipe",stderr:"pipe",stdin:"inherit"}),captured="",pump=async(stream,out)=>{let decoder=new TextDecoder;for await(let chunk of stream)out.write(chunk),captured+=decoder.decode(chunk,{stream:!0})},[,,code]=await Promise.all([pump(proc.stdout,process.stdout),pump(proc.stderr,process.stderr),proc.exited]),missingSystemLibs=/missing dependencies to run browsers|Missing libraries:/i.test(captured);return{ok:code===0&&!missingSystemLibs,missingSystemLibs}}async function installChromiumInteractive(){let result=await runChromiumInstall();if(result.ok)return!0;if(!result.missingSystemLibs)return!1;console.log(""),console.log(` ${import_picocolors.default.yellow("\u26A0")} Browser downloaded, but your system is missing libraries it needs to run.`);let proceed=await confirm({message:`Install the missing system libraries now? ${import_picocolors.default.dim(`(${CHROMIUM_DEPS_INSTALL_CMD} \u2014 uses your distro's package manager, needs root/sudo)`)}`,initialValue:!0});if(isCancel(proceed)||!proceed)return console.log(import_picocolors.default.dim(` Install them later with: ${import_picocolors.default.cyan(CHROMIUM_DEPS_INSTALL_CMD)}`)),!1;if(await Bun.spawn([...CHROMIUM_DEPS_INSTALL_ARGV],{stdout:"inherit",stderr:"inherit",stdin:"inherit"}).exited!==0)return console.log(import_picocolors.default.dim(` That didn't finish \u2014 run it manually: ${import_picocolors.default.cyan(`sudo ${CHROMIUM_DEPS_INSTALL_CMD}`)}`)),!1;return!0}async function captureWithBrowserSetup(cmd,capture){try{await capture();return}catch(e){if(!(e instanceof BrowserMissingError))throw e;if(!process.stdin.isTTY)fail(cmd,e.message);let proceed=await confirm({message:`Chromium isn't installed \u2014 \`${CHROMIUM_INSTALL_CMD}\` now? ${BROWSER_PROMPT_SIZE}
2
+ import{isCancel,confirm}from"./chunk-80fjfyha.js";import{CHROMIUM_INSTALL_ARGV,CHROMIUM_INSTALL_CMD,CHROMIUM_DEPS_INSTALL_ARGV,CHROMIUM_DEPS_INSTALL_CMD,BrowserMissingError}from"./chunk-c4fym47a.js";import{fail}from"./chunk-s23gtejf.js";import{require_picocolors}from"./chunk-jrsknzjt.js";import{__toESM}from"./chunk-2smsg2ct.js";var import_picocolors=__toESM(require_picocolors(),1);var BROWSER_PROMPT_DETAIL=import_picocolors.default.dim("Headless Chromium \u2014 powers the agent's screenshot tool, velloo render --to=png, and PNG/PDF export. The canvas itself never needs it."),BROWSER_PROMPT_SIZE="(~110MB, one-time)";async function runChromiumInstall(){let proc=Bun.spawn([...CHROMIUM_INSTALL_ARGV],{stdout:"pipe",stderr:"pipe",stdin:"inherit"}),captured="",pump=async(stream,out)=>{let decoder=new TextDecoder;for await(let chunk of stream)out.write(chunk),captured+=decoder.decode(chunk,{stream:!0})},[,,code]=await Promise.all([pump(proc.stdout,process.stdout),pump(proc.stderr,process.stderr),proc.exited]),missingSystemLibs=/missing dependencies to run browsers|Missing libraries:/i.test(captured);return{ok:code===0&&!missingSystemLibs,missingSystemLibs}}async function installChromiumInteractive(){let result=await runChromiumInstall();if(result.ok)return!0;if(!result.missingSystemLibs)return!1;console.log(""),console.log(` ${import_picocolors.default.yellow("\u26A0")} Browser downloaded, but your system is missing libraries it needs to run.`);let proceed=await confirm({message:`Install the missing system libraries now? ${import_picocolors.default.dim(`(${CHROMIUM_DEPS_INSTALL_CMD} \u2014 uses your distro's package manager, needs root/sudo)`)}`,initialValue:!0});if(isCancel(proceed)||!proceed)return console.log(import_picocolors.default.dim(` Install them later with: ${import_picocolors.default.cyan(CHROMIUM_DEPS_INSTALL_CMD)}`)),!1;if(await Bun.spawn([...CHROMIUM_DEPS_INSTALL_ARGV],{stdout:"inherit",stderr:"inherit",stdin:"inherit"}).exited!==0)return console.log(import_picocolors.default.dim(` That didn't finish \u2014 run it manually: ${import_picocolors.default.cyan(`sudo ${CHROMIUM_DEPS_INSTALL_CMD}`)}`)),!1;return!0}async function captureWithBrowserSetup(cmd,capture){try{await capture();return}catch(e){if(!(e instanceof BrowserMissingError))throw e;if(!process.stdin.isTTY)fail(cmd,e.message);let proceed=await confirm({message:`Chromium isn't installed \u2014 \`${CHROMIUM_INSTALL_CMD}\` now? ${BROWSER_PROMPT_SIZE}
3
3
  ${BROWSER_PROMPT_DETAIL}`,initialValue:!0});if(isCancel(proceed)||!proceed)fail(cmd,e.message);if(!await installChromiumInteractive())fail(cmd,"the browser isn't usable yet \u2014 see the output above.")}await capture()}
4
4
  export{BROWSER_PROMPT_DETAIL,BROWSER_PROMPT_SIZE,installChromiumInteractive,captureWithBrowserSetup};
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{isCancel,select}from"./chunk-80fjfyha.js";import{preflightScreens}from"./chunk-tdsk5wxa.js";import{fail}from"./chunk-s23gtejf.js";import{copyToClipboard}from"./chunk-vbk1qhdz.js";import{require_picocolors}from"./chunk-jrsknzjt.js";import{__toESM}from"./chunk-2smsg2ct.js";import{stripVTControlCharacters}from"util";var import_picocolors=__toESM(require_picocolors(),1);function plural(count,noun){return`${count} ${noun}${count===1?"":"s"}`}function formatFailures(command,failures){let byScreen=new Map;for(let failure of failures)byScreen.set(failure.screenId,[...byScreen.get(failure.screenId)??[],failure]);let notDrawn=[...byScreen.values()].filter((group)=>group.some((failure)=>failure.componentId===null)),placeholders=[...byScreen.values()].filter((group)=>!notDrawn.includes(group)).reduce((sum,group)=>sum+group.length,0),consequences=[placeholders>0&&`${plural(placeholders,"component")} will appear as placeholders`,notDrawn.length>0&&`${plural(notDrawn.length,"screen")} will not render at all`].filter(Boolean),lines=[`${import_picocolors.default.yellow(`velloo ${command}:`)} render failures on ${plural(byScreen.size,"screen")} \u2014 ${consequences.join(", and ")}:`];for(let group of byScreen.values()){let[first]=group;if(!first)continue;let boards=first.boards.length>0?first.boards.map((board)=>board.name).join(", "):"no board";lines.push("",` ${import_picocolors.default.dim(`${boards} \u203A`)} ${import_picocolors.default.bold(first.screenName)} ${import_picocolors.default.dim(`(${first.screenId})`)}`);let pinned=group.some((failure)=>failure.componentId!==null);for(let failure of group)if(failure.componentId!==null)lines.push(` ${import_picocolors.default.cyan(failure.componentId)}: ${failure.reason}`);else{let label=pinned?"screen not drawn":"screen not drawn \u2014 the error could not be pinned on one component";lines.push(` ${import_picocolors.default.red(label)}: ${failure.reason}`)}}return lines}async function confirmRenderFailures(command,source,screens,yes){let failures=preflightScreens(source,screens);if(failures.length===0)return;let report=formatFailures(command,failures);for(let line of report)console.error(line);if(console.error(""),yes)return;if(!process.stdin.isTTY)fail(command,"refusing to continue \u2014 re-run with --yes to accept the placeholders.");for(;;){let choice=await select({message:"Continue anyway?",options:[{value:"cancel",label:"No, cancel"},{value:"continue",label:"Yes, continue with the failures"},{value:"copy",label:"Copy errors to clipboard"}],initialValue:"cancel"});if(isCancel(choice)||choice==="cancel")fail(command,"cancelled.");if(choice==="continue")return;let copied=await copyToClipboard(stripVTControlCharacters(report.join(`
2
+ import{isCancel,select}from"./chunk-80fjfyha.js";import{preflightScreens}from"./chunk-88eqqdk1.js";import{fail}from"./chunk-s23gtejf.js";import{copyToClipboard}from"./chunk-vbk1qhdz.js";import{require_picocolors}from"./chunk-jrsknzjt.js";import{__toESM}from"./chunk-2smsg2ct.js";import{stripVTControlCharacters}from"util";var import_picocolors=__toESM(require_picocolors(),1);function plural(count,noun){return`${count} ${noun}${count===1?"":"s"}`}function formatFailures(command,failures){let byScreen=new Map;for(let failure of failures)byScreen.set(failure.screenId,[...byScreen.get(failure.screenId)??[],failure]);let notDrawn=[...byScreen.values()].filter((group)=>group.some((failure)=>failure.componentId===null)),placeholders=[...byScreen.values()].filter((group)=>!notDrawn.includes(group)).reduce((sum,group)=>sum+group.length,0),consequences=[placeholders>0&&`${plural(placeholders,"component")} will appear as placeholders`,notDrawn.length>0&&`${plural(notDrawn.length,"screen")} will not render at all`].filter(Boolean),lines=[`${import_picocolors.default.yellow(`velloo ${command}:`)} render failures on ${plural(byScreen.size,"screen")} \u2014 ${consequences.join(", and ")}:`];for(let group of byScreen.values()){let[first]=group;if(!first)continue;let boards=first.boards.length>0?first.boards.map((board)=>board.name).join(", "):"no board";lines.push("",` ${import_picocolors.default.dim(`${boards} \u203A`)} ${import_picocolors.default.bold(first.screenName)} ${import_picocolors.default.dim(`(${first.screenId})`)}`);let pinned=group.some((failure)=>failure.componentId!==null);for(let failure of group)if(failure.componentId!==null)lines.push(` ${import_picocolors.default.cyan(failure.componentId)}: ${failure.reason}`);else{let label=pinned?"screen not drawn":"screen not drawn \u2014 the error could not be pinned on one component";lines.push(` ${import_picocolors.default.red(label)}: ${failure.reason}`)}}return lines}async function confirmRenderFailures(command,source,screens,yes){let failures=preflightScreens(source,screens);if(failures.length===0)return;let report=formatFailures(command,failures);for(let line of report)console.error(line);if(console.error(""),yes)return;if(!process.stdin.isTTY)fail(command,"refusing to continue \u2014 re-run with --yes to accept the placeholders.");for(;;){let choice=await select({message:"Continue anyway?",options:[{value:"cancel",label:"No, cancel"},{value:"continue",label:"Yes, continue with the failures"},{value:"copy",label:"Copy errors to clipboard"}],initialValue:"cancel"});if(isCancel(choice)||choice==="cancel")fail(command,"cancelled.");if(choice==="continue")return;let copied=await copyToClipboard(stripVTControlCharacters(report.join(`
3
3
  `)));console.error(copied?` ${import_picocolors.default.green("\u2713")} Errors copied to the clipboard.`:import_picocolors.default.dim(" Couldn't reach a clipboard tool \u2014 copy the errors printed above."))}}
4
4
  export{confirmRenderFailures};
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{clsx_default,helpersRegistry,parse_default,formatRgb,SX_PROP,catalogFromManifest,helperSourcePath}from"./chunk-tdsk5wxa.js";import{require_react_is_development,require_object_assign,require_emotion_serialize_development_cjs,$_default,import_emotion_react_development_cjs,$_default2,$_default3}from"./chunk-jfx9xjmr.js";import{resolveColors,DEFAULT_TYPESET_NAME,typesetScale}from"./chunk-40xgcth8.js";import{_objectWithoutPropertiesLoose,_extends,_assertThisInitialized,_setPrototypeOf}from"./chunk-h6gchare.js";import{resolveProviderSrcDir}from"./chunk-fjbzk4sw.js";import{require_react_jsx_runtime_development}from"./chunk-jb21jkp1.js";import{require_react_development,require_react_dom}from"./chunk-3e8vez4d.js";import{__toESM,__commonJS}from"./chunk-2smsg2ct.js";import{MUI_VERSION}from"./chunk-mzhdrawd.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{clsx_default,helpersRegistry,parse_default,formatRgb,SX_PROP,catalogFromManifest,helperSourcePath}from"./chunk-88eqqdk1.js";import{require_react_is_development,require_object_assign,require_emotion_serialize_development_cjs,$_default,import_emotion_react_development_cjs,$_default2,$_default3}from"./chunk-js6mz7h1.js";import{resolveColors,DEFAULT_TYPESET_NAME,typesetScale}from"./chunk-nte0t7v3.js";import{_objectWithoutPropertiesLoose,_extends,_assertThisInitialized,_setPrototypeOf}from"./chunk-h6gchare.js";import{resolveProviderSrcDir}from"./chunk-fjbzk4sw.js";import{require_react_jsx_runtime_development}from"./chunk-c6hywdvq.js";import{require_react_development,require_react_dom}from"./chunk-c4fym47a.js";import{__toESM,__commonJS}from"./chunk-2smsg2ct.js";import{MUI_VERSION}from"./chunk-mzhdrawd.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],"Generic layout primitive; style via sx."),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"}],"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());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>\`.
@@ -241,4 +241,4 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha
241
241
  `))}return null}),children:import_prop_types84.default.oneOfType([import_prop_types84.default.node,import_prop_types84.default.func]),container:import_prop_types84.default.oneOfType([HTMLElementType,import_prop_types84.default.func]),direction:import_prop_types84.default.oneOf(["ltr","rtl"]),disablePortal:import_prop_types84.default.bool,keepMounted:import_prop_types84.default.bool,modifiers:import_prop_types84.default.arrayOf(import_prop_types84.default.shape({data:import_prop_types84.default.object,effect:import_prop_types84.default.func,enabled:import_prop_types84.default.bool,fn:import_prop_types84.default.func,name:import_prop_types84.default.any,options:import_prop_types84.default.object,phase:import_prop_types84.default.oneOf(["afterMain","afterRead","afterWrite","beforeMain","beforeRead","beforeWrite","main","read","write"]),requires:import_prop_types84.default.arrayOf(import_prop_types84.default.string),requiresIfExists:import_prop_types84.default.arrayOf(import_prop_types84.default.string)})),open:import_prop_types84.default.bool.isRequired,placement:import_prop_types84.default.oneOf(["auto-end","auto-start","auto","bottom-end","bottom-start","bottom","left-end","left-start","left","right-end","right-start","right","top-end","top-start","top"]),popperOptions:import_prop_types84.default.shape({modifiers:import_prop_types84.default.array,onFirstUpdate:import_prop_types84.default.func,placement:import_prop_types84.default.oneOf(["auto-end","auto-start","auto","bottom-end","bottom-start","bottom","left-end","left-start","left","right-end","right-start","right","top-end","top-start","top"]),strategy:import_prop_types84.default.oneOf(["absolute","fixed"])}),popperRef:refType_default,slotProps:import_prop_types84.default.shape({root:import_prop_types84.default.oneOfType([import_prop_types84.default.func,import_prop_types84.default.object])}),slots:import_prop_types84.default.shape({root:import_prop_types84.default.elementType}),transition:import_prop_types84.default.bool};var BasePopper_default=Popper;var import_jsx_runtime96=__toESM(require_react_jsx_runtime_development()),PopperRoot=styled_default2(BasePopper_default,{name:"MuiPopper",slot:"Root",overridesResolver:(props,styles)=>styles.root})({}),Popper2=React125.forwardRef(function(inProps,ref){let isRtl=useRtl(),props=useDefaultProps2({props:inProps,name:"MuiPopper"}),{anchorEl,component,components,componentsProps,container,disablePortal,keepMounted,modifiers,open,placement,popperOptions,popperRef,transition,slots,slotProps,...other}=props,RootComponent=slots?.root??components?.Root,otherProps={anchorEl,container,disablePortal,keepMounted,modifiers,open,placement,popperOptions,popperRef,transition,...other};return import_jsx_runtime96.jsx(PopperRoot,{as:component,direction:isRtl?"rtl":"ltr",slots:{root:RootComponent},slotProps:slotProps??componentsProps,...otherProps,ref})});Popper2.propTypes={anchorEl:import_prop_types85.default.oneOfType([HTMLElementType,import_prop_types85.default.object,import_prop_types85.default.func]),children:import_prop_types85.default.oneOfType([import_prop_types85.default.node,import_prop_types85.default.func]),component:import_prop_types85.default.elementType,components:import_prop_types85.default.shape({Root:import_prop_types85.default.elementType}),componentsProps:import_prop_types85.default.shape({root:import_prop_types85.default.oneOfType([import_prop_types85.default.func,import_prop_types85.default.object])}),container:import_prop_types85.default.oneOfType([HTMLElementType,import_prop_types85.default.func]),disablePortal:import_prop_types85.default.bool,keepMounted:import_prop_types85.default.bool,modifiers:import_prop_types85.default.arrayOf(import_prop_types85.default.shape({data:import_prop_types85.default.object,effect:import_prop_types85.default.func,enabled:import_prop_types85.default.bool,fn:import_prop_types85.default.func,name:import_prop_types85.default.any,options:import_prop_types85.default.object,phase:import_prop_types85.default.oneOf(["afterMain","afterRead","afterWrite","beforeMain","beforeRead","beforeWrite","main","read","write"]),requires:import_prop_types85.default.arrayOf(import_prop_types85.default.string),requiresIfExists:import_prop_types85.default.arrayOf(import_prop_types85.default.string)})),open:import_prop_types85.default.bool.isRequired,placement:import_prop_types85.default.oneOf(["auto-end","auto-start","auto","bottom-end","bottom-start","bottom","left-end","left-start","left","right-end","right-start","right","top-end","top-start","top"]),popperOptions:import_prop_types85.default.shape({modifiers:import_prop_types85.default.array,onFirstUpdate:import_prop_types85.default.func,placement:import_prop_types85.default.oneOf(["auto-end","auto-start","auto","bottom-end","bottom-start","bottom","left-end","left-start","left","right-end","right-start","right","top-end","top-start","top"]),strategy:import_prop_types85.default.oneOf(["absolute","fixed"])}),popperRef:refType_default,slotProps:import_prop_types85.default.shape({root:import_prop_types85.default.oneOfType([import_prop_types85.default.func,import_prop_types85.default.object])}),slots:import_prop_types85.default.shape({root:import_prop_types85.default.elementType}),sx:import_prop_types85.default.oneOfType([import_prop_types85.default.arrayOf(import_prop_types85.default.oneOfType([import_prop_types85.default.func,import_prop_types85.default.object,import_prop_types85.default.bool])),import_prop_types85.default.func,import_prop_types85.default.object]),transition:import_prop_types85.default.bool};var Popper_default=Popper2;function getTooltipUtilityClass(slot){return generateUtilityClass("MuiTooltip",slot)}var tooltipClasses=generateUtilityClasses("MuiTooltip",["popper","popperInteractive","popperArrow","popperClose","tooltip","tooltipArrow","touch","tooltipPlacementLeft","tooltipPlacementRight","tooltipPlacementTop","tooltipPlacementBottom","arrow"]),tooltipClasses_default=tooltipClasses;var import_jsx_runtime97=__toESM(require_react_jsx_runtime_development());function round3(value){return Math.round(value*1e5)/1e5}var useUtilityClasses55=(ownerState)=>{let{classes,disableInteractive,arrow,touch,placement}=ownerState,slots={popper:["popper",!disableInteractive&&"popperInteractive",arrow&&"popperArrow"],tooltip:["tooltip",arrow&&"tooltipArrow",touch&&"touch",`tooltipPlacement${capitalize_default(placement.split("-")[0])}`],arrow:["arrow"]};return composeClasses(slots,getTooltipUtilityClass,classes)},TooltipPopper=styled_default2(Popper_default,{name:"MuiTooltip",slot:"Popper",overridesResolver:(props,styles)=>{let{ownerState}=props;return[styles.popper,!ownerState.disableInteractive&&styles.popperInteractive,ownerState.arrow&&styles.popperArrow,!ownerState.open&&styles.popperClose]}})(memoTheme_default(({theme})=>({zIndex:(theme.vars||theme).zIndex.tooltip,pointerEvents:"none",variants:[{props:({ownerState})=>!ownerState.disableInteractive,style:{pointerEvents:"auto"}},{props:({open})=>!open,style:{pointerEvents:"none"}},{props:({ownerState})=>ownerState.arrow,style:{[`&[data-popper-placement*="bottom"] .${tooltipClasses_default.arrow}`]:{top:0,marginTop:"-0.71em","&::before":{transformOrigin:"0 100%"}},[`&[data-popper-placement*="top"] .${tooltipClasses_default.arrow}`]:{bottom:0,marginBottom:"-0.71em","&::before":{transformOrigin:"100% 0"}},[`&[data-popper-placement*="right"] .${tooltipClasses_default.arrow}`]:{height:"1em",width:"0.71em","&::before":{transformOrigin:"100% 100%"}},[`&[data-popper-placement*="left"] .${tooltipClasses_default.arrow}`]:{height:"1em",width:"0.71em","&::before":{transformOrigin:"0 0"}}}},{props:({ownerState})=>ownerState.arrow&&!ownerState.isRtl,style:{[`&[data-popper-placement*="right"] .${tooltipClasses_default.arrow}`]:{left:0,marginLeft:"-0.71em"}}},{props:({ownerState})=>ownerState.arrow&&!!ownerState.isRtl,style:{[`&[data-popper-placement*="right"] .${tooltipClasses_default.arrow}`]:{right:0,marginRight:"-0.71em"}}},{props:({ownerState})=>ownerState.arrow&&!ownerState.isRtl,style:{[`&[data-popper-placement*="left"] .${tooltipClasses_default.arrow}`]:{right:0,marginRight:"-0.71em"}}},{props:({ownerState})=>ownerState.arrow&&!!ownerState.isRtl,style:{[`&[data-popper-placement*="left"] .${tooltipClasses_default.arrow}`]:{left:0,marginLeft:"-0.71em"}}}]}))),TooltipTooltip=styled_default2("div",{name:"MuiTooltip",slot:"Tooltip",overridesResolver:(props,styles)=>{let{ownerState}=props;return[styles.tooltip,ownerState.touch&&styles.touch,ownerState.arrow&&styles.tooltipArrow,styles[`tooltipPlacement${capitalize_default(ownerState.placement.split("-")[0])}`]]}})(memoTheme_default(({theme})=>({backgroundColor:theme.vars?theme.vars.palette.Tooltip.bg:alpha(theme.palette.grey[700],0.92),borderRadius:(theme.vars||theme).shape.borderRadius,color:(theme.vars||theme).palette.common.white,fontFamily:theme.typography.fontFamily,padding:"4px 8px",fontSize:theme.typography.pxToRem(11),maxWidth:300,margin:2,wordWrap:"break-word",fontWeight:theme.typography.fontWeightMedium,[`.${tooltipClasses_default.popper}[data-popper-placement*="left"] &`]:{transformOrigin:"right center"},[`.${tooltipClasses_default.popper}[data-popper-placement*="right"] &`]:{transformOrigin:"left center"},[`.${tooltipClasses_default.popper}[data-popper-placement*="top"] &`]:{transformOrigin:"center bottom",marginBottom:"14px"},[`.${tooltipClasses_default.popper}[data-popper-placement*="bottom"] &`]:{transformOrigin:"center top",marginTop:"14px"},variants:[{props:({ownerState})=>ownerState.arrow,style:{position:"relative",margin:0}},{props:({ownerState})=>ownerState.touch,style:{padding:"8px 16px",fontSize:theme.typography.pxToRem(14),lineHeight:`${round3(1.1428571428571428)}em`,fontWeight:theme.typography.fontWeightRegular}},{props:({ownerState})=>!ownerState.isRtl,style:{[`.${tooltipClasses_default.popper}[data-popper-placement*="left"] &`]:{marginRight:"14px"},[`.${tooltipClasses_default.popper}[data-popper-placement*="right"] &`]:{marginLeft:"14px"}}},{props:({ownerState})=>!ownerState.isRtl&&ownerState.touch,style:{[`.${tooltipClasses_default.popper}[data-popper-placement*="left"] &`]:{marginRight:"24px"},[`.${tooltipClasses_default.popper}[data-popper-placement*="right"] &`]:{marginLeft:"24px"}}},{props:({ownerState})=>!!ownerState.isRtl,style:{[`.${tooltipClasses_default.popper}[data-popper-placement*="left"] &`]:{marginLeft:"14px"},[`.${tooltipClasses_default.popper}[data-popper-placement*="right"] &`]:{marginRight:"14px"}}},{props:({ownerState})=>!!ownerState.isRtl&&ownerState.touch,style:{[`.${tooltipClasses_default.popper}[data-popper-placement*="left"] &`]:{marginLeft:"24px"},[`.${tooltipClasses_default.popper}[data-popper-placement*="right"] &`]:{marginRight:"24px"}}},{props:({ownerState})=>ownerState.touch,style:{[`.${tooltipClasses_default.popper}[data-popper-placement*="top"] &`]:{marginBottom:"24px"}}},{props:({ownerState})=>ownerState.touch,style:{[`.${tooltipClasses_default.popper}[data-popper-placement*="bottom"] &`]:{marginTop:"24px"}}}]}))),TooltipArrow=styled_default2("span",{name:"MuiTooltip",slot:"Arrow",overridesResolver:(props,styles)=>styles.arrow})(memoTheme_default(({theme})=>({overflow:"hidden",position:"absolute",width:"1em",height:"0.71em",boxSizing:"border-box",color:theme.vars?theme.vars.palette.Tooltip.bg:alpha(theme.palette.grey[700],0.9),"&::before":{content:'""',margin:"auto",display:"block",width:"100%",height:"100%",backgroundColor:"currentColor",transform:"rotate(45deg)"}}))),hystersisOpen=!1,hystersisTimer=new Timeout2,cursorPosition={x:0,y:0};function composeEventHandler(handler,eventHandler){return(event,...params)=>{if(eventHandler)eventHandler(event,...params);handler(event,...params)}}var Tooltip=React126.forwardRef(function(inProps,ref){let props=useDefaultProps2({props:inProps,name:"MuiTooltip"}),{arrow=!1,children:childrenProp,classes:classesProp,components={},componentsProps={},describeChild=!1,disableFocusListener=!1,disableHoverListener=!1,disableInteractive:disableInteractiveProp=!1,disableTouchListener=!1,enterDelay=100,enterNextDelay=0,enterTouchDelay=700,followCursor=!1,id:idProp,leaveDelay=0,leaveTouchDelay=1500,onClose,onOpen,open:openProp,placement="bottom",PopperComponent:PopperComponentProp,PopperProps={},slotProps={},slots={},title,TransitionComponent:TransitionComponentProp,TransitionProps,...other}=props,children=React126.isValidElement(childrenProp)?childrenProp:import_jsx_runtime97.jsx("span",{children:childrenProp}),theme=useTheme5(),isRtl=useRtl(),[childNode,setChildNode]=React126.useState(),[arrowRef,setArrowRef]=React126.useState(null),ignoreNonTouchEvents=React126.useRef(!1),disableInteractive=disableInteractiveProp||followCursor,closeTimer=useTimeout(),enterTimer=useTimeout(),leaveTimer=useTimeout(),touchTimer=useTimeout(),[openState,setOpenState]=useControlled_default({controlled:openProp,default:!1,name:"Tooltip",state:"open"}),open=openState;{let{current:isControlled}=React126.useRef(openProp!==void 0);React126.useEffect(()=>{if(childNode&&childNode.disabled&&!isControlled&&title!==""&&childNode.tagName.toLowerCase()==="button")console.warn(["MUI: You are providing a disabled `button` child to the Tooltip component.","A disabled element does not fire events.","Tooltip needs to listen to the child element's events to display the title.","","Add a simple wrapper element, such as a `span`."].join(`
242
242
  `))},[title,childNode,isControlled])}let id=useId_default(idProp),prevUserSelect=React126.useRef(),stopTouchInteraction=useEventCallback_default2(()=>{if(prevUserSelect.current!==void 0)document.body.style.WebkitUserSelect=prevUserSelect.current,prevUserSelect.current=void 0;touchTimer.clear()});React126.useEffect(()=>stopTouchInteraction,[stopTouchInteraction]);let handleOpen=(event)=>{if(hystersisTimer.clear(),hystersisOpen=!0,setOpenState(!0),onOpen&&!open)onOpen(event)},handleClose=useEventCallback_default2((event)=>{if(hystersisTimer.start(800+leaveDelay,()=>{hystersisOpen=!1}),setOpenState(!1),onClose&&open)onClose(event);closeTimer.start(theme.transitions.duration.shortest,()=>{ignoreNonTouchEvents.current=!1})}),handleMouseOver=(event)=>{if(ignoreNonTouchEvents.current&&event.type!=="touchstart")return;if(childNode)childNode.removeAttribute("title");if(enterTimer.clear(),leaveTimer.clear(),enterDelay||hystersisOpen&&enterNextDelay)enterTimer.start(hystersisOpen?enterNextDelay:enterDelay,()=>{handleOpen(event)});else handleOpen(event)},handleMouseLeave=(event)=>{enterTimer.clear(),leaveTimer.start(leaveDelay,()=>{handleClose(event)})},[,setChildIsFocusVisible]=React126.useState(!1),handleBlur=(event)=>{if(!isFocusVisible(event.target))setChildIsFocusVisible(!1),handleMouseLeave(event)},handleFocus=(event)=>{if(!childNode)setChildNode(event.currentTarget);if(isFocusVisible(event.target))setChildIsFocusVisible(!0),handleMouseOver(event)},detectTouchStart=(event)=>{ignoreNonTouchEvents.current=!0;let childrenProps=children.props;if(childrenProps.onTouchStart)childrenProps.onTouchStart(event)},handleTouchStart=(event)=>{detectTouchStart(event),leaveTimer.clear(),closeTimer.clear(),stopTouchInteraction(),prevUserSelect.current=document.body.style.WebkitUserSelect,document.body.style.WebkitUserSelect="none",touchTimer.start(enterTouchDelay,()=>{document.body.style.WebkitUserSelect=prevUserSelect.current,handleMouseOver(event)})},handleTouchEnd=(event)=>{if(children.props.onTouchEnd)children.props.onTouchEnd(event);stopTouchInteraction(),leaveTimer.start(leaveTouchDelay,()=>{handleClose(event)})};React126.useEffect(()=>{if(!open)return;function handleKeyDown(nativeEvent){if(nativeEvent.key==="Escape")handleClose(nativeEvent)}return document.addEventListener("keydown",handleKeyDown),()=>{document.removeEventListener("keydown",handleKeyDown)}},[handleClose,open]);let handleRef=useForkRef_default(getReactElementRef(children),setChildNode,ref);if(!title&&title!==0)open=!1;let popperRef=React126.useRef(),handleMouseMove=(event)=>{let childrenProps=children.props;if(childrenProps.onMouseMove)childrenProps.onMouseMove(event);if(cursorPosition={x:event.clientX,y:event.clientY},popperRef.current)popperRef.current.update()},nameOrDescProps={},titleIsString=typeof title==="string";if(describeChild)nameOrDescProps.title=!open&&titleIsString&&!disableHoverListener?title:null,nameOrDescProps["aria-describedby"]=open?id:null;else nameOrDescProps["aria-label"]=titleIsString?title:null,nameOrDescProps["aria-labelledby"]=open&&!titleIsString?id:null;let childrenProps={...nameOrDescProps,...other,...children.props,className:clsx_default(other.className,children.props.className),onTouchStart:detectTouchStart,ref:handleRef,...followCursor?{onMouseMove:handleMouseMove}:{}};childrenProps["data-mui-internal-clone-element"]=!0,React126.useEffect(()=>{if(childNode&&!childNode.getAttribute("data-mui-internal-clone-element"))console.error(["MUI: The `children` component of the Tooltip is not forwarding its props correctly.","Please make sure that props are spread on the same element that the ref is applied to."].join(`
243
243
  `))},[childNode]);let interactiveWrapperListeners={};if(!disableTouchListener)childrenProps.onTouchStart=handleTouchStart,childrenProps.onTouchEnd=handleTouchEnd;if(!disableHoverListener){if(childrenProps.onMouseOver=composeEventHandler(handleMouseOver,childrenProps.onMouseOver),childrenProps.onMouseLeave=composeEventHandler(handleMouseLeave,childrenProps.onMouseLeave),!disableInteractive)interactiveWrapperListeners.onMouseOver=handleMouseOver,interactiveWrapperListeners.onMouseLeave=handleMouseLeave}if(!disableFocusListener){if(childrenProps.onFocus=composeEventHandler(handleFocus,childrenProps.onFocus),childrenProps.onBlur=composeEventHandler(handleBlur,childrenProps.onBlur),!disableInteractive)interactiveWrapperListeners.onFocus=handleFocus,interactiveWrapperListeners.onBlur=handleBlur}if(children.props.title)console.error(["MUI: You have provided a `title` prop to the child of <Tooltip />.",`Remove this title prop \`${children.props.title}\` or the Tooltip component.`].join(`
244
- `));let ownerState={...props,isRtl,arrow,disableInteractive,placement,PopperComponentProp,touch:ignoreNonTouchEvents.current},resolvedPopperProps=typeof slotProps.popper==="function"?slotProps.popper(ownerState):slotProps.popper,popperOptions=React126.useMemo(()=>{let tooltipModifiers=[{name:"arrow",enabled:Boolean(arrowRef),options:{element:arrowRef,padding:4}}];if(PopperProps.popperOptions?.modifiers)tooltipModifiers=tooltipModifiers.concat(PopperProps.popperOptions.modifiers);if(resolvedPopperProps?.popperOptions?.modifiers)tooltipModifiers=tooltipModifiers.concat(resolvedPopperProps.popperOptions.modifiers);return{...PopperProps.popperOptions,...resolvedPopperProps?.popperOptions,modifiers:tooltipModifiers}},[arrowRef,PopperProps.popperOptions,resolvedPopperProps?.popperOptions]),classes=useUtilityClasses55(ownerState),resolvedTransitionProps=typeof slotProps.transition==="function"?slotProps.transition(ownerState):slotProps.transition,externalForwardedProps={slots:{popper:components.Popper,transition:components.Transition??TransitionComponentProp,tooltip:components.Tooltip,arrow:components.Arrow,...slots},slotProps:{arrow:slotProps.arrow??componentsProps.arrow,popper:{...PopperProps,...resolvedPopperProps??componentsProps.popper},tooltip:slotProps.tooltip??componentsProps.tooltip,transition:{...TransitionProps,...resolvedTransitionProps??componentsProps.transition}}},[PopperSlot,popperSlotProps]=useSlot("popper",{elementType:TooltipPopper,externalForwardedProps,ownerState,className:clsx_default(classes.popper,PopperProps?.className)}),[TransitionSlot,transitionSlotProps]=useSlot("transition",{elementType:Grow_default,externalForwardedProps,ownerState}),[TooltipSlot,tooltipSlotProps]=useSlot("tooltip",{elementType:TooltipTooltip,className:classes.tooltip,externalForwardedProps,ownerState}),[ArrowSlot,arrowSlotProps]=useSlot("arrow",{elementType:TooltipArrow,className:classes.arrow,externalForwardedProps,ownerState,ref:setArrowRef});return import_jsx_runtime97.jsxs(React126.Fragment,{children:[React126.cloneElement(children,childrenProps),import_jsx_runtime97.jsx(PopperSlot,{as:PopperComponentProp??Popper_default,placement,anchorEl:followCursor?{getBoundingClientRect:()=>({top:cursorPosition.y,left:cursorPosition.x,right:cursorPosition.x,bottom:cursorPosition.y,width:0,height:0})}:childNode,popperRef,open:childNode?open:!1,id,transition:!0,...interactiveWrapperListeners,...popperSlotProps,popperOptions,children:({TransitionProps:TransitionPropsInner})=>import_jsx_runtime97.jsx(TransitionSlot,{timeout:theme.transitions.duration.shorter,...TransitionPropsInner,...transitionSlotProps,children:import_jsx_runtime97.jsxs(TooltipSlot,{...tooltipSlotProps,children:[title,arrow?import_jsx_runtime97.jsx(ArrowSlot,{...arrowSlotProps}):null]})})})]})});Tooltip.propTypes={arrow:import_prop_types86.default.bool,children:elementAcceptingRef_default.isRequired,classes:import_prop_types86.default.object,className:import_prop_types86.default.string,components:import_prop_types86.default.shape({Arrow:import_prop_types86.default.elementType,Popper:import_prop_types86.default.elementType,Tooltip:import_prop_types86.default.elementType,Transition:import_prop_types86.default.elementType}),componentsProps:import_prop_types86.default.shape({arrow:import_prop_types86.default.object,popper:import_prop_types86.default.object,tooltip:import_prop_types86.default.object,transition:import_prop_types86.default.object}),describeChild:import_prop_types86.default.bool,disableFocusListener:import_prop_types86.default.bool,disableHoverListener:import_prop_types86.default.bool,disableInteractive:import_prop_types86.default.bool,disableTouchListener:import_prop_types86.default.bool,enterDelay:import_prop_types86.default.number,enterNextDelay:import_prop_types86.default.number,enterTouchDelay:import_prop_types86.default.number,followCursor:import_prop_types86.default.bool,id:import_prop_types86.default.string,leaveDelay:import_prop_types86.default.number,leaveTouchDelay:import_prop_types86.default.number,onClose:import_prop_types86.default.func,onOpen:import_prop_types86.default.func,open:import_prop_types86.default.bool,placement:import_prop_types86.default.oneOf(["auto-end","auto-start","auto","bottom-end","bottom-start","bottom","left-end","left-start","left","right-end","right-start","right","top-end","top-start","top"]),PopperComponent:import_prop_types86.default.elementType,PopperProps:import_prop_types86.default.object,slotProps:import_prop_types86.default.shape({arrow:import_prop_types86.default.oneOfType([import_prop_types86.default.func,import_prop_types86.default.object]),popper:import_prop_types86.default.oneOfType([import_prop_types86.default.func,import_prop_types86.default.object]),tooltip:import_prop_types86.default.oneOfType([import_prop_types86.default.func,import_prop_types86.default.object]),transition:import_prop_types86.default.oneOfType([import_prop_types86.default.func,import_prop_types86.default.object])}),slots:import_prop_types86.default.shape({arrow:import_prop_types86.default.elementType,popper:import_prop_types86.default.elementType,tooltip:import_prop_types86.default.elementType,transition:import_prop_types86.default.elementType}),sx:import_prop_types86.default.oneOfType([import_prop_types86.default.arrayOf(import_prop_types86.default.oneOfType([import_prop_types86.default.func,import_prop_types86.default.object,import_prop_types86.default.bool])),import_prop_types86.default.func,import_prop_types86.default.object]),title:import_prop_types86.default.node,TransitionComponent:import_prop_types86.default.elementType,TransitionProps:import_prop_types86.default.object};var Tooltip_default=Tooltip;var React127=__toESM(require_react_development()),import_prop_types87=__toESM(require_prop_types());function getDialogActionsUtilityClass(slot){return generateUtilityClass("MuiDialogActions",slot)}var dialogActionsClasses=generateUtilityClasses("MuiDialogActions",["root","spacing"]);var import_jsx_runtime98=__toESM(require_react_jsx_runtime_development()),useUtilityClasses56=(ownerState)=>{let{classes,disableSpacing}=ownerState;return composeClasses({root:["root",!disableSpacing&&"spacing"]},getDialogActionsUtilityClass,classes)},DialogActionsRoot=styled_default2("div",{name:"MuiDialogActions",slot:"Root",overridesResolver:(props,styles)=>{let{ownerState}=props;return[styles.root,!ownerState.disableSpacing&&styles.spacing]}})({display:"flex",alignItems:"center",padding:8,justifyContent:"flex-end",flex:"0 0 auto",variants:[{props:({ownerState})=>!ownerState.disableSpacing,style:{"& > :not(style) ~ :not(style)":{marginLeft:8}}}]}),DialogActions=React127.forwardRef(function(inProps,ref){let props=useDefaultProps2({props:inProps,name:"MuiDialogActions"}),{className,disableSpacing=!1,...other}=props,ownerState={...props,disableSpacing},classes=useUtilityClasses56(ownerState);return import_jsx_runtime98.jsx(DialogActionsRoot,{className:clsx_default(classes.root,className),ownerState,ref,...other})});DialogActions.propTypes={children:import_prop_types87.default.node,classes:import_prop_types87.default.object,className:import_prop_types87.default.string,disableSpacing:import_prop_types87.default.bool,sx:import_prop_types87.default.oneOfType([import_prop_types87.default.arrayOf(import_prop_types87.default.oneOfType([import_prop_types87.default.func,import_prop_types87.default.object,import_prop_types87.default.bool])),import_prop_types87.default.func,import_prop_types87.default.object])};var DialogActions_default=DialogActions;var React128=__toESM(require_react_development()),import_prop_types88=__toESM(require_prop_types());function getDialogContentUtilityClass(slot){return generateUtilityClass("MuiDialogContent",slot)}var dialogContentClasses=generateUtilityClasses("MuiDialogContent",["root","dividers"]);function getDialogTitleUtilityClass(slot){return generateUtilityClass("MuiDialogTitle",slot)}var dialogTitleClasses=generateUtilityClasses("MuiDialogTitle",["root"]),dialogTitleClasses_default=dialogTitleClasses;var import_jsx_runtime99=__toESM(require_react_jsx_runtime_development()),useUtilityClasses57=(ownerState)=>{let{classes,dividers}=ownerState;return composeClasses({root:["root",dividers&&"dividers"]},getDialogContentUtilityClass,classes)},DialogContentRoot=styled_default2("div",{name:"MuiDialogContent",slot:"Root",overridesResolver:(props,styles)=>{let{ownerState}=props;return[styles.root,ownerState.dividers&&styles.dividers]}})(memoTheme_default(({theme})=>({flex:"1 1 auto",WebkitOverflowScrolling:"touch",overflowY:"auto",padding:"20px 24px",variants:[{props:({ownerState})=>ownerState.dividers,style:{padding:"16px 24px",borderTop:`1px solid ${(theme.vars||theme).palette.divider}`,borderBottom:`1px solid ${(theme.vars||theme).palette.divider}`}},{props:({ownerState})=>!ownerState.dividers,style:{[`.${dialogTitleClasses_default.root} + &`]:{paddingTop:0}}}]}))),DialogContent=React128.forwardRef(function(inProps,ref){let props=useDefaultProps2({props:inProps,name:"MuiDialogContent"}),{className,dividers=!1,...other}=props,ownerState={...props,dividers},classes=useUtilityClasses57(ownerState);return import_jsx_runtime99.jsx(DialogContentRoot,{className:clsx_default(classes.root,className),ownerState,ref,...other})});DialogContent.propTypes={children:import_prop_types88.default.node,classes:import_prop_types88.default.object,className:import_prop_types88.default.string,dividers:import_prop_types88.default.bool,sx:import_prop_types88.default.oneOfType([import_prop_types88.default.arrayOf(import_prop_types88.default.oneOfType([import_prop_types88.default.func,import_prop_types88.default.object,import_prop_types88.default.bool])),import_prop_types88.default.func,import_prop_types88.default.object])};var DialogContent_default=DialogContent;var React129=__toESM(require_react_development()),import_prop_types89=__toESM(require_prop_types());function getDialogContentTextUtilityClass(slot){return generateUtilityClass("MuiDialogContentText",slot)}var dialogContentTextClasses=generateUtilityClasses("MuiDialogContentText",["root"]);var import_jsx_runtime100=__toESM(require_react_jsx_runtime_development()),useUtilityClasses58=(ownerState)=>{let{classes}=ownerState,composedClasses=composeClasses({root:["root"]},getDialogContentTextUtilityClass,classes);return{...classes,...composedClasses}},DialogContentTextRoot=styled_default2(Typography_default,{shouldForwardProp:(prop)=>rootShouldForwardProp_default(prop)||prop==="classes",name:"MuiDialogContentText",slot:"Root",overridesResolver:(props,styles)=>styles.root})({}),DialogContentText=React129.forwardRef(function(inProps,ref){let props=useDefaultProps2({props:inProps,name:"MuiDialogContentText"}),{children,className,...ownerState}=props,classes=useUtilityClasses58(ownerState);return import_jsx_runtime100.jsx(DialogContentTextRoot,{component:"p",variant:"body1",color:"textSecondary",ref,ownerState,className:clsx_default(classes.root,className),...props,classes})});DialogContentText.propTypes={children:import_prop_types89.default.node,classes:import_prop_types89.default.object,className:import_prop_types89.default.string,sx:import_prop_types89.default.oneOfType([import_prop_types89.default.arrayOf(import_prop_types89.default.oneOfType([import_prop_types89.default.func,import_prop_types89.default.object,import_prop_types89.default.bool])),import_prop_types89.default.func,import_prop_types89.default.object])};var DialogContentText_default=DialogContentText;var React131=__toESM(require_react_development()),import_prop_types90=__toESM(require_prop_types());var React130=__toESM(require_react_development()),DialogContext=React130.createContext({});DialogContext.displayName="DialogContext";var DialogContext_default=DialogContext;var import_jsx_runtime101=__toESM(require_react_jsx_runtime_development()),useUtilityClasses59=(ownerState)=>{let{classes}=ownerState;return composeClasses({root:["root"]},getDialogTitleUtilityClass,classes)},DialogTitleRoot=styled_default2(Typography_default,{name:"MuiDialogTitle",slot:"Root",overridesResolver:(props,styles)=>styles.root})({padding:"16px 24px",flex:"0 0 auto"}),DialogTitle=React131.forwardRef(function(inProps,ref){let props=useDefaultProps2({props:inProps,name:"MuiDialogTitle"}),{className,id:idProp,...other}=props,ownerState=props,classes=useUtilityClasses59(ownerState),{titleId=idProp}=React131.useContext(DialogContext_default);return import_jsx_runtime101.jsx(DialogTitleRoot,{component:"h2",className:clsx_default(classes.root,className),ownerState,ref,variant:"h6",id:idProp??titleId,...other})});DialogTitle.propTypes={children:import_prop_types90.default.node,classes:import_prop_types90.default.object,className:import_prop_types90.default.string,id:import_prop_types90.default.string,sx:import_prop_types90.default.oneOfType([import_prop_types90.default.arrayOf(import_prop_types90.default.oneOfType([import_prop_types90.default.func,import_prop_types90.default.object,import_prop_types90.default.bool])),import_prop_types90.default.func,import_prop_types90.default.object])};var DialogTitle_default=DialogTitle;var import_react7=__toESM(require_react_development(),1);function chrome(props){let className=typeof props.className==="string"?props.className:void 0,nodePath=props["data-node-path"];return{...className!==void 0?{className}:{},...typeof nodePath==="string"?{"data-node-path":nodePath}:{}}}function mergeSx(base,sx){return sx&&typeof sx==="object"&&!Array.isArray(sx)?{...base,...sx}:base}var DIALOG_WIDTH={xs:360,sm:480,md:600,lg:800,xl:960};function Dialog(props){let width=typeof props.maxWidth==="string"?DIALOG_WIDTH[props.maxWidth]??600:600;return import_react7.createElement(Paper_default,{...chrome(props),elevation:8,sx:mergeSx({width:"100%",maxWidth:width,mx:"auto",my:2,borderRadius:2,overflow:"hidden"},props.sx)},props.children)}function Menu2(props){return import_react7.createElement(Paper_default,{...chrome(props),elevation:3,sx:mergeSx({display:"inline-block",minWidth:180,py:1,borderRadius:1.5},props.sx)},props.children)}function Popover3(props){return import_react7.createElement(Paper_default,{...chrome(props),elevation:3,sx:mergeSx({display:"inline-block",p:2,borderRadius:1.5},props.sx)},props.children)}function Drawer(props){return import_react7.createElement(Paper_default,{...chrome(props),elevation:2,square:!0,sx:mergeSx({width:280,height:"100%",p:2},props.sx)},props.children)}function Snackbar(props){let body=props.message!==void 0?props.message:props.children;return import_react7.createElement(Box_default,{...chrome(props),sx:mergeSx({display:"inline-flex",alignItems:"center",px:2,py:1.25,bgcolor:"grey.900",color:"common.white",borderRadius:1,fontSize:14},props.sx)},body)}var REUSED_HELPER_IDS=["Icon","Image","Placeholder","SVG","Layer","Gradient","Prose"],registry={Alert:Alert_default,AppBar:AppBar_default,Avatar:Avatar_default,Badge:Badge_default,Box:Box_default,Button:Button_default,Card:Card_default,CardActions:CardActions_default,CardContent:CardContent_default,CardHeader:CardHeader_default,Checkbox:Checkbox_default,Chip:Chip_default,Container:Container_default,Dialog,DialogActions:DialogActions_default,DialogContent:DialogContent_default,DialogContentText:DialogContentText_default,DialogTitle:DialogTitle_default,Divider:Divider_default,Drawer,IconButton:IconButton_default,LinearProgress:LinearProgress_default,Link:Link_default,List:List_default,ListItem:ListItem_default,ListItemText:ListItemText_default,Menu:Menu2,MenuItem:MenuItem_default,Paper:Paper_default,Popover:Popover3,Select:Select_default,Snackbar,Stack:Stack_default,Switch:Switch_default,Tab:Tab_default,Table:Table_default,TableBody:TableBody_default,TableCell:TableCell_default,TableHead:TableHead_default,TableRow:TableRow_default,Tabs:Tabs_default,TextField:TextField_default,Toolbar:Toolbar_default,Tooltip:Tooltip_default,Typography:Typography_default,...helpersRegistry(REUSED_HELPER_IDS)};var import_react9=__toESM(require_react_development(),1);function muiColor(css){let s=css.trim();if(/^(#|rgb|hsl)/i.test(s))return s;return formatRgb(parse_default(s))??s}function base(slot,fallback){if(typeof slot==="string")return muiColor(slot);if(slot&&typeof slot==="object"&&typeof slot.DEFAULT==="string")return muiColor(slot.DEFAULT);return muiColor(fallback)}function fg(slot,fallback){if(slot&&typeof slot==="object"&&typeof slot.foreground==="string")return muiColor(slot.foreground);return muiColor(fallback)}function radiusPx(theme){let md=theme.radius?.md;if(typeof md==="number")return md;if(typeof md==="string"){let n=Number.parseFloat(md);return Number.isFinite(n)?md.includes("rem")?n*16:n:8}return 8}function muiThemeOptions(theme,dark=!1){let c=resolveColors(theme,dark);return{palette:{mode:dark?"dark":"light",primary:{main:base(c.primary,"#4f46e5"),contrastText:fg(c.primary,"#ffffff")},secondary:{main:base(c.secondary,"#64748b"),contrastText:fg(c.secondary,"#ffffff")},error:{main:base(c.destructive,"#dc2626"),contrastText:fg(c.destructive,"#ffffff")},background:{default:muiColor(c.background),paper:base(c.card,c.background)},text:{primary:muiColor(c.foreground),secondary:base(c.muted,c.foreground)},divider:c.border?muiColor(c.border):"rgba(0,0,0,0.12)"},shape:{borderRadius:radiusPx(theme)},typography:muiTypography(theme)}}function muiTypography(theme){let typography=theme.typography,typeset=typography.typesets?.[DEFAULT_TYPESET_NAME],scale=typesetScale(typeset,{...typography.fontFamily?{fontFamily:typography.fontFamily}:{}}),bodyFamily=scale.body.fontFamily??typography.fontFamily?.sans??"system-ui, -apple-system, sans-serif",variant=(role)=>{let r=scale[role];return{...r.fontFamily&&r.fontFamily!==bodyFamily?{fontFamily:r.fontFamily}:{},fontSize:`${r.fontSize}px`,lineHeight:r.lineHeight,letterSpacing:r.letterSpacing,fontWeight:r.fontWeight}};return{fontFamily:bodyFamily,fontSize:scale.body.fontSize,h1:variant("h1"),h2:variant("h2"),h3:variant("h3"),h4:variant("h4"),h5:variant("h5"),h6:variant("h6"),subtitle1:variant("lead"),subtitle2:variant("small"),body1:variant("body"),body2:variant("caption"),caption:variant("caption")}}function muiThemeFrom(theme,dark=!1){return createTheme2(muiThemeOptions(theme,dark))}function makeRenderPass(theme,dark=!1){let cache=$_default2({key:"vmui",prepend:!0}),server=$_default3(cache),muiTheme=muiThemeFrom(theme,dark);return{wrap:(element)=>import_react9.createElement(import_emotion_react_development_cjs.CacheProvider,{value:cache},import_react9.createElement(ThemeProvider4,{theme:muiTheme},element)),css:(html)=>server.extractCriticalToChunks(html).styles.map((s)=>s.css).join("")}}var here=dirname(fileURLToPath(import.meta.url)),srcDir=resolveProviderSrcDir(here,"provider-mui",process.env.VELLOO_MUI_SRC);function createProvider(){let overlayIds=["Dialog","Menu","Popover","Drawer","Snackbar"];return{id:"mui",version:MUI_VERSION,label:"Material UI v6",componentsDir:srcDir,styleEntryPath:join(srcDir,"tailwind-entry.css"),registry,loadManifest:async()=>MUI_MANIFEST,catalog:async()=>catalogFromManifest(MUI_MANIFEST.filter((c)=>c.source==="mui"),{importPath:"@mui/material"}),styleChannel:SX_PROP,styleChannels:["sx"],mcpIntro:()=>[...MUI_INTRO],renderPass:(theme,dark)=>makeRenderPass(theme,dark??!1),codegenModule:"@mui/material",themeToNative:(theme,dark)=>muiThemeOptions(theme,dark),themeModule:{importLines:['import { createTheme } from "@mui/material/styles";'],factory:"createTheme",defaultPath:"theme.ts"},canvasBundleSpec:{components:(ids)=>ids.flatMap((id)=>{let descriptor=MUI_MANIFEST.find((entry)=>entry.id===id);if(!descriptor)return[];if(descriptor.source==="velloo"){let path=helperSourcePath(id);return path?[{id,sources:[{importPath:path,exportName:id,fidelity:"fallback",note:"Velloo helper used alongside the host framework."}]}]:[]}return[{id,sources:[{importPath:`@mui/material/${id}`,exportName:id,fidelity:overlayIds.includes(id)?"adapted":"exact",...overlayIds.includes(id)?{note:"Real MUI surface rendered through an inline canvas overlay shim."}:{}}]}]}),overlayIds,styleRuntime:{kind:"emotion",cacheKey:"vmui",stylesModule:"@mui/material/styles"}}}}export{createProvider};
244
+ `));let ownerState={...props,isRtl,arrow,disableInteractive,placement,PopperComponentProp,touch:ignoreNonTouchEvents.current},resolvedPopperProps=typeof slotProps.popper==="function"?slotProps.popper(ownerState):slotProps.popper,popperOptions=React126.useMemo(()=>{let tooltipModifiers=[{name:"arrow",enabled:Boolean(arrowRef),options:{element:arrowRef,padding:4}}];if(PopperProps.popperOptions?.modifiers)tooltipModifiers=tooltipModifiers.concat(PopperProps.popperOptions.modifiers);if(resolvedPopperProps?.popperOptions?.modifiers)tooltipModifiers=tooltipModifiers.concat(resolvedPopperProps.popperOptions.modifiers);return{...PopperProps.popperOptions,...resolvedPopperProps?.popperOptions,modifiers:tooltipModifiers}},[arrowRef,PopperProps.popperOptions,resolvedPopperProps?.popperOptions]),classes=useUtilityClasses55(ownerState),resolvedTransitionProps=typeof slotProps.transition==="function"?slotProps.transition(ownerState):slotProps.transition,externalForwardedProps={slots:{popper:components.Popper,transition:components.Transition??TransitionComponentProp,tooltip:components.Tooltip,arrow:components.Arrow,...slots},slotProps:{arrow:slotProps.arrow??componentsProps.arrow,popper:{...PopperProps,...resolvedPopperProps??componentsProps.popper},tooltip:slotProps.tooltip??componentsProps.tooltip,transition:{...TransitionProps,...resolvedTransitionProps??componentsProps.transition}}},[PopperSlot,popperSlotProps]=useSlot("popper",{elementType:TooltipPopper,externalForwardedProps,ownerState,className:clsx_default(classes.popper,PopperProps?.className)}),[TransitionSlot,transitionSlotProps]=useSlot("transition",{elementType:Grow_default,externalForwardedProps,ownerState}),[TooltipSlot,tooltipSlotProps]=useSlot("tooltip",{elementType:TooltipTooltip,className:classes.tooltip,externalForwardedProps,ownerState}),[ArrowSlot,arrowSlotProps]=useSlot("arrow",{elementType:TooltipArrow,className:classes.arrow,externalForwardedProps,ownerState,ref:setArrowRef});return import_jsx_runtime97.jsxs(React126.Fragment,{children:[React126.cloneElement(children,childrenProps),import_jsx_runtime97.jsx(PopperSlot,{as:PopperComponentProp??Popper_default,placement,anchorEl:followCursor?{getBoundingClientRect:()=>({top:cursorPosition.y,left:cursorPosition.x,right:cursorPosition.x,bottom:cursorPosition.y,width:0,height:0})}:childNode,popperRef,open:childNode?open:!1,id,transition:!0,...interactiveWrapperListeners,...popperSlotProps,popperOptions,children:({TransitionProps:TransitionPropsInner})=>import_jsx_runtime97.jsx(TransitionSlot,{timeout:theme.transitions.duration.shorter,...TransitionPropsInner,...transitionSlotProps,children:import_jsx_runtime97.jsxs(TooltipSlot,{...tooltipSlotProps,children:[title,arrow?import_jsx_runtime97.jsx(ArrowSlot,{...arrowSlotProps}):null]})})})]})});Tooltip.propTypes={arrow:import_prop_types86.default.bool,children:elementAcceptingRef_default.isRequired,classes:import_prop_types86.default.object,className:import_prop_types86.default.string,components:import_prop_types86.default.shape({Arrow:import_prop_types86.default.elementType,Popper:import_prop_types86.default.elementType,Tooltip:import_prop_types86.default.elementType,Transition:import_prop_types86.default.elementType}),componentsProps:import_prop_types86.default.shape({arrow:import_prop_types86.default.object,popper:import_prop_types86.default.object,tooltip:import_prop_types86.default.object,transition:import_prop_types86.default.object}),describeChild:import_prop_types86.default.bool,disableFocusListener:import_prop_types86.default.bool,disableHoverListener:import_prop_types86.default.bool,disableInteractive:import_prop_types86.default.bool,disableTouchListener:import_prop_types86.default.bool,enterDelay:import_prop_types86.default.number,enterNextDelay:import_prop_types86.default.number,enterTouchDelay:import_prop_types86.default.number,followCursor:import_prop_types86.default.bool,id:import_prop_types86.default.string,leaveDelay:import_prop_types86.default.number,leaveTouchDelay:import_prop_types86.default.number,onClose:import_prop_types86.default.func,onOpen:import_prop_types86.default.func,open:import_prop_types86.default.bool,placement:import_prop_types86.default.oneOf(["auto-end","auto-start","auto","bottom-end","bottom-start","bottom","left-end","left-start","left","right-end","right-start","right","top-end","top-start","top"]),PopperComponent:import_prop_types86.default.elementType,PopperProps:import_prop_types86.default.object,slotProps:import_prop_types86.default.shape({arrow:import_prop_types86.default.oneOfType([import_prop_types86.default.func,import_prop_types86.default.object]),popper:import_prop_types86.default.oneOfType([import_prop_types86.default.func,import_prop_types86.default.object]),tooltip:import_prop_types86.default.oneOfType([import_prop_types86.default.func,import_prop_types86.default.object]),transition:import_prop_types86.default.oneOfType([import_prop_types86.default.func,import_prop_types86.default.object])}),slots:import_prop_types86.default.shape({arrow:import_prop_types86.default.elementType,popper:import_prop_types86.default.elementType,tooltip:import_prop_types86.default.elementType,transition:import_prop_types86.default.elementType}),sx:import_prop_types86.default.oneOfType([import_prop_types86.default.arrayOf(import_prop_types86.default.oneOfType([import_prop_types86.default.func,import_prop_types86.default.object,import_prop_types86.default.bool])),import_prop_types86.default.func,import_prop_types86.default.object]),title:import_prop_types86.default.node,TransitionComponent:import_prop_types86.default.elementType,TransitionProps:import_prop_types86.default.object};var Tooltip_default=Tooltip;var React127=__toESM(require_react_development()),import_prop_types87=__toESM(require_prop_types());function getDialogActionsUtilityClass(slot){return generateUtilityClass("MuiDialogActions",slot)}var dialogActionsClasses=generateUtilityClasses("MuiDialogActions",["root","spacing"]);var import_jsx_runtime98=__toESM(require_react_jsx_runtime_development()),useUtilityClasses56=(ownerState)=>{let{classes,disableSpacing}=ownerState;return composeClasses({root:["root",!disableSpacing&&"spacing"]},getDialogActionsUtilityClass,classes)},DialogActionsRoot=styled_default2("div",{name:"MuiDialogActions",slot:"Root",overridesResolver:(props,styles)=>{let{ownerState}=props;return[styles.root,!ownerState.disableSpacing&&styles.spacing]}})({display:"flex",alignItems:"center",padding:8,justifyContent:"flex-end",flex:"0 0 auto",variants:[{props:({ownerState})=>!ownerState.disableSpacing,style:{"& > :not(style) ~ :not(style)":{marginLeft:8}}}]}),DialogActions=React127.forwardRef(function(inProps,ref){let props=useDefaultProps2({props:inProps,name:"MuiDialogActions"}),{className,disableSpacing=!1,...other}=props,ownerState={...props,disableSpacing},classes=useUtilityClasses56(ownerState);return import_jsx_runtime98.jsx(DialogActionsRoot,{className:clsx_default(classes.root,className),ownerState,ref,...other})});DialogActions.propTypes={children:import_prop_types87.default.node,classes:import_prop_types87.default.object,className:import_prop_types87.default.string,disableSpacing:import_prop_types87.default.bool,sx:import_prop_types87.default.oneOfType([import_prop_types87.default.arrayOf(import_prop_types87.default.oneOfType([import_prop_types87.default.func,import_prop_types87.default.object,import_prop_types87.default.bool])),import_prop_types87.default.func,import_prop_types87.default.object])};var DialogActions_default=DialogActions;var React128=__toESM(require_react_development()),import_prop_types88=__toESM(require_prop_types());function getDialogContentUtilityClass(slot){return generateUtilityClass("MuiDialogContent",slot)}var dialogContentClasses=generateUtilityClasses("MuiDialogContent",["root","dividers"]);function getDialogTitleUtilityClass(slot){return generateUtilityClass("MuiDialogTitle",slot)}var dialogTitleClasses=generateUtilityClasses("MuiDialogTitle",["root"]),dialogTitleClasses_default=dialogTitleClasses;var import_jsx_runtime99=__toESM(require_react_jsx_runtime_development()),useUtilityClasses57=(ownerState)=>{let{classes,dividers}=ownerState;return composeClasses({root:["root",dividers&&"dividers"]},getDialogContentUtilityClass,classes)},DialogContentRoot=styled_default2("div",{name:"MuiDialogContent",slot:"Root",overridesResolver:(props,styles)=>{let{ownerState}=props;return[styles.root,ownerState.dividers&&styles.dividers]}})(memoTheme_default(({theme})=>({flex:"1 1 auto",WebkitOverflowScrolling:"touch",overflowY:"auto",padding:"20px 24px",variants:[{props:({ownerState})=>ownerState.dividers,style:{padding:"16px 24px",borderTop:`1px solid ${(theme.vars||theme).palette.divider}`,borderBottom:`1px solid ${(theme.vars||theme).palette.divider}`}},{props:({ownerState})=>!ownerState.dividers,style:{[`.${dialogTitleClasses_default.root} + &`]:{paddingTop:0}}}]}))),DialogContent=React128.forwardRef(function(inProps,ref){let props=useDefaultProps2({props:inProps,name:"MuiDialogContent"}),{className,dividers=!1,...other}=props,ownerState={...props,dividers},classes=useUtilityClasses57(ownerState);return import_jsx_runtime99.jsx(DialogContentRoot,{className:clsx_default(classes.root,className),ownerState,ref,...other})});DialogContent.propTypes={children:import_prop_types88.default.node,classes:import_prop_types88.default.object,className:import_prop_types88.default.string,dividers:import_prop_types88.default.bool,sx:import_prop_types88.default.oneOfType([import_prop_types88.default.arrayOf(import_prop_types88.default.oneOfType([import_prop_types88.default.func,import_prop_types88.default.object,import_prop_types88.default.bool])),import_prop_types88.default.func,import_prop_types88.default.object])};var DialogContent_default=DialogContent;var React129=__toESM(require_react_development()),import_prop_types89=__toESM(require_prop_types());function getDialogContentTextUtilityClass(slot){return generateUtilityClass("MuiDialogContentText",slot)}var dialogContentTextClasses=generateUtilityClasses("MuiDialogContentText",["root"]);var import_jsx_runtime100=__toESM(require_react_jsx_runtime_development()),useUtilityClasses58=(ownerState)=>{let{classes}=ownerState,composedClasses=composeClasses({root:["root"]},getDialogContentTextUtilityClass,classes);return{...classes,...composedClasses}},DialogContentTextRoot=styled_default2(Typography_default,{shouldForwardProp:(prop)=>rootShouldForwardProp_default(prop)||prop==="classes",name:"MuiDialogContentText",slot:"Root",overridesResolver:(props,styles)=>styles.root})({}),DialogContentText=React129.forwardRef(function(inProps,ref){let props=useDefaultProps2({props:inProps,name:"MuiDialogContentText"}),{children,className,...ownerState}=props,classes=useUtilityClasses58(ownerState);return import_jsx_runtime100.jsx(DialogContentTextRoot,{component:"p",variant:"body1",color:"textSecondary",ref,ownerState,className:clsx_default(classes.root,className),...props,classes})});DialogContentText.propTypes={children:import_prop_types89.default.node,classes:import_prop_types89.default.object,className:import_prop_types89.default.string,sx:import_prop_types89.default.oneOfType([import_prop_types89.default.arrayOf(import_prop_types89.default.oneOfType([import_prop_types89.default.func,import_prop_types89.default.object,import_prop_types89.default.bool])),import_prop_types89.default.func,import_prop_types89.default.object])};var DialogContentText_default=DialogContentText;var React131=__toESM(require_react_development()),import_prop_types90=__toESM(require_prop_types());var React130=__toESM(require_react_development()),DialogContext=React130.createContext({});DialogContext.displayName="DialogContext";var DialogContext_default=DialogContext;var import_jsx_runtime101=__toESM(require_react_jsx_runtime_development()),useUtilityClasses59=(ownerState)=>{let{classes}=ownerState;return composeClasses({root:["root"]},getDialogTitleUtilityClass,classes)},DialogTitleRoot=styled_default2(Typography_default,{name:"MuiDialogTitle",slot:"Root",overridesResolver:(props,styles)=>styles.root})({padding:"16px 24px",flex:"0 0 auto"}),DialogTitle=React131.forwardRef(function(inProps,ref){let props=useDefaultProps2({props:inProps,name:"MuiDialogTitle"}),{className,id:idProp,...other}=props,ownerState=props,classes=useUtilityClasses59(ownerState),{titleId=idProp}=React131.useContext(DialogContext_default);return import_jsx_runtime101.jsx(DialogTitleRoot,{component:"h2",className:clsx_default(classes.root,className),ownerState,ref,variant:"h6",id:idProp??titleId,...other})});DialogTitle.propTypes={children:import_prop_types90.default.node,classes:import_prop_types90.default.object,className:import_prop_types90.default.string,id:import_prop_types90.default.string,sx:import_prop_types90.default.oneOfType([import_prop_types90.default.arrayOf(import_prop_types90.default.oneOfType([import_prop_types90.default.func,import_prop_types90.default.object,import_prop_types90.default.bool])),import_prop_types90.default.func,import_prop_types90.default.object])};var DialogTitle_default=DialogTitle;var import_react7=__toESM(require_react_development(),1);function chrome(props){let className=typeof props.className==="string"?props.className:void 0,nodePath=props["data-node-path"];return{...className!==void 0?{className}:{},...typeof nodePath==="string"?{"data-node-path":nodePath}:{}}}function mergeSx(base,sx){return sx&&typeof sx==="object"&&!Array.isArray(sx)?{...base,...sx}:base}var DIALOG_WIDTH={xs:360,sm:480,md:600,lg:800,xl:960};function Dialog(props){let width=typeof props.maxWidth==="string"?DIALOG_WIDTH[props.maxWidth]??600:600;return import_react7.createElement(Paper_default,{...chrome(props),elevation:8,sx:mergeSx({width:"100%",maxWidth:width,mx:"auto",my:2,borderRadius:2,overflow:"hidden"},props.sx)},props.children)}function Menu2(props){return import_react7.createElement(Paper_default,{...chrome(props),elevation:3,sx:mergeSx({display:"inline-block",minWidth:180,py:1,borderRadius:1.5},props.sx)},props.children)}function Popover3(props){return import_react7.createElement(Paper_default,{...chrome(props),elevation:3,sx:mergeSx({display:"inline-block",p:2,borderRadius:1.5},props.sx)},props.children)}function Drawer(props){return import_react7.createElement(Paper_default,{...chrome(props),elevation:2,square:!0,sx:mergeSx({width:280,height:"100%",p:2},props.sx)},props.children)}function Snackbar(props){let body=props.message!==void 0?props.message:props.children;return import_react7.createElement(Box_default,{...chrome(props),sx:mergeSx({display:"inline-flex",alignItems:"center",px:2,py:1.25,bgcolor:"grey.900",color:"common.white",borderRadius:1,fontSize:14},props.sx)},body)}var REUSED_HELPER_IDS=["Icon","Image","Placeholder","SVG","Layer","Gradient","Prose"],registry={Alert:Alert_default,AppBar:AppBar_default,Avatar:Avatar_default,Badge:Badge_default,Box:Box_default,Button:Button_default,Card:Card_default,CardActions:CardActions_default,CardContent:CardContent_default,CardHeader:CardHeader_default,Checkbox:Checkbox_default,Chip:Chip_default,Container:Container_default,Dialog,DialogActions:DialogActions_default,DialogContent:DialogContent_default,DialogContentText:DialogContentText_default,DialogTitle:DialogTitle_default,Divider:Divider_default,Drawer,IconButton:IconButton_default,LinearProgress:LinearProgress_default,Link:Link_default,List:List_default,ListItem:ListItem_default,ListItemText:ListItemText_default,Menu:Menu2,MenuItem:MenuItem_default,Paper:Paper_default,Popover:Popover3,Select:Select_default,Snackbar,Stack:Stack_default,Switch:Switch_default,Tab:Tab_default,Table:Table_default,TableBody:TableBody_default,TableCell:TableCell_default,TableHead:TableHead_default,TableRow:TableRow_default,Tabs:Tabs_default,TextField:TextField_default,Toolbar:Toolbar_default,Tooltip:Tooltip_default,Typography:Typography_default,...helpersRegistry(REUSED_HELPER_IDS)};var import_react9=__toESM(require_react_development(),1);function muiColor(css){let s=css.trim();if(/^(#|rgb|hsl)/i.test(s))return s;return formatRgb(parse_default(s))??s}function base(slot,fallback){if(typeof slot==="string")return muiColor(slot);if(slot&&typeof slot==="object"&&typeof slot.DEFAULT==="string")return muiColor(slot.DEFAULT);return muiColor(fallback)}function fg(slot,fallback){if(slot&&typeof slot==="object"&&typeof slot.foreground==="string")return muiColor(slot.foreground);return muiColor(fallback)}function radiusPx(theme){let md=theme.radius?.md;if(typeof md==="number")return md;if(typeof md==="string"){let n=Number.parseFloat(md);return Number.isFinite(n)?md.includes("rem")?n*16:n:8}return 8}function muiThemeOptions(theme,dark=!1){let c=resolveColors(theme,dark);return{palette:{mode:dark?"dark":"light",primary:{main:base(c.primary,"#4f46e5"),contrastText:fg(c.primary,"#ffffff")},secondary:{main:base(c.secondary,"#64748b"),contrastText:fg(c.secondary,"#ffffff")},error:{main:base(c.destructive,"#dc2626"),contrastText:fg(c.destructive,"#ffffff")},background:{default:muiColor(c.background),paper:base(c.card,c.background)},text:{primary:muiColor(c.foreground),secondary:base(c.muted,c.foreground)},divider:c.border?muiColor(c.border):"rgba(0,0,0,0.12)"},shape:{borderRadius:radiusPx(theme)},typography:muiTypography(theme)}}function muiTypography(theme){let typography=theme.typography,typeset=typography.typesets?.[DEFAULT_TYPESET_NAME],scale=typesetScale(typeset,{...typography.fontFamily?{fontFamily:typography.fontFamily}:{}}),bodyFamily=scale.body.fontFamily??typography.fontFamily?.sans??"system-ui, -apple-system, sans-serif",variant=(role)=>{let r=scale[role];return{...r.fontFamily&&r.fontFamily!==bodyFamily?{fontFamily:r.fontFamily}:{},fontSize:`${r.fontSize}px`,lineHeight:r.lineHeight,letterSpacing:r.letterSpacing,fontWeight:r.fontWeight}};return{fontFamily:bodyFamily,fontSize:scale.body.fontSize,h1:variant("h1"),h2:variant("h2"),h3:variant("h3"),h4:variant("h4"),h5:variant("h5"),h6:variant("h6"),subtitle1:variant("lead"),subtitle2:variant("small"),body1:variant("body"),body2:variant("caption"),caption:variant("caption")}}function muiThemeFrom(theme,dark=!1){return createTheme2(muiThemeOptions(theme,dark))}function makeRenderPass(theme,dark=!1){let cache=$_default2({key:"vmui",prepend:!0}),server=$_default3(cache),muiTheme=muiThemeFrom(theme,dark);return{wrap:(element)=>import_react9.createElement(import_emotion_react_development_cjs.CacheProvider,{value:cache},import_react9.createElement(ThemeProvider4,{theme:muiTheme},element)),css:(html)=>server.extractCriticalToChunks(html).styles.map((s)=>s.css).join("")}}var here=dirname(fileURLToPath(import.meta.url)),srcDir=resolveProviderSrcDir(here,"provider-mui",process.env.VELLOO_MUI_SRC);function createProvider(){let overlayIds=["Dialog","Menu","Popover","Drawer","Snackbar"];return{id:"mui",version:MUI_VERSION,label:"Material UI v6",componentsDir:srcDir,styleEntryPath:join(srcDir,"tailwind-entry.css"),registry,loadManifest:async()=>MUI_MANIFEST,catalog:async()=>catalogFromManifest(MUI_MANIFEST.filter((c)=>c.source==="mui"),{importPath:"@mui/material"}),styleChannel:SX_PROP,styleChannels:["sx"],mcpIntro:()=>[...MUI_INTRO],renderPass:(theme,dark)=>makeRenderPass(theme,dark??!1),codegenModule:"@mui/material",themeToNative:(theme,dark)=>muiThemeOptions(theme,dark),themeModule:{importLines:['import { createTheme } from "@mui/material/styles";'],factory:"createTheme",defaultPath:"theme.ts"},ownedModules:{packages:["@mui/material"]},canvasBundleSpec:{components:(ids)=>ids.flatMap((id)=>{let descriptor=MUI_MANIFEST.find((entry)=>entry.id===id);if(!descriptor)return[];if(descriptor.source==="velloo"){let path=helperSourcePath(id);return path?[{id,sources:[{importPath:path,exportName:id,fidelity:"fallback",note:"Velloo helper used alongside the host framework."}]}]:[]}return[{id,sources:[{importPath:`@mui/material/${id}`,exportName:id,fidelity:overlayIds.includes(id)?"adapted":"exact",...overlayIds.includes(id)?{note:"Real MUI surface rendered through an inline canvas overlay shim."}:{}}]}]}),overlayIds,styleRuntime:{kind:"emotion",cacheKey:"vmui",stylesModule:"@mui/material/styles"}}}}export{createProvider};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import"./chunk-dg6z4vdd.js";import{refreshUpdateCache}from"./chunk-xt5ayg7g.js";import{defineCommand}from"./chunk-2smsg2ct.js";var update_check_default=defineCommand({meta:{name:"__update_check",description:"Internal release check",hidden:!0},async run(){await refreshUpdateCache()}});export{update_check_default as default};
2
+ import"./chunk-9psr8atb.js";import{refreshUpdateCache}from"./chunk-9p1dk5cb.js";import{defineCommand}from"./chunk-2smsg2ct.js";var update_check_default=defineCommand({meta:{name:"__update_check",description:"Internal release check",hidden:!0},async run(){await refreshUpdateCache()}});export{update_check_default as default};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{TAILWIND_CLASSNAME,helperSourcePath}from"./chunk-tdsk5wxa.js";import{snapshotVersion2,entryCssPath2,componentsDir2}from"./chunk-cvn689d5.js";import{registry2}from"./chunk-hcb68zt7.js";import"./chunk-jb21jkp1.js";import{readFile}from"fs/promises";import{join}from"path";async function readManifest(cacheDir){let raw=await readFile(join(cacheDir,"manifest.json"),"utf8");return JSON.parse(raw)}import{existsSync as existsSync4}from"fs";import{join as join5}from"path";import{existsSync as existsSync3,readFileSync as readFileSync3}from"fs";import{join as join4}from"path";import{existsSync,readFileSync}from"fs";import{join as join2}from"path";function exportsName(source,id){let name=id.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");if(new RegExp(`\\bexport\\s+(?:async\\s+)?(?:function|const|let|var|class)\\s+${name}\\b`).test(source))return!0;for(let match of source.matchAll(/\bexport\s*\{([^}]*)\}/g)){let clause=match[1]??"";for(let part of clause.split(",")){let local=part.trim().split(/\s+as\s+/);if((local.length>1?local[1]:local[0])?.trim()===id)return!0}}return/\bexport\s+\*\s+from\b/.test(source)}function hostComponentFile(uiDir,addName,id){for(let extension of["tsx","ts","jsx","js"]){let path=join2(uiDir,`${addName}.${extension}`);if(!existsSync(path))continue;try{return exportsName(readFileSync(path,"utf8"),id)?path:null}catch{return null}}return null}import{existsSync as existsSync2,readdirSync,readFileSync as readFileSync2}from"fs";import{join as join3,resolve}from"path";function kebab(id){return id.replace(/(?<!^)(?=[A-Z])/g,"-").toLowerCase()}function addNameIndex(manifest){let byId=new Map(manifest.flatMap((c)=>c.registryName?[[c.id,c.registryName]]:[]));return(id)=>byId.get(id)??kebab(id)}function findUiDir(hostAppRoot){let candidates=[];try{let cj=JSON.parse(readFileSync2(join3(hostAppRoot,"components.json"),"utf8")),fromAlias=(alias,suffix="")=>{if(!alias)return;let srcBase=existsSync2(join3(hostAppRoot,"src"))?"src":"",rel=alias.replace(/^@\//,srcBase?`${srcBase}/`:"")+suffix;candidates.push(resolve(hostAppRoot,rel))};fromAlias(cj.aliases?.ui),fromAlias(cj.aliases?.components,"/ui")}catch{}candidates.push(resolve(hostAppRoot,"src/components/ui"),resolve(hostAppRoot,"components/ui"),resolve(hostAppRoot,"app/components/ui"));for(let dir of candidates)if(existsSync2(dir))return dir;return null}function installedAddNames(hostAppRoot){let dir=findUiDir(hostAppRoot);if(!dir)return new Set;try{return new Set(readdirSync(dir).filter((f)=>f.endsWith(".tsx")||f.endsWith(".ts")).map((f)=>f.replace(/\.(tsx|ts)$/,"")))}catch{return new Set}}function enrichManifestFromHost(manifest,uiDir){if(!uiDir)return manifest;let addNameOf=addNameIndex(manifest),byFile=new Map,read=(addName)=>{if(byFile.has(addName))return byFile.get(addName)??null;for(let ext of["tsx","ts","jsx","js"]){let path=join4(uiDir,`${addName}.${ext}`);if(!existsSync3(path))continue;let source=readFileSync3(path,"utf8");return byFile.set(addName,source),source}return byFile.set(addName,""),null};return manifest.map((descriptor)=>{if(descriptor.source==="velloo")return descriptor;let source=read(addNameOf(descriptor.id));if(!source||!exportsName(source,descriptor.id))return descriptor;let additions=[...variantPropsFor(source,descriptor.id===descriptor.family),...declaredPropsFor(source,descriptor.id)];if(additions.length===0)return descriptor;let props=[...descriptor.props];for(let addition of additions){let index=props.findIndex((prop)=>prop.name===addition.name);if(index>=0)props[index]={...props[index],...addition};else props.push(addition)}return{...descriptor,props,designModeNotes:appendNote(descriptor.designModeNotes,"Props include variants detected from the app's component source.")}})}function appendNote(current,next){return current?`${current} ${next}`:next}function variantPropsFor(source,primary){let out=[];if(!primary)return out;let variantsAt=source.indexOf("variants:");if(variantsAt<0)return out;let open=source.indexOf("{",variantsAt),block=balancedBlock(source,open);if(!block)return out;for(let[name,value]of objectEntries(block.slice(1,-1))){let values=objectEntries(value.slice(1,-1)).map(([key])=>key);if(values.length===0)continue;out.push({name,type:`${values.map((value)=>JSON.stringify(value)).join(" | ")} | undefined`,optional:!0,control:"enum",enumValues:values,...defaultVariant(source,name)?{defaultValue:defaultVariant(source,name)}:{}})}return out}function defaultVariant(source,name){let at=source.indexOf("defaultVariants:");if(at<0)return;let open=source.indexOf("{",at),block=balancedBlock(source,open);if(!block)return;return objectEntries(block.slice(1,-1)).find(([key])=>key===name)?.[1].replace(/["'`\s]/g,"")}function declaredPropsFor(source,componentId){let match=[new RegExp(`interface\\s+${componentId}Props(?:\\s+extends[^\\{]+)?\\s*\\{`,"m"),new RegExp(`type\\s+${componentId}Props\\s*=.*?&\\s*\\{`,"m")].map((pattern)=>pattern.exec(source)).find(Boolean);if(!match||match.index===void 0)return[];let open=source.indexOf("{",match.index),block=balancedBlock(source,open);if(!block)return[];let out=[],property=/(?:^|[;{\n])\s*([A-Za-z_$][\w$]*)(\?)?\s*:\s*([^;\n}]+)/gm;for(let found of block.slice(1,-1).matchAll(property)){let name=found[1],raw=found[3]?.trim();if(!name||!raw||name==="children")continue;let enumValues=[...raw.matchAll(/["']([^"']+)["']/g)].map((value)=>value[1]),optional=found[2]==="?"||raw.includes("undefined");out.push({name,type:optional&&!raw.includes("undefined")?`${raw} | undefined`:raw,optional,control:enumValues.length>0?"enum":/boolean/.test(raw)?"boolean":/number/.test(raw)?"number":"string",...enumValues.length>0?{enumValues}:{}})}return out}function balancedBlock(source,open){if(open<0||source[open]!=="{")return null;let depth=0,quote="";for(let index=open;index<source.length;index++){let char=source[index],prev=source[index-1];if(quote){if(char===quote&&prev!=="\\")quote="";continue}if(char==='"'||char==="'"||char==="`"){quote=char;continue}if(char==="{")depth++;if(char==="}"&&--depth===0)return source.slice(open,index+1)}return null}function objectEntries(body){let out=[],index=0;while(index<body.length){while(index<body.length&&/[\s,]/.test(body[index]))index++;let keyMatch=/^(?:["']([^"']+)["']|([A-Za-z_$][\w$-]*))\s*:/.exec(body.slice(index));if(!keyMatch)break;let key=keyMatch[1]??keyMatch[2];if(!key)break;index+=keyMatch[0].length;while(/\s/.test(body[index]??""))index++;if(body[index]==="{"){let block=balancedBlock(body,index);if(!block)break;out.push([key,block]),index+=block.length;continue}let end=body.indexOf(",",index),value=body.slice(index,end<0?body.length:end).trim();out.push([key,value]),index=end<0?body.length:end+1}return out}function createProvider(opts={}){let cacheDir=opts.cacheDir,plannedUiDir=cacheDir?join5(cacheDir,"ui"):void 0,hostUiDir=()=>plannedUiDir&&existsSync4(plannedUiDir)?plannedUiDir:opts.hostAppRoot?findUiDir(opts.hostAppRoot):null,componentsDir=componentsDir2,version=opts.version??snapshotVersion2,hostAppRoot=opts.hostAppRoot,loadManifest=async()=>{if(cacheDir&&existsSync4(join5(cacheDir,"manifest.json")))return enrichManifestFromHost(await readManifest(cacheDir),hostUiDir());let{loadManifest:snapshotManifest}=await import("./chunk-zb6hc1y0.js");return enrichManifestFromHost(await snapshotManifest(),hostUiDir())};return{id:"shadcn-upstream",version,componentsDir,styleEntryPath:entryCssPath2,registry:registry2,loadManifest,label:`shadcn (upstream @ ${version})`,styleChannel:TAILWIND_CLASSNAME,styleChannels:["tailwind-classname"],mcpIntro:()=>['**This folder targets shadcn/ui with Tailwind.** The canvas imports client-safe components directly from the app, uses named canvas-safe adaptations for portal/state-heavy families, and falls back per component when a host file is missing or cannot compile. Velloo helpers (`Box`, `Heading`, `Text`, `Icon`, `Image`, `Gradient`, `Layer`, `SVG`, `Divider`, `Placeholder`, `Prose`) remain canvas primitives. Style through `update_props { style: "flex gap-4 p-6" }` \u2014 a Tailwind className string. Call `list_components` for the catalog and `component_status` before making a fidelity claim.',""],catalog:async()=>{let manifest=await loadManifest(),addNameOf=addNameIndex(manifest),shadcn=manifest.filter((c)=>c.source!=="velloo"),present=hostAppRoot?installedAddNames(hostAppRoot):new Set;return shadcn.map((c)=>{let addName=addNameOf(c.id);return{id:c.id,installed:present.has(addName),importPath:`@/components/ui/${addName}`}})},canvasBundleSpec:{styleRuntime:{kind:"none"},components:async(ids)=>{let manifest=await loadManifest(),addNameOf=addNameIndex(manifest),sourceById=new Map(manifest.map((entry)=>[entry.id,entry.source])),uiDir=hostUiDir();return ids.flatMap((id)=>{if(sourceById.get(id)==="velloo"){let path=helperSourcePath(id);return path?[{id,sources:[{importPath:path,exportName:id,fidelity:"fallback",note:"Velloo helper used alongside repo-backed shadcn components."}]}]:[]}if(!sourceById.has(id))return[];let addName=addNameOf(id),snapshotPath=join5(componentsDir2,"ui",`${addName}.tsx`);if(CANVAS_ADAPTED_FAMILIES.has(addName))return[{id,sources:[{importPath:snapshotPath,exportName:id,fidelity:"adapted",note:"The app component uses portals or runtime state; Velloo renders its canvas-safe counterpart inline."}]}];let hostPath=uiDir?hostComponentFile(uiDir,addName,id):null;return[{id,sources:[...hostPath?[{importPath:hostPath,exportName:id,fidelity:"exact",preflight:!0,note:"Rendered directly from the app's shadcn source file."}]:[],{importPath:snapshotPath,exportName:id,fidelity:"fallback",note:hostPath?"The app source did not compile for the browser canvas; using the bundled canvas fallback.":"The app does not install this component under this name (it may be renamed in its own file); using the bundled canvas fallback."}]}]})},sourceDirs:()=>{let uiDir=hostUiDir()??plannedUiDir;return uiDir?[uiDir]:[]}}}}var CANVAS_ADAPTED_FAMILIES=new Set(["alert-dialog","calendar","carousel","chart","dialog","dropdown-menu","popover","select","sheet","sonner","tooltip"]);export{createProvider};
2
+ import{TAILWIND_CLASSNAME,helperSourcePath}from"./chunk-88eqqdk1.js";import{snapshotVersion2,entryCssPath2,componentsDir2}from"./chunk-cvn689d5.js";import{registry2}from"./chunk-p62fygqz.js";import"./chunk-c6hywdvq.js";import{readFile}from"fs/promises";import{join}from"path";async function readManifest(cacheDir){let raw=await readFile(join(cacheDir,"manifest.json"),"utf8");return JSON.parse(raw)}import{existsSync as existsSync4}from"fs";import{join as join5}from"path";import{existsSync as existsSync3,readFileSync as readFileSync3}from"fs";import{join as join4}from"path";import{existsSync,readFileSync}from"fs";import{join as join2}from"path";function exportsName(source,id){let name=id.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");if(new RegExp(`\\bexport\\s+(?:async\\s+)?(?:function|const|let|var|class)\\s+${name}\\b`).test(source))return!0;for(let match of source.matchAll(/\bexport\s*\{([^}]*)\}/g)){let clause=match[1]??"";for(let part of clause.split(",")){let local=part.trim().split(/\s+as\s+/);if((local.length>1?local[1]:local[0])?.trim()===id)return!0}}return/\bexport\s+\*\s+from\b/.test(source)}function hostComponentFile(uiDir,addName,id){for(let extension of["tsx","ts","jsx","js"]){let path=join2(uiDir,`${addName}.${extension}`);if(!existsSync(path))continue;try{return exportsName(readFileSync(path,"utf8"),id)?path:null}catch{return null}}return null}import{existsSync as existsSync2,readdirSync,readFileSync as readFileSync2}from"fs";import{join as join3,resolve}from"path";function kebab(id){return id.replace(/(?<!^)(?=[A-Z])/g,"-").toLowerCase()}function addNameIndex(manifest){let byId=new Map(manifest.flatMap((c)=>c.registryName?[[c.id,c.registryName]]:[]));return(id)=>byId.get(id)??kebab(id)}function findUiDir(hostAppRoot){let candidates=[];try{let cj=JSON.parse(readFileSync2(join3(hostAppRoot,"components.json"),"utf8")),fromAlias=(alias,suffix="")=>{if(!alias)return;let srcBase=existsSync2(join3(hostAppRoot,"src"))?"src":"",rel=alias.replace(/^@\//,srcBase?`${srcBase}/`:"")+suffix;candidates.push(resolve(hostAppRoot,rel))};fromAlias(cj.aliases?.ui),fromAlias(cj.aliases?.components,"/ui")}catch{}candidates.push(resolve(hostAppRoot,"src/components/ui"),resolve(hostAppRoot,"components/ui"),resolve(hostAppRoot,"app/components/ui"));for(let dir of candidates)if(existsSync2(dir))return dir;return null}function installedAddNames(hostAppRoot){let dir=findUiDir(hostAppRoot);if(!dir)return new Set;try{return new Set(readdirSync(dir).filter((f)=>f.endsWith(".tsx")||f.endsWith(".ts")).map((f)=>f.replace(/\.(tsx|ts)$/,"")))}catch{return new Set}}function enrichManifestFromHost(manifest,uiDir){if(!uiDir)return manifest;let addNameOf=addNameIndex(manifest),byFile=new Map,read=(addName)=>{if(byFile.has(addName))return byFile.get(addName)??null;for(let ext of["tsx","ts","jsx","js"]){let path=join4(uiDir,`${addName}.${ext}`);if(!existsSync3(path))continue;let source=readFileSync3(path,"utf8");return byFile.set(addName,source),source}return byFile.set(addName,""),null};return manifest.map((descriptor)=>{if(descriptor.source==="velloo")return descriptor;let source=read(addNameOf(descriptor.id));if(!source||!exportsName(source,descriptor.id))return descriptor;let additions=[...variantPropsFor(source,descriptor.id===descriptor.family),...declaredPropsFor(source,descriptor.id)];if(additions.length===0)return descriptor;let props=[...descriptor.props];for(let addition of additions){let index=props.findIndex((prop)=>prop.name===addition.name);if(index>=0)props[index]={...props[index],...addition};else props.push(addition)}return{...descriptor,props,designModeNotes:appendNote(descriptor.designModeNotes,"Props include variants detected from the app's component source.")}})}function appendNote(current,next){return current?`${current} ${next}`:next}function variantPropsFor(source,primary){let out=[];if(!primary)return out;let variantsAt=source.indexOf("variants:");if(variantsAt<0)return out;let open=source.indexOf("{",variantsAt),block=balancedBlock(source,open);if(!block)return out;for(let[name,value]of objectEntries(block.slice(1,-1))){let values=objectEntries(value.slice(1,-1)).map(([key])=>key);if(values.length===0)continue;out.push({name,type:`${values.map((value)=>JSON.stringify(value)).join(" | ")} | undefined`,optional:!0,control:"enum",enumValues:values,...defaultVariant(source,name)?{defaultValue:defaultVariant(source,name)}:{}})}return out}function defaultVariant(source,name){let at=source.indexOf("defaultVariants:");if(at<0)return;let open=source.indexOf("{",at),block=balancedBlock(source,open);if(!block)return;return objectEntries(block.slice(1,-1)).find(([key])=>key===name)?.[1].replace(/["'`\s]/g,"")}function declaredPropsFor(source,componentId){let match=[new RegExp(`interface\\s+${componentId}Props(?:\\s+extends[^\\{]+)?\\s*\\{`,"m"),new RegExp(`type\\s+${componentId}Props\\s*=.*?&\\s*\\{`,"m")].map((pattern)=>pattern.exec(source)).find(Boolean);if(!match||match.index===void 0)return[];let open=source.indexOf("{",match.index),block=balancedBlock(source,open);if(!block)return[];let out=[],property=/(?:^|[;{\n])\s*([A-Za-z_$][\w$]*)(\?)?\s*:\s*([^;\n}]+)/gm;for(let found of block.slice(1,-1).matchAll(property)){let name=found[1],raw=found[3]?.trim();if(!name||!raw||name==="children")continue;let enumValues=[...raw.matchAll(/["']([^"']+)["']/g)].map((value)=>value[1]),optional=found[2]==="?"||raw.includes("undefined");out.push({name,type:optional&&!raw.includes("undefined")?`${raw} | undefined`:raw,optional,control:enumValues.length>0?"enum":/boolean/.test(raw)?"boolean":/number/.test(raw)?"number":"string",...enumValues.length>0?{enumValues}:{}})}return out}function balancedBlock(source,open){if(open<0||source[open]!=="{")return null;let depth=0,quote="";for(let index=open;index<source.length;index++){let char=source[index],prev=source[index-1];if(quote){if(char===quote&&prev!=="\\")quote="";continue}if(char==='"'||char==="'"||char==="`"){quote=char;continue}if(char==="{")depth++;if(char==="}"&&--depth===0)return source.slice(open,index+1)}return null}function objectEntries(body){let out=[],index=0;while(index<body.length){while(index<body.length&&/[\s,]/.test(body[index]))index++;let keyMatch=/^(?:["']([^"']+)["']|([A-Za-z_$][\w$-]*))\s*:/.exec(body.slice(index));if(!keyMatch)break;let key=keyMatch[1]??keyMatch[2];if(!key)break;index+=keyMatch[0].length;while(/\s/.test(body[index]??""))index++;if(body[index]==="{"){let block=balancedBlock(body,index);if(!block)break;out.push([key,block]),index+=block.length;continue}let end=body.indexOf(",",index),value=body.slice(index,end<0?body.length:end).trim();out.push([key,value]),index=end<0?body.length:end+1}return out}function createProvider(opts={}){let cacheDir=opts.cacheDir,plannedUiDir=cacheDir?join5(cacheDir,"ui"):void 0,hostUiDir=()=>plannedUiDir&&existsSync4(plannedUiDir)?plannedUiDir:opts.hostAppRoot?findUiDir(opts.hostAppRoot):null,componentsDir=componentsDir2,version=opts.version??snapshotVersion2,hostAppRoot=opts.hostAppRoot,loadManifest=async()=>{if(cacheDir&&existsSync4(join5(cacheDir,"manifest.json")))return enrichManifestFromHost(await readManifest(cacheDir),hostUiDir());let{loadManifest:snapshotManifest}=await import("./chunk-7yaafw73.js");return enrichManifestFromHost(await snapshotManifest(),hostUiDir())};return{id:"shadcn-upstream",version,componentsDir,styleEntryPath:entryCssPath2,registry:registry2,loadManifest,label:`shadcn (upstream @ ${version})`,styleChannel:TAILWIND_CLASSNAME,styleChannels:["tailwind-classname"],mcpIntro:()=>['**This folder targets shadcn/ui with Tailwind.** The canvas imports client-safe components directly from the app, uses named canvas-safe adaptations for portal/state-heavy families, and falls back per component when a host file is missing or cannot compile. Velloo helpers (`Box`, `Heading`, `Text`, `Icon`, `Image`, `Gradient`, `Layer`, `SVG`, `Divider`, `Placeholder`, `Prose`) remain canvas primitives. Style through `update_props { style: "flex gap-4 p-6" }` \u2014 a Tailwind className string. Call `list_components` for the catalog and `component_status` before making a fidelity claim.',""],catalog:async()=>{let manifest=await loadManifest(),addNameOf=addNameIndex(manifest),shadcn=manifest.filter((c)=>c.source!=="velloo"),present=hostAppRoot?installedAddNames(hostAppRoot):new Set;return shadcn.map((c)=>{let addName=addNameOf(c.id);return{id:c.id,installed:present.has(addName),importPath:`@/components/ui/${addName}`}})},ownedModules:{dirs:()=>{let uiDir=hostUiDir();return uiDir?[uiDir]:[]}},canvasBundleSpec:{styleRuntime:{kind:"none"},components:async(ids)=>{let manifest=await loadManifest(),addNameOf=addNameIndex(manifest),sourceById=new Map(manifest.map((entry)=>[entry.id,entry.source])),uiDir=hostUiDir();return ids.flatMap((id)=>{if(sourceById.get(id)==="velloo"){let path=helperSourcePath(id);return path?[{id,sources:[{importPath:path,exportName:id,fidelity:"fallback",note:"Velloo helper used alongside repo-backed shadcn components."}]}]:[]}if(!sourceById.has(id))return[];let addName=addNameOf(id),snapshotPath=join5(componentsDir2,"ui",`${addName}.tsx`);if(CANVAS_ADAPTED_FAMILIES.has(addName))return[{id,sources:[{importPath:snapshotPath,exportName:id,fidelity:"adapted",note:"The app component uses portals or runtime state; Velloo renders its canvas-safe counterpart inline."}]}];let hostPath=uiDir?hostComponentFile(uiDir,addName,id):null;return[{id,sources:[...hostPath?[{importPath:hostPath,exportName:id,fidelity:"exact",preflight:!0,note:"Rendered directly from the app's shadcn source file."}]:[],{importPath:snapshotPath,exportName:id,fidelity:"fallback",note:hostPath?"The app source did not compile for the browser canvas; using the bundled canvas fallback.":"The app does not install this component under this name (it may be renamed in its own file); using the bundled canvas fallback."}]}]})},sourceDirs:()=>{let uiDir=hostUiDir()??plannedUiDir;return uiDir?[uiDir]:[]}}}}var CANVAS_ADAPTED_FAMILIES=new Set(["alert-dialog","calendar","carousel","chart","dialog","dropdown-menu","popover","select","sheet","sonner","tooltip"]);export{createProvider};
@@ -1,3 +1,3 @@
1
1
  // @bun
2
- import{recordedDesignName}from"./chunk-tdsk5wxa.js";import{displayPath}from"./chunk-dy41n60j.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-88eqqdk1.js";import{displayPath}from"./chunk-t2w8a591.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{string,number,object,CURRENT_SCHEMA_VERSION,schemaVersionOf}from"./chunk-40xgcth8.js";import{writeJsonAtomic}from"./chunk-tdsk5wxa.js";import{TOOL_VERSION}from"./chunk-dg6z4vdd.js";import{defaultCloudUrl}from"./chunk-pp86v6m6.js";function isLoopbackHost(host){let normalized=host.trim().toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,"");if(normalized==="localhost"||normalized==="::1")return!0;let octets=normalized.split(".");return octets.length===4&&octets[0]==="127"&&octets.every((part)=>/^\d+$/.test(part))}function assertLoopbackHost(host){if(isLoopbackHost(host))return;throw Error(`refusing to bind ${JSON.stringify(host)}: the canvas and MCP endpoints have no authentication and only serve loopback (use 127.0.0.1, localhost or ::1)`)}import{closeSync,existsSync,mkdirSync,openSync,readFileSync,realpathSync,statSync,unlinkSync,writeSync}from"fs";import{mkdir,readFile}from"fs/promises";import{homedir}from"os";import{dirname,join,resolve}from"path";var DaemonRecordSchema=object({root:string().min(1),pid:number().int().positive(),canvasUrl:string().min(1),canvasPort:number().int().positive(),mcpUrl:string().min(1),mcpPort:number().int().positive(),cloudUrl:string().min(1),version:string().min(1),startedAt:string().min(1)});function daemonMatchesRuntime(rec,cloudUrl=defaultCloudUrl()){return rec.version===TOOL_VERSION&&rec.cloudUrl===cloudUrl}var MUTEX_STALE_MS=15000,HEALTHY_TIMEOUT_MS=15000,cacheDir=(root)=>join(root,".design","cache"),lockPath=(root)=>join(cacheDir(root),"runtime.json"),mutexPath=(root)=>join(cacheDir(root),"runtime.lock"),logPath=(root)=>join(cacheDir(root),"daemon.log"),portMemoPath=(root)=>join(cacheDir(root),"port.json"),registryPath=()=>process.env.VELLOO_DAEMONS_PATH??join(homedir(),".velloo","daemons.json");function daemonRoot(folder){let abs=resolve(folder);return existsSync(abs)?realpathSync(abs):abs}class DesignFolderFormatError extends Error{root;found;current;constructor(message,root,found,current){super(message);this.root=root;this.found=found;this.current=current;this.name="DesignFolderFormatError"}}function assertFolderFormatCurrent(root){let raw;try{raw=JSON.parse(readFileSync(join(root,".design","config.json"),"utf8"))}catch{return}let found=schemaVersionOf(raw);if(found===CURRENT_SCHEMA_VERSION)return;let message=found>CURRENT_SCHEMA_VERSION?`velloo: ${root} uses design-folder schema version ${found}, but this velloo only knows version ${CURRENT_SCHEMA_VERSION}. Upgrade velloo to open it.`:`velloo: ${root} uses design-folder schema version ${found} (current: ${CURRENT_SCHEMA_VERSION}). Run \`velloo upgrade ${root}\` to migrate it.`;throw new DesignFolderFormatError(message,root,found,CURRENT_SCHEMA_VERSION)}async function readLock(root){try{let parsed=DaemonRecordSchema.safeParse(JSON.parse(await readFile(lockPath(root),"utf8")));return parsed.success?parsed.data:null}catch{return null}}async function writeLock(rec){await writeJsonAtomic(lockPath(rec.root),rec)}function removeLock(root){try{unlinkSync(lockPath(root))}catch{}}var DEFAULT_CANVAS_PORT=7300,DERIVED_BAND={start:7310,size:90},PortMemoSchema=object({canvasPort:number().int().min(1).max(65535)});async function readRememberedPort(root){try{let parsed=PortMemoSchema.safeParse(JSON.parse(await readFile(portMemoPath(root),"utf8")));return parsed.success?parsed.data.canvasPort:null}catch{return null}}async function rememberPort(root,canvasPort){await writeJsonAtomic(portMemoPath(root),{canvasPort})}function derivedPort(root){let digest=Bun.CryptoHasher.hash("sha256",root,"hex");return DERIVED_BAND.start+Number.parseInt(digest.slice(0,8),16)%DERIVED_BAND.size}function portCandidates(opts){if(opts.explicit!==void 0)return[opts.explicit];let wanted=[opts.remembered,DEFAULT_CANVAS_PORT,derivedPort(opts.root)];return[...new Set(wanted.filter((p)=>typeof p==="number"))]}var HealthSchema=object({app:string().optional(),root:string().optional()});async function isLive(rec){try{let res=await fetch(`http://127.0.0.1:${rec.canvasPort}/api/health`,{signal:AbortSignal.timeout(1000)});if(!res.ok)return!1;let body=await res.json(),health=HealthSchema.safeParse(body);return health.success&&health.data.app==="velloo"&&health.data.root===rec.root}catch{return!1}}async function registryRead(){try{let raw=JSON.parse(await readFile(registryPath(),"utf8"));if(!Array.isArray(raw))return[];return raw.flatMap((entry)=>{let parsed=DaemonRecordSchema.safeParse(entry);return parsed.success?[parsed.data]:[]})}catch{return[]}}async function registryWrite(records){let p=registryPath();await mkdir(dirname(p),{recursive:!0}),await writeJsonAtomic(p,records)}async function registryUpsert(rec){let others=(await registryRead()).filter((r)=>r.root!==rec.root);await registryWrite([...others,rec])}async function registryRemove(root){await registryWrite((await registryRead()).filter((r)=>r.root!==root))}async function listDaemons(){let all=await registryRead(),live=[];for(let rec of all)if(await isLive(rec))live.push(rec);if(live.length!==all.length)await registryWrite(live);return live}function daemonSpawnCmd(root,preferredPort,host){let args=["__daemon",root,"--host",host];if(preferredPort!==void 0)args.push("--port",String(preferredPort));let entry=Bun.main;return existsSync(entry)?[process.execPath,entry,...args]:[process.execPath,...args]}function spawnDetached(root,preferredPort,host){mkdirSync(cacheDir(root),{recursive:!0});let logStart=0;try{logStart=statSync(logPath(root)).size}catch{}let log=openSync(logPath(root),"a"),proc=Bun.spawn(daemonSpawnCmd(root,preferredPort,host),{stdin:"ignore",stdout:log,stderr:log});return proc.unref(),{exited:proc.exited,logStart}}function claimMutex(root){let path=mutexPath(root);try{let fd=openSync(path,"wx");return writeSync(fd,String(process.pid)),closeSync(fd),!0}catch{try{if(Date.now()-statSync(path).mtimeMs>MUTEX_STALE_MS)return unlinkSync(path),claimMutex(root)}catch{}return!1}}function releaseMutex(root){try{unlinkSync(mutexPath(root))}catch{}}function startupFailure(root,logStart){let appended="";try{appended=readFileSync(logPath(root),"utf8").slice(logStart)}catch{}let lines=appended.split(`
2
+ import{string,number,object,CURRENT_SCHEMA_VERSION,schemaVersionOf}from"./chunk-nte0t7v3.js";import{writeJsonAtomic}from"./chunk-88eqqdk1.js";import{TOOL_VERSION}from"./chunk-9psr8atb.js";import{defaultCloudUrl}from"./chunk-as08hzp3.js";function isLoopbackHost(host){let normalized=host.trim().toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,"");if(normalized==="localhost"||normalized==="::1")return!0;let octets=normalized.split(".");return octets.length===4&&octets[0]==="127"&&octets.every((part)=>/^\d+$/.test(part))}function assertLoopbackHost(host){if(isLoopbackHost(host))return;throw Error(`refusing to bind ${JSON.stringify(host)}: the canvas and MCP endpoints have no authentication and only serve loopback (use 127.0.0.1, localhost or ::1)`)}import{closeSync,existsSync,mkdirSync,openSync,readFileSync,realpathSync,statSync,unlinkSync,writeSync}from"fs";import{mkdir,readFile}from"fs/promises";import{homedir}from"os";import{dirname,join,resolve}from"path";var DaemonRecordSchema=object({root:string().min(1),pid:number().int().positive(),canvasUrl:string().min(1),canvasPort:number().int().positive(),mcpUrl:string().min(1),mcpPort:number().int().positive(),cloudUrl:string().min(1),version:string().min(1),startedAt:string().min(1)});function daemonMatchesRuntime(rec,cloudUrl=defaultCloudUrl()){return rec.version===TOOL_VERSION&&rec.cloudUrl===cloudUrl}var MUTEX_STALE_MS=15000,HEALTHY_TIMEOUT_MS=15000,cacheDir=(root)=>join(root,".design","cache"),lockPath=(root)=>join(cacheDir(root),"runtime.json"),mutexPath=(root)=>join(cacheDir(root),"runtime.lock"),logPath=(root)=>join(cacheDir(root),"daemon.log"),portMemoPath=(root)=>join(cacheDir(root),"port.json"),registryPath=()=>process.env.VELLOO_DAEMONS_PATH??join(homedir(),".velloo","daemons.json");function daemonRoot(folder){let abs=resolve(folder);return existsSync(abs)?realpathSync(abs):abs}class DesignFolderFormatError extends Error{root;found;current;constructor(message,root,found,current){super(message);this.root=root;this.found=found;this.current=current;this.name="DesignFolderFormatError"}}function assertFolderFormatCurrent(root){let raw;try{raw=JSON.parse(readFileSync(join(root,".design","config.json"),"utf8"))}catch{return}let found=schemaVersionOf(raw);if(found===CURRENT_SCHEMA_VERSION)return;let message=found>CURRENT_SCHEMA_VERSION?`velloo: ${root} uses design-folder schema version ${found}, but this velloo only knows version ${CURRENT_SCHEMA_VERSION}. Upgrade velloo to open it.`:`velloo: ${root} uses design-folder schema version ${found} (current: ${CURRENT_SCHEMA_VERSION}). Run \`velloo upgrade ${root}\` to migrate it.`;throw new DesignFolderFormatError(message,root,found,CURRENT_SCHEMA_VERSION)}async function readLock(root){try{let parsed=DaemonRecordSchema.safeParse(JSON.parse(await readFile(lockPath(root),"utf8")));return parsed.success?parsed.data:null}catch{return null}}async function writeLock(rec){await writeJsonAtomic(lockPath(rec.root),rec)}function removeLock(root){try{unlinkSync(lockPath(root))}catch{}}var DEFAULT_CANVAS_PORT=7300,DERIVED_BAND={start:7310,size:90},PortMemoSchema=object({canvasPort:number().int().min(1).max(65535)});async function readRememberedPort(root){try{let parsed=PortMemoSchema.safeParse(JSON.parse(await readFile(portMemoPath(root),"utf8")));return parsed.success?parsed.data.canvasPort:null}catch{return null}}async function rememberPort(root,canvasPort){await writeJsonAtomic(portMemoPath(root),{canvasPort})}function derivedPort(root){let digest=Bun.CryptoHasher.hash("sha256",root,"hex");return DERIVED_BAND.start+Number.parseInt(digest.slice(0,8),16)%DERIVED_BAND.size}function portCandidates(opts){if(opts.explicit!==void 0)return[opts.explicit];let wanted=[opts.remembered,DEFAULT_CANVAS_PORT,derivedPort(opts.root)];return[...new Set(wanted.filter((p)=>typeof p==="number"))]}var HealthSchema=object({app:string().optional(),root:string().optional()});async function isLive(rec){try{let res=await fetch(`http://127.0.0.1:${rec.canvasPort}/api/health`,{signal:AbortSignal.timeout(1000)});if(!res.ok)return!1;let body=await res.json(),health=HealthSchema.safeParse(body);return health.success&&health.data.app==="velloo"&&health.data.root===rec.root}catch{return!1}}async function registryRead(){try{let raw=JSON.parse(await readFile(registryPath(),"utf8"));if(!Array.isArray(raw))return[];return raw.flatMap((entry)=>{let parsed=DaemonRecordSchema.safeParse(entry);return parsed.success?[parsed.data]:[]})}catch{return[]}}async function registryWrite(records){let p=registryPath();await mkdir(dirname(p),{recursive:!0}),await writeJsonAtomic(p,records)}async function registryUpsert(rec){let others=(await registryRead()).filter((r)=>r.root!==rec.root);await registryWrite([...others,rec])}async function registryRemove(root){await registryWrite((await registryRead()).filter((r)=>r.root!==root))}async function listDaemons(){let all=await registryRead(),live=[];for(let rec of all)if(await isLive(rec))live.push(rec);if(live.length!==all.length)await registryWrite(live);return live}function daemonSpawnCmd(root,preferredPort,host){let args=["__daemon",root,"--host",host];if(preferredPort!==void 0)args.push("--port",String(preferredPort));let entry=Bun.main;return existsSync(entry)?[process.execPath,entry,...args]:[process.execPath,...args]}function spawnDetached(root,preferredPort,host){mkdirSync(cacheDir(root),{recursive:!0});let logStart=0;try{logStart=statSync(logPath(root)).size}catch{}let log=openSync(logPath(root),"a"),proc=Bun.spawn(daemonSpawnCmd(root,preferredPort,host),{stdin:"ignore",stdout:log,stderr:log,detached:process.platform==="win32"});return proc.unref(),{exited:proc.exited,logStart}}function claimMutex(root){let path=mutexPath(root);try{let fd=openSync(path,"wx");return writeSync(fd,String(process.pid)),closeSync(fd),!0}catch{try{if(Date.now()-statSync(path).mtimeMs>MUTEX_STALE_MS)return unlinkSync(path),claimMutex(root)}catch{}return!1}}function releaseMutex(root){try{unlinkSync(mutexPath(root))}catch{}}function startupFailure(root,logStart){let appended="";try{appended=readFileSync(logPath(root),"utf8").slice(logStart)}catch{}let lines=appended.split(`
3
3
  `).map((l)=>l.replace(/^velloo __daemon: /,"").trimEnd()).filter((l)=>l.trim().length>0).slice(-8);if(lines.length===0)return`velloo: the canvas daemon for ${root} exited during startup with no output \u2014 see ${logPath(root)}`;return`velloo: the canvas daemon for ${root} exited during startup:
4
4
  ${lines.join(`
5
5
  `)}`}async function waitForHealthy(root,spawned){let deadline=Date.now()+HEALTHY_TIMEOUT_MS,died=!1;if(spawned)spawned.exited.then(()=>died=!0);while(Date.now()<deadline){let rec=await readLock(root);if(rec&&await isLive(rec))return rec;if(died)throw Error(startupFailure(root,spawned?.logStart??0));await new Promise((r)=>setTimeout(r,150))}throw Error(`velloo: canvas daemon for ${root} didn't come up \u2014 see ${logPath(root)}`)}async function ensureDaemon(folder,opts={}){let root=daemonRoot(folder);assertFolderFormatCurrent(root);let host=opts.host??"127.0.0.1";assertLoopbackHost(host),mkdirSync(cacheDir(root),{recursive:!0});let deadline=Date.now()+HEALTHY_TIMEOUT_MS+5000;while(Date.now()<deadline){let existing=await readLock(root);if(existing&&await isLive(existing)){if(daemonMatchesRuntime(existing))return existing;await stopDaemon(root)}if(claimMutex(root))try{let again=await readLock(root);if(again&&await isLive(again)){if(daemonMatchesRuntime(again))return again;await stopDaemon(root)}let spawned=spawnDetached(root,opts.preferredPort,host);return opts.onSpawn?.(),await waitForHealthy(root,spawned)}finally{releaseMutex(root)}await new Promise((r)=>setTimeout(r,200))}throw Error(`velloo: timed out ensuring a canvas daemon for ${root}`)}async function stopDaemon(root){let rec=await readLock(root);if(!rec)return!1;try{process.kill(rec.pid,"SIGTERM")}catch{}for(let i=0;i<30;i++){if(!await isLive(rec))break;await new Promise((r)=>setTimeout(r,100))}return removeLock(root),await registryRemove(root),!0}