diff --git a/dist/index.js b/dist/index.js index 087fe92..0646db6 100755 --- a/dist/index.js +++ b/dist/index.js @@ -33,7 +33,7 @@ Expecting one of '${A.join("', '")}'`);let q=`${T}Help`;return this.on(q,(_)=>{l `),_[j]={};var i=b.split(` `),I=i.splice(0,1)[0].split(" "),Q=_[j],u={};if(u.hardBlank=I[0].substr(5,1),u.height=parseInt(I[1],10),u.baseline=parseInt(I[2],10),u.maxLength=parseInt(I[3],10),u.oldLayout=parseInt(I[4],10),u.numCommentLines=parseInt(I[5],10),u.printDirection=I.length>=6?parseInt(I[6],10):0,u.fullLayout=I.length>=7?parseInt(I[7],10):null,u.codeTagCount=I.length>=8?parseInt(I[8],10):null,u.fittingRules=B(u.oldLayout,u.fullLayout),Q.options=u,u.hardBlank.length!==1||isNaN(u.height)||isNaN(u.baseline)||isNaN(u.maxLength)||isNaN(u.oldLayout)||isNaN(u.numCommentLines))throw new Error("FIGlet header contains invalid values.");let Z=[],x;for(x=32;x<=126;x++)Z.push(x);if(Z=Z.concat(196,214,220,228,246,252,223),i.length0&&Q.numChars0){if(z=i.splice(0,1)[0].split(" ")[0],/^0[xX][0-9a-fA-F]+$/.test(z))z=parseInt(z,16);else if(/^0[0-7]+$/.test(z))z=parseInt(z,8);else if(/^[0-9]+$/.test(z))z=parseInt(z,10);else if(/^-0[xX][0-9a-fA-F]+$/.test(z))z=parseInt(z,16);else{if(z==="")break;console.log("Invalid data:"+z),IT=!0;break}Q[z]=i.splice(0,u.height);for(x=0;x{return u.text()}).then(function(u){i.push(u)})})},Promise.resolve()).then(function(I){for(var Q in j)if(j.hasOwnProperty(Q))MT.parseFont(j[Q],i[Q]);if(b)b()})},MT.figFonts=_,MT})();if(typeof Z_!=="undefined"){if(typeof Z_.exports!=="undefined")Z_.exports=B$}});var h4=BT((pz,_4)=>{var __dirname="/Users/irsyad/code/justd-cli/node_modules/figlet/lib",WR=q4(),f_=S("fs"),B8=S("path"),U_=B8.join(__dirname,"/../fonts/");WR.loadFont=function(T,R){return new Promise(function(A,q){if(WR.figFonts[T]){R&&R(null,WR.figFonts[T].options),A(WR.figFonts[T].options);return}f_.readFile(B8.join(U_,T+".flf"),{encoding:"utf-8"},function(_,h){if(_){R&&R(_),q(_);return}h=h+"";try{var B=WR.parseFont(T,h);R&&R(null,B),A(B)}catch(C){R&&R(C),q(C)}})})};WR.loadFontSync=function(T){if(WR.figFonts[T])return WR.figFonts[T].options;var R=f_.readFileSync(B8.join(U_,T+".flf"),{encoding:"utf-8"});return R=R+"",WR.parseFont(T,R)};WR.fonts=function(T){return new Promise(function(R,A){var q=[];f_.readdir(U_,function(_,h){if(_){T&&T(_),A(_);return}h.forEach(function(B){if(/\.flf$/.test(B))q.push(B.replace(/\.flf$/,""))}),T&&T(null,q),R(q)})})};WR.fontsSync=function(){var T=[];return f_.readdirSync(U_).forEach(function(R){if(/\.flf$/.test(R))T.push(R.replace(/\.flf$/,""))}),T};_4.exports=WR});var G8=XT(K8(),1),{program:XR,createCommand:K$,createArgument:G$,createOption:L$,CommanderError:g$,InvalidArgumentError:x$,InvalidOptionArgumentError:z$,Command:X$,Argument:Z$,Option:f$,Help:U$}=G8.default;import KA from"node:process";import{Buffer as MJ}from"node:buffer";import M8 from"node:path";import{fileURLToPath as SJ}from"node:url";import PJ from"node:child_process";import e_,{constants as S8}from"node:fs/promises";import x8 from"node:process";import jJ from"node:os";import FJ from"node:fs";import IJ from"node:fs";import L8 from"node:fs";var m_;function iJ(){try{return L8.statSync("/.dockerenv"),!0}catch{return!1}}function $J(){try{return L8.readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch{return!1}}function l_(){if(m_===void 0)m_=iJ()||$J();return m_}var d_,EJ=()=>{try{return IJ.statSync("/run/.containerenv"),!0}catch{return!1}};function Y9(){if(d_===void 0)d_=EJ()||l_();return d_}var g8=()=>{if(x8.platform!=="linux")return!1;if(jJ.release().toLowerCase().includes("microsoft")){if(Y9())return!1;return!0}try{return FJ.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft")?!Y9():!1}catch{return!1}},aA=x8.env.__IS_WSL_TEST__?g8:g8();function J9(T,R,A){let q=(_)=>Object.defineProperty(T,R,{value:_,enumerable:!0,writable:!0});return Object.defineProperty(T,R,{configurable:!0,enumerable:!0,get(){let _=A();return q(_),_},set(_){q(_)}}),T}import{promisify as XJ}from"node:util";import s_ from"node:process";import{execFile as ZJ}from"node:child_process";import{promisify as bJ}from"node:util";import QJ from"node:process";import{execFile as NJ}from"node:child_process";var uJ=bJ(NJ);async function o_(){if(QJ.platform!=="darwin")throw new Error("macOS only");let{stdout:T}=await uJ("defaults",["read","com.apple.LaunchServices/com.apple.launchservices.secure","LSHandlers"]);return/LSHandlerRoleAll = "(?!-)(?[^"]+?)";\s+?LSHandlerURLScheme = (?:http|https);/.exec(T)?.groups.id??"com.apple.Safari"}import kJ from"node:process";import{promisify as aJ}from"node:util";import{execFile as KJ,execFileSync as RI}from"node:child_process";var GJ=aJ(KJ);async function z8(T,{humanReadableOutput:R=!0}={}){if(kJ.platform!=="darwin")throw new Error("macOS only");let A=R?[]:["-ss"],{stdout:q}=await GJ("osascript",["-e",T,A]);return q.trim()}async function r_(T){return z8(`tell application "Finder" to set app_path to application file id "${T}" as string -tell application "System Events" to get value of property list item "CFBundleName" of property list file (app_path & ":Contents:Info.plist")`)}import{promisify as LJ}from"node:util";import{execFile as gJ}from"node:child_process";var xJ=LJ(gJ),zJ={AppXq0fevzme2pys62n3e0fbqa7peapykr8v:{name:"Edge",id:"com.microsoft.edge.old"},MSEdgeDHTML:{name:"Edge",id:"com.microsoft.edge"},MSEdgeHTM:{name:"Edge",id:"com.microsoft.edge"},"IE.HTTP":{name:"Internet Explorer",id:"com.microsoft.ie"},FirefoxURL:{name:"Firefox",id:"org.mozilla.firefox"},ChromeHTML:{name:"Chrome",id:"com.google.chrome"},BraveHTML:{name:"Brave",id:"com.brave.Browser"},BraveBHTML:{name:"Brave Beta",id:"com.brave.Browser.beta"},BraveSSHTM:{name:"Brave Nightly",id:"com.brave.Browser.nightly"}};class p_ extends Error{}async function n_(T=xJ){let{stdout:R}=await T("reg",["QUERY"," HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice","/v","ProgId"]),A=/ProgId\s*REG_SZ\s*(?\S+)/.exec(R);if(!A)throw new p_(`Cannot find Windows browser in stdout: ${JSON.stringify(R)}`);let{id:q}=A.groups,_=zJ[q];if(!_)throw new p_(`Unknown browser ID: ${q}`);return _}var fJ=XJ(ZJ),UJ=(T)=>T.toLowerCase().replaceAll(/(?:^|\s|-)\S/g,(R)=>R.toUpperCase());async function t_(){if(s_.platform==="darwin"){let T=await o_();return{name:await r_(T),id:T}}if(s_.platform==="linux"){let{stdout:T}=await fJ("xdg-mime",["query","default","x-scheme-handler/http"]),R=T.trim();return{name:UJ(R.replace(/.desktop$/,"").replace("-"," ")),id:R}}if(s_.platform==="win32")return n_();throw new Error("Only macOS, Linux, and Windows are supported")}var Th=M8.dirname(SJ(import.meta.url)),X8=M8.join(Th,"xdg-open"),{platform:c9,arch:Z8}=KA,YJ=(()=>{let R;return async function(){if(R)return R;let A="/etc/wsl.conf",q=!1;try{await e_.access(A,S8.F_OK),q=!0}catch{}if(!q)return"/mnt/";let _=await e_.readFile(A,{encoding:"utf8"}),h=/(?.*)/g.exec(_);if(!h)return"/mnt/";return R=h.groups.mountPoint.trim(),R=R.endsWith("/")?R:`${R}/`,R}})(),f8=async(T,R)=>{let A;for(let q of T)try{return await R(q)}catch(_){A=_}throw A},Qq=async(T)=>{if(T={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...T},Array.isArray(T.app))return f8(T.app,(C)=>Qq({...T,app:C}));let{name:R,arguments:A=[]}=T.app??{};if(A=[...A],Array.isArray(R))return f8(R,(C)=>Qq({...T,app:{name:C,arguments:A}}));if(R==="browser"||R==="browserPrivate"){let C={"com.google.chrome":"chrome","google-chrome.desktop":"chrome","org.mozilla.firefox":"firefox","firefox.desktop":"firefox","com.microsoft.msedge":"edge","com.microsoft.edge":"edge","microsoft-edge.desktop":"edge"},O={chrome:"--incognito",firefox:"--private-window",edge:"--inPrivate"},D=await t_();if(D.id in C){let W=C[D.id];if(R==="browserPrivate")A.push(O[W]);return Qq({...T,app:{name:w9[W],arguments:A}})}throw new Error(`${D.name} is not supported as a default browser`)}let q,_=[],h={};if(c9==="darwin"){if(q="open",T.wait)_.push("--wait-apps");if(T.background)_.push("--background");if(T.newInstance)_.push("--new");if(R)_.push("-a",R)}else if(c9==="win32"||aA&&!Y9()&&!R){let C=await YJ();if(q=aA?`${C}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`:`${KA.env.SYSTEMROOT||KA.env.windir||"C:\\Windows"}\\System32\\WindowsPowerShell\\v1.0\\powershell`,_.push("-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand"),!aA)h.windowsVerbatimArguments=!0;let O=["Start"];if(T.wait)O.push("-Wait");if(R){if(O.push(`"\`"${R}\`""`),T.target)A.push(T.target)}else if(T.target)O.push(`"${T.target}"`);if(A.length>0)A=A.map((D)=>`"\`"${D}\`""`),O.push("-ArgumentList",A.join(","));T.target=MJ.from(O.join(" "),"utf16le").toString("base64")}else{if(R)q=R;else{let C=!Th||Th==="/",O=!1;try{await e_.access(X8,S8.X_OK),O=!0}catch{}q=KA.versions.electron??(c9==="android"||C||!O)?"xdg-open":X8}if(A.length>0)_.push(...A);if(!T.wait)h.stdio="ignore",h.detached=!0}if(c9==="darwin"&&A.length>0)_.push("--args",...A);if(T.target)_.push(T.target);let B=PJ.spawn(q,_,h);if(T.wait)return new Promise((C,O)=>{B.once("error",O),B.once("close",(D)=>{if(!T.allowNonzeroExitCode&&D>0){O(new Error(`Exited with code ${D}`));return}C(B)})});return B.unref(),B},cJ=(T,R)=>{if(typeof T!=="string")throw new TypeError("Expected a `target`");return Qq({...R,target:T})};function U8(T){if(typeof T==="string"||Array.isArray(T))return T;let{[Z8]:R}=T;if(!R)throw new Error(`${Z8} is not supported`);return R}function Rh({[c9]:T},{wsl:R}){if(R&&aA)return U8(R);if(!T)throw new Error(`${c9} is not supported`);return U8(T)}var w9={};J9(w9,"chrome",()=>Rh({darwin:"google chrome",win32:"chrome",linux:["google-chrome","google-chrome-stable","chromium"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe",x64:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"]}}));J9(w9,"firefox",()=>Rh({darwin:"firefox",win32:"C:\\Program Files\\Mozilla Firefox\\firefox.exe",linux:"firefox"},{wsl:"/mnt/c/Program Files/Mozilla Firefox/firefox.exe"}));J9(w9,"edge",()=>Rh({darwin:"microsoft edge",win32:"msedge",linux:["microsoft-edge","microsoft-edge-dev"]},{wsl:"/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}));J9(w9,"browser",()=>"browser");J9(w9,"browserPrivate",()=>"browserPrivate");var P8=cJ;var GA={name:"justd-cli",type:"module",version:"2.3.27",description:"The command line interface for Justd.",main:"dist/index.js",bin:{"justd-cli":"dist/index.js"},files:["dist","src/resources","LICENSE","README.md","package.json"],repository:{type:"git",url:"git+https://github.com/justdlabs/cli.git"},homepage:"https://getjustd.com/cli",scripts:{dev:"bun build ./src/index.ts --outdir ./dist --target=node --minify --watch",start:"bun ./src/index.ts",prepare:"npx husky",build:"bun build ./src/index.ts --outdir ./dist --target=node --minify",format:"biome lint --fix && biome check --write",test:"bun run build && bun link",preview:"bun run clean && bun run build && bun link",pr:"bun run build && git commit -a",pre:"chmod a+x dist/index.js",release:"export GITHUB_TOKEN=$(cat .github_token) && release-it",typecheck:"tsc --noEmit"},keywords:["cli","justd cli","Justd","design-system","justd"],author:"Irsyad A. Panjaitan",license:"MIT",devDependencies:{"@biomejs/biome":"^1.9.4","@changesets/cli":"^2.27.11","@commitlint/cli":"^19.6.1","@commitlint/config-conventional":"^19.6.0","@release-it/conventional-changelog":"^10.0.0","@types/babel__core":"^7.20.5","@types/diff":"^7.0.0","@types/figlet":"^1.7.0","@types/fs-extra":"^11.0.4","@types/inquirer":"^9.0.7","@types/node":"^22.10.6",husky:"^9.1.5","release-it":"^18.1.1",rimraf:"^6.0.1",typescript:"^5.7.3"},dependencies:{"@antfu/ni":"^23.2.0","@babel/core":"^7.26.0","@babel/parser":"^7.26.5","@babel/plugin-transform-typescript":"^7.26.5","@inquirer/prompts":"^7.2.3",arktype:"^2.0.0-rc.33",commander:"^13.0.0",diff:"^5.2.0",figlet:"^1.8.0",open:"^10.1.0",ora:"^8.1.1","oxc-transform":"^0.46.0","strip-json-comments":"^5.0.1"},"release-it":{git:{commitMessage:"chore: release ${version}",tagName:"v${version}"},github:{release:!0},npm:{publish:!1},publishConfig:{access:"public",registry:"https://npm.pkg.github.com"},plugins:{"@release-it/conventional-changelog":{infile:"CHANGELOG.md",preset:{name:"conventionalcommits",types:[{type:"feat",section:"Features"},{type:"fix",section:"Bug Fixes"},{type:"refactor",section:"Refactors"},{type:"chore",section:"Chores"}]}}}}};import OR from"node:fs";import x_ from"node:path";var LA=["buttons","controls","collections","date-and-time","drag-and-drop","forms","navigation","overlays","pickers","statuses","surfaces","media","colors","layouts"],y9=[{name:"heading"},{name:"primitive"},{name:"dropdown"},{name:"dialog",children:[{name:"button"}]},{name:"field"},{name:"keyboard"},{name:"visually-hidden"},{name:"forms",children:[{name:"form"},{name:"text-field"},{name:"tag-field"},{name:"radio"},{name:"checkbox"},{name:"textarea"},{name:"number-field"},{name:"search-field"},{name:"input-otp"},{name:"choicebox"}]},{name:"collections",children:[{name:"menu"},{name:"grid-list"},{name:"list-box"},{name:"tabs"},{name:"tag-group"},{name:"table"},{name:"choicebox"},{name:"tree"}]},{name:"date-and-time",children:[{name:"date-field"},{name:"date-picker"},{name:"date-range-picker"},{name:"popover"}]},{name:"navigation",children:[{name:"link"},{name:"breadcrumbs"},{name:"pagination"},{name:"button"},{name:"disclosure"},{name:"button"},{name:"separator"},{name:"field"}]},{name:"overlays",children:[{name:"sheet"},{name:"modal"},{name:"drawer"},{name:"popover"},{name:"tooltip"}]},{name:"pickers",children:[{name:"combo-box"},{name:"select"},{name:"multiple-select"}]},{name:"statuses",children:[{name:"skeleton"},{name:"badge"},{name:"loader"},{name:"progress-bar"},{name:"progress-circle"},{name:"meter"},{name:"note"},{name:"toast"}]},{name:"surfaces",children:[{name:"card"},{name:"chart"},{name:"description-list"},{name:"grid"},{name:"separator"},{name:"show-more"}]},{name:"media",children:[{name:"avatar"},{name:"carousel"}]},{name:"colors",children:[{name:"color-picker"},{name:"color-swatch-picker"}]},{name:"buttons",children:[{name:"file-trigger"},{name:"toggle"}]},{name:"drag-and-drop",children:[{name:"drop-zone"}]},{name:"controls",children:[{name:"toolbar"},{name:"slider"},{name:"switch"},{name:"command-menu"},{name:"context-menu"}]},{name:"layouts",children:[{name:"sidebar"},{name:"navbar"},{name:"container"}]},{name:"button"},{name:"file-trigger",children:[{name:"button"}]},{name:"toggle"},{name:"menu",children:[{name:"dropdown"},{name:"keyboard"},{name:"popover"}]},{name:"list-box",children:[{name:"dropdown"},{name:"field"}]},{name:"tabs"},{name:"tag-group",children:[{name:"field"},{name:"badge"}]},{name:"table",children:[{name:"checkbox"}]},{name:"grid-list",children:[{name:"checkbox"}]},{name:"choicebox",children:[{name:"checkbox"},{name:"field"}]},{name:"tree",children:[{name:"checkbox"}]},{name:"calendar",children:[{name:"button"}]},{name:"range-calendar",children:[{name:"calendar"}]},{name:"date-field"},{name:"date-range-picker",children:[{name:"date-picker"}]},{name:"date-picker",children:[{name:"popover"},{name:"field"},{name:"calendar"},{name:"date-field"},{name:"range-calendar"}]},{name:"time-field",children:[{name:"field"},{name:"date-field"}]},{name:"form"},{name:"tag-field",children:[{name:"tag-group"},{name:"field"}]},{name:"text-field",children:[{name:"field"},{name:"loader"}]},{name:"input-otp"},{name:"radio",children:[{name:"field"}]},{name:"checkbox",children:[{name:"field"}]},{name:"textarea",children:[{name:"field"}]},{name:"number-field",children:[{name:"field"}]},{name:"search-field",children:[{name:"field"},{name:"button"},{name:"loader"}]},{name:"link"},{name:"disclosure"},{name:"pagination",children:[{name:"button"}]},{name:"breadcrumbs",children:[{name:"link"}]},{name:"card",children:[{name:"heading"}]},{name:"chart"},{name:"description-list"},{name:"grid"},{name:"separator"},{name:"show-more",children:[{name:"button"}]},{name:"drop-zone"},{name:"avatar",children:[{name:"visually-hidden"}]},{name:"carousel",children:[{name:"button"}]},{name:"modal",children:[{name:"dialog"}]},{name:"sheet",children:[{name:"dialog"}]},{name:"drawer",children:[{name:"dialog"}]},{name:"tooltip"},{name:"popover",children:[{name:"dialog"}]},{name:"combo-box",children:[{name:"field"},{name:"list-box"},{name:"popover"}]},{name:"select",children:[{name:"field"},{name:"list-box"},{name:"popover"}]},{name:"multiple-select",children:[{name:"field"},{name:"list-box"},{name:"popover"},{name:"tag-group"},{name:"visually-hidden"}]},{name:"skeleton"},{name:"badge"},{name:"loader"},{name:"progress-bar",children:[{name:"field"}]},{name:"progress-circle"},{name:"meter",children:[{name:"field"}]},{name:"note"},{name:"toast",children:[{name:"button"},{name:"loader"}]},{name:"color-picker",children:[{name:"color-area"},{name:"color-field"},{name:"color-slider"},{name:"color-swatch"},{name:"field"}]},{name:"color-field",children:[{name:"color-picker"},{name:"color-swatch"},{name:"field"}]},{name:"color-area",children:[{name:"color-thumb"}]},{name:"color-slider",children:[{name:"color-thumb"},{name:"field"}]},{name:"color-swatch-picker",children:[{name:"color-swatch"}]},{name:"color-wheel",children:[{name:"color-thumb"}]},{name:"color-swatch"},{name:"color-thumb"},{name:"command-menu",children:[{name:"keyboard"},{name:"separator"},{name:"loader"}]},{name:"context-menu",children:[{name:"menu"}]},{name:"slider",children:[{name:"field"}]},{name:"switch"},{name:"toolbar",children:[{name:"toggle"},{name:"separator"}]},{name:"sidebar",children:[{name:"sheet"},{name:"tooltip"},{name:"badge"},{name:"separator"}]},{name:"navbar",children:[{name:"sheet"}]},{name:"container"}];import{spawn as lJ}from"node:child_process";var GT=XT(w8(),1);import{stripVTControlCharacters as V8}from"node:util";function AT(T){return`${GT.default.dim(GT.default.blue("`"))}${GT.default.blue(T)}${GT.default.dim(GT.default.blue("`"))}`}function RR(T){return`${GT.default.gray(T)}`}function v8(T){return`${GT.default.dim(GT.default.red("`"))}${GT.default.red(T)}${GT.default.dim(GT.default.blue("`"))}`}function i9(T){return`${GT.default.dim(GT.default.yellow("`"))}${GT.default.yellow(T)}${GT.default.dim(GT.default.blue("`"))}`}function m8(T,R){if(T.includes(` +tell application "System Events" to get value of property list item "CFBundleName" of property list file (app_path & ":Contents:Info.plist")`)}import{promisify as LJ}from"node:util";import{execFile as gJ}from"node:child_process";var xJ=LJ(gJ),zJ={AppXq0fevzme2pys62n3e0fbqa7peapykr8v:{name:"Edge",id:"com.microsoft.edge.old"},MSEdgeDHTML:{name:"Edge",id:"com.microsoft.edge"},MSEdgeHTM:{name:"Edge",id:"com.microsoft.edge"},"IE.HTTP":{name:"Internet Explorer",id:"com.microsoft.ie"},FirefoxURL:{name:"Firefox",id:"org.mozilla.firefox"},ChromeHTML:{name:"Chrome",id:"com.google.chrome"},BraveHTML:{name:"Brave",id:"com.brave.Browser"},BraveBHTML:{name:"Brave Beta",id:"com.brave.Browser.beta"},BraveSSHTM:{name:"Brave Nightly",id:"com.brave.Browser.nightly"}};class p_ extends Error{}async function n_(T=xJ){let{stdout:R}=await T("reg",["QUERY"," HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice","/v","ProgId"]),A=/ProgId\s*REG_SZ\s*(?\S+)/.exec(R);if(!A)throw new p_(`Cannot find Windows browser in stdout: ${JSON.stringify(R)}`);let{id:q}=A.groups,_=zJ[q];if(!_)throw new p_(`Unknown browser ID: ${q}`);return _}var fJ=XJ(ZJ),UJ=(T)=>T.toLowerCase().replaceAll(/(?:^|\s|-)\S/g,(R)=>R.toUpperCase());async function t_(){if(s_.platform==="darwin"){let T=await o_();return{name:await r_(T),id:T}}if(s_.platform==="linux"){let{stdout:T}=await fJ("xdg-mime",["query","default","x-scheme-handler/http"]),R=T.trim();return{name:UJ(R.replace(/.desktop$/,"").replace("-"," ")),id:R}}if(s_.platform==="win32")return n_();throw new Error("Only macOS, Linux, and Windows are supported")}var Th=M8.dirname(SJ(import.meta.url)),X8=M8.join(Th,"xdg-open"),{platform:c9,arch:Z8}=KA,YJ=(()=>{let R;return async function(){if(R)return R;let A="/etc/wsl.conf",q=!1;try{await e_.access(A,S8.F_OK),q=!0}catch{}if(!q)return"/mnt/";let _=await e_.readFile(A,{encoding:"utf8"}),h=/(?.*)/g.exec(_);if(!h)return"/mnt/";return R=h.groups.mountPoint.trim(),R=R.endsWith("/")?R:`${R}/`,R}})(),f8=async(T,R)=>{let A;for(let q of T)try{return await R(q)}catch(_){A=_}throw A},Qq=async(T)=>{if(T={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...T},Array.isArray(T.app))return f8(T.app,(C)=>Qq({...T,app:C}));let{name:R,arguments:A=[]}=T.app??{};if(A=[...A],Array.isArray(R))return f8(R,(C)=>Qq({...T,app:{name:C,arguments:A}}));if(R==="browser"||R==="browserPrivate"){let C={"com.google.chrome":"chrome","google-chrome.desktop":"chrome","org.mozilla.firefox":"firefox","firefox.desktop":"firefox","com.microsoft.msedge":"edge","com.microsoft.edge":"edge","microsoft-edge.desktop":"edge"},O={chrome:"--incognito",firefox:"--private-window",edge:"--inPrivate"},D=await t_();if(D.id in C){let W=C[D.id];if(R==="browserPrivate")A.push(O[W]);return Qq({...T,app:{name:w9[W],arguments:A}})}throw new Error(`${D.name} is not supported as a default browser`)}let q,_=[],h={};if(c9==="darwin"){if(q="open",T.wait)_.push("--wait-apps");if(T.background)_.push("--background");if(T.newInstance)_.push("--new");if(R)_.push("-a",R)}else if(c9==="win32"||aA&&!Y9()&&!R){let C=await YJ();if(q=aA?`${C}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`:`${KA.env.SYSTEMROOT||KA.env.windir||"C:\\Windows"}\\System32\\WindowsPowerShell\\v1.0\\powershell`,_.push("-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand"),!aA)h.windowsVerbatimArguments=!0;let O=["Start"];if(T.wait)O.push("-Wait");if(R){if(O.push(`"\`"${R}\`""`),T.target)A.push(T.target)}else if(T.target)O.push(`"${T.target}"`);if(A.length>0)A=A.map((D)=>`"\`"${D}\`""`),O.push("-ArgumentList",A.join(","));T.target=MJ.from(O.join(" "),"utf16le").toString("base64")}else{if(R)q=R;else{let C=!Th||Th==="/",O=!1;try{await e_.access(X8,S8.X_OK),O=!0}catch{}q=KA.versions.electron??(c9==="android"||C||!O)?"xdg-open":X8}if(A.length>0)_.push(...A);if(!T.wait)h.stdio="ignore",h.detached=!0}if(c9==="darwin"&&A.length>0)_.push("--args",...A);if(T.target)_.push(T.target);let B=PJ.spawn(q,_,h);if(T.wait)return new Promise((C,O)=>{B.once("error",O),B.once("close",(D)=>{if(!T.allowNonzeroExitCode&&D>0){O(new Error(`Exited with code ${D}`));return}C(B)})});return B.unref(),B},cJ=(T,R)=>{if(typeof T!=="string")throw new TypeError("Expected a `target`");return Qq({...R,target:T})};function U8(T){if(typeof T==="string"||Array.isArray(T))return T;let{[Z8]:R}=T;if(!R)throw new Error(`${Z8} is not supported`);return R}function Rh({[c9]:T},{wsl:R}){if(R&&aA)return U8(R);if(!T)throw new Error(`${c9} is not supported`);return U8(T)}var w9={};J9(w9,"chrome",()=>Rh({darwin:"google chrome",win32:"chrome",linux:["google-chrome","google-chrome-stable","chromium"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe",x64:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"]}}));J9(w9,"firefox",()=>Rh({darwin:"firefox",win32:"C:\\Program Files\\Mozilla Firefox\\firefox.exe",linux:"firefox"},{wsl:"/mnt/c/Program Files/Mozilla Firefox/firefox.exe"}));J9(w9,"edge",()=>Rh({darwin:"microsoft edge",win32:"msedge",linux:["microsoft-edge","microsoft-edge-dev"]},{wsl:"/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}));J9(w9,"browser",()=>"browser");J9(w9,"browserPrivate",()=>"browserPrivate");var P8=cJ;var GA={name:"justd-cli",type:"module",version:"2.3.28",description:"The command line interface for Justd.",main:"dist/index.js",bin:{"justd-cli":"dist/index.js"},files:["dist","src/resources","LICENSE","README.md","package.json"],repository:{type:"git",url:"git+https://github.com/justdlabs/cli.git"},homepage:"https://getjustd.com/cli",scripts:{dev:"bun build ./src/index.ts --outdir ./dist --target=node --minify --watch",start:"bun ./src/index.ts",prepare:"npx husky",build:"bun build ./src/index.ts --outdir ./dist --target=node --minify",format:"biome lint --fix && biome check --write",test:"bun run build && bun link",preview:"bun run clean && bun run build && bun link",pr:"bun run build && git commit -a",pre:"chmod a+x dist/index.js",release:"export GITHUB_TOKEN=$(cat .github_token) && release-it",typecheck:"tsc --noEmit"},keywords:["cli","justd cli","Justd","design-system","justd"],author:"Irsyad A. Panjaitan",license:"MIT",devDependencies:{"@biomejs/biome":"^1.9.4","@changesets/cli":"^2.27.11","@commitlint/cli":"^19.6.1","@commitlint/config-conventional":"^19.6.0","@release-it/conventional-changelog":"^10.0.0","@types/babel__core":"^7.20.5","@types/diff":"^7.0.0","@types/figlet":"^1.7.0","@types/fs-extra":"^11.0.4","@types/inquirer":"^9.0.7","@types/node":"^22.10.6",husky:"^9.1.5","release-it":"^18.1.1",rimraf:"^6.0.1",typescript:"^5.7.3"},dependencies:{"@antfu/ni":"^23.2.0","@babel/core":"^7.26.0","@babel/parser":"^7.26.5","@babel/plugin-transform-typescript":"^7.26.5","@inquirer/prompts":"^7.2.3",arktype:"^2.0.0-rc.33",commander:"^13.0.0",diff:"^5.2.0",figlet:"^1.8.0",open:"^10.1.0",ora:"^8.1.1","oxc-transform":"^0.46.0","strip-json-comments":"^5.0.1"},"release-it":{git:{commitMessage:"chore: release ${version}",tagName:"v${version}"},github:{release:!0},npm:{publish:!1},publishConfig:{access:"public",registry:"https://npm.pkg.github.com"},plugins:{"@release-it/conventional-changelog":{infile:"CHANGELOG.md",preset:{name:"conventionalcommits",types:[{type:"feat",section:"Features"},{type:"fix",section:"Bug Fixes"},{type:"refactor",section:"Refactors"},{type:"chore",section:"Chores"}]}}}}};import OR from"node:fs";import x_ from"node:path";var LA=["buttons","controls","collections","date-and-time","drag-and-drop","forms","navigation","overlays","pickers","statuses","surfaces","media","colors","layouts"],y9=[{name:"heading"},{name:"primitive"},{name:"dropdown"},{name:"dialog",children:[{name:"button"}]},{name:"field"},{name:"keyboard"},{name:"visually-hidden"},{name:"forms",children:[{name:"form"},{name:"text-field"},{name:"tag-field"},{name:"radio"},{name:"checkbox"},{name:"textarea"},{name:"number-field"},{name:"search-field"},{name:"input-otp"},{name:"choicebox"}]},{name:"collections",children:[{name:"menu"},{name:"grid-list"},{name:"list-box"},{name:"tabs"},{name:"tag-group"},{name:"table"},{name:"choicebox"},{name:"tree"}]},{name:"date-and-time",children:[{name:"date-field"},{name:"date-picker"},{name:"date-range-picker"},{name:"popover"}]},{name:"navigation",children:[{name:"link"},{name:"breadcrumbs"},{name:"pagination"},{name:"button"},{name:"disclosure"},{name:"button"},{name:"separator"},{name:"field"}]},{name:"overlays",children:[{name:"sheet"},{name:"modal"},{name:"drawer"},{name:"popover"},{name:"tooltip"}]},{name:"pickers",children:[{name:"combo-box"},{name:"select"},{name:"multiple-select"}]},{name:"statuses",children:[{name:"skeleton"},{name:"badge"},{name:"loader"},{name:"progress-bar"},{name:"progress-circle"},{name:"meter"},{name:"note"},{name:"toast"}]},{name:"surfaces",children:[{name:"card"},{name:"chart"},{name:"description-list"},{name:"grid"},{name:"separator"},{name:"show-more"}]},{name:"media",children:[{name:"avatar"},{name:"carousel"}]},{name:"colors",children:[{name:"color-picker"},{name:"color-swatch-picker"}]},{name:"buttons",children:[{name:"file-trigger"},{name:"toggle"}]},{name:"drag-and-drop",children:[{name:"drop-zone"}]},{name:"controls",children:[{name:"toolbar"},{name:"slider"},{name:"switch"},{name:"command-menu"},{name:"context-menu"}]},{name:"layouts",children:[{name:"sidebar"},{name:"navbar"},{name:"container"}]},{name:"button"},{name:"file-trigger",children:[{name:"button"}]},{name:"toggle"},{name:"menu",children:[{name:"dropdown"},{name:"keyboard"},{name:"popover"}]},{name:"list-box",children:[{name:"dropdown"},{name:"field"}]},{name:"tabs"},{name:"tag-group",children:[{name:"field"},{name:"badge"}]},{name:"table",children:[{name:"checkbox"}]},{name:"grid-list",children:[{name:"checkbox"}]},{name:"choicebox",children:[{name:"checkbox"},{name:"field"}]},{name:"tree",children:[{name:"checkbox"}]},{name:"calendar",children:[{name:"button"}]},{name:"range-calendar",children:[{name:"calendar"}]},{name:"date-field"},{name:"date-range-picker",children:[{name:"date-picker"}]},{name:"date-picker",children:[{name:"popover"},{name:"field"},{name:"calendar"},{name:"date-field"},{name:"range-calendar"}]},{name:"time-field",children:[{name:"field"},{name:"date-field"}]},{name:"form"},{name:"tag-field",children:[{name:"tag-group"},{name:"field"}]},{name:"text-field",children:[{name:"field"},{name:"loader"}]},{name:"input-otp"},{name:"radio",children:[{name:"field"}]},{name:"checkbox",children:[{name:"field"}]},{name:"textarea",children:[{name:"field"}]},{name:"number-field",children:[{name:"field"}]},{name:"search-field",children:[{name:"field"},{name:"button"},{name:"loader"}]},{name:"link"},{name:"disclosure"},{name:"pagination",children:[{name:"button"}]},{name:"breadcrumbs",children:[{name:"link"}]},{name:"card",children:[{name:"heading"}]},{name:"chart"},{name:"description-list"},{name:"grid"},{name:"separator"},{name:"show-more",children:[{name:"button"}]},{name:"drop-zone"},{name:"avatar",children:[{name:"visually-hidden"}]},{name:"carousel",children:[{name:"button"}]},{name:"modal",children:[{name:"dialog"}]},{name:"sheet",children:[{name:"dialog"}]},{name:"drawer",children:[{name:"dialog"}]},{name:"tooltip"},{name:"popover",children:[{name:"dialog"}]},{name:"combo-box",children:[{name:"field"},{name:"list-box"},{name:"popover"}]},{name:"select",children:[{name:"field"},{name:"list-box"},{name:"popover"}]},{name:"multiple-select",children:[{name:"field"},{name:"list-box"},{name:"popover"},{name:"tag-group"},{name:"visually-hidden"}]},{name:"skeleton"},{name:"badge"},{name:"loader"},{name:"progress-bar",children:[{name:"field"}]},{name:"progress-circle"},{name:"meter",children:[{name:"field"}]},{name:"note"},{name:"toast",children:[{name:"button"},{name:"loader"}]},{name:"color-picker",children:[{name:"color-area"},{name:"color-field"},{name:"color-slider"},{name:"color-swatch"},{name:"field"}]},{name:"color-field",children:[{name:"color-picker"},{name:"color-swatch"},{name:"field"}]},{name:"color-area",children:[{name:"color-thumb"}]},{name:"color-slider",children:[{name:"color-thumb"},{name:"field"}]},{name:"color-swatch-picker",children:[{name:"color-swatch"}]},{name:"color-wheel",children:[{name:"color-thumb"}]},{name:"color-swatch"},{name:"color-thumb"},{name:"command-menu",children:[{name:"keyboard"},{name:"separator"},{name:"loader"}]},{name:"context-menu",children:[{name:"menu"}]},{name:"slider",children:[{name:"field"}]},{name:"switch"},{name:"toolbar",children:[{name:"toggle"},{name:"separator"}]},{name:"sidebar",children:[{name:"sheet"},{name:"tooltip"},{name:"badge"},{name:"separator"}]},{name:"navbar",children:[{name:"sheet"}]},{name:"container"}];import{spawn as lJ}from"node:child_process";var GT=XT(w8(),1);import{stripVTControlCharacters as V8}from"node:util";function AT(T){return`${GT.default.dim(GT.default.blue("`"))}${GT.default.blue(T)}${GT.default.dim(GT.default.blue("`"))}`}function RR(T){return`${GT.default.gray(T)}`}function v8(T){return`${GT.default.dim(GT.default.red("`"))}${GT.default.red(T)}${GT.default.dim(GT.default.blue("`"))}`}function i9(T){return`${GT.default.dim(GT.default.yellow("`"))}${GT.default.yellow(T)}${GT.default.dim(GT.default.blue("`"))}`}function m8(T,R){if(T.includes(` `))return T.split(` `).flatMap((B)=>m8(B,R));let A=T.split(" "),q=[],_="",h=0;for(let B of A){let C=V8(B).length;if(h+C+1>R)q.push(_),_="",h=0;_+=(h?" ":"")+B,h+=C+(h?1:0)}if(h)q.push(_);return q}function qh(T,{art:R=GT.default.gray("│"),prefix:A="",print:q=kq}){let _=A.length,h=" ",B=1,C=V8(R).length,D=process.stderr.columns-_-2-C;m8(T,D).map((W,H)=>{return q(`${R} ${H===0?A:" ".repeat(_)}${W} `)}),q()}function l8(T,{prefix:R="",print:A=kq}={}){qh(T,{art:GT.default.blue("│"),prefix:R,print:A})}function NT(T,{prefix:R="",print:A=kq}={}){qh(T,{art:GT.default.red("│"),prefix:R,print:A})}function d8(T,{prefix:R="",print:A=kq}={}){qh(T,{art:GT.default.yellow("│"),prefix:R,print:A})}function kq(T=""){process.stderr.write(`${T} `)}var aq=async(T,R,A)=>{let _={toast:"sonner",drawer:"motion",disclosure:"justd-icons",tabs:"motion","progress-bar":"motion",navbar:"motion",meter:"motion",chart:"recharts","input-otp":"input-otp",carousel:"embla-carousel-react","command-menu":"cmdk","multiple-select":"react-aria"}[T];if(_){let h=`${R} ${A} ${_} --silent`,B=lJ(h,{stdio:"ignore",shell:!0});await new Promise((C,O)=>{B.on("close",(D)=>{if(D===0)C();else NT(`Failed to install ${AT(_)}. Exit code: ${D}`),O(new Error(`Installation failed for ${_} with code ${D}`))}),B.on("error",(D)=>{NT(`Error while executing: ${AT(h)}`),O(D)})})}};import*as wR from"node:fs/promises";import*as BA from"node:path";var V9=(T)=>Array.isArray(T)?T:[T],o8=(T,R)=>{let A=[[],[]];for(let q of T)if(R(q))A[0].push(q);else A[1].push(q);return A},Kq=Array,ZR=(T,R)=>T.includes(R);var e=(T,R,A)=>{if(T===void 0)return R===void 0?[]:Array.isArray(R)?R:[R];if(A?.prepend)if(Array.isArray(R))T.unshift(...R);else T.unshift(R);else if(Array.isArray(R))T.push(...R);else T.push(R);return T},sR=(T,R)=>{if(R===void 0||R===null)return T??[];if(T===void 0||T===null)return V9(R);return T.concat(R)};var fR=(T,R,A)=>{if(T===void 0)return Array.isArray(R)?R:[R];let q=A?.isEqual??((_,h)=>_===h);return V9(R).forEach((_)=>{if(!T.some((h)=>q(h,_)))T.push(_)}),T},Gq=(T,R)=>T.reduce((A,q)=>{let _=q[R];return A[_]=e(A[_],q),A},{}),v9=(T,R,A)=>T.length===R.length&&T.every(A?.isEqual?(q,_)=>A.isEqual(q,R[_]):(q,_)=>q===R[_]);var mT=(T,R)=>VT(T)===R,VT=(T)=>{let R=typeof T;return R==="object"?T===null?"null":"object":R==="function"?"object":R},AR={boolean:"boolean",null:"null",undefined:"undefined",bigint:"a bigint",number:"a number",object:"an object",string:"a string",symbol:"a symbol"},r8={...AR,function:"a function"};class p8 extends Error{}var CT=(T)=>UR(T,p8),UR=(T,R=Error)=>{throw new R(T)};class Lq extends Error{name="ParseError"}var a=(T)=>UR(T,Lq),QR=(T)=>` ${T}`;var p=(T,R)=>{let A={},q=Array.isArray(T),_=!1;return Object.entries(T).forEach((h,B)=>{let C=q?R(B,h[1]):R(...h,B);_||=typeof C[0]==="number",(Array.isArray(C[0])||C.length===0?C:[C]).forEach(([D,W])=>{if(typeof D==="object")A[D.group]=e(A[D.group],W);else A[D]=W})}),_?Object.values(A):A};var _h=Object.entries;var ZT=(T,R)=>(T in R);class hh{constructor(T){Object.assign(this,T)}}var n8=class{};class gA extends n8{}var dJ=(T,R)=>{let A={},q={},_;for(_ in T)if(_ in R)A[_]=T[_];else q[_]=T[_];return[A,q]};var s8=(T,R)=>dJ(T,R)[1],yR=(T)=>Object.keys(T).length===0,xA=(T)=>[...Object.entries(T),...Object.getOwnPropertySymbols(T).map((R)=>[R,T[R]])],t8=(T,R)=>Object.defineProperties(T,Object.getOwnPropertyDescriptors(R));var $9=QR("represents an uninitialized value");var Bh={Array,Boolean,Date,Error,Function,Map,Number,Promise,RegExp,Set,String,WeakMap,WeakSet},Ch=globalThis.File??Blob,Dh={ArrayBuffer,Blob,File:Ch,FormData,Headers,Request,Response,URL},oJ={Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array},I9={...Bh,...Dh,...oJ,String,Number,Boolean},zA=(T)=>{let R=Object.getPrototypeOf(T);while(R?.constructor&&(!ZT(R.constructor.name,I9)||!(T instanceof I9[R.constructor.name])))R=Object.getPrototypeOf(R);let A=R?.constructor?.name;if(A===void 0||A==="Object")return;return A},XA=(T)=>typeof T==="object"&&T!==null?zA(T)??"object":VT(T);var yT=Array.isArray,rJ={Array:"an array",Function:"a function",Date:"a Date",RegExp:"a RegExp",Error:"an Error",Map:"a Map",Set:"a Set",String:"a String object",Number:"a Number object",Boolean:"a Boolean object",Promise:"a Promise",WeakMap:"a WeakMap",WeakSet:"a WeakSet"},pJ={ArrayBuffer:"an ArrayBuffer instance",Blob:"a Blob instance",File:"a File instance",FormData:"a FormData instance",Headers:"a Headers instance",Request:"a Request instance",Response:"a Response instance",URL:"a URL instance"},nJ={Int8Array:"an Int8Array",Uint8Array:"a Uint8Array",Uint8ClampedArray:"a Uint8ClampedArray",Int16Array:"an Int16Array",Uint16Array:"a Uint16Array",Int32Array:"an Int32Array",Uint32Array:"a Uint32Array",Float32Array:"a Float32Array",Float64Array:"a Float64Array",BigInt64Array:"a BigInt64Array",BigUint64Array:"a BigUint64Array"},e8={...rJ,...pJ,...nJ},ZA=(T)=>{let R=Object(T).name??null;return R&&ZT(R,I9)&&I9[R]===T?R:null};var Oh=(T,R)=>{let A=T.prototype;while(A!==null){if(A===R.prototype)return!0;A=Object.getPrototypeOf(A)}return!1};var TD=(T)=>RD(T,new Map),RD=(T,R)=>{if(typeof T!=="object"||T===null)return T;if(R?.has(T))return R.get(T);let A=ZA(T.constructor);if(A==="Date")return new Date(T.getTime());if(A&&A!=="Array")return T;let q=Array.isArray(T)?T.slice():Object.create(Object.getPrototypeOf(T)),_=Object.getOwnPropertyDescriptors(T);if(R){R.set(T,q);for(let h in _)_[h].value=RD(_[h].value,R)}return Object.defineProperties(q,_),q};var sJ=(T)=>{let R=$9;return()=>R===$9?R=T():R},tR=(T)=>typeof T==="function"&&T.length===0;var AD=class extends Function{constructor(...T){let R=T.slice(0,-1),A=T.at(-1);try{super(...R,A)}catch(q){return CT(`Encountered an unexpected error while compiling your definition: @@ -157,11 +157,11 @@ ${R}`,f1=Object.getOwnPropertyDescriptor(Function.prototype,"toString"),U1=Objec Up-to-date components:`)),O.forEach((D)=>console.log(zT.green(`✔ ${D}`))),console.log(` `),console.log(zT.yellow("Changed components:")),C.forEach((D)=>console.log(zT.red(`- ${D}`))),console.log(` `),C.length>0){let D=await hq({message:"Select components to update",pageSize:15,choices:[...C.map((W)=>({title:W,value:W}))],initial:C});await z_({component:D.join(" "),overwrite:!0,successMessage:"Updating components..."})}else console.log(zT.green("✔ All components are up to date."))}catch(R){console.error(zT.red("Error checking differences:"),R.message)}};var h$=GA.version;function A4(T){T.command("help [command]").description("Show help information").action((R)=>{if(console.log(`CLI Tool v${h$} -`),R){let A=T.commands.find((q)=>q.name()===R);if(A)A.outputHelp();else console.log(`Command "${R}" not found.`)}else T.outputHelp()})}import cT,{writeFileSync as H$}from"node:fs";var I4=XT(h4(),1);import{spawn as J$}from"node:child_process";import hT from"node:path";import{fileURLToPath as y$}from"node:url";import D$ from"node:fs";import NA from"node:process";import B4 from"node:fs";function C4(T){return B4.existsSync(T)&&B4.lstatSync(T).isDirectory()}async function C8(T){let{spawnSync:R}=await import("node:child_process");return R(T,["--version"],{shell:!0,stdio:"ignore"}).status===0}var D4=async(T,R,A,q)=>{let _=["composer","create-project","laravel/laravel",R,"&&","cd",R,"&&"],h=T==="bun"?"bun.lockb":T==="pnpm"?"pnpm-lock.yaml":T==="yarn"?"yarn.lock":null;if(h)_.push(`node -e "require('fs').writeFileSync('${h}', '')"`,"&&");if(_.push("composer","require","laravel/breeze","--dev","&&","php","artisan","breeze:install","react","--ssr",A==="typescript"?"--typescript":"","--eslint","--no-interaction"),q?.usePest)_.push("--pest");return _},O4=async(T,R,A,q)=>{let h=["npx create-next-app@latest",R,"--tailwind","--turbopack","--eslint",A==="typescript"?"--ts":"--js","--app","--import-alias='@/*'",T==="bun"?"--use-bun":T==="yarn"?"--use-yarn":T==="pnpm"?"--use-pnpm":"--use-npm"];if(q?.useSrc)h.push("--src-dir");else h.push("--no-src-dir");return h},W4=async(T,R)=>{return["npx","create-remix@latest","--yes",`--package-manager=${T}`,R]},H4=async(T,R)=>{switch(T){case"bun":return["bun","create","vite","--template","react-ts",R];case"yarn":return["yarn","create","vite","--template","react-ts",R];case"pnpm":return["pnpm","create","vite","--template","react-ts",R];default:return["npm","create","vite@latest","--template","react-ts",R]}};import{spawn as C$}from"node:child_process";async function nR(T,R){let A=eT(R).start();return new Promise((q,_)=>{let h=C$(T[0],T.slice(1),{stdio:"ignore",shell:!0});h.on("error",(B)=>{A.fail(`Error: ${B.message}`),_(B)}),h.on("close",(B)=>{if(B!==0)A.fail(`Command failed: ${T.join(" ")}`),_(new Error(`Command failed: ${T.join(" ")}`));else A.succeed(R),q()})})}function J4(T){return T==="bun"?["bun","add","tailwindcss","postcss","autoprefixer","-d"]:T==="yarn"?["yarn","add","-D","tailwindcss","postcss","autoprefixer"]:T==="pnpm"?["pnpm","add","-D","tailwindcss","postcss","autoprefixer"]:["npm","install","-D","tailwindcss","postcss","autoprefixer"]}async function y4(T){await nR(T==="bun"?["bun","add","-d","@biomejs/biome"]:T==="yarn"?["yarn","add","-D","@biomejs/biome"]:T==="pnpm"?["pnpm","add","-D","@biomejs/biome"]:["npm","install","-D","@biomejs/biome"],"Setting up Biome."),await nR(["npx","biome","init"],"Initializing Biome.")}var JX=NA.env.NODE_ENV==="production";var Eq={laravel:{name:"Laravel",createCommand:(T,R,A,q)=>D4(T,R,A,q)},next:{name:"Next.js",createCommand:(T,R,A,q)=>O4(T,R,A,q)},remix:{name:"Remix",createCommand:(T,R)=>W4(T,R)},vite:{name:"Vite",createCommand:(T,R)=>H4(T,R)}};async function i4(T,R){if(["y","yes"].includes(T.trim().toLowerCase())){let A=R==="javascript"?Object.keys(Eq).filter((J)=>["laravel","next"].includes(J)):Object.keys(Eq),q=await oR({message:"Which framework do you want to use?",choices:A.map((J)=>({name:Eq[J].name,value:J}))}),_=await tT({message:"What should your project be named?",default:"app",validate:(J)=>J.trim()!==""||"Project name cannot be empty."});if(C4(_))console.info(""),NT(`The directory '${_}' already exists. Please choose a different name or remove the existing directory.`),NA.exit(1);let h={};if(q==="laravel"){let J=await oR({message:"Which testing framework do you want to use?",choices:[{name:"Pest",value:"pest"},{name:"PHPUnit",value:"phpunit"}]});if(h.usePest=J==="pest",!await C8("composer"))console.info(""),NT(`Composer is not installed on your system. -Please install Composer to proceed with the Laravel setup.`),NA.exit(1)}if(q==="next"){let J=await tT({message:`Do you want to use the src folder? (Y/${RR("n")})`,default:"Yes",validate:(y)=>{let $=y.trim().toLowerCase();return["y","n","yes","no","Yes","No"].includes($)||"Please answer yes or no."}});h.useSrc=["y","yes"].includes(J.trim().toLowerCase())}let B=await tT({message:`Do you want to use Tailwind version 4? (Y/${RR("n")})`,default:"Yes",validate:(J)=>{let y=J.trim().toLowerCase();return["y","n","yes","no"].includes(y)||"Please answer yes or no."}}),C=await tT({message:`Do you want to use Biome for this project? (Y/${RR("n")})`,default:"Yes",validate:(J)=>{let y=J.trim().toLowerCase();return["y","n","yes","no"].includes(y)||"Please answer yes or no."}}),O=await oR({message:"Which package manager do you want to use?",choices:[{name:"Bun",value:"bun"},{name:"Yarn",value:"yarn"},{name:"npm",value:"npm"},{name:"pnpm",value:"pnpm"}],default:"bun"});if(O!=="npm"){if(!await C8(O))NT(`${O} is not installed on your system. Please install ${O} to proceed.`),NA.exit(1)}let D=await Eq[q].createCommand(O,_,R,h);if(await nR(D,`Creating ${Eq[q].name} project.`),D$.mkdirSync(_,{recursive:!0}),NA.chdir(_),q==="vite")await nR(J4(O),"Setting up Tailwind CSS."),await nR(["npx","tailwindcss","init","-p"],"Initializing Tailwind CSS.");if(B)await nR(["npx","@tailwindcss/upgrade@next","--force"],"Upgrading to Tailwind CSS v4.");if(["y","yes"].includes(C.trim().toLowerCase()))await y4(O);if(await nR(["npx","justd-cli@latest","init",R==="typescript"?"--language --ts":"--language --js","--force","--yes"],"Finishing."),console.info(` +`),R){let A=T.commands.find((q)=>q.name()===R);if(A)A.outputHelp();else console.log(`Command "${R}" not found.`)}else T.outputHelp()})}import cT,{writeFileSync as H$}from"node:fs";var I4=XT(h4(),1);import{spawn as J$}from"node:child_process";import hT from"node:path";import{fileURLToPath as y$}from"node:url";import D$ from"node:fs";import NA from"node:process";import B4 from"node:fs";function C4(T){return B4.existsSync(T)&&B4.lstatSync(T).isDirectory()}async function C8(T){let{spawnSync:R}=await import("node:child_process");return R(T,["--version"],{shell:!0,stdio:"ignore"}).status===0}var D4=async(T,R,A,q)=>{let _=["composer","create-project","laravel/laravel",R,"&&","cd",R,"&&"],h=T==="bun"?"bun.lockb":T==="pnpm"?"pnpm-lock.yaml":T==="yarn"?"yarn.lock":null;if(h)_.push(`node -e "require('fs').writeFileSync('${h}', '')"`,"&&");if(_.push("composer","require","laravel/breeze","--dev","&&","php","artisan","breeze:install","react","--ssr",A==="typescript"?"--typescript":"","--eslint","--no-interaction"),q?.usePest)_.push("--pest");return _},O4=async(T,R,A,q)=>{let h=["npx create-next-app@latest",R,"--tailwind","--turbopack","--eslint",A==="typescript"?"--ts":"--js","--app","--import-alias='@/*'",T==="bun"?"--use-bun":T==="yarn"?"--use-yarn":T==="pnpm"?"--use-pnpm":"--use-npm"];if(q?.useSrc)h.push("--src-dir");else h.push("--no-src-dir");return h},W4=async(T,R)=>{return["npx","create-remix@latest","--yes",`--package-manager=${T}`,R]},H4=async(T,R)=>{switch(T){case"bun":return["bun","create","vite","--template","react-ts",R];case"yarn":return["yarn","create","vite","--template","react-ts",R];case"pnpm":return["pnpm","create","vite","--template","react-ts",R];default:return["npm","create","vite@latest","--template","react-ts",R]}};import{spawn as C$}from"node:child_process";async function nR(T,R){let A=eT(R).start();return new Promise((q,_)=>{let h=C$(T[0],T.slice(1),{stdio:"ignore",shell:!0});h.on("error",(B)=>{A.fail(`Error: ${B.message}`),_(B)}),h.on("close",(B)=>{if(B!==0)A.fail(`Command failed: ${T.join(" ")}`),_(new Error(`Command failed: ${T.join(" ")}`));else A.succeed(R),q()})})}function J4(T){return T==="bun"?["bun","add","tailwindcss","postcss","autoprefixer","-d"]:T==="yarn"?["yarn","add","-D","tailwindcss","postcss","autoprefixer"]:T==="pnpm"?["pnpm","add","-D","tailwindcss","postcss","autoprefixer"]:["npm","install","-D","tailwindcss","postcss","autoprefixer"]}async function y4(T){await nR(T==="bun"?["bun","add","-d","@biomejs/biome"]:T==="yarn"?["yarn","add","-D","@biomejs/biome"]:T==="pnpm"?["pnpm","add","-D","@biomejs/biome"]:["npm","install","-D","@biomejs/biome"],"Setting up Biome."),await nR(["npx","biome","init"],"Initializing Biome.")}var JX=NA.env.NODE_ENV==="production",Eq={laravel:{name:"Laravel",createCommand:(T,R,A,q)=>D4(T,R,A,q)},next:{name:"Next.js",createCommand:(T,R,A,q)=>O4(T,R,A,q)},remix:{name:"Remix",createCommand:(T,R)=>W4(T,R)},vite:{name:"Vite",createCommand:(T,R)=>H4(T,R)}};async function i4(T,R){if(["y","yes"].includes(T.trim().toLowerCase())){let A=R==="javascript"?Object.keys(Eq).filter((J)=>["laravel","next"].includes(J)):Object.keys(Eq),q=await oR({message:"Which framework do you want to use?",choices:A.map((J)=>({name:Eq[J].name,value:J}))}),_=await tT({message:"What should your project be named?",default:"app",validate:(J)=>J.trim()!==""||"Project name cannot be empty."});if(C4(_))console.info(""),NT(`The directory '${_}' already exists. Please choose a different name or remove the existing directory.`),NA.exit(1);let h={};if(q==="laravel"){let J=await oR({message:"Which testing framework do you want to use?",choices:[{name:"Pest",value:"pest"},{name:"PHPUnit",value:"phpunit"}]});if(h.usePest=J==="pest",!await C8("composer"))console.info(""),NT(`Composer is not installed on your system. +Please install Composer to proceed with the Laravel setup.`),NA.exit(1)}if(q==="next"){let J=await tT({message:`Do you want to use the src folder? (Y/${RR("n")})`,default:"Yes",validate:(y)=>{let $=y.trim().toLowerCase();return["y","n","yes","no","Yes","No"].includes($)||"Please answer yes or no."}});h.useSrc=["y","yes"].includes(J.trim().toLowerCase())}let B=await tT({message:`Do you want to use Tailwind version 4? (Y/${RR("n")})`,default:"Yes",validate:(J)=>{let y=J.trim().toLowerCase();return["y","n","yes","no"].includes(y)||"Please answer yes or no."}}),C=await tT({message:`Do you want to use Biome for this project? (Y/${RR("n")})`,default:"Yes",validate:(J)=>{let y=J.trim().toLowerCase();return["y","n","yes","no"].includes(y)||"Please answer yes or no."}}),O=await oR({message:"Which package manager do you want to use?",choices:[{name:"Bun",value:"bun"},{name:"Yarn",value:"yarn"},{name:"npm",value:"npm"},{name:"pnpm",value:"pnpm"}],default:"bun"});if(O!=="npm"){if(!await C8(O))NT(`${O} is not installed on your system. Please install ${O} to proceed.`),NA.exit(1)}let D=await Eq[q].createCommand(O,_,R,h);if(await nR(D,`Creating ${Eq[q].name} project.`),D$.mkdirSync(_,{recursive:!0}),NA.chdir(_),q==="vite")await nR(J4(O),"Setting up Tailwind CSS."),await nR(["npx","tailwindcss","init","-p"],"Initializing Tailwind CSS.");if(B)await nR(["npx","@tailwindcss/upgrade@next","--force"],"Upgrading to Tailwind CSS v4.");if(["y","yes"].includes(C.trim().toLowerCase()))await y4(O);if(await nR(["npx","justd-cli@latest","init",R==="typescript"?"--ts":"--js","--force","--yes"],"Finishing."),console.info(` Project setup is now complete.`),q==="laravel")console.info(`Start your development server by running: ${AT(`cd ${_} && composer run dev`)} `);else console.info(`Start your development server by running: ${AT(`cd ${_} && npm run dev`)} -`);console.info("Ready to customize your project?"),console.info(`Add new components by running: ${AT("npx justd-cli@latest add")}`)}else NA.exit(0)}import{execSync as O$}from"node:child_process";import W$ from"node:fs";function $4(){if(!W$.existsSync(".git"))return!1;try{return O$("git status --porcelain",{encoding:"utf-8"}).trim()!==""}catch(T){return!T?.toString?.().includes("not a git repository")}}var i$=y$(import.meta.url),$$=hT.dirname(i$),wT=hT.resolve($$,"../src/resources/stubs");async function E4(T){let R=T.language||"typescript";if(!R6()){let Y=(await tT({message:`No setup project detected. Do you want to start a new project? (Y/${RR("n")})`,default:"Yes",validate:(s)=>{let DT=s.trim().toLowerCase();return["y","n","yes","no"].includes(DT)||"Please answer yes or no."}})).trim().toLowerCase();if(Y==="y"||Y==="yes"||Y==="n"||Y==="no"){R=await oR({message:"What language do you want to use?",choices:[{name:"Typescript",value:"typescript"},{name:"Javascript",value:"javascript"}],default:"typescript"}),await i4(Y,R);return}}if(R=tH()?"typescript":"javascript",!T.force){let d=eT("Checking.").start();if($4())d.stop(),NT("Git directory is not clean. Please stash or commit your changes before running the init command."),l8(`You may use the ${AT("--force")} flag to silence this warning and perform the initialization anyway.`),process.exit(1);d.stop()}let A=eT("Initializing.").start();if(!iC()){A.fail("The tailwindcss package is not installed. Please install before running the init command."),A.stop();return}setTimeout(()=>{A.color="yellow",A.text="Loading rainbows"},1000),await new Promise((d)=>setTimeout(d,1000));let _,h,B,C,O,D,W;if(A.succeed("Initializing."),T.yes)_=OA(),B=hT.join(_,"ui"),W=yC(),C=x9();else _=await tT({message:"Components folder:",default:OA(),validate:(d)=>d.trim()!==""||"Path cannot be empty. Please enter a valid path."}),B=hT.join(_,"ui"),W=await tT({message:"Utils folder:",default:yC(),validate:(d)=>d.trim()!==""||"Path cannot be empty. Please enter a valid path."}),C=await tT({message:"Where would you like to place the CSS file?",default:x9(),validate:(d)=>d.trim()!==""||"Path cannot be empty. Please enter a valid path."});if(YT()&&UT("src"))h=hT.join(wT,"1.x/tailwind.config.src.next.stub"),O=hT.join(wT,"next/theme-provider.stub"),D=hT.join(wT,"next/providers.stub");else if(YT()&&!UT("src"))h=hT.join(wT,"1.x/tailwind.config.next.stub"),O=hT.join(wT,"next/theme-provider.stub"),D=hT.join(wT,"next/providers.stub");else if(C9())h=hT.join(wT,"1.x/tailwind.config.laravel.stub"),O=hT.join(wT,"laravel/theme-provider.stub"),D=hT.join(wT,"laravel/providers.stub");else if(aR())h=hT.join(wT,"1.x/tailwind.config.vite.stub"),O=hT.join(wT,"remix/theme-provider.stub"),D=hT.join(wT,"remix/providers.stub");else h=hT.join(wT,"1.x/tailwind.config.vite.stub"),O=hT.join(wT,"next/theme-provider.stub"),D=hT.join(wT,"next/providers.stub");if(vR(3)){let d=cT.existsSync("tailwind.config.js")?"tailwind.config.js":"tailwind.config.ts";try{let Y=cT.readFileSync(h,"utf8");cT.writeFileSync(d,Y,{flag:"w"})}catch(Y){A.fail(`Failed to write Tailwind config to ${d}: ${Y.message}`)}}if(!cT.existsSync(W))cT.mkdirSync(W,{recursive:!0});if(!cT.existsSync(B))cT.mkdirSync(B,{recursive:!0});async function H(d){let s=(d==="typescript"?[hT.join(process.cwd(),"tsconfig.app.json"),hT.join(process.cwd(),"tsconfig.json")]:[hT.join(process.cwd(),"jsconfig.json")]).find((JR)=>cT.existsSync(JR)),DT;if(!s)console.error(d==="typescript"?"Neither tsconfig.app.json nor tsconfig.json was found.":"jsconfig.json was not found."),process.exit(1);try{let JR=cT.readFileSync(s,"utf8"),bR=Cq(JR);DT=JSON.parse(bR)}catch{console.error(`Error reading ${s} file. Please check if it exists and is valid JSON.`),process.exit(1)}if(!DT.compilerOptions)DT.compilerOptions={};if(!("paths"in DT.compilerOptions)){DT.compilerOptions.paths={"@/*":["./src/*"]};let bR=eT(`Updating ${hT.basename(s)} with paths...`).start();try{let uA=JSON.stringify(DT,null,2);cT.writeFileSync(s,uA),bR.succeed(`Paths added to ${hT.basename(s)}.`)}catch(uA){bR.fail(`Failed to write to ${hT.basename(s)}.`),process.exit(1)}}await y7(d);let HR=DT.compilerOptions.paths;if(HR)return Object.keys(HR)[0].replace("/*","");process.exit(1)}let J=await H(R);if(vR(3)){let d=cT.readFileSync(hT.join(wT,"1.x/zinc.css"),"utf8");H$(C,d,{flag:"w"})}let y=vR(3)?"zinc.css":await tC(C,T),$={ui:B,utils:W,gray:y?.replace(".css",""),css:C,alias:J||void 0,language:R},E=await O_(),N=["react-aria-components","justd-icons"].join(" "),K=["tailwind-variants","tailwind-merge","tailwindcss-animate"].join(" ");if(vR(3))K+=" tailwindcss-react-aria-components";if(YT())K+=" next-themes";if(aR())K+=" remix-themes";let k=await xT.createConfig($).catch((d)=>{d("Error writing to justd.json:",d?.message),process.exit(1)}),G=E==="npm"?"i":"add",F=`${E} ${G} ${N} && ${E} ${G} -D ${K} --silent`;A.start("Installing dependencies.");let g=J$(F,{stdio:["ignore","ignore","ignore"],shell:!0});await new Promise((d)=>{g.on("close",()=>{d()})});let P=S9("primitive"),V=await fetch(P);if(!V.ok)throw new Error(`Failed to fetch component: ${V.statusText}`);let m=await V.text();await rR(k,{writePath:hT.join(B,"primitive.tsx"),ogFilename:"primitive.tsx",content:m}),cT.writeFileSync(hT.join(B,WA(R,"index.ts")),"export * from './primitive';",{flag:"w"});let TR=await(await fetch($q("classes.ts"))).text();if(await rR(k,{writePath:hT.join(W,"classes.ts"),ogFilename:"classes.ts",content:TR}),O){let d=cT.readFileSync(O,"utf8");if(await rR(k,{ogFilename:"theme-provider.tsx",writePath:hT.join(_,"theme-provider.tsx"),content:d}),D){let Y=cT.readFileSync(D,"utf8");await rR(k,{ogFilename:"providers.tsx",writePath:hT.join(_,"providers.tsx"),content:Y})}}if(A.succeed("Installing dependencies."),A.start("Configuring."),await new Promise((d)=>setTimeout(d,1000)),A.succeed("Configuring."),!cT.existsSync(B))cT.mkdirSync(B,{recursive:!0});if(A.succeed(`UI folder created at ${AT(`${B}`)}`),A.succeed(`Primitive file saved to ${AT(`${B}/${WA(R,"providers.tsx")}`)}`),A.succeed(`Classes file saved to ${AT(`${W}/${WA(R,"classes.ts")}`)}`),O)A.succeed(`Theme Provider file saved to ${AT(`"${_}/${WA(R,"theme-provider.ts")}"`)}`),A.succeed(`Providers file saved to ${AT(`"${_}/${WA(R,"providers.tsx")}"`)}`);A.start(`Configuration saved to ${AT('"justd.json"')}`),await new Promise((d)=>setTimeout(d,500)),A.succeed(`Configuration saved to ${AT("justd.json")}`),A.succeed("Installation complete."),console.info(` +`);console.info("Ready to customize your project?"),console.info(`Add new components by running: ${AT("npx justd-cli@latest add")}`)}else NA.exit(0)}import{execSync as O$}from"node:child_process";import W$ from"node:fs";function $4(){if(!W$.existsSync(".git"))return!1;try{return O$("git status --porcelain",{encoding:"utf-8"}).trim()!==""}catch(T){return!T?.toString?.().includes("not a git repository")}}var i$=y$(import.meta.url),$$=hT.dirname(i$),wT=hT.resolve($$,"../src/resources/stubs");async function E4(T){let R=T.language;if(!R6()){let Y=(await tT({message:`No setup project detected. Do you want to start a new project? (Y/${RR("n")})`,default:"Yes",validate:(s)=>{let DT=s.trim().toLowerCase();return["y","n","yes","no"].includes(DT)||"Please answer yes or no."}})).trim().toLowerCase();if(Y==="y"||Y==="yes"||Y==="n"||Y==="no"){R=await oR({message:"What language do you want to use?",choices:[{name:"Typescript",value:"typescript"},{name:"Javascript",value:"javascript"}],default:"typescript"}),await i4(Y,R);return}}if(!R)R=tH()?"typescript":"javascript";if(!T.force){let d=eT("Checking.").start();if($4())d.stop(),NT("Git directory is not clean. Please stash or commit your changes before running the init command."),l8(`You may use the ${AT("--force")} flag to silence this warning and perform the initialization anyway.`),process.exit(1);d.stop()}let A=eT("Initializing.").start();if(!iC()){A.fail("The tailwindcss package is not installed. Please install before running the init command."),A.stop();return}setTimeout(()=>{A.color="yellow",A.text="Loading rainbows"},1000),await new Promise((d)=>setTimeout(d,1000));let _,h,B,C,O,D,W;if(A.succeed("Initializing."),T.yes)_=OA(),B=hT.join(_,"ui"),W=yC(),C=x9();else _=await tT({message:"Components folder:",default:OA(),validate:(d)=>d.trim()!==""||"Path cannot be empty. Please enter a valid path."}),B=hT.join(_,"ui"),W=await tT({message:"Utils folder:",default:yC(),validate:(d)=>d.trim()!==""||"Path cannot be empty. Please enter a valid path."}),C=await tT({message:"Where would you like to place the CSS file?",default:x9(),validate:(d)=>d.trim()!==""||"Path cannot be empty. Please enter a valid path."});if(YT()&&UT("src"))h=hT.join(wT,"1.x/tailwind.config.src.next.stub"),O=hT.join(wT,"next/theme-provider.stub"),D=hT.join(wT,"next/providers.stub");else if(YT()&&!UT("src"))h=hT.join(wT,"1.x/tailwind.config.next.stub"),O=hT.join(wT,"next/theme-provider.stub"),D=hT.join(wT,"next/providers.stub");else if(C9())h=hT.join(wT,"1.x/tailwind.config.laravel.stub"),O=hT.join(wT,"laravel/theme-provider.stub"),D=hT.join(wT,"laravel/providers.stub");else if(aR())h=hT.join(wT,"1.x/tailwind.config.vite.stub"),O=hT.join(wT,"remix/theme-provider.stub"),D=hT.join(wT,"remix/providers.stub");else h=hT.join(wT,"1.x/tailwind.config.vite.stub"),O=hT.join(wT,"next/theme-provider.stub"),D=hT.join(wT,"next/providers.stub");if(vR(3)){let d=cT.existsSync("tailwind.config.js")?"tailwind.config.js":"tailwind.config.ts";try{let Y=cT.readFileSync(h,"utf8");cT.writeFileSync(d,Y,{flag:"w"})}catch(Y){A.fail(`Failed to write Tailwind config to ${d}: ${Y.message}`)}}if(!cT.existsSync(W))cT.mkdirSync(W,{recursive:!0});if(!cT.existsSync(B))cT.mkdirSync(B,{recursive:!0});async function H(){let d=R==="typescript",s=(d?[hT.join(process.cwd(),"tsconfig.app.json"),hT.join(process.cwd(),"tsconfig.json")]:[hT.join(process.cwd(),"jsconfig.json")]).find((JR)=>cT.existsSync(JR));if(!s)console.error(d?"Neither tsconfig.app.json nor tsconfig.json was found.":"jsconfig.json was not found."),process.exit(1);let DT;try{let JR=cT.readFileSync(s,"utf8"),bR=Cq(JR);DT=JSON.parse(bR)}catch{console.error(`Error reading ${s} file. Please check if it exists and is valid JSON.`),process.exit(1)}if(!DT.compilerOptions)DT.compilerOptions={};if(!("paths"in DT.compilerOptions)){DT.compilerOptions.paths={"@/*":["./src/*"]};let bR=eT(`Updating ${hT.basename(s)} with paths...`).start();try{let uA=JSON.stringify(DT,null,2);cT.writeFileSync(s,uA),bR.succeed(`Paths added to ${hT.basename(s)}.`)}catch(uA){bR.fail(`Failed to write to ${hT.basename(s)}.`),process.exit(1)}}await y7(d?"typescript":"javascript");let HR=DT.compilerOptions.paths;if(HR)return Object.keys(HR)[0].replace("/*","");process.exit(1)}let J=await H();if(vR(3)){let d=cT.readFileSync(hT.join(wT,"1.x/zinc.css"),"utf8");H$(C,d,{flag:"w"})}let y=vR(3)?"zinc.css":await tC(C,T),$={ui:B,utils:W,gray:y?.replace(".css",""),css:C,alias:J||void 0,language:R},E=await O_(),N=["react-aria-components","justd-icons"].join(" "),K=["tailwind-variants","tailwind-merge","tailwindcss-animate"].join(" ");if(vR(3))K+=" tailwindcss-react-aria-components";if(YT())K+=" next-themes";if(aR())K+=" remix-themes";let k=await xT.createConfig($).catch((d)=>{d("Error writing to justd.json:",d?.message),process.exit(1)}),G=E==="npm"?"i":"add",F=`${E} ${G} ${N} && ${E} ${G} -D ${K} --silent`;A.start("Installing dependencies.");let g=J$(F,{stdio:["ignore","ignore","ignore"],shell:!0});await new Promise((d)=>{g.on("close",()=>{d()})});let P=S9("primitive"),V=await fetch(P);if(!V.ok)throw new Error(`Failed to fetch component: ${V.statusText}`);let m=await V.text();await rR(k,{writePath:hT.join(B,"primitive.tsx"),ogFilename:"primitive.tsx",content:m}),cT.writeFileSync(hT.join(B,WA(R,"index.ts")),"export * from './primitive';",{flag:"w"});let TR=await(await fetch($q("classes.ts"))).text();if(await rR(k,{writePath:hT.join(W,"classes.ts"),ogFilename:"classes.ts",content:TR}),O){let d=cT.readFileSync(O,"utf8");if(await rR(k,{ogFilename:"theme-provider.tsx",writePath:hT.join(_,"theme-provider.tsx"),content:d}),D){let Y=cT.readFileSync(D,"utf8");await rR(k,{ogFilename:"providers.tsx",writePath:hT.join(_,"providers.tsx"),content:Y})}}if(A.succeed("Installing dependencies."),A.start("Configuring."),await new Promise((d)=>setTimeout(d,1000)),A.succeed("Configuring."),!cT.existsSync(B))cT.mkdirSync(B,{recursive:!0});if(A.succeed(`UI folder created at ${AT(`${B}`)}`),A.succeed(`Primitive file saved to ${AT(`${B}/${WA(R,"providers.tsx")}`)}`),A.succeed(`Classes file saved to ${AT(`${W}/${WA(R,"classes.ts")}`)}`),O)A.succeed(`Theme Provider file saved to ${AT(`"${_}/${WA(R,"theme-provider.ts")}"`)}`),A.succeed(`Providers file saved to ${AT(`"${_}/${WA(R,"providers.tsx")}"`)}`);A.start(`Configuration saved to ${AT('"justd.json"')}`),await new Promise((d)=>setTimeout(d,500)),A.succeed(`Configuration saved to ${AT("justd.json")}`),A.succeed("Installation complete."),console.info(` Not sure what to do next?`),console.info(`Visit our documentation at: ${AT("https://getjustd.com")}`),console.info(` -Now try to add some components to your project`),console.info(`by running: ${AT("npx justd-cli@latest add")}`),I4.default.text("Justd",{font:"Standard",horizontalLayout:"default",width:80,verticalLayout:"default"},(d,Y)=>{console.info(AT(Y))}),A.stop()}var I$=GA.version,j4=process.argv.slice(2);if(j4.includes("--version")||j4.includes("-v"))console.log(GA.version),process.exit(0);XR.version(I$,"-v, --version","Output the version number").description("CLI Tool Description");XR.command("init").option("--force","Force initialization without checking Git").option("-y, --yes","Skip prompts and use default values").option("-l, --language ","Language of the project (typescript or javascript)","typescript").option("--ts","Use TypeScript for the project").option("--js","Use JavaScript for the project").action((T)=>{let R=T.language;if(T.ts)R="typescript";if(T.js)R="javascript";E4({...T,language:R})});XR.command("add [components...]").option("--skip ","Skip").option("-o, --overwrite","Override existing components").action(async(T,R)=>{await z_({component:T.join(" "),...R})});XR.command("change-gray [name]").description("Change the current gray").option("-y, --yes","Skip confirmation prompt").action(async(T,R)=>{await l7(R.yes,T)});XR.command("theme").description("Open theme customization page").action(async()=>{await P8("https://getjustd.com/themes")});XR.command("diff [components...]").description("Show differences between local and remote components").action(async(T)=>{await R4(...T)});A4(XR);XR.parse(process.argv); +Now try to add some components to your project`),console.info(`by running: ${AT("npx justd-cli@latest add")}`),I4.default.text("Justd",{font:"Standard",horizontalLayout:"default",width:80,verticalLayout:"default"},(d,Y)=>{console.info(AT(Y))}),A.stop()}var I$=GA.version,j4=process.argv.slice(2);if(j4.includes("--version")||j4.includes("-v"))console.log(GA.version),process.exit(0);XR.version(I$,"-v, --version","Output the version number").description("CLI Tool Description");XR.command("init").option("--force","Force initialization without checking Git").option("-y, --yes","Skip prompts and use default values").option("-l, --language ","Language of the project (typescript or javascript)").option("--ts","Use TypeScript for the project").option("--js","Use JavaScript for the project").action((T)=>{let R=T.language;if(T.ts)R="typescript";if(T.js)R="javascript";E4({...T,language:R})});XR.command("add [components...]").option("--skip ","Skip").option("-o, --overwrite","Override existing components").action(async(T,R)=>{await z_({component:T.join(" "),...R})});XR.command("change-gray [name]").description("Change the current gray").option("-y, --yes","Skip confirmation prompt").action(async(T,R)=>{await l7(R.yes,T)});XR.command("theme").description("Open theme customization page").action(async()=>{await P8("https://getjustd.com/themes")});XR.command("diff [components...]").description("Show differences between local and remote components").action(async(T)=>{await R4(...T)});A4(XR);XR.parse(process.argv); diff --git a/package.json b/package.json index ac99d8c..09a745b 100644 --- a/package.json +++ b/package.json @@ -7,13 +7,7 @@ "bin": { "justd-cli": "dist/index.js" }, - "files": [ - "dist", - "src/resources", - "LICENSE", - "README.md", - "package.json" - ], + "files": ["dist", "src/resources", "LICENSE", "README.md", "package.json"], "repository": { "type": "git", "url": "git+https://github.com/justdlabs/cli.git" @@ -32,13 +26,7 @@ "release": "export GITHUB_TOKEN=$(cat .github_token) && release-it", "typecheck": "tsc --noEmit" }, - "keywords": [ - "cli", - "justd cli", - "Justd", - "design-system", - "justd" - ], + "keywords": ["cli", "justd cli", "Justd", "design-system", "justd"], "author": "Irsyad A. Panjaitan", "license": "MIT", "devDependencies": { diff --git a/src/commands/init.ts b/src/commands/init.ts index ecf537c..7e7222a 100644 --- a/src/commands/init.ts +++ b/src/commands/init.ts @@ -8,7 +8,7 @@ import { fileURLToPath } from "node:url" import { changeGray } from "@/commands/change-gray" import { startNewProject } from "@/commands/start-new-project" import { addUiPathToLangConfig, writeCodeFile } from "@/utils" -import { type Config, type ConfigInput, configManager } from "@/utils/config" +import { type ConfigInput, configManager } from "@/utils/config" import { getPackageManager } from "@/utils/get-package-manager" import { isRepoDirty } from "@/utils/git" import { @@ -40,7 +40,7 @@ export async function init(flags: { yes?: boolean language?: "typescript" | "javascript" }) { - let language: Config["language"] = flags.language || "typescript" + let language = flags.language if (!doesProjectExist()) { const shouldStartNewProject = await input({ @@ -73,7 +73,9 @@ export async function init(flags: { } } - language = isTypescriptProject() ? "typescript" : "javascript" + if (!language) { + language = isTypescriptProject() ? "typescript" : "javascript" + } if (!flags.force) { const checkingGit = ora("Checking.").start() @@ -188,24 +190,23 @@ export async function init(flags: { fs.mkdirSync(uiFolder, { recursive: true }) } - async function getUserAlias(language: "typescript" | "javascript"): Promise { - const configFilePaths = - language === "typescript" - ? [path.join(process.cwd(), "tsconfig.app.json"), path.join(process.cwd(), "tsconfig.json")] - : [path.join(process.cwd(), "jsconfig.json")] + async function getUserAlias(): Promise { + const isTypescript = language === "typescript" + const configFilePaths = isTypescript + ? [path.join(process.cwd(), "tsconfig.app.json"), path.join(process.cwd(), "tsconfig.json")] + : [path.join(process.cwd(), "jsconfig.json")] const configFilePath = configFilePaths.find((configPath) => fs.existsSync(configPath)) - let config: any - if (!configFilePath) { console.error( - language === "typescript" + isTypescript ? "Neither tsconfig.app.json nor tsconfig.json was found." : "jsconfig.json was not found.", ) process.exit(1) } + let config: any try { const configRaw = fs.readFileSync(configFilePath, "utf8") const stripped = stripJsonComments(configRaw) @@ -223,7 +224,6 @@ export async function init(flags: { if (!("paths" in config.compilerOptions)) { const rootPath = "./src" - config.compilerOptions.paths = { "@/*": [`${rootPath}/*`], } @@ -239,7 +239,7 @@ export async function init(flags: { } } - await addUiPathToLangConfig(language) + await addUiPathToLangConfig(isTypescript ? "typescript" : "javascript") const paths = config.compilerOptions.paths if (paths) { @@ -250,7 +250,7 @@ export async function init(flags: { process.exit(1) } - const currentAlias = await getUserAlias(language) + const currentAlias = await getUserAlias() if (isTailwind(3)) { const content = fs.readFileSync(path.join(stubs, "1.x/zinc.css"), "utf8") diff --git a/src/commands/start-new-project/index.ts b/src/commands/start-new-project/index.ts index e755b2e..438652d 100644 --- a/src/commands/start-new-project/index.ts +++ b/src/commands/start-new-project/index.ts @@ -18,7 +18,6 @@ import { input, select } from "@inquirer/prompts" import { executeCommand } from "./partials/execute-command" const isProduction = process.env.NODE_ENV === "production" -const cliCommand = isProduction ? "justd-cli@latest" : "justd-cli" const frameworks: Record = { laravel: { @@ -180,7 +179,9 @@ export async function startNewProject( await setupBiome(packageManager) } - const tsOrJs = language === "typescript" ? "--language --ts" : "--language --js" + // const cliCommand = isProduction ? "justd-cli@latest" : "justd-cli" + + const tsOrJs = language === "typescript" ? "--ts" : "--js" const initJustdCommand = ["npx", "justd-cli@latest", "init", tsOrJs, "--force", "--yes"] await executeCommand(initJustdCommand, "Finishing.") diff --git a/src/index.ts b/src/index.ts index 2828e2a..1c19158 100644 --- a/src/index.ts +++ b/src/index.ts @@ -38,11 +38,7 @@ program .command("init") .option("--force", "Force initialization without checking Git") .option("-y, --yes", "Skip prompts and use default values") - .option( - "-l, --language ", - "Language of the project (typescript or javascript)", - "typescript", - ) + .option("-l, --language ", "Language of the project (typescript or javascript)") .option("--ts", "Use TypeScript for the project") .option("--js", "Use JavaScript for the project") .action((options) => {