love-ui 1.2.20 → 1.2.22

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.
@@ -0,0 +1,122 @@
1
+ import{cyan as Xn,green as Qn,red as es,yellow as ts}from"kleur/colors";var k={error:es,warn:ts,info:Xn,success:Qn};var E={error(...e){console.log(k.error(e.join(" ")))},warn(...e){console.log(k.warn(e.join(" ")))},info(...e){console.log(k.info(e.join(" ")))},success(...e){console.log(k.success(e.join(" ")))},log(...e){console.log(e.join(" "))},break(){console.log("")}};var dr={name:"love-ui",version:"1.2.22",private:!1,license:"MIT",type:"module",bin:{loveui:"dist/index.js","love-ui":"dist/index.js","loveui-mcp":"dist/mcp-server.js"},files:["dist","registry","skills"],main:"dist/index.js",exports:{".":{import:"./dist/index.js",require:"./dist/index.js"},"./icons":{types:"./registry/default/icons/dist/index.d.ts",import:"./registry/default/icons/dist/index.mjs",require:"./registry/default/icons/dist/index.cjs"},"./logos":{types:"./registry/default/logos/dist/index.d.ts",import:"./registry/default/logos/dist/index.mjs",require:"./registry/default/logos/dist/index.cjs"},"./vectors":{types:"./registry/default/vectors/dist/index.d.ts",import:"./registry/default/vectors/dist/index.mjs",require:"./registry/default/vectors/dist/index.cjs"},"./registry/*":"./registry/*","./package.json":"./package.json"},dependencies:{"@antfu/ni":"^24.4.0","@babel/core":"^7.28.5","@babel/parser":"^7.28.5","@babel/plugin-transform-typescript":"^7.28.5","@dotenvx/dotenvx":"^1.71.0","@modelcontextprotocol/sdk":"^1.18.1",clsx:"^2.1.1",commander:"^14.0.2",cosmiconfig:"^9.0.0",dedent:"^1.7.0",deepmerge:"^4.3.1",diff:"^8.0.2",execa:"^9.6.0","fast-glob":"^3.3.3","fs-extra":"^11.3.2",fuzzysort:"^3.1.0","https-proxy-agent":"^7.0.6",kleur:"^4.1.5","node-fetch":"^3.3.2",open:"^10.2.0",ora:"^9.0.0",postcss:"^8.5.6","postcss-nested":"^7.0.2","postcss-selector-parser":"^7.1.1",prompts:"^2.4.2",recast:"^0.23.11","stringify-object":"^5.0.0","tailwind-merge":"^3.6.0",tailwindcss:"^4.3.0","ts-morph":"^27.0.2","tsconfig-paths":"^4.2.0",zod:"^3.25.76","zod-to-json-schema":"^3.25.2"},scripts:{build:"tsup",postbuild:"node ./scripts/copy-registry.mjs",prepack:"npm run build","verify:registry":"node ./scripts/copy-registry.mjs",clean:"rimraf dist registry"},devDependencies:{"@types/diff":"^7.0.2","@types/fs-extra":"^11.0.4","@types/node":"^20.14.10","@types/prompts":"^2.4.9",msw:"^2.12.4",rimraf:"^6.0.1",tsup:"^8.5.0",vitest:"^4.0.15"}};var ge=process.env.REGISTRY_URL??"https://www.loveui.dev/r",O=ge.replace(/\/r\/?$/,""),re="@love-ui-pro",ns=process.env.LOVEUI_PRO_REGISTRY_URL??`${O}/pro/r/{name}.json`,rt=process.env.LOVEUI_PRO_CLI==="1"?re:"@love-ui",nt="new-york-v4",hr=[{name:"neutral",label:"Neutral"},{name:"zinc",label:"Zinc"},{name:"stone",label:"Stone"},{name:"mauve",label:"Mauve"},{name:"olive",label:"Olive"},{name:"mist",label:"Mist"},{name:"taupe",label:"Taupe"}],U={"@love-ui":`${ge}/{name}.json`,[re]:ns};var Sa=[{name:"toast",deprecatedBy:"sonner",message:"The toast component is deprecated. Use the sonner component instead."},{name:"toaster",deprecatedBy:"sonner",message:"The toaster component is deprecated. Use the sonner component instead."}];import{z as Mt}from"zod";var F={NETWORK_ERROR:"NETWORK_ERROR",NOT_FOUND:"NOT_FOUND",GONE:"GONE",UNAUTHORIZED:"UNAUTHORIZED",FORBIDDEN:"FORBIDDEN",FETCH_ERROR:"FETCH_ERROR",NOT_CONFIGURED:"NOT_CONFIGURED",INVALID_CONFIG:"INVALID_CONFIG",MISSING_ENV_VARS:"MISSING_ENV_VARS",LOCAL_FILE_ERROR:"LOCAL_FILE_ERROR",PARSE_ERROR:"PARSE_ERROR",VALIDATION_ERROR:"VALIDATION_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},$=class extends Error{code;statusCode;context;suggestion;timestamp;cause;constructor(t,r={}){super(t),this.name="RegistryError",this.code=r.code||F.UNKNOWN_ERROR,this.statusCode=r.statusCode,this.cause=r.cause,this.context=r.context,this.suggestion=r.suggestion,this.timestamp=new Date,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,message:this.message,code:this.code,statusCode:this.statusCode,context:this.context,suggestion:this.suggestion,timestamp:this.timestamp,stack:this.stack}}},H=class extends ${constructor(r,n){let s=`The item at ${r} was not found. It may not exist at the registry.`;super(s,{code:F.NOT_FOUND,statusCode:404,cause:n,context:{url:r},suggestion:"Check if the item name is correct and the registry URL is accessible."});this.url=r;this.name="RegistryNotFoundError"}url},st=class extends ${constructor(r,n){let s=`The item at ${r} is no longer available. It may have been removed or expired.`;super(s,{code:F.GONE,statusCode:410,cause:n,context:{url:r},suggestion:"This resource was previously available but has been permanently removed. Check if a newer version exists or contact the registry maintainer."});this.url=r;this.name="RegistryGoneError"}url},je=class extends ${constructor(r,n){let s=`You are not authorized to access the item at ${r}. If this is a remote registry, you may need to authenticate.`;super(s,{code:F.UNAUTHORIZED,statusCode:401,cause:n,context:{url:r},suggestion:"Check your authentication credentials and environment variables."});this.url=r;this.name="RegistryUnauthorizedError"}url},Ae=class extends ${constructor(r,n){let s=`You are not authorized to access the item at ${r}. If this is a remote registry, you may need to authenticate.`;super(s,{code:F.FORBIDDEN,statusCode:403,cause:n,context:{url:r},suggestion:"Check your authentication credentials and environment variables."});this.url=r;this.name="RegistryForbiddenError"}url},Le=class extends ${constructor(r,n,s,i){let o=n?`Failed to fetch from registry (${n}): ${r}`:`Failed to fetch from registry: ${r}`,a=typeof i=="string"&&i?`${o} - ${i}`:o,l="Check your network connection and try again.";n===404?l="The requested resource was not found. Check the URL or item name.":n===500?l="The registry server encountered an error. Try again later.":n&&n>=400&&n<500&&(l="There was a client error. Check your request parameters.");super(a,{code:F.FETCH_ERROR,statusCode:n,cause:i,context:{url:r,responseBody:s},suggestion:l});this.url=r;this.responseBody=s;this.name="RegistryFetchError"}url;responseBody},ne=class extends ${constructor(r){let n=r?`Unknown registry "${r}". Make sure it is defined in components.json as follows:
2
+ {
3
+ "registries": {
4
+ "${r}": "[URL_TO_REGISTRY]"
5
+ }
6
+ }`:'Unknown registry. Make sure it is defined in components.json under "registries".';super(n,{code:F.NOT_CONFIGURED,context:{registryName:r},suggestion:"Add the registry configuration to your components.json file. Consult the registry documentation for the correct format."});this.registryName=r;this.name="RegistryNotConfiguredError"}registryName},Z=class extends ${constructor(r,n,s={}){super(s.message??`Failed to read local registry file: ${r}`,{code:F.LOCAL_FILE_ERROR,cause:n,context:{filePath:r,...s.context},suggestion:s.suggestion??"Check if the file exists and you have read permissions."});this.filePath=r;this.name="RegistryLocalFileError"}filePath},K=class extends ${constructor(r,n,s={}){let i=s.subject??"registry item",o=`Failed to parse ${i}: ${r}`;n instanceof Mt.ZodError&&(o=`Failed to parse ${i}: ${r}
7
+ ${n.errors.map(a=>` - ${a.path.join(".")}: ${a.message}`).join(`
8
+ `)}`);super(o,{code:F.PARSE_ERROR,cause:n,context:{item:r,...s.context},suggestion:s.suggestion??`The registry item may be corrupted or have an invalid format. Please make sure it returns a valid JSON object. See ${O}/schema/registry-item.json.`});this.item=r;this.parseError=n,this.name="RegistryParseError"}item;parseError},C=class extends ${constructor(t,r={}){super(t,{code:F.VALIDATION_ERROR,cause:r.cause,context:{...r.registryFile?{registryFile:r.registryFile}:{},...r.context},suggestion:r.suggestion??"Update the registry.json file and try running the command again."}),this.name="RegistryValidationError"}};var Ne=class extends ${constructor(r,n){let s=`Registry "${r}" requires the following environment variables:
9
+
10
+ `+n.map(i=>` \u2022 ${i}`).join(`
11
+ `);super(s,{code:F.MISSING_ENV_VARS,context:{registryName:r,missingVars:n},suggestion:"Set the required environment variables to your .env or .env.local file."});this.registryName=r;this.missingVars=n;this.name="RegistryMissingEnvironmentVariablesError"}registryName;missingVars},Oe=class extends ${constructor(r){let n=`Invalid registry namespace: "${r}". Registry names must start with @ (e.g., @love-ui, @v0).`;super(n,{code:F.VALIDATION_ERROR,context:{name:r},suggestion:"Use a valid registry name starting with @ or provide a direct URL to the registry."});this.name=r;this.name="RegistryInvalidNamespaceError"}name};var it=class extends ${constructor(r,n){let s=`Invalid components.json configuration in ${r}.`;n instanceof Mt.ZodError&&(s=`Invalid components.json configuration in ${r}:
12
+ ${n.errors.map(i=>` - ${i.path.join(".")}: ${i.message}`).join(`
13
+ `)}`);super(s,{code:F.INVALID_CONFIG,cause:n,context:{cwd:r},suggestion:"Check your components.json file for syntax errors or invalid configuration. Run 'npx love-ui@latest init' to regenerate a valid configuration."});this.cwd=r;this.name="ConfigParseError"}cwd},_e=class extends ${parseError;constructor(t){let r="Failed to parse registries index";if(t instanceof Mt.ZodError){let n=t.errors.filter(s=>s.path.length>0).map(s=>`"${s.path[0]}"`).filter((s,i,o)=>o.indexOf(s)===i);n.length>0?r=`Failed to parse registries index. Invalid registry namespace(s): ${n.join(", ")}
14
+ ${t.errors.map(s=>` - ${s.path.join(".")}: ${s.message}`).join(`
15
+ `)}`:r=`Failed to parse registries index:
16
+ ${t.errors.map(s=>` - ${s.path.join(".")}: ${s.message}`).join(`
17
+ `)}`}super(r,{code:F.PARSE_ERROR,cause:t,context:{parseError:t},suggestion:"The registries index may be corrupted or have invalid registry namespace format. Registry names must start with @ (e.g., @love-ui, @example)."}),this.parseError=t,this.name="RegistriesIndexParseError"}};import{detect as ss}from"@antfu/ni";async function is(e,{withFallback:t}={withFallback:!1}){let r=await ss({programmatic:!0,cwd:e});return r==="yarn@berry"?"yarn":r==="pnpm@6"?"pnpm":r==="bun"?"bun":r==="deno"?"deno":t?Wt()??"npm":r??"npm"}function Wt(e=process.env.npm_config_user_agent||""){return e.startsWith("yarn")?"yarn":e.startsWith("pnpm")?"pnpm":e.startsWith("bun")?"bun":e.startsWith("deno")?"deno":e.startsWith("npm")?"npm":null}function zt(e){return e==="pnpm"?"pnpm dlx":e==="bun"?"bunx":"npx"}async function yr(e){let t=await is(e);return zt(t)}import{z as os}from"zod";function be(e){if(E.break(),E.error("Something went wrong. Please check the error below for more details."),E.error("If the problem persists, please open an issue on GitHub."),E.error(""),typeof e=="string"&&(E.error(e),Fe()),e instanceof $&&(e.message&&(E.error(e.cause?"Error:":"Message:"),E.error(e.message)),e.cause&&(E.error(`
18
+ Message:`),E.error(e.cause)),e.suggestion&&(E.error(`
19
+ Suggestion:`),E.error(e.suggestion)),Fe()),e instanceof os.ZodError){E.error("Validation failed:");for(let[t,r]of Object.entries(e.flatten().fieldErrors))E.error(`- ${k.info(t)}: ${r}`);Fe()}e instanceof Error&&(E.error(e.message),Fe()),Fe()}function as(e){let t=e.match(/^(\d+)\.(\d+)\.\d+/);if(!t)return null;let r=Number.parseInt(t[1],10),n=Number.parseInt(t[2],10);return n===0?null:`${r}.${n-1}.0`}function cs(e=dr.version,t=process.argv.slice(2)){let r=as(e);return r?[...zt(Wt()).split(" "),`love-ui@${r}`,...t].map(ls).join(" "):null}function Fe(){let e=cs();e&&(E.error(""),E.error("You can also try a previous version to see if that works:"),E.error(e)),E.break(),process.exit(1)}function ls(e){return/^[a-zA-Z0-9_./:@%+=,-]+$/.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}import Zo from"path";import{promises as Vt}from"fs";import{readFileSync as ps}from"fs";import{homedir as gs}from"os";import xr from"path";var wr=process.env.LOVEUI_AUTH_DIR??xr.join(gs(),".love-ui"),Ut=xr.join(wr,"auth.json");function Ua(){return process.env.LOVEUI_PRO_API_URL??O}async function Bt(){try{return JSON.parse(await Vt.readFile(Ut,"utf8"))}catch(e){if(e&&typeof e=="object"&&"code"in e&&e.code==="ENOENT")return{};throw e}}async function Ir(e){await Vt.mkdir(wr,{recursive:!0,mode:448}),await Vt.writeFile(Ut,`${JSON.stringify(e,null,2)}
20
+ `,{encoding:"utf8",mode:384})}async function Ba(e){let t=await Bt();await Ir({...t,pro:{email:e.email,token:e.token,apiUrl:e.apiUrl,registryUrl:e.registryUrl,createdAt:new Date().toISOString()}})}async function Ja(){let e=await Bt();delete e.pro,await Ir(e)}async function Ga(){return(await Bt()).pro}function br(){if(process.env.LOVEUI_PRO_TOKEN)return process.env.LOVEUI_PRO_TOKEN;try{return JSON.parse(ps(Ut,"utf8")).pro?.token}catch{return}}function De(e){return e.replace(/\${(\w+)}/g,(t,r)=>process.env[r]||"")}function Ke(e){let t=[],r=/\${(\w+)}/g,n;for(;(n=r.exec(e))!==null;)t.push(n[1]);return t}var ms=/^(@[a-zA-Z0-9](?:[a-zA-Z0-9-_]*[a-zA-Z0-9])?)\/(.+)$/;function ve(e){if(!e.startsWith("@"))return{registry:null,item:e};let t=e.match(ms);return t?{registry:t[1],item:t[2]}:{registry:null,item:e}}import{z as c}from"zod";var us=c.union([c.string().refine(e=>e.includes("{name}"),{message:"Registry URL must include {name} placeholder"}),c.object({url:c.string().refine(e=>e.includes("{name}"),{message:"Registry URL must include {name} placeholder"}),params:c.record(c.string(),c.string()).optional(),headers:c.record(c.string(),c.string()).optional()})]),Gt=c.record(c.string().refine(e=>e.startsWith("@"),{message:"Registry names must start with @ (e.g., @v0, @acme)"}),us),ot=c.object({$schema:c.string().optional(),style:c.string(),rsc:c.coerce.boolean().default(!1),tsx:c.coerce.boolean().default(!0),tailwind:c.object({config:c.string().optional(),css:c.string(),baseColor:c.string(),cssVariables:c.boolean().default(!0),prefix:c.string().default("").optional()}),iconLibrary:c.string().optional(),rtl:c.coerce.boolean().default(!1).optional(),menuColor:c.enum(["default","inverted","default-translucent","inverted-translucent"]).default("default").optional(),menuAccent:c.enum(["subtle","bold"]).default("subtle").optional(),aliases:c.object({components:c.string(),utils:c.string(),ui:c.string().optional(),lib:c.string().optional(),hooks:c.string().optional()}),registries:Gt.optional()}).strict(),Me=ot.extend({resolvedPaths:c.object({cwd:c.string(),tailwindConfig:c.string(),tailwindCss:c.string(),utils:c.string(),components:c.string(),lib:c.string(),hooks:c.string(),ui:c.string()})}),vr=c.record(Me),at=c.enum(["registry:lib","registry:block","registry:component","registry:ui","registry:hook","registry:page","registry:file","registry:theme","registry:style","registry:item","registry:base","registry:font","registry:example","registry:internal"]),ct=c.discriminatedUnion("type",[c.object({path:c.string(),content:c.string().optional(),type:c.enum(["registry:file","registry:page"]),target:c.string()}),c.object({path:c.string(),content:c.string().optional(),type:at.exclude(["registry:file","registry:page"]),target:c.string().optional()})]),fs=c.object({config:c.object({content:c.array(c.string()).optional(),theme:c.record(c.string(),c.any()).optional(),plugins:c.array(c.string()).optional()}).optional()}),Jt=c.object({theme:c.record(c.string(),c.string()).optional(),light:c.record(c.string(),c.string()).optional(),dark:c.record(c.string(),c.string()).optional()}),Rr=c.lazy(()=>c.union([c.string(),c.array(c.union([c.string(),c.record(c.string(),c.string())])),c.record(c.string(),Rr)])),ds=c.record(c.string(),Rr),hs=c.record(c.string(),c.string()),lt=c.object({family:c.string(),provider:c.literal("google"),import:c.string(),variable:c.string(),weight:c.array(c.string()).optional(),subsets:c.array(c.string()).optional(),selector:c.string().optional(),dependency:c.string().optional()}),me=c.object({$schema:c.string().optional(),extends:c.string().optional(),name:c.string(),title:c.string().optional(),author:c.string().min(2).optional(),description:c.string().optional(),dependencies:c.array(c.string()).optional(),devDependencies:c.array(c.string()).optional(),registryDependencies:c.array(c.string()).optional(),files:c.array(ct).optional(),tailwind:fs.optional(),cssVars:Jt.optional(),css:ds.optional(),envVars:hs.optional(),meta:c.record(c.string(),c.any()).optional(),docs:c.string().optional(),categories:c.array(c.string()).optional()}),M=c.discriminatedUnion("type",[me.extend({type:c.literal("registry:base"),config:ot.deepPartial().optional()}),me.extend({type:c.literal("registry:font"),font:lt}),me.extend({type:at.exclude(["registry:base","registry:font"])})]),ys=c.object({$schema:c.string().optional(),name:c.string().optional(),homepage:c.string().optional(),include:c.array(c.string()).optional(),items:c.array(M).optional()}).refine(e=>e.items!==void 0||e.include!==void 0,{message:"Registry must define at least one of `items` or `include`.",path:["items"]}),qt=ys.transform(e=>({...e,items:e.items??[]})),Er=qt.pipe(c.object({$schema:c.string().optional(),name:c.string(),homepage:c.string(),include:c.array(c.string()).optional(),items:c.array(M)})),Ht=c.array(M),Sr=c.array(c.object({name:c.string(),label:c.string()})),kr=c.record(c.string(),c.record(c.string(),c.string())),Cr=c.object({inlineColors:c.object({light:c.record(c.string(),c.string()),dark:c.record(c.string(),c.string())}).optional(),cssVars:Jt,cssVarsV4:Jt.optional(),inlineColorsTemplate:c.string().optional(),cssVarsTemplate:c.string().optional()}),Tr=me.pick({dependencies:!0,devDependencies:!0,files:!0,tailwind:!0,cssVars:!0,css:!0,envVars:!0,docs:!0}).extend({fonts:c.array(me.extend({type:c.literal("registry:font"),font:lt})).optional()}),xs=c.object({name:c.string(),type:c.string().optional(),description:c.string().optional(),registry:c.string(),addCommandArgument:c.string()}),Pr=c.object({pagination:c.object({total:c.number(),offset:c.number(),limit:c.number(),hasMore:c.boolean()}),items:c.array(xs)}),Xa=c.record(c.string().regex(/^@[a-zA-Z0-9][a-zA-Z0-9-_]*$/),c.string()),$r=c.array(c.object({name:c.string(),homepage:c.string().optional(),url:c.string(),description:c.string().optional()})),ws=c.object({name:c.string(),title:c.string(),description:c.string(),base:c.string(),style:c.string(),baseColor:c.string(),theme:c.string(),iconLibrary:c.string(),font:c.string(),rtl:c.coerce.boolean().default(!1),menuAccent:c.enum(["subtle","bold"]),menuColor:c.enum(["default","inverted","default-translucent","inverted-translucent"]),radius:c.string()}),jr=c.object({presets:c.array(ws)});import{promises as Zs}from"fs";import ie from"path";var W={"next-app":{name:"next-app",label:"Next.js",links:{installation:`${O}/docs/installation/next`,tailwind:"https://tailwindcss.com/docs/guides/nextjs"}},"next-pages":{name:"next-pages",label:"Next.js",links:{installation:`${O}/docs/installation/next`,tailwind:"https://tailwindcss.com/docs/guides/nextjs"}},remix:{name:"remix",label:"Remix",links:{installation:`${O}/docs/installation/remix`,tailwind:"https://tailwindcss.com/docs/guides/remix"}},"react-router":{name:"react-router",label:"React Router",links:{installation:`${O}/docs/installation/react-router`,tailwind:"https://tailwindcss.com/docs/installation/framework-guides/react-router"}},vite:{name:"vite",label:"Vite",links:{installation:`${O}/docs/installation/vite`,tailwind:"https://tailwindcss.com/docs/guides/vite"}},astro:{name:"astro",label:"Astro",links:{installation:`${O}/docs/installation/astro`,tailwind:"https://tailwindcss.com/docs/guides/astro"}},laravel:{name:"laravel",label:"Laravel",links:{installation:`${O}/docs/installation/laravel`,tailwind:"https://tailwindcss.com/docs/guides/laravel"}},"tanstack-start":{name:"tanstack-start",label:"TanStack Start",links:{installation:`${O}/docs/installation/tanstack`,tailwind:"https://tailwindcss.com/docs/installation/using-postcss"}},gatsby:{name:"gatsby",label:"Gatsby",links:{installation:`${O}/docs/installation/gatsby`,tailwind:"https://tailwindcss.com/docs/guides/gatsby"}},expo:{name:"expo",label:"Expo",links:{installation:`${O}/docs/installation/expo`,tailwind:"https://www.nativewind.dev/docs/getting-started/installation"}},manual:{name:"manual",label:"Manual",links:{installation:`${O}/docs/installation/manual`,tailwind:"https://tailwindcss.com/docs/installation"}}};import z from"path";import Ar from"path";function pt(e){let t=[e];for(;t.length;){let r=t.shift();if(typeof r=="string"){if(r.startsWith("./"))return r;continue}if(Array.isArray(r)){t.unshift(...r);continue}r&&typeof r=="object"&&t.unshift(...Object.values(r))}return null}function gt(e){if(!e.includes("*"))return"strip_extension";let t=e.slice(e.indexOf("*")+1);return t&&/^\.[^/]+$/.test(t)?"strip_extension":"preserve_extension"}function mt(e,t){let r=t.find(s=>!s.hasWildcard&&s.key===e);if(r)return{path:Ar.resolve(r.rootDir,r.target),matchedAlias:r.key,matchedTarget:r.target,emitMode:r.emitMode};let n=t.filter(s=>s.hasWildcard).sort((s,i)=>i.key.length-s.key.length);for(let s of n){let i=Yt(e,s.key,{allowBareAliasBase:!0});if(i!==null)return{path:Ar.resolve(s.rootDir,Is(s.target,i)),matchedAlias:s.key,matchedTarget:s.target,emitMode:s.emitMode}}return null}function Yt(e,t,r={}){if(!t.includes("*"))return e===t?"":null;let[n,s=""]=t.split("*");return e.startsWith(n)&&e.endsWith(s)?s?e.slice(n.length,-s.length):e.slice(n.length):r.allowBareAliasBase&&s===""&&n.endsWith("/")&&e===n.slice(0,-1)?"":null}function Is(e,t){if(!e.includes("*"))return e;let[r,n=""]=e.split("*");return t?`${r}${t}${n}`:r.replace(/\/$/,"")}import Rs from"path";import bs from"path";import vs from"fs-extra";function se(e="",t=!0){let r=bs.join(e,"package.json");return vs.readJSONSync(r,{throws:t})}var Zt=new Map;function Xt(e){let t=Rs.resolve(e),r=Zt.get(t);if(r)return r;let s=se(e,!1)?.imports;if(!s||typeof s!="object"||Array.isArray(s))return Zt.set(t,[]),[];let i=[];for(let[o,a]of Object.entries(s)){if(!o.startsWith("#"))continue;let l=pt(a);l&&i.push({key:o,aliasBase:o==="#*"?"#":o.endsWith("/*")?o.slice(0,-2):o,target:l,emitMode:gt(l),hasWildcard:o.includes("*"),rootDir:t})}return Zt.set(t,i),i}function Lr(e){let t=Xt(e).map(r=>r.aliasBase);return t.length?ks(t):null}function ze(e,t){return mt(e,Xt(t))}function Nr(e){let t=Xt(e),r=t.some(n=>n.key==="#*")?{components:"#components",ui:"#components/ui",lib:"#lib",hooks:"#hooks",utils:"#lib/utils"}:null;return{components:We(t,"components")??r?.components,ui:We(t,"ui")??r?.ui,lib:We(t,"lib")??r?.lib,hooks:We(t,"hooks")??r?.hooks,utils:We(t,"utils")??r?.utils}}function We(e,t){return e.map(n=>({entry:n,score:Es(n,t)})).filter(n=>n.score>0).sort((n,s)=>s.score-n.score||s.entry.aliasBase.length-n.entry.aliasBase.length)[0]?.entry.aliasBase}function Es(e,t){let r=e.aliasBase.toLowerCase(),n=Ss(e.target).toLowerCase();switch(t){case"components":return r.endsWith("/ui")||n.includes("/components/ui")?0:ut(r,"components")?4:ut(n,"components")?3:0;case"ui":return r.endsWith("/ui")||r==="#ui"?5:n.includes("/components/ui")?4:n.endsWith("/ui")?3:0;case"lib":return r==="#lib"||r.endsWith("/lib")?5:n.endsWith("/lib")?4:ut(n,"lib")?3:0;case"hooks":return r==="#hooks"||r.endsWith("/hooks")?5:n.endsWith("/hooks")?4:ut(n,"hooks")?3:0;case"utils":return r==="#utils"||r.endsWith("/utils")?5:n.endsWith("/lib/utils")?4:n.endsWith("/utils")?3:0}}function Ss(e){return e.replace(/\/\*$/,"").replace(/\*$/,"").replace(/\/index\.[^/]+$/,"")}function ut(e,t){return e===t||e.includes(`/${t}`)||e.includes(`${t}/`)}function ks(e){let t=e.map(r=>r.slice(1).split("/").filter(Boolean)).reduce((r,n,s)=>s?r.filter((i,o)=>n[o]===i):n,[]);return t.length?`#${t.join("/")}`:"#"}import Y from"path";import X from"path";import Or from"fast-glob";import J from"fs-extra";var Cs=["next.config.*","vite.config.*","astro.config.*","remix.config.*","nuxt.config.*","svelte.config.*","gatsby-config.*","angular.json"];async function xc(e){if(J.existsSync(X.resolve(e,"pnpm-workspace.yaml")))return!0;let t=X.resolve(e,"package.json");if(J.existsSync(t))try{if((await J.readJson(t)).workspaces)return!0}catch{}return!!(J.existsSync(X.resolve(e,"lerna.json"))||J.existsSync(X.resolve(e,"nx.json")))}async function wc(e){let t=await ft(e);if(!t.length)return[];let r=await Or(t,{cwd:e,onlyDirectories:!0,ignore:["**/node_modules/**"]}),n=[];for(let s of r){let i=X.resolve(e,s);if(!J.existsSync(X.resolve(i,"package.json")))continue;let o=J.existsSync(X.resolve(i,"components.json")),a=Cs.some(l=>Or.sync(l,{cwd:i,dot:!0}).length>0);(o||a)&&n.push({name:s,hasConfig:o})}return n}function Ic(e,t,r){let n=r?.cwdFlag??"-c";E.break(),E.log(`It looks like you are running ${k.info(e)} from a monorepo root.`),E.log(`To use love-ui in a specific workspace, use the ${k.info(n)} flag:`),E.break();for(let s of t)E.log(` love-ui ${e} ${n} ${s.name}`);E.break()}async function ft(e){let t=[],r=X.resolve(e,"pnpm-workspace.yaml");if(J.existsSync(r)){let s=await J.readFile(r,"utf8");t.push(...Ts(s))}let n=X.resolve(e,"package.json");if(J.existsSync(n))try{let s=await J.readJson(n),i=Array.isArray(s.workspaces)?s.workspaces:s.workspaces?.packages;Array.isArray(i)&&t.push(...i.filter(o=>!o.startsWith("!")))}catch{}return Array.from(new Set(t))}function Ts(e){let t=[],r=!1,n=0;for(let s of e.split(`
21
+ `)){let i=s.trim();if(!i||i.startsWith("#"))continue;let o=s.match(/^(\s*)([A-Za-z0-9_-]+)\s*:/);if(o){n=o[1].length,r=o[2]==="packages";continue}if(!r)continue;let a=s.match(/^(\s*)-\s*(.+?)\s*(?:#.*)?$/);!a||a[1].length<=n||t.push(a[2].trim().replace(/^["']|["']$/g,""))}return t}import Ps from"fast-glob";import $s from"fs-extra";var _r=new Map,Qt=new Map,dt=new Map;async function Fr(e,t){let r=_s(e);if(!r)return null;let n=await As(t,r.packageName);return n?mt(e,js(n)):null}function js(e){let t=`${e.packageRoot}:${e.packageName}`,r=Qt.get(t);if(r)return r;let s=se(e.packageRoot,!1)?.exports;if(!s||typeof s!="object"||Array.isArray(s))return Qt.set(t,[]),[];let i=[];for(let[o,a]of Object.entries(s)){if(o!=="."&&!o.startsWith("./"))continue;let l=pt(a);if(!l)continue;let p=Fs(e.packageName,o);i.push({key:o.includes("*")?`${p}/*`:p,aliasBase:p,target:l,emitMode:gt(l),hasWildcard:o.includes("*"),rootDir:e.packageRoot})}return Qt.set(t,i),i}async function As(e,t){let r=await Ns(e);if(!r)return null;let n=_r.get(r);if(n?.has(t))return n.get(t)??null;let s=await Ls(r);return _r.set(r,s),s.get(t)??null}async function Ls(e){let t=await ft(e),r=new Map;if(!t.length)return r;let n=await Ps(t.map(s=>Y.posix.join(s.split(Y.sep).join("/"),"package.json")),{cwd:e,ignore:["**/node_modules/**"]});for(let s of n){let i=Y.resolve(e,Y.dirname(s)),a=se(i,!1)?.name;a&&r.set(a,{packageName:a,packageRoot:i})}return r}async function Ns(e){let t=Y.resolve(e),r=dt.get(t);if(r!==void 0)return r;let n=t,s=await Os(t);for(;;){if((await ft(n)).length)return dt.set(t,n),n;if(s&&n===s)return dt.set(t,null),null;let o=Y.dirname(n);if(o===n)return dt.set(t,null),null;n=o}}async function Os(e){let t=Y.resolve(e);for(;;){if($s.existsSync(Y.resolve(t,".git")))return t;let r=Y.dirname(t);if(r===t)return null;t=r}}function _s(e){if(e.startsWith("#")||e.startsWith(".")||Y.isAbsolute(e))return null;let t=e.split("/");return e.startsWith("@")?t.length<2?null:{packageName:`${t[0]}/${t[1]}`}:{packageName:t[0]}}function Fs(e,t){if(t===".")return e;let r=t.slice(2).replace(/\/\*$/,"");return r?`${e}/${r}`:e}import{createMatchPath as Ds}from"tsconfig-paths";async function Ve(e,t){let r=t.cwd??t.absoluteBaseUrl;if(e.startsWith("#")){let s=ze(e,r);if(s)return{path:s.path,source:"package_imports",matchedAlias:s.matchedAlias,matchedTarget:s.matchedTarget,emitMode:s.emitMode}}let n=await Fr(e,r);return n?{path:n.path,source:"workspace_package_exports",matchedAlias:n.matchedAlias,matchedTarget:n.matchedTarget,emitMode:n.emitMode}:Ms(e,t)}function er(e,t){return e.startsWith("#")?!0:t?e.startsWith(`${t}/`):!1}function Ks(e){return/^@[^/]+\/[^/]+(?:\/.*)?$/.test(e)}function Ms(e,t){let r=Ds(t.absoluteBaseUrl,t.paths)(e,void 0,()=>!0,[".ts",".tsx",".jsx",".js",".css"]);if(!r)return null;let n=Ws(e,t.paths);return!n&&Ks(e)?null:{path:r,source:"tsconfig_paths",matchedAlias:n?.key??e,matchedTarget:n?.target??r,emitMode:"strip_extension"}}function Ws(e,t){for(let[r,n]of Object.entries(t)){let s=Array.isArray(n)?n:[n],i=Yt(e,r);if(i!==null)return{key:r,target:s[0]?.includes("*")&&i!==null?s[0].replace(/\*/g,i):s[0]}}return null}import{cosmiconfig as zs}from"cosmiconfig";import Vs from"fast-glob";import{loadConfig as Us}from"tsconfig-paths";var Vc="@/components",Uc="@/lib/utils",Bc="app/globals.css",Jc="tailwind.config.js";var Bs="love-ui/icons",ht=zs("components",{searchPlaces:["components.json"]});async function Be(e){let t=await Gs(e);return t?(t.iconLibrary=Bs,await yt(e,t)):null}async function yt(e,t){t.registries={...U,...t.registries||{}};let r=await Us(e);if(r.resultType==="failed")throw new Error(`Failed to load ${t.tsx?"tsconfig":"jsconfig"}.json. ${r.message??""}`.trim());let n=await Ue("utils",t.aliases.utils,e,r),s=await Ue("components",t.aliases.components,e,r),i=t.aliases.ui?await Ue("ui",t.aliases.ui,e,r):z.resolve(s??e,"ui"),o=t.aliases.lib?await Ue("lib",t.aliases.lib,e,r):z.resolve(n??e,".."),a=t.aliases.hooks?await Ue("hooks",t.aliases.hooks,e,r):z.resolve(s??e,"..","hooks");return Js(e,{components:s,utils:n,ui:i,lib:o,hooks:a}),Me.parse({...t,resolvedPaths:{cwd:e,tailwindConfig:t.tailwind.config?z.resolve(e,t.tailwind.config):"",tailwindCss:z.resolve(e,t.tailwind.css),utils:n,components:s,ui:i,lib:o,hooks:a}})}async function Ue(e,t,r,n){let s=await Ve(t,{...n,cwd:r});if(!s?.path||t.startsWith("#")&&s.path===z.resolve(r,t))return null;if(e!=="utils"&&(s.source==="package_imports"||s.source==="workspace_package_exports")){if(!s.matchedAlias.includes("*")&&/\/index\.[^/]+$/.test(s.path))return z.dirname(s.path);if(s.matchedAlias.includes("*")&&/\.[^/]+$/.test(s.path))return s.path.replace(/\.[^/]+$/,"")}return s.path}function Js(e,t){let r=["components","ui","lib","hooks","utils"].filter(n=>!t[n]);if(r.length)throw new Error([`Could not resolve the following aliases in ${k.info(e)}: ${k.info(r.join(", "))}.`,`Configure path aliases in ${k.info("tsconfig.json")} or imports in ${k.info("package.json")} for this workspace and try again.`].join(`
22
+ `))}async function Gs(e){try{let t=await ht.search(e);if(!t)return null;let r=ot.parse(t.config);if(r.registries){for(let n of Object.keys(r.registries))if(n in U)throw new Error(`"${n}" is a built-in registry and cannot be overridden.`)}return r}catch(t){let r=`${e}/components.json`;throw t instanceof Error&&t.message.includes("reserved registry")?t:new Error(`Invalid configuration found in ${k.info(r)}.`)}}async function Gc(e){let t={};for(let n of Object.keys(e.aliases)){if(!Hs(n,e))continue;let s=e.resolvedPaths[n],i=await qs(e.resolvedPaths.cwd,s);if(!i){t[n]=e;continue}let o=await Be(i);if(!o)throw new Error([`Could not load the workspace config in ${k.info(i)}.`,`Add ${k.info("components.json")} to this workspace and configure its path aliases or package imports, then try again.`].join(`
23
+ `));t[n]=o}let r=vr.safeParse(t);return r.success?r.data:null}async function qs(e,t){let r=Ys(e,t),n=z.relative(r,t),i=(await Vs.glob("**/package.json",{cwd:r,deep:3,ignore:["**/node_modules/**","**/dist/**","**/build/**","**/public/**"]})).map(o=>z.dirname(o)).find(o=>n.startsWith(o));return i?z.join(r,i):null}function Hs(e,t){return Object.keys(t.resolvedPaths).filter(r=>r!=="utils").includes(e)}function Ys(e,t){let r=e.split(z.sep),n=t.split(z.sep),s=[];for(let i=0;i<Math.min(r.length,n.length)&&r[i]===n[i];i++)s.push(r[i]);return s.join(z.sep)}async function Dr(e,t){return(await Q(e))?.tailwindVersion==="v4"?"new-york-v4":t}function qc(e){return"base"}function Kr(e){let t={resolvedPaths:{cwd:process.cwd(),tailwindConfig:"",tailwindCss:"",utils:"",components:"",ui:"",lib:"",hooks:""},style:"",tailwind:{config:"",css:"",baseColor:"",cssVariables:!1},rsc:!1,tsx:!0,aliases:{components:"",utils:""},registries:{...U}};return e?{...t,...e,resolvedPaths:{...t.resolvedPaths,...e.resolvedPaths||{}},tailwind:{...t.tailwind,...e.tailwind||{}},aliases:{...t.aliases,...e.aliases||{}},registries:{...t.registries,...e.registries||{}}}:t}import wt from"fast-glob";import oe from"fs-extra";import{loadConfig as Xs}from"tsconfig-paths";import{z as Re}from"zod";var It=["**/node_modules/**",".next","public","dist","build"],Qs=Re.object({compilerOptions:Re.object({paths:Re.record(Re.string().or(Re.array(Re.string())))})});async function Q(e,t){let[r,n,s,i,o,a,l,p]=await Promise.all([wt.glob("**/{next,vite,astro,app}.config.*|gatsby-config.*|composer.json|react-router.config.*",{cwd:e,deep:3,ignore:It}),oe.pathExists(ie.resolve(e,"src")),si(e),ri(e),ti(e,t?.configCssFile),Mr(e),Wr(e),se(e,!1)]),g=await oe.pathExists(ie.resolve(e,`${n?"src/":""}app`)),m={framework:W.manual,isSrcDir:n,isRSC:!1,isTsx:s,tailwindConfigFile:i,tailwindCssFile:o,tailwindVersion:a,frameworkVersion:null,aliasPrefix:l.prefix};if(r.find(d=>d.startsWith("next.config."))?.length)return m.framework=g?W["next-app"]:W["next-pages"],m.isRSC=g,m.frameworkVersion=await ei(m.framework,p),m;if(r.find(d=>d.startsWith("astro.config."))?.length)return m.framework=W.astro,m;if(r.find(d=>d.startsWith("gatsby-config."))?.length)return m.framework=W.gatsby,m;if(r.find(d=>d.startsWith("composer.json"))?.length)return m.framework=W.laravel,m;if(Object.keys(p?.dependencies??{}).find(d=>d.startsWith("@remix-run/")))return m.framework=W.remix,m;if([...Object.keys(p?.dependencies??{}),...Object.keys(p?.devDependencies??{})].find(d=>d.startsWith("@tanstack/react-start")))return m.framework=W["tanstack-start"],m;if(r.find(d=>d.startsWith("react-router.config."))?.length)return m.framework=W["react-router"],m;if(r.find(d=>d.startsWith("vite.config."))?.length)return m.framework=W.vite,m;let h=r.find(d=>d.startsWith("app.config"));return h?.length&&(await oe.readFile(ie.resolve(e,h),"utf8")).includes("defineConfig")?(m.framework=W.vite,m):(p?.dependencies?.expo&&(m.framework=W.expo),m)}async function ei(e,t){if(!t||!["next-app","next-pages"].includes(e.name))return null;let r=t.dependencies?.next||t.devDependencies?.next;if(!r)return null;let n=r.match(/^[\^~]?(\d+\.\d+\.\d+)/);if(n)return n[1];let s=r.match(/(\d+\.\d+\.\d+)/);return s?s[1]:r}async function Mr(e){let[t,r]=await Promise.all([se(e,!1),Be(e)]);return r?.tailwind?.config===""?"v4":!t?.dependencies?.tailwindcss&&!t?.devDependencies?.tailwindcss?null:/^(?:\^|~)?3(?:\.\d+)*(?:-.*)?$/.test(t?.dependencies?.tailwindcss||t?.devDependencies?.tailwindcss||"")?"v3":"v4"}async function ti(e,t){if(t){let i=ie.resolve(e,t);if(await oe.pathExists(i))return t}let[r,n]=await Promise.all([wt.glob(["**/*.css","**/*.scss"],{cwd:e,deep:5,ignore:It}),Mr(e)]);if(!r.length)return null;let s=n==="v4"?'@import "tailwindcss"':"@tailwind base";for(let i of r){let o=await oe.readFile(ie.resolve(e,i),"utf8");if(o.includes('@import "tailwindcss"')||o.includes("@import 'tailwindcss'")||o.includes("@tailwind base"))return i}return null}async function ri(e){let t=await wt.glob("tailwind.config.*",{cwd:e,deep:3,ignore:It});return t.length?t[0]:null}async function ni(e){let t=await Xs(e),r=t?.resultType==="success"&&Object.entries(t.paths).length?t.paths:(await ii(e))?.compilerOptions.paths;if(!r||!Object.entries(r).length)return null;for(let[n,s]of Object.entries(r)){let i=Array.isArray(s)?s:[s];if(i.includes("./*")||i.includes("./src/*")||i.includes("./app/*")||i.includes("./resources/js/*"))return n.replace(/\/\*$/,"")??null}return Object.keys(r)?.[0].replace(/\/\*$/,"")??null}async function Wr(e){let t=await ni(e),r=Lr(e);return r&&t?.startsWith("#")?{prefix:r,source:"package_imports"}:t?{prefix:t,source:"tsconfig_paths"}:r?{prefix:r,source:"package_imports"}:{prefix:null,source:null}}async function si(e){return(await wt.glob("tsconfig.*",{cwd:e,deep:1,ignore:It})).length>0}async function ii(e){for(let t of["tsconfig.json","tsconfig.web.json","tsconfig.app.json"]){let r=ie.resolve(e,t);if(!await oe.pathExists(r))continue;let n=await oe.readFile(r,"utf8"),s;try{s=JSON.parse(oi(n))}catch{continue}let i=Qs.safeParse(s);if(!i.error)return i.data}return null}function oi(e){let t="",r=!1,n=!1;for(let s=0;s<e.length;s++){let i=e[s],o=e[s+1];if(r){if(t+=i,n){n=!1;continue}if(i==="\\"){n=!0;continue}i==='"'&&(r=!1);continue}if(i==='"'){r=!0,t+=i;continue}if(i==="/"&&o==="/"){for(;s<e.length&&e[s]!==`
24
+ `;)s++;s<e.length&&(t+=e[s]);continue}if(i==="/"&&o==="*"){for(s+=2;s<e.length;){if(e[s]==="*"&&e[s+1]==="/"){s++;break}e[s]===`
25
+ `&&(t+=`
26
+ `),s++}continue}if(i===","){let a=s+1;for(;a<e.length;){for(;/\s/.test(e[a]??"");)a++;if(e[a]==="/"&&e[a+1]==="/"){for(a+=2;a<e.length&&e[a]!==`
27
+ `&&e[a]!=="\r";)a++;continue}if(e[a]==="/"&&e[a+1]==="*"){for(a+=2;a<e.length&&!(e[a]==="*"&&e[a+1]==="/");)a++;a+=2;continue}break}if(e[a]==="}"||e[a]==="]")continue}t+=i}return t}async function ll(e,t=null){let[r,n,s]=await Promise.all([Be(e),t?Promise.resolve(t):Q(e),Wr(e)]);if(r)return r;if(!n||!n.tailwindCssFile||n.tailwindVersion==="v3"&&!n.tailwindConfigFile)return null;let i=s.source==="package_imports"?Nr(e):null;if(!n.aliasPrefix)return null;let o=ai(n.aliasPrefix,s.source==="package_imports"),a=s.source==="package_imports"&&i?ci({...o,components:i.components??o.components,ui:i.ui??o.ui,hooks:i.hooks??o.hooks,lib:i.lib??o.lib,utils:i.utils??o.utils}):o;if(!a.components||!a.utils)return null;let l={$schema:"https://www.loveui.dev/schema.json",rsc:n.isRSC,tsx:n.isTsx,style:"new-york",tailwind:{config:n.tailwindConfigFile??"",baseColor:"zinc",css:n.tailwindCssFile,cssVariables:!0,prefix:""},iconLibrary:"love-ui/icons",aliases:a};return await yt(e,l)}function ai(e,t=!1){return t&&e==="#"?{components:"",ui:void 0,hooks:void 0,lib:void 0,utils:""}:{components:`${e}/components`,ui:`${e}/components/ui`,hooks:`${e}/hooks`,lib:`${e}/lib`,utils:`${e}/lib/utils`}}function ci(e){let t={...e};return!t.ui&&t.components&&(t.ui=`${t.components}/ui`),!t.lib&&t.utils.endsWith("/utils")&&(t.lib=t.utils.slice(0,-6)),!t.utils&&t.lib&&(t.utils=`${t.lib}/utils`),t}async function bt(e){if(!e.resolvedPaths?.cwd)return"v3";let t=await Q(e.resolvedPaths.cwd);return t?.tailwindVersion?t.tailwindVersion:null}async function pl(e){let t=await Be(e);if(!t)return[];let n=(await yt(e,t)).resolvedPaths.ui;if(!oe.existsSync(n))return[];let s=await xt(),i=new Set(s?.map(a=>a.name)??[]);return(await Zs.readdir(n)).filter(a=>/\.(tsx|jsx)$/.test(a)).map(a=>ie.basename(a,ie.extname(a))).filter(a=>i.has(a))}import{existsSync as ke,promises as le,statSync as Zi}from"fs";import{tmpdir as un}from"os";import y,{basename as nr}from"path";function zr(e,t,r={}){let{ignoreImports:n=!1}=r,s=e.replace(/\r\n/g,`
28
+ `).trim(),i=t.replace(/\r\n/g,`
29
+ `).trim();if(s===i)return!0;if(!n)return!1;let o=/^(import\s+(?:type\s+)?(?:\*\s+as\s+\w+|\{[^}]*\}|\w+)?(?:\s*,\s*(?:\{[^}]*\}|\w+))?\s+from\s+["'])([^"']+)(["'])/gm,a=g=>g.replace(o,(m,h,d,x)=>{if(d.startsWith("."))return`${h}${d}${x}`;let I=d.split("/"),S=I[I.length-1];return`${h}@normalized/${S}${x}`}),l=a(s),p=a(i);return l===p}import{existsSync as li}from"fs";import Vr from"path";function ue(e){let t=Vr.basename(e);return/^\.env(\.|$)/.test(t)}function Ur(e){let t=[".env.local",".env",".env.development.local",".env.development"];for(let r of t){let n=Vr.join(e,r);if(li(n))return n}return null}function Ee(e){let t=e.split(`
30
+ `),r={};for(let n of t){let s=n.trim();if(!s||s.startsWith("#"))continue;let i=s.indexOf("=");if(i===-1)continue;let o=s.substring(0,i).trim(),a=s.substring(i+1).trim();o&&(r[o]=a.replace(/^["']|["']$/g,""))}return r}function Br(e,t){let r=Ee(e),n=Ee(t),s=[];for(let i of Object.keys(n))i in r||s.push(i);return s}function Jr(e,t){let r=Ee(e),n=Ee(t),s=e.trimEnd();s&&!s.endsWith(`
31
+ `)&&(s+=`
32
+ `);let i=[];for(let[o,a]of Object.entries(n))o in r||i.push(`${o}=${a}`);return i.length>0?(s&&(s+=`
33
+ `),s+=i.join(`
34
+ `),s+`
35
+ `):s&&!s.endsWith(`
36
+ `)?s+`
37
+ `:s}import pi from"ora";function fe(e,t){return pi({text:e,isSilent:t?.silent})}import{promises as Ki}from"fs";import{tmpdir as Mi}from"os";import tn from"path";import{SyntaxKind as gi}from"ts-morph";var vt=async({sourceFile:e,config:t,baseColor:r})=>{if(t.tailwind?.cssVariables||!r?.inlineColors)return e;let n=r.inlineColors;return e.getDescendantsOfKind(gi.StringLiteral).forEach(s=>{let i=s.getLiteralText(),o=ui(i,n).trim();o!==i&&s.setLiteralValue(o)}),e};function Je(e){if(!e.includes("/")&&!e.includes(":"))return[null,e,null];let t=-1,r=0;for(let l=e.length-1;l>=0;l--){let p=e[l];if(p==="]")r++;else if(p==="[")r--;else if(p===":"&&r===0){t=l;break}}let n=null,s;t===-1?s=e:(n=e.slice(0,t),s=e.slice(t+1));let i=s.lastIndexOf("/");if(i===-1)return[n,s,null];let o=s.slice(0,i),a=s.slice(i+1);return[n,o,a]}var mi=["bg-","text-","border-","ring-offset-","ring-"];function ui(e,t){e.includes(" border ")&&(e=e.replace(" border "," border border-border "));let r=e.split(" "),n=new Set,s=new Set;for(let i of r){let[o,a,l]=Je(i),p=mi.find(m=>a?.startsWith(m));if(!p){n.has(i)||n.add(i);continue}let g=a?.replace(p,"");if(g&&g in t.light){n.add([o,`${p}${t.light[g]}`].filter(Boolean).join(":")+(l?`/${l}`:"")),s.add(["dark",o,`${p}${t.dark[g]}`].filter(Boolean).join(":")+(l?`/${l}`:""));continue}n.has(i)||n.add(i)}return[...Array.from(n),...Array.from(s)].join(" ").trim()}var Se={lucide:{name:"lucide",title:"Lucide",packages:["lucide-react"],import:"import { ICON } from 'lucide-react'",usage:"<ICON />",export:"lucide-react"},tabler:{name:"tabler",title:"Tabler Icons",packages:["@tabler/icons-react"],import:"import { ICON } from '@tabler/icons-react'",usage:"<ICON />",export:"@tabler/icons-react"},hugeicons:{name:"hugeicons",title:"HugeIcons",packages:["@hugeicons/react","@hugeicons/core-free-icons"],import:`import { HugeiconsIcon } from '@hugeicons/react'
38
+ import { ICON } from '@hugeicons/core-free-icons';`,usage:"<HugeiconsIcon icon={ICON} strokeWidth={2} />",export:"@hugeicons/core-free-icons"},phosphor:{name:"phosphor",title:"Phosphor Icons",packages:["@phosphor-icons/react"],import:"import { ICON } from '@phosphor-icons/react'",usage:"<ICON strokeWidth={2} />",export:"@phosphor-icons/react"},remixicon:{name:"remixicon",title:"Remix Icon",packages:["@remixicon/react"],import:"import { ICON } from '@remixicon/react'",usage:"<ICON />",export:"@remixicon/react"}};import{SyntaxKind as B}from"ts-morph";var Rt=async({sourceFile:e,config:t})=>{let r=t.iconLibrary;if(!r||!(r in Se))return e;let n=r,s=Se[n],i=[];for(let o of e.getDescendantsOfKind(B.JsxSelfClosingElement)){if(o.getTagNameNode()?.getText()!=="IconPlaceholder")continue;let a=o.getAttributes().find(x=>x.getKind()!==B.JsxAttribute?!1:x.asKindOrThrow(B.JsxAttribute).getNameNode().getText()===n);if(!a)continue;let l=a.asKindOrThrow(B.JsxAttribute),p=l.getInitializer()?.getText().replace(/^["']|["']$/g,"");if(!p)continue;i.includes(p)||i.push(p);let m=s.usage.match(/<(\w+)([^>]*)\s*\/>/);l.remove();for(let x of o.getAttributes()){if(x.getKind()!==B.JsxAttribute)continue;let I=x.asKindOrThrow(B.JsxAttribute);I.getNameNode().getText()in Se&&I.remove()}if(!m){o.getTagNameNode()?.replaceWithText(p);continue}let[,h,d]=m;if(h==="ICON"){let x=o.getAttributes().filter(I=>I.getKind()!==B.JsxAttribute?!0:!(I.asKindOrThrow(B.JsxAttribute).getNameNode().getText()in Se)).map(I=>I.getText()).join(" ");x.trim()?o.replaceWithText(`<${p} ${x} />`):o.getTagNameNode()?.replaceWithText(p)}else{let x=new Set(o.getAttributes().filter(f=>f.getKind()===B.JsxAttribute).map(f=>f.asKindOrThrow(B.JsxAttribute).getNameNode().getText())),S=d.replace(/\{ICON\}/g,`{${p}}`).trim().split(/\s+(?=\w+=)/).filter(f=>f).map(f=>{let P=f.split("=")[0];return P&&!x.has(P)?f:null}).filter(Boolean),R=o.getAttributes().filter(f=>f.getKind()!==B.JsxAttribute?!0:!(f.asKindOrThrow(B.JsxAttribute).getNameNode().getText()in Se)).map(f=>f.getText()).join(" "),u=[...S,R].filter(Boolean).join(" ");o.replaceWithText(`<${h} ${u} />`)}}for(let o of e.getImportDeclarations()??[])if(o.getModuleSpecifier()?.getText()?.includes("icon-placeholder")){let p=(o.getNamedImports()??[]).find(g=>g.getName()==="IconPlaceholder");p&&p.remove(),o.getNamedImports()?.length===0&&o.remove()}if(i.length>0){let o=s.import.split(`
39
+ `),a=[];for(let l of o){let p=l.match(/import\s+{([^}]+)}\s+from\s+['"]([^'"]+)['"]/);if(!p)continue;let[,g,m]=p,h=g.split(",").map(x=>x.trim()).map(x=>x==="ICON"?i.map(I=>({name:I})):{name:x}).flat(),d=e.addImportDeclaration({moduleSpecifier:m,namedImports:h});a.push(d)}if(!fi(e))for(let l of a)l.replaceWithText(l.getText().replace(";",""))}return e};function fi(e){return e.getImportDeclarations()?.[0]?.getText().endsWith(";")??!1}import{SyntaxKind as di}from"ts-morph";var Et=async({sourceFile:e,config:t,isRemote:r})=>{let n=t.aliases?.utils,s=typeof n=="string"?yi(n):"@",i=s?`${s}/lib/utils`:"@/lib/utils";if(![".tsx",".ts",".jsx",".js"].includes(e.getExtension()))return e;for(let o of e.getImportStringLiterals()){let a=hi(o.getLiteralValue(),t,r);if(o.setLiteralValue(a),i===a||a==="@/lib/utils"){if(!o.getFirstAncestorByKind(di.ImportDeclaration)?.getNamedImports().some(g=>g.getName()==="cn")||!t.aliases.utils)continue;o.setLiteralValue(i===a?a.replace(i,t.aliases.utils):t.aliases.utils)}}return e};function hi(e,t,r=!1){if(e=xi(e,t),!e.startsWith("@/")&&!r)return e;if(r&&e.startsWith("@/")&&(e=e.replace(/^@\//,"@/registry/new-york/")),e==="@/registry")return t.aliases.components;if(!e.startsWith("@/registry/")){if(e==="@/lib/utils"&&t.aliases.utils)return t.aliases.utils;if(t.aliases.ui&&e.match(/^@\/components\/ui(?=\/|$)/))return e.replace(/^@\/components\/ui/,t.aliases.ui);if(t.aliases.components&&e.match(/^@\/components(?=\/|$)/))return e.replace(/^@\/components/,t.aliases.components);if(t.aliases.hooks&&e.match(/^@\/hooks(?=\/|$)/))return e.replace(/^@\/hooks/,t.aliases.hooks);if(t.aliases.lib&&e.match(/^@\/lib(?=\/|$)/))return e.replace(/^@\/lib/,t.aliases.lib);let n=t.aliases.components.split("/")[0];return e.replace(/^@\//,`${n}/`)}return e.match(/^@\/registry\/(.+)\/ui/)?e.replace(/^@\/registry\/(.+)\/ui/,t.aliases.ui??`${t.aliases.components}/ui`):t.aliases.utils&&e.match(/^@\/registry\/(.+)\/lib\/utils$/)?t.aliases.utils:t.aliases.components&&e.match(/^@\/registry\/(.+)\/components/)?e.replace(/^@\/registry\/(.+)\/components/,t.aliases.components):t.aliases.lib&&e.match(/^@\/registry\/(.+)\/lib/)?e.replace(/^@\/registry\/(.+)\/lib/,t.aliases.lib):t.aliases.hooks&&e.match(/^@\/registry\/(.+)\/hooks/)?e.replace(/^@\/registry\/(.+)\/hooks/,t.aliases.hooks):e.replace(/^@\/registry\/[^/]+/,t.aliases.components)}function yi(e){if(e.startsWith("#"))return"";if(e.endsWith("/lib/utils"))return e.slice(0,-10);if(e.startsWith("@")){let[r,n]=e.split("/");return r&&n?`${r}/${n}`:e}let t=e.indexOf("/");return t===-1?e:e.slice(0,t)}function xi(e,t){if(e==="#registry")return"@/registry";if(e.startsWith("#/"))return e.replace(/^#\//,"@/");if(e.startsWith("#registry/"))return e.replace(/^#registry\//,"@/registry/");for(let{alias:r,normalized:n}of wi(t)){if(e===r)return n;if(e.startsWith(`${r}/`))return`${n}${e.slice(r.length)}`}return e}function wi(e){return e.aliases?[{alias:e.aliases.ui,normalized:"@/components/ui"},{alias:e.aliases.components,normalized:"@/components"},{alias:e.aliases.hooks,normalized:"@/hooks"},{alias:e.aliases.lib,normalized:"@/lib"},{alias:e.aliases.utils,normalized:"@/lib/utils"}].filter(t=>typeof t.alias=="string"&&t.alias.startsWith("#")).sort((t,r)=>r.alias.length-t.alias.length):[]}import{transformFromAstSync as Ii}from"@babel/core";import{parse as bi}from"@babel/parser";import vi from"@babel/plugin-transform-typescript";import*as St from"recast";var Ri={sourceType:"module",allowImportExportEverywhere:!0,allowReturnOutsideFunction:!0,startLine:1,tokens:!0,plugins:["asyncGenerators","bigInt","classPrivateMethods","classPrivateProperties","classProperties","classStaticBlock","decimal","decorators-legacy","doExpressions","dynamicImport","exportDefaultFrom","exportNamespaceFrom","functionBind","functionSent","importAssertions","importMeta","nullishCoalescingOperator","numericSeparator","objectRestSpread","optionalCatchBinding","optionalChaining",["pipelineOperator",{proposal:"minimal"}],["recordAndTuple",{syntaxType:"hash"}],"throwExpressions","topLevelAwait","v8intrinsic","typescript","jsx"]},Gr=async({sourceFile:e,config:t})=>{let r=e.getFullText();if(t.tsx)return r;let n=St.parse(r,{parser:{parse:i=>bi(i,Ri)}}),s=Ii(n,r,{cloneInputAst:!1,code:!1,ast:!0,plugins:[vi],configFile:!1});if(!s||!s.ast)throw new Error("Failed to transform JSX");return St.print(s.ast).code};import{SyntaxKind as Ei}from"ts-morph";var Si=/^["']use client["']$/g,kt=async({sourceFile:e,config:t})=>{if(t.rsc)return e;let r=e.getFirstChildByKind(Ei.ExpressionStatement);return r&&Si.test(r.getText())&&r.remove(),e};import{Project as Wi,ScriptKind as zi}from"ts-morph";import{Project as Dl,ScriptKind as Kl,SyntaxKind as ee}from"ts-morph";var ki=new Set(["cn-font-heading"]),Ci=/\bcn-[a-z-]+\b/;function qr(e){return Ci.test(e)&&!ki.has(e)}function Hr(e){return e.split(/\s+/).filter(t=>t.length>0&&!qr(t)).join(" ")}function Yr(e){return e.split(/\s+/).some(qr)}function Ct(e){let t=e.getLiteralValue();if(!Yr(t))return;let r=Hr(t);r!==t&&e.setLiteralValue(r)}function tr(e){for(let t of e.getDescendantsOfKind(ee.StringLiteral))Ct(t);for(let t of e.getDescendantsOfKind(ee.NoSubstitutionTemplateLiteral))Ct(t)}function Ti(e){let t=[];for(let r of e.getDescendantsOfKind(ee.JsxAttribute)){let n=r.getNameNode().getText();if(n!=="className"&&n!=="classNames")continue;let s=r.getInitializer();if(s?.isKind(ee.StringLiteral)){let i=s.getLiteralValue();if(Yr(i)){let o=Hr(i);o===""?t.push(r):o!==i&&s.setLiteralValue(o)}}s?.isKind(ee.JsxExpression)&&tr(s)}for(let r of t)r.remove();for(let r of e.getDescendantsOfKind(ee.CallExpression))if(r.getExpression().getText()==="cva")for(let n of r.getArguments()){if(n.isKind(ee.StringLiteral)){Ct(n);continue}if(n.isKind(ee.NoSubstitutionTemplateLiteral)){Ct(n);continue}tr(n)}for(let r of e.getDescendantsOfKind(ee.CallExpression))r.getExpression().getText()==="mergeProps"&&tr(r)}var Tt=async({sourceFile:e})=>(Ti(e),e);import{Project as Pi,ScriptKind as $i,SyntaxKind as v}from"ts-morph";var ji=[["-ml-","-ms-"],["-mr-","-me-"],["ml-","ms-"],["mr-","me-"],["pl-","ps-"],["pr-","pe-"],["-left-","-start-"],["-right-","-end-"],["left-","start-"],["right-","end-"],["inset-l-","inset-inline-start-"],["inset-r-","inset-inline-end-"],["rounded-tl-","rounded-ss-"],["rounded-tr-","rounded-se-"],["rounded-bl-","rounded-es-"],["rounded-br-","rounded-ee-"],["rounded-l-","rounded-s-"],["rounded-r-","rounded-e-"],["border-l-","border-s-"],["border-r-","border-e-"],["border-l","border-s"],["border-r","border-e"],["text-left","text-start"],["text-right","text-end"],["scroll-ml-","scroll-ms-"],["scroll-mr-","scroll-me-"],["scroll-pl-","scroll-ps-"],["scroll-pr-","scroll-pe-"],["float-left","float-start"],["float-right","float-end"],["clear-left","clear-start"],["clear-right","clear-end"],["origin-top-left","origin-top-start"],["origin-top-right","origin-top-end"],["origin-bottom-left","origin-bottom-start"],["origin-bottom-right","origin-bottom-end"],["origin-left","origin-start"],["origin-right","origin-end"]],Ai=[["-translate-x-","translate-x-"],["translate-x-","-translate-x-"]],Li=[["space-x-","space-x-reverse"],["divide-x-","divide-x-reverse"]],Ni=[["cursor-w-resize","cursor-e-resize"],["cursor-e-resize","cursor-w-resize"]],Oi=[["data-[side=inline-start]","slide-in-from-right","slide-in-from-end"],["data-[side=inline-start]","slide-out-to-right","slide-out-to-end"],["data-[side=inline-end]","slide-in-from-left","slide-in-from-start"],["data-[side=inline-end]","slide-out-to-left","slide-out-to-start"]],_i="cn-rtl-flip",Zr=["ContextMenuContent","ContextMenuSubContent","DropdownMenuSubContent"],Xr={right:"inline-end",left:"inline-start"},Fi=["-left-","-right-","left-","right-"],Pt=async({sourceFile:e,config:t})=>(t.rtl&&en(e),e);async function Jl(e,t){if(!t)return e;let n=new Pi({useInMemoryFileSystem:!0}).createSourceFile("component.tsx",e,{scriptKind:$i.TSX,overwrite:!0});return en(n),n.getText()}function Qr(e){return e.replace(/^["']|["']$/g,"")}function G(e){let t=e.getLiteralText();e.setLiteralValue(Di(t))}function Di(e){return e.split(" ").flatMap(t=>{if(t.startsWith("rtl:")||t.startsWith("ltr:"))return[t];if(t===_i)return["rtl:rotate-180"];let[r,n,s]=Je(t);if(!n)return[t];for(let[l,p]of Ai)if(n.startsWith(l)){let g=n.replace(l,p),m=r?`rtl:${r}:${g}${s?`/${s}`:""}`:`rtl:${g}${s?`/${s}`:""}`;return[t,m]}for(let[l,p]of Li)if(n.startsWith(l)){let g=r?`rtl:${r}:${p}`:`rtl:${p}`;return[t,g]}for(let[l,p]of Ni)if(n===l){let g=r?`rtl:${r}:${p}`:`rtl:${p}`;return[t,g]}for(let[l,p,g]of Oi)if(r?.includes(l)&&n.startsWith(p)){let m=n.replace(p,g);return[s?`${r}:${m}/${s}`:`${r}:${m}`]}let i=r?.includes("data-[side=left]")||r?.includes("data-[side=right]"),o=n;for(let[l,p]of ji)if(!(i&&Fi.some(g=>l.startsWith(g)))&&n.startsWith(l)){if(!l.endsWith("-")&&n!==l)continue;o=n.replace(l,p);break}let a;return r?a=s?`${r}:${o}/${s}`:`${r}:${o}`:a=s?`${o}/${s}`:o,[a]}).join(" ")}function en(e){e.getDescendantsOfKind(v.CallExpression).filter(t=>t.getExpression().getText()==="cva").forEach(t=>{let r=t.getArguments()[0];r?.isKind(v.StringLiteral)&&G(r),t.getArguments()[1]?.isKind(v.ObjectLiteralExpression)&&t.getArguments()[1]?.getDescendantsOfKind(v.PropertyAssignment).find(n=>n.getName()==="variants")?.getDescendantsOfKind(v.PropertyAssignment).forEach(n=>{n.getDescendantsOfKind(v.PropertyAssignment).forEach(s=>{let i=s.getInitializerIfKind(v.StringLiteral);i&&G(i)})})}),e.getDescendantsOfKind(v.JsxAttribute).forEach(t=>{if(t.getNameNode().getText()==="className"){let r=t.getInitializer();if(r?.isKind(v.StringLiteral)&&G(r),t.getInitializer()?.isKind(v.JsxExpression)){let n=t.getInitializer()?.getDescendantsOfKind(v.CallExpression).find(s=>s.getExpression().getText()==="cn");n&&n.getArguments().forEach(s=>{(s.isKind(v.ConditionalExpression)||s.isKind(v.BinaryExpression))&&s.getChildrenOfKind(v.StringLiteral).forEach(G),s.isKind(v.StringLiteral)&&G(s)})}}t.getNameNode().getText()==="classNames"&&t.getInitializer()?.isKind(v.JsxExpression)&&t.getDescendantsOfKind(v.PropertyAssignment).forEach(r=>{if(r.getInitializer()?.isKind(v.CallExpression)){let s=r.getInitializerIfKind(v.CallExpression);s&&s.getArguments().forEach(i=>{i.isKind(v.ConditionalExpression)&&i.getChildrenOfKind(v.StringLiteral).forEach(G),i.isKind(v.StringLiteral)&&G(i)})}let n=r.getInitializer();n?.isKind(v.StringLiteral)&&r.getNameNode().getText()!=="variant"&&G(n)})}),e.getDescendantsOfKind(v.CallExpression).filter(t=>t.getExpression().getText()==="mergeProps").forEach(t=>{let r=t.getArguments()[0];if(r?.isKind(v.ObjectLiteralExpression)){let n=r.getProperties().find(s=>s.isKind(v.PropertyAssignment)&&s.getName()==="className");if(n?.isKind(v.PropertyAssignment)){let s=n.getInitializer();s?.isKind(v.CallExpression)&&s.getExpression().getText()==="cn"&&s.getArguments().forEach(i=>{i.isKind(v.StringLiteral)&&G(i),(i.isKind(v.ConditionalExpression)||i.isKind(v.BinaryExpression))&&i.getChildrenOfKind(v.StringLiteral).forEach(G)}),s?.isKind(v.StringLiteral)&&G(s)}}}),[...e.getDescendantsOfKind(v.JsxSelfClosingElement),...e.getDescendantsOfKind(v.JsxOpeningElement)].forEach(t=>{let r=t.getTagNameNode().getText();if(!Zr.includes(r))return;let n=t.getAttributes().find(a=>a.isKind(v.JsxAttribute)&&a.getNameNode().getText()==="side");if(!n?.isKind(v.JsxAttribute))return;let s=n.getInitializer();if(!s?.isKind(v.StringLiteral))return;let i=Qr(s.getText()??""),o=Xr[i];o&&s.replaceWithText(`"${o}"`)}),e.getDescendantsOfKind(v.BindingElement).forEach(t=>{if(t.getNameNode().getText()!=="side")return;let s=t.getFirstAncestorByKind(v.FunctionDeclaration)?.getName();if(!s||!Zr.includes(s))return;let i=t.getInitializer();if(!i?.isKind(v.StringLiteral))return;let o=Qr(i.getText()??""),a=Xr[o];a&&i.replaceWithText(`"${a}"`)})}import{SyntaxKind as T}from"ts-morph";var $t=async({sourceFile:e,config:t})=>{if(!t.tailwind?.prefix)return e;let r=await bt(t);return e.getDescendantsOfKind(T.CallExpression).filter(n=>n.getExpression().getText()==="cva").forEach(n=>{if(n.getArguments()[0]?.isKind(T.StringLiteral)){let s=n.getArguments()[0];s&&s.replaceWithText(`"${ae(s.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`)}n.getArguments()[1]?.isKind(T.ObjectLiteralExpression)&&n.getArguments()[1]?.getDescendantsOfKind(T.PropertyAssignment).find(s=>s.getName()==="variants")?.getDescendantsOfKind(T.PropertyAssignment).forEach(s=>{s.getDescendantsOfKind(T.PropertyAssignment).forEach(i=>{let o=i.getInitializerIfKind(T.StringLiteral);o&&o?.replaceWithText(`"${ae(o.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`)})})}),e.getDescendantsOfKind(T.JsxAttribute).forEach(n=>{if(n.getNameNode().getText()==="className"){if(n.getInitializer()?.isKind(T.StringLiteral)){let s=n.getInitializer();s&&s.replaceWithText(`"${ae(s.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`)}if(n.getInitializer()?.isKind(T.JsxExpression)){let s=n.getInitializer()?.getDescendantsOfKind(T.CallExpression).find(i=>i.getExpression().getText()==="cn");s&&s.getArguments().forEach(i=>{(i.isKind(T.ConditionalExpression)||i.isKind(T.BinaryExpression))&&i.getChildrenOfKind(T.StringLiteral).forEach(o=>{o.replaceWithText(`"${ae(o.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`)}),i.isKind(T.StringLiteral)&&i.replaceWithText(`"${ae(i.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`)})}}n.getNameNode().getText()==="classNames"&&n.getInitializer()?.isKind(T.JsxExpression)&&n.getDescendantsOfKind(T.PropertyAssignment).forEach(s=>{if(s.getInitializer()?.isKind(T.CallExpression)){let i=s.getInitializerIfKind(T.CallExpression);i&&i.getArguments().forEach(o=>{o.isKind(T.ConditionalExpression)&&o.getChildrenOfKind(T.StringLiteral).forEach(a=>{a.replaceWithText(`"${ae(a.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`)}),o.isKind(T.StringLiteral)&&o.replaceWithText(`"${ae(o.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`)})}if(s.getInitializer()?.isKind(T.StringLiteral)&&s.getNameNode().getText()!=="variant"){let i=s.getInitializer();i&&i.replaceWithText(`"${ae(i.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`)}})}),e};function ae(e,t="",r){return r==="v3"?e.split(" ").map(n=>{let[s,i,o]=Je(n);return s?o?`${s}:${t}${i}/${o}`:`${s}:${t}${i}`:o?`${t}${i}/${o}`:`${t}${i}`}).join(" "):e.split(" ").map(n=>n.indexOf(`${t}:`)===0?n:`${t}:${n.trim()}`).join(" ")}var Vi=new Wi({compilerOptions:{}});async function Ui(e){let t=await Ki.mkdtemp(tn.join(Mi(),"love-ui-"));return tn.join(t,e)}async function rn(e,t=[Et,kt,vt,$t,Pt,Rt,Tt]){let r=await Ui(e.filename),n=Vi.createSourceFile(r,e.raw,{scriptKind:zi.TSX});for(let s of t)await s({sourceFile:n,...e});return e.transformJsx?await Gr({sourceFile:n,...e}):n.getText()}import{SyntaxKind as te}from"ts-morph";var Bi=["a","span","div","Link","label","Label"],nn=async({sourceFile:e,config:t})=>{if(!t.style?.startsWith("base-"))return e;let r=10;for(let n=0;n<r;n++){let i=e.getDescendantsOfKind(te.JsxElement).filter(l=>l.getOpeningElement().getAttribute("asChild"));if(i.length===0)break;let o=i.filter(l=>!l.getDescendantsOfKind(te.JsxElement).some(g=>g.getOpeningElement().getAttribute("asChild"))),a=[];for(let l of o){let p=l.getOpeningElement(),g=p.getAttribute("asChild");if(!g)continue;let m=p.getTagNameNode().getText(),d=l.getJsxChildren().find(u=>u.getKind()===te.JsxElement||u.getKind()===te.JsxSelfClosingElement);if(!d){g.remove();continue}let x,I,S;if(d.getKind()===te.JsxSelfClosingElement){let u=d.asKindOrThrow(te.JsxSelfClosingElement);x=u.getTagNameNode().getText(),I=u.getAttributes().map(f=>f.getText()).join(" "),S=""}else{let u=d.asKindOrThrow(te.JsxElement),f=u.getOpeningElement();x=f.getTagNameNode().getText(),I=f.getAttributes().map(P=>P.getText()).join(" "),S=u.getJsxChildren().map(P=>P.getText()).join("")}let R=m==="Button"&&Bi.includes(x);a.push({parentElement:l,parentTagName:m,childTagName:x,childProps:I,childChildren:S,needsNativeButton:R})}for(let l of a.reverse()){let g=l.parentElement.getOpeningElement().getAttributes().filter(I=>I.getKind()===te.JsxAttribute?I.asKindOrThrow(te.JsxAttribute).getNameNode().getText()!=="asChild":!0).map(I=>I.getText()).join(" "),m=l.childProps?`{<${l.childTagName} ${l.childProps} />}`:`{<${l.childTagName} />}`,h=g?`${g} `:"";h+=`render=${m}`,l.needsNativeButton&&(h+=" nativeButton={false}");let d=l.childChildren.trim()?`${l.childChildren}`:"",x=`<${l.parentTagName} ${h}>${d}</${l.parentTagName}>`;l.parentElement.replaceWithText(x)}}return e};import{promises as Ji}from"fs";import{SyntaxKind as ce}from"ts-morph";var on=[{marker:"cn-font-heading",utility:"font-heading",supportToken:"--font-heading:"}],an=/\bcn-font-heading\b/,sn=new Map;async function Gi(e,t=[]){let r=new Set(t);if(!e)return r;let n=sn.get(e);return n||(n=Ji.readFile(e,"utf8").then(s=>{let i=new Set;for(let o of on)s.includes(o.supportToken)&&i.add(o.marker);return i}).catch(()=>new Set),sn.set(e,n)),(await n).forEach(s=>{r.add(s)}),r}function cn(e,t){let r=e;for(let n of on)r.includes(n.marker)&&(r=r.replace(new RegExp(`\\b${n.marker}\\b`,"g"),t.has(n.marker)?n.utility:""));return r.replace(/\s+/g," ").trim()}function jt(e,t){let r=e.getLiteralValue();if(!an.test(r))return;let n=cn(r,t);n!==r&&e.setLiteralValue(n)}function rr(e,t){for(let r of e.getDescendantsOfKind(ce.StringLiteral))jt(r,t);for(let r of e.getDescendantsOfKind(ce.NoSubstitutionTemplateLiteral))jt(r,t)}var ln=async({sourceFile:e,config:t,supportedFontMarkers:r})=>{let n=await Gi(t.resolvedPaths.tailwindCss,r),s=[];for(let i of e.getDescendantsOfKind(ce.JsxAttribute)){let o=i.getNameNode().getText();if(o!=="className"&&o!=="classNames")continue;let a=i.getInitializer();if(a?.isKind(ce.StringLiteral)){let l=a.getLiteralValue();if(an.test(l)){let p=cn(l,n);p===""?s.push(i):p!==l&&a.setLiteralValue(p)}}a?.isKind(ce.JsxExpression)&&rr(a,n)}for(let i of s)i.remove();for(let i of e.getDescendantsOfKind(ce.CallExpression)){if(i.getExpression().getText()==="cva"){for(let o of i.getArguments()){if(o.isKind(ce.StringLiteral)){jt(o,n);continue}if(o.isKind(ce.NoSubstitutionTemplateLiteral)){jt(o,n);continue}rr(o,n)}continue}i.getExpression().getText()==="mergeProps"&&rr(i,n)}return e};import{twMerge as qi}from"tailwind-merge";import{SyntaxKind as Hi}from"ts-morph";var Yi="animate-none! relative bg-popover/70 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:focus:bg-foreground/10! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:**:text-accent-foreground!",pn=async({sourceFile:e,config:t})=>{let r=t.menuColor,n=r==="default-translucent"||r==="inverted-translucent";for(let s of e.getDescendantsOfKind(Hi.JsxAttribute)){if(s.getNameNode().getText()!=="className")continue;let o=s.getInitializer();if(!o)continue;let a=o.getText();if(!a.includes("cn-menu-target")&&!a.includes("cn-menu-translucent"))continue;let l=a,p=!1;r==="inverted"||r==="inverted-translucent"?l=l.replace(/cn-menu-target/g,"dark"):(l=l.replace(/cn-menu-target/g,""),p=!0),n?l=l.replace(/"([^"]*cn-menu-translucent[^"]*)"/g,(g,m)=>`"${qi(m,Yi).replace(/\s*\bcn-menu-translucent\b\s*/g," ").trim()}"`):l.includes("cn-menu-translucent")&&(l=l.replace(/cn-menu-translucent/g,""),p=!0),p&&(l=l.replace(/\s{2,}/g," "),l=l.replace(/"\s+/g,'"'),l=l.replace(/\s+"/g,'"'),l=l.replace(/,\s*""\s*,/g,","),l=l.replace(/\(\s*""\s*,/g,"("),l=l.replace(/,\s*""\s*\)/g,")")),s.setInitializer(l)}return e};var gn=async({sourceFile:e})=>(e.getFunctions().forEach(t=>{t.getName()==="middleware"&&t.rename("proxy")}),e.getVariableDeclarations().forEach(t=>{t.getName()==="middleware"&&t.rename("proxy")}),e.getExportDeclarations().forEach(t=>{t.getNamedExports().forEach(n=>{n.getName()==="middleware"&&n.setName("proxy"),n.getAliasNode()?.getText()==="middleware"&&n.setAlias("proxy")})}),e);import Xi from"prompts";import{Project as fn,ScriptKind as dn}from"ts-morph";import{loadConfig as hn}from"tsconfig-paths";var sr=[".ts",".tsx",".js",".jsx"],Qi=new Set(["tailwindConfig","tailwindCss"]),eo=["components","ui","lib","hooks"];async function Qp(e,t,r){if(!e?.length)return{filesCreated:[],filesUpdated:[],filesSkipped:[]};r={overwrite:!1,force:!1,silent:!1,isRemote:!1,isWorkspace:!1,...r};let n=fe("Updating files.",{silent:r.silent})?.start(),[s,i]=await Promise.all([Q(t.resolvedPaths.cwd),t.tailwind.baseColor?Nt(t.tailwind.baseColor):Promise.resolve(void 0)]),o=hn(t.resolvedPaths.cwd),a=ao(r.plannedFiles??e,t,{isSrcDir:s?.isSrcDir,framework:s?.framework.name,path:r.path}),l=new fn({compilerOptions:{}}),p=[],g=[],m=[],h=[],d=null;for(let R=0;R<e.length;R++){let u=e[R];if(!u.content)continue;let f=At(u,t,{isSrcDir:s?.isSrcDir,framework:s?.framework.name,commonRoot:Lt(e.map(L=>L.path),u.path),path:r.path,fileIndex:R});if(!f)continue;let P=nr(u.path),A=y.dirname(f);if(t.tsx||(f=f.replace(/\.tsx?$/,L=>L===".tsx"?".jsx":".js")),ue(f)&&!ke(f)){let L=Ur(A);L&&(f=L)}let N=ke(f);if(u.type==="registry:lib"&&nr(u.path)==="utils.ts"&&s?.framework.name==="laravel"&&N){m.push(y.relative(t.resolvedPaths.cwd,f));continue}if(N&&Zi(f).isDirectory())throw new Error(`Cannot write to ${f}: path exists and is a directory. Please provide a file path instead.`);let Ie=u.type==="registry:file"||u.type==="registry:item",V=ue(f)||Ie?u.content:await rn({filename:u.path,raw:u.content,config:t,baseColor:i,transformJsx:!t.tsx,isRemote:r.isRemote,supportedFontMarkers:r.supportedFontMarkers},[Et,kt,vt,$t,Rt,pn,nn,Pt,...mn(f,s,t)?[gn]:[],ln,Tt]);if(N&&!ue(f)){let L=await yn({config:t,content:V,filePaths:a,project:l,projectInfo:s,resolvedPath:f,tsConfig:o}),$e=await le.readFile(f,"utf-8");if(zr($e,L,{ignoreImports:r.isWorkspace})){m.push(y.relative(t.resolvedPaths.cwd,f));continue}}if(N&&!r.overwrite&&!ue(f)){n.stop(),r.rootSpinner&&r.rootSpinner.stop();let{overwrite:L}=await Xi({type:"confirm",name:"overwrite",message:`The file ${k.info(P)} already exists. Would you like to overwrite?`,initial:!1});if(!L){m.push(y.relative(t.resolvedPaths.cwd,f)),r.rootSpinner&&r.rootSpinner.start();continue}n?.start(),r.rootSpinner&&r.rootSpinner.start()}if(mn(f,s,t)&&(f=f.replace(/middleware\.(ts|js)$/,"proxy.$1")),ke(A)||await le.mkdir(A,{recursive:!0}),ue(f)&&N){let L=await le.readFile(f,"utf-8"),$e=Jr(L,V);if(h=Br(L,V),d=y.relative(t.resolvedPaths.cwd,f),!h.length){m.push(y.relative(t.resolvedPaths.cwd,f));continue}await le.writeFile(f,$e,"utf-8"),g.push(y.relative(t.resolvedPaths.cwd,f));continue}await le.writeFile(f,V,"utf-8"),N?g.push(y.relative(t.resolvedPaths.cwd,f)):(p.push(y.relative(t.resolvedPaths.cwd,f)),ue(f)&&(h=Object.keys(Ee(V)),d=y.relative(t.resolvedPaths.cwd,f)))}let x=[...p,...g,...m],I=await oo(x,t,a);if(g.push(...I),p=Array.from(new Set(p)),g=Array.from(new Set(g.filter(R=>!p.includes(R)))),m=Array.from(new Set(m)),!(p.length||g.length)&&!m.length&&n?.info("No files updated."),p.length){if(n?.succeed(`Created ${p.length} ${p.length===1?"file":"files"}:`),!r.silent)for(let R of p)E.log(` - ${R}`)}else n?.stop();if(g.length&&(fe(`Updated ${g.length} ${g.length===1?"file":"files"}:`,{silent:r.silent})?.info(),!r.silent))for(let R of g)E.log(` - ${R}`);if(m.length&&(fe(`Skipped ${m.length} ${m.length===1?"file":"files"}: (files might be identical, use --overwrite to overwrite)`,{silent:r.silent})?.info(),!r.silent))for(let R of m)E.log(` - ${R}`);if(h.length&&d&&(fe(`Added the following variables to ${k.info(d)}:`)?.info(),!r.silent))for(let R of h)E.log(` ${k.success("+")} ${R}`);return{filesCreated:p,filesUpdated:g,filesSkipped:m}}function At(e,t,r){if(r.path){let i=y.isAbsolute(r.path)?r.path:y.join(t.resolvedPaths.cwd,r.path);if(/\.[^/\\]+$/.test(i)){if(r.fileIndex===0)return i}else{let a=y.basename(e.path);return y.join(i,a)}}if(e.target){if(e.target.startsWith("~/"))return y.join(t.resolvedPaths.cwd,e.target.replace("~/",""));let i=e.target,o=to(i,t);return o?.resolvedPath?o.resolvedPath:(o?.target&&(i=o.target),e.type==="registry:page"&&(i=io(i,r.framework),!i)?"":r.isSrcDir?y.join(t.resolvedPaths.cwd,"src",i.replace("src/","")):y.join(t.resolvedPaths.cwd,i.replace("src/","")))}let n=no(e,t),s=so(e.path,n);return y.join(n,s)}function to(e,t){let r=e.match(/^@([^/]+)\/(.+)$/);if(!r)return null;let[,n,s]=r;if(!ro(n))return{target:`${n}/${s}`};let i=y.resolve(t.resolvedPaths[n]),o=y.resolve(i,s);if(o!==i&&!o.startsWith(`${i}${y.sep}`))throw new Error(`Invalid target path "${e}". Target paths using @${n}/ must stay within the ${n} alias root.`);return{resolvedPath:o}}function ro(e){return eo.includes(e)}function no(e,t){return e.type==="registry:ui"?t.resolvedPaths.ui:e.type==="registry:lib"?t.resolvedPaths.lib:e.type==="registry:block"||e.type==="registry:component"?t.resolvedPaths.components:e.type==="registry:hook"?t.resolvedPaths.hooks:t.resolvedPaths.components}function Lt(e,t){let r=e.map(o=>o.replace(/^\//,"")),n=t.replace(/^\//,""),s=n.split("/").slice(0,-1).join("/");if(!s)return"";let i=s.split("/");for(let o=i.length;o>0;o--){let a=i.slice(0,o).join("/");if(r.some(p=>p!==n&&p.startsWith(a+"/")))return"/"+a}return"/"+s}function so(e,t){let r=e.replace(/^\/|\/$/g,""),n=t.replace(/^\/|\/$/g,""),s=r.split("/"),i=n.split("/"),o=i[i.length-1],a=s.findIndex(l=>l===o);return a===-1?s[s.length-1]:s.slice(a+1).join("/")}function io(e,t){if(!t)return"";if(t==="next-app")return e;if(t==="next-pages"){let r=e.replace(/^app\//,"pages/");return r=r.replace(/\/page(\.[jt]sx?)$/,"$1"),r}if(t==="react-router"){let r=e.replace(/^app\//,"app/routes/");return r=r.replace(/\/page(\.[jt]sx?)$/,"$1"),r}if(t==="laravel"){let r=e.replace(/^app\//,"resources/js/pages/");return r=r.replace(/\/page(\.[jt]sx?)$/,"$1"),r}return""}async function oo(e,t,r=e){let n=new fn({compilerOptions:{}}),s=await Q(t.resolvedPaths.cwd),i=hn(t.resolvedPaths.cwd),o=[];if(!s||i.resultType==="failed")return[];for(let a of e){let l=y.resolve(t.resolvedPaths.cwd,a);if(!ke(l))continue;let p=await le.readFile(l,"utf-8"),g=await le.mkdtemp(y.join(un(),"love-ui-")),m=n.createSourceFile(y.join(g,nr(l)),p,{scriptKind:dn.TSX});if(![".tsx",".ts",".jsx",".js"].includes(m.getExtension()))continue;let h=await yn({config:t,content:p,filePaths:r,project:n,projectInfo:s,resolvedPath:l,sourceFile:m,tsConfig:i});h!==p&&(await le.writeFile(l,h,"utf-8"),o.push(a))}return o}function ao(e,t,r){return(e??[])?.filter(n=>!!n?.content).map((n,s)=>{let i=At(n,t,{isSrcDir:r.isSrcDir,framework:r.framework,commonRoot:Lt((e??[]).map(o=>o.path),n.path),path:r.path,fileIndex:s});return i?(t.tsx||(i=i.replace(/\.tsx?$/,o=>o===".tsx"?".jsx":".js")),y.relative(t.resolvedPaths.cwd,i)):null}).filter(n=>!!n)}async function yn({content:e,resolvedPath:t,filePaths:r,config:n,projectInfo:s,tsConfig:i,project:o,sourceFile:a}){if(!s||i.resultType==="failed")return e;let l=y.extname(t);if(![".tsx",".ts",".jsx",".js"].includes(l))return e;let p=a===void 0?o.createSourceFile(y.join(un(),`love-ui-${Math.random().toString(36).slice(2)}${l||".tsx"}`),e,{scriptKind:dn.TSX,overwrite:!0}):null,g=a??p;try{let m=!1;for(let h of g.getImportDeclarations()){let d=h.getModuleSpecifierValue();if(!er(d,s.aliasPrefix??null))continue;let x=await co(d,r,n,i);if(!x)continue;let I=po(x,n,s,t);!I||I===d||(h.setModuleSpecifier(I),m=!0)}return m?g.getFullText():e}finally{p&&o.removeSourceFile(p)}}async function co(e,t,r,n){let s=(await Ve(e,{...n,cwd:r.resolvedPaths.cwd}))?.path,i=!s&&!e.startsWith(".")?mo(e,r):null;return!s&&!i?null:lo(s??i,t,r)}function lo(e,t,r,n=[".tsx",".ts",".js",".jsx",".css"]){let s=y.normalize(r.resolvedPaths.cwd),i=t.map(S=>S.split(y.sep).join(y.posix.sep)),o=new Set(i),a=y.extname(e),l=a!=="",p=l?e.slice(0,-a.length):e,m=y.relative(s,p).split(y.sep).join(y.posix.sep),h=l?[a]:n,d=new Set;for(let S of h){let R=p+S,u=y.posix.normalize(y.relative(s,R));(o.has(u)||ke(R))&&d.add(u);let f=y.join(p,`index${S}`),P=y.posix.normalize(y.relative(s,f));(o.has(P)||ke(f))&&d.add(P)}let x=y.basename(p);for(let S of i)h.some(R=>S.endsWith(`/${x}${R}`))&&d.add(S);return d.size===0?null:Array.from(d).sort((S,R)=>{let u=y.posix.extname(S),f=y.posix.extname(R),P=h.indexOf(u)-h.indexOf(f);if(P!==0)return P;let A=m&&S.startsWith(m)?-1:1,N=m&&R.startsWith(m)?-1:1;return A-N})[0]}function po(e,t,r,n){let s=y.normalize(y.join(t.resolvedPaths.cwd,e)),i=Object.entries(t.resolvedPaths).filter(([x,I])=>{if(!I||Qi.has(x))return!1;let S=y.normalize(I);if(s===S){let R=t.aliases[x];if(typeof R!="string"||!R.startsWith("#"))return!0;let u=ze(R,t.resolvedPaths.cwd);return u!==null&&!u.matchedAlias.includes("*")}return s.startsWith(y.normalize(I+y.sep))}).sort((x,I)=>I[1].length-x[1].length);if(i.length===0)return null;let[o,a]=i[0],l=y.relative(a,s);l=l.split(y.sep).join("/");let p=o==="cwd"?r.aliasPrefix:t.aliases[o];if(!p)return null;if(p.startsWith("#")){let x=ze(p,t.resolvedPaths.cwd);if(x)return go(p,l,x)??(n?fo(n,s):null)}let g=y.posix.extname(l),m=sr.includes(g)?"":g,h=l.slice(0,l.length-g.length);h.endsWith("/index")&&(h=h.slice(0,-6));let d=h===""?"":`/${h}`;return d=d.replace("/src",""),`${p}${d}${m}`}function go(e,t,r){let n=y.posix.extname(t),s=sr.includes(n)&&r.emitMode==="strip_extension"?"":n,i=t?t.slice(0,t.length-n.length)+s:"";return r.matchedAlias.includes("*")?i?`${e}/${i}`:e:i===""||i==="index"?e:null}function mo(e,t){let r=uo(t);for(let n of r){if(e===n.alias||e===n.canonical)return n.rootPath;if(e.startsWith(`${n.alias}/`))return y.join(n.rootPath,e.slice(n.alias.length+1));if(e.startsWith(`${n.canonical}/`))return y.join(n.rootPath,e.slice(n.canonical.length+1))}return null}function uo(e){return[{alias:e.aliases.ui,canonical:"@/components/ui",rootPath:e.resolvedPaths.ui},{alias:e.aliases.components,canonical:"@/components",rootPath:e.resolvedPaths.components},{alias:e.aliases.hooks,canonical:"@/hooks",rootPath:e.resolvedPaths.hooks},{alias:e.aliases.lib,canonical:"@/lib",rootPath:e.resolvedPaths.lib},{alias:e.aliases.utils,canonical:"@/lib/utils",rootPath:e.resolvedPaths.utils}].filter(t=>typeof t.alias=="string"&&typeof t.rootPath=="string").sort((t,r)=>r.alias.length-t.alias.length||r.canonical.length-t.canonical.length)}function fo(e,t){let r=y.relative(y.dirname(e),t);r=r.split(y.sep).join("/");let n=y.posix.extname(r),s=sr.includes(n)?"":n,i=r.slice(0,r.length-n.length);return i.endsWith("/index")&&(i=i.slice(0,-6)),i.startsWith(".")||(i=`./${i}`),`${i}${s}`}function mn(e,t,r){let n=e===y.join(r.resolvedPaths.cwd,"middleware.ts")||e===y.join(r.resolvedPaths.cwd,"middleware.js"),s=t?.framework.name==="next-app"||t?.framework.name==="next-pages";if(!n||!s||!t?.frameworkVersion)return!1;let i=parseInt(t.frameworkVersion.split(".")[0]);return!isNaN(i)&&i>=16}import{Project as ho,ScriptKind as lg}from"ts-morph";import{loadConfig as gg}from"tsconfig-paths";import{z as xn}from"zod";var ug=new ho({compilerOptions:{}});function D(e){try{return new URL(e),!0}catch{return!1}}function Ce(e){return e.endsWith(".json")&&!D(e)}function fg(e){return!e||e.type!=="registry:item"&&e.type!=="registry:file"?!1:(e.files??[]).every(r=>!!r.target&&(r.type==="registry:file"||r.type==="registry:item"))}async function wn(e,t){if(!yo(t))return xn.array(ct).parse(e.flat().filter(Boolean));let r=await Q(t.resolvedPaths.cwd),n=new Map,s=xn.array(ct).parse(e.flat().filter(Boolean));return s.forEach(i=>{let o=At(i,t,{isSrcDir:r?.isSrcDir,framework:r?.framework.name,commonRoot:Lt(s.map(a=>a.path),i.path)});o&&n.set(o,i)}),Array.from(n.values())}function yo(e){return!!(e?.resolvedPaths?.cwd&&(e?.resolvedPaths?.ui||e?.resolvedPaths?.lib||e?.resolvedPaths?.components||e?.resolvedPaths?.hooks))}import xo from"deepmerge";function wo(e){return e.style?e.style==="new-york"&&e.tailwind?.config===""?nt:e.style:nt}function de(e){let t=Kr({style:nt,registries:U});return e?Me.parse(xo(t,{...e,style:wo(e),registries:{...U,...e.registries}})):t}var Ot={headers:{}};function Ge(e){Ot.headers={...Ot.headers,...e}}function In(e){return Ot.headers[e]||{}}function qe(){Ot.headers={}}function Io(e){let t=new Set;return typeof e=="string"?Ke(e).forEach(r=>t.add(r)):(Ke(e.url).forEach(r=>t.add(r)),e.params&&Object.values(e.params).forEach(r=>{Ke(r).forEach(n=>t.add(n))}),e.headers&&Object.values(e.headers).forEach(r=>{Ke(r).forEach(n=>t.add(n))})),Array.from(t)}function bn(e,t){let n=Io(t).filter(s=>!process.env[s]);if(n.length>0)throw new Ne(e,n)}function Pg(e,t){for(let r of e)he(r,de(t));qe()}var vn="{name}",_t="{style}",Rn=/\${(\w+)}/g,En="?",bo="&";function vo(e){return e.startsWith("./")||e.startsWith("/")}function he(e,t){let{registry:r,item:n}=ve(e);if(!r){if(D(e)||Ce(e)||vo(e))return null;r=rt}let i={...U,...t?.registries}[r];if(!i)throw new ne(r);return bn(r,i),{url:So(n,i,t),headers:Ro(r,ko(i))}}function Ro(e,t){if(e!==re||Eo(t))return t;let r=br();return r?{...t,Authorization:`Bearer ${r}`}:t}function Eo(e){return Object.keys(e).some(t=>t.toLowerCase()==="authorization")}function So(e,t,r){if(typeof t=="string"){let s=t.replace(vn,e);return r?.style&&s.includes(_t)&&(s=s.replace(_t,r.style)),De(s)}let n=t.url.replace(vn,e);return r?.style&&n.includes(_t)&&(n=n.replace(_t,r.style)),n=De(n),t.params?Co(n,t.params):n}function ko(e){if(typeof e=="string"||!e.headers)return{};let t={};for(let[r,n]of Object.entries(e.headers)){let s=De(n);To(n,s)&&(t[r]=s)}return t}function Co(e,t){let r=new URLSearchParams;for(let[i,o]of Object.entries(t)){let a=De(o);a&&r.append(i,a)}let n=r.toString();if(!n)return e;let s=e.includes(En)?bo:En;return`${e}${s}${n}`}function To(e,t){let r=t.trim();if(!r)return!1;if(e.includes("${")&&e.match(Rn)){let s=e.replace(Rn,"").trim();return r!==s}return!0}function Ft(e){if(D(e)){let t=new URL(e);return t.pathname.match(/\/chat\/b\//)&&!t.pathname.endsWith("/json")&&(t.pathname=`${t.pathname}/json`),t.toString()}return`${ge}/${e}`}import{promises as Po}from"fs";import{homedir as $o}from"os";import Sn from"path";import{HttpsProxyAgent as jo}from"https-proxy-agent";import Ao,{Headers as Lo}from"node-fetch";import{z as He}from"zod";var No=process.env.https_proxy?new jo(process.env.https_proxy):void 0,ir=new Map;async function _(e,t={}){t={useCache:!0,...t};try{return await Promise.all(e.map(async n=>{let s=Ft(n);if(t.useCache&&ir.has(s))return ir.get(s);let i=(async()=>{let o=In(s),a=new Lo({Accept:"application/vnd.loveui.v1+json, application/json;q=0.9","User-Agent":"love-ui"});for(let[p,g]of Object.entries(o))a.set(p,g);let l=await Ao(s,{agent:No,headers:a});if(!l.ok){let p;if(l.headers.get("content-type")?.includes("application/json")){let g=await l.json(),m=He.object({detail:He.string().optional(),title:He.string().optional(),message:He.string().optional(),error:He.string().optional()}).safeParse(g);m.success&&(p=m.data.detail||m.data.message,m.data.error&&(p=`[${m.data.error}] ${p}`))}throw l.status===401?new je(s,p):l.status===404?new H(s,p):l.status===410?new st(s,p):l.status===403?new Ae(s,p):new Le(s,l.status,p)}return l.json()})();return t.useCache&&ir.set(s,i),i}))}catch(r){throw r}}async function kn(e){try{let t=e;e.startsWith("~/")&&(t=Sn.join($o(),e.slice(2)));let r=Sn.resolve(t),n=await Po.readFile(r,"utf8"),s=JSON.parse(n);try{return M.parse(s)}catch(i){throw new K(e,i)}}catch(t){throw t instanceof Error&&(t.message.includes("ENOENT")||t.message.includes("no such file"))?new Z(e,t):t instanceof K?t:new Z(e,t)}}import{createHash as Jo}from"crypto";import Ln from"path";import{promises as or}from"fs";import{tmpdir as Oo}from"os";import Ye from"path";import _o from"deepmerge";import Fo from"stringify-object";import{Project as Do,QuoteKind as Ko,ScriptKind as Cn,SyntaxKind as w}from"ts-morph";async function cm(e,t,r){if(!e||(r={silent:!1,tailwindVersion:"v3",...r},r.tailwindVersion==="v4"))return;let n=Ye.relative(t.resolvedPaths.cwd,t.resolvedPaths.tailwindConfig),s=fe(`Updating ${k.info(n)}`,{silent:r.silent}).start(),i=await or.readFile(t.resolvedPaths.tailwindConfig,"utf8"),o=await Mo(i,e,t);await or.writeFile(t.resolvedPaths.tailwindConfig,o,"utf8"),s?.succeed()}async function Mo(e,t,r){let n=await Tn(e,r),s=n.getDescendantsOfKind(w.ObjectLiteralExpression).find(o=>o.getProperties().some(a=>a.isKind(w.PropertyAssignment)&&a.getName()==="content"));if(!s)return e;let i=Uo(s);return Wo(s,{name:"darkMode",value:"class"},{quoteChar:i}),t.plugins?.forEach(o=>{Vo(s,o)}),t.theme&&await zo(s,t.theme),n.getFullText()}function Wo(e,t,{quoteChar:r}){let n=e.getProperty("darkMode");if(!n){let s={name:t.name,initializer:`[${r}${t.value}${r}]`};return t.name==="darkMode"?(e.insertPropertyAssignment(0,s),e):(e.addPropertyAssignment(s),e)}if(n.isKind(w.PropertyAssignment)){let s=n.getInitializer(),i=`${r}${t.value}${r}`;if(s?.isKind(w.StringLiteral)){let o=s.getText();return s.replaceWithText(`[${o}, ${i}]`),e}if(s?.isKind(w.ArrayLiteralExpression)){if(s.getElements().map(o=>o.getText()).includes(i))return e;s.addElement(i)}return e}return e}async function zo(e,t){e.getProperty("theme")||e.addPropertyAssignment({name:"theme",initializer:"{}"}),ar(e);let n=(e.getPropertyOrThrow("theme")?.asKindOrThrow(w.PropertyAssignment)).getInitializer();if(n?.isKind(w.ObjectLiteralExpression)){let s=n.getText(),i=await Bo(s),o=_o(i,t??{},{arrayMerge:(l,p)=>p}),a=Fo(o).replace(/\'\.\.\.(.*)\'/g,"...$1").replace(/\'\"/g,"'").replace(/\"\'/g,"'").replace(/\'\[/g,"[").replace(/\]\'/g,"]").replace(/\'\\\'/g,"'").replace(/\\\'/g,"'").replace(/\\\'\'/g,"'").replace(/\'\'/g,"'");n.replaceWithText(a)}cr(e)}function Vo(e,t){let r=e.getProperty("plugins");if(!r)return e.addPropertyAssignment({name:"plugins",initializer:`[${t}]`}),e;if(r.isKind(w.PropertyAssignment)){let n=r.getInitializer();if(n?.isKind(w.ArrayLiteralExpression)){if(n.getElements().map(s=>s.getText().replace(/["']/g,"")).includes(t.replace(/["']/g,"")))return e;n.addElement(t)}return e}return e}async function Tn(e,t){let r=await or.mkdtemp(Ye.join(Oo(),"love-ui-")),n=t?.resolvedPaths?.tailwindConfig||"tailwind.config.ts",s=Ye.join(r,`love-ui-${Ye.basename(n)}`);return new Do({compilerOptions:{}}).createSourceFile(s,e,{scriptKind:Ye.extname(n)===".ts"?Cn.TS:Cn.JS})}function Uo(e){return e.getFirstDescendantByKind(w.StringLiteral)?.getQuoteKind()===Ko.Single?"'":'"'}function ar(e){let t=e.getProperties();for(let r=0;r<t.length;r++){let n=t[r];if(n.isKind(w.SpreadAssignment)){let s=n.asKindOrThrow(w.SpreadAssignment),i=s.getExpression().getText();e.insertPropertyAssignment(r,{name:`"___${i.replace(/^\.\.\./,"")}"`,initializer:`"...${i.replace(/^\.\.\./,"")}"`}),s.remove()}else if(n.isKind(w.PropertyAssignment)){let i=n.asKindOrThrow(w.PropertyAssignment).getInitializer();i&&i.isKind(w.ObjectLiteralExpression)?ar(i.asKindOrThrow(w.ObjectLiteralExpression)):i&&i.isKind(w.ArrayLiteralExpression)&&Pn(i.asKindOrThrow(w.ArrayLiteralExpression))}}}function Pn(e){let t=e.getElements();for(let r=0;r<t.length;r++){let n=t[r];if(n.isKind(w.ObjectLiteralExpression))ar(n.asKindOrThrow(w.ObjectLiteralExpression));else if(n.isKind(w.ArrayLiteralExpression))Pn(n.asKindOrThrow(w.ArrayLiteralExpression));else if(n.isKind(w.SpreadElement)){let s=n.getText();e.removeElement(r),e.insertElement(r,`"${s}"`)}}}function cr(e){let t=e.getProperties();for(let r=0;r<t.length;r++){let n=t[r];if(n.isKind(w.PropertyAssignment)){let s=n,i=s.getInitializer();if(i&&i.isKind(w.StringLiteral)){let o=i.asKindOrThrow(w.StringLiteral).getLiteralValue();o.startsWith("...")&&(e.insertSpreadAssignment(r,{expression:o.slice(3)}),s.remove())}else i?.isKind(w.ObjectLiteralExpression)?cr(i):i&&i.isKind(w.ArrayLiteralExpression)&&$n(i.asKindOrThrow(w.ArrayLiteralExpression))}}}function $n(e){let t=e.getElements();for(let r=0;r<t.length;r++){let n=t[r];if(n.isKind(w.ObjectLiteralExpression))cr(n.asKindOrThrow(w.ObjectLiteralExpression));else if(n.isKind(w.ArrayLiteralExpression))$n(n.asKindOrThrow(w.ArrayLiteralExpression));else if(n.isKind(w.StringLiteral)){let s=n.getText(),i=/(?:^['"])(\.\.\..*)(?:['"]$)/g;i.test(s)&&(e.removeElement(r),e.insertElement(r,s.replace(i,"$1")))}}}async function Bo(e){let r=(await Tn(`const theme = ${e}`,null)).getStatements()[0];if(r?.getKind()===w.VariableStatement){let s=(r.getDeclarationList()?.getDeclarations()[0]).getInitializer();if(s?.isKind(w.ObjectLiteralExpression))return await Dt(s)}throw new Error("Invalid input: not an object literal")}function Dt(e){let t={};for(let r of e.getProperties())if(r.isKind(w.PropertyAssignment)){let n=r.getName().replace(/\'/g,"");r.getInitializer()?.isKind(w.ObjectLiteralExpression)?t[n]=Dt(r.getInitializer()):r.getInitializer()?.isKind(w.ArrayLiteralExpression)?t[n]=jn(r.getInitializer()):t[n]=lr(r.getInitializer())}return t}function jn(e){let t=[];for(let r of e.getElements())r.isKind(w.ObjectLiteralExpression)?t.push(Dt(r.asKindOrThrow(w.ObjectLiteralExpression))):r.isKind(w.ArrayLiteralExpression)?t.push(jn(r.asKindOrThrow(w.ArrayLiteralExpression))):t.push(lr(r));return t}function lr(e){switch(e.getKind()){case w.StringLiteral:return e.getText();case w.NumericLiteral:return Number(e.getText());case w.TrueKeyword:return!0;case w.FalseKeyword:return!1;case w.NullKeyword:return null;case w.ArrayLiteralExpression:return e.getElements().map(lr);case w.ObjectLiteralExpression:return Dt(e);default:return e.getText()}}function An(e){let t={};for(let r of Object.keys(e)){let n=r.split("-"),s=n[0],i=n.slice(1).join("-");i===""?typeof t[s]=="object"?t[s].DEFAULT=`hsl(var(--${r}))`:t[s]=`hsl(var(--${r}))`:(typeof t[s]!="object"&&(t[s]={DEFAULT:`hsl(var(--${s}))`}),t[s][i]=`hsl(var(--${r}))`)}for(let[r,n]of Object.entries(t))typeof n=="object"&&n.DEFAULT===`hsl(var(--${r}))`&&!(r in e)&&delete n.DEFAULT;return t}import Te from"deepmerge";import{z as pr}from"zod";function Ze(e,t){let r={},n=[...e];for(let s=0;s<n.length;s++){let i=he(n[s],t);i&&(n[s]=i.url,Object.keys(i.headers).length>0&&(r[i.url]=i.headers))}return Ge(r),n}async function ye(e,t,r={}){return await Promise.all(e.map(async s=>{if(Ce(s))return kn(s);if(D(s)){let[a]=await _([s],r);try{return M.parse(a)}catch(l){throw new K(s,l)}}let i=Ze([s],t),[o]=await _(i,r);try{return M.parse(o)}catch(a){throw new K(s,a)}}))}var Cm=me.extend({type:at,_source:pr.string().optional(),font:lt.optional(),config:pr.any().optional()}).passthrough();async function Nn(e,t,r={}){r={useCache:!0,...r};let n=[],s=[],i=[],o=Array.from(new Set(e)),a=await ye(o,t,r),l=new Map;for(let u=0;u<a.length;u++)a[u]&&l.set(o[u],a[u]);for(let[u,f]of Array.from(l.entries())){let P={...f,_source:u};if(n.push(P),f.registryDependencies){let A=f.registryDependencies;if(t?.registries)A=Ze(f.registryDependencies,t);else{let V=f.registryDependencies.filter(L=>L.startsWith("@"));if(V.length>0){let{registry:L}=ve(V[0]);throw new ne(L)}}let{items:N,registryNames:Ie}=await Xe(A,t,r,new Set(o));s.push(...N),i.push(...Ie)}}if(n.push(...s),i.length>0){let u=Array.from(new Set(i)),f=u.filter(A=>!A.startsWith("@")),P=u.filter(A=>A.startsWith("@"));if(P.length>0){let A=await ye(P,t,r);for(let N=0;N<A.length;N++){let V={...A[N],_source:P[N]};n.push(V)}}if(f.length>0){let A=await xt();if(!A&&n.length===0)return null;if(A){f.includes("index")&&f.unshift("index");let N=[];for(let $e of f){let Zn=await Go($e,t,r);N.push(...Zn)}let Ie=Array.from(new Set(N)),V=await _(Ie,r),L=pr.array(M).parse(V);n.push(...L)}}}if(!n.length)return null;if((o.includes("index")||i.includes("index"))&&t.tailwind.baseColor){let u=await qo(t.tailwind.baseColor,t);u&&n.unshift(u)}let p=new Map;n.forEach(u=>{let f=u._source||u.name;p.set(u,f)}),n=Yo(n,p),n.sort((u,f)=>u.type==="registry:theme"&&f.type!=="registry:theme"?-1:u.type!=="registry:theme"&&f.type==="registry:theme"?1:0);let g={};n.forEach(u=>{g=Te(g,u.tailwind??{})});let m={};n.forEach(u=>{m=Te(m,u.cssVars??{})});let h={};n.forEach(u=>{h=Te(h,u.css??{})});let d="";n.forEach(u=>{u.docs&&(d+=`${u.docs}
40
+ `)});let x={};n.forEach(u=>{x=Te(x,u.envVars??{})});let I=await wn(n.map(u=>u.files??[]),t),S=n.filter(u=>u.type==="registry:font"&&u.font).map(u=>({...u,type:"registry:font",font:u.font})),R=Tr.parse({dependencies:Te.all(n.map(u=>u.dependencies??[])),devDependencies:Te.all(n.map(u=>u.devDependencies??[])),files:I,tailwind:g,cssVars:m,css:h,docs:d,fonts:S.length>0?S:void 0});return Object.keys(x).length>0&&(R.envVars=x),R}async function Xe(e,t,r={},n=new Set){let s=[],i=[];for(let o of e)if(!n.has(o)){if(n.add(o),D(o)||Ce(o)){let[a]=await ye([o],t,r);if(a&&(s.push(a),a.registryDependencies)){let l=t?.registries?Ze(a.registryDependencies,t):a.registryDependencies,p=await Xe(l,t,r,n);s.push(...p.items),i.push(...p.registryNames)}}else if(o.startsWith("@")&&t?.registries){let{registry:a}=ve(o);if(a&&!(a in t.registries))throw new ne(a);let[l]=await ye([o],t,r);if(l&&(s.push(l),l.registryDependencies)){let p=t?.registries?Ze(l.registryDependencies,t):l.registryDependencies,g=await Xe(p,t,r,n);s.push(...g.items),i.push(...g.registryNames)}}else if(i.push(o),t)try{let[a]=await ye([o],t,r);if(a&&a.registryDependencies){let l=t?.registries?Ze(a.registryDependencies,t):a.registryDependencies,p=await Xe(l,t,r,n);s.push(...p.items),i.push(...p.registryNames)}}catch{}}return{items:s,registryNames:i}}async function Go(e,t,r={}){if(D(e))return[e];let{registryNames:n}=await Xe([e],t,r,new Set),s=t.resolvedPaths?.cwd?await Dr(t.resolvedPaths.cwd,t.style):t.style,i=n.map(o=>Ft(D(o)?o:`styles/${s}/${o}.json`));return Array.from(new Set(i))}async function qo(e,t){let[r,n]=await Promise.all([Nt(e),bt(t)]);if(!r)return null;let s={name:e,type:"registry:theme",tailwind:{config:{theme:{extend:{borderRadius:{lg:"var(--radius)",md:"calc(var(--radius) - 2px)",sm:"calc(var(--radius) - 4px)"},colors:{}}}}},cssVars:{theme:{},light:{radius:"0.5rem"},dark:{}}};return t.tailwind.cssVariables&&(s.tailwind.config.theme.extend.colors={...s.tailwind.config.theme.extend.colors,...An(r.cssVars.dark??{})},s.cssVars={theme:{...r.cssVars.theme,...s.cssVars.theme},light:{...r.cssVars.light,...s.cssVars.light},dark:{...r.cssVars.dark,...s.cssVars.dark}},n==="v4"&&r.cssVarsV4&&(s.cssVars={theme:{...r.cssVarsV4.theme,...s.cssVars.theme},light:{radius:"0.625rem",...r.cssVarsV4.light},dark:{...r.cssVarsV4.dark}})),s}function pe(e,t){let r=t||e.name,n=Jo("sha256").update(r).digest("hex").substring(0,8);return`${e.name}::${n}`}function Ho(e){if(D(e)){let n=new URL(e).pathname,s=n.match(/\/([^/]+)\.json$/),i=s?s[1]:Ln.basename(n,".json");return{name:i,hash:pe({name:i},e)}}if(Ce(e)){let r=e.match(/\/([^/]+)\.json$/),n=r?r[1]:Ln.basename(e,".json");return{name:n,hash:pe({name:n},e)}}let{item:t}=ve(e);return{name:t,hash:pe({name:t},e)}}function Yo(e,t){let r=new Map,n=new Map,s=new Map,i=new Map;e.forEach(p=>{let g=t.get(p)||p.name,m=pe(p,g);r.set(m,p),n.set(m,p),s.set(m,0),i.set(m,[])});let o=new Map;e.forEach(p=>{let g=t.get(p)||p.name,m=pe(p,g);o.has(p.name)||o.set(p.name,[]),o.get(p.name).push(m),g!==p.name&&(o.has(g)||o.set(g,[]),o.get(g).push(m))}),e.forEach(p=>{let g=t.get(p)||p.name,m=pe(p,g);p.registryDependencies&&p.registryDependencies.forEach(h=>{let d,x=o.get(h)||[];if(x.length===1)d=x[0];else if(x.length>1)d=x[0];else{let{name:I}=Ho(h),S=o.get(I)||[];S.length>0&&(d=S[0])}d&&r.has(d)&&(i.get(d).push(m),s.set(m,s.get(m)+1))})});let a=[],l=[];for(s.forEach((p,g)=>{p===0&&a.push(g)});a.length>0;){let p=a.shift(),g=r.get(p);l.push(g),i.get(p).forEach(m=>{let h=s.get(m)-1;s.set(m,h),h===0&&a.push(m)})}if(l.length!==e.length){let p=new Set(l.map(g=>{let m=t.get(g)||g.name;return pe(g,m)}));e.forEach(g=>{let m=t.get(g)||g.name,h=pe(g,m);p.has(h)||l.push(g)})}return l}import{z as _n}from"zod";async function gr(e,t){let{config:r,useCache:n}=t||{};if(D(e)){let[a]=await _([e],{useCache:n});return On(e,a)}if(!e.startsWith("@"))throw new Oe(e);let s=e;s.endsWith("/registry")||(s=`${s}/registry`);let i=he(s,de(r));if(!i?.url)throw new H(s);i.headers&&Object.keys(i.headers).length>0&&Ge({[i.url]:i.headers});let[o]=await _([i.url],{useCache:n});return On(s,o)}function On(e,t){try{let r=Er.parse(t);if(r.include?.length)throw new C(`Registry catalog "${e}" uses "include", but consumer registry endpoints must serve a resolved registry catalog. Run "npx love-ui build" and serve the built registry.json, or use loadRegistry() in a dynamic route.`,{context:{registry:e,include:r.include},suggestion:"Serve a flattened registry.json for CLI consumers. Source registry.json files with include are supported by love-ui build and loadRegistry()."});return r}catch(r){throw r instanceof C?r:new K(e,r,{subject:"registry catalog",suggestion:"The registry catalog may be corrupted or have an invalid format. Please make sure it returns a valid registry.json object. See https://www.loveui.dev/schema/registry.json."})}}async function Kt(e,t){let{config:r,useCache:n=!1}=t||{};return qe(),ye(e,de(r),{useCache:n})}async function Xo(e,t){let{config:r,useCache:n=!1}=t||{};return qe(),Nn(e,de(r),{useCache:n})}async function Fn(e,t){let{useCache:r=!0}=t||{};r||ht.clearCaches();let n=await ht.search(e);if(!n)return{registries:U};let s=_n.object({registries:Gt.optional()}).safeParse(n.config);if(!s.success)throw new it(e,s.error);return{registries:{...U,...s.data.registries||{}}}}async function xt(){try{if(rt===re){let t=he(`${re}/index`,de());if(!t?.url)throw new H(`${re}/index`);t.headers&&Object.keys(t.headers).length>0&&Ge({[t.url]:t.headers});let[r]=await _([t.url]);return Ht.parse(r)}let[e]=await _(["index.json"]);return Ht.parse(e)}catch(e){E.error(`
41
+ `),be(e)}}async function Bm(){try{let[e]=await _(["styles/index.json"]);return Sr.parse(e)}catch(e){return E.error(`
42
+ `),be(e),[]}}async function Jm(){try{let[e]=await _(["icons/index.json"]);return kr.parse(e)}catch(e){return be(e),{}}}async function Gm(){return hr}async function Nt(e){try{let[t]=await _([`colors/${e}.json`]).catch(async r=>{if(!(r instanceof H))throw r;return _([`colors-${e}.json`]).catch(async n=>{if(!(n instanceof H))throw n;return _(["colors-zinc.json"])})});return Cr.parse(t)}catch(t){be(t)}}async function Qo(e,t){let r=[];for(let n of t){let s=e.find(i=>i.name===n);if(s&&(r.push(s),s.registryDependencies)){let i=await Qo(e,s.registryDependencies);r.push(...i)}}return r.filter((n,s,i)=>i.findIndex(o=>o.name===n.name)===s)}async function qm(e,t){try{let r=t.map(s=>`styles/${e}/${s.name}.json`);return(await _(r)).map(s=>M.parse(s))}catch(r){return be(r),[]}}async function Hm(e,t,r){if(r)return r;if(t.type==="registry:ui")return e.resolvedPaths.ui??e.resolvedPaths.components;let[n,s]=t.type?.split(":")??[];return n in e.resolvedPaths?Zo.join(e.resolvedPaths[n],s):null}async function Dn(e){e={useCache:!0,...e};let t=`${ge}/registries.json`,[r]=await _([t],{useCache:e.useCache});try{return $r.parse(r)}catch(n){throw n instanceof _n.ZodError?new _e(n):n}}async function ea(e){let t=await Dn(e);return t?Object.fromEntries(t.map(r=>[r.name,r.url])):null}async function ta(e){e={useCache:!0,...e};let t=`${ge}/config.json`,[r]=await _([t],{useCache:e.useCache});return jr.parse(r).presets}async function Ym(e,t){return(await ta(t)).find(n=>n.name.toLowerCase()===e.toLowerCase())??null}import ra from"fuzzysort";import{z as xe}from"zod";async function Qe(e,t){let{query:r,limit:n,offset:s,config:i,useCache:o}=t||{},a=[];for(let h of e){let x=((await gr(h,{config:i,useCache:o})).items||[]).map(I=>({name:I.name,type:I.type,description:I.description,registry:h,addCommandArgument:oa(I.name,h)}));a=a.concat(x)}r&&(a=sa(a,{query:r,limit:a.length,keys:["name","description"]}));let l=s||0,p=n||a.length,g=a.length,m={pagination:{total:g,offset:l,limit:p,hasMore:l+p<g},items:a.slice(l,l+p)};return Pr.parse(m)}var na=xe.object({name:xe.string(),type:xe.string().optional(),description:xe.string().optional(),registry:xe.string().optional(),addCommandArgument:xe.string().optional()}).passthrough();function sa(e,t){t={limit:100,threshold:-1e4,...t};let n=ra.go(t.query,e,{keys:t.keys,threshold:t.threshold,limit:t.limit}).map(s=>s.obj);return xe.array(na).parse(n)}function ia(e){try{return new URL(e),!0}catch{return!1}}function oa(e,t){if(!ia(t))return`${t}/${e}`;let r=t.indexOf("://")+3,n=t.indexOf("/",r);if(n===-1){let h=t.indexOf("?",r);if(h!==-1){let d=t.substring(0,h),I=t.substring(h).replace(/\bregistry\b/g,e);return d+I}return t}let s=t.substring(0,n),i=t.substring(n),o=i.indexOf("?")!==-1?i.indexOf("?"):i.length,a=i.substring(0,o),l=i.substring(o),p=a.lastIndexOf("registry"),g=a;p!==-1&&(g=a.substring(0,p)+e+a.substring(p+8));let m=l.replace(/\bregistry\b/g,e);return s+g+m}import*as ur from"fs/promises";import*as j from"path";var mr=32;async function au(e,t){let r=j.resolve(t.cwd,e),n=await Vn(r),s=Un(n,r);Kn(s,r);let i={cwd:j.resolve(t.cwd),itemSources:new Map,itemSourcesByItem:new Map,firstIncludedFrom:new Map},o=!!s.include?.length;if(!o)return s.items.forEach((g,m)=>{let h={registryFile:r,registryDir:i.cwd,itemIndex:m};i.itemSources.set(g.name,h),i.itemSourcesByItem.set(g,h)}),{registry:s,itemSources:i.itemSources,itemSourcesByItem:i.itemSourcesByItem,usesInclude:o};if(j.basename(r)!=="registry.json")throw new C(`Invalid registry file at ${r}: registries that use include must be named registry.json.`,{registryFile:r});let a=await zn(r,s,i,[]);ua(a.items,i.itemSourcesByItem);let{include:l,...p}=a;return Kn(p,r),{registry:p,itemSources:i.itemSources,itemSourcesByItem:i.itemSourcesByItem,usesInclude:o}}function cu(e,t,r){return{...e.registry,items:e.registry.items.map(n=>la(Mn(n,e.itemSourcesByItem,t,r)))}}async function lu(e,t,r,n){let s={...Mn(e,t.itemSourcesByItem,r,n),$schema:"https://www.loveui.dev/schema/registry-item.json"};for(let i=0;i<(e.files?.length??0);i++){let o=e.files?.[i],a=s.files?.[i];if(!a||!o)continue;let l=t.itemSourcesByItem.get(e),p=Wn(e,o.path,t.itemSourcesByItem,n);a.content=await ca(e.name,o.path,p,l)}return M.parse(s)}async function ca(e,t,r,n){try{return await ur.readFile(r,"utf-8")}catch(s){throw new Z(r,s,{message:`Failed to read file "${t}" for registry item "${e}" (${et(n)}). Expected file at ${r}.`,context:{itemName:e,itemFilePath:t,sourcePath:r},suggestion:"Make sure the file path is relative to the registry.json file that declares the item."})}}function Mn(e,t,r,n){return{...e,files:e.files?.map(s=>({...s,path:pa(e,s.path,t,r,n)}))}}function la(e){return{...e,files:e.files?.map(({content:t,...r})=>r)}}function Wn(e,t,r,n){let s=r.get(e);return j.resolve(s?.registryDir??n,t)}function pa(e,t,r,n,s){let i=Wn(e,t,r,s);return j.relative(n,i).split(j.sep).join("/")}async function zn(e,t,r,n){if(Bn(e,r.cwd),n.length>=mr)throw new C(`Registry include tree is too deep at ${e}. The maximum include depth is ${mr}.`,{registryFile:e,context:{maxDepth:mr},suggestion:"Flatten part of the registry include tree or reduce nested include depth."});if(n.includes(e))throw new C(fa([...n,e]),{registryFile:e});let s=n.at(-1)??e,i=r.firstIncludedFrom.get(e);if(i)throw new C(`Registry file included more than once: ${e}.
43
+ - first included from ${i}
44
+ - included again from ${s}
45
+ Each registry.json file can only appear once in the resolved include tree. Remove one include or move shared items into a single included registry.json.`,{registryFile:e,context:{firstSource:i,secondSource:s}});r.firstIncludedFrom.set(e,s);let o=[...n,e],a=j.dirname(e),l=[];for(let p of t.include??[]){let g=ga(p,a,r.cwd,e),m=await Vn(g),h=Un(m,g),d=await zn(g,h,r,o);l.push(...d.items)}return t.items.forEach((p,g)=>{ma(p,e,a),r.itemSources.set(p.name,{registryFile:e,registryDir:a,itemIndex:g}),r.itemSourcesByItem.set(p,{registryFile:e,registryDir:a,itemIndex:g})}),{...t,items:[...l,...t.items]}}async function Vn(e){try{return await ur.readFile(e,"utf-8")}catch(t){throw new Z(e,t,{message:`Failed to read registry file at ${e}.`,context:{registryFile:e},suggestion:"Check that the registry.json file exists and that the path is correct."})}}function Un(e,t){let r;try{r=JSON.parse(e)}catch(s){throw new K(t,s,{subject:"registry file",context:{registryFile:t},suggestion:"Fix the JSON syntax in the registry.json file and try again."})}let n=qt.safeParse(r);if(!n.success)throw new C(`Invalid registry file at ${t}:
46
+ ${da(n.error)}`,{registryFile:t,cause:n.error,suggestion:"Update the registry.json file so it matches the registry schema."});return n.data}function Kn(e,t){let r=[];if(e.name||r.push("name"),e.homepage||r.push("homepage"),r.length)throw new C(`Invalid root registry file at ${t}: root registry.json must define ${r.map(n=>`"${n}"`).join(" and ")}. Included registry.json files may omit these fields.`,{registryFile:t})}function ga(e,t,r,n){if(D(e))throw new C(`Invalid include "${e}" in ${n}: remote includes are not supported by love-ui build. Use a relative path to a registry.json file in the same repository.`,{registryFile:n,context:{includePath:e}});if(j.isAbsolute(e))throw new C(`Invalid include "${e}" in ${n}: include paths must be relative. Use a path like "./registry/ui/registry.json".`,{registryFile:n,context:{includePath:e}});if(Jn(e))throw new C(`Invalid include "${e}" in ${n}: include paths cannot use parent-directory traversal. Keep included registry.json files inside the registry root.`,{registryFile:n,context:{includePath:e}});if(j.basename(e)!=="registry.json")throw new C(`Invalid include "${e}" in ${n}: include paths must explicitly reference a registry.json file. Use a path like "./registry/ui/registry.json".`,{registryFile:n,context:{includePath:e}});let s=j.resolve(t,e);return Bn(s,r),s}function Bn(e,t){if(!Gn(e,t))throw new C(`Invalid registry file at ${e}: registry includes must stay inside ${t}.`,{registryFile:e,context:{cwd:t}})}function ma(e,t,r){for(let n of e.files??[]){if(D(n.path))throw new C(`Invalid file path "${n.path}" for item "${e.name}" in ${t}: remote file paths are not supported by love-ui build.`,{registryFile:t,context:{itemName:e.name,filePath:n.path}});if(j.isAbsolute(n.path))throw new C(`Invalid file path "${n.path}" for item "${e.name}" in ${t}: file paths must be relative.`,{registryFile:t,context:{itemName:e.name,filePath:n.path}});if(Jn(n.path))throw new C(`Invalid file path "${n.path}" for item "${e.name}" in ${t}: file paths cannot use parent-directory traversal.`,{registryFile:t,context:{itemName:e.name,filePath:n.path}});let s=j.resolve(r,n.path);if(!Gn(s,r))throw new C(`Invalid file path "${n.path}" for item "${e.name}" in ${t}: file paths must stay inside the registry chunk directory.`,{registryFile:t,context:{itemName:e.name,filePath:n.path}})}}function ua(e,t){let r=new Map;for(let n of e){let s=r.get(n.name);if(!s){r.set(n.name,n);continue}let i=t.get(s),o=t.get(n);throw new C(`Duplicate registry item name "${n.name}". Registry item names must be unique.
47
+ - ${et(i)}
48
+ - ${et(o)}
49
+ Rename one of these items so each name is unique across the resolved registry.`,{context:{itemName:n.name,firstSource:et(i),secondSource:et(o)}})}}function Jn(e){return e.split(/[\\/]+/).includes("..")}function Gn(e,t){let r=j.relative(t,e);return!!r&&!r.startsWith("..")&&!j.isAbsolute(r)}function fa(e){return`Registry include cycle detected:
50
+ ${e.map(t=>` - ${t}`).join(`
51
+ `)}`}function et(e){return e?`${e.registryFile} items[${e.itemIndex}]`:"unknown source"}function da(e){return e.errors.map(t=>` - ${t.path.length?t.path.join("."):"(root)"}: ${t.message}`).join(`
52
+ `)}import{Server as ya}from"@modelcontextprotocol/sdk/server/index.js";import{CallToolRequestSchema as xa,ListToolsRequestSchema as wa}from"@modelcontextprotocol/sdk/types.js";import q from"dedent";import{z as b}from"zod";import{zodToJsonSchema as we}from"zod-to-json-schema";var ha="love-ui@latest";async function tt(e){return`${await yr(process.cwd())} ${ha} ${e}`}async function Pe(e=process.cwd()){return{registries:(await Fn(e,{useCache:!1})).registries}}function fr(e,t){let{query:r,registries:n}=t||{},s=e.items.map(l=>{let p=[`- ${l.name}`];return l.type&&p.push(`(${l.type})`),l.description&&p.push(`- ${l.description}`),l.registry&&p.push(`[${l.registry}]`),p.push(`
53
+ Add command: \`npx love-ui@latest add ${l.addCommandArgument}\``),p.join(" ")}),i=`Found ${e.pagination.total} items`;r&&(i+=` matching "${r}"`),n&&n.length>0&&(i+=` in registries ${n.join(", ")}`),i+=":";let o=`Showing items ${e.pagination.offset+1}-${Math.min(e.pagination.offset+e.pagination.limit,e.pagination.total)} of ${e.pagination.total}:`,a=`${i}
54
+
55
+ ${o}
56
+
57
+ ${s.join(`
58
+
59
+ `)}`;return e.pagination.hasMore&&(a+=`
60
+
61
+ More items available. Use offset: ${e.pagination.offset+e.pagination.limit} to see the next page.`),a}function qn(e){return e.map(t=>[`## ${t.name}`,t.description?`
62
+ ${t.description}
63
+ `:"",t.type?`**Type:** ${t.type}`:"",t.files&&t.files.length>0?`**Files:** ${t.files.length} file(s)`:"",t.dependencies&&t.dependencies.length>0?`**Dependencies:** ${t.dependencies.join(", ")}`:"",t.devDependencies&&t.devDependencies.length>0?`**Dev Dependencies:** ${t.devDependencies.join(", ")}`:""].filter(Boolean).join(`
64
+ `))}function Hn(e,t){let r=e.map(s=>{let i=[`## Example: ${s.name}`,s.description?`
65
+ ${s.description}
66
+ `:""];return s.files?.length&&s.files.forEach(o=>{o.content&&(i.push(`### Code (${o.path}):
67
+ `),i.push("```tsx"),i.push(o.content),i.push("```"))}),i.filter(Boolean).join(`
68
+ `)});return`# Usage Examples
69
+
70
+ Found ${e.length} example${e.length>1?"s":""} matching "${t}":
71
+ `+r.join(`
72
+
73
+ ---
74
+
75
+ `)}var Yn=new ya({name:"loveui",version:"1.0.0"},{capabilities:{resources:{},tools:{}}});Yn.setRequestHandler(wa,async()=>({tools:[{name:"get_project_registries",description:"Get configured registry names from components.json - Returns error if no components.json exists (use init_project to create one)",inputSchema:we(b.object({}))},{name:"list_items_in_registries",description:"List items from registries (requires components.json - use init_project if missing)",inputSchema:we(b.object({registries:b.array(b.string()).describe("Array of registry names to search (e.g., ['@love-ui', '@acme'])"),limit:b.number().optional().describe("Maximum number of items to return"),offset:b.number().optional().describe("Number of items to skip for pagination")}))},{name:"search_items_in_registries",description:"Search for components in registries using fuzzy matching (requires components.json). After finding an item, use get_item_examples_from_registries to see usage examples.",inputSchema:we(b.object({registries:b.array(b.string()).describe("Array of registry names to search (e.g., ['@love-ui', '@acme'])"),query:b.string().describe("Search query string for fuzzy matching against item names and descriptions"),limit:b.number().optional().describe("Maximum number of items to return"),offset:b.number().optional().describe("Number of items to skip for pagination")}))},{name:"view_items_in_registries",description:"View detailed information about specific registry items including the name, description, type and files content. For usage examples, use get_item_examples_from_registries instead.",inputSchema:we(b.object({items:b.array(b.string()).describe("Array of item names with registry prefix (e.g., ['@love-ui/button', '@love-ui/card'])")}))},{name:"get_item_examples_from_registries",description:"Find usage examples and demos with their complete code. Search for patterns like 'accordion-demo', 'button example', 'card-demo', etc. Returns full implementation code with dependencies.",inputSchema:we(b.object({registries:b.array(b.string()).describe("Array of registry names to search (e.g., ['@love-ui', '@acme'])"),query:b.string().describe("Search query for examples (e.g., 'accordion-demo', 'button demo', 'card example', 'tooltip-demo', 'example-booking-form', 'example-hero'). Common patterns: '{item-name}-demo', '{item-name} example', 'example {item-name}'")}))},{name:"get_add_command_for_items",description:"Get the Love UI CLI add command for specific items in a registry. This is useful for adding one or more components to your project.",inputSchema:we(b.object({items:b.array(b.string()).describe("Array of items to get the add command for prefixed with the registry name (e.g., ['@love-ui/button', '@love-ui/card'])")}))},{name:"get_audit_checklist",description:"After creating new components or generating new code files, use this tool for a quick checklist to verify that everything is working as expected. Make sure to run the tool after all required steps have been completed.",inputSchema:we(b.object({}))}]}));Yn.setRequestHandler(xa,async e=>{try{if(!e.params.arguments)throw new Error("No tool arguments provided.");switch(e.params.name){case"get_project_registries":{let t=await Pe(process.cwd());return t?.registries?{content:[{type:"text",text:q`The following registries are configured in the current project:
76
+
77
+ ${Object.keys(t.registries).map(r=>`- ${r}`).join(`
78
+ `)}
79
+
80
+ You can view the items in a registry by running:
81
+ \`${await tt("view @name-of-registry")}\`
82
+
83
+ For example: \`${await tt("view @love-ui")}\` or \`${await tt("view @love-ui @acme")}\` to view multiple registries.
84
+ `}]}:{content:[{type:"text",text:q`No components.json found or no registries configured.
85
+
86
+ To fix this:
87
+ 1. Use the \`init\` command to create a components.json file
88
+ 2. Or manually create components.json with a registries section`}]}}case"search_items_in_registries":{let r=b.object({registries:b.array(b.string()),query:b.string(),limit:b.number().optional(),offset:b.number().optional()}).parse(e.params.arguments),n=await Qe(r.registries,{query:r.query,limit:r.limit,offset:r.offset,config:await Pe(process.cwd()),useCache:!1});return n.items.length===0?{content:[{type:"text",text:q`No items found matching "${r.query}" in registries ${r.registries.join(", ")}, Try searching with a different query or registry.`}]}:{content:[{type:"text",text:fr(n,{query:r.query,registries:r.registries})}]}}case"list_items_in_registries":{let r=b.object({registries:b.array(b.string()),limit:b.number().optional(),offset:b.number().optional(),cwd:b.string().optional()}).parse(e.params.arguments),n=await Qe(r.registries,{limit:r.limit,offset:r.offset,config:await Pe(process.cwd()),useCache:!1});return n.items.length===0?{content:[{type:"text",text:q`No items found in registries ${r.registries.join(", ")}.`}]}:{content:[{type:"text",text:fr(n,{registries:r.registries})}]}}case"view_items_in_registries":{let r=b.object({items:b.array(b.string())}).parse(e.params.arguments),n=await Kt(r.items,{config:await Pe(process.cwd()),useCache:!1});if(n?.length===0)return{content:[{type:"text",text:q`No items found for: ${r.items.join(", ")}
89
+
90
+ Make sure the item names are correct and include the registry prefix (e.g., @love-ui/button).`}]};let s=qn(n);return{content:[{type:"text",text:q`Item Details:
91
+
92
+ ${s.join(`
93
+
94
+ ---
95
+
96
+ `)}`}]}}case"get_item_examples_from_registries":{let r=b.object({query:b.string(),registries:b.array(b.string())}).parse(e.params.arguments),n=await Pe(),s=await Qe(r.registries,{query:r.query,config:n,useCache:!1});if(s.items.length===0)return{content:[{type:"text",text:q`No examples found for query "${r.query}".
97
+
98
+ Try searching with patterns like:
99
+ - "accordion-demo" for accordion examples
100
+ - "button demo" or "button example"
101
+ - Component name followed by "-demo" or "example"
102
+
103
+ You can also:
104
+ 1. Use search_items_in_registries to find all items matching your query
105
+ 2. View the main component with view_items_in_registries for inline usage documentation`}]};let i=s.items.map(a=>a.addCommandArgument),o=await Kt(i,{config:n,useCache:!1});return{content:[{type:"text",text:Hn(o,r.query)}]}}case"get_add_command_for_items":{let t=b.object({items:b.array(b.string())}).parse(e.params.arguments);return{content:[{type:"text",text:await tt(`add ${t.items.join(" ")}`)}]}}case"get_audit_checklist":return{content:[{type:"text",text:q`## Component Audit Checklist
106
+
107
+ After adding or generating components, check the following common issues:
108
+
109
+ - [ ] Ensure imports are correct i.e named vs default imports
110
+ - [ ] If using next/image, ensure images.remotePatterns next.config.js is configured correctly.
111
+ - [ ] Ensure all dependencies are installed.
112
+ - [ ] Check for linting errors or warnings
113
+ - [ ] Check for TypeScript errors
114
+ - [ ] Use the Playwright MCP if available.
115
+ `}]};default:throw new Error(`Tool ${e.params.name} not found`)}}catch(t){if(t instanceof b.ZodError)return{content:[{type:"text",text:q`Invalid input parameters:
116
+ ${t.errors.map(n=>`- ${n.path.join(".")}: ${n.message}`).join(`
117
+ `)}
118
+ `}],isError:!0};if(t instanceof $){let n=t.message;return t.suggestion&&(n+=`
119
+
120
+ \u{1F4A1} ${t.suggestion}`),t.context&&(n+=`
121
+
122
+ Context: ${JSON.stringify(t.context,null,2)}`),{content:[{type:"text",text:q`Error (${t.code}): ${n}`}],isError:!0}}let r=t instanceof Error?t.message:String(t);return{content:[{type:"text",text:q`Error: ${r}`}],isError:!0}}});export{O as a,ns as b,U as c,Sa as d,k as e,E as f,xc as g,wc as h,Ic as i,Ts as j,Ua as k,Ba as l,Ja as m,Ga as n,ne as o,ve as p,ot as q,at as r,M as s,se as t,zr as u,ue as v,Ur as w,Br as x,Jr as y,fe as z,vt as A,Se as B,Rt as C,Et as D,kt as E,Tt as F,Pt as G,Jl as H,$t as I,rn as J,nn as K,ln as L,pn as M,Qp as N,At as O,Lt as P,ao as Q,yn as R,D as S,fg as T,Vc as U,Uc as V,Bc as W,Jc as X,Bs as Y,ht as Z,Be as _,yt as $,Gc as aa,qs as ba,Ys as ca,qc as da,Kr as ea,de as fa,qe as ga,Pg as ha,he as ia,cm as ja,ye as ka,Nn as la,is as ma,dr as na,be as oa,gr as pa,Kt as qa,Xo as ra,Fn as sa,xt as ta,Bm as ua,Jm as va,Gm as wa,Nt as xa,Qo as ya,qm as za,Hm as Aa,Dn as Ba,ea as Ca,ta as Da,Ym as Ea,Q as Fa,ll as Ga,bt as Ha,pl as Ia,au as Ja,cu as Ka,lu as La,Qe as Ma,Yn as Na};