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,5 +1,5 @@
1
1
  // @bun
2
- import{require_react_development}from"./chunk-3e8vez4d.js";import{__toESM,__commonJS}from"./chunk-2smsg2ct.js";var require_react_jsx_runtime_development=__commonJS(function(exports){var React=__toESM(require_react_development());(function(){function getComponentNameFromType(type){if(type==null)return null;if(typeof type==="function")return type.$$typeof===REACT_CLIENT_REFERENCE?null:type.displayName||type.name||null;if(typeof type==="string")return type;switch(type){case REACT_FRAGMENT_TYPE:return"Fragment";case REACT_PROFILER_TYPE:return"Profiler";case REACT_STRICT_MODE_TYPE:return"StrictMode";case REACT_SUSPENSE_TYPE:return"Suspense";case REACT_SUSPENSE_LIST_TYPE:return"SuspenseList";case REACT_ACTIVITY_TYPE:return"Activity"}if(typeof type==="object")switch(typeof type.tag==="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),type.$$typeof){case REACT_PORTAL_TYPE:return"Portal";case REACT_CONTEXT_TYPE:return type.displayName||"Context";case REACT_CONSUMER_TYPE:return(type._context.displayName||"Context")+".Consumer";case REACT_FORWARD_REF_TYPE:var innerType=type.render;return type=type.displayName,type||(type=innerType.displayName||innerType.name||"",type=type!==""?"ForwardRef("+type+")":"ForwardRef"),type;case REACT_MEMO_TYPE:return innerType=type.displayName||null,innerType!==null?innerType:getComponentNameFromType(type.type)||"Memo";case REACT_LAZY_TYPE:innerType=type._payload,type=type._init;try{return getComponentNameFromType(type(innerType))}catch(x){}}return null}function testStringCoercion(value){return""+value}function checkKeyStringCoercion(value){try{testStringCoercion(value);var JSCompiler_inline_result=!1}catch(e){JSCompiler_inline_result=!0}if(JSCompiler_inline_result){JSCompiler_inline_result=console;var JSCompiler_temp_const=JSCompiler_inline_result.error,JSCompiler_inline_result$jscomp$0=typeof Symbol==="function"&&Symbol.toStringTag&&value[Symbol.toStringTag]||value.constructor.name||"Object";return JSCompiler_temp_const.call(JSCompiler_inline_result,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",JSCompiler_inline_result$jscomp$0),testStringCoercion(value)}}function getTaskName(type){if(type===REACT_FRAGMENT_TYPE)return"<>";if(typeof type==="object"&&type!==null&&type.$$typeof===REACT_LAZY_TYPE)return"<...>";try{var name=getComponentNameFromType(type);return name?"<"+name+">":"<...>"}catch(x){return"<...>"}}function getOwner(){var dispatcher=ReactSharedInternals.A;return dispatcher===null?null:dispatcher.getOwner()}function UnknownOwner(){return Error("react-stack-top-frame")}function hasValidKey(config){if(hasOwnProperty.call(config,"key")){var getter=Object.getOwnPropertyDescriptor(config,"key").get;if(getter&&getter.isReactWarning)return!1}return config.key!==void 0}function defineKeyPropWarningGetter(props,displayName){function warnAboutAccessingKey(){specialPropKeyWarningShown||(specialPropKeyWarningShown=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",displayName))}warnAboutAccessingKey.isReactWarning=!0,Object.defineProperty(props,"key",{get:warnAboutAccessingKey,configurable:!0})}function elementRefGetterWithDeprecationWarning(){var componentName=getComponentNameFromType(this.type);return didWarnAboutElementRef[componentName]||(didWarnAboutElementRef[componentName]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),componentName=this.props.ref,componentName!==void 0?componentName:null}function ReactElement(type,key,props,owner,debugStack,debugTask){var refProp=props.ref;return type={$$typeof:REACT_ELEMENT_TYPE,type,key,props,_owner:owner},(refProp!==void 0?refProp:null)!==null?Object.defineProperty(type,"ref",{enumerable:!1,get:elementRefGetterWithDeprecationWarning}):Object.defineProperty(type,"ref",{enumerable:!1,value:null}),type._store={},Object.defineProperty(type._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(type,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(type,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:debugStack}),Object.defineProperty(type,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:debugTask}),Object.freeze&&(Object.freeze(type.props),Object.freeze(type)),type}function jsxDEVImpl(type,config,maybeKey,isStaticChildren,debugStack,debugTask){var children=config.children;if(children!==void 0)if(isStaticChildren)if(isArrayImpl(children)){for(isStaticChildren=0;isStaticChildren<children.length;isStaticChildren++)validateChildKeys(children[isStaticChildren]);Object.freeze&&Object.freeze(children)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else validateChildKeys(children);if(hasOwnProperty.call(config,"key")){children=getComponentNameFromType(type);var keys=Object.keys(config).filter(function(k){return k!=="key"});isStaticChildren=0<keys.length?"{key: someKey, "+keys.join(": ..., ")+": ...}":"{key: someKey}",didWarnAboutKeySpread[children+isStaticChildren]||(keys=0<keys.length?"{"+keys.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
2
+ import{require_react_development}from"./chunk-c4fym47a.js";import{__toESM,__commonJS}from"./chunk-2smsg2ct.js";var require_react_jsx_runtime_development=__commonJS(function(exports){var React=__toESM(require_react_development());(function(){function getComponentNameFromType(type){if(type==null)return null;if(typeof type==="function")return type.$$typeof===REACT_CLIENT_REFERENCE?null:type.displayName||type.name||null;if(typeof type==="string")return type;switch(type){case REACT_FRAGMENT_TYPE:return"Fragment";case REACT_PROFILER_TYPE:return"Profiler";case REACT_STRICT_MODE_TYPE:return"StrictMode";case REACT_SUSPENSE_TYPE:return"Suspense";case REACT_SUSPENSE_LIST_TYPE:return"SuspenseList";case REACT_ACTIVITY_TYPE:return"Activity"}if(typeof type==="object")switch(typeof type.tag==="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),type.$$typeof){case REACT_PORTAL_TYPE:return"Portal";case REACT_CONTEXT_TYPE:return type.displayName||"Context";case REACT_CONSUMER_TYPE:return(type._context.displayName||"Context")+".Consumer";case REACT_FORWARD_REF_TYPE:var innerType=type.render;return type=type.displayName,type||(type=innerType.displayName||innerType.name||"",type=type!==""?"ForwardRef("+type+")":"ForwardRef"),type;case REACT_MEMO_TYPE:return innerType=type.displayName||null,innerType!==null?innerType:getComponentNameFromType(type.type)||"Memo";case REACT_LAZY_TYPE:innerType=type._payload,type=type._init;try{return getComponentNameFromType(type(innerType))}catch(x){}}return null}function testStringCoercion(value){return""+value}function checkKeyStringCoercion(value){try{testStringCoercion(value);var JSCompiler_inline_result=!1}catch(e){JSCompiler_inline_result=!0}if(JSCompiler_inline_result){JSCompiler_inline_result=console;var JSCompiler_temp_const=JSCompiler_inline_result.error,JSCompiler_inline_result$jscomp$0=typeof Symbol==="function"&&Symbol.toStringTag&&value[Symbol.toStringTag]||value.constructor.name||"Object";return JSCompiler_temp_const.call(JSCompiler_inline_result,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",JSCompiler_inline_result$jscomp$0),testStringCoercion(value)}}function getTaskName(type){if(type===REACT_FRAGMENT_TYPE)return"<>";if(typeof type==="object"&&type!==null&&type.$$typeof===REACT_LAZY_TYPE)return"<...>";try{var name=getComponentNameFromType(type);return name?"<"+name+">":"<...>"}catch(x){return"<...>"}}function getOwner(){var dispatcher=ReactSharedInternals.A;return dispatcher===null?null:dispatcher.getOwner()}function UnknownOwner(){return Error("react-stack-top-frame")}function hasValidKey(config){if(hasOwnProperty.call(config,"key")){var getter=Object.getOwnPropertyDescriptor(config,"key").get;if(getter&&getter.isReactWarning)return!1}return config.key!==void 0}function defineKeyPropWarningGetter(props,displayName){function warnAboutAccessingKey(){specialPropKeyWarningShown||(specialPropKeyWarningShown=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",displayName))}warnAboutAccessingKey.isReactWarning=!0,Object.defineProperty(props,"key",{get:warnAboutAccessingKey,configurable:!0})}function elementRefGetterWithDeprecationWarning(){var componentName=getComponentNameFromType(this.type);return didWarnAboutElementRef[componentName]||(didWarnAboutElementRef[componentName]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),componentName=this.props.ref,componentName!==void 0?componentName:null}function ReactElement(type,key,props,owner,debugStack,debugTask){var refProp=props.ref;return type={$$typeof:REACT_ELEMENT_TYPE,type,key,props,_owner:owner},(refProp!==void 0?refProp:null)!==null?Object.defineProperty(type,"ref",{enumerable:!1,get:elementRefGetterWithDeprecationWarning}):Object.defineProperty(type,"ref",{enumerable:!1,value:null}),type._store={},Object.defineProperty(type._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(type,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(type,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:debugStack}),Object.defineProperty(type,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:debugTask}),Object.freeze&&(Object.freeze(type.props),Object.freeze(type)),type}function jsxDEVImpl(type,config,maybeKey,isStaticChildren,debugStack,debugTask){var children=config.children;if(children!==void 0)if(isStaticChildren)if(isArrayImpl(children)){for(isStaticChildren=0;isStaticChildren<children.length;isStaticChildren++)validateChildKeys(children[isStaticChildren]);Object.freeze&&Object.freeze(children)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else validateChildKeys(children);if(hasOwnProperty.call(config,"key")){children=getComponentNameFromType(type);var keys=Object.keys(config).filter(function(k){return k!=="key"});isStaticChildren=0<keys.length?"{key: someKey, "+keys.join(": ..., ")+": ...}":"{key: someKey}",didWarnAboutKeySpread[children+isStaticChildren]||(keys=0<keys.length?"{"+keys.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
3
3
  let props = %s;
4
4
  <%s {...props} />
5
5
  React keys must be passed directly to JSX without using spread:
@@ -1,3 +1,3 @@
1
1
  // @bun
2
- import"./chunk-40xgcth8.js";import{topUpTokens}from"./chunk-tdsk5wxa.js";import"./chunk-t448rrfr.js";import"./chunk-3e8vez4d.js";import{normalizeCloudUrl,loadCredential,saveCredential}from"./chunk-80r93t2e.js";import{fail}from"./chunk-s23gtejf.js";import{verifyCredential,performDeviceLogin}from"./chunk-bwnvcncx.js";import{defaultCloudUrl}from"./chunk-pp86v6m6.js";import{defineCommand}from"./chunk-2smsg2ct.js";import{createInterface}from"readline/promises";async function waitForEnter(message){if(!process.stdin.isTTY)return;let rl=createInterface({input:process.stdin,output:process.stdout});try{await rl.question(message)}finally{rl.close()}}var login_default=defineCommand({meta:{name:"login",description:"Log in to velloo-cloud (opens the browser, saves a CLI token)"},args:{url:{type:"string",description:"velloo-cloud base URL (default: $VELLOO_CLOUD_URL or the built-in default)"},force:{type:"boolean",description:"Re-authenticate even if already logged in",default:!1}},async run({args}){let cloudUrl=args.url?normalizeCloudUrl(args.url):defaultCloudUrl();if(!args.force){let existing=await loadCredential(cloudUrl),email=existing&&await verifyCredential(cloudUrl,existing.token);if(email){console.log(`velloo login: already logged in to ${cloudUrl} as ${email}.`),console.log(" Use `velloo login --force` to switch accounts, or `velloo logout` to sign out.");return}}let result;try{result=await performDeviceLogin(cloudUrl,async({verificationUrl,userCode})=>{console.log(`
2
+ import"./chunk-nte0t7v3.js";import{topUpTokens}from"./chunk-88eqqdk1.js";import"./chunk-n9t36h0q.js";import"./chunk-c4fym47a.js";import{normalizeCloudUrl,loadCredential,saveCredential}from"./chunk-hfzg98c8.js";import{fail}from"./chunk-s23gtejf.js";import{verifyCredential,performDeviceLogin}from"./chunk-6zz9kfbd.js";import{defaultCloudUrl}from"./chunk-as08hzp3.js";import{defineCommand}from"./chunk-2smsg2ct.js";import{createInterface}from"readline/promises";async function waitForEnter(message){if(!process.stdin.isTTY)return;let rl=createInterface({input:process.stdin,output:process.stdout});try{await rl.question(message)}finally{rl.close()}}var login_default=defineCommand({meta:{name:"login",description:"Log in to velloo-cloud (opens the browser, saves a CLI token)"},args:{url:{type:"string",description:"velloo-cloud base URL (default: $VELLOO_CLOUD_URL or the built-in default)"},force:{type:"boolean",description:"Re-authenticate even if already logged in",default:!1}},async run({args}){let cloudUrl=args.url?normalizeCloudUrl(args.url):defaultCloudUrl();if(!args.force){let existing=await loadCredential(cloudUrl),email=existing&&await verifyCredential(cloudUrl,existing.token);if(email){console.log(`velloo login: already logged in to ${cloudUrl} as ${email}.`),console.log(" Use `velloo login --force` to switch accounts, or `velloo logout` to sign out.");return}}let result;try{result=await performDeviceLogin(cloudUrl,async({verificationUrl,userCode})=>{console.log(`
3
3
  velloo login will open your browser to approve this device (code ${userCode}).`),await waitForEnter("Press Enter to open the browser\u2026 "),console.log(`Opening ${verificationUrl}`),console.log(`If the browser doesn't open, visit that URL and enter: ${userCode}`)})}catch(err){fail("login",err instanceof Error?err.message:String(err))}let path=await saveCredential(cloudUrl,result);console.log(`velloo login: logged in to ${cloudUrl} as ${result.email}`),console.log(` credentials saved to ${path}`);try{await topUpTokens({url:cloudUrl,token:result.token},10)}catch{}}});export{login_default as default};
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import"./chunk-80fjfyha.js";import{string,number,boolean,unknown,array,object}from"./chunk-40xgcth8.js";import"./chunk-tdsk5wxa.js";import"./chunk-t448rrfr.js";import"./chunk-3e8vez4d.js";import{fail}from"./chunk-s23gtejf.js";import{DESIGN_ARG_DESCRIPTION,resolveDesign}from"./chunk-vsv8z729.js";import{openUrl}from"./chunk-hggap8fq.js";import{defineCommand}from"./chunk-2smsg2ct.js";import{writeFileSync}from"fs";import{basename,join as join3,resolve as resolve2}from"path";import{readFileSync}from"fs";import{join,resolve,sep}from"path";var AssetRefSchema=object({file:string(),mimeType:string(),bytes:number()}),TapeRecordSchema=object({seq:number().optional(),ts:string().optional(),tool:string().optional(),durationMs:number().optional(),ok:boolean().optional(),params:unknown().optional(),text:string().optional(),images:array(AssetRefSchema).optional(),isError:boolean().optional(),error:object({name:string().optional(),message:string().optional(),stack:string().optional()}).optional(),sessionId:string().optional()}),TapeMetaSchema=object({tapeId:string().optional(),startedAt:string().optional(),folder:string().optional(),pid:number().optional()}),PendingCallSchema=object({seq:number().optional(),ts:string().optional(),tool:string().optional(),params:unknown().optional(),sessionId:string().optional()});function loadTape(dir){let meta={};try{let parsed=TapeMetaSchema.safeParse(JSON.parse(readFileSync(join(dir,"meta.json"),"utf8")));if(parsed.success)meta=parsed.data}catch{}let records=[],raw="";try{raw=readFileSync(join(dir,"tape.jsonl"),"utf8")}catch{}for(let line of raw.split(`
2
+ import"./chunk-80fjfyha.js";import{string,number,boolean,unknown,array,object}from"./chunk-nte0t7v3.js";import"./chunk-88eqqdk1.js";import"./chunk-n9t36h0q.js";import"./chunk-c4fym47a.js";import{fail}from"./chunk-s23gtejf.js";import{DESIGN_ARG_DESCRIPTION,resolveDesign}from"./chunk-wafb2xm9.js";import{openUrl}from"./chunk-hggap8fq.js";import{defineCommand}from"./chunk-2smsg2ct.js";import{writeFileSync}from"fs";import{basename,join as join3,resolve as resolve2}from"path";import{readFileSync}from"fs";import{join,resolve,sep}from"path";var AssetRefSchema=object({file:string(),mimeType:string(),bytes:number()}),TapeRecordSchema=object({seq:number().optional(),ts:string().optional(),tool:string().optional(),durationMs:number().optional(),ok:boolean().optional(),params:unknown().optional(),text:string().optional(),images:array(AssetRefSchema).optional(),isError:boolean().optional(),error:object({name:string().optional(),message:string().optional(),stack:string().optional()}).optional(),sessionId:string().optional()}),TapeMetaSchema=object({tapeId:string().optional(),startedAt:string().optional(),folder:string().optional(),pid:number().optional()}),PendingCallSchema=object({seq:number().optional(),ts:string().optional(),tool:string().optional(),params:unknown().optional(),sessionId:string().optional()});function loadTape(dir){let meta={};try{let parsed=TapeMetaSchema.safeParse(JSON.parse(readFileSync(join(dir,"meta.json"),"utf8")));if(parsed.success)meta=parsed.data}catch{}let records=[],raw="";try{raw=readFileSync(join(dir,"tape.jsonl"),"utf8")}catch{}for(let line of raw.split(`
3
3
  `)){let t=line.trim();if(!t)continue;try{let parsed=TapeRecordSchema.safeParse(JSON.parse(t));if(parsed.success)records.push(parsed.data)}catch{}}let pending=[];try{let raw=JSON.parse(readFileSync(join(dir,"pending.json"),"utf8"));if(Array.isArray(raw))pending=raw.flatMap((entry)=>{let parsed=PendingCallSchema.safeParse(entry);return parsed.success?[parsed.data]:[]})}catch{}let done=new Set(records.map((r)=>r.seq));return pending=pending.filter((p)=>!done.has(p.seq)),{dir,meta,records,pending}}var ESC={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function esc(s){return s.replace(/[&<>"']/g,(c)=>ESC[c]??c)}function isBad(r){return r.ok===!1||r.isError===!0||Boolean(r.error)}function prettyJsonText(text){try{return JSON.stringify(JSON.parse(text),null,2)}catch{return text}}function fmtDuration(ms){if(ms===void 0)return"";return ms>=1000?`${(ms/1000).toFixed(2)}s`:`${ms}ms`}function fmtBytes(n){if(n>=1048576)return`${(n/1048576).toFixed(1)}MB`;if(n>=1024)return`${(n/1024).toFixed(0)}KB`;return`${n}B`}function timeOnly(iso){if(!iso)return"";let m=/T(\d{2}:\d{2}:\d{2})/.exec(iso);return m?m[1]:iso}function tapeStats(tape){let totalMs=tape.records.reduce((s,r)=>s+(r.durationMs??0),0);return{calls:tape.records.length,errors:tape.records.filter(isBad).length,totalLabel:fmtDuration(totalMs)}}function safeMimeType(mime){return/^[a-z0-9.+-]+\/[a-z0-9.+-]+$/i.test(mime)?mime:"application/octet-stream"}function inlineImage(dir,asset){let dataUri="";try{let abs=resolve(dir,asset.file);if(abs!==resolve(dir)&&!abs.startsWith(resolve(dir)+sep))return`<div class="missing">out-of-tree asset: ${esc(asset.file)}</div>`;let buf=readFileSync(abs);dataUri=`data:${safeMimeType(asset.mimeType)};base64,${buf.toString("base64")}`}catch{return`<div class="missing">missing asset: ${esc(asset.file)}</div>`}return`<img class="shot" loading="lazy" src="${dataUri}" alt="${esc(asset.file)}"/>`}function renderResult(dir,rec){if(rec.error){let head=esc([rec.error.name,rec.error.message].filter(Boolean).join(": ")||"error"),stack=rec.error.stack?`<pre class="stack">${esc(rec.error.stack)}</pre>`:"";return`<div class="err-box"><div class="err-head">${head}</div>${stack}</div>`}let parts=[];if(rec.text)parts.push(`<pre class="json">${esc(prettyJsonText(rec.text))}</pre>`);if(rec.images?.length){let imgs=rec.images.map((a)=>`<figure>${inlineImage(dir,a)}<figcaption>${esc(a.file.replace(/^assets\//,""))} \xB7 ${fmtBytes(a.bytes)}</figcaption></figure>`).join("");parts.push(`<div class="shots">${imgs}</div>`)}if(rec.isError)parts.unshift('<div class="flag">isError: true</div>');return parts.join("")||'<div class="muted">no output</div>'}function renderRow(dir,rec){let bad=isBad(rec),tool=esc(rec.tool??"?"),seq=rec.seq??"",params=esc(JSON.stringify(rec.params??null,null,2)),search=esc(`${rec.tool??""} ${rec.text??""} ${JSON.stringify(rec.params??"")}`.toLowerCase().slice(0,4000)),nShots=rec.images?.length?` \xB7 ${rec.images.length}\uD83D\uDCF7`:"";return`<details class="call${bad?" bad":""}" data-seq="${rec.seq??""}" data-error="${bad?1:0}" data-search="${search}">
4
4
  <summary>
5
5
  <span class="dot"></span>
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{string,object,record,literal}from"./chunk-40xgcth8.js";import{chmod,mkdir,readFile,writeFile}from"fs/promises";import{homedir}from"os";import{dirname,join}from"path";var CloudCredentialSchema=object({token:string().min(1),email:string().min(1)}),CredentialsFileSchema=object({version:literal(1),clouds:record(string(),CloudCredentialSchema)}),credentialsPath=()=>process.env.VELLOO_CREDENTIALS_PATH??join(homedir(),".velloo","credentials.json"),normalizeCloudUrl=(url)=>url.replace(/\/+$/,"");async function readAll(){try{let parsed=CredentialsFileSchema.safeParse(JSON.parse(await readFile(credentialsPath(),"utf8")));if(parsed.success)return parsed.data}catch{}return{version:1,clouds:{}}}async function loadCredential(cloudUrl){return(await readAll()).clouds[normalizeCloudUrl(cloudUrl)]??null}async function saveCredential(cloudUrl,cred){let all=await readAll();return all.clouds[normalizeCloudUrl(cloudUrl)]=cred,writeAll(all)}async function deleteCredential(cloudUrl){let all=await readAll(),key=normalizeCloudUrl(cloudUrl);if(!(key in all.clouds))return!1;return delete all.clouds[key],await writeAll(all),!0}async function clearCredentials(){let all=await readAll(),count=Object.keys(all.clouds).length;if(count===0)return 0;return await writeAll({version:1,clouds:{}}),count}async function writeAll(all){let path=credentialsPath();return await mkdir(dirname(path),{recursive:!0,mode:448}),await writeFile(path,`${JSON.stringify(all,null,2)}
2
+ import{string,object,record,literal}from"./chunk-nte0t7v3.js";import{chmod,mkdir,readFile,writeFile}from"fs/promises";import{homedir}from"os";import{dirname,join}from"path";var CloudCredentialSchema=object({token:string().min(1),email:string().min(1)}),CredentialsFileSchema=object({version:literal(1),clouds:record(string(),CloudCredentialSchema)}),credentialsPath=()=>process.env.VELLOO_CREDENTIALS_PATH??join(homedir(),".velloo","credentials.json"),normalizeCloudUrl=(url)=>url.replace(/\/+$/,"");async function readAll(){try{let parsed=CredentialsFileSchema.safeParse(JSON.parse(await readFile(credentialsPath(),"utf8")));if(parsed.success)return parsed.data}catch{}return{version:1,clouds:{}}}async function loadCredential(cloudUrl){return(await readAll()).clouds[normalizeCloudUrl(cloudUrl)]??null}async function saveCredential(cloudUrl,cred){let all=await readAll();return all.clouds[normalizeCloudUrl(cloudUrl)]=cred,writeAll(all)}async function deleteCredential(cloudUrl){let all=await readAll(),key=normalizeCloudUrl(cloudUrl);if(!(key in all.clouds))return!1;return delete all.clouds[key],await writeAll(all),!0}async function clearCredentials(){let all=await readAll(),count=Object.keys(all.clouds).length;if(count===0)return 0;return await writeAll({version:1,clouds:{}}),count}async function writeAll(all){let path=credentialsPath();return await mkdir(dirname(path),{recursive:!0,mode:448}),await writeFile(path,`${JSON.stringify(all,null,2)}
3
3
  `,{mode:384}),await chmod(path,384),path}
4
4
  export{normalizeCloudUrl,loadCredential,saveCredential,deleteCredential,clearCredentials};
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{require_react_development}from"./chunk-3e8vez4d.js";import{__toESM,__commonJS,__require}from"./chunk-2smsg2ct.js";var require_emotion_sheet_development_cjs=__commonJS(function(exports){Object.defineProperty(exports,"__esModule",{value:!0});var isDevelopment=!0;function sheetForTag(tag){if(tag.sheet)return tag.sheet;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].ownerNode===tag)return document.styleSheets[i];return}function createStyleElement(options){var tag=document.createElement("style");if(tag.setAttribute("data-emotion",options.key),options.nonce!==void 0)tag.setAttribute("nonce",options.nonce);return tag.appendChild(document.createTextNode("")),tag.setAttribute("data-s",""),tag}var StyleSheet=function(){function StyleSheet(options){var _this=this;this._insertTag=function(tag){var before;if(_this.tags.length===0)if(_this.insertionPoint)before=_this.insertionPoint.nextSibling;else if(_this.prepend)before=_this.container.firstChild;else before=_this.before;else before=_this.tags[_this.tags.length-1].nextSibling;_this.container.insertBefore(tag,before),_this.tags.push(tag)},this.isSpeedy=options.speedy===void 0?!isDevelopment:options.speedy,this.tags=[],this.ctr=0,this.nonce=options.nonce,this.key=options.key,this.container=options.container,this.prepend=options.prepend,this.insertionPoint=options.insertionPoint,this.before=null}var _proto=StyleSheet.prototype;return _proto.hydrate=function(nodes){nodes.forEach(this._insertTag)},_proto.insert=function(rule){if(this.ctr%(this.isSpeedy?65000:1)===0)this._insertTag(createStyleElement(this));var tag=this.tags[this.tags.length-1];{var isImportRule=rule.charCodeAt(0)===64&&rule.charCodeAt(1)===105;if(isImportRule&&this._alreadyInsertedOrderInsensitiveRule)console.error(`You're attempting to insert the following rule:
2
+ import{require_react_development}from"./chunk-c4fym47a.js";import{__toESM,__commonJS,__require}from"./chunk-2smsg2ct.js";var require_emotion_sheet_development_cjs=__commonJS(function(exports){Object.defineProperty(exports,"__esModule",{value:!0});var isDevelopment=!0;function sheetForTag(tag){if(tag.sheet)return tag.sheet;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].ownerNode===tag)return document.styleSheets[i];return}function createStyleElement(options){var tag=document.createElement("style");if(tag.setAttribute("data-emotion",options.key),options.nonce!==void 0)tag.setAttribute("nonce",options.nonce);return tag.appendChild(document.createTextNode("")),tag.setAttribute("data-s",""),tag}var StyleSheet=function(){function StyleSheet(options){var _this=this;this._insertTag=function(tag){var before;if(_this.tags.length===0)if(_this.insertionPoint)before=_this.insertionPoint.nextSibling;else if(_this.prepend)before=_this.container.firstChild;else before=_this.before;else before=_this.tags[_this.tags.length-1].nextSibling;_this.container.insertBefore(tag,before),_this.tags.push(tag)},this.isSpeedy=options.speedy===void 0?!isDevelopment:options.speedy,this.tags=[],this.ctr=0,this.nonce=options.nonce,this.key=options.key,this.container=options.container,this.prepend=options.prepend,this.insertionPoint=options.insertionPoint,this.before=null}var _proto=StyleSheet.prototype;return _proto.hydrate=function(nodes){nodes.forEach(this._insertTag)},_proto.insert=function(rule){if(this.ctr%(this.isSpeedy?65000:1)===0)this._insertTag(createStyleElement(this));var tag=this.tags[this.tags.length-1];{var isImportRule=rule.charCodeAt(0)===64&&rule.charCodeAt(1)===105;if(isImportRule&&this._alreadyInsertedOrderInsensitiveRule)console.error(`You're attempting to insert the following rule:
3
3
  `+rule+"\n\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.");this._alreadyInsertedOrderInsensitiveRule=this._alreadyInsertedOrderInsensitiveRule||!isImportRule}if(this.isSpeedy){var sheet=sheetForTag(tag);try{sheet.insertRule(rule,sheet.cssRules.length)}catch(e){if(!/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear|-ms-expand|-ms-reveal){/.test(rule))console.error('There was a problem inserting the following rule: "'+rule+'"',e)}}else tag.appendChild(document.createTextNode(rule));this.ctr++},_proto.flush=function(){this.tags.forEach(function(tag){var _tag$parentNode;return(_tag$parentNode=tag.parentNode)==null?void 0:_tag$parentNode.removeChild(tag)}),this.tags=[],this.ctr=0,this._alreadyInsertedOrderInsensitiveRule=!1},StyleSheet}();exports.StyleSheet=StyleSheet});var require_stylis=__commonJS(function(exports,module){(function(e,r){typeof exports==="object"&&typeof module<"u"?r(exports):typeof define==="function"&&define.amd?define(["exports"],r):(e=e||self,r(e.stylis={}))})(exports,function(e){var r="-ms-",a="-moz-",c="-webkit-",n="comm",t="rule",s="decl",i="@page",u="@media",o="@import",f="@charset",l="@viewport",p="@supports",h="@document",v="@namespace",d="@keyframes",b="@font-face",w="@counter-style",m="@font-feature-values",g="@layer",k=Math.abs,$=String.fromCharCode,x=Object.assign;function E(e,r){return M(e,0)^45?(((r<<2^M(e,0))<<2^M(e,1))<<2^M(e,2))<<2^M(e,3):0}function y(e){return e.trim()}function T(e,r){return(e=r.exec(e))?e[0]:e}function A(e,r,a){return e.replace(r,a)}function O(e,r){return e.indexOf(r)}function M(e,r){return e.charCodeAt(r)|0}function C(e,r,a){return e.slice(r,a)}function R(e){return e.length}function S(e){return e.length}function z(e,r){return r.push(e),e}function N(e,r){return e.map(r).join("")}e.line=1,e.column=1,e.length=0,e.position=0,e.character=0,e.characters="";function P(r,a,c,n,t,s,i){return{value:r,root:a,parent:c,type:n,props:t,children:s,line:e.line,column:e.column,length:i,return:""}}function j(e,r){return x(P("",null,null,"",null,null,0),e,{length:-e.length},r)}function U(){return e.character}function _(){if(e.character=e.position>0?M(e.characters,--e.position):0,e.column--,e.character===10)e.column=1,e.line--;return e.character}function F(){if(e.character=e.position<e.length?M(e.characters,e.position++):0,e.column++,e.character===10)e.column=1,e.line++;return e.character}function I(){return M(e.characters,e.position)}function L(){return e.position}function D(r,a){return C(e.characters,r,a)}function Y(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function K(r){return e.line=e.column=1,e.length=R(e.characters=r),e.position=0,[]}function V(r){return e.characters="",r}function W(r){return y(D(e.position-1,q(r===91?r+2:r===40?r+1:r)))}function B(e){return V(H(K(e)))}function G(r){while(e.character=I())if(e.character<33)F();else break;return Y(r)>2||Y(e.character)>3?"":" "}function H(r){while(F())switch(Y(e.character)){case 0:z(Q(e.position-1),r);break;case 2:z(W(e.character),r);break;default:z($(e.character),r)}return r}function Z(r,a){while(--a&&F())if(e.character<48||e.character>102||e.character>57&&e.character<65||e.character>70&&e.character<97)break;return D(r,L()+(a<6&&I()==32&&F()==32))}function q(r){while(F())switch(e.character){case r:return e.position;case 34:case 39:if(r!==34&&r!==39)q(e.character);break;case 40:if(r===41)q(r);break;case 92:F();break}return e.position}function J(r,a){while(F())if(r+e.character===57)break;else if(r+e.character===84&&I()===47)break;return"/*"+D(a,e.position-1)+"*"+$(r===47?r:F())}function Q(r){while(!Y(I()))F();return D(r,e.position)}function X(e){return V(ee("",null,null,null,[""],e=K(e),0,[0],e))}function ee(e,r,a,c,n,t,s,i,u){var o=0,f=0,l=s,p=0,h=0,v=0,d=1,b=1,w=1,m=0,g="",k=n,x=t,E=c,y=g;while(b)switch(v=m,m=F()){case 40:if(v!=108&&M(y,l-1)==58){if(O(y+=A(W(m),"&","&\f"),"&\f")!=-1)w=-1;break}case 34:case 39:case 91:y+=W(m);break;case 9:case 10:case 13:case 32:y+=G(v);break;case 92:y+=Z(L()-1,7);continue;case 47:switch(I()){case 42:case 47:z(ae(J(F(),L()),r,a),u);break;default:y+="/"}break;case 123*d:i[o++]=R(y)*w;case 125*d:case 59:case 0:switch(m){case 0:case 125:b=0;case 59+f:if(w==-1)y=A(y,/\f/g,"");if(h>0&&R(y)-l)z(h>32?ce(y+";",c,a,l-1):ce(A(y," ","")+";",c,a,l-2),u);break;case 59:y+=";";default:if(z(E=re(y,r,a,o,f,n,i,g,k=[],x=[],l),t),m===123)if(f===0)ee(y,r,E,E,k,t,l,i,x);else switch(p===99&&M(y,3)===110?100:p){case 100:case 108:case 109:case 115:ee(e,E,E,c&&z(re(e,E,E,0,0,n,i,g,n,k=[],l),x),n,x,l,i,c?k:x);break;default:ee(y,E,E,E,[""],x,0,i,x)}}o=f=h=0,d=w=1,g=y="",l=s;break;case 58:l=1+R(y),h=v;default:if(d<1){if(m==123)--d;else if(m==125&&d++==0&&_()==125)continue}switch(y+=$(m),m*d){case 38:w=f>0?1:(y+="\f",-1);break;case 44:i[o++]=(R(y)-1)*w,w=1;break;case 64:if(I()===45)y+=W(F());p=I(),f=l=R(g=y+=Q(L())),m++;break;case 45:if(v===45&&R(y)==2)d=0}}return t}function re(e,r,a,c,n,s,i,u,o,f,l){var p=n-1,h=n===0?s:[""],v=S(h);for(var d=0,b=0,w=0;d<c;++d)for(var m=0,g=C(e,p+1,p=k(b=i[d])),$=e;m<v;++m)if($=y(b>0?h[m]+" "+g:A(g,/&\f/g,h[m])))o[w++]=$;return P(e,r,a,n===0?t:u,o,f,l)}function ae(e,r,a){return P(e,r,a,n,$(U()),C(e,2,-2),0)}function ce(e,r,a,c){return P(e,r,a,s,C(e,0,c),C(e,c+1,-1),c)}function ne(e,n,t){switch(E(e,n)){case 5103:return c+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return c+e+e;case 4789:return a+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return c+e+a+e+r+e+e;case 5936:switch(M(e,n+11)){case 114:return c+e+r+A(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return c+e+r+A(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return c+e+r+A(e,/[svh]\w+-[tblr]{2}/,"lr")+e}case 6828:case 4268:case 2903:return c+e+r+e+e;case 6165:return c+e+r+"flex-"+e+e;case 5187:return c+e+A(e,/(\w+).+(:[^]+)/,c+"box-$1$2"+r+"flex-$1$2")+e;case 5443:return c+e+r+"flex-item-"+A(e,/flex-|-self/g,"")+(!T(e,/flex-|baseline/)?r+"grid-row-"+A(e,/flex-|-self/g,""):"")+e;case 4675:return c+e+r+"flex-line-pack"+A(e,/align-content|flex-|-self/g,"")+e;case 5548:return c+e+r+A(e,"shrink","negative")+e;case 5292:return c+e+r+A(e,"basis","preferred-size")+e;case 6060:return c+"box-"+A(e,"-grow","")+c+e+r+A(e,"grow","positive")+e;case 4554:return c+A(e,/([^-])(transform)/g,"$1"+c+"$2")+e;case 6187:return A(A(A(e,/(zoom-|grab)/,c+"$1"),/(image-set)/,c+"$1"),e,"")+e;case 5495:case 3959:return A(e,/(image-set\([^]*)/,c+"$1$`$1");case 4968:return A(A(e,/(.+:)(flex-)?(.*)/,c+"box-pack:$3"+r+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+c+e+e;case 4200:if(!T(e,/flex-|baseline/))return r+"grid-column-align"+C(e,n)+e;break;case 2592:case 3360:return r+A(e,"template-","")+e;case 4384:case 3616:if(t&&t.some(function(e,r){return n=r,T(e.props,/grid-\w+-end/)}))return~O(e+(t=t[n].value),"span")?e:r+A(e,"-start","")+e+r+"grid-row-span:"+(~O(t,"span")?T(t,/\d+/):+T(t,/\d+/)-+T(e,/\d+/))+";";return r+A(e,"-start","")+e;case 4896:case 4128:return t&&t.some(function(e){return T(e.props,/grid-\w+-start/)})?e:r+A(A(e,"-end","-span"),"span ","")+e;case 4095:case 3583:case 4068:case 2532:return A(e,/(.+)-inline(.+)/,c+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(R(e)-1-n>6)switch(M(e,n+1)){case 109:if(M(e,n+4)!==45)break;case 102:return A(e,/(.+:)(.+)-([^]+)/,"$1"+c+"$2-$3$1"+a+(M(e,n+3)==108?"$3":"$2-$3"))+e;case 115:return~O(e,"stretch")?ne(A(e,"stretch","fill-available"),n,t)+e:e}break;case 5152:case 5920:return A(e,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,function(a,c,n,t,s,i,u){return r+c+":"+n+u+(t?r+c+"-span:"+(s?i:+i-+n)+u:"")+e});case 4949:if(M(e,n+6)===121)return A(e,":",":"+c)+e;break;case 6444:switch(M(e,M(e,14)===45?18:11)){case 120:return A(e,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+c+(M(e,14)===45?"inline-":"")+"box$3$1"+c+"$2$3$1"+r+"$2box$3")+e;case 100:return A(e,":",":"+r)+e}break;case 5719:case 2647:case 2135:case 3927:case 2391:return A(e,"scroll-","scroll-snap-")+e}return e}function te(e,r){var a="",c=S(e);for(var n=0;n<c;n++)a+=r(e[n],n,e,r)||"";return a}function se(e,r,a,c){switch(e.type){case g:if(e.children.length)break;case o:case s:return e.return=e.return||e.value;case n:return"";case d:return e.return=e.value+"{"+te(e.children,c)+"}";case t:e.value=e.props.join(",")}return R(a=te(e.children,c))?e.return=e.value+"{"+a+"}":""}function ie(e){var r=S(e);return function(a,c,n,t){var s="";for(var i=0;i<r;i++)s+=e[i](a,c,n,t)||"";return s}}function ue(e){return function(r){if(!r.root){if(r=r.return)e(r)}}}function oe(e,n,i,u){if(e.length>-1){if(!e.return)switch(e.type){case s:e.return=ne(e.value,e.length,i);return;case d:return te([j(e,{value:A(e.value,"@","@"+c)})],u);case t:if(e.length)return N(e.props,function(n){switch(T(n,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return te([j(e,{props:[A(n,/:(read-\w+)/,":"+a+"$1")]})],u);case"::placeholder":return te([j(e,{props:[A(n,/:(plac\w+)/,":"+c+"input-$1")]}),j(e,{props:[A(n,/:(plac\w+)/,":"+a+"$1")]}),j(e,{props:[A(n,/:(plac\w+)/,r+"input-$1")]})],u)}return""})}}}function fe(e){switch(e.type){case t:e.props=e.props.map(function(r){return N(B(r),function(r,a,c){switch(M(r,0)){case 12:return C(r,1,R(r));case 0:case 40:case 43:case 62:case 126:return r;case 58:if(c[++a]==="global")c[a]="",c[++a]="\f"+C(c[a],a=1,-1);case 32:return a===1?"":r;default:switch(a){case 0:return e=r,S(c)>1?"":r;case(a=S(c)-1):case 2:return a===2?r+e+e:r+e;default:return r}}})})}}e.CHARSET=f,e.COMMENT=n,e.COUNTER_STYLE=w,e.DECLARATION=s,e.DOCUMENT=h,e.FONT_FACE=b,e.FONT_FEATURE_VALUES=m,e.IMPORT=o,e.KEYFRAMES=d,e.LAYER=g,e.MEDIA=u,e.MOZ=a,e.MS=r,e.NAMESPACE=v,e.PAGE=i,e.RULESET=t,e.SUPPORTS=p,e.VIEWPORT=l,e.WEBKIT=c,e.abs=k,e.alloc=K,e.append=z,e.assign=x,e.caret=L,e.char=U,e.charat=M,e.combine=N,e.comment=ae,e.commenter=J,e.compile=X,e.copy=j,e.dealloc=V,e.declaration=ce,e.delimit=W,e.delimiter=q,e.escaping=Z,e.from=$,e.hash=E,e.identifier=Q,e.indexof=O,e.match=T,e.middleware=ie,e.namespace=fe,e.next=F,e.node=P,e.parse=ee,e.peek=I,e.prefix=ne,e.prefixer=oe,e.prev=_,e.replace=A,e.ruleset=re,e.rulesheet=ue,e.serialize=te,e.sizeof=S,e.slice=D,e.stringify=se,e.strlen=R,e.substr=C,e.token=Y,e.tokenize=B,e.tokenizer=H,e.trim=y,e.whitespace=G,Object.defineProperty(e,"__esModule",{value:!0})})});var require_emotion_weak_memoize_cjs_dev=__commonJS(function(exports){Object.defineProperty(exports,"__esModule",{value:!0});var weakMemoize=function(func){var cache=new WeakMap;return function(arg){if(cache.has(arg))return cache.get(arg);var ret=func(arg);return cache.set(arg,ret),ret}};exports.default=weakMemoize});var require_emotion_memoize_cjs_dev=__commonJS(function(exports){Object.defineProperty(exports,"__esModule",{value:!0});function memoize(fn){var cache=Object.create(null);return function(arg){if(cache[arg]===void 0)cache[arg]=fn(arg);return cache[arg]}}exports.default=memoize});var require_emotion_cache_development_cjs=__commonJS(function(exports){Object.defineProperty(exports,"__esModule",{value:!0});var sheet=require_emotion_sheet_development_cjs(),stylis=require_stylis(),weakMemoize=require_emotion_weak_memoize_cjs_dev(),memoize=require_emotion_memoize_cjs_dev();function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var weakMemoize__default=_interopDefault(weakMemoize),memoize__default=_interopDefault(memoize),isBrowser=typeof document<"u",identifierWithPointTracking=function(begin,points,index){var previous=0,character=0;while(!0){if(previous=character,character=stylis.peek(),previous===38&&character===12)points[index]=1;if(stylis.token(character))break;stylis.next()}return stylis.slice(begin,stylis.position)},toRules=function(parsed,points){var index=-1,character=44;do switch(stylis.token(character)){case 0:if(character===38&&stylis.peek()===12)points[index]=1;parsed[index]+=identifierWithPointTracking(stylis.position-1,points,index);break;case 2:parsed[index]+=stylis.delimit(character);break;case 4:if(character===44){parsed[++index]=stylis.peek()===58?"&\f":"",points[index]=parsed[index].length;break}default:parsed[index]+=stylis.from(character)}while(character=stylis.next());return parsed},getRules=function(value,points){return stylis.dealloc(toRules(stylis.alloc(value),points))},fixedElements=new WeakMap,compat=function(element){if(element.type!=="rule"||!element.parent||element.length<1)return;var{value,parent}=element,isImplicitRule=element.column===parent.column&&element.line===parent.line;while(parent.type!=="rule")if(parent=parent.parent,!parent)return;if(element.props.length===1&&value.charCodeAt(0)!==58&&!fixedElements.get(parent))return;if(isImplicitRule)return;fixedElements.set(element,!0);var points=[],rules=getRules(value,points),parentRules=parent.props;for(var i=0,k=0;i<rules.length;i++)for(var j=0;j<parentRules.length;j++,k++)element.props[k]=points[i]?rules[i].replace(/&\f/g,parentRules[j]):parentRules[j]+" "+rules[i]},removeLabel=function(element){if(element.type==="decl"){var value=element.value;if(value.charCodeAt(0)===108&&value.charCodeAt(2)===98)element.return="",element.value=""}},ignoreFlag="emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason",isIgnoringComment=function(element){return element.type==="comm"&&element.children.indexOf(ignoreFlag)>-1},createUnsafeSelectorsAlarm=function(cache){return function(element,index,children){if(element.type!=="rule"||cache.compat)return;var unsafePseudoClasses=element.value.match(/(:first|:nth|:nth-last)-child/g);if(unsafePseudoClasses){var isNested=!!element.parent,commentContainer=isNested?element.parent.children:children;for(var i=commentContainer.length-1;i>=0;i--){var node=commentContainer[i];if(node.line<element.line)break;if(node.column<element.column){if(isIgnoringComment(node))return;break}}unsafePseudoClasses.forEach(function(unsafePseudoClass){console.error('The pseudo class "'+unsafePseudoClass+'" is potentially unsafe when doing server-side rendering. Try changing it to "'+unsafePseudoClass.split("-child")[0]+'-of-type".')})}}},isImportRule=function(element){return element.type.charCodeAt(1)===105&&element.type.charCodeAt(0)===64},isPrependedWithRegularRules=function(index,children){for(var i=index-1;i>=0;i--)if(!isImportRule(children[i]))return!0;return!1},nullifyElement=function(element){element.type="",element.value="",element.return="",element.children="",element.props=""},incorrectImportAlarm=function(element,index,children){if(!isImportRule(element))return;if(element.parent)console.error("`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles."),nullifyElement(element);else if(isPrependedWithRegularRules(index,children))console.error("`@import` rules can't be after other rules. Please put your `@import` rules before your other rules."),nullifyElement(element)};function prefix(value,length){switch(stylis.hash(value,length)){case 5103:return stylis.WEBKIT+"print-"+value+value;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return stylis.WEBKIT+value+value;case 5349:case 4246:case 4810:case 6968:case 2756:return stylis.WEBKIT+value+stylis.MOZ+value+stylis.MS+value+value;case 6828:case 4268:return stylis.WEBKIT+value+stylis.MS+value+value;case 6165:return stylis.WEBKIT+value+stylis.MS+"flex-"+value+value;case 5187:return stylis.WEBKIT+value+stylis.replace(value,/(\w+).+(:[^]+)/,stylis.WEBKIT+"box-$1$2"+stylis.MS+"flex-$1$2")+value;case 5443:return stylis.WEBKIT+value+stylis.MS+"flex-item-"+stylis.replace(value,/flex-|-self/,"")+value;case 4675:return stylis.WEBKIT+value+stylis.MS+"flex-line-pack"+stylis.replace(value,/align-content|flex-|-self/,"")+value;case 5548:return stylis.WEBKIT+value+stylis.MS+stylis.replace(value,"shrink","negative")+value;case 5292:return stylis.WEBKIT+value+stylis.MS+stylis.replace(value,"basis","preferred-size")+value;case 6060:return stylis.WEBKIT+"box-"+stylis.replace(value,"-grow","")+stylis.WEBKIT+value+stylis.MS+stylis.replace(value,"grow","positive")+value;case 4554:return stylis.WEBKIT+stylis.replace(value,/([^-])(transform)/g,"$1"+stylis.WEBKIT+"$2")+value;case 6187:return stylis.replace(stylis.replace(stylis.replace(value,/(zoom-|grab)/,stylis.WEBKIT+"$1"),/(image-set)/,stylis.WEBKIT+"$1"),value,"")+value;case 5495:case 3959:return stylis.replace(value,/(image-set\([^]*)/,stylis.WEBKIT+"$1$`$1");case 4968:return stylis.replace(stylis.replace(value,/(.+:)(flex-)?(.*)/,stylis.WEBKIT+"box-pack:$3"+stylis.MS+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+stylis.WEBKIT+value+value;case 4095:case 3583:case 4068:case 2532:return stylis.replace(value,/(.+)-inline(.+)/,stylis.WEBKIT+"$1$2")+value;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(stylis.strlen(value)-1-length>6)switch(stylis.charat(value,length+1)){case 109:if(stylis.charat(value,length+4)!==45)break;case 102:return stylis.replace(value,/(.+:)(.+)-([^]+)/,"$1"+stylis.WEBKIT+"$2-$3$1"+stylis.MOZ+(stylis.charat(value,length+3)==108?"$3":"$2-$3"))+value;case 115:return~stylis.indexof(value,"stretch")?prefix(stylis.replace(value,"stretch","fill-available"),length)+value:value}break;case 4949:if(stylis.charat(value,length+1)!==115)break;case 6444:switch(stylis.charat(value,stylis.strlen(value)-3-(~stylis.indexof(value,"!important")&&10))){case 107:return stylis.replace(value,":",":"+stylis.WEBKIT)+value;case 101:return stylis.replace(value,/(.+:)([^;!]+)(;|!.+)?/,"$1"+stylis.WEBKIT+(stylis.charat(value,14)===45?"inline-":"")+"box$3$1"+stylis.WEBKIT+"$2$3$1"+stylis.MS+"$2box$3")+value}break;case 5936:switch(stylis.charat(value,length+11)){case 114:return stylis.WEBKIT+value+stylis.MS+stylis.replace(value,/[svh]\w+-[tblr]{2}/,"tb")+value;case 108:return stylis.WEBKIT+value+stylis.MS+stylis.replace(value,/[svh]\w+-[tblr]{2}/,"tb-rl")+value;case 45:return stylis.WEBKIT+value+stylis.MS+stylis.replace(value,/[svh]\w+-[tblr]{2}/,"lr")+value}return stylis.WEBKIT+value+stylis.MS+value+value}return value}var prefixer=function(element,index,children,callback){if(element.length>-1){if(!element.return)switch(element.type){case stylis.DECLARATION:element.return=prefix(element.value,element.length);break;case stylis.KEYFRAMES:return stylis.serialize([stylis.copy(element,{value:stylis.replace(element.value,"@","@"+stylis.WEBKIT)})],callback);case stylis.RULESET:if(element.length)return stylis.combine(element.props,function(value){switch(stylis.match(value,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return stylis.serialize([stylis.copy(element,{props:[stylis.replace(value,/:(read-\w+)/,":"+stylis.MOZ+"$1")]})],callback);case"::placeholder":return stylis.serialize([stylis.copy(element,{props:[stylis.replace(value,/:(plac\w+)/,":"+stylis.WEBKIT+"input-$1")]}),stylis.copy(element,{props:[stylis.replace(value,/:(plac\w+)/,":"+stylis.MOZ+"$1")]}),stylis.copy(element,{props:[stylis.replace(value,/:(plac\w+)/,stylis.MS+"input-$1")]})],callback)}return""})}}},getServerStylisCache=isBrowser?void 0:weakMemoize__default.default(function(){return memoize__default.default(function(){return{}})}),defaultStylisPlugins=[prefixer],getSourceMap;sourceMapPattern=/\/\*#\ssourceMappingURL=data:application\/json;\S+\s+\*\//g,getSourceMap=function(styles){var matches=styles.match(sourceMapPattern);if(!matches)return;return matches[matches.length-1]};var sourceMapPattern,createCache=function(options){var key=options.key;if(!key)throw Error(`You have to configure \`key\` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.
4
4
  If multiple caches share the same key they might "fight" for each other's style elements.`);if(isBrowser&&key==="css"){var ssrStyles=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(ssrStyles,function(node){var dataEmotionAttribute=node.getAttribute("data-emotion");if(dataEmotionAttribute.indexOf(" ")===-1)return;document.head.appendChild(node),node.setAttribute("data-s","")})}var stylisPlugins=options.stylisPlugins||defaultStylisPlugins;if(/[^a-z-]/.test(key))throw Error('Emotion key must only contain lower case alphabetical characters and - but "'+key+'" was passed');var inserted={},container,nodesToHydrate=[];if(isBrowser)container=options.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+key+' "]'),function(node){var attrib=node.getAttribute("data-emotion").split(" ");for(var i=1;i<attrib.length;i++)inserted[attrib[i]]=!0;nodesToHydrate.push(node)});var _insert,omnipresentPlugins=[compat,removeLabel];if(omnipresentPlugins.push(createUnsafeSelectorsAlarm({get compat(){return cache.compat}}),incorrectImportAlarm),!getServerStylisCache){var currentSheet,finalizingPlugins=[stylis.stringify,function(element){if(!element.root){if(element.return)currentSheet.insert(element.return);else if(element.value&&element.type!==stylis.COMMENT)currentSheet.insert(element.value+"{}")}}],serializer=stylis.middleware(omnipresentPlugins.concat(stylisPlugins,finalizingPlugins)),stylis$1=function(styles){return stylis.serialize(stylis.compile(styles),serializer)};_insert=function(selector,serialized,sheet,shouldCache){if(currentSheet=sheet,getSourceMap){var sourceMap=getSourceMap(serialized.styles);if(sourceMap)currentSheet={insert:function(rule){sheet.insert(rule+sourceMap)}}}if(stylis$1(selector?selector+"{"+serialized.styles+"}":serialized.styles),shouldCache)cache.inserted[serialized.name]=!0}}else{var _finalizingPlugins=[stylis.stringify],_serializer=stylis.middleware(omnipresentPlugins.concat(stylisPlugins,_finalizingPlugins)),_stylis=function(styles){return stylis.serialize(stylis.compile(styles),_serializer)},serverStylisCache=getServerStylisCache(stylisPlugins)(key),getRules=function(selector,serialized){var name=serialized.name;if(serverStylisCache[name]===void 0)serverStylisCache[name]=_stylis(selector?selector+"{"+serialized.styles+"}":serialized.styles);return serverStylisCache[name]};_insert=function(selector,serialized,sheet,shouldCache){var name=serialized.name,rules=getRules(selector,serialized);if(cache.compat===void 0){if(shouldCache)cache.inserted[name]=!0;if(getSourceMap){var sourceMap=getSourceMap(serialized.styles);if(sourceMap)return rules+sourceMap}return rules}else if(shouldCache)cache.inserted[name]=rules;else return rules}}var cache={key,sheet:new sheet.StyleSheet({key,container,nonce:options.nonce,speedy:options.speedy,prepend:options.prepend,insertionPoint:options.insertionPoint}),nonce:options.nonce,inserted,registered:{},insert:_insert};return cache.sheet.hydrate(nodesToHydrate),cache};exports.default=createCache});var require_extends=__commonJS(function(exports,module){function _extends(){return module.exports=_extends=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var r in t)({}).hasOwnProperty.call(t,r)&&(n[r]=t[r])}return n},module.exports.__esModule=!0,module.exports.default=module.exports,_extends.apply(null,arguments)}module.exports=_extends,module.exports.__esModule=!0,module.exports.default=module.exports});var require_react_is_development=__commonJS(function(exports){(function(){var hasSymbol=typeof Symbol==="function"&&Symbol.for,REACT_ELEMENT_TYPE=hasSymbol?Symbol.for("react.element"):60103,REACT_PORTAL_TYPE=hasSymbol?Symbol.for("react.portal"):60106,REACT_FRAGMENT_TYPE=hasSymbol?Symbol.for("react.fragment"):60107,REACT_STRICT_MODE_TYPE=hasSymbol?Symbol.for("react.strict_mode"):60108,REACT_PROFILER_TYPE=hasSymbol?Symbol.for("react.profiler"):60114,REACT_PROVIDER_TYPE=hasSymbol?Symbol.for("react.provider"):60109,REACT_CONTEXT_TYPE=hasSymbol?Symbol.for("react.context"):60110,REACT_ASYNC_MODE_TYPE=hasSymbol?Symbol.for("react.async_mode"):60111,REACT_CONCURRENT_MODE_TYPE=hasSymbol?Symbol.for("react.concurrent_mode"):60111,REACT_FORWARD_REF_TYPE=hasSymbol?Symbol.for("react.forward_ref"):60112,REACT_SUSPENSE_TYPE=hasSymbol?Symbol.for("react.suspense"):60113,REACT_SUSPENSE_LIST_TYPE=hasSymbol?Symbol.for("react.suspense_list"):60120,REACT_MEMO_TYPE=hasSymbol?Symbol.for("react.memo"):60115,REACT_LAZY_TYPE=hasSymbol?Symbol.for("react.lazy"):60116,REACT_BLOCK_TYPE=hasSymbol?Symbol.for("react.block"):60121,REACT_FUNDAMENTAL_TYPE=hasSymbol?Symbol.for("react.fundamental"):60117,REACT_RESPONDER_TYPE=hasSymbol?Symbol.for("react.responder"):60118,REACT_SCOPE_TYPE=hasSymbol?Symbol.for("react.scope"):60119;function isValidElementType(type){return typeof type==="string"||typeof type==="function"||type===REACT_FRAGMENT_TYPE||type===REACT_CONCURRENT_MODE_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_PROVIDER_TYPE||type.$$typeof===REACT_CONTEXT_TYPE||type.$$typeof===REACT_FORWARD_REF_TYPE||type.$$typeof===REACT_FUNDAMENTAL_TYPE||type.$$typeof===REACT_RESPONDER_TYPE||type.$$typeof===REACT_SCOPE_TYPE||type.$$typeof===REACT_BLOCK_TYPE)}function typeOf(object){if(typeof object==="object"&&object!==null){var $$typeof=object.$$typeof;switch($$typeof){case REACT_ELEMENT_TYPE:var type=object.type;switch(type){case REACT_ASYNC_MODE_TYPE:case REACT_CONCURRENT_MODE_TYPE:case REACT_FRAGMENT_TYPE:case REACT_PROFILER_TYPE:case REACT_STRICT_MODE_TYPE:case REACT_SUSPENSE_TYPE:return type;default:var $$typeofType=type&&type.$$typeof;switch($$typeofType){case REACT_CONTEXT_TYPE:case REACT_FORWARD_REF_TYPE:case REACT_LAZY_TYPE:case REACT_MEMO_TYPE:case REACT_PROVIDER_TYPE:return $$typeofType;default:return $$typeof}}case REACT_PORTAL_TYPE:return $$typeof}}return}var AsyncMode=REACT_ASYNC_MODE_TYPE,ConcurrentMode=REACT_CONCURRENT_MODE_TYPE,ContextConsumer=REACT_CONTEXT_TYPE,ContextProvider=REACT_PROVIDER_TYPE,Element=REACT_ELEMENT_TYPE,ForwardRef=REACT_FORWARD_REF_TYPE,Fragment=REACT_FRAGMENT_TYPE,Lazy=REACT_LAZY_TYPE,Memo=REACT_MEMO_TYPE,Portal=REACT_PORTAL_TYPE,Profiler=REACT_PROFILER_TYPE,StrictMode=REACT_STRICT_MODE_TYPE,Suspense=REACT_SUSPENSE_TYPE,hasWarnedAboutDeprecatedIsAsyncMode=!1;function isAsyncMode(object){if(!hasWarnedAboutDeprecatedIsAsyncMode)hasWarnedAboutDeprecatedIsAsyncMode=!0,console.warn("The ReactIs.isAsyncMode() alias has been deprecated, and will be removed in React 17+. Update your code to use ReactIs.isConcurrentMode() instead. It has the exact same API.");return isConcurrentMode(object)||typeOf(object)===REACT_ASYNC_MODE_TYPE}function isConcurrentMode(object){return typeOf(object)===REACT_CONCURRENT_MODE_TYPE}function isContextConsumer(object){return typeOf(object)===REACT_CONTEXT_TYPE}function isContextProvider(object){return typeOf(object)===REACT_PROVIDER_TYPE}function isElement(object){return typeof object==="object"&&object!==null&&object.$$typeof===REACT_ELEMENT_TYPE}function isForwardRef(object){return typeOf(object)===REACT_FORWARD_REF_TYPE}function isFragment(object){return typeOf(object)===REACT_FRAGMENT_TYPE}function isLazy(object){return typeOf(object)===REACT_LAZY_TYPE}function isMemo(object){return typeOf(object)===REACT_MEMO_TYPE}function isPortal(object){return typeOf(object)===REACT_PORTAL_TYPE}function isProfiler(object){return typeOf(object)===REACT_PROFILER_TYPE}function isStrictMode(object){return typeOf(object)===REACT_STRICT_MODE_TYPE}function isSuspense(object){return typeOf(object)===REACT_SUSPENSE_TYPE}exports.AsyncMode=AsyncMode,exports.ConcurrentMode=ConcurrentMode,exports.ContextConsumer=ContextConsumer,exports.ContextProvider=ContextProvider,exports.Element=Element,exports.ForwardRef=ForwardRef,exports.Fragment=Fragment,exports.Lazy=Lazy,exports.Memo=Memo,exports.Portal=Portal,exports.Profiler=Profiler,exports.StrictMode=StrictMode,exports.Suspense=Suspense,exports.isAsyncMode=isAsyncMode,exports.isConcurrentMode=isConcurrentMode,exports.isContextConsumer=isContextConsumer,exports.isContextProvider=isContextProvider,exports.isElement=isElement,exports.isForwardRef=isForwardRef,exports.isFragment=isFragment,exports.isLazy=isLazy,exports.isMemo=isMemo,exports.isPortal=isPortal,exports.isProfiler=isProfiler,exports.isStrictMode=isStrictMode,exports.isSuspense=isSuspense,exports.isValidElementType=isValidElementType,exports.typeOf=typeOf})()});var require_hoist_non_react_statics_cjs=__commonJS(function(exports,module){var reactIs=__toESM(require_react_is_development()),REACT_STATICS={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},KNOWN_STATICS={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},FORWARD_REF_STATICS={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},MEMO_STATICS={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},TYPE_STATICS={};TYPE_STATICS[reactIs.ForwardRef]=FORWARD_REF_STATICS;TYPE_STATICS[reactIs.Memo]=MEMO_STATICS;function getStatics(component){if(reactIs.isMemo(component))return MEMO_STATICS;return TYPE_STATICS[component.$$typeof]||REACT_STATICS}var{defineProperty,getOwnPropertyNames,getOwnPropertySymbols,getOwnPropertyDescriptor,getPrototypeOf,prototype:objectPrototype}=Object;function hoistNonReactStatics(targetComponent,sourceComponent,blacklist){if(typeof sourceComponent!=="string"){if(objectPrototype){var inheritedComponent=getPrototypeOf(sourceComponent);if(inheritedComponent&&inheritedComponent!==objectPrototype)hoistNonReactStatics(targetComponent,inheritedComponent,blacklist)}var keys=getOwnPropertyNames(sourceComponent);if(getOwnPropertySymbols)keys=keys.concat(getOwnPropertySymbols(sourceComponent));var targetStatics=getStatics(targetComponent),sourceStatics=getStatics(sourceComponent);for(var i=0;i<keys.length;++i){var key=keys[i];if(!KNOWN_STATICS[key]&&!(blacklist&&blacklist[key])&&!(sourceStatics&&sourceStatics[key])&&!(targetStatics&&targetStatics[key])){var descriptor=getOwnPropertyDescriptor(sourceComponent,key);try{defineProperty(targetComponent,key,descriptor)}catch(e){}}}}return targetComponent}module.exports=hoistNonReactStatics});var require_emotion_react__isolated_hnrs_development_cjs=__commonJS(function(exports){Object.defineProperty(exports,"__esModule",{value:!0});var hoistNonReactStatics$1=require_hoist_non_react_statics_cjs();function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var hoistNonReactStatics__default=_interopDefault(hoistNonReactStatics$1),hoistNonReactStatics=function(targetComponent,sourceComponent){return hoistNonReactStatics__default.default(targetComponent,sourceComponent)};exports.default=hoistNonReactStatics});var require_emotion_utils_cjs=__commonJS(function(exports){Object.defineProperty(exports,"__esModule",{value:!0});var isBrowser=typeof document<"u";function getRegisteredStyles(registered,registeredStyles,classNames){var rawClassName="";return classNames.split(" ").forEach(function(className){if(registered[className]!==void 0)registeredStyles.push(registered[className]+";");else if(className)rawClassName+=className+" "}),rawClassName}var registerStyles=function(cache,serialized,isStringTag){var className=cache.key+"-"+serialized.name;if((isStringTag===!1||isBrowser===!1&&cache.compat!==void 0)&&cache.registered[className]===void 0)cache.registered[className]=serialized.styles},insertStyles=function(cache,serialized,isStringTag){registerStyles(cache,serialized,isStringTag);var className=cache.key+"-"+serialized.name;if(cache.inserted[serialized.name]===void 0){var stylesForSSR="",current=serialized;do{var maybeStyles=cache.insert(serialized===current?"."+className:"",current,cache.sheet,!0);if(!isBrowser&&maybeStyles!==void 0)stylesForSSR+=maybeStyles;current=current.next}while(current!==void 0);if(!isBrowser&&stylesForSSR.length!==0)return stylesForSSR}};exports.getRegisteredStyles=getRegisteredStyles;exports.insertStyles=insertStyles;exports.registerStyles=registerStyles});var require_emotion_hash_cjs_dev=__commonJS(function(exports){Object.defineProperty(exports,"__esModule",{value:!0});function murmur2(str){var h=0,k,i=0,len=str.length;for(;len>=4;++i,len-=4)k=str.charCodeAt(i)&255|(str.charCodeAt(++i)&255)<<8|(str.charCodeAt(++i)&255)<<16|(str.charCodeAt(++i)&255)<<24,k=(k&65535)*1540483477+((k>>>16)*59797<<16),k^=k>>>24,h=(k&65535)*1540483477+((k>>>16)*59797<<16)^(h&65535)*1540483477+((h>>>16)*59797<<16);switch(len){case 3:h^=(str.charCodeAt(i+2)&255)<<16;case 2:h^=(str.charCodeAt(i+1)&255)<<8;case 1:h^=str.charCodeAt(i)&255,h=(h&65535)*1540483477+((h>>>16)*59797<<16)}return h^=h>>>13,h=(h&65535)*1540483477+((h>>>16)*59797<<16),((h^h>>>15)>>>0).toString(36)}exports.default=murmur2});var require_emotion_unitless_cjs=__commonJS(function(exports){Object.defineProperty(exports,"__esModule",{value:!0});var unitlessKeys={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,scale:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};exports.default=unitlessKeys});var require_emotion_serialize_development_cjs=__commonJS(function(exports){Object.defineProperty(exports,"__esModule",{value:!0});var hashString=require_emotion_hash_cjs_dev(),unitless=require_emotion_unitless_cjs(),memoize=require_emotion_memoize_cjs_dev();function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var hashString__default=_interopDefault(hashString),unitless__default=_interopDefault(unitless),memoize__default=_interopDefault(memoize),isDevelopment=!0,ILLEGAL_ESCAPE_SEQUENCE_ERROR=`You have illegal escape sequence in your template literal, most likely inside content's property value.
5
5
  Because you write your CSS inside a JavaScript string you actually have to do double escaping, so for example "content: '\\00d7';" should become "content: '\\\\00d7';".
@@ -1,3 +1,3 @@
1
1
  // @bun
2
- import{CURRENT_SCHEMA_VERSION}from"./chunk-40xgcth8.js";import{localDesignOf,recordedDesignName}from"./chunk-tdsk5wxa.js";import{AGENTS,designArgumentFor,agentRootCandidates,writeAgentConfig,refreshAgentArtifacts}from"./chunk-vgmr98cv.js";import{daemonRoot,readLock,isLive,stopDaemon}from"./chunk-sjgqnykd.js";import{fail}from"./chunk-s23gtejf.js";import{installedVellooBin,upgradeInstalledVelloo}from"./chunk-xt5ayg7g.js";import{createProgress}from"./chunk-pjtg3wnm.js";import{upgradeFolder}from"./chunk-7eq7nx37.js";import{DESIGN_ARG_DESCRIPTION,resolveDesign,checkoutDesigns}from"./chunk-vsv8z729.js";import{require_picocolors}from"./chunk-jrsknzjt.js";import{__toESM,defineCommand}from"./chunk-2smsg2ct.js";import{resolve}from"path";var import_picocolors=__toESM(require_picocolors(),1);import{readFile}from"fs/promises";import{homedir}from"os";var isStrings=(value)=>Array.isArray(value)&&value.every((item)=>typeof item==="string");function asEntry(value){if(value===null||typeof value!=="object")return null;let{command,args}=value;return typeof command==="string"&&isStrings(args)?{command,args}:null}function readStdioEntry(content,format){try{switch(format){case"json":return asEntry(JSON.parse(content).mcpServers?.velloo);case"vscode-json":return asEntry(JSON.parse(content).servers?.velloo);case"opencode-json":{let command=JSON.parse(content).mcp?.velloo?.command;return isStrings(command)&&command[0]?{command:command[0],args:command.slice(1)}:null}case"codex-toml":return asEntry(Bun.TOML.parse(content).mcp_servers?.velloo);case"continue-block":return asEntry(Bun.YAML.parse(content).mcpServers?.[0]);case"continue-config":return null}}catch{return null}}async function repinAgentConfigs(opts){if(localDesignOf(opts.designFolder))return[];let homeDir=opts.homeDir??homedir(),names=new Set(opts.names),rewritten=[];for(let projectRoot of opts.projectRoots){let designArg=await designArgumentFor(projectRoot,opts.designFolder),desired=designArg?["mcp",designArg]:["mcp"];for(let agent of Object.values(AGENTS)){if(agent.scope!=="project"||agent.gui)continue;let path=agent.path(projectRoot,homeDir),content;try{content=await readFile(path,"utf8")}catch{continue}let entry=readStdioEntry(content,agent.format),pinned=entry?.args.length===2&&entry.args[0]==="mcp"?entry.args[1]:void 0;if(!entry||pinned===void 0||!names.has(pinned)||pinned===desired[1])continue;await writeAgentConfig(projectRoot,agent,{transport:"stdio",command:entry.command,args:desired},homeDir),rewritten.push(path)}}return rewritten}async function targetFolders(arg){if(arg)return[await resolveDesign(arg,"upgrade",{requireConfig:!0})];return checkoutDesigns(resolve("."))}var upgrade_default=defineCommand({meta:{name:"upgrade",description:"Upgrade Velloo and migrate designs to the current format \u2014 every design in this checkout, or the one named"},args:{design:{type:"positional",required:!1,description:DESIGN_ARG_DESCRIPTION},"dry-run":{type:"boolean",default:!1,description:"Show what would change without writing"},check:{type:"boolean",default:!1,description:"Check for a Velloo update without installing it"},"binary-only":{type:"boolean",default:!1,description:"Upgrade the Velloo installation and leave the designs alone"},"design-only":{type:"boolean",default:!1,description:"Migrate the designs with this Velloo, without self-upgrading first (same as `velloo design upgrade`)"},skills:{type:"boolean",default:!0,description:"Also refresh the installed agent skills / plugin / rules to this velloo's versions"}},async run({args}){let dryRun=args["dry-run"]||args.check,folders=args["binary-only"]?[]:await targetFolders(args.design),outcome=null;if(!(args["design-only"]||args["folder-only"]===!0))try{outcome=await upgradeInstalledVelloo({checkOnly:dryRun})}catch(error){let message=error instanceof Error?error.message:String(error);if(folders.length===0)fail("upgrade",message);console.log(import_picocolors.default.dim(`velloo: skipping the self-upgrade \u2014 ${message}`))}if(folders.length===0)return;if(outcome?.upgraded){let bin=installedVellooBin();if(bin){for(let folder of folders){let argv=[bin,"upgrade",folder,"--design-only",...args.skills?[]:["--no-skills"]];if(await Bun.spawn(argv,{stdin:"inherit",stdout:"inherit",stderr:"inherit",env:{...process.env,VELLOO_DISABLE_UPDATE_CHECK:"1"}}).exited!==0)fail("upgrade",`the upgraded velloo could not migrate ${folder}`)}return}console.log(import_picocolors.default.dim(`velloo: could not locate the upgraded velloo \u2014 run \`velloo upgrade\` again to migrate ${folders.length===1?"the design":"the designs"}.`));return}for(let folder of folders)await migrateFolder2(folder,{dryRun,skills:args.skills})}});async function migrateFolder2(folder,opts){let{dryRun}=opts,progress=createProgress();progress.start(dryRun?"checking upgrade":"preparing upgrade");let stopped=!1,result;try{if(!dryRun){let root=daemonRoot(folder),running=await readLock(root);if(running&&await isLive(running))progress.step("stopping running canvas");stopped=await stopDaemon(root)}progress.step(dryRun?"checking design folder":"upgrading design folder"),result=await upgradeFolder(folder,{dryRun})}catch(err){progress.fail("upgrade failed"),fail("upgrade",err instanceof Error?err.message:String(err))}let refreshed=[],repinned=[];try{let name=recordedDesignName(folder);if(!dryRun&&name)repinned=await repinAgentConfigs({projectRoots:await agentRootCandidates(folder),designFolder:folder,names:[name]});if(opts.skills&&!dryRun){progress.step("refreshing agent guidance");let projectRoots=await agentRootCandidates(folder);({refreshed}=await refreshAgentArtifacts({projectRoots,designFolder:folder}))}progress.succeed(dryRun?"upgrade check complete":"upgrade complete")}catch(error){throw progress.fail("upgrade failed"),error}if(stopped)console.log("velloo: stopped the running canvas for this folder.");if(result.applied.length===0){console.log(`velloo: ${folder} is already at schema version ${CURRENT_SCHEMA_VERSION}.`);for(let file of result.changedFiles)console.log(` ${dryRun?"~":"\u2713"} ${file} (designs list format)`)}else{console.log(`velloo: ${dryRun?"would migrate":"migrated"} ${folder} from schema version ${result.from} to ${result.to}:`);for(let step of result.applied)console.log(` - ${step}`);for(let file of result.changedFiles)console.log(` ${dryRun?"~":"\u2713"} ${file}`);if(!dryRun)console.log("velloo: folder validated against the current schemas.")}if(repinned.length>0){console.log(""),console.log(import_picocolors.default.green("\u2713 Agent MCP configs now find the design without naming it:"));for(let path of repinned)console.log(` ${import_picocolors.default.cyan(path)}`)}if(refreshed.length>0){console.log(""),console.log(import_picocolors.default.green("\u2713 Refreshed agent guidance to this velloo:"));for(let line of refreshed)console.log(` ${import_picocolors.default.cyan(line)}`)}}
2
+ import{CURRENT_SCHEMA_VERSION}from"./chunk-nte0t7v3.js";import{localDesignOf,recordedDesignName}from"./chunk-88eqqdk1.js";import{AGENTS,designArgumentFor,agentRootCandidates,writeAgentConfig,refreshAgentArtifacts}from"./chunk-avkfsc3p.js";import{daemonRoot,readLock,isLive,stopDaemon}from"./chunk-4ma2wnqw.js";import{fail}from"./chunk-s23gtejf.js";import{installedVellooBin,upgradeInstalledVelloo}from"./chunk-9p1dk5cb.js";import{createProgress}from"./chunk-pjtg3wnm.js";import{upgradeFolder}from"./chunk-ph2jfg1x.js";import{DESIGN_ARG_DESCRIPTION,resolveDesign,checkoutDesigns}from"./chunk-wafb2xm9.js";import{require_picocolors}from"./chunk-jrsknzjt.js";import{__toESM,defineCommand}from"./chunk-2smsg2ct.js";import{resolve}from"path";var import_picocolors=__toESM(require_picocolors(),1);import{readFile}from"fs/promises";import{homedir}from"os";var isStrings=(value)=>Array.isArray(value)&&value.every((item)=>typeof item==="string");function asEntry(value){if(value===null||typeof value!=="object")return null;let{command,args}=value;return typeof command==="string"&&isStrings(args)?{command,args}:null}function readStdioEntry(content,format){try{switch(format){case"json":return asEntry(JSON.parse(content).mcpServers?.velloo);case"vscode-json":return asEntry(JSON.parse(content).servers?.velloo);case"opencode-json":{let command=JSON.parse(content).mcp?.velloo?.command;return isStrings(command)&&command[0]?{command:command[0],args:command.slice(1)}:null}case"codex-toml":return asEntry(Bun.TOML.parse(content).mcp_servers?.velloo);case"continue-block":return asEntry(Bun.YAML.parse(content).mcpServers?.[0]);case"continue-config":return null}}catch{return null}}async function repinAgentConfigs(opts){if(localDesignOf(opts.designFolder))return[];let homeDir=opts.homeDir??homedir(),names=new Set(opts.names),rewritten=[];for(let projectRoot of opts.projectRoots){let designArg=await designArgumentFor(projectRoot,opts.designFolder),desired=designArg?["mcp",designArg]:["mcp"];for(let agent of Object.values(AGENTS)){if(agent.scope!=="project"||agent.gui)continue;let path=agent.path(projectRoot,homeDir),content;try{content=await readFile(path,"utf8")}catch{continue}let entry=readStdioEntry(content,agent.format),pinned=entry?.args.length===2&&entry.args[0]==="mcp"?entry.args[1]:void 0;if(!entry||pinned===void 0||!names.has(pinned)||pinned===desired[1])continue;await writeAgentConfig(projectRoot,agent,{transport:"stdio",command:entry.command,args:desired},homeDir),rewritten.push(path)}}return rewritten}async function targetFolders(arg){if(arg)return[await resolveDesign(arg,"upgrade",{requireConfig:!0})];return checkoutDesigns(resolve("."))}var upgrade_default=defineCommand({meta:{name:"upgrade",description:"Upgrade Velloo and migrate designs to the current format \u2014 every design in this checkout, or the one named"},args:{design:{type:"positional",required:!1,description:DESIGN_ARG_DESCRIPTION},"dry-run":{type:"boolean",default:!1,description:"Show what would change without writing"},check:{type:"boolean",default:!1,description:"Check for a Velloo update without installing it"},"binary-only":{type:"boolean",default:!1,description:"Upgrade the Velloo installation and leave the designs alone"},"design-only":{type:"boolean",default:!1,description:"Migrate the designs with this Velloo, without self-upgrading first (same as `velloo design upgrade`)"},skills:{type:"boolean",default:!0,description:"Also refresh the installed agent skills / plugin / rules to this velloo's versions"}},async run({args}){let dryRun=args["dry-run"]||args.check,folders=args["binary-only"]?[]:await targetFolders(args.design),outcome=null;if(!(args["design-only"]||args["folder-only"]===!0))try{outcome=await upgradeInstalledVelloo({checkOnly:dryRun})}catch(error){let message=error instanceof Error?error.message:String(error);if(folders.length===0)fail("upgrade",message);console.log(import_picocolors.default.dim(`velloo: skipping the self-upgrade \u2014 ${message}`))}if(folders.length===0)return;if(outcome?.upgraded){let bin=installedVellooBin();if(bin){for(let folder of folders){let argv=[bin,"upgrade",folder,"--design-only",...args.skills?[]:["--no-skills"]];if(await Bun.spawn(argv,{stdin:"inherit",stdout:"inherit",stderr:"inherit",env:{...process.env,VELLOO_DISABLE_UPDATE_CHECK:"1"}}).exited!==0)fail("upgrade",`the upgraded velloo could not migrate ${folder}`)}return}console.log(import_picocolors.default.dim(`velloo: could not locate the upgraded velloo \u2014 run \`velloo upgrade\` again to migrate ${folders.length===1?"the design":"the designs"}.`));return}for(let folder of folders)await migrateFolder2(folder,{dryRun,skills:args.skills})}});async function migrateFolder2(folder,opts){let{dryRun}=opts,progress=createProgress();progress.start(dryRun?"checking upgrade":"preparing upgrade");let stopped=!1,result;try{if(!dryRun){let root=daemonRoot(folder),running=await readLock(root);if(running&&await isLive(running))progress.step("stopping running canvas");stopped=await stopDaemon(root)}progress.step(dryRun?"checking design folder":"upgrading design folder"),result=await upgradeFolder(folder,{dryRun})}catch(err){progress.fail("upgrade failed"),fail("upgrade",err instanceof Error?err.message:String(err))}let refreshed=[],repinned=[];try{let name=recordedDesignName(folder);if(!dryRun&&name)repinned=await repinAgentConfigs({projectRoots:await agentRootCandidates(folder),designFolder:folder,names:[name]});if(opts.skills&&!dryRun){progress.step("refreshing agent guidance");let projectRoots=await agentRootCandidates(folder);({refreshed}=await refreshAgentArtifacts({projectRoots,designFolder:folder}))}progress.succeed(dryRun?"upgrade check complete":"upgrade complete")}catch(error){throw progress.fail("upgrade failed"),error}if(stopped)console.log("velloo: stopped the running canvas for this folder.");if(result.applied.length===0){console.log(`velloo: ${folder} is already at schema version ${CURRENT_SCHEMA_VERSION}.`);for(let file of result.changedFiles)console.log(` ${dryRun?"~":"\u2713"} ${file} (designs list format)`)}else{console.log(`velloo: ${dryRun?"would migrate":"migrated"} ${folder} from schema version ${result.from} to ${result.to}:`);for(let step of result.applied)console.log(` - ${step}`);for(let file of result.changedFiles)console.log(` ${dryRun?"~":"\u2713"} ${file}`);if(!dryRun)console.log("velloo: folder validated against the current schemas.")}if(repinned.length>0){console.log(""),console.log(import_picocolors.default.green("\u2713 Agent MCP configs now find the design without naming it:"));for(let path of repinned)console.log(` ${import_picocolors.default.cyan(path)}`)}if(refreshed.length>0){console.log(""),console.log(import_picocolors.default.green("\u2713 Refreshed agent guidance to this velloo:"));for(let line of refreshed)console.log(` ${import_picocolors.default.cyan(line)}`)}}
3
3
  export{repinAgentConfigs,upgrade_default,migrateFolder2};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{isCancel,select}from"./chunk-80fjfyha.js";import{closePooledBrowser}from"./chunk-3e8vez4d.js";import"./chunk-40xgcth8.js";import{writeText,findFrame,exportFilename,exportFramePng,exportBoardPng,exportFramePdf,exportBoardPdf,exportScreenHtml,exportScreenPng,exportScreenPdf,exportFrameHtml,exportBoardHtml,screensForExportTarget}from"./chunk-tdsk5wxa.js";import"./chunk-t448rrfr.js";import{fail}from"./chunk-s23gtejf.js";import{captureWithBrowserSetup}from"./chunk-08sv3k41.js";import{confirmRenderFailures}from"./chunk-a84n72m2.js";import{loadPipeline}from"./chunk-ayrb3qnm.js";import{withAssetServer}from"./chunk-9vg3yafz.js";import{DESIGN_ARG_DESCRIPTION,resolveDesign}from"./chunk-vsv8z729.js";import{defineCommand}from"./chunk-2smsg2ct.js";import{extname,isAbsolute,resolve}from"path";var export_default=defineCommand({meta:{name:"export",description:"Export a screen, frame, or board as PNG, PDF, or standalone HTML (format = --to extension)"},args:{target:{type:"positional",required:!1,description:"Screen, frame, or board id. Omit to pick interactively."},design:{type:"string",description:DESIGN_ARG_DESCRIPTION},to:{type:"string",description:"Output path; extension picks the format (.png | .pdf | .html). Default: ./<target>.png"},mode:{type:"string",description:"light (default) | dark | compare (side-by-side light|dark; PNG, non-board only)"},scale:{type:"string",description:"PNG raster density (0.25\u20133; default 1; 2 = retina)"},theme:{type:"string",description:"Named theme to render with (default: the board's pin, else the folder default)"},w:{type:"string",description:"Viewport width for screen targets (default: first preset)"},h:{type:"string",description:"Viewport height for screen targets (default: first preset)"},yes:{type:"boolean",description:"Export even when a component fails to render (required without an interactive terminal)"}},async run({args}){let folder=await resolveDesign(args.design,"export",{designFlag:"--design"}),pipeline=await loadPipeline(folder),design=pipeline.design,mode=args.mode??"light";if(!["light","dark","compare"].includes(mode))fail("export",`--mode must be light, dark, or compare \u2014 got '${args.mode}'`);let scale=args.scale?Number(args.scale):1;if(!Number.isFinite(scale)||scale<0.25||scale>3)fail("export",`--scale must be between 0.25 and 3 \u2014 got '${args.scale}'`);let targetId=args.target;if(!targetId){let options=[...[...design.boards.values()].map((b)=>({value:b.id,label:b.name,hint:`board \xB7 ${b.frames.length} frame${b.frames.length===1?"":"s"}`})),...[...design.screens.values()].map((s)=>({value:s.id,label:s.name||s.id,hint:"screen"}))];if(options.length===0)fail("export",`nothing to export in ${folder}.`);if(!process.stdin.isTTY)fail("export",`pass a target: ${options.map((o)=>o.value).join(", ")} (boards and screens; frame ids work too)`);let chosen=await select({message:"Export what?",options});if(isCancel(chosen))fail("export","cancelled.");targetId=chosen}let screen=design.screens.get(targetId),framed=screen?null:findFrame(design,targetId),board=screen||framed?null:design.boards.get(targetId),kind=screen?"screen":framed?"frame":board?"board":null;if(!kind)fail("export",`no screen, frame, or board with id "${targetId}" in ${folder}. Boards: ${[...design.boards.keys()].join(", ")||"(none)"}; screens: ${[...design.screens.keys()].join(", ")||"(none)"}.`);let name=screen?.name||framed?.frame.label||(framed?design.screens.get(framed.frame.screen)?.name:void 0)||board?.name||targetId,outPath=args.to?isAbsolute(args.to)?args.to:resolve(args.to):resolve(exportFilename(name,"png")),ext=extname(outPath).toLowerCase().slice(1);if(ext!=="png"&&ext!=="pdf"&&ext!=="html")fail("export",`unsupported output extension ".${ext}" \u2014 use .png, .pdf, or .html.`);let format=ext;if(mode==="compare"&&(format!=="png"||kind==="board"))fail("export",'mode "compare" is PNG-only and not available for boards.');let preset=design.config.viewportPresets[0]??{name:"default",w:1440,h:900},viewport={w:args.w?Number(args.w):preset.w,h:args.h?Number(args.h):preset.h};await confirmRenderFailures("export",{folder:design,providers:pipeline.providers,defaultProvider:pipeline.defaultProvider},screensForExportTarget(design,kind,targetId),args.yes===!0);let opts={mode,scale,...args.theme?{theme:args.theme}:{}},assetOrigin,p={folder:design,providers:pipeline.providers,defaultProvider:pipeline.defaultProvider,snapshotCss:async()=>pipeline.snapshotCss,assetOrigin:()=>assetOrigin},produce=async()=>{if(kind==="screen"&&screen){if(format==="html"){let out=await exportScreenHtml(p,screen,{dark:mode==="dark",...args.theme?{theme:args.theme}:{},viewport});return{bytes:out.html,warnings:out.warnings}}if(format==="pdf")return{bytes:await exportScreenPdf(p,screen,{...opts,viewport}),warnings:[]};return{bytes:await exportScreenPng(p,screen,{...opts,viewport}),warnings:[]}}if(kind==="frame"&&framed){if(format==="html"){let out=await exportFrameHtml(p,framed.board,framed.frame,opts);return{bytes:out.html,warnings:out.warnings}}return{bytes:format==="pdf"?await exportFramePdf(p,framed.board,framed.frame,opts):await exportFramePng(p,framed.board,framed.frame,opts),warnings:[]}}if(!board)fail("export","internal: target resolution failed");if(format==="html"){let out=await exportBoardHtml(p,board,opts);return{bytes:out.html,warnings:out.warnings}}return{bytes:format==="pdf"?await exportBoardPdf(p,board,opts):await exportBoardPng(p,board,opts),warnings:[]}},result;try{if(format==="html")result=await produce();else await withAssetServer(folder,null,async(baseHref)=>{assetOrigin=baseHref,await captureWithBrowserSetup("export",async()=>{result=await produce()})})}finally{await closePooledBrowser()}if(!result)fail("export","capture produced no output");if(typeof result.bytes==="string")await writeText(outPath,result.bytes);else await Bun.write(outPath,result.bytes);console.log(`velloo export: wrote ${outPath} (${kind}=${targetId}, mode=${mode})`);for(let warning of result.warnings)console.log(` note: ${warning}`)}});export{export_default as default};
2
+ import{isCancel,select}from"./chunk-80fjfyha.js";import{closePooledBrowser}from"./chunk-c4fym47a.js";import"./chunk-nte0t7v3.js";import{writeText,findFrame,exportFilename,exportFramePng,exportBoardPng,exportFramePdf,exportBoardPdf,exportScreenHtml,exportScreenPng,exportScreenPdf,exportFrameHtml,exportBoardHtml,screensForExportTarget}from"./chunk-88eqqdk1.js";import"./chunk-n9t36h0q.js";import{fail}from"./chunk-s23gtejf.js";import{captureWithBrowserSetup}from"./chunk-2fgfex9b.js";import{confirmRenderFailures}from"./chunk-2p37rp3j.js";import{loadPipeline}from"./chunk-p6e1eg76.js";import{withAssetServer}from"./chunk-0zen7bzb.js";import{DESIGN_ARG_DESCRIPTION,resolveDesign}from"./chunk-wafb2xm9.js";import{defineCommand}from"./chunk-2smsg2ct.js";import{extname,isAbsolute,resolve}from"path";var export_default=defineCommand({meta:{name:"export",description:"Export a screen, frame, or board as PNG, PDF, or standalone HTML (format = --to extension)"},args:{target:{type:"positional",required:!1,description:"Screen, frame, or board id. Omit to pick interactively."},design:{type:"string",description:DESIGN_ARG_DESCRIPTION},to:{type:"string",description:"Output path; extension picks the format (.png | .pdf | .html). Default: ./<target>.png"},mode:{type:"string",description:"light (default) | dark | compare (side-by-side light|dark; PNG, non-board only)"},scale:{type:"string",description:"PNG raster density (0.25\u20133; default 1; 2 = retina)"},theme:{type:"string",description:"Named theme to render with (default: the board's pin, else the folder default)"},w:{type:"string",description:"Viewport width for screen targets (default: first preset)"},h:{type:"string",description:"Viewport height for screen targets (default: first preset)"},yes:{type:"boolean",description:"Export even when a component fails to render (required without an interactive terminal)"}},async run({args}){let folder=await resolveDesign(args.design,"export",{designFlag:"--design"}),pipeline=await loadPipeline(folder),design=pipeline.design,mode=args.mode??"light";if(!["light","dark","compare"].includes(mode))fail("export",`--mode must be light, dark, or compare \u2014 got '${args.mode}'`);let scale=args.scale?Number(args.scale):1;if(!Number.isFinite(scale)||scale<0.25||scale>3)fail("export",`--scale must be between 0.25 and 3 \u2014 got '${args.scale}'`);let targetId=args.target;if(!targetId){let options=[...[...design.boards.values()].map((b)=>({value:b.id,label:b.name,hint:`board \xB7 ${b.frames.length} frame${b.frames.length===1?"":"s"}`})),...[...design.screens.values()].map((s)=>({value:s.id,label:s.name||s.id,hint:"screen"}))];if(options.length===0)fail("export",`nothing to export in ${folder}.`);if(!process.stdin.isTTY)fail("export",`pass a target: ${options.map((o)=>o.value).join(", ")} (boards and screens; frame ids work too)`);let chosen=await select({message:"Export what?",options});if(isCancel(chosen))fail("export","cancelled.");targetId=chosen}let screen=design.screens.get(targetId),framed=screen?null:findFrame(design,targetId),board=screen||framed?null:design.boards.get(targetId),kind=screen?"screen":framed?"frame":board?"board":null;if(!kind)fail("export",`no screen, frame, or board with id "${targetId}" in ${folder}. Boards: ${[...design.boards.keys()].join(", ")||"(none)"}; screens: ${[...design.screens.keys()].join(", ")||"(none)"}.`);let name=screen?.name||framed?.frame.label||(framed?design.screens.get(framed.frame.screen)?.name:void 0)||board?.name||targetId,outPath=args.to?isAbsolute(args.to)?args.to:resolve(args.to):resolve(exportFilename(name,"png")),ext=extname(outPath).toLowerCase().slice(1);if(ext!=="png"&&ext!=="pdf"&&ext!=="html")fail("export",`unsupported output extension ".${ext}" \u2014 use .png, .pdf, or .html.`);let format=ext;if(mode==="compare"&&(format!=="png"||kind==="board"))fail("export",'mode "compare" is PNG-only and not available for boards.');let preset=design.config.viewportPresets[0]??{name:"default",w:1440,h:900},viewport={w:args.w?Number(args.w):preset.w,h:args.h?Number(args.h):preset.h};await confirmRenderFailures("export",{folder:design,providers:pipeline.providers,defaultProvider:pipeline.defaultProvider},screensForExportTarget(design,kind,targetId),args.yes===!0);let opts={mode,scale,...args.theme?{theme:args.theme}:{}},assetOrigin,p={folder:design,providers:pipeline.providers,defaultProvider:pipeline.defaultProvider,snapshotCss:async()=>pipeline.snapshotCss,assetOrigin:()=>assetOrigin},produce=async()=>{if(kind==="screen"&&screen){if(format==="html"){let out=await exportScreenHtml(p,screen,{dark:mode==="dark",...args.theme?{theme:args.theme}:{},viewport});return{bytes:out.html,warnings:out.warnings}}if(format==="pdf")return{bytes:await exportScreenPdf(p,screen,{...opts,viewport}),warnings:[]};return{bytes:await exportScreenPng(p,screen,{...opts,viewport}),warnings:[]}}if(kind==="frame"&&framed){if(format==="html"){let out=await exportFrameHtml(p,framed.board,framed.frame,opts);return{bytes:out.html,warnings:out.warnings}}return{bytes:format==="pdf"?await exportFramePdf(p,framed.board,framed.frame,opts):await exportFramePng(p,framed.board,framed.frame,opts),warnings:[]}}if(!board)fail("export","internal: target resolution failed");if(format==="html"){let out=await exportBoardHtml(p,board,opts);return{bytes:out.html,warnings:out.warnings}}return{bytes:format==="pdf"?await exportBoardPdf(p,board,opts):await exportBoardPng(p,board,opts),warnings:[]}},result;try{if(format==="html")result=await produce();else await withAssetServer(folder,null,async(baseHref)=>{assetOrigin=baseHref,await captureWithBrowserSetup("export",async()=>{result=await produce()})})}finally{await closePooledBrowser()}if(!result)fail("export","capture produced no output");if(typeof result.bytes==="string")await writeText(outPath,result.bytes);else await Bun.write(outPath,result.bytes);console.log(`velloo export: wrote ${outPath} (${kind}=${targetId}, mode=${mode})`);for(let warning of result.warnings)console.log(` note: ${warning}`)}});export{export_default as default};
@@ -0,0 +1,2 @@
1
+ // @bun
2
+ import{NEVER,string,number,boolean,_null,unknown,array,object,strictObject,union,record,_enum,literal,preprocess,FrameSchemeSchema,MAX_BOARD_NAME_LENGTH,NodeIdSchema,RepoComponentRefSchema,NodeSchema,SnippetParamSchema}from"./chunk-nte0t7v3.js";var Visibility=_enum(["public","private"]),AuthConfigResponseSchema=object({appUrl:string().optional(),issuer:string().optional(),clientId:string().optional()}),HealthResponseSchema=object({ok:boolean().optional(),db:object({ok:boolean().optional()}).optional(),blob:object({ok:boolean().optional()}).optional()}),AccountResponseSchema=object({email:string(),name:string().optional(),tier:string().optional(),creditMicros:number().nullable().optional()}),PRICING_URL="https://velloo.design/pricing";function protectedSharesAllowed(tier){return tier!=="free"}var PROTECTED_SHARES_UNAVAILABLE="private and password-protected links need a Team or Business plan \u2014 free accounts publish public links only",PublishSlotSchema=object({slug:string(),url:string(),title:string(),teamId:string().nullable(),visibility:Visibility,passwordProtected:boolean(),latestVersionId:string().nullable(),lastPublishedAt:string().nullable(),context:object({boardIds:array(string()),selectionFingerprint:string().nullable(),contextKnown:boolean(),repo:string().nullable(),branch:string().nullable()})}),PublishDestinationsResponseSchema=object({effectiveTeamId:string().nullable(),slots:array(PublishSlotSchema)}),LinkResponseSchema=object({slug:string(),visibility:Visibility.optional(),passwordProtected:boolean().optional()}),LinkAccessResponseSchema=object({visibility:Visibility,passwordProtected:boolean()}),VersionUploadResponseSchema=object({files:number(),bytes:number(),url:string(),tier:string().optional(),history:object({retained:boolean(),versions:number(),pruned:number()}).optional()}),PublishedDesignSchema=object({slug:string(),title:string().nullable(),url:string(),visibility:Visibility,passwordProtected:boolean(),canManage:boolean(),mine:boolean(),ownerEmail:string().nullable().optional(),git:object({repo:string().optional(),branch:string().optional()}).nullable().optional(),published:boolean(),lastPublishedAt:string().nullable()}),PublishedDesignsResponseSchema=object({links:array(PublishedDesignSchema).optional()}),TeamSchema=object({id:string(),name:string(),isDefault:boolean().optional()}),TeamsResponseSchema=object({teams:array(TeamSchema)}),DeviceCodeResponseSchema=object({device_code:string(),user_code:string(),verification_uri:string(),verification_uri_complete:string(),expires_in:number(),interval:number()}),DeviceTokenResponseSchema=object({access_token:string().optional(),error:string().optional(),error_description:string().optional()}),CliTokenResponseSchema=object({token:string(),email:string()}),IntentPriceSchema=object({intent:string(),summary:string(),priceMicros:number(),output:_enum(["image","svg"]),aspects:array(string()),defaultAspect:string(),reference:_enum(["forbidden","optional","required"])}),IntentCatalogResponseSchema=object({intents:array(IntentPriceSchema),maxCount:number().optional()}),GeneratedAssetPayloadSchema=object({kind:_enum(["image","svg"]),dataUrl:string()}),GenerateResponseSchema=object({id:string(),intent:string().optional(),chargedMicros:number(),balanceMicros:number(),assets:array(GeneratedAssetPayloadSchema).min(1).optional(),kind:_enum(["image","svg"]).optional(),dataUrl:string().optional()}).transform((r,ctx)=>{let assets=r.assets??(r.dataUrl&&r.kind?[{kind:r.kind,dataUrl:r.dataUrl}]:null);if(!assets)return ctx.addIssue({code:"custom",message:"no assets in the generation reply"}),NEVER;return{id:r.id,intent:r.intent??"",assets,chargedMicros:r.chargedMicros,balanceMicros:r.balanceMicros}}),FeedbackIssuerResponseSchema=object({scheme:string(),publicKey:string()}),FeedbackSignaturesResponseSchema=object({signatures:array(string())});var ACTIVITY_EVENT_TYPE="activity",SocketFrameSchema=union([object({type:literal("screen-changed"),screenId:string().min(1)}),object({type:literal("board-changed"),boardId:string().min(1)}),object({type:literal("theme-changed")}),object({type:literal("snippet-changed"),snippetId:string().min(1)}),object({type:literal("annotations-changed"),screenId:string().min(1)}),object({type:literal("notes-changed"),boardId:string().min(1)}),object({type:literal("comments-changed"),boardId:string().min(1),scope:_enum(["local","shared"])}),object({type:literal("config-changed")}),object({type:literal("folder-reloaded")}),object({type:literal("reload-error"),source:string(),message:string()}),object({type:literal(ACTIVITY_EVENT_TYPE)}).loose()]);var CLOUD_ERROR_CODES=["bad_request","unauthorized","sign_in_required","insufficient_credits","forbidden","not_found","conflict","payload_too_large","unsupported_media_type","rate_limited","generation_failed","billing_upstream","unavailable","storage_unavailable","internal"];function isCloudErrorCode(value){return typeof value==="string"&&CLOUD_ERROR_CODES.includes(value)}var unreachable=(error,opts={})=>({kind:"Unreachable",detail:error instanceof Error?error.message:String(error),...opts.url!==void 0?{url:opts.url}:{},...opts.timedOut?{timedOut:!0}:{}}),httpFailure=(operation,status,detail,code)=>({kind:"HttpFailure",operation,status,detail:detail&&detail.length>0?detail:"unknown",...code!==void 0?{code}:{}}),loggedOut=(detail)=>detail===void 0?{kind:"LoggedOut"}:{kind:"LoggedOut",detail},protocolViolation=(detail)=>({kind:"ProtocolViolation",detail}),uploadRaceLost=()=>({kind:"UploadRaceLost"}),insecureCloudUrl=(url)=>({kind:"InsecureCloudUrl",url}),invalidRequest=(detail)=>({kind:"InvalidRequest",detail});async function readFailure(res){let body=await res.json().catch(()=>{return});if(!body||typeof body!=="object")return{detail:"unknown"};let{message,error}=body,detail=typeof message==="string"&&message.length>0?message:"unknown";return isCloudErrorCode(error)?{detail,code:error}:{detail}}function cloudFailure(operation,status,detail,code){if(status!==401&&code!=="unauthorized")return httpFailure(operation,status,detail,code);return loggedOut(detail&&detail.length>0&&detail!=="unknown"?`velloo-cloud rejected the stored credential (${detail})`:"velloo-cloud rejected the stored credential")}async function httpFailureFrom(operation,res){let{detail,code}=await readFailure(res);return cloudFailure(operation,res.status,detail,code)}function boardLimitFrom(error){if(error.kind!=="HttpFailure"||error.status!==403)return null;let match=/\bthe (\w+) plan is limited to (\d+) active cloud boards\b/.exec(error.detail);if(!match?.[1]||!match[2])return null;return{tier:match[1],limit:Number(match[2])}}function describeBoardLimit({tier,limit}){return`the ${tier} plan keeps ${limit} board${limit===1?"":"s"} published at a time \u2014 take one down to publish another`}var serverTrouble=(status)=>status>=500?" \u2014 the cloud is having trouble; check its status or try again later":"";function describeCloudError(error){switch(error.kind){case"Unreachable":{let target=error.url?`cannot reach ${error.url}`:"cannot reach the cloud";return error.timedOut?`${target} \u2014 timed out (${error.detail}); check your connection and try again`:`${target} (${error.detail}) \u2014 check your connection and try again`}case"HttpFailure":return`${error.operation} failed (${error.status}): ${error.detail}${serverTrouble(error.status)}`;case"LoggedOut":return error.detail?`${error.detail} \u2014 run \`velloo login\``:"you are signed out \u2014 run `velloo login`";case"ProtocolViolation":return`${error.detail} \u2014 this is a bug; please report it`;case"UploadRaceLost":return"upload confirmation was lost and the retry found the publish slot changed \u2014 "+"the publish may have succeeded; check your published boards before retrying";case"InsecureCloudUrl":return`refusing to send credentials to ${error.url} over an insecure connection`;case"InvalidRequest":return error.detail;default:{let exhaustive=error;return"the cloud request failed"}}}function ok(value){return{ok:!0,value}}function err(error){return{ok:!1,error}}function map(r,fn){return r.ok?ok(fn(r.value)):r}async function tryCatchAsync(fn,onError){try{return ok(await fn())}catch(thrown){return err(onError(thrown))}}function*$(r){if(!r.ok)throw yield r,Error("unreachable: generator resumed after err");return r.value}async function DoAsync(gen){let iter=gen(),step=await iter.next();while(!step.done){let r=step.value;if(!r.ok)return r;step=await iter.next(r.value)}return ok(step.value)}async function cloudJson(res,schema,operation){let body;try{body=await res.json()}catch(error){return err(protocolViolation(`${operation}: the cloud's response was not JSON (${error instanceof Error?error.message:String(error)})`))}let parsed=schema.safeParse(body);if(!parsed.success)return err(protocolViolation(`${operation}: the cloud's response did not match the protocol`));return ok(parsed.data)}async function cloudFetch(url,schema,opts){let{operation,token,timeoutMs,...init}=opts,res;try{res=await fetch(url,{...init,headers:{...token!==void 0?{authorization:`Bearer ${token}`}:{},...init.headers},...timeoutMs!==void 0?{signal:AbortSignal.timeout(timeoutMs)}:{}})}catch(error){let timedOut=error instanceof Error&&error.name==="TimeoutError";return err(unreachable(error,{url,...timedOut?{timedOut:!0}:{}}))}if(!res.ok)return err(await httpFailureFrom(operation,res));return cloudJson(res,schema,operation)}var PathArraySchema=array(number()),IdLocatorSchema=string().regex(/^@[a-zA-Z][a-zA-Z0-9_-]*$/,{message:"id locator must match /^@[a-zA-Z][a-zA-Z0-9_-]*$/"}),jsonTolerant=(schema)=>preprocess((v)=>{if(typeof v==="string"){let t=v.trim();if(t.startsWith("[")||t.startsWith("{"))try{return JSON.parse(t)}catch{}}return v},schema),singularTolerant=(schema)=>preprocess((v)=>typeof v==="object"&&v!==null&&!Array.isArray(v)?[v]:v,schema),LocatorSchema=jsonTolerant(union([PathArraySchema,IdLocatorSchema])).describe('Node address: an "@id" like "@hero-cta", or an index path from the root ([0,2,1])'),LocatorOrRootSchema=LocatorSchema.default([]),InnerPathSchema=string().describe('Body node: "@id" (preferred \u2014 survives restructures), a dotted index path ("0.2"), or "" for the root'),PatchRecordSchema=record(string(),unknown());var invalid=(message,issues)=>issues===void 0?{ok:!1,message}:{ok:!1,message,issues},ScreenId=string().min(1),BoardId=string().min(1),FrameId=string().min(1),SnippetId=string().min(1),FramePatchSchema=strictObject({x:number().optional(),y:number().optional(),w:number().int().positive().optional(),h:number().int().positive().optional(),label:string().nullable().optional(),group:string().nullable().optional(),scheme:FrameSchemeSchema.nullable().optional()}),EmitAsSchema=object({name:string().min(1),importPath:string().min(1)}).describe("Mark the node a host-component facade: the canvas renders the subtree, emit_code emits <name /> from importPath instead."),AnnotationPositionSchema=union([object({x:number(),y:number()}),literal("auto")]),addNodeShape={screenId:ScreenId,parentPath:LocatorOrRootSchema,componentRef:string().min(1),id:NodeIdSchema.optional(),props:PatchRecordSchema.optional(),children:jsonTolerant(union([array(NodeSchema),string(),number()])).optional(),index:number().int().nonnegative().optional(),emitAs:EmitAsSchema.optional(),repo:RepoComponentRefSchema.optional().describe("Place an app component by identity (importPath + exportName [+ member]) when it isn't in list_components' repo catalog yet")},AddNodeBody=strictObject(addNodeShape);function normalizeAddNode(input){let{children,...rest}=input;if(typeof children==="string"||typeof children==="number")return invalid("add_node: `children` must be an array of nodes.",[{code:"invalid_type",expected:"array",path:["children"]}]);let props=input.props;return{ok:!0,args:{...rest,...props===void 0?{}:{props},...children===void 0?{}:{children}}}}var StylePayloadSchema=jsonTolerant(union([string(),PatchRecordSchema,_null()])).describe("Native style channel: a className string (Tailwind), an object of properties (sx / style), or null to clear"),PropsPatchEntrySchema=object({path:LocatorSchema,propPatch:PatchRecordSchema.optional(),style:StylePayloadSchema.optional()}).refine((e)=>e.propPatch!==void 0||e.style!==void 0,{message:"each patch needs propPatch, style, or both"}),GestureSchema=string().max(64).optional().describe("Opaque id of the drag this write belongs to; merges its undo steps into one"),updatePropsShape={screenId:ScreenId,patches:jsonTolerant(singularTolerant(array(PropsPatchEntrySchema).min(1))).describe("One entry per node; length 1 for a single edit"),gesture:GestureSchema},UpdatePropsBody=strictObject(updatePropsShape),applyClassesShape={screenId:ScreenId,path:LocatorOrRootSchema,classes:string(),gesture:GestureSchema},ApplyClassesBody=strictObject(applyClassesShape),removeNodeShape={screenId:ScreenId,path:LocatorSchema},RemoveNodeBody=strictObject(removeNodeShape),moveNodeShape={screenId:ScreenId,fromPath:LocatorSchema,toParent:LocatorSchema,toIndex:number().int().nonnegative().optional()},MoveNodeBody=strictObject(moveNodeShape),setNodeIdShape={screenId:ScreenId,path:LocatorSchema,id:NodeIdSchema.nullable()},SetNodeIdBody=strictObject(setNodeIdShape),RoutePath=string().trim().min(1).transform((value)=>value.startsWith("/")?value:`/${value}`),addScreenShape={name:string().min(1),id:string().min(1).optional(),fromScreenId:string().min(1).optional(),tree:NodeSchema.optional(),route:RoutePath.optional()},AddScreenBody=strictObject(addScreenShape),removeScreenShape={screenId:ScreenId},RemoveScreenBody=strictObject(removeScreenShape),setScreenTreeShape={screenId:ScreenId,tree:NodeSchema},SetScreenTreeBody=strictObject(setScreenTreeShape),updateScreenShape={screenId:ScreenId,patch:object({name:string().min(1).optional(),route:RoutePath.nullable().optional()})},UpdateScreenBody=strictObject(updateScreenShape),addBoardShape={name:string().min(1).max(MAX_BOARD_NAME_LENGTH),id:string().min(1).optional(),group:string().min(1).optional()},AddBoardBody=strictObject(addBoardShape),updateBoardShape={boardId:BoardId,patch:object({name:string().min(1).max(MAX_BOARD_NAME_LENGTH).optional(),theme:string().min(1).nullable().optional(),archived:boolean().optional(),group:string().min(1).nullable().optional()})},UpdateBoardBody=strictObject(updateBoardShape),removeBoardShape={boardId:BoardId},RemoveBoardBody=strictObject(removeBoardShape),reorderBoardsShape={order:array(string().min(1))},ReorderBoardsBody=strictObject(reorderBoardsShape),addBoardGroupShape={name:string().min(1),color:string().min(1).optional()},AddBoardGroupBody=strictObject(addBoardGroupShape),updateBoardGroupShape={groupId:string().min(1),patch:object({name:string().min(1).optional(),color:string().min(1).nullable().optional()})},UpdateBoardGroupBody=strictObject(updateBoardGroupShape),removeBoardGroupShape={groupId:string().min(1)},RemoveBoardGroupBody=strictObject(removeBoardGroupShape),reorderBoardGroupsShape={order:array(string().min(1))},ReorderBoardGroupsBody=strictObject(reorderBoardGroupsShape),addFrameShape={boardId:BoardId,screenId:ScreenId,x:number().optional(),y:number().optional(),w:number().int().positive(),h:number().int().positive(),label:string().optional(),group:string().optional(),id:string().min(1).optional()},AddFrameBody=strictObject(addFrameShape),FramePatchEntrySchema=preprocess((v)=>{if(typeof v!=="object"||v===null||Array.isArray(v)||"patch"in v)return v;let{frameId,...patch}=v;return Object.keys(patch).length>0?{frameId,patch}:v},object({frameId:FrameId,patch:FramePatchSchema})),updateFrameShape={boardId:BoardId,patches:jsonTolerant(singularTolerant(array(FramePatchEntrySchema).min(1))).describe("One entry per frame; length 1 for a single edit")},UpdateFrameBody=strictObject(updateFrameShape),removeFrameShape={boardId:BoardId,frameId:FrameId},RemoveFrameBody=strictObject(removeFrameShape),moveFrameShape={boardId:BoardId,frameId:FrameId,toBoardId:BoardId,x:number().optional(),y:number().optional()},MoveFrameBody=strictObject(moveFrameShape),addSnippetShape={name:string().min(1),id:string().min(1).optional(),params:array(SnippetParamSchema).default([]),tree:NodeSchema},AddSnippetBody=strictObject(addSnippetShape),updateSnippetShape={snippetId:SnippetId,patch:object({name:string().min(1).optional(),params:array(SnippetParamSchema).optional(),tree:NodeSchema.optional(),innerPatch:object({innerPath:InnerPathSchema,propPatch:PatchRecordSchema}).optional()})},UpdateSnippetBody=strictObject(updateSnippetShape),removeSnippetShape={snippetId:SnippetId},RemoveSnippetBody=strictObject(removeSnippetShape),instantiateSnippetShape={screenId:ScreenId,parentPath:LocatorOrRootSchema,snippetId:SnippetId,id:NodeIdSchema.optional(),args:PatchRecordSchema.optional(),extraClassName:string().optional().describe("One-off classes layered onto the snippet body's root, for this instance"),overrides:record(string(),object({props:PatchRecordSchema})).optional(),index:number().int().nonnegative().optional()},InstantiateSnippetBody=strictObject(instantiateSnippetShape),overrideSnippetPropsShape={screenId:ScreenId,path:LocatorSchema,innerPath:InnerPathSchema,propPatch:PatchRecordSchema},OverrideSnippetPropsBody=strictObject(overrideSnippetPropsShape),updateSnippetArgsShape={screenId:ScreenId,path:LocatorSchema,argPatch:PatchRecordSchema.default({}),extraClassName:string().nullable().optional(),gesture:GestureSchema},UpdateSnippetArgsBody=strictObject(updateSnippetArgsShape),updateSnippetInstanceShape={screenId:ScreenId,path:LocatorSchema,argPatch:PatchRecordSchema.optional(),extraClassName:string().nullable().optional(),innerPath:InnerPathSchema.optional(),propPatch:PatchRecordSchema.optional()},UpdateSnippetInstanceBody=strictObject(updateSnippetInstanceShape);function normalizeUpdateSnippetInstance(input){let wantsArgs=input.argPatch!==void 0||input.extraClassName!==void 0,hasInner=input.innerPath!==void 0,hasPatch=input.propPatch!==void 0;if(hasInner!==hasPatch)return invalid("update_snippet_instance: innerPath and propPatch go together.");if(!wantsArgs&&!hasInner)return invalid("update_snippet_instance: pass argPatch, extraClassName, or innerPath+propPatch.");let plan={};if(wantsArgs)plan.args={screenId:input.screenId,path:input.path,argPatch:input.argPatch??{},...input.extraClassName!==void 0?{extraClassName:input.extraClassName}:{}};if(hasInner&&input.innerPath!==void 0&&input.propPatch!==void 0)plan.override={screenId:input.screenId,path:input.path,innerPath:input.innerPath,propPatch:input.propPatch};return{ok:!0,args:plan}}var addAnnotationShape={screenId:ScreenId,target:object({locator:LocatorSchema}),body:string(),position:AnnotationPositionSchema.optional(),collapsed:boolean().optional()},AddAnnotationBody=strictObject(addAnnotationShape),updateAnnotationShape={screenId:ScreenId,annotationId:string().min(1),patch:object({body:string().optional(),position:AnnotationPositionSchema.optional(),collapsed:boolean().nullable().optional()})},UpdateAnnotationBody=strictObject(updateAnnotationShape),removeAnnotationShape={screenId:ScreenId,annotationId:string().min(1)},RemoveAnnotationBody=strictObject(removeAnnotationShape),NoteAttachmentSchema=object({frameId:FrameId,screenId:ScreenId,locator:LocatorSchema}),addNoteShape={boardId:BoardId,x:number().optional(),y:number().optional(),width:number().positive().optional(),body:string(),attachment:NoteAttachmentSchema.optional()},AddNoteBody=object(addNoteShape).refine((a)=>a.attachment!==void 0||a.x!==void 0&&a.y!==void 0,{message:"A note without an attachment needs x and y",path:["x"]}),updateNoteShape={boardId:BoardId,noteId:string().min(1),patch:object({x:number().optional(),y:number().optional(),width:number().positive().optional(),body:string().optional()})},UpdateNoteBody=strictObject(updateNoteShape),removeNoteShape={boardId:BoardId,noteId:string().min(1)},RemoveNoteBody=strictObject(removeNoteShape),updateViewportPresetsShape={presets:array(object({name:string().min(1),w:number().int().positive(),h:number().int().positive()}))},UpdateViewportPresetsBody=strictObject(updateViewportPresetsShape),updateDefaultsShape={defaultBoard:string().min(1).nullable().optional(),defaultScreen:string().min(1).nullable().optional()},UpdateDefaultsBody=strictObject(updateDefaultsShape),updateCodegenShape={componentsAlias:string().nullable().optional()},UpdateCodegenBody=strictObject(updateCodegenShape),updateDesignNameShape={name:string()},UpdateDesignNameBody=strictObject(updateDesignNameShape),updateFeedbackShape={enabled:boolean().optional(),contactOk:boolean().optional()},UpdateFeedbackBody=strictObject(updateFeedbackShape);export{ok,err,map,tryCatchAsync,$,DoAsync,isCloudErrorCode,AuthConfigResponseSchema,HealthResponseSchema,AccountResponseSchema,PRICING_URL,protectedSharesAllowed,PROTECTED_SHARES_UNAVAILABLE,PublishDestinationsResponseSchema,LinkResponseSchema,LinkAccessResponseSchema,VersionUploadResponseSchema,PublishedDesignsResponseSchema,TeamsResponseSchema,DeviceCodeResponseSchema,DeviceTokenResponseSchema,CliTokenResponseSchema,IntentCatalogResponseSchema,GenerateResponseSchema,FeedbackIssuerResponseSchema,FeedbackSignaturesResponseSchema,unreachable,loggedOut,protocolViolation,uploadRaceLost,insecureCloudUrl,invalidRequest,readFailure,cloudFailure,httpFailureFrom,boardLimitFrom,describeBoardLimit,describeCloudError,cloudJson,cloudFetch,LocatorSchema,AddNodeBody,normalizeAddNode,updatePropsShape,UpdatePropsBody,ApplyClassesBody,removeNodeShape,RemoveNodeBody,moveNodeShape,MoveNodeBody,setNodeIdShape,SetNodeIdBody,addScreenShape,AddScreenBody,removeScreenShape,RemoveScreenBody,SetScreenTreeBody,updateScreenShape,addBoardShape,AddBoardBody,updateBoardShape,UpdateBoardBody,removeBoardShape,RemoveBoardBody,reorderBoardsShape,ReorderBoardsBody,AddBoardGroupBody,UpdateBoardGroupBody,RemoveBoardGroupBody,ReorderBoardGroupsBody,addFrameShape,AddFrameBody,updateFrameShape,UpdateFrameBody,removeFrameShape,RemoveFrameBody,MoveFrameBody,addSnippetShape,AddSnippetBody,updateSnippetShape,UpdateSnippetBody,removeSnippetShape,RemoveSnippetBody,InstantiateSnippetBody,UpdateSnippetArgsBody,updateSnippetInstanceShape,UpdateSnippetInstanceBody,normalizeUpdateSnippetInstance,AddAnnotationBody,UpdateAnnotationBody,RemoveAnnotationBody,AddNoteBody,UpdateNoteBody,RemoveNoteBody,updateViewportPresetsShape,UpdateViewportPresetsBody,UpdateDefaultsBody,UpdateCodegenBody,UpdateDesignNameBody,UpdateFeedbackBody};
@@ -1,3 +1,3 @@
1
1
  // @bun
2
- import{detectTailwindMajor}from"./chunk-tdsk5wxa.js";import{existsSync,readFileSync}from"fs";import{join}from"path";function readJson(path){try{return JSON.parse(readFileSync(path,"utf8"))}catch{return null}}function depRange(deps,name){let v=deps[name];return typeof v==="string"?v:void 0}function detectHost(appRoot){let pkg=readJson(join(appRoot,"package.json"))??{},deps={...pkg.dependencies??{},...pkg.devDependencies??{}},tailwindMajor=detectTailwindMajor(appRoot),componentsJson=readJson(join(appRoot,"components.json")),shadcn=componentsJson!==null,shadcnStyle=typeof componentsJson?.style==="string"?componentsJson.style:void 0,uiLibrary=depRange(deps,"@mui/material")?"mui":depRange(deps,"antd")?"antd":depRange(deps,"@chakra-ui/react")?"chakra":shadcn?"shadcn":void 0,unsupportedUi=uiLibrary?void 0:detectUnsupportedUi(deps);return{shadcn,shadcnStyle,tailwindMajor,globalsCssPath:findGlobalsCss(appRoot,componentsJson),...uiLibrary?{uiLibrary}:{},...unsupportedUi?{unsupportedUi}:{}}}var COMPONENT_DIR_CANDIDATES=["src/components/ui","components/ui","app/components/ui","src/app/components/ui","src/components","components"];function findComponentsDir(appRoot){return COMPONENT_DIR_CANDIDATES.find((rel)=>existsSync(join(appRoot,rel)))}function detectUnsupportedUi(deps){let known=[["@mantine/core","Mantine"],["@nextui-org/react","NextUI"],["@heroui/react","HeroUI"],["react-bootstrap","React Bootstrap"],["@fluentui/react-components","Fluent UI"],["@untitledui/icons","Untitled UI"],["@untitledui/file-icons","Untitled UI"],["react-aria-components","React Aria"]];for(let[pkg,label]of known)if(depRange(deps,pkg))return label;return}function findGlobalsCss(appRoot,componentsJson){let candidates=[componentsJson&&typeof componentsJson.tailwind?.css==="string"?componentsJson.tailwind.css:void 0,"src/app/globals.css","app/globals.css","src/styles/globals.css","styles/globals.css","src/index.css","src/globals.css","src/app.css"].filter((c)=>Boolean(c));for(let rel of candidates){let abs=join(appRoot,rel);if(existsSync(abs))return abs}return}
2
+ import{detectTailwindMajor}from"./chunk-88eqqdk1.js";import{existsSync,readFileSync}from"fs";import{join}from"path";function readJson(path){try{return JSON.parse(readFileSync(path,"utf8"))}catch{return null}}function depRange(deps,name){let v=deps[name];return typeof v==="string"?v:void 0}function detectHost(appRoot){let pkg=readJson(join(appRoot,"package.json"))??{},deps={...pkg.dependencies??{},...pkg.devDependencies??{}},tailwindMajor=detectTailwindMajor(appRoot),componentsJson=readJson(join(appRoot,"components.json")),shadcn=componentsJson!==null,shadcnStyle=typeof componentsJson?.style==="string"?componentsJson.style:void 0,uiLibrary=depRange(deps,"@mui/material")?"mui":depRange(deps,"antd")?"antd":depRange(deps,"@chakra-ui/react")?"chakra":shadcn?"shadcn":void 0,unsupportedUi=uiLibrary?void 0:detectUnsupportedUi(deps);return{shadcn,shadcnStyle,tailwindMajor,globalsCssPath:findGlobalsCss(appRoot,componentsJson),...uiLibrary?{uiLibrary}:{},...unsupportedUi?{unsupportedUi}:{}}}var COMPONENT_DIR_CANDIDATES=["src/components/ui","components/ui","app/components/ui","src/app/components/ui","src/components","components"];function findComponentsDir(appRoot){return COMPONENT_DIR_CANDIDATES.find((rel)=>existsSync(join(appRoot,rel)))}function detectUnsupportedUi(deps){let known=[["@mantine/core","Mantine"],["@nextui-org/react","NextUI"],["@heroui/react","HeroUI"],["react-bootstrap","React Bootstrap"],["@fluentui/react-components","Fluent UI"],["@untitledui/icons","Untitled UI"],["@untitledui/file-icons","Untitled UI"],["react-aria-components","React Aria"]];for(let[pkg,label]of known)if(depRange(deps,pkg))return label;return}function findGlobalsCss(appRoot,componentsJson){let candidates=[componentsJson&&typeof componentsJson.tailwind?.css==="string"?componentsJson.tailwind.css:void 0,"src/app/globals.css","app/globals.css","src/styles/globals.css","styles/globals.css","src/index.css","src/globals.css","src/app.css"].filter((c)=>Boolean(c));for(let rel of candidates){let abs=join(appRoot,rel);if(existsSync(abs))return abs}return}
3
3
  export{detectHost,findComponentsDir};