@veluai/velu 0.2.10 → 0.2.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -1,22 +1,22 @@
1
1
  #!/usr/bin/env node
2
- var un=Object.defineProperty;var j=(e,t)=>()=>(e&&(t=e(e=0)),t);var Pe=(e,t)=>{for(var n in t)un(e,n,{get:t[n],enumerable:!0})};var ot={};Pe(ot,{initProject:()=>dn});import D from"node:fs/promises";import X from"node:path";import{fileURLToPath as pn}from"node:url";async function dn(e,t){try{if((await D.readdir(e)).length>0)throw new Error(`Directory "${t}" already exists and is not empty. Choose a different name or remove the folder first.`)}catch(i){if(i.code!=="ENOENT")throw i}await D.mkdir(e,{recursive:!0}),await D.cp(mn,e,{recursive:!0});let n=X.join(e,"velu.json"),r=JSON.parse(await D.readFile(n,"utf-8"));r.name=t,await D.writeFile(n,JSON.stringify(r,null,2)+`
3
- `,"utf-8");let o=await rt(e);console.log(`[velu] created ${t}/`);for(let i of o)console.log(` ${i}`);console.log(""),console.log("Next steps:"),console.log(` cd ${t}`),console.log(" velu dev")}async function rt(e,t=e,n=[]){let r=await D.readdir(e,{withFileTypes:!0});for(let o of r){let i=X.join(e,o.name);o.isDirectory()?await rt(i,t,n):n.push(X.relative(t,i).split(X.sep).join("/"))}return n.sort()}var fn,mn,it=j(()=>{fn=X.dirname(pn(import.meta.url)),mn=X.resolve(fn,"..","templates","starter")});import gn from"node:fs/promises";import Ce from"node:path";function at(e){if(!e.favicon)return null;let t=Ce.extname(e.favicon).toLowerCase();return{url:Ee+t,type:vn[t]||""}}function te(e){if(typeof e=="string"){let t=e.trim();return t?{light:t,dark:t,href:"/"}:null}if(e&&typeof e=="object"){let t=(e.light??e.dark)?.trim?.(),n=(e.dark??e.light)?.trim?.();return!t||!n?null:{light:t,dark:n,href:e.href?.trim?.()||"/"}}return null}function Fe(e){if(!e||typeof e!="object")return null;let t=[];if(e.socials&&typeof e.socials=="object")for(let[r,o]of Object.entries(e.socials))typeof o!="string"||!o.trim()||t.push({kind:bn[r]??r,href:o.trim()});let n=Array.isArray(e.links)?e.links.filter(r=>r&&typeof r=="object").map(r=>({title:(r.header??r.title??"").trim(),items:(Array.isArray(r.items)?r.items:[]).filter(o=>o&&o.label).map(o=>({label:o.label,href:o.href??"#"}))})).filter(r=>r.title||r.items.length):[];return!t.length&&!n.length?null:{socials:t,links:n}}function _e(e){return/^(https?:)?\/\//.test(e)||/^(mailto|tel):/.test(e)}function Ne(e){if(!e||typeof e!="object")return null;let t=(Array.isArray(e.links)?e.links:[]).filter(o=>o&&typeof o.href=="string"&&o.href.trim()).map(o=>({label:o.label??"",href:o.href.trim(),icon:o.icon??null,external:_e(o.href.trim())})),n=null,r=e.primary;if(r&&typeof r=="object"&&typeof r.href=="string"&&r.href.trim()){let o=r.href.trim();n=r.type==="github"?{kind:"github",label:r.label??"GitHub",href:o,external:_e(o)}:{kind:"button",label:r.label??"",href:o,external:_e(o)}}return!t.length&&!n?null:{links:t,primary:n}}function lt(e){if(e==null)return{options:[...st],display:"header"};if(typeof e!="object")return{options:[],display:"header"};let t=e.display==="toc"?"toc":"header",n=Array.isArray(e.options)?e.options:st,r=[];for(let o of n)typeof o=="string"?xn.has(o)&&r.push(o):o&&typeof o=="object"&&o.title&&o.href&&r.push({title:String(o.title),description:o.description?String(o.description):"",href:String(o.href),icon:typeof o.icon=="string"?o.icon:void 0});return{options:r,display:t}}function z(e){if(!e||typeof e!="object")return{server:null,proxy:!0,languages:void 0};let t=e.playground||{};return{server:typeof e.server=="string"?e.server.trim():null,proxy:t.proxy!==!1&&t.display!=="none",languages:Array.isArray(e.examples?.languages)?e.examples.languages:void 0}}function $n(e){return!e||typeof e!="object"?{metatags:{},indexing:"navigable"}:{metatags:e.metatags&&typeof e.metatags=="object"?e.metatags:{},indexing:e.indexing==="all"?"all":"navigable"}}function Ie(e){if(!e||typeof e!="object")return null;let t=typeof e.apiBase=="string"&&e.apiBase.trim()?e.apiBase.trim().replace(/\/+$/,""):null,n=typeof e.host=="string"&&e.host.trim()?e.host.trim():null,r=Array.isArray(e.suggestions)?e.suggestions.filter(o=>typeof o=="string"&&o.trim()).map(o=>o.trim()).slice(0,6):[];return!t&&!r.length?null:{apiBase:t,host:n,suggestions:r}}function Re(e={},t){let n=e.colors?.primary??hn;return{name:e.name??t??"docs",url:typeof e.url=="string"&&e.url.trim()?e.url.trim().replace(/\/+$/,""):null,seo:$n(e.seo),assistant:Ie(e.assistant),thumbnails:e.thumbnails&&typeof e.thumbnails=="object"&&typeof e.thumbnails.background=="string"?{background:e.thumbnails.background}:null,colors:{primary:n,light:e.colors?.light??n,dark:e.colors?.dark??n},favicon:e.favicon??null,api:z(e.api),logo:te(e.logo),footer:Fe(e.footer),navbar:Ne(e.navbar),font:{family:e.font?.family??yn},navigation:e.navigation??null}}async function ct(e){let t=Ce.join(e,"velu.json"),n;try{n=await gn.readFile(t,"utf-8")}catch(o){throw o.code==="ENOENT"?new Error(`No velu.json found in ${e}. Run \`velu init <name>\` to scaffold one.`):o}let r;try{r=JSON.parse(n)}catch(o){throw new Error(`velu.json is not valid JSON: ${o.message}`)}return Re(r,Ce.basename(e))}function ut(e){let{colors:t,font:n}=e;return[":root:root {",` --accent-color: ${t.light};`,` --font-sans: "${n.family}", sans-serif;`,"}",':root:root[data-theme="dark"] {',` --accent-color: ${t.dark};`,"}"].join(`
4
- `)}var hn,yn,fe,me,Ee,vn,bn,xn,st,Y=j(()=>{hn="#dc143c",yn="Google Sans Flex",fe="/@velu-logo-light",me="/@velu-logo-dark",Ee="/@velu-favicon",vn={".svg":"image/svg+xml",".ico":"image/x-icon",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".avif":"image/avif"};bn={twitter:"x","x-twitter":"x"};xn=new Set(["copy","assistant","view","download-pdf","download-spec","chatgpt","claude","perplexity","grok","aistudio","devin","windsurf","mcp","add-mcp","cursor","vscode","devin-mcp"]),st=["copy","view","chatgpt","claude"]});import{visit as wn}from"unist-util-visit";import{toString as Sn}from"mdast-util-to-string";import kn from"github-slugger";import{valueToEstree as jn}from"estree-util-value-to-estree";function ne(){return e=>{let t=new kn,n=[];wn(e,"heading",a=>{let s=Sn(a);n.push({depth:a.depth,id:t.slug(s),label:s})});let r={children:[]},o=[{node:r,depth:0}];for(let a of n){for(;o.length>1&&o[o.length-1].depth>=a.depth;)o.pop();let s={id:a.id,label:a.label},l=o[o.length-1].node;l.children||(l.children=[]),l.children.push(s),o.push({node:s,depth:a.depth})}let i=r.children;e.children.unshift({type:"mdxjsEsm",value:"",data:{estree:{type:"Program",sourceType:"module",body:[{type:"ExportNamedDeclaration",specifiers:[],declaration:{type:"VariableDeclaration",kind:"const",declarations:[{type:"VariableDeclarator",id:{type:"Identifier",name:"toc"},init:jn(i)}]}}]}}})}}var Ue=j(()=>{});import An from"github-slugger";import On from"iso-639-1";function Ln(e){let t=String(e).toLowerCase();return On.getNativeName(t)||e}function de(e){return new An().slug(String(e??""))}function Pn(e){let t=String(e).replace(/^\/+|\/+$/g,"").split("/").filter(Boolean);return t[t.length-1]==="index"&&t.pop(),"/"+t.join("/")}function pt(e){let t=String(e).split("#")[0].split("?")[0];try{t=decodeURI(t)}catch{}return t.startsWith("/")||(t="/"+t),t.length>1&&(t=t.replace(/\/+$/,"")),t||"/"}function U(e){let t={kind:"root",children:re(e??{})};return dt(t.children),t}function re(e){let t=Array.isArray(e.anchors)?e.anchors.map(Nn):[];if(Array.isArray(e.products))return[...t,...e.products.map(_n)];if(Array.isArray(e.versions))return[...t,...e.versions.map(Cn)];if(Array.isArray(e.languages))return[...t,...e.languages.map(En)];if(Array.isArray(e.tabs))return[...t,...e.tabs.map(Fn)];let n=[...t];return Array.isArray(e.groups)&&n.push(...e.groups.map(ft)),Array.isArray(e.pages)&&n.push(...e.pages.map(mt)),n}function _n(e){return{kind:"product",label:e.name??e.product,slug:de(e.product),icon:e.icon,color:e.color,default:!!e.default,children:re(e)}}function Cn(e){return{kind:"version",label:e.version,slug:de(e.version),default:!!e.default,children:re(e)}}function En(e){let t=String(e.language);return{kind:"language",code:t,label:Ln(t),slug:de(t),default:!!e.default,children:re(e)}}function Fn(e){return{kind:"tab",label:e.tab,slug:de(e.tab),icon:e.icon,href:e.href,children:re(e)}}function Nn(e){return{kind:"anchor",label:e.anchor,icon:e.icon,href:e.href,color:e.color}}function ft(e){let t=(e.pages??[]).map(mt);return e.root&&t.unshift({kind:"page",pagePath:e.root}),{kind:"group",label:e.group,icon:e.icon,expanded:!!e.expanded,root:e.root,children:t}}function mt(e){return typeof e=="string"?{kind:"page",pagePath:e}:e&&e.apiPage?{kind:"page",pagePath:e.apiPage,label:e.label,method:e.method,api:!0}:ft(e)}function dt(e){for(let t of Tn){let n=e.filter(r=>r.kind===t);n.length&&!n.some(r=>r.default)&&(n[0].default=!0)}for(let t of e)t.children&&dt(t.children)}function K(e){let t=[],n=(r,o,i)=>{if(r.kind==="page"){t.push({pagePath:r.pagePath,url:In(r.pagePath,o),ctx:{...o},ancestors:i,node:r});return}let a=o;r.kind==="product"?a={...o,product:r.default?null:r.slug}:r.kind==="version"?a={...o,version:r.default?null:r.slug}:r.kind==="language"&&(a={...o,language:r.default?null:r.slug});let s=r.kind==="root"?i:[...i,r];for(let l of r.children??[])n(l,a,s)};return n(e,{product:null,version:null,language:null},[]),t}function In(e,t){let n=[t.product,t.version,t.language].filter(Boolean),r=Pn(e).split("/").filter(Boolean);return"/"+[...n,...r].join("/")}var Tn,B=j(()=>{Tn=["product","version","language"]});import Rn from"node:fs";import gt from"node:path";function M(e,t){let n=[],r=[],o=new Set;for(let i of K(e)){if(i.node?.api){o.add(i.url);continue}if(o.has(i.url)){n.push(`duplicate URL "${i.url}" (page "${i.pagePath}") \u2014 keeping the first occurrence`);continue}o.add(i.url);let a=i.pagePath.replace(/^\/+|\/+$/g,""),s=gt.join(t,...a.split("/"))+".mdx",l=Rn.existsSync(s);l||n.push(`page "${i.pagePath}" \u2192 ${gt.relative(t,s)} not found`),r.push({pagePath:i.pagePath,url:i.url,fileAbsPath:s,exists:l})}return{pageEntries:r,warnings:n}}var oe=j(()=>{B()});import Un from"@apidevtools/swagger-parser";async function Bn(e){return Un.dereference(e)}function G(e){return!e||typeof e!="object"?e||{}:Array.isArray(e.allOf)?e.allOf.reduce((t,n)=>{let r=G(n);return{...t,...r,properties:{...t.properties||{},...r.properties||{}},required:[...t.required||[],...r.required||[]]}},{...e,allOf:void 0}):Array.isArray(e.oneOf)&&e.oneOf.length?G(e.oneOf[0]):Array.isArray(e.anyOf)&&e.anyOf.length?G(e.anyOf[0]):e}function ge(e){let t=G(e);if(!t||typeof t!="object")return"any";if(Array.isArray(t.enum)&&t.enum.length)return`enum<${typeof t.enum[0]}>`;if(t.type==="array")return`${ge(t.items||{})}[]`;let n=t.type||(t.properties?"object":"any");return t.format?`${n}<${t.format}>`:n}function ie(e,t=0){let n=G(e);if(!n||typeof n!="object")return null;if(n.example!==void 0)return n.example;if(n.default!==void 0)return n.default;if(Array.isArray(n.enum)&&n.enum.length)return n.enum[0];if(t>=zn)return n.type==="object"?{}:null;switch(n.type){case"object":{let r={};for(let[o,i]of Object.entries(n.properties||{}))r[o]=ie(i,t+1);return r}case"array":return[ie(n.items||{},t+1)];case"integer":case"number":return 0;case"boolean":return!0;default:return Gn(n)}}function Gn(e){switch(e.format){case"date-time":return"2024-01-01T00:00:00Z";case"date":return"2024-01-01";case"email":return"user@example.com";case"uuid":return"3fa85f64-5717-4562-b3fc-2c963f66afa6";case"uri":case"url":return"https://example.com";default:return"<string>"}}function yt(e){let t=G(e);if(!t||t.type!=="object"||!t.properties)return t&&(t.type||t.items)?[{name:"body",type:ge(t),required:!1,description:t.description||""}]:[];let n=new Set(t.required||[]);return Object.entries(t.properties).map(([r,o])=>{let i=G(o);return{name:r,type:ge(i),required:n.has(r),description:i.description||"",enum:Array.isArray(i.enum)?i.enum:void 0,deprecated:i.deprecated||void 0}})}function Jn(e){let t=e.schema||{};return{name:e.name,in:e.in,required:e.in==="path"?!0:!!e.required,type:ge(t),description:e.description||"",enum:Array.isArray(t.enum)?t.enum:void 0,example:ie(t),deprecated:e.deprecated||void 0}}function vt(e){if(!e||typeof e!="object")return null;let t=Object.keys(e),n=t.find(r=>/json/i.test(r))||t[0];return n?{contentType:n,media:e[n]}:null}function Vn(e){if(!e)return null;let t=vt(e.content);if(!t)return null;let n=t.media.schema||{};return{required:!!e.required,description:e.description||"",contentType:t.contentType,fields:yt(n),example:t.media.example??ie(n)}}function qn(e){return!e||typeof e!="object"?[]:Object.entries(e).map(([t,n])=>{let r=vt(n?.content),o=r?.media?.schema||{};return{status:t,description:n?.description||"",contentType:r?.contentType||null,fields:r?yt(o):[],example:r?r.media.example??ie(o):null}})}function Hn(e,t){if(!Array.isArray(e)||!t)return[];let n=[],r=new Set;for(let o of e)for(let i of Object.keys(o||{})){let a=t[i];!a||r.has(i)||(r.add(i),n.push(Dn(i,a)))}return n.filter(Boolean)}function Dn(e,t){return t.type==="http"&&/bearer/i.test(t.scheme||"")?{name:"Authorization",in:"header",required:!0,type:"string",prefix:"Bearer",description:t.description||"Bearer authentication token."}:t.type==="http"&&/basic/i.test(t.scheme||"")?{name:"Authorization",in:"header",required:!0,type:"string",prefix:"Basic",description:t.description||"Basic authentication credentials."}:t.type==="apiKey"?{name:t.name||e,in:t.in||"header",required:!0,type:"string",description:t.description||"API key."}:t.type==="oauth2"||t.type==="openIdConnect"?{name:"Authorization",in:"header",required:!0,type:"string",prefix:"Bearer",description:t.description||"OAuth 2.0 access token."}:{name:e,in:"header",required:!0,type:"string",description:t.description||""}}function ht(e){return String(e).replace(/\{[^}]+\}/g,t=>t.slice(1,-1)).replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase()}function Xn(e){let{method:t,path:n,op:r,sharedParams:o,servers:i,schemes:a}=e,s=[...o||[],...r.parameters||[]],l={path:[],query:[],header:[],cookie:[]};for(let u of s)u&&l[u.in]&&l[u.in].push(Jn(u));let p=r.security??e.globalSecurity;return{id:r.operationId?ht(r.operationId):`${t}-${ht(n)}`,method:t.toUpperCase(),path:n,title:r.summary||r.operationId||`${t.toUpperCase()} ${n}`,description:r.description||r.summary||"",tags:Array.isArray(r.tags)&&r.tags.length?r.tags:["API"],deprecated:r.deprecated||!1,auth:Hn(p,a),parameters:l,body:Vn(r.requestBody),responses:qn(r.responses),servers:(i||[]).map(u=>u.url).filter(Boolean)}}function Yn(e,t,n,r,o,i,a){let s={};e.openapi?s.openapi=e.openapi:e.swagger?s.swagger=e.swagger:s.openapi="3.0.0",s.info=e.info||{title:"API Reference",version:"1.0.0"};let l=(r.servers||i||[]).filter(Boolean);l.length&&(s.servers=l);let p={};Array.isArray(o)&&o.length&&(p.parameters=o),p[n]=r,s.paths={[t]:p};let u=r.security??e.security;if(a&&Array.isArray(u)&&u.length){let c={};for(let b of u)for(let d of Object.keys(b||{}))a[d]&&(c[d]=a[d]);Object.keys(c).length&&(e.swagger?s.securityDefinitions=c:s.components={securitySchemes:c})}return s}function Kn(e){let t=[],n=[],r=e.components?.securitySchemes||e.securityDefinitions||{},o=e.security||[],i=e.servers||(e.host?[{url:`https://${e.host}${e.basePath||""}`}]:[]);for(let[a,s]of Object.entries(e.paths||{})){if(!s||typeof s!="object")continue;let l=s.parameters||[],p=s.servers||i;for(let u of Mn){let c=s[u];!c||typeof c!="object"||(t.push(Xn({method:u,path:a,op:c,sharedParams:l,servers:c.servers||p,globalSecurity:o,schemes:r})),n.push(Yn(e,a,u,c,l,c.servers||p,r)))}}return{operations:t,segments:n}}async function bt(e){let t=await Bn(e),n=t.servers||(t.host?[{url:`https://${t.host}${t.basePath||""}`}]:[]),{operations:r,segments:o}=Kn(t);return{title:t.info?.title||"API Reference",version:t.info?.version||"",servers:n.map(i=>i.url).filter(Boolean),operations:r,segments:o}}var Mn,zn,xt=j(()=>{Mn=["get","post","put","patch","delete","options","head","trace"],zn=6});function Wn(e,{server:t}={}){let r=`${(t||e.servers?.[0]||"").replace(/\/+$/,"")}${e.path}`,o={};for(let a of e.auth||[])a.in==="header"&&(o[a.name]=a.prefix?`${a.prefix} <token>`:"<token>");for(let a of e.parameters?.header||[])o[a.name]||(o[a.name]=String(a.example??`<${a.type}>`));let i=!!e.body;return i&&(o["Content-Type"]=e.body.contentType||"application/json"),{method:e.method,url:r,headers:o,body:i?e.body.example??{}:null}}function Zn(e){let t=`curl --request ${e.method} \\
2
+ var pn=Object.defineProperty;var A=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ee=(e,t)=>{for(var n in t)pn(e,n,{get:t[n],enumerable:!0})};var st={};Ee(st,{initProject:()=>gn});import D from"node:fs/promises";import X from"node:path";import{fileURLToPath as fn}from"node:url";async function gn(e,t){try{if((await D.readdir(e)).length>0)throw new Error(`Directory "${t}" already exists and is not empty. Choose a different name or remove the folder first.`)}catch(i){if(i.code!=="ENOENT")throw i}await D.mkdir(e,{recursive:!0}),await D.cp(dn,e,{recursive:!0});let n=X.join(e,"velu.json"),r=JSON.parse(await D.readFile(n,"utf-8"));r.name=t,await D.writeFile(n,JSON.stringify(r,null,2)+`
3
+ `,"utf-8");let o=await it(e);console.log(`[velu] created ${t}/`);for(let i of o)console.log(` ${i}`);console.log(""),console.log("Next steps:"),console.log(` cd ${t}`),console.log(" velu dev")}async function it(e,t=e,n=[]){let r=await D.readdir(e,{withFileTypes:!0});for(let o of r){let i=X.join(e,o.name);o.isDirectory()?await it(i,t,n):n.push(X.relative(t,i).split(X.sep).join("/"))}return n.sort()}var mn,dn,at=A(()=>{mn=X.dirname(fn(import.meta.url)),dn=X.resolve(mn,"..","templates","starter")});function te(e){if(!e||typeof e!="object")return null;let t=[];if(e.socials&&typeof e.socials=="object")for(let[r,o]of Object.entries(e.socials))typeof o!="string"||!o.trim()||t.push({kind:hn[r]??r,href:o.trim()});let n=Array.isArray(e.links)?e.links.filter(r=>r&&typeof r=="object").map(r=>({title:(r.header??r.title??"").trim(),items:(Array.isArray(r.items)?r.items:[]).filter(o=>o&&o.label).map(o=>({label:o.label,href:o.href??"#"}))})).filter(r=>r.title||r.items.length):[];return!t.length&&!n.length?null:{socials:t,links:n}}function Fe(e){return/^(https?:)?\/\//.test(e)||/^(mailto|tel):/.test(e)}function ne(e){if(!e||typeof e!="object")return null;let t=(Array.isArray(e.links)?e.links:[]).filter(o=>o&&typeof o.href=="string"&&o.href.trim()).map(o=>({label:o.label??"",href:o.href.trim(),icon:o.icon??null,external:Fe(o.href.trim())})),n=null,r=e.primary;if(r&&typeof r=="object"&&typeof r.href=="string"&&r.href.trim()){let o=r.href.trim();n=r.type==="github"?{kind:"github",label:r.label??"GitHub",href:o,external:Fe(o)}:{kind:"button",label:r.label??"",href:o,external:Fe(o)}}return!t.length&&!n?null:{links:t,primary:n}}function Ne(e){if(e==null)return{options:[...lt],display:"header"};if(typeof e!="object")return{options:[],display:"header"};let t=e.display==="toc"?"toc":"header",n=Array.isArray(e.options)?e.options:lt,r=[];for(let o of n)typeof o=="string"?yn.has(o)&&r.push(o):o&&typeof o=="object"&&o.title&&o.href&&r.push({title:String(o.title),description:o.description?String(o.description):"",href:String(o.href),icon:typeof o.icon=="string"?o.icon:void 0});return{options:r,display:t}}function re(e){if(!e||typeof e!="object")return null;let t=typeof e.apiBase=="string"&&e.apiBase.trim()?e.apiBase.trim().replace(/\/+$/,""):null,n=typeof e.host=="string"&&e.host.trim()?e.host.trim():null,r=Array.isArray(e.suggestions)?e.suggestions.filter(o=>typeof o=="string"&&o.trim()).map(o=>o.trim()).slice(0,6):[];return!t&&!r.length?null:{apiBase:t,host:n,suggestions:r}}var hn,yn,lt,Ie=A(()=>{hn={twitter:"x","x-twitter":"x"};yn=new Set(["copy","assistant","view","download-pdf","download-spec","chatgpt","claude","perplexity","grok","aistudio","devin","windsurf","mcp","add-mcp","cursor","vscode","devin-mcp"]),lt=["copy","view","chatgpt","claude"]});import vn from"node:fs/promises";import Re from"node:path";function ct(e){if(!e.favicon)return null;let t=Re.extname(e.favicon).toLowerCase();return{url:Ue+t,type:$n[t]||""}}function oe(e){if(typeof e=="string"){let t=e.trim();return t?{light:t,dark:t,href:"/"}:null}if(e&&typeof e=="object"){let t=(e.light??e.dark)?.trim?.(),n=(e.dark??e.light)?.trim?.();return!t||!n?null:{light:t,dark:n,href:e.href?.trim?.()||"/"}}return null}function z(e){if(!e||typeof e!="object")return{server:null,proxy:!0,languages:void 0};let t=e.playground||{};return{server:typeof e.server=="string"?e.server.trim():null,proxy:t.proxy!==!1&&t.display!=="none",languages:Array.isArray(e.examples?.languages)?e.examples.languages:void 0}}function wn(e){return!e||typeof e!="object"?{metatags:{},indexing:"navigable"}:{metatags:e.metatags&&typeof e.metatags=="object"?e.metatags:{},indexing:e.indexing==="all"?"all":"navigable"}}function Me(e={},t){let n=e.colors?.primary??bn;return{name:e.name??t??"docs",url:typeof e.url=="string"&&e.url.trim()?e.url.trim().replace(/\/+$/,""):null,seo:wn(e.seo),assistant:re(e.assistant),thumbnails:e.thumbnails&&typeof e.thumbnails=="object"&&typeof e.thumbnails.background=="string"?{background:e.thumbnails.background}:null,colors:{primary:n,light:e.colors?.light??n,dark:e.colors?.dark??n},favicon:e.favicon??null,api:z(e.api),logo:oe(e.logo),footer:te(e.footer),navbar:ne(e.navbar),font:{family:e.font?.family??xn},navigation:e.navigation??null}}async function ut(e){let t=Re.join(e,"velu.json"),n;try{n=await vn.readFile(t,"utf-8")}catch(o){throw o.code==="ENOENT"?new Error(`No velu.json found in ${e}. Run \`velu init <name>\` to scaffold one.`):o}let r;try{r=JSON.parse(n)}catch(o){throw new Error(`velu.json is not valid JSON: ${o.message}`)}return Me(r,Re.basename(e))}function pt(e){let{colors:t,font:n}=e;return[":root:root {",` --accent-color: ${t.light};`,` --font-sans: "${n.family}", sans-serif;`,"}",':root:root[data-theme="dark"] {',` --accent-color: ${t.dark};`,"}"].join(`
4
+ `)}var bn,xn,ge,he,Ue,$n,Y=A(()=>{Ie();Ie();bn="#dc143c",xn="Google Sans Flex",ge="/@velu-logo-light",he="/@velu-logo-dark",Ue="/@velu-favicon",$n={".svg":"image/svg+xml",".ico":"image/x-icon",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".avif":"image/avif"}});import{visit as Sn}from"unist-util-visit";import{toString as kn}from"mdast-util-to-string";import An from"github-slugger";import{valueToEstree as jn}from"estree-util-value-to-estree";function ie(){return e=>{let t=new An,n=[];Sn(e,"heading",a=>{let s=kn(a);n.push({depth:a.depth,id:t.slug(s),label:s})});let r={children:[]},o=[{node:r,depth:0}];for(let a of n){for(;o.length>1&&o[o.length-1].depth>=a.depth;)o.pop();let s={id:a.id,label:a.label},l=o[o.length-1].node;l.children||(l.children=[]),l.children.push(s),o.push({node:s,depth:a.depth})}let i=r.children;e.children.unshift({type:"mdxjsEsm",value:"",data:{estree:{type:"Program",sourceType:"module",body:[{type:"ExportNamedDeclaration",specifiers:[],declaration:{type:"VariableDeclaration",kind:"const",declarations:[{type:"VariableDeclarator",id:{type:"Identifier",name:"toc"},init:jn(i)}]}}]}}})}}var ze=A(()=>{});import On from"github-slugger";import Tn from"iso-639-1";function Pn(e){let t=String(e).toLowerCase();return Tn.getNativeName(t)||e}function ye(e){return new On().slug(String(e??""))}function _n(e){let t=String(e).replace(/^\/+|\/+$/g,"").split("/").filter(Boolean);return t[t.length-1]==="index"&&t.pop(),"/"+t.join("/")}function ft(e){let t=String(e).split("#")[0].split("?")[0];try{t=decodeURI(t)}catch{}return t.startsWith("/")||(t="/"+t),t.length>1&&(t=t.replace(/\/+$/,"")),t||"/"}function U(e){let t={kind:"root",children:se(e??{})};return gt(t.children),t}function se(e){let t=Array.isArray(e.anchors)?e.anchors.map(In):[];if(Array.isArray(e.products))return[...t,...e.products.map(Cn)];if(Array.isArray(e.versions))return[...t,...e.versions.map(En)];if(Array.isArray(e.languages))return[...t,...e.languages.map(Fn)];if(Array.isArray(e.tabs))return[...t,...e.tabs.map(Nn)];let n=[...t];return Array.isArray(e.groups)&&n.push(...e.groups.map(mt)),Array.isArray(e.pages)&&n.push(...e.pages.map(dt)),n}function Cn(e){return{kind:"product",label:e.name??e.product,slug:ye(e.product),icon:e.icon,color:e.color,default:!!e.default,children:se(e)}}function En(e){return{kind:"version",label:e.version,slug:ye(e.version),default:!!e.default,children:se(e)}}function Fn(e){let t=String(e.language);return{kind:"language",code:t,label:Pn(t),slug:ye(t),default:!!e.default,children:se(e)}}function Nn(e){return{kind:"tab",label:e.tab,slug:ye(e.tab),icon:e.icon,href:e.href,children:se(e)}}function In(e){return{kind:"anchor",label:e.anchor,icon:e.icon,href:e.href,color:e.color}}function mt(e){let t=(e.pages??[]).map(dt);return e.root&&t.unshift({kind:"page",pagePath:e.root}),{kind:"group",label:e.group,icon:e.icon,expanded:!!e.expanded,root:e.root,children:t}}function dt(e){return typeof e=="string"?{kind:"page",pagePath:e}:e&&e.apiPage?{kind:"page",pagePath:e.apiPage,label:e.label,method:e.method,api:!0}:mt(e)}function gt(e){for(let t of Ln){let n=e.filter(r=>r.kind===t);n.length&&!n.some(r=>r.default)&&(n[0].default=!0)}for(let t of e)t.children&&gt(t.children)}function K(e){let t=[],n=(r,o,i)=>{if(r.kind==="page"){t.push({pagePath:r.pagePath,url:Rn(r.pagePath,o),ctx:{...o},ancestors:i,node:r});return}let a=o;r.kind==="product"?a={...o,product:r.default?null:r.slug}:r.kind==="version"?a={...o,version:r.default?null:r.slug}:r.kind==="language"&&(a={...o,language:r.default?null:r.slug});let s=r.kind==="root"?i:[...i,r];for(let l of r.children??[])n(l,a,s)};return n(e,{product:null,version:null,language:null},[]),t}function Rn(e,t){let n=[t.product,t.version,t.language].filter(Boolean),r=_n(e).split("/").filter(Boolean);return"/"+[...n,...r].join("/")}var Ln,B=A(()=>{Ln=["product","version","language"]});import Un from"node:fs";import ht from"node:path";function M(e,t){let n=[],r=[],o=new Set;for(let i of K(e)){if(i.node?.api){o.add(i.url);continue}if(o.has(i.url)){n.push(`duplicate URL "${i.url}" (page "${i.pagePath}") \u2014 keeping the first occurrence`);continue}o.add(i.url);let a=i.pagePath.replace(/^\/+|\/+$/g,""),s=ht.join(t,...a.split("/"))+".mdx",l=Un.existsSync(s);l||n.push(`page "${i.pagePath}" \u2192 ${ht.relative(t,s)} not found`),r.push({pagePath:i.pagePath,url:i.url,fileAbsPath:s,exists:l})}return{pageEntries:r,warnings:n}}var ae=A(()=>{B()});import Mn from"@apidevtools/swagger-parser";async function Gn(e){return Mn.dereference(e)}function G(e){return!e||typeof e!="object"?e||{}:Array.isArray(e.allOf)?e.allOf.reduce((t,n)=>{let r=G(n);return{...t,...r,properties:{...t.properties||{},...r.properties||{}},required:[...t.required||[],...r.required||[]]}},{...e,allOf:void 0}):Array.isArray(e.oneOf)&&e.oneOf.length?G(e.oneOf[0]):Array.isArray(e.anyOf)&&e.anyOf.length?G(e.anyOf[0]):e}function ve(e){let t=G(e);if(!t||typeof t!="object")return"any";if(Array.isArray(t.enum)&&t.enum.length)return`enum<${typeof t.enum[0]}>`;if(t.type==="array")return`${ve(t.items||{})}[]`;let n=t.type||(t.properties?"object":"any");return t.format?`${n}<${t.format}>`:n}function le(e,t=0){let n=G(e);if(!n||typeof n!="object")return null;if(n.example!==void 0)return n.example;if(n.default!==void 0)return n.default;if(Array.isArray(n.enum)&&n.enum.length)return n.enum[0];if(t>=Bn)return n.type==="object"?{}:null;switch(n.type){case"object":{let r={};for(let[o,i]of Object.entries(n.properties||{}))r[o]=le(i,t+1);return r}case"array":return[le(n.items||{},t+1)];case"integer":case"number":return 0;case"boolean":return!0;default:return Jn(n)}}function Jn(e){switch(e.format){case"date-time":return"2024-01-01T00:00:00Z";case"date":return"2024-01-01";case"email":return"user@example.com";case"uuid":return"3fa85f64-5717-4562-b3fc-2c963f66afa6";case"uri":case"url":return"https://example.com";default:return"<string>"}}function vt(e){let t=G(e);if(!t||t.type!=="object"||!t.properties)return t&&(t.type||t.items)?[{name:"body",type:ve(t),required:!1,description:t.description||""}]:[];let n=new Set(t.required||[]);return Object.entries(t.properties).map(([r,o])=>{let i=G(o);return{name:r,type:ve(i),required:n.has(r),description:i.description||"",enum:Array.isArray(i.enum)?i.enum:void 0,deprecated:i.deprecated||void 0}})}function Vn(e){let t=e.schema||{};return{name:e.name,in:e.in,required:e.in==="path"?!0:!!e.required,type:ve(t),description:e.description||"",enum:Array.isArray(t.enum)?t.enum:void 0,example:le(t),deprecated:e.deprecated||void 0}}function bt(e){if(!e||typeof e!="object")return null;let t=Object.keys(e),n=t.find(r=>/json/i.test(r))||t[0];return n?{contentType:n,media:e[n]}:null}function qn(e){if(!e)return null;let t=bt(e.content);if(!t)return null;let n=t.media.schema||{};return{required:!!e.required,description:e.description||"",contentType:t.contentType,fields:vt(n),example:t.media.example??le(n)}}function Hn(e){return!e||typeof e!="object"?[]:Object.entries(e).map(([t,n])=>{let r=bt(n?.content),o=r?.media?.schema||{};return{status:t,description:n?.description||"",contentType:r?.contentType||null,fields:r?vt(o):[],example:r?r.media.example??le(o):null}})}function Dn(e,t){if(!Array.isArray(e)||!t)return[];let n=[],r=new Set;for(let o of e)for(let i of Object.keys(o||{})){let a=t[i];!a||r.has(i)||(r.add(i),n.push(Xn(i,a)))}return n.filter(Boolean)}function Xn(e,t){return t.type==="http"&&/bearer/i.test(t.scheme||"")?{name:"Authorization",in:"header",required:!0,type:"string",prefix:"Bearer",description:t.description||"Bearer authentication token."}:t.type==="http"&&/basic/i.test(t.scheme||"")?{name:"Authorization",in:"header",required:!0,type:"string",prefix:"Basic",description:t.description||"Basic authentication credentials."}:t.type==="apiKey"?{name:t.name||e,in:t.in||"header",required:!0,type:"string",description:t.description||"API key."}:t.type==="oauth2"||t.type==="openIdConnect"?{name:"Authorization",in:"header",required:!0,type:"string",prefix:"Bearer",description:t.description||"OAuth 2.0 access token."}:{name:e,in:"header",required:!0,type:"string",description:t.description||""}}function yt(e){return String(e).replace(/\{[^}]+\}/g,t=>t.slice(1,-1)).replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase()}function Yn(e){let{method:t,path:n,op:r,sharedParams:o,servers:i,schemes:a}=e,s=[...o||[],...r.parameters||[]],l={path:[],query:[],header:[],cookie:[]};for(let u of s)u&&l[u.in]&&l[u.in].push(Vn(u));let p=r.security??e.globalSecurity;return{id:r.operationId?yt(r.operationId):`${t}-${yt(n)}`,method:t.toUpperCase(),path:n,title:r.summary||r.operationId||`${t.toUpperCase()} ${n}`,description:r.description||r.summary||"",tags:Array.isArray(r.tags)&&r.tags.length?r.tags:["API"],deprecated:r.deprecated||!1,auth:Dn(p,a),parameters:l,body:qn(r.requestBody),responses:Hn(r.responses),servers:(i||[]).map(u=>u.url).filter(Boolean)}}function Kn(e,t,n,r,o,i,a){let s={};e.openapi?s.openapi=e.openapi:e.swagger?s.swagger=e.swagger:s.openapi="3.0.0",s.info=e.info||{title:"API Reference",version:"1.0.0"};let l=(r.servers||i||[]).filter(Boolean);l.length&&(s.servers=l);let p={};Array.isArray(o)&&o.length&&(p.parameters=o),p[n]=r,s.paths={[t]:p};let u=r.security??e.security;if(a&&Array.isArray(u)&&u.length){let c={};for(let b of u)for(let d of Object.keys(b||{}))a[d]&&(c[d]=a[d]);Object.keys(c).length&&(e.swagger?s.securityDefinitions=c:s.components={securitySchemes:c})}return s}function Wn(e){let t=[],n=[],r=e.components?.securitySchemes||e.securityDefinitions||{},o=e.security||[],i=e.servers||(e.host?[{url:`https://${e.host}${e.basePath||""}`}]:[]);for(let[a,s]of Object.entries(e.paths||{})){if(!s||typeof s!="object")continue;let l=s.parameters||[],p=s.servers||i;for(let u of zn){let c=s[u];!c||typeof c!="object"||(t.push(Yn({method:u,path:a,op:c,sharedParams:l,servers:c.servers||p,globalSecurity:o,schemes:r})),n.push(Kn(e,a,u,c,l,c.servers||p,r)))}}return{operations:t,segments:n}}async function xt(e){let t=await Gn(e),n=t.servers||(t.host?[{url:`https://${t.host}${t.basePath||""}`}]:[]),{operations:r,segments:o}=Wn(t);return{title:t.info?.title||"API Reference",version:t.info?.version||"",servers:n.map(i=>i.url).filter(Boolean),operations:r,segments:o}}var zn,Bn,$t=A(()=>{zn=["get","post","put","patch","delete","options","head","trace"],Bn=6});function Zn(e,{server:t}={}){let r=`${(t||e.servers?.[0]||"").replace(/\/+$/,"")}${e.path}`,o={};for(let a of e.auth||[])a.in==="header"&&(o[a.name]=a.prefix?`${a.prefix} <token>`:"<token>");for(let a of e.parameters?.header||[])o[a.name]||(o[a.name]=String(a.example??`<${a.type}>`));let i=!!e.body;return i&&(o["Content-Type"]=e.body.contentType||"application/json"),{method:e.method,url:r,headers:o,body:i?e.body.example??{}:null}}function Qn(e){let t=`curl --request ${e.method} \\
5
5
  --url ${e.url}`;for(let[n,r]of Object.entries(e.headers))t+=` \\
6
6
  --header '${n}: ${r}'`;return e.body!=null&&(t+=` \\
7
- --data '${JSON.stringify(e.body)}'`),t}function Qn(e){let t=[` method: '${e.method}'`];if(Object.keys(e.headers).length){let n=Object.entries(e.headers).map(([r,o])=>` '${r}': '${o}'`).join(`,
7
+ --data '${JSON.stringify(e.body)}'`),t}function er(e){let t=[` method: '${e.method}'`];if(Object.keys(e.headers).length){let n=Object.entries(e.headers).map(([r,o])=>` '${r}': '${o}'`).join(`,
8
8
  `);t.push(` headers: {
9
9
  ${n}
10
- }`)}return e.body!=null&&t.push(` body: JSON.stringify(${Me(e.body," ")})`),[`const res = await fetch('${e.url}', {`,t.join(`,
10
+ }`)}return e.body!=null&&t.push(` body: JSON.stringify(${Be(e.body," ")})`),[`const res = await fetch('${e.url}', {`,t.join(`,
11
11
  `),"});","const data = await res.json();"].join(`
12
- `)}function er(e){let t=["import requests","",`url = "${e.url}"`];if(Object.keys(e.headers).length){let r=Object.entries(e.headers).map(([o,i])=>` "${o}": "${i}"`).join(`,
12
+ `)}function tr(e){let t=["import requests","",`url = "${e.url}"`];if(Object.keys(e.headers).length){let r=Object.entries(e.headers).map(([o,i])=>` "${o}": "${i}"`).join(`,
13
13
  `);t.push(`headers = {
14
14
  ${r}
15
- }`)}let n=["url"];return e.body!=null&&(t.push(`payload = ${Me(e.body,"")}`),n.push("json=payload")),Object.keys(e.headers).length&&n.push("headers=headers"),t.push("",`response = requests.${e.method.toLowerCase()}(${n.join(", ")})`,"print(response.json())"),t.join(`
16
- `)}function tr(e){let t=e.method.charAt(0)+e.method.slice(1).toLowerCase(),n=["require 'net/http'","require 'json'","",`uri = URI("${e.url}")`,"http = Net::HTTP.new(uri.host, uri.port)","http.use_ssl = true",`request = Net::HTTP::${t}.new(uri)`];for(let[r,o]of Object.entries(e.headers))n.push(`request['${r}'] = '${o}'`);return e.body!=null&&n.push(`request.body = ${Me(e.body,"")}.to_json`),n.push("","response = http.request(request)","puts response.body"),n.join(`
17
- `)}function wt(e,{server:t,languages:n=ze}={}){let r=Wn(e,{server:t});return n.filter(o=>$t[o]).map(o=>({key:o,label:nr[o],language:rr[o],code:$t[o](r)}))}var Me,$t,nr,rr,ze,St=j(()=>{Me=(e,t)=>JSON.stringify(e,null,2).split(`
15
+ }`)}let n=["url"];return e.body!=null&&(t.push(`payload = ${Be(e.body,"")}`),n.push("json=payload")),Object.keys(e.headers).length&&n.push("headers=headers"),t.push("",`response = requests.${e.method.toLowerCase()}(${n.join(", ")})`,"print(response.json())"),t.join(`
16
+ `)}function nr(e){let t=e.method.charAt(0)+e.method.slice(1).toLowerCase(),n=["require 'net/http'","require 'json'","",`uri = URI("${e.url}")`,"http = Net::HTTP.new(uri.host, uri.port)","http.use_ssl = true",`request = Net::HTTP::${t}.new(uri)`];for(let[r,o]of Object.entries(e.headers))n.push(`request['${r}'] = '${o}'`);return e.body!=null&&n.push(`request.body = ${Be(e.body,"")}.to_json`),n.push("","response = http.request(request)","puts response.body"),n.join(`
17
+ `)}function St(e,{server:t,languages:n=Ge}={}){let r=Zn(e,{server:t});return n.filter(o=>wt[o]).map(o=>({key:o,label:rr[o],language:or[o],code:wt[o](r)}))}var Be,wt,rr,or,Ge,kt=A(()=>{Be=(e,t)=>JSON.stringify(e,null,2).split(`
18
18
  `).map((n,r)=>r===0?n:t+n).join(`
19
- `);$t={curl:Zn,javascript:Qn,python:er,ruby:tr},nr={curl:"cURL",javascript:"JavaScript",python:"Python",ruby:"Ruby"},rr={curl:"bash",javascript:"javascript",python:"python",ruby:"ruby"},ze=["curl","javascript","python","ruby"]});import or from"node:path";function kt(e,t){if(!t||typeof t!="object")return e;let n=z(t);return{server:t.server!=null?n.server:e?.server??null,proxy:t.playground!=null?n.proxy:e?.proxy!==!1,languages:t.examples?.languages!=null?n.languages:e?.languages}}function ir(e,t){return/^https?:\/\//.test(e)?e:or.resolve(t,e.replace(/^\/+/,""))}function sr(e,{base:t,api:n,ops:r}){let o=n?.server,i=n?.languages||ze,a={proxy:n?.proxy!==!1,server:o??null},s=new Map;for(let p of e){let u=p.op.tags?.[0]||"API";s.has(u)||s.set(u,[]),s.get(u).push(p)}let l=[];for(let[p,u]of s){let c=u.map(({op:b,segment:d})=>{let $=`${t}/${Be(p)}/${b.id}`;return r[$]={operation:b,samples:wt(b,{server:o||b.servers?.[0],languages:i}),segment:d,title:b.title,description:b.description,method:b.method,api:a},{apiPage:$,label:b.title,method:b.method}});l.push({group:p,pages:c})}return l}async function jt(e,{targetDir:t,base:n,api:r,ops:o}){let i=Array.isArray(e)?e:[e],a=[];for(let s of i){let{operations:l,segments:p,servers:u}=await bt(ir(s,t));l.forEach((c,b)=>{!c.servers?.length&&u?.length&&(c.servers=u),a.push({op:c,segment:p[b]})})}return sr(a,{base:n,api:r,ops:o})}async function At(e,{targetDir:t,api:n,ops:r,baseHint:o}){if(!e||typeof e!="object")return e;if(typeof e.tab=="string"&&e.openapi){let a=Be(e.tab),s=kt(n,e.api),l=await jt(e.openapi,{targetDir:t,base:a,api:s,ops:r}),{openapi:p,api:u,...c}=e;return{...c,groups:[...c.groups||[],...l]}}if(typeof e.group=="string"&&e.openapi){let a=Be(e.group),s=kt(n,e.api),l=await jt(e.openapi,{targetDir:t,base:a,api:s,ops:r}),{openapi:p,api:u,...c}=e,b=l.flatMap(d=>d.pages);return{...c,pages:[...c.pages||[],...b]}}let i={...e};for(let a of["products","versions","languages","tabs","groups"])Array.isArray(e[a])&&(i[a]=await Promise.all(e[a].map(s=>At(s,{targetDir:t,api:n,ops:r,baseHint:o}))));return i}async function he(e,{targetDir:t,api:n}={}){let r={};return!e||typeof e!="object"?{nav:e,ops:r}:{nav:await At(e,{targetDir:t,api:n,ops:r}),ops:r}}var Be,Ge=j(()=>{Y();xt();St();Be=e=>String(e??"").replace(/\{[^}]+\}/g,t=>t.slice(1,-1)).replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase()||"x"});import ar from"node:fs";import se from"node:path";function Lt(e){return{name:"velu-site",resolveId(t){return t===Tt?Ot:null},async load(t){return t!==Ot?null:lr(e)}}}async function lr(e){let t={};try{t=JSON.parse(ar.readFileSync(se.join(e,"velu.json"),"utf-8"))}catch{}let n=z(t.api),r=t.navigation??{},o={};try{let x=await he(t.navigation??{},{targetDir:e,api:n});r=x.nav,o=x.ops}catch(x){console.warn(`[velu] openapi: ${x.message}`)}let i=U(r),{pageEntries:a,warnings:s}=M(i,e);for(let x of s)console.warn(`[velu] nav: ${x}`);let l=te(t.logo),p={name:t.name??se.basename(e),logo:l?{light:fe,dark:me,href:l.href,mono:l.light===l.dark}:null,footer:Fe(t.footer),navbar:Ne(t.navbar),contextual:lt(t.contextual),assistant:Ie(t.assistant)},u=[],c=[],b=0;for(let x of a){if(!x.exists)continue;let y=JSON.stringify(x.fileAbsPath.split(se.sep).join("/")),f=JSON.stringify(se.relative(e,x.fileAbsPath).split(se.sep).join("/")),g=`__p${b++}`;u.push(`import * as ${g} from ${y};`),c.push(` ${JSON.stringify(x.url)}: { Component: ${g}.default, frontmatter: ${g}.frontmatter, toc: ${g}.toc, relPath: ${f} },`)}let d=new Set(a.filter(x=>x.exists).map(x=>x.url));for(let x of a)!x.exists&&!d.has(x.url)&&c.push(` ${JSON.stringify(x.url)}: { missing: true },`);let $=[],m=[],L=[],h=!1,w=0;for(let x of K(i)){if(!x.node?.api)continue;let y=o[x.pagePath];if(!y)continue;h=!0;let f=`__op${w}`,g=`__samples${w}`,v=`__api${w}`;w+=1,$.push(`const ${f} = ${JSON.stringify(y.operation)};`),$.push(`const ${g} = ${JSON.stringify(y.samples)};`),L.push(`{ id: ${JSON.stringify(y.operation.id)}, method: ${JSON.stringify(y.operation.method)}, title: ${JSON.stringify(y.operation.title)}, url: ${JSON.stringify(x.url)}, operation: ${f}, samples: ${g}, api: ${JSON.stringify(y.api||{proxy:!0,server:null})} }`),m.push(`function ${v}(){ return React.createElement(ApiReferencePage, { operation: ${f}, samples: ${g}, apiOperations: __apiOperations, api: ${JSON.stringify(y.api||{proxy:!0,server:null})} }); }`),c.push(` ${JSON.stringify(x.url)}: { Component: ${v}, frontmatter: { title: ${JSON.stringify(y.title)}, description: ${JSON.stringify(y.description)} }, toc: [], operation: ${f}, samples: ${g}, api: true },`)}h&&($.push(`const __apiOperations = [
19
+ `);wt={curl:Qn,javascript:er,python:tr,ruby:nr},rr={curl:"cURL",javascript:"JavaScript",python:"Python",ruby:"Ruby"},or={curl:"bash",javascript:"javascript",python:"python",ruby:"ruby"},Ge=["curl","javascript","python","ruby"]});import ir from"node:path";function At(e,t){if(!t||typeof t!="object")return e;let n=z(t);return{server:t.server!=null?n.server:e?.server??null,proxy:t.playground!=null?n.proxy:e?.proxy!==!1,languages:t.examples?.languages!=null?n.languages:e?.languages}}function sr(e,t){return/^https?:\/\//.test(e)?e:ir.resolve(t,e.replace(/^\/+/,""))}function ar(e,{base:t,api:n,ops:r}){let o=n?.server,i=n?.languages||Ge,a={proxy:n?.proxy!==!1,server:o??null},s=new Map;for(let p of e){let u=p.op.tags?.[0]||"API";s.has(u)||s.set(u,[]),s.get(u).push(p)}let l=[];for(let[p,u]of s){let c=u.map(({op:b,segment:d})=>{let $=`${t}/${Je(p)}/${b.id}`;return r[$]={operation:b,samples:St(b,{server:o||b.servers?.[0],languages:i}),segment:d,title:b.title,description:b.description,method:b.method,api:a},{apiPage:$,label:b.title,method:b.method}});l.push({group:p,pages:c})}return l}async function jt(e,{targetDir:t,base:n,api:r,ops:o}){let i=Array.isArray(e)?e:[e],a=[];for(let s of i){let{operations:l,segments:p,servers:u}=await xt(sr(s,t));l.forEach((c,b)=>{!c.servers?.length&&u?.length&&(c.servers=u),a.push({op:c,segment:p[b]})})}return ar(a,{base:n,api:r,ops:o})}async function Ot(e,{targetDir:t,api:n,ops:r,baseHint:o}){if(!e||typeof e!="object")return e;if(typeof e.tab=="string"&&e.openapi){let a=Je(e.tab),s=At(n,e.api),l=await jt(e.openapi,{targetDir:t,base:a,api:s,ops:r}),{openapi:p,api:u,...c}=e;return{...c,groups:[...c.groups||[],...l]}}if(typeof e.group=="string"&&e.openapi){let a=Je(e.group),s=At(n,e.api),l=await jt(e.openapi,{targetDir:t,base:a,api:s,ops:r}),{openapi:p,api:u,...c}=e,b=l.flatMap(d=>d.pages);return{...c,pages:[...c.pages||[],...b]}}let i={...e};for(let a of["products","versions","languages","tabs","groups"])Array.isArray(e[a])&&(i[a]=await Promise.all(e[a].map(s=>Ot(s,{targetDir:t,api:n,ops:r,baseHint:o}))));return i}async function be(e,{targetDir:t,api:n}={}){let r={};return!e||typeof e!="object"?{nav:e,ops:r}:{nav:await Ot(e,{targetDir:t,api:n,ops:r}),ops:r}}var Je,Ve=A(()=>{Y();$t();kt();Je=e=>String(e??"").replace(/\{[^}]+\}/g,t=>t.slice(1,-1)).replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase()||"x"});import lr from"node:fs";import ce from"node:path";function Pt(e){return{name:"velu-site",resolveId(t){return t===Lt?Tt:null},async load(t){return t!==Tt?null:cr(e)}}}async function cr(e){let t={};try{t=JSON.parse(lr.readFileSync(ce.join(e,"velu.json"),"utf-8"))}catch{}let n=z(t.api),r=t.navigation??{},o={};try{let x=await be(t.navigation??{},{targetDir:e,api:n});r=x.nav,o=x.ops}catch(x){console.warn(`[velu] openapi: ${x.message}`)}let i=U(r),{pageEntries:a,warnings:s}=M(i,e);for(let x of s)console.warn(`[velu] nav: ${x}`);let l=oe(t.logo),p={name:t.name??ce.basename(e),logo:l?{light:ge,dark:he,href:l.href,mono:l.light===l.dark}:null,footer:te(t.footer),navbar:ne(t.navbar),contextual:Ne(t.contextual),assistant:re(t.assistant)},u=[],c=[],b=0;for(let x of a){if(!x.exists)continue;let y=JSON.stringify(x.fileAbsPath.split(ce.sep).join("/")),f=JSON.stringify(ce.relative(e,x.fileAbsPath).split(ce.sep).join("/")),g=`__p${b++}`;u.push(`import * as ${g} from ${y};`),c.push(` ${JSON.stringify(x.url)}: { Component: ${g}.default, frontmatter: ${g}.frontmatter, toc: ${g}.toc, relPath: ${f} },`)}let d=new Set(a.filter(x=>x.exists).map(x=>x.url));for(let x of a)!x.exists&&!d.has(x.url)&&c.push(` ${JSON.stringify(x.url)}: { missing: true },`);let $=[],m=[],L=[],h=!1,w=0;for(let x of K(i)){if(!x.node?.api)continue;let y=o[x.pagePath];if(!y)continue;h=!0;let f=`__op${w}`,g=`__samples${w}`,v=`__api${w}`;w+=1,$.push(`const ${f} = ${JSON.stringify(y.operation)};`),$.push(`const ${g} = ${JSON.stringify(y.samples)};`),L.push(`{ id: ${JSON.stringify(y.operation.id)}, method: ${JSON.stringify(y.operation.method)}, title: ${JSON.stringify(y.operation.title)}, url: ${JSON.stringify(x.url)}, operation: ${f}, samples: ${g}, api: ${JSON.stringify(y.api||{proxy:!0,server:null})} }`),m.push(`function ${v}(){ return React.createElement(ApiReferencePage, { operation: ${f}, samples: ${g}, apiOperations: __apiOperations, api: ${JSON.stringify(y.api||{proxy:!0,server:null})} }); }`),c.push(` ${JSON.stringify(x.url)}: { Component: ${v}, frontmatter: { title: ${JSON.stringify(y.title)}, description: ${JSON.stringify(y.description)} }, toc: [], operation: ${f}, samples: ${g}, api: true },`)}h&&($.push(`const __apiOperations = [
20
20
  ${L.join(`,
21
21
  `)}
22
22
  ];`),$.push(m.join(`
@@ -25,10 +25,10 @@ ${L.join(`,
25
25
  `),$.join(`
26
26
  `),"","export const pages = {",c.join(`
27
27
  `),"};",`export const navigation = ${JSON.stringify(i)};`,`export const site = ${JSON.stringify(p)};`,""].join(`
28
- `)}var Tt,Ot,Pt=j(()=>{B();oe();Y();Ge();Tt="virtual:velu-site",Ot="\0"+Tt});import{visit as cr}from"unist-util-visit";function ur(e,t){let n=_t(e).replace(/[?#].*$/,""),r=_t(t).replace(/\/+$/,"");return r&&n.toLowerCase().startsWith(r.toLowerCase())?n.slice(r.length).replace(/^\/+/,""):null}function Ct(e,t){return()=>(n,r)=>{typeof e=="function"&&cr(n,o=>{if(o.type!=="mdxJsxFlowElement"&&o.type!=="mdxJsxTextElement"||typeof o.name!="string"||!/^[A-Z]/.test(o.name)||o.name.includes("."))return;let i={};for(let s of o.attributes||[])s.type==="mdxJsxAttribute"&&(s.value==null?i[s.name]=!0:typeof s.value=="string"&&(i[s.name]=s.value));let a=e(o.name,i,{checkRequired:!1});if(a){let s=new Error(a.title);throw s.veluIssue={...a,file:ur(r?.path,t),line:o.position?.start?.line??null,column:o.position?.start?.column??null},s.loc={line:s.veluIssue.line,column:s.veluIssue.column},s}})}}var _t,Et=j(()=>{_t=e=>String(e||"").replace(/\\/g,"/")});import ye from"node:path";import pr from"node:fs";import{createRequire as fr}from"node:module";import mr from"@tailwindcss/vite";import dr from"@vitejs/plugin-react";import gr from"@mdx-js/rollup";import hr from"remark-frontmatter";import yr from"remark-mdx-frontmatter";import vr from"remark-gfm";import br from"rehype-slug";function xr(e){let n=fr(import.meta.url).resolve("@mdx-js/react"),r=ye.resolve(e,"runtime","velu-ui"),o=pr.existsSync(r)?r:ye.resolve(e,"..","velu-ui","src");return[{find:"@mdx-js/react",replacement:n},{find:/^velu-ui$/,replacement:ye.join(o,"index.js")},{find:/^velu-ui\//,replacement:o+"/"}]}function Ft({targetDir:e,VITE_ROOT:t,validateProps:n}){return{root:t,plugins:[Lt(e),gr({remarkPlugins:[hr,yr,vr,ne,Ct(n,e)],rehypePlugins:[br],providerImportSource:"@mdx-js/react"}),dr(),mr({optimize:!1})],cacheDir:ye.resolve(e,".velu","vite-cache"),optimizeDeps:{include:["react","react-dom","react-dom/client","react-router-dom","@mdx-js/react","lucide-react","prism-react-renderer","iso-639-1","github-slugger"],exclude:["tailwindcss","@tailwindcss/oxide","playwright","playwright-core","@apidevtools/swagger-parser","satori","@resvg/resvg-js","pagefind"],esbuildOptions:{loader:{".mdx":"jsx"}}},resolve:{alias:xr(t),dedupe:["react","react-dom","@mdx-js/react"]}}}var Nt=j(()=>{Ue();Pt();Et()});function A(e){return{category:"render-crash",severity:"error",file:null,line:null,column:null,frame:null,title:"Something went wrong",detail:"",hint:"",suggestion:null,...e}}function $r(e,t){if(e=String(e),t=String(t),e===t)return 0;if(!e.length)return t.length;if(!t.length)return e.length;let n=Array.from({length:t.length+1},(o,i)=>i),r=new Array(t.length+1);for(let o=1;o<=e.length;o++){r[0]=o;for(let i=1;i<=t.length;i++){let a=e[o-1]===t[i-1]?0:1;r[i]=Math.min(r[i-1]+1,n[i]+1,n[i-1]+a)}[n,r]=[r,n]}return n[t.length]}function ve(e,t=[]){if(!e)return null;let n=String(e).toLowerCase(),r=null,o=1/0;for(let a of t){let s=$r(n,String(a).toLowerCase());s<o&&(o=s,r=a)}let i=Math.min(3,Math.max(2,Math.floor(n.length/4)));return o<=i?r:null}function wr(e,t){return e==="warning"?E(t,C.yellow,"\u26A0"):e==="info"?E(t,C.cyan,"\u2139"):E(t,C.red,"\u2716")}function Ve(e,{color:t=!1}={}){let n=Je[e.category]||e.category,r=e.line?`${e.line}${e.column?`:${e.column}`:""}`:"",o=e.file?`${e.file}${r?`:${r}`:""}`:r,i=[];if(i.push(`${wr(e.severity,t)} ${E(t,C.bold,n)}`+(o?` ${E(t,C.dim,o)}`:"")),e.title&&i.push(` ${e.title}`),e.detail&&e.detail!==e.title&&i.push(` ${E(t,C.dim,e.detail)}`),e.frame)for(let a of String(e.frame).split(`
28
+ `)}var Lt,Tt,_t=A(()=>{B();ae();Y();Ve();Lt="virtual:velu-site",Tt="\0"+Lt});import{visit as ur}from"unist-util-visit";function pr(e,t){let n=Ct(e).replace(/[?#].*$/,""),r=Ct(t).replace(/\/+$/,"");return r&&n.toLowerCase().startsWith(r.toLowerCase())?n.slice(r.length).replace(/^\/+/,""):null}function Et(e,t){return()=>(n,r)=>{typeof e=="function"&&ur(n,o=>{if(o.type!=="mdxJsxFlowElement"&&o.type!=="mdxJsxTextElement"||typeof o.name!="string"||!/^[A-Z]/.test(o.name)||o.name.includes("."))return;let i={};for(let s of o.attributes||[])s.type==="mdxJsxAttribute"&&(s.value==null?i[s.name]=!0:typeof s.value=="string"&&(i[s.name]=s.value));let a=e(o.name,i,{checkRequired:!1});if(a){let s=new Error(a.title);throw s.veluIssue={...a,file:pr(r?.path,t),line:o.position?.start?.line??null,column:o.position?.start?.column??null},s.loc={line:s.veluIssue.line,column:s.veluIssue.column},s}})}}var Ct,Ft=A(()=>{Ct=e=>String(e||"").replace(/\\/g,"/")});import xe from"node:path";import fr from"node:fs";import{createRequire as mr}from"node:module";import dr from"@tailwindcss/vite";import gr from"@vitejs/plugin-react";import hr from"@mdx-js/rollup";import yr from"remark-frontmatter";import vr from"remark-mdx-frontmatter";import br from"remark-gfm";import xr from"rehype-slug";function $r(e){let n=mr(import.meta.url).resolve("@mdx-js/react"),r=xe.resolve(e,"runtime","velu-ui"),o=fr.existsSync(r)?r:xe.resolve(e,"..","velu-ui","src");return[{find:"@mdx-js/react",replacement:n},{find:/^velu-ui$/,replacement:xe.join(o,"index.js")},{find:/^velu-ui\//,replacement:o+"/"}]}function Nt({targetDir:e,VITE_ROOT:t,validateProps:n}){return{root:t,plugins:[Pt(e),hr({remarkPlugins:[yr,vr,br,ie,Et(n,e)],rehypePlugins:[xr],providerImportSource:"@mdx-js/react"}),gr(),dr({optimize:!1})],cacheDir:xe.resolve(e,".velu","vite-cache"),optimizeDeps:{include:["react","react-dom","react-dom/client","react-router-dom","@mdx-js/react","lucide-react","prism-react-renderer","iso-639-1","github-slugger"],exclude:["tailwindcss","@tailwindcss/oxide","playwright","playwright-core","@apidevtools/swagger-parser","satori","@resvg/resvg-js","pagefind"],esbuildOptions:{loader:{".mdx":"jsx"}}},resolve:{alias:$r(t),dedupe:["react","react-dom","@mdx-js/react"]}}}var It=A(()=>{ze();_t();Ft()});function j(e){return{category:"render-crash",severity:"error",file:null,line:null,column:null,frame:null,title:"Something went wrong",detail:"",hint:"",suggestion:null,...e}}function wr(e,t){if(e=String(e),t=String(t),e===t)return 0;if(!e.length)return t.length;if(!t.length)return e.length;let n=Array.from({length:t.length+1},(o,i)=>i),r=new Array(t.length+1);for(let o=1;o<=e.length;o++){r[0]=o;for(let i=1;i<=t.length;i++){let a=e[o-1]===t[i-1]?0:1;r[i]=Math.min(r[i-1]+1,n[i]+1,n[i-1]+a)}[n,r]=[r,n]}return n[t.length]}function $e(e,t=[]){if(!e)return null;let n=String(e).toLowerCase(),r=null,o=1/0;for(let a of t){let s=wr(n,String(a).toLowerCase());s<o&&(o=s,r=a)}let i=Math.min(3,Math.max(2,Math.floor(n.length/4)));return o<=i?r:null}function Sr(e,t){return e==="warning"?E(t,C.yellow,"\u26A0"):e==="info"?E(t,C.cyan,"\u2139"):E(t,C.red,"\u2716")}function He(e,{color:t=!1}={}){let n=qe[e.category]||e.category,r=e.line?`${e.line}${e.column?`:${e.column}`:""}`:"",o=e.file?`${e.file}${r?`:${r}`:""}`:r,i=[];if(i.push(`${Sr(e.severity,t)} ${E(t,C.bold,n)}`+(o?` ${E(t,C.dim,o)}`:"")),e.title&&i.push(` ${e.title}`),e.detail&&e.detail!==e.title&&i.push(` ${E(t,C.dim,e.detail)}`),e.frame)for(let a of String(e.frame).split(`
29
29
  `))i.push(` ${a}`);return e.suggestion&&i.push(` ${E(t,C.cyan,`Did you mean <${e.suggestion}>?`)}`),e.hint&&i.push(` ${E(t,C.dim,`\u2192 ${e.hint}`)}`),i.join(`
30
- `)}function be(e,{color:t=!1}={}){if(!e.length)return E(t,C.cyan,"\u2713 No issues found.");let n=new Map;for(let s of e){let l=s.file||"velu.json";n.has(l)||n.set(l,[]),n.get(l).push(s)}let r=[];for(let[s,l]of n){r.push(E(t,C.bold,s));for(let p of l)r.push(Ve({...p,file:null},{color:t}).replace(/^/gm," "));r.push("")}let o=e.filter(s=>s.severity!=="warning"&&s.severity!=="info").length,i=e.length-o,a=`${o} error${o===1?"":"s"}`+(i?`, ${i} warning${i===1?"":"s"}`:"");return r.push(E(t,o?C.red:C.yellow,a)),r.join(`
31
- `)}var Je,C,E,J=j(()=>{Je={"mdx-syntax":"MDX syntax",frontmatter:"Frontmatter","unknown-component":"Unknown component","invalid-props":"Invalid options","render-crash":"Render error","config-json":"velu.json","config-schema":"velu.json","config-nav":"Navigation","config-asset":"Asset"};C={reset:"\x1B[0m",red:"\x1B[31m",yellow:"\x1B[33m",cyan:"\x1B[36m",dim:"\x1B[2m",bold:"\x1B[1m"},E=(e,t,n)=>e?`${t}${n}${C.reset}`:n});function Sr(e){let t=e,n=0;for(;t&&t.cause&&n<3&&!(t.loc||t.line||/`[^`]+` to be defined/.test(t.message||""));)t=t.cause,n+=1;return t||e}function qe(e,t){if(!e)return null;let n=It(e).replace(/[?#].*$/,""),r=t?It(t).replace(/\/+$/,""):"";return r&&n.toLowerCase().startsWith(r.toLowerCase())?n.slice(r.length).replace(/^\/+/,""):!/^([a-zA-Z]:\/|\/)/.test(n)&&!/node_modules/.test(n)?n:null}function kr(e){return e?String(e).replace(/([a-zA-Z]:\\|\/)[^\s'"()]+/g,t=>/node_modules|[\\/]vite[\\/]|@veluai|velu-cli|velu-ui/.test(t)?"\u2026":t).trim():""}function jr(e){let t=/\((\d+):(\d+)(?:-\d+:\d+)?\)\s*$/.exec(String(e||""));return t?{line:Number(t[1]),column:Number(t[2])}:null}function Ar(e){return String(e||"").replace(/\s*\(\d+:\d+(?:-\d+:\d+)?\)\s*$/,"").trim()}function Tr(e,t){if(!e||!t)return null;let n=String(e);return/node_modules|[\\/]vite[\\/]|@veluai[\\/]/.test(n)?null:n}function ae(e,t={}){let{projectDir:n="",knownComponents:r=[],file:o=null}=t,i=null;for(let h=e,w=0;h&&w<6;h=h.cause,w+=1)if(h.veluIssue){i=h.veluIssue;break}if(i)return A({...i,file:i.file||o});let a=Sr(e)||{},s=a.message||String(e||""),l=/Expected component `([^`]+)` to be defined/.exec(s);if(l){let h=l[1],w=/referenced in your code at `(\d+):(\d+)/.exec(s),F=/\bin `([^`]+)`/.exec(s),x=F?qe(F[1],n):null;return A({category:"unknown-component",file:x||o,line:w?Number(w[1]):null,column:w?Number(w[2]):null,title:`<${h}> is not a built-in component`,detail:"",hint:"Components are built in \u2014 check the spelling and capitalization (you don\u2019t import them).",suggestion:ve(h,r)})}let p=a.loc||(a.line!=null?{line:a.line,column:a.column,file:a.file}:null)||jr(a.reason||s),u=a.id||p&&p.file||a.file||null,c=qe(u,n)||o,b=!!c&&qe(u,n)!=null,d=Tr(a.frame,b||!!o),$=kr(Ar(a.reason||s)),m=Or.test(s),L=a.source==="remark-frontmatter"||/\byaml\b|frontmatter/i.test(s)||p&&p.line===1&&/unexpected|expected/i.test(s)&&/---/.test(s);return p||m||d&&b?A({category:L?"frontmatter":"mdx-syntax",file:c,line:p?p.line:null,column:p?p.column:null,frame:d,title:$||(L?"Invalid frontmatter":"MDX syntax error"),detail:"",hint:L?"Check the YAML between the --- markers \u2014 indentation, quotes, and colons.":"Make sure every <Component> has a matching closing tag and that { } braces are balanced."}):/\.map is not a function|is not iterable|reading '|undefined \(reading/i.test(s)?A({category:"invalid-props",file:c,title:"A component received an invalid value",detail:$,hint:"Check the props/options you passed to a component on this page."}):A({category:"render-crash",file:c,title:"This page failed to render",detail:$,hint:"Set VELU_DEBUG=1 for the full stack trace."})}var It,Or,He=j(()=>{J();It=e=>String(e).replace(/\\/g,"/");Or=/closing tag|unexpected closing|could not parse (?:expression|import|export)|unexpected character|unexpected end of|expected a closing|expected the closing|unexpected `|in expression|misnested|before name/i});function Lr(e){let t=Je[e.category]||e.category,n=e.file?`${e.file}${e.line?`:${e.line}${e.column?`:${e.column}`:""}`:""}`:"",r=[];return r.push('<div class="velu-err-card">'),r.push('<div class="velu-err-head">'),r.push(`<span class="velu-err-pill">${I(t)}</span>`),r.push("</div>"),e.title&&r.push(`<div class="velu-err-title">${I(e.title)}</div>`),n&&r.push(`<a class="velu-err-loc" title="${I(n)}">${I(n)}</a>`),e.detail&&r.push(`<div class="velu-err-detail">${I(e.detail)}</div>`),e.frame&&r.push(`<pre class="velu-err-frame">${I(e.frame)}</pre>`),e.suggestion&&r.push(`<div class="velu-err-suggest">Did you mean <code>&lt;${I(e.suggestion)}&gt;</code>?</div>`),e.hint&&r.push(`<div class="velu-err-hint">${I(e.hint)}</div>`),r.push("</div>"),r.join("")}function De(e,t={}){let n=Array.isArray(e)?e:[e],r=t.title||(n.length>1?`${n.length} problems to fix`:"There\u2019s a problem to fix"),o=n.map(Lr).join(`
30
+ `)}function we(e,{color:t=!1}={}){if(!e.length)return E(t,C.cyan,"\u2713 No issues found.");let n=new Map;for(let s of e){let l=s.file||"velu.json";n.has(l)||n.set(l,[]),n.get(l).push(s)}let r=[];for(let[s,l]of n){r.push(E(t,C.bold,s));for(let p of l)r.push(He({...p,file:null},{color:t}).replace(/^/gm," "));r.push("")}let o=e.filter(s=>s.severity!=="warning"&&s.severity!=="info").length,i=e.length-o,a=`${o} error${o===1?"":"s"}`+(i?`, ${i} warning${i===1?"":"s"}`:"");return r.push(E(t,o?C.red:C.yellow,a)),r.join(`
31
+ `)}var qe,C,E,J=A(()=>{qe={"mdx-syntax":"MDX syntax",frontmatter:"Frontmatter","unknown-component":"Unknown component","invalid-props":"Invalid options","render-crash":"Render error","config-json":"velu.json","config-schema":"velu.json","config-nav":"Navigation","config-asset":"Asset"};C={reset:"\x1B[0m",red:"\x1B[31m",yellow:"\x1B[33m",cyan:"\x1B[36m",dim:"\x1B[2m",bold:"\x1B[1m"},E=(e,t,n)=>e?`${t}${n}${C.reset}`:n});function kr(e){let t=e,n=0;for(;t&&t.cause&&n<3&&!(t.loc||t.line||/`[^`]+` to be defined/.test(t.message||""));)t=t.cause,n+=1;return t||e}function De(e,t){if(!e)return null;let n=Rt(e).replace(/[?#].*$/,""),r=t?Rt(t).replace(/\/+$/,""):"";return r&&n.toLowerCase().startsWith(r.toLowerCase())?n.slice(r.length).replace(/^\/+/,""):!/^([a-zA-Z]:\/|\/)/.test(n)&&!/node_modules/.test(n)?n:null}function Ar(e){return e?String(e).replace(/([a-zA-Z]:\\|\/)[^\s'"()]+/g,t=>/node_modules|[\\/]vite[\\/]|@veluai|velu-cli|velu-ui/.test(t)?"\u2026":t).trim():""}function jr(e){let t=/\((\d+):(\d+)(?:-\d+:\d+)?\)\s*$/.exec(String(e||""));return t?{line:Number(t[1]),column:Number(t[2])}:null}function Or(e){return String(e||"").replace(/\s*\(\d+:\d+(?:-\d+:\d+)?\)\s*$/,"").trim()}function Lr(e,t){if(!e||!t)return null;let n=String(e);return/node_modules|[\\/]vite[\\/]|@veluai[\\/]/.test(n)?null:n}function ue(e,t={}){let{projectDir:n="",knownComponents:r=[],file:o=null}=t,i=null;for(let h=e,w=0;h&&w<6;h=h.cause,w+=1)if(h.veluIssue){i=h.veluIssue;break}if(i)return j({...i,file:i.file||o});let a=kr(e)||{},s=a.message||String(e||""),l=/Expected component `([^`]+)` to be defined/.exec(s);if(l){let h=l[1],w=/referenced in your code at `(\d+):(\d+)/.exec(s),F=/\bin `([^`]+)`/.exec(s),x=F?De(F[1],n):null;return j({category:"unknown-component",file:x||o,line:w?Number(w[1]):null,column:w?Number(w[2]):null,title:`<${h}> is not a built-in component`,detail:"",hint:"Components are built in \u2014 check the spelling and capitalization (you don\u2019t import them).",suggestion:$e(h,r)})}let p=a.loc||(a.line!=null?{line:a.line,column:a.column,file:a.file}:null)||jr(a.reason||s),u=a.id||p&&p.file||a.file||null,c=De(u,n)||o,b=!!c&&De(u,n)!=null,d=Lr(a.frame,b||!!o),$=Ar(Or(a.reason||s)),m=Tr.test(s),L=a.source==="remark-frontmatter"||/\byaml\b|frontmatter/i.test(s)||p&&p.line===1&&/unexpected|expected/i.test(s)&&/---/.test(s);return p||m||d&&b?j({category:L?"frontmatter":"mdx-syntax",file:c,line:p?p.line:null,column:p?p.column:null,frame:d,title:$||(L?"Invalid frontmatter":"MDX syntax error"),detail:"",hint:L?"Check the YAML between the --- markers \u2014 indentation, quotes, and colons.":"Make sure every <Component> has a matching closing tag and that { } braces are balanced."}):/\.map is not a function|is not iterable|reading '|undefined \(reading/i.test(s)?j({category:"invalid-props",file:c,title:"A component received an invalid value",detail:$,hint:"Check the props/options you passed to a component on this page."}):j({category:"render-crash",file:c,title:"This page failed to render",detail:$,hint:"Set VELU_DEBUG=1 for the full stack trace."})}var Rt,Tr,Xe=A(()=>{J();Rt=e=>String(e).replace(/\\/g,"/");Tr=/closing tag|unexpected closing|could not parse (?:expression|import|export)|unexpected character|unexpected end of|expected a closing|expected the closing|unexpected `|in expression|misnested|before name/i});function Pr(e){let t=qe[e.category]||e.category,n=e.file?`${e.file}${e.line?`:${e.line}${e.column?`:${e.column}`:""}`:""}`:"",r=[];return r.push('<div class="velu-err-card">'),r.push('<div class="velu-err-head">'),r.push(`<span class="velu-err-pill">${I(t)}</span>`),r.push("</div>"),e.title&&r.push(`<div class="velu-err-title">${I(e.title)}</div>`),n&&r.push(`<a class="velu-err-loc" title="${I(n)}">${I(n)}</a>`),e.detail&&r.push(`<div class="velu-err-detail">${I(e.detail)}</div>`),e.frame&&r.push(`<pre class="velu-err-frame">${I(e.frame)}</pre>`),e.suggestion&&r.push(`<div class="velu-err-suggest">Did you mean <code>&lt;${I(e.suggestion)}&gt;</code>?</div>`),e.hint&&r.push(`<div class="velu-err-hint">${I(e.hint)}</div>`),r.push("</div>"),r.join("")}function Ye(e,t={}){let n=Array.isArray(e)?e:[e],r=t.title||(n.length>1?`${n.length} problems to fix`:"There\u2019s a problem to fix"),o=n.map(Pr).join(`
32
32
  `);return`<!doctype html>
33
33
  <html lang="en">
34
34
  <head>
@@ -100,21 +100,21 @@ ${L.join(`,
100
100
  <div class="velu-err-foot">Fix the file and save \u2014 this page reloads automatically.</div>
101
101
  </div>
102
102
  </body>
103
- </html>`}var I,Rt=j(()=>{J();I=e=>String(e??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")});var V,Xe=j(()=>{V=["Callout","Card","CardGroup","Accordion","AccordionGroup","Columns","Field","Prompt","Steps","Step","Tree","Folder","File","Image","CodeBlock","CodeGroup","MethodBadge","ApiPath","TryItBar","ApiField","ApiClient","ApiSidebar"]});import xe from"node:fs";import ce from"node:path";import{fileURLToPath as Pr}from"node:url";import _r from"iso-639-1";function le(e,t){if(!t)return null;let n=e.indexOf(`"${t}"`);return n===-1?null:e.slice(0,n).split(`
104
- `).length}function Fr(e,t){return t==null||t<0?null:e.slice(0,t).split(`
105
- `).length}function Ye(e,t){if(!t)return null;let n=e.indexOf(`"${t}"`);return n===-1?null:e.slice(0,n).split(`
106
- `).length}function Nr(e,t,n){let r=[];return s(e,t,"",null),r;function o(l){if(l&&l.$ref){let p=l.$ref.replace(/^#\//,"").split("/"),u=n;for(let c of p)u=u?.[c];return u||{}}return l}function i(l){return Array.isArray(l)?"array":l===null?"null":typeof l}function a(l,p){let u=r.length;s(l,p,"",null,!0);let c=r.length===u;return c||(r.length=u),c}function s(l,p,u,c,b){let d=o(p);if(d){if(d.oneOf){d.oneOf.some(m=>a(l,m))||r.push({path:u,key:c,message:"value does not match any allowed shape"});return}if(d.type&&i(l)!==d.type){r.push({path:u,key:c,message:`expected ${d.type}, got ${i(l)}`});return}if(d.type==="string"&&d.minLength!=null&&l.length<d.minLength&&r.push({path:u,key:c,message:"must not be empty"}),d.type==="object"&&i(l)==="object"){for(let m of d.required||[])m in l||r.push({path:u?`${u}.${m}`:m,key:m,message:`missing required "${m}"`});let $=d.properties||{};if(d.additionalProperties===!1)for(let m of Object.keys(l))m in $||r.push({path:u?`${u}.${m}`:m,key:m,message:`unknown field "${m}"`});for(let[m,L]of Object.entries($))m in l&&s(l[m],L,u?`${u}.${m}`:m,m,b)}d.type==="array"&&Array.isArray(l)&&d.items&&l.forEach(($,m)=>s($,d.items,`${u}[${m}]`,c,b))}}}function Ir(e){if(typeof e!="string")return!1;let t=e.trim();return/^#([0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(t)||/^(rgb|rgba|hsl|hsla|color|oklch|lab|lch)\(/i.test(t)||/^[a-z][a-z0-9-]*$/i.test(t)}function $e(e){let t=[],n=ce.join(e,"velu.json"),r;try{r=xe.readFileSync(n,"utf-8")}catch(s){return s.code==="ENOENT"?t.push(A({category:"config-json",file:"velu.json",title:"No velu.json found",hint:"Run `velu init <name>` to scaffold a project."})):t.push(A({category:"config-json",file:"velu.json",title:"Could not read velu.json"})),t}let o;try{o=JSON.parse(r)}catch(s){let l=/position (\d+)/.exec(s.message||""),p=l?Fr(r,Number(l[1])):null;return t.push(A({category:"config-json",file:"velu.json",line:p,title:"velu.json is not valid JSON",detail:String(s.message||"").replace(/\s+in JSON.*$/,""),hint:"Check for a trailing comma, a missing quote, or an unclosed brace."})),t}let i=null;try{i=JSON.parse(xe.readFileSync(Er,"utf-8"))}catch{}if(i)for(let s of Nr(o,i,i)){let l=/^unknown field/.test(s.message);t.push(A({category:"config-schema",severity:l?"warning":"error",file:"velu.json",line:le(r,s.key),title:s.path?`${s.path}: ${s.message}`:s.message,hint:l?"Remove it, or check the spelling against the velu.json schema.":""}))}for(let s of["primary","light","dark"]){let l=o.colors?.[s];l!=null&&!Ir(l)&&t.push(A({category:"config-schema",severity:"warning",file:"velu.json",line:le(r,s),title:`colors.${s}: "${l}" doesn\u2019t look like a CSS color`,hint:"Use a hex value like #dc143c, an rgb()/hsl() function, or a CSS color name."}))}if(typeof o.favicon=="string"&&o.favicon.trim()){let s=ce.resolve(e,o.favicon.replace(/^\/+/,""));xe.existsSync(s)||t.push(A({category:"config-asset",file:"velu.json",line:le(r,"favicon"),title:`favicon not found: ${o.favicon}`,hint:"The path is relative to the project root."}))}let a=te(o.logo);if(a){let s=new Map;for(let l of["light","dark"]){let p=a[l];p&&s.set(p,[...s.get(p)||[],l])}for(let[l,p]of s)if(!xe.existsSync(ce.resolve(e,l.replace(/^\/+/,"")))){let u=p.length===2?"logo":`logo (${p[0]})`;t.push(A({category:"config-asset",file:"velu.json",line:Ye(r,l),title:`${u} not found: ${l}`,hint:"The path is relative to the project root."}))}}if(o.navigation&&typeof o.navigation=="object"){let s;try{s=U(o.navigation)}catch(l){t.push(A({category:"config-nav",file:"velu.json",line:le(r,"navigation"),title:"navigation could not be processed",detail:String(l.message||"")})),s=null}if(s){let{pageEntries:l,warnings:p}=M(s,e);for(let u of p){let c=/not found$/.test(u),b=/page "([^"]+)"/.exec(u),d=b?Ye(r,b[1]):null;t.push(A({category:"config-nav",severity:c?"error":"warning",file:"velu.json",line:d,title:u,hint:c?"Create the .mdx file, or remove the page from navigation.":""}))}Rr(s,r,t)}}return t}function Rr(e,t,n){let r=new Set,o=i=>{if(!(!i||typeof i!="object")){if(i.language&&!r.has(i.language)){r.add(i.language);let a=String(i.language).toLowerCase();_r.validate(a)||n.push(A({category:"config-nav",severity:"warning",file:"velu.json",line:Ye(t,i.language)||le(t,"language"),title:`"${i.language}" is not a valid ISO 639-1 language code`,hint:'Use a two-letter code like "en", "fr", or "ja".'}))}for(let a of Object.values(i))Array.isArray(a)?a.forEach(o):a&&typeof a=="object"&&o(a)}};o(e)}var Cr,Er,Ke=j(()=>{J();B();oe();Y();Cr=ce.dirname(Pr(import.meta.url)),Er=ce.resolve(Cr,"..","..","schema","velu.schema.json")});import Ur from"node:fs/promises";import Mr from"node:fs";import q from"node:path";import{fileURLToPath as zr,pathToFileURL as Br}from"node:url";import{compile as Gr}from"@mdx-js/mdx";import Jr from"remark-frontmatter";import Vr from"remark-mdx-frontmatter";import qr from"remark-gfm";import Hr from"rehype-slug";import{visit as Dr}from"unist-util-visit";function We(){if(we)return we;let e=q.dirname(zr(import.meta.url)),t=[q.resolve(e,"..","runtime","velu-ui"),q.resolve(e,"..","..","runtime","velu-ui"),q.resolve(e,"..","..","..","velu-ui","src")],n=null;for(let r of t){let o=q.join(r,"lib","component-schemas.js");if(Mr.existsSync(o)){n=o;break}}return we=n?import(Br(n).href).then(r=>r.validateProps).catch(()=>null):Promise.resolve(null),we}function Xr(e){let t={};for(let n of e.attributes||[])n.type==="mdxJsxAttribute"&&(n.value==null?t[n.name]=!0:typeof n.value=="string"&&(t[n.name]=n.value));return t}function Yr(e,t){return()=>n=>{Dr(n,r=>{if((r.type==="mdxJsxFlowElement"||r.type==="mdxJsxTextElement")&&typeof r.name=="string"&&/^[A-Z]/.test(r.name)&&!r.name.includes(".")&&e.push({name:r.name,props:Xr(r),line:r.position?.start?.line??null,column:r.position?.start?.column??null}),r.type==="mdxjsEsm"&&typeof r.value=="string")for(let o of r.value.matchAll(/\b([A-Z][A-Za-z0-9_]*)\b/g))t.add(o[1])})}}async function Kr(e,t){let n=[],r;try{r=await Ur.readFile(t.fileAbsPath,"utf-8")}catch{return n}let o=q.relative(e,t.fileAbsPath).split(q.sep).join("/"),i=[],a=new Set;try{await Gr({value:r,path:t.fileAbsPath},{remarkPlugins:[Jr,Vr,qr,ne,Yr(i,a)],rehypePlugins:[Hr],providerImportSource:"@mdx-js/react"})}catch(u){return n.push(ae(u,{projectDir:e,knownComponents:V,file:o})),n}let s=new Set(V),l=await We(),p=new Set;for(let u of i)if(!a.has(u.name)){if(!s.has(u.name)){if(p.has(u.name))continue;p.add(u.name),n.push(A({category:"unknown-component",file:o,line:u.line,column:u.column,title:`<${u.name}> is not a built-in component`,hint:"Components are built in \u2014 check the spelling and capitalization (you don\u2019t import them).",suggestion:ve(u.name,V)}));continue}if(l){let c=l(u.name,u.props,{checkRequired:!1});c&&n.push(A({...c,file:o,line:u.line,column:u.column}))}}return n}async function Ut(e,t){let n=t.filter(s=>s.exists),r=[],o=8,i=0;async function a(){for(;i<n.length;){let s=n[i++],l=await Kr(e,s);for(let p of l)r.push(p)}}return await Promise.all(Array.from({length:Math.min(o,n.length)},a)),r}var we,Ze=j(()=>{Ue();J();He();Xe()});import Se from"node:fs";import Qe from"node:path";import Bt from"js-yaml";function et(e,t,n){if(n>24||e===null||typeof e!="object")return n>24&&e&&typeof e=="object"?null:e;if(t.has(e))return null;t.add(e);let r;if(Array.isArray(e))r=e.map(o=>et(o,t,n+1));else{r={};for(let[o,i]of Object.entries(e))r[o]=et(i,t,n+1)}return t.delete(e),r}function Gt(e){return Bt.dump(et(e,new Set,0),{noRefs:!0,lineWidth:100,skipInvalid:!0})}function Jt(e){let t=String(e).replace(/\.md$/i,"");return t===""||t==="/"||t==="/index"?"/":t.replace(/\/+$/,"")||"/"}function Wr(e){return e==="/"?"/index.md":`${e}.md`}function tt(e,t){if(t==="api")return`# ${Mt}
107
- ${e}`;let n=e.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n/),r=`> ${Mt}
103
+ </html>`}var I,Ut=A(()=>{J();I=e=>String(e??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")});var V,Ke=A(()=>{V=["Callout","Card","CardGroup","Accordion","AccordionGroup","Columns","Field","Prompt","Steps","Step","Tree","Folder","File","Image","CodeBlock","CodeGroup","MethodBadge","ApiPath","TryItBar","ApiField","ApiClient","ApiSidebar"]});import Se from"node:fs";import fe from"node:path";import{fileURLToPath as _r}from"node:url";import Cr from"iso-639-1";function pe(e,t){if(!t)return null;let n=e.indexOf(`"${t}"`);return n===-1?null:e.slice(0,n).split(`
104
+ `).length}function Nr(e,t){return t==null||t<0?null:e.slice(0,t).split(`
105
+ `).length}function We(e,t){if(!t)return null;let n=e.indexOf(`"${t}"`);return n===-1?null:e.slice(0,n).split(`
106
+ `).length}function Ir(e,t,n){let r=[];return s(e,t,"",null),r;function o(l){if(l&&l.$ref){let p=l.$ref.replace(/^#\//,"").split("/"),u=n;for(let c of p)u=u?.[c];return u||{}}return l}function i(l){return Array.isArray(l)?"array":l===null?"null":typeof l}function a(l,p){let u=r.length;s(l,p,"",null,!0);let c=r.length===u;return c||(r.length=u),c}function s(l,p,u,c,b){let d=o(p);if(d){if(d.oneOf){d.oneOf.some(m=>a(l,m))||r.push({path:u,key:c,message:"value does not match any allowed shape"});return}if(d.type&&i(l)!==d.type){r.push({path:u,key:c,message:`expected ${d.type}, got ${i(l)}`});return}if(d.type==="string"&&d.minLength!=null&&l.length<d.minLength&&r.push({path:u,key:c,message:"must not be empty"}),d.type==="object"&&i(l)==="object"){for(let m of d.required||[])m in l||r.push({path:u?`${u}.${m}`:m,key:m,message:`missing required "${m}"`});let $=d.properties||{};if(d.additionalProperties===!1)for(let m of Object.keys(l))m in $||r.push({path:u?`${u}.${m}`:m,key:m,message:`unknown field "${m}"`});for(let[m,L]of Object.entries($))m in l&&s(l[m],L,u?`${u}.${m}`:m,m,b)}d.type==="array"&&Array.isArray(l)&&d.items&&l.forEach(($,m)=>s($,d.items,`${u}[${m}]`,c,b))}}}function Rr(e){if(typeof e!="string")return!1;let t=e.trim();return/^#([0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(t)||/^(rgb|rgba|hsl|hsla|color|oklch|lab|lch)\(/i.test(t)||/^[a-z][a-z0-9-]*$/i.test(t)}function ke(e){let t=[],n=fe.join(e,"velu.json"),r;try{r=Se.readFileSync(n,"utf-8")}catch(s){return s.code==="ENOENT"?t.push(j({category:"config-json",file:"velu.json",title:"No velu.json found",hint:"Run `velu init <name>` to scaffold a project."})):t.push(j({category:"config-json",file:"velu.json",title:"Could not read velu.json"})),t}let o;try{o=JSON.parse(r)}catch(s){let l=/position (\d+)/.exec(s.message||""),p=l?Nr(r,Number(l[1])):null;return t.push(j({category:"config-json",file:"velu.json",line:p,title:"velu.json is not valid JSON",detail:String(s.message||"").replace(/\s+in JSON.*$/,""),hint:"Check for a trailing comma, a missing quote, or an unclosed brace."})),t}let i=null;try{i=JSON.parse(Se.readFileSync(Fr,"utf-8"))}catch{}if(i)for(let s of Ir(o,i,i)){let l=/^unknown field/.test(s.message);t.push(j({category:"config-schema",severity:l?"warning":"error",file:"velu.json",line:pe(r,s.key),title:s.path?`${s.path}: ${s.message}`:s.message,hint:l?"Remove it, or check the spelling against the velu.json schema.":""}))}for(let s of["primary","light","dark"]){let l=o.colors?.[s];l!=null&&!Rr(l)&&t.push(j({category:"config-schema",severity:"warning",file:"velu.json",line:pe(r,s),title:`colors.${s}: "${l}" doesn\u2019t look like a CSS color`,hint:"Use a hex value like #dc143c, an rgb()/hsl() function, or a CSS color name."}))}if(typeof o.favicon=="string"&&o.favicon.trim()){let s=fe.resolve(e,o.favicon.replace(/^\/+/,""));Se.existsSync(s)||t.push(j({category:"config-asset",file:"velu.json",line:pe(r,"favicon"),title:`favicon not found: ${o.favicon}`,hint:"The path is relative to the project root."}))}let a=oe(o.logo);if(a){let s=new Map;for(let l of["light","dark"]){let p=a[l];p&&s.set(p,[...s.get(p)||[],l])}for(let[l,p]of s)if(!Se.existsSync(fe.resolve(e,l.replace(/^\/+/,"")))){let u=p.length===2?"logo":`logo (${p[0]})`;t.push(j({category:"config-asset",file:"velu.json",line:We(r,l),title:`${u} not found: ${l}`,hint:"The path is relative to the project root."}))}}if(o.navigation&&typeof o.navigation=="object"){let s;try{s=U(o.navigation)}catch(l){t.push(j({category:"config-nav",file:"velu.json",line:pe(r,"navigation"),title:"navigation could not be processed",detail:String(l.message||"")})),s=null}if(s){let{pageEntries:l,warnings:p}=M(s,e);for(let u of p){let c=/not found$/.test(u),b=/page "([^"]+)"/.exec(u),d=b?We(r,b[1]):null;t.push(j({category:"config-nav",severity:c?"error":"warning",file:"velu.json",line:d,title:u,hint:c?"Create the .mdx file, or remove the page from navigation.":""}))}Ur(s,r,t)}}return t}function Ur(e,t,n){let r=new Set,o=i=>{if(!(!i||typeof i!="object")){if(i.language&&!r.has(i.language)){r.add(i.language);let a=String(i.language).toLowerCase();Cr.validate(a)||n.push(j({category:"config-nav",severity:"warning",file:"velu.json",line:We(t,i.language)||pe(t,"language"),title:`"${i.language}" is not a valid ISO 639-1 language code`,hint:'Use a two-letter code like "en", "fr", or "ja".'}))}for(let a of Object.values(i))Array.isArray(a)?a.forEach(o):a&&typeof a=="object"&&o(a)}};o(e)}var Er,Fr,Ze=A(()=>{J();B();ae();Y();Er=fe.dirname(_r(import.meta.url)),Fr=fe.resolve(Er,"..","..","schema","velu.schema.json")});import Mr from"node:fs/promises";import zr from"node:fs";import q from"node:path";import{fileURLToPath as Br,pathToFileURL as Gr}from"node:url";import{compile as Jr}from"@mdx-js/mdx";import Vr from"remark-frontmatter";import qr from"remark-mdx-frontmatter";import Hr from"remark-gfm";import Dr from"rehype-slug";import{visit as Xr}from"unist-util-visit";function Qe(){if(Ae)return Ae;let e=q.dirname(Br(import.meta.url)),t=[q.resolve(e,"..","runtime","velu-ui"),q.resolve(e,"..","..","runtime","velu-ui"),q.resolve(e,"..","..","..","velu-ui","src")],n=null;for(let r of t){let o=q.join(r,"lib","component-schemas.js");if(zr.existsSync(o)){n=o;break}}return Ae=n?import(Gr(n).href).then(r=>r.validateProps).catch(()=>null):Promise.resolve(null),Ae}function Yr(e){let t={};for(let n of e.attributes||[])n.type==="mdxJsxAttribute"&&(n.value==null?t[n.name]=!0:typeof n.value=="string"&&(t[n.name]=n.value));return t}function Kr(e,t){return()=>n=>{Xr(n,r=>{if((r.type==="mdxJsxFlowElement"||r.type==="mdxJsxTextElement")&&typeof r.name=="string"&&/^[A-Z]/.test(r.name)&&!r.name.includes(".")&&e.push({name:r.name,props:Yr(r),line:r.position?.start?.line??null,column:r.position?.start?.column??null}),r.type==="mdxjsEsm"&&typeof r.value=="string")for(let o of r.value.matchAll(/\b([A-Z][A-Za-z0-9_]*)\b/g))t.add(o[1])})}}async function Wr(e,t){let n=[],r;try{r=await Mr.readFile(t.fileAbsPath,"utf-8")}catch{return n}let o=q.relative(e,t.fileAbsPath).split(q.sep).join("/"),i=[],a=new Set;try{await Jr({value:r,path:t.fileAbsPath},{remarkPlugins:[Vr,qr,Hr,ie,Kr(i,a)],rehypePlugins:[Dr],providerImportSource:"@mdx-js/react"})}catch(u){return n.push(ue(u,{projectDir:e,knownComponents:V,file:o})),n}let s=new Set(V),l=await Qe(),p=new Set;for(let u of i)if(!a.has(u.name)){if(!s.has(u.name)){if(p.has(u.name))continue;p.add(u.name),n.push(j({category:"unknown-component",file:o,line:u.line,column:u.column,title:`<${u.name}> is not a built-in component`,hint:"Components are built in \u2014 check the spelling and capitalization (you don\u2019t import them).",suggestion:$e(u.name,V)}));continue}if(l){let c=l(u.name,u.props,{checkRequired:!1});c&&n.push(j({...c,file:o,line:u.line,column:u.column}))}}return n}async function Mt(e,t){let n=t.filter(s=>s.exists),r=[],o=8,i=0;async function a(){for(;i<n.length;){let s=n[i++],l=await Wr(e,s);for(let p of l)r.push(p)}}return await Promise.all(Array.from({length:Math.min(o,n.length)},a)),r}var Ae,et=A(()=>{ze();J();Xe();Ke()});import je from"node:fs";import tt from"node:path";import Gt from"js-yaml";function nt(e,t,n){if(n>24||e===null||typeof e!="object")return n>24&&e&&typeof e=="object"?null:e;if(t.has(e))return null;t.add(e);let r;if(Array.isArray(e))r=e.map(o=>nt(o,t,n+1));else{r={};for(let[o,i]of Object.entries(e))r[o]=nt(i,t,n+1)}return t.delete(e),r}function Jt(e){return Gt.dump(nt(e,new Set,0),{noRefs:!0,lineWidth:100,skipInvalid:!0})}function Vt(e){let t=String(e).replace(/\.md$/i,"");return t===""||t==="/"||t==="/index"?"/":t.replace(/\/+$/,"")||"/"}function Zr(e){return e==="/"?"/index.md":`${e}.md`}function rt(e,t){if(t==="api")return`# ${zt}
107
+ ${e}`;let n=e.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n/),r=`> ${zt}
108
108
 
109
- `;return n?e.slice(0,n[0].length)+r+e.slice(n[0].length):r+e}function Qr(e){return e.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,"")}function eo(e){try{let t=Se.readFileSync(e,"utf-8").match(/^---\r?\n([\s\S]*?)\r?\n---/);if(!t)return{};let n=Bt.load(t[1]);return n&&typeof n=="object"?n:{}}catch{return{}}}async function ue(e){let t={};try{t=JSON.parse(Se.readFileSync(Qe.join(e,"velu.json"),"utf-8"))}catch{return{name:Qe.basename(e),baseUrl:"",pages:[]}}let n=t.name??Qe.basename(e),r=typeof t.url=="string"?t.url.replace(/\/+$/,""):"",o=z(t.api),i=t.navigation??{},a={};try{let c=await he(t.navigation??{},{targetDir:e,api:o});i=c.nav,a=c.ops}catch(c){console.warn(`[velu] openapi: ${c.message}`)}let s=U(i),{pageEntries:l}=M(s,e),p=new Map(l.map(c=>[c.url,c])),u=[];for(let c of K(s)){if(!c.url)continue;let b=c.ancestors.filter(h=>h.kind==="group").pop(),d=c.ancestors.filter(h=>h.kind==="tab").pop(),$=b?.label||d?.label||"Pages",m=c.ancestors.filter(h=>h.kind==="tab"||h.kind==="group").map(h=>h.label),L=c.ancestors.filter(h=>h.kind==="language").pop()?.code||null;if(c.node?.api){let h=a[c.pagePath];if(!h)continue;let w=h.title||zt(c.url);u.push({url:c.url,title:w,description:h.description||"",group:$,breadcrumb:[...m,w],lang:L,frontmatter:{title:h.title,description:h.description},source:{kind:"api",segment:h.segment}})}else{let h=p.get(c.url);if(!h||!h.exists)continue;let w=eo(h.fileAbsPath),F=w.title||zt(c.url);u.push({url:c.url,title:F,description:w.description||"",group:$,breadcrumb:[...m,F],lang:L,frontmatter:w,source:{kind:"mdx",fileAbsPath:h.fileAbsPath}})}}return{name:n,baseUrl:r,pages:u}}function je(e){return new Map(e.pages.map(t=>[t.url,{...t.source,title:t.title}]))}async function to(e){return je(await ue(e))}async function nt(e,t,n){let o=(n||await to(e)).get(t);if(!o)return null;if(o.kind==="mdx")try{return{body:Se.readFileSync(o.fileAbsPath,"utf-8"),contentType:"text/markdown; charset=utf-8",kind:"mdx"}}catch{return null}return o.segment?{body:Gt(o.segment),contentType:"text/yaml; charset=utf-8",kind:"api"}:null}async function Vt(e,t){let n=t||await ue(e),r=s=>n.baseUrl?n.baseUrl+s:s,o=[`# ${n.name}`,"",`> Documentation index for ${n.name}. Append \`.md\` to any page URL (or send \`Accept: text/markdown\`) for its Markdown; fetch ${ke} for the whole site in one document.`,""],i=[],a=new Map;for(let s of n.pages)a.has(s.group)||(a.set(s.group,[]),i.push(s.group)),a.get(s.group).push(s);for(let s of i){o.push(`## ${s}`,"");for(let l of a.get(s))o.push(`- [${l.title}](${r(Wr(l.url))})${l.description?`: ${l.description}`:""}`);o.push("")}return o.join(`
110
- `)}async function qt(e,t){let n=t||await ue(e),r=[`# ${n.name}`,"",`> Full documentation \u2014 every page concatenated. Index: ${W}`];for(let o of n.pages)if(r.push("","---","",`# ${o.title}`,`Source: ${o.url}`,""),o.source.kind==="mdx")try{r.push(Qr(Se.readFileSync(o.source.fileAbsPath,"utf-8")).trim())}catch{}else o.source.segment&&r.push("```yaml",Gt(o.source.segment).trim(),"```");return r.join(`
109
+ `;return n?e.slice(0,n[0].length)+r+e.slice(n[0].length):r+e}function eo(e){return e.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,"")}function to(e){try{let t=je.readFileSync(e,"utf-8").match(/^---\r?\n([\s\S]*?)\r?\n---/);if(!t)return{};let n=Gt.load(t[1]);return n&&typeof n=="object"?n:{}}catch{return{}}}async function me(e){let t={};try{t=JSON.parse(je.readFileSync(tt.join(e,"velu.json"),"utf-8"))}catch{return{name:tt.basename(e),baseUrl:"",pages:[]}}let n=t.name??tt.basename(e),r=typeof t.url=="string"?t.url.replace(/\/+$/,""):"",o=z(t.api),i=t.navigation??{},a={};try{let c=await be(t.navigation??{},{targetDir:e,api:o});i=c.nav,a=c.ops}catch(c){console.warn(`[velu] openapi: ${c.message}`)}let s=U(i),{pageEntries:l}=M(s,e),p=new Map(l.map(c=>[c.url,c])),u=[];for(let c of K(s)){if(!c.url)continue;let b=c.ancestors.filter(h=>h.kind==="group").pop(),d=c.ancestors.filter(h=>h.kind==="tab").pop(),$=b?.label||d?.label||"Pages",m=c.ancestors.filter(h=>h.kind==="tab"||h.kind==="group").map(h=>h.label),L=c.ancestors.filter(h=>h.kind==="language").pop()?.code||null;if(c.node?.api){let h=a[c.pagePath];if(!h)continue;let w=h.title||Bt(c.url);u.push({url:c.url,title:w,description:h.description||"",group:$,breadcrumb:[...m,w],lang:L,frontmatter:{title:h.title,description:h.description},source:{kind:"api",segment:h.segment}})}else{let h=p.get(c.url);if(!h||!h.exists)continue;let w=to(h.fileAbsPath),F=w.title||Bt(c.url);u.push({url:c.url,title:F,description:w.description||"",group:$,breadcrumb:[...m,F],lang:L,frontmatter:w,source:{kind:"mdx",fileAbsPath:h.fileAbsPath}})}}return{name:n,baseUrl:r,pages:u}}function Te(e){return new Map(e.pages.map(t=>[t.url,{...t.source,title:t.title}]))}async function no(e){return Te(await me(e))}async function ot(e,t,n){let o=(n||await no(e)).get(t);if(!o)return null;if(o.kind==="mdx")try{return{body:je.readFileSync(o.fileAbsPath,"utf-8"),contentType:"text/markdown; charset=utf-8",kind:"mdx"}}catch{return null}return o.segment?{body:Jt(o.segment),contentType:"text/yaml; charset=utf-8",kind:"api"}:null}async function qt(e,t){let n=t||await me(e),r=s=>n.baseUrl?n.baseUrl+s:s,o=[`# ${n.name}`,"",`> Documentation index for ${n.name}. Append \`.md\` to any page URL (or send \`Accept: text/markdown\`) for its Markdown; fetch ${Oe} for the whole site in one document.`,""],i=[],a=new Map;for(let s of n.pages)a.has(s.group)||(a.set(s.group,[]),i.push(s.group)),a.get(s.group).push(s);for(let s of i){o.push(`## ${s}`,"");for(let l of a.get(s))o.push(`- [${l.title}](${r(Zr(l.url))})${l.description?`: ${l.description}`:""}`);o.push("")}return o.join(`
110
+ `)}async function Ht(e,t){let n=t||await me(e),r=[`# ${n.name}`,"",`> Full documentation \u2014 every page concatenated. Index: ${W}`];for(let o of n.pages)if(r.push("","---","",`# ${o.title}`,`Source: ${o.url}`,""),o.source.kind==="mdx")try{r.push(eo(je.readFileSync(o.source.fileAbsPath,"utf-8")).trim())}catch{}else o.source.segment&&r.push("```yaml",Jt(o.source.segment).trim(),"```");return r.join(`
111
111
  `)+`
112
- `}var W,ke,Zr,Z,Mt,zt,Ht=j(()=>{B();oe();Y();Ge();W="/llms.txt",ke="/llms-full.txt",Zr=`<${W}>; rel="llms-txt", <${ke}>; rel="llms-full-txt"`,Z={Link:Zr,"X-Llms-Txt":W},Mt=`Full documentation index: ${W}`;zt=e=>(e.split("/").filter(Boolean).pop()||"Home").replace(/[-_]+/g," ").replace(/\b\w/g,n=>n.toUpperCase())});var Qt={};Pe(Qt,{startDevServer:()=>bo});import Dt from"node:fs/promises";import Q from"node:fs";import no from"node:http";import{spawn as ro}from"node:child_process";import P from"node:path";import{fileURLToPath as oo}from"node:url";import io from"chokidar";import Xt from"express";import{createServer as so,searchForWorkspaceRoot as ao}from"vite";function fo(e){return`<link rel="stylesheet" href="${`https://fonts.googleapis.com/css2?family=${encodeURIComponent(e).replace(/%20/g,"+")}:wght@300;400;500;600;700&display=swap`}" />`}function Yt(e,t){let n=Ve(e,{color:!!process.stderr.isTTY});console.error(`
112
+ `}var W,Oe,Qr,Z,zt,Bt,Dt=A(()=>{B();ae();Y();Ve();W="/llms.txt",Oe="/llms-full.txt",Qr=`<${W}>; rel="llms-txt", <${Oe}>; rel="llms-full-txt"`,Z={Link:Qr,"X-Llms-Txt":W},zt=`Full documentation index: ${W}`;Bt=e=>(e.split("/").filter(Boolean).pop()||"Home").replace(/[-_]+/g," ").replace(/\b\w/g,n=>n.toUpperCase())});var en={};Ee(en,{startDevServer:()=>xo});import Xt from"node:fs/promises";import Q from"node:fs";import ro from"node:http";import{spawn as oo}from"node:child_process";import P from"node:path";import{fileURLToPath as io}from"node:url";import so from"chokidar";import Yt from"express";import{createServer as ao,searchForWorkspaceRoot as lo}from"vite";function mo(e){return`<link rel="stylesheet" href="${`https://fonts.googleapis.com/css2?family=${encodeURIComponent(e).replace(/%20/g,"+")}:wght@300;400;500;600;700&display=swap`}" />`}function Kt(e,t){let n=He(e,{color:!!process.stderr.isTTY});console.error(`
113
113
  `+n+`
114
- `),process.env.VELU_DEBUG&&t&&console.error(t)}function mo(){try{return JSON.parse(Q.readFileSync(P.join(Ae,"package.json"),"utf8")).version||"unknown"}catch{return"unknown"}}function go(e,t){let n=P.resolve(e,".velu"),r=P.resolve(n,".velu-version"),o=null;try{o=Q.readFileSync(r,"utf8").trim()}catch{}if(o!==t){if(o!==null)try{Q.rmSync(P.join(n,"vite-cache"),{recursive:!0,force:!0}),console.log("[velu] new version detected \u2014 refreshing the preview cache\u2026")}catch{}try{Q.mkdirSync(n,{recursive:!0}),Q.writeFileSync(r,t)}catch{}}}async function Kt(e){try{return await ct(e)}catch{return Re({},P.basename(e))}}async function Wt(e,t){let n=await e.moduleGraph.getModuleByUrl(t,!0),r=new Map,o=new Set;async function i(a){if(!(!a||o.has(a.url))){if(o.add(a.url),a.id&&co.test(a.id)){let s=a.url.includes("?")?"&":"?",l=await e.transformRequest(`${a.url}${s}direct`);l?.code&&r.set(a.url,l.code)}for(let s of a.importedModules)await i(s)}}return await i(n),[...r.values()].join(`
115
- `)}function vo(e,t){let n=()=>{process.stdout.isTTY&&!process.env.VELU_NO_BELL&&process.stdout.write("\x07")},r=process.stdout.isTTY,o=c=>r&&process.stdout.write(`\x1B]${c}\x1B\\`),i=()=>{o(`0;\u23F3 ${t}`),o("9;4;3;0")},a=()=>{o(`0;${t}`),o("9;4;0;0")};if(r&&process.once("exit",()=>o("9;4;0;0")),i(),!e)return console.log("Starting Velu\u2026"),{ready:c=>{console.log(`Velu ready \u2192 ${c}`),a(),n()}};let s="\x1B[38;2;220;20;60m",l="\x1B[0m";console.log("");for(let c of ho)console.log(`${s}${c}${l}`);console.log("");let p=null;try{p=ro(process.execPath,["-e",yo],{stdio:["ignore","inherit","ignore"]}),p.on("error",()=>{})}catch{}let u=()=>{if(p){try{p.kill()}catch{}p=null}};return process.once("exit",u),{ready:c=>{u(),process.stdout.write("\x1B[2K\r"),console.log(` \x1B[32m\u2713${l} Velu ready \u2192 \x1B[36m${c}${l}`),a(),n()}}}async function bo(e){let t=!!process.env.VELU_PROFILE,n=performance.now(),r=(y,f)=>t&&console.log(`[velu-profile] ${y}: ${(performance.now()-f).toFixed(0)}ms`),o=vo(!!process.stdout.isTTY&&!t,P.basename(e)),i=await Kt(e),a=s();function s(){let f=$e(e).filter(g=>g.severity==="error"&&(g.category==="config-json"||g.category==="config-schema"));return f.length&&console.error(`
116
- `+be(f,{color:!!process.stderr.isTTY})+`
117
- `),f}let l=e;try{l=Q.realpathSync(e)}catch{}let p=0,u=y=>{let f=performance.now();if(f-p<500)return;p=f;let g=ae(y,{projectDir:l,knownComponents:V});Yt(g,y)};process.on("unhandledRejection",u),process.on("uncaughtException",u);let c=Number(process.env.PORT)||8358,b=await We();go(e,mo());let d=Xt(),$=no.createServer(d),m=await so({...Ft({targetDir:e,VITE_ROOT:Ae,validateProps:b}),appType:"custom",logLevel:t?"info":"warn",server:{middlewareMode:!0,fs:{allow:[ao(Ae),e,l]},hmr:{server:$}}});r("vite server created",n),d.use(m.middlewares),d.get(new RegExp(`^${Ee}(\\.[a-z0-9]+)?$`,"i"),async(y,f)=>{if(!i.favicon)return f.status(404).end();let g=P.resolve(e,i.favicon.replace(/^\//,""));f.sendFile(g,v=>{v&&f.status(404).end()})});let L=y=>(f,g)=>{let v=i.logo?.[y];if(!v)return g.status(404).end();g.sendFile(P.resolve(e,v.replace(/^\//,"")),O=>{O&&g.status(404).end()})};d.get(fe,L("light")),d.get(me,L("dark")),d.post("/@velu-api-proxy",Xt.json({limit:"8mb"}),async(y,f)=>{let{method:g="GET",url:v,headers:O={},body:S}=y.body||{};if(typeof v!="string"||!/^https?:\/\//i.test(v))return f.status(400).json({error:"A valid http(s) target URL is required."});try{let k=await fetch(v,{method:g,headers:O,body:S!=null&&S!==""?S:void 0}),N=await k.text(),H=k.headers.get("content-type")||"",T={};k.headers.forEach((ee,Le)=>{T[Le]=ee});let R=N;if(/json/i.test(H))try{R=JSON.parse(N)}catch{}f.json({status:k.status,statusText:k.statusText,headers:T,body:R})}catch(k){f.json({error:`Request failed: ${k.message}`})}});let h=null,w=async()=>h||=await ue(e);d.get(/\.md$/i,async(y,f,g)=>{try{let v=await w(),O=await nt(e,Jt(decodeURIComponent(y.path)),je(v));if(!O)return g();f.status(200).set({"Content-Type":O.contentType,...Z}).end(tt(O.body,O.kind))}catch{g()}}),d.get(W,async(y,f,g)=>{try{let v=await Vt(e,await w());f.status(200).set({"Content-Type":"text/plain; charset=utf-8",...Z}).end(v)}catch{g()}}),d.get(ke,async(y,f,g)=>{try{let v=await qt(e,await w());f.status(200).set({"Content-Type":"text/plain; charset=utf-8",...Z}).end(v)}catch{g()}}),d.use("*",async(y,f,g)=>{let v=y.originalUrl,O=performance.now();if(/text\/markdown/i.test(y.headers.accept||""))try{let S=await w(),k=await nt(e,pt(v),je(S));if(k)return f.status(200).set({"Content-Type":k.contentType,...Z}).end(tt(k.body,k.kind))}catch{}if(a.length)return f.status(200).set({"Content-Type":"text/html"}).end(De(a,{title:"Fix velu.json to continue"}));try{let S=performance.now(),k=await Dt.readFile(Zt,"utf-8");k=await m.transformIndexHtml(v,k),r(`transformIndexHtml ${v}`,S);let N="/src/runtime/server-entry.jsx";S=performance.now();let{render:H}=await m.ssrLoadModule(N);r(`ssrLoadModule ${v} (1st req includes dep pre-bundle)`,S),S=performance.now();let T=await H(v);r(`render ${v}`,S),S=performance.now();let R=await Wt(m,N);r(`collectSsrCss ${v}`,S);let ee=R?`<style data-velu-ssr>${R}</style>`:"",Le=`<style data-velu-config>
118
- ${ut(i)}
119
- </style>`,sn=uo.has(i.font.family)?"":fo(i.font.family),pe=at(i),an=pe?`<link rel="icon"${pe.type?` type="${pe.type}"`:""} href="${pe.url}" />`:"",ln=[ee,Le,sn,an].filter(Boolean).join(`
120
- `),cn=k.replace("<!--app-title-->",po(i.name)).replace("<!--app-head-->",ln).replace("<!--app-html-->",T);f.status(200).set({"Content-Type":"text/html",...Z}).end(cn),r(`TOTAL ${v}`,O)}catch(S){m.ssrFixStacktrace(S);let k=ae(S,{projectDir:l,knownComponents:V});Yt(k,S),f.status(200).set({"Content-Type":"text/html"}).end(De([k]))}}),io.watch(e,{ignoreInitial:!0,ignored:/(^|[\\/])(node_modules|\.git|\.velu)([\\/]|$)/,awaitWriteFinish:{stabilityThreshold:100,pollInterval:20}}).on("all",async(y,f)=>{console.log(`[velu-cli] content ${y}: ${P.relative(e,f)}`);let g=P.basename(f)==="velu.json",v=f.endsWith(".mdx"),O=g||v&&(y==="add"||y==="unlink");if((O||v||/\.(ya?ml|json)$/i.test(f))&&(h=null),g&&(i=await Kt(e),a=s()),O)m.moduleGraph.invalidateAll();else if(v){let S=f.split(P.sep).join("/"),k=m.moduleGraph.getModulesByFile(S);if(k)for(let N of k)m.moduleGraph.invalidateModule(N)}m.ws.send({type:"full-reload"})});async function x(y){let f=new Set,g=12,v=0,O=[],S=()=>v<g?(v+=1,Promise.resolve()):new Promise(T=>O.push(T)).then(()=>{v+=1}),k=()=>{v-=1,O.shift()?.()},N=T=>/[\\/]\.velu[\\/]vite-cache[\\/]|[\\/]deps[\\/]/.test(T)||/[\\/]node_modules[\\/]/.test(T)&&!/velu-ui/.test(T);async function H(T){if(!(!T||f.has(T)||N(T))){f.add(T);try{await S();try{await m.transformRequest(T,{ssr:!1})}finally{k()}let R=await m.moduleGraph.getModuleByUrl(T,!1);R?.importedModules?.size&&await Promise.all([...R.importedModules].map(ee=>H(ee.url)))}catch{}}}return await H(y),f.size}$.listen(c,async()=>{let y=performance.now(),f=0;try{let{render:g}=await m.ssrLoadModule("/src/runtime/server-entry.jsx");await x("/src/runtime/client-entry.jsx"),typeof m.waitForRequestsIdle=="function"&&await m.waitForRequestsIdle();let[v]=await Promise.allSettled([x("/src/runtime/client-entry.jsx"),g("/"),m.transformIndexHtml("/",await Dt.readFile(Zt,"utf-8")),Wt(m,"/src/runtime/server-entry.jsx")]).then(O=>O.map(S=>S.status==="fulfilled"?S.value:0));f=v}catch(g){t&&console.log("[velu-profile] warmup error:",g?.message)}r(`cold-start warm-up (${f} client modules)`,y),o.ready(`http://localhost:${c}`)})}var lo,co,uo,po,Ae,Zt,ho,yo,en=j(()=>{Y();Nt();He();Rt();J();Xe();Ke();Ze();Ht();B();lo=P.dirname(oo(import.meta.url)),co=/\.(css|less|sass|scss|styl|stylus|pcss|postcss)(\?|$)/,uo=new Set(["Google Sans Flex","Google Sans Code","Outfit"]),po=e=>String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;");Ae=P.resolve(lo,".."),Zt=P.resolve(Ae,"src","template.html"),ho=[" _ __ __","| | / /__ / /_ __","| | / / _ \\/ / / / /","| |/ / __/ / /_/ /","|___/\\___/_/\\__,_/"],yo="const F=['\u280B','\u2819','\u2839','\u2838','\u283C','\u2834','\u2826','\u2827','\u2807','\u280F'],M=['Starting Velu','Setting up your preview','Preparing your docs','Warming things up','Almost ready'];let f=0,m=0;const t=Date.now();const C='\\x1b[38;2;220;20;60m',R='\\x1b[0m',D='\\x1b[2m';const d=()=>{const s=(Date.now()-t)/1000|0;process.stdout.write('\\x1b[2K\\r '+C+F[f]+R+' '+M[m]+'\\u2026 '+D+s+'s'+R);f=(f+1)%F.length;};d();setInterval(d,90);setInterval(()=>{if(m<M.length-1)m++;},4000);"});var nn={};Pe(nn,{default:()=>So,runValidate:()=>tn});import xo from"node:fs";import $o from"node:path";function wo(e){try{let t=JSON.parse(xo.readFileSync($o.join(e,"velu.json"),"utf-8"));if(!t.navigation||typeof t.navigation!="object")return[];let n=U(t.navigation);return M(n,e).pageEntries}catch{return[]}}async function tn(e){let t=$e(e),n=wo(e),r=await Ut(e,n),o=[...t,...r],i=!!process.stdout.isTTY;return console.log(be(o,{color:i})),o.some(s=>s.severity!=="warning"&&s.severity!=="info")?1:0}var So,rn=j(()=>{B();oe();Ke();Ze();J();So=tn});import Oe from"node:path";import _ from"node:process";import{readFileSync as ko}from"node:fs";var[,,on,Te]=_.argv;function jo(){try{return JSON.parse(ko(new URL("../package.json",import.meta.url),"utf8")).version}catch{return"unknown"}}function Ao(){let e=_.argv.slice(3);for(let t=0;t<e.length;t++){let n=e[t];if(n==="--out"){t++;continue}if(!n.startsWith("-"))return n}}async function Oo(){switch(on){case"--version":case"-v":case"version":{console.log(jo());break}case"init":{Te||(console.error("Usage: velu init <project-name>"),_.exit(1));let e=Te,t=Oe.resolve(_.cwd(),e),{initProject:n}=await Promise.resolve().then(()=>(it(),ot));await n(t,e);break}case"dev":{let e=Oe.resolve(_.cwd(),Te??"."),{startDevServer:t}=await Promise.resolve().then(()=>(en(),Qt));await t(e);break}case"validate":{let e=Oe.resolve(_.cwd(),Te??"."),{runValidate:t}=await Promise.resolve().then(()=>(rn(),nn)),n=await t(e);_.exit(n);break}case"build":{let e=Oe.resolve(_.cwd(),Ao()??"."),t=_.argv.indexOf("--out"),n=t>-1?_.argv[t+1]:void 0,r=new URL(["..","src","build","index.js"].join("/"),import.meta.url).href,o=a=>import(a),i;try{({runBuild:i}=await o(r))}catch{console.error("velu build is an internal command, not available in this distribution."),_.exit(1)}await i(e,{out:n});break}default:console.log("Usage:"),console.log(" velu init <project-name> scaffold a new docs project"),console.log(" velu dev [dir] start the dev preview server"),console.log(" velu validate [dir] check velu.json + content for problems"),_.exit(on?1:0)}}Oo().catch(e=>{console.error(_.env.VELU_DEBUG?e:`Error: ${e.message}`),_.exit(1)});
114
+ `),process.env.VELU_DEBUG&&t&&console.error(t)}function go(){try{return JSON.parse(Q.readFileSync(P.join(Le,"package.json"),"utf8")).version||"unknown"}catch{return"unknown"}}function ho(e,t){let n=P.resolve(e,".velu"),r=P.resolve(n,".velu-version"),o=null;try{o=Q.readFileSync(r,"utf8").trim()}catch{}if(o!==t){if(o!==null)try{Q.rmSync(P.join(n,"vite-cache"),{recursive:!0,force:!0}),console.log("[velu] new version detected \u2014 refreshing the preview cache\u2026")}catch{}try{Q.mkdirSync(n,{recursive:!0}),Q.writeFileSync(r,t)}catch{}}}async function Wt(e){try{return await ut(e)}catch{return Me({},P.basename(e))}}async function Zt(e,t){let n=await e.moduleGraph.getModuleByUrl(t,!0),r=new Map,o=new Set;async function i(a){if(!(!a||o.has(a.url))){if(o.add(a.url),a.id&&uo.test(a.id)){let s=a.url.includes("?")?"&":"?",l=await e.transformRequest(`${a.url}${s}direct`);l?.code&&r.set(a.url,l.code)}for(let s of a.importedModules)await i(s)}}return await i(n),[...r.values()].join(`
115
+ `)}function bo(e,t){let n=()=>{process.stdout.isTTY&&!process.env.VELU_NO_BELL&&process.stdout.write("\x07")},r=process.stdout.isTTY,o=c=>r&&process.stdout.write(`\x1B]${c}\x1B\\`),i=()=>{o(`0;\u23F3 ${t}`),o("9;4;3;0")},a=()=>{o(`0;${t}`),o("9;4;0;0")};if(r&&process.once("exit",()=>o("9;4;0;0")),i(),!e)return console.log("Starting Velu\u2026"),{ready:c=>{console.log(`Velu ready \u2192 ${c}`),a(),n()}};let s="\x1B[38;2;220;20;60m",l="\x1B[0m";console.log("");for(let c of yo)console.log(`${s}${c}${l}`);console.log("");let p=null;try{p=oo(process.execPath,["-e",vo],{stdio:["ignore","inherit","ignore"]}),p.on("error",()=>{})}catch{}let u=()=>{if(p){try{p.kill()}catch{}p=null}};return process.once("exit",u),{ready:c=>{u(),process.stdout.write("\x1B[2K\r"),console.log(` \x1B[32m\u2713${l} Velu ready \u2192 \x1B[36m${c}${l}`),a(),n()}}}async function xo(e){let t=!!process.env.VELU_PROFILE,n=performance.now(),r=(y,f)=>t&&console.log(`[velu-profile] ${y}: ${(performance.now()-f).toFixed(0)}ms`),o=bo(!!process.stdout.isTTY&&!t,P.basename(e)),i=await Wt(e),a=s();function s(){let f=ke(e).filter(g=>g.severity==="error"&&(g.category==="config-json"||g.category==="config-schema"));return f.length&&console.error(`
116
+ `+we(f,{color:!!process.stderr.isTTY})+`
117
+ `),f}let l=e;try{l=Q.realpathSync(e)}catch{}let p=0,u=y=>{let f=performance.now();if(f-p<500)return;p=f;let g=ue(y,{projectDir:l,knownComponents:V});Kt(g,y)};process.on("unhandledRejection",u),process.on("uncaughtException",u);let c=Number(process.env.PORT)||8358,b=await Qe();ho(e,go());let d=Yt(),$=ro.createServer(d),m=await ao({...Nt({targetDir:e,VITE_ROOT:Le,validateProps:b}),appType:"custom",logLevel:t?"info":"warn",server:{middlewareMode:!0,fs:{allow:[lo(Le),e,l]},hmr:{server:$}}});r("vite server created",n),d.use(m.middlewares),d.get(new RegExp(`^${Ue}(\\.[a-z0-9]+)?$`,"i"),async(y,f)=>{if(!i.favicon)return f.status(404).end();let g=P.resolve(e,i.favicon.replace(/^\//,""));f.sendFile(g,v=>{v&&f.status(404).end()})});let L=y=>(f,g)=>{let v=i.logo?.[y];if(!v)return g.status(404).end();g.sendFile(P.resolve(e,v.replace(/^\//,"")),O=>{O&&g.status(404).end()})};d.get(ge,L("light")),d.get(he,L("dark")),d.post("/@velu-api-proxy",Yt.json({limit:"8mb"}),async(y,f)=>{let{method:g="GET",url:v,headers:O={},body:S}=y.body||{};if(typeof v!="string"||!/^https?:\/\//i.test(v))return f.status(400).json({error:"A valid http(s) target URL is required."});try{let k=await fetch(v,{method:g,headers:O,body:S!=null&&S!==""?S:void 0}),N=await k.text(),H=k.headers.get("content-type")||"",T={};k.headers.forEach((ee,Ce)=>{T[Ce]=ee});let R=N;if(/json/i.test(H))try{R=JSON.parse(N)}catch{}f.json({status:k.status,statusText:k.statusText,headers:T,body:R})}catch(k){f.json({error:`Request failed: ${k.message}`})}});let h=null,w=async()=>h||=await me(e);d.get(/\.md$/i,async(y,f,g)=>{try{let v=await w(),O=await ot(e,Vt(decodeURIComponent(y.path)),Te(v));if(!O)return g();f.status(200).set({"Content-Type":O.contentType,...Z}).end(rt(O.body,O.kind))}catch{g()}}),d.get(W,async(y,f,g)=>{try{let v=await qt(e,await w());f.status(200).set({"Content-Type":"text/plain; charset=utf-8",...Z}).end(v)}catch{g()}}),d.get(Oe,async(y,f,g)=>{try{let v=await Ht(e,await w());f.status(200).set({"Content-Type":"text/plain; charset=utf-8",...Z}).end(v)}catch{g()}}),d.use("*",async(y,f,g)=>{let v=y.originalUrl,O=performance.now();if(/text\/markdown/i.test(y.headers.accept||""))try{let S=await w(),k=await ot(e,ft(v),Te(S));if(k)return f.status(200).set({"Content-Type":k.contentType,...Z}).end(rt(k.body,k.kind))}catch{}if(a.length)return f.status(200).set({"Content-Type":"text/html"}).end(Ye(a,{title:"Fix velu.json to continue"}));try{let S=performance.now(),k=await Xt.readFile(Qt,"utf-8");k=await m.transformIndexHtml(v,k),r(`transformIndexHtml ${v}`,S);let N="/src/runtime/server-entry.jsx";S=performance.now();let{render:H}=await m.ssrLoadModule(N);r(`ssrLoadModule ${v} (1st req includes dep pre-bundle)`,S),S=performance.now();let T=await H(v);r(`render ${v}`,S),S=performance.now();let R=await Zt(m,N);r(`collectSsrCss ${v}`,S);let ee=R?`<style data-velu-ssr>${R}</style>`:"",Ce=`<style data-velu-config>
118
+ ${pt(i)}
119
+ </style>`,an=po.has(i.font.family)?"":mo(i.font.family),de=ct(i),ln=de?`<link rel="icon"${de.type?` type="${de.type}"`:""} href="${de.url}" />`:"",cn=[ee,Ce,an,ln].filter(Boolean).join(`
120
+ `),un=k.replace("<!--app-title-->",fo(i.name)).replace("<!--app-head-->",cn).replace("<!--app-html-->",T);f.status(200).set({"Content-Type":"text/html",...Z}).end(un),r(`TOTAL ${v}`,O)}catch(S){m.ssrFixStacktrace(S);let k=ue(S,{projectDir:l,knownComponents:V});Kt(k,S),f.status(200).set({"Content-Type":"text/html"}).end(Ye([k]))}}),so.watch(e,{ignoreInitial:!0,ignored:/(^|[\\/])(node_modules|\.git|\.velu)([\\/]|$)/,awaitWriteFinish:{stabilityThreshold:100,pollInterval:20}}).on("all",async(y,f)=>{console.log(`[velu-cli] content ${y}: ${P.relative(e,f)}`);let g=P.basename(f)==="velu.json",v=f.endsWith(".mdx"),O=g||v&&(y==="add"||y==="unlink");if((O||v||/\.(ya?ml|json)$/i.test(f))&&(h=null),g&&(i=await Wt(e),a=s()),O)m.moduleGraph.invalidateAll();else if(v){let S=f.split(P.sep).join("/"),k=m.moduleGraph.getModulesByFile(S);if(k)for(let N of k)m.moduleGraph.invalidateModule(N)}m.ws.send({type:"full-reload"})});async function x(y){let f=new Set,g=12,v=0,O=[],S=()=>v<g?(v+=1,Promise.resolve()):new Promise(T=>O.push(T)).then(()=>{v+=1}),k=()=>{v-=1,O.shift()?.()},N=T=>/[\\/]\.velu[\\/]vite-cache[\\/]|[\\/]deps[\\/]/.test(T)||/[\\/]node_modules[\\/]/.test(T)&&!/velu-ui/.test(T);async function H(T){if(!(!T||f.has(T)||N(T))){f.add(T);try{await S();try{await m.transformRequest(T,{ssr:!1})}finally{k()}let R=await m.moduleGraph.getModuleByUrl(T,!1);R?.importedModules?.size&&await Promise.all([...R.importedModules].map(ee=>H(ee.url)))}catch{}}}return await H(y),f.size}$.listen(c,async()=>{let y=performance.now(),f=0;try{let{render:g}=await m.ssrLoadModule("/src/runtime/server-entry.jsx");await x("/src/runtime/client-entry.jsx"),typeof m.waitForRequestsIdle=="function"&&await m.waitForRequestsIdle();let[v]=await Promise.allSettled([x("/src/runtime/client-entry.jsx"),g("/"),m.transformIndexHtml("/",await Xt.readFile(Qt,"utf-8")),Zt(m,"/src/runtime/server-entry.jsx")]).then(O=>O.map(S=>S.status==="fulfilled"?S.value:0));f=v}catch(g){t&&console.log("[velu-profile] warmup error:",g?.message)}r(`cold-start warm-up (${f} client modules)`,y),o.ready(`http://localhost:${c}`)})}var co,uo,po,fo,Le,Qt,yo,vo,tn=A(()=>{Y();It();Xe();Ut();J();Ke();Ze();et();Dt();B();co=P.dirname(io(import.meta.url)),uo=/\.(css|less|sass|scss|styl|stylus|pcss|postcss)(\?|$)/,po=new Set(["Google Sans Flex","Google Sans Code","Outfit"]),fo=e=>String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;");Le=P.resolve(co,".."),Qt=P.resolve(Le,"src","template.html"),yo=[" _ __ __","| | / /__ / /_ __","| | / / _ \\/ / / / /","| |/ / __/ / /_/ /","|___/\\___/_/\\__,_/"],vo="const F=['\u280B','\u2819','\u2839','\u2838','\u283C','\u2834','\u2826','\u2827','\u2807','\u280F'],M=['Starting Velu','Setting up your preview','Preparing your docs','Warming things up','Almost ready'];let f=0,m=0;const t=Date.now();const C='\\x1b[38;2;220;20;60m',R='\\x1b[0m',D='\\x1b[2m';const d=()=>{const s=(Date.now()-t)/1000|0;process.stdout.write('\\x1b[2K\\r '+C+F[f]+R+' '+M[m]+'\\u2026 '+D+s+'s'+R);f=(f+1)%F.length;};d();setInterval(d,90);setInterval(()=>{if(m<M.length-1)m++;},4000);"});var rn={};Ee(rn,{default:()=>ko,runValidate:()=>nn});import $o from"node:fs";import wo from"node:path";function So(e){try{let t=JSON.parse($o.readFileSync(wo.join(e,"velu.json"),"utf-8"));if(!t.navigation||typeof t.navigation!="object")return[];let n=U(t.navigation);return M(n,e).pageEntries}catch{return[]}}async function nn(e){let t=ke(e),n=So(e),r=await Mt(e,n),o=[...t,...r],i=!!process.stdout.isTTY;return console.log(we(o,{color:i})),o.some(s=>s.severity!=="warning"&&s.severity!=="info")?1:0}var ko,on=A(()=>{B();ae();Ze();et();J();ko=nn});import Pe from"node:path";import _ from"node:process";import{readFileSync as Ao}from"node:fs";var[,,sn,_e]=_.argv;function jo(){try{return JSON.parse(Ao(new URL("../package.json",import.meta.url),"utf8")).version}catch{return"unknown"}}function Oo(){let e=_.argv.slice(3);for(let t=0;t<e.length;t++){let n=e[t];if(n==="--out"){t++;continue}if(!n.startsWith("-"))return n}}async function To(){switch(sn){case"--version":case"-v":case"version":{console.log(jo());break}case"init":{_e||(console.error("Usage: velu init <project-name>"),_.exit(1));let e=_e,t=Pe.resolve(_.cwd(),e),{initProject:n}=await Promise.resolve().then(()=>(at(),st));await n(t,e);break}case"dev":{let e=Pe.resolve(_.cwd(),_e??"."),{startDevServer:t}=await Promise.resolve().then(()=>(tn(),en));await t(e);break}case"validate":{let e=Pe.resolve(_.cwd(),_e??"."),{runValidate:t}=await Promise.resolve().then(()=>(on(),rn)),n=await t(e);_.exit(n);break}case"build":{let e=Pe.resolve(_.cwd(),Oo()??"."),t=_.argv.indexOf("--out"),n=t>-1?_.argv[t+1]:void 0,r=new URL(["..","src","build","index.js"].join("/"),import.meta.url).href,o=a=>import(a),i;try{({runBuild:i}=await o(r))}catch{console.error("velu build is an internal command, not available in this distribution."),_.exit(1)}await i(e,{out:n});break}default:console.log("Usage:"),console.log(" velu init <project-name> scaffold a new docs project"),console.log(" velu dev [dir] start the dev preview server"),console.log(" velu validate [dir] check velu.json + content for problems"),_.exit(sn?1:0)}}To().catch(e=>{console.error(_.env.VELU_DEBUG?e:`Error: ${e.message}`),_.exit(1)});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veluai/velu",
3
- "version": "0.2.10",
3
+ "version": "0.2.12",
4
4
  "type": "module",
5
5
  "bin": "./dist/cli.js",
6
6
  "publishConfig": {
@@ -724,9 +724,13 @@ function DocsPage() {
724
724
  const navigate = useNavigate();
725
725
  const pathname = normalizeUrl(location.pathname);
726
726
  const entry = pages[pathname];
727
+ // `navigation`/`pages` are module constants in dev/build (the deps never
728
+ // change there); the instant preview's virtual-site substitute reassigns
729
+ // the `pages` live binding as pages finish compiling, so listing them re-
730
+ // resolves nav (sidebar labels, breadcrumb, prev/next) as titles arrive.
727
731
  const nav = React.useMemo(
728
732
  () => resolve(pathname, navigation, pages),
729
- [pathname],
733
+ [pathname, navigation, pages],
730
734
  );
731
735
 
732
736
  // Search source: Pagefind for content/excerpts, but resolve each result's
@@ -909,15 +913,24 @@ function DocsPage() {
909
913
  if (!header) return;
910
914
  const root = document.documentElement;
911
915
  const remPx = parseFloat(getComputedStyle(root).fontSize) || 16;
916
+ // Skip same-value writes: these CSS vars affect layout, and an
917
+ // unconditional write on every ResizeObserver fire can feed back into
918
+ // layout (scrollbar appear/disappear flutter at narrow widths — observed
919
+ // as a permanent relayout storm inside the instant-preview iframe).
920
+ let lastHeaderH = -1;
921
+ let lastTocBarH = -1;
912
922
  const apply = () => {
913
- const headerH = header.getBoundingClientRect().height;
923
+ const headerH = Math.round(header.getBoundingClientRect().height);
914
924
  // Re-query each apply — the TocBar toggle button is mounted
915
925
  // after first paint and its parent may also remount on
916
926
  // theme/viewport changes.
917
927
  const tocBarToggle = document.querySelector('.velu-toc-bar__toggle');
918
928
  const tocBarH = tocBarToggle
919
- ? tocBarToggle.getBoundingClientRect().height
929
+ ? Math.round(tocBarToggle.getBoundingClientRect().height)
920
930
  : 0;
931
+ if (headerH === lastHeaderH && tocBarH === lastTocBarH) return;
932
+ lastHeaderH = headerH;
933
+ lastTocBarH = tocBarH;
921
934
  if (headerH > 0)
922
935
  root.style.setProperty('--velu-header-height', `${headerH}px`);
923
936
  root.style.setProperty('--velu-tocbar-height', `${tocBarH}px`);