atomsystem 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.cjs CHANGED
@@ -660,7 +660,7 @@ function showVersion() {
660
660
  const pkg = JSON.parse(fs2__default.default.readFileSync(pkgPath, "utf-8"));
661
661
  console.log(`atomsystem v${pkg.version}`);
662
662
  } else {
663
- console.log("atomsystem v0.5.0");
663
+ console.log("atomsystem v0.5.1");
664
664
  }
665
665
  }
666
666
  switch (command) {
package/dist/cli.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tokenCompiler.ts","../src/studioServer.ts","../src/cli.ts"],"names":["path","http","fs","fileURLToPath"],"mappings":";;;;;;;;;;;;;;;;AAGO,SAAS,mBAAmB,SAAwC,EAAA;AACzE,EAAA,MAAM,UAAoB,EAAC;AAE3B,EAAA,SAAS,SAAS,GAAU,EAAA;AAC1B,IAAA,IAAI,CAAC,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAU,EAAA;AAErC,IAAA,IAAI,GAAI,CAAA,QAAA,IAAY,GAAI,CAAA,MAAA,KAAW,MAAW,EAAA;AAC5C,MAAA,OAAA,CAAQ,KAAK,CAAK,EAAA,EAAA,GAAA,CAAI,QAAQ,CAAK,EAAA,EAAA,GAAA,CAAI,MAAM,CAAG,CAAA,CAAA,CAAA;AAChD,MAAA;AAAA;AAGF,IAAA,KAAA,MAAW,GAAO,IAAA,MAAA,CAAO,IAAK,CAAA,GAAG,CAAG,EAAA;AAClC,MAAI,IAAA,GAAA,CAAI,UAAW,CAAA,GAAG,CAAG,EAAA;AACzB,MAAS,QAAA,CAAA,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA;AACnB;AAGF,EAAA,QAAA,CAAS,SAAS,CAAA;AAElB,EAAO,OAAA,CAAA;AAAA,EAAY,OAAA,CAAQ,IAAK,CAAA,IAAI,CAAC;AAAA;AAAA,CAAA;AACvC;;;AClBO,SAAS,qBAAA,CAAsB,OAA2C,GAAA,EAAI,EAAA;AACnF,EAAM,MAAA,IAAA,GAAO,QAAQ,IAAQ,IAAA,GAAA;AAC7B,EAAA,MAAM,GAAM,GAAA,OAAA,CAAQ,GAAO,IAAA,OAAA,CAAQ,GAAI,EAAA;AAGvC,EAAA,MAAM,aAAgB,GAAAA,sBAAA,CAAK,IAAK,CAAA,GAAA,EAAK,UAAU,YAAY,CAAA;AAC3D,EAAA,MAAM,OAAU,GAAAA,sBAAA,CAAK,IAAK,CAAA,GAAA,EAAK,OAAO,aAAa,CAAA;AACnD,EAAqBA,sBAAA,CAAK,IAAK,CAAA,GAAA,EAAK,gBAAgB;AAEpD,EAAA,MAAM,MAAS,GAAAC,qBAAA,CAAK,YAAa,CAAA,CAAC,KAAK,GAAQ,KAAA;AAE7C,IAAI,GAAA,CAAA,SAAA,CAAU,+BAA+B,GAAG,CAAA;AAChD,IAAI,GAAA,CAAA,SAAA,CAAU,gCAAgC,oBAAoB,CAAA;AAClE,IAAI,GAAA,CAAA,SAAA,CAAU,gCAAgC,cAAc,CAAA;AAE5D,IAAI,IAAA,GAAA,CAAI,WAAW,SAAW,EAAA;AAC5B,MAAA,GAAA,CAAI,UAAU,GAAG,CAAA;AACjB,MAAA,GAAA,CAAI,GAAI,EAAA;AACR,MAAA;AAAA;AAGF,IAAM,MAAA,GAAA,GAAM,IAAI,GAAI,CAAA,GAAA,CAAI,OAAO,GAAK,EAAA,CAAA,iBAAA,EAAoB,IAAI,CAAE,CAAA,CAAA;AAG9D,IAAA,IAAI,GAAI,CAAA,QAAA,KAAa,aAAiB,IAAA,GAAA,CAAI,WAAW,KAAO,EAAA;AAC1D,MAAA,IAAI,OAAY,EAAC;AACjB,MAAI,IAAAC,oBAAA,CAAG,UAAW,CAAA,aAAa,CAAG,EAAA;AAChC,QAAI,IAAA;AACF,UAAA,IAAA,GAAO,KAAK,KAAM,CAAAA,oBAAA,CAAG,YAAa,CAAA,aAAA,EAAe,OAAO,CAAC,CAAA;AAAA,iBAClD,CAAG,EAAA;AACV,UAAO,IAAA,GAAA,EAAE,OAAO,mCAAoC,EAAA;AAAA;AACtD;AAEF,MAAA,GAAA,CAAI,SAAU,CAAA,GAAA,EAAK,EAAE,cAAA,EAAgB,mCAAmC,CAAA;AACxE,MAAA,GAAA,CAAI,GAAI,CAAA,IAAA,CAAK,SAAU,CAAA,IAAI,CAAC,CAAA;AAC5B,MAAA;AAAA;AAIF,IAAA,IAAI,GAAI,CAAA,QAAA,KAAa,aAAiB,IAAA,GAAA,CAAI,WAAW,MAAQ,EAAA;AAC3D,MAAA,IAAI,IAAO,GAAA,EAAA;AACX,MAAI,GAAA,CAAA,EAAA,CAAG,MAAQ,EAAA,CAAC,KAAU,KAAA;AACxB,QAAQ,IAAA,IAAA,KAAA;AAAA,OACT,CAAA;AACD,MAAI,GAAA,CAAA,EAAA,CAAG,OAAO,MAAM;AAClB,QAAI,IAAA;AACF,UAAM,MAAA,SAAA,GAAY,IAAK,CAAA,KAAA,CAAM,IAAI,CAAA;AAGjC,UAAM,MAAA,SAAA,GAAYF,sBAAK,CAAA,OAAA,CAAQ,aAAa,CAAA;AAC5C,UAAI,IAAA,CAACE,oBAAG,CAAA,UAAA,CAAW,SAAS,CAAA,EAAMA,oBAAA,CAAA,SAAA,CAAU,SAAW,EAAA,EAAE,SAAW,EAAA,IAAA,EAAM,CAAA;AAC1E,UAAGA,oBAAA,CAAA,aAAA,CAAc,eAAe,IAAK,CAAA,SAAA,CAAU,WAAW,IAAM,EAAA,CAAC,GAAG,OAAO,CAAA;AAG3E,UAAM,MAAA,WAAA,GAAc,mBAAmB,SAAS,CAAA;AAChD,UAAM,MAAA,MAAA,GAASF,sBAAK,CAAA,OAAA,CAAQ,OAAO,CAAA;AACnC,UAAI,IAAA,CAACE,oBAAG,CAAA,UAAA,CAAW,MAAM,CAAA,EAAMA,oBAAA,CAAA,SAAA,CAAU,MAAQ,EAAA,EAAE,SAAW,EAAA,IAAA,EAAM,CAAA;AACpE,UAAGA,oBAAA,CAAA,aAAA,CAAc,OAAS,EAAA,WAAA,EAAa,OAAO,CAAA;AAE9C,UAAA,GAAA,CAAI,SAAU,CAAA,GAAA,EAAK,EAAE,cAAA,EAAgB,mCAAmC,CAAA;AACxE,UAAI,GAAA,CAAA,GAAA,CAAI,KAAK,SAAU,CAAA,EAAE,SAAS,IAAM,EAAA,OAAA,EAAS,uCAAwC,EAAC,CAAC,CAAA;AAAA,iBACpF,GAAU,EAAA;AACjB,UAAA,GAAA,CAAI,SAAU,CAAA,GAAA,EAAK,EAAE,cAAA,EAAgB,mCAAmC,CAAA;AACxE,UAAI,GAAA,CAAA,GAAA,CAAI,IAAK,CAAA,SAAA,CAAU,EAAE,OAAA,EAAS,OAAO,KAAO,EAAA,GAAA,CAAI,OAAQ,EAAC,CAAC,CAAA;AAAA;AAChE,OACD,CAAA;AACD,MAAA;AAAA;AAIF,IAAA,IAAI,GAAI,CAAA,QAAA,KAAa,GAAO,IAAA,GAAA,CAAI,aAAa,aAAe,EAAA;AAC1D,MAAA,GAAA,CAAI,SAAU,CAAA,GAAA,EAAK,EAAE,cAAA,EAAgB,4BAA4B,CAAA;AACjE,MAAI,GAAA,CAAA,GAAA,CAAI,eAAe,CAAA;AACvB,MAAA;AAAA;AAGF,IAAA,GAAA,CAAI,SAAU,CAAA,GAAA,EAAK,EAAE,cAAA,EAAgB,6BAA6B,CAAA;AAClE,IAAA,GAAA,CAAI,IAAI,WAAW,CAAA;AAAA,GACpB,CAAA;AAED,EAAO,MAAA,CAAA,MAAA,CAAO,MAAM,MAAM;AACxB,IAAA,OAAA,CAAQ,GAAI,CAAA;AAAA,mDAAgD,CAAA,CAAA;AAC5D,IAAQ,OAAA,CAAA,GAAA,CAAI,iCAA0B,IAAI;AAAA,CAAI,CAAA;AAC9C,IAAA,OAAA,CAAQ,IAAI,CAAmB,gBAAA,EAAAF,sBAAA,CAAK,SAAS,GAAK,EAAA,aAAa,CAAC,CAAE,CAAA,CAAA;AAClE,IAAA,OAAA,CAAQ,IAAI,CAAoB,iBAAA,EAAAA,sBAAA,CAAK,SAAS,GAAK,EAAA,OAAO,CAAC,CAAE,CAAA,CAAA;AAC7D,IAAA,OAAA,CAAQ,GAAI,CAAA;AAAA;AAAA,CAA6C,CAAA;AAAA,GAC1D,CAAA;AAED,EAAO,OAAA,MAAA;AACT;AAEA,SAAS,aAAwB,GAAA;AAC/B,EAAO,OAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,OAAA,CAAA;AAkUT;;;AC5ZA,SAAS,UAAqB,GAAA;AAC5B,EAAI,IAAA;AACF,IAAI,IAAA,OAAO,cAAc,WAAa,EAAA;AACpC,MAAOA,OAAAA,sBAAAA,CAAK,OAAQ,CAAA,SAAA,EAAW,IAAI,CAAA;AAAA;AAErC,IAAM,MAAA,WAAA,GAAcG,iBAAc,CAAA,yPAAe,CAAA;AACjD,IAAA,OAAOH,uBAAK,OAAQA,CAAAA,sBAAAA,CAAK,OAAQ,CAAA,WAAW,GAAG,IAAI,CAAA;AAAA,GAC7C,CAAA,MAAA;AACN,IAAA,OAAO,QAAQ,GAAI,EAAA;AAAA;AAEvB;AAEA,IAAM,WAAW,UAAW,EAAA;AAC5B,IAAM,IAAO,GAAA,OAAA,CAAQ,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA;AACjC,IAAM,OAAA,GAAU,IAAK,CAAA,CAAC,CAAK,IAAA,MAAA;AAC3B,IAAM,UAAA,GAAa,KAAK,CAAC,CAAA;AAEzB,SAAS,YAAA,CAAa,GAAa,EAAA,IAAA,EAAc,KAAe,EAAA;AAC9D,EAAM,MAAA,SAAA,GAAYA,sBAAK,CAAA,OAAA,CAAQ,IAAI,CAAA;AACnC,EAAA,IAAI,CAACE,oBAAAA,CAAG,UAAW,CAAA,SAAS,CAAG,EAAA;AAC7B,IAAAA,qBAAG,SAAU,CAAA,SAAA,EAAW,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA;AAE7C,EAAAA,oBAAAA,CAAG,YAAa,CAAA,GAAA,EAAK,IAAI,CAAA;AACzB,EAAQ,OAAA,CAAA,GAAA,CAAI,CAAO,SAAA,EAAA,KAAK,CAAOF,IAAAA,EAAAA,sBAAAA,CAAK,QAAS,CAAA,OAAA,CAAQ,GAAI,EAAA,EAAG,IAAI,CAAC,CAAE,CAAA,CAAA;AACrE;AAEA,SAAS,UAAa,GAAA;AACpB,EAAM,MAAA,GAAA,GAAM,QAAQ,GAAI,EAAA;AACxB,EAAA,OAAA,CAAQ,IAAI,kEAA2D,CAAA;AAGvE,EAAA,MAAM,aAAgBA,GAAAA,sBAAAA,CAAK,IAAK,CAAA,QAAA,EAAU,WAAW,iBAAiB,CAAA;AACtE,EAAIE,IAAAA,oBAAAA,CAAG,UAAW,CAAA,aAAa,CAAG,EAAA;AAEhC,IAAA,YAAA,CAAa,eAAeF,sBAAK,CAAA,IAAA,CAAK,GAAK,EAAA,WAAW,GAAG,gCAAgC,CAAA;AAEzF,IAAA,YAAA,CAAa,eAAeA,sBAAK,CAAA,IAAA,CAAK,GAAK,EAAA,WAAW,GAAG,oCAAoC,CAAA;AAE7F,IAAA,YAAA,CAAa,eAAeA,sBAAK,CAAA,IAAA,CAAK,GAAK,EAAA,cAAc,GAAG,6BAA6B,CAAA;AAAA;AAI3F,EAAA,MAAM,QAAWA,GAAAA,sBAAAA,CAAK,IAAK,CAAA,QAAA,EAAU,UAAU,qBAAqB,CAAA;AACpE,EAAIE,IAAAA,oBAAAA,CAAG,UAAW,CAAA,QAAQ,CAAG,EAAA;AAC3B,IAAa,YAAA,CAAA,QAAA,EAAUF,uBAAK,IAAK,CAAA,GAAA,EAAK,WAAW,QAAU,EAAA,YAAA,EAAc,UAAU,CAAA,EAAG,kDAAkD,CAAA;AAAA;AAI1I,EAAA,MAAM,KAAQ,GAAA;AAAA,IACZ,EAAE,GAAA,EAAKA,sBAAK,CAAA,IAAA,CAAK,UAAU,SAAW,EAAA,mBAAmB,CAAG,EAAA,IAAA,EAAMA,uBAAK,IAAK,CAAA,GAAA,EAAK,gBAAgB,CAAA,EAAG,OAAO,gCAAiC,EAAA;AAAA,IAC5I,EAAE,GAAA,EAAKA,sBAAK,CAAA,IAAA,CAAK,UAAU,SAAW,EAAA,eAAe,CAAG,EAAA,IAAA,EAAMA,uBAAK,IAAK,CAAA,GAAA,EAAK,oBAAoB,CAAA,EAAG,OAAO,sCAAuC,EAAA;AAAA,IAClJ,EAAE,GAAA,EAAKA,sBAAK,CAAA,IAAA,CAAK,UAAU,SAAW,EAAA,WAAW,CAAG,EAAA,IAAA,EAAMA,uBAAK,IAAK,CAAA,GAAA,EAAK,gBAAgB,CAAA,EAAG,OAAO,qCAAsC,EAAA;AAAA,IACzI,EAAE,GAAA,EAAKA,sBAAK,CAAA,IAAA,CAAK,UAAU,SAAW,EAAA,cAAc,CAAG,EAAA,IAAA,EAAMA,uBAAK,IAAK,CAAA,GAAA,EAAK,mBAAmB,CAAA,EAAG,OAAO,iCAAkC;AAAA,GAC7I;AAEA,EAAM,KAAA,CAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AACnB,IAAA,IAAIE,oBAAG,CAAA,UAAA,CAAW,CAAE,CAAA,GAAG,CAAG,EAAA;AACxB,MAAA,YAAA,CAAa,CAAE,CAAA,GAAA,EAAK,CAAE,CAAA,IAAA,EAAM,EAAE,KAAK,CAAA;AAAA;AACrC,GACD,CAAA;AAGD,EAAA,MAAM,QAAWF,GAAAA,sBAAAA,CAAK,IAAK,CAAA,QAAA,EAAU,UAAU,YAAY,CAAA;AAC3D,EAAIE,IAAAA,oBAAAA,CAAG,UAAW,CAAA,QAAQ,CAAG,EAAA;AAC3B,IAAA,YAAA,CAAa,UAAUF,sBAAK,CAAA,IAAA,CAAK,KAAK,QAAU,EAAA,YAAY,GAAG,yCAAyC,CAAA;AAAA;AAG1G,EAAA,MAAM,MAASA,GAAAA,sBAAAA,CAAK,IAAK,CAAA,QAAA,EAAU,OAAO,aAAa,CAAA;AACvD,EAAIE,IAAAA,oBAAAA,CAAG,UAAW,CAAA,MAAM,CAAG,EAAA;AACzB,IAAA,YAAA,CAAa,QAAQF,sBAAK,CAAA,IAAA,CAAK,KAAK,KAAO,EAAA,aAAa,GAAG,6CAA6C,CAAA;AAAA;AAG1G,EAAA,OAAA,CAAQ,IAAI,4DAAuD,CAAA;AACnE,EAAA,OAAA,CAAQ,IAAI,2CAAoC,CAAA;AAChD,EAAA,OAAA,CAAQ,IAAI,uEAAuE,CAAA;AACnF,EAAA,OAAA,CAAQ,IAAI,2EAA2E,CAAA;AACvF,EAAA,OAAA,CAAQ,IAAI,sCAA+B,CAAA;AAC3C,EAAA,OAAA,CAAQ,IAAI,yEAAyE,CAAA;AACrF,EAAA,OAAA,CAAQ,IAAI,wEAAwE,CAAA;AACpF,EAAA,OAAA,CAAQ,IAAI,sCAA+B,CAAA;AAC3C,EAAA,OAAA,CAAQ,IAAI,uLAA2C,CAAA;AACvD,EAAA,OAAA,CAAQ,IAAI,4JAAmD,CAAA;AACjE;AAEA,IAAM,aAAwC,GAAA;AAAA,EAC5C,MAAQ,EAAA,YAAA;AAAA,EACR,IAAM,EAAA,UAAA;AAAA,EACN,KAAO,EAAA,WAAA;AAAA,EACP,KAAO,EAAA,WAAA;AAAA,EACP,KAAO,EAAA,WAAA;AAAA,EACP,IAAM,EAAA,UAAA;AAAA,EACN,MAAQ,EAAA,YAAA;AAAA,EACR,KAAO,EAAA,WAAA;AAAA,EACP,SAAW,EAAA,eAAA;AAAA,EACX,MAAQ,EAAA;AACV,CAAA;AAEA,IAAM,SAA8D,GAAA;AAAA,EAClE,gBAAA,EAAkB,EAAE,IAAM,EAAA,wBAAA,EAA0B,MAAM,CAAC,MAAA,EAAQ,QAAU,EAAA,OAAO,CAAE,EAAA;AAAA,EACtF,kBAAA,EAAoB,EAAE,IAAA,EAAM,0BAA4B,EAAA,IAAA,EAAM,CAAC,MAAQ,EAAA,OAAA,EAAS,QAAU,EAAA,OAAO,CAAE,EAAA;AAAA,EACnG,eAAA,EAAiB,EAAE,IAAM,EAAA,sBAAA,EAAwB,MAAM,CAAC,MAAA,EAAQ,QAAU,EAAA,OAAO,CAAE,EAAA;AAAA,EACnF,WAAA,EAAa,EAAE,IAAA,EAAM,mBAAqB,EAAA,IAAA,EAAM,CAAC,MAAQ,EAAA,OAAA,EAAS,QAAU,EAAA,OAAO,CAAE,EAAA;AAAA,EACrF,oBAAA,EAAsB,EAAE,IAAM,EAAA,yBAAA,EAA2B,MAAM,CAAC,MAAA,EAAQ,QAAU,EAAA,OAAO,CAAE,EAAA;AAAA,EAC3F,cAAA,EAAgB,EAAE,IAAM,EAAA,sBAAA,EAAwB,MAAM,CAAC,MAAA,EAAQ,OAAO,CAAE,EAAA;AAAA,EACxE,eAAA,EAAiB,EAAE,IAAM,EAAA,uBAAA,EAAyB,MAAM,CAAC,MAAA,EAAQ,QAAU,EAAA,OAAO,CAAE;AACtF,CAAA;AAEA,SAAS,UAAU,IAAe,EAAA;AAChC,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IAAA,OAAA,CAAQ,MAAM,8EAAyE,CAAA;AACvF,IAAW,UAAA,EAAA;AACX,IAAA;AAAA;AAGF,EAAM,MAAA,GAAA,GAAM,QAAQ,GAAI,EAAA;AACxB,EAAA,MAAM,UAAa,GAAA,IAAA,CAAK,WAAY,EAAA,CAAE,IAAK,EAAA;AAG3C,EAAI,IAAA,aAAA,CAAc,UAAU,CAAG,EAAA;AAC7B,IAAM,MAAA,QAAA,GAAW,cAAc,UAAU,CAAA;AACzC,IAAA,MAAM,MAAMA,sBAAK,CAAA,IAAA,CAAK,QAAU,EAAA,YAAA,EAAc,MAAM,QAAQ,CAAA;AAC5D,IAAA,MAAM,OAAOA,sBAAK,CAAA,IAAA,CAAK,GAAK,EAAA,YAAA,EAAc,MAAM,QAAQ,CAAA;AACxD,IAAIE,IAAAA,oBAAAA,CAAG,UAAW,CAAA,GAAG,CAAG,EAAA;AACtB,MAAA,YAAA,CAAa,GAAK,EAAA,IAAA,EAAM,CAAc,WAAA,EAAA,QAAQ,CAAG,CAAA,CAAA,CAAA;AACjD,MAAA,OAAA,CAAQ,GAAI,CAAA;AAAA,aAAa,EAAA,UAAU,+BAA+B,QAAQ;AAAA,CAAI,CAAA;AAAA,KACzE,MAAA;AACL,MAAA,OAAA,CAAQ,KAAM,CAAA;AAAA,wCAAA,EAAwC,GAAG;AAAA,CAAI,CAAA;AAAA;AAE/D,IAAA;AAAA;AAIF,EAAI,IAAA,SAAA,CAAU,UAAU,CAAG,EAAA;AACzB,IAAA,MAAM,EAAE,IAAA,EAAM,IAAK,EAAA,GAAI,UAAU,UAAU,CAAA;AAC3C,IAAA,OAAA,CAAQ,GAAI,CAAA;AAAA,wBAAA,EAAsB,UAAU,CAAA;AAAA,CAAqC,CAAA;AAGjF,IAAK,IAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACpB,MAAM,MAAA,OAAA,GAAU,cAAc,GAAG,CAAA;AACjC,MAAA,IAAI,OAAS,EAAA;AACX,QAAA,MAAM,SAASF,sBAAK,CAAA,IAAA,CAAK,QAAU,EAAA,YAAA,EAAc,MAAM,OAAO,CAAA;AAC9D,QAAA,MAAM,UAAUA,sBAAK,CAAA,IAAA,CAAK,GAAK,EAAA,YAAA,EAAc,MAAM,OAAO,CAAA;AAC1D,QAAIE,IAAAA,oBAAAA,CAAG,UAAW,CAAA,MAAM,CAAG,EAAA;AACzB,UAAA,YAAA,CAAa,MAAQ,EAAA,OAAA,EAAS,CAAwB,qBAAA,EAAA,OAAO,CAAG,CAAA,CAAA,CAAA;AAAA;AAClE;AACF,KACD,CAAA;AAGD,IAAA,MAAM,WAAWF,sBAAK,CAAA,IAAA,CAAK,QAAU,EAAA,YAAA,EAAc,UAAU,IAAI,CAAA;AACjE,IAAA,MAAM,YAAYA,sBAAK,CAAA,IAAA,CAAK,GAAK,EAAA,YAAA,EAAc,UAAU,IAAI,CAAA;AAC7D,IAAIE,IAAAA,oBAAAA,CAAG,UAAW,CAAA,QAAQ,CAAG,EAAA;AAC3B,MAAA,YAAA,CAAa,QAAU,EAAA,SAAA,EAAW,CAAU,OAAA,EAAA,IAAI,CAAG,CAAA,CAAA,CAAA;AACnD,MAAA,OAAA,CAAQ,GAAI,CAAA;AAAA,cAAc,EAAA,UAAU,6CAA6C,IAAI;AAAA,CAAI,CAAA;AAAA,KACpF,MAAA;AACL,MAAA,OAAA,CAAQ,KAAM,CAAA;AAAA,oCAAA,EAAoC,QAAQ;AAAA,CAAI,CAAA;AAAA;AAEhE,IAAA;AAAA;AAGF,EAAA,OAAA,CAAQ,KAAM,CAAA;AAAA,sBAAA,EAAsB,IAAI,CAAI,EAAA,CAAA,CAAA;AAC5C,EAAW,UAAA,EAAA;AACb;AAEA,SAAS,UAAa,GAAA;AACpB,EAAA,OAAA,CAAQ,GAAI,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,CAsBb,CAAA;AACD;AAEA,SAAS,iBAAoB,GAAA;AAC3B,EAAM,MAAA,GAAA,GAAM,QAAQ,GAAI,EAAA;AACxB,EAAA,MAAM,aAAgBF,GAAAA,sBAAAA,CAAK,IAAK,CAAA,GAAA,EAAK,UAAU,YAAY,CAAA;AAC3D,EAAA,MAAM,OAAUA,GAAAA,sBAAAA,CAAK,IAAK,CAAA,GAAA,EAAK,OAAO,aAAa,CAAA;AAEnD,EAAA,IAAI,CAACE,oBAAAA,CAAG,UAAW,CAAA,aAAa,CAAG,EAAA;AACjC,IAAA,OAAA,CAAQ,KAAM,CAAA;AAAA,sCAAA,EAAsC,aAAa,CAAA;AAAA,CAAsC,CAAA;AACvG,IAAA;AAAA;AAGF,EAAI,IAAA;AACF,IAAA,MAAM,SAAS,IAAK,CAAA,KAAA,CAAMA,qBAAG,YAAa,CAAA,aAAA,EAAe,OAAO,CAAC,CAAA;AACjE,IAAM,MAAA,GAAA,GAAM,mBAAmB,MAAM,CAAA;AACrC,IAAM,MAAA,MAAA,GAASF,sBAAK,CAAA,OAAA,CAAQ,OAAO,CAAA;AACnC,IAAA,IAAI,CAACE,oBAAAA,CAAG,UAAW,CAAA,MAAM,CAAG,EAAAA,oBAAG,CAAA,SAAA,CAAU,MAAQ,EAAA,EAAE,SAAW,EAAA,IAAA,EAAM,CAAA;AACpE,IAAAA,oBAAG,CAAA,aAAA,CAAc,OAAS,EAAA,GAAA,EAAK,OAAO,CAAA;AACtC,IAAA,OAAA,CAAQ,GAAI,CAAA;AAAA,uCAAA,EAAuCF,sBAAK,CAAA,QAAA,CAAS,GAAK,EAAA,OAAO,CAAC,CAAA;AAAA,CAAK,CAAA;AAAA,WAC5E,GAAU,EAAA;AACjB,IAAA,OAAA,CAAQ,KAAM,CAAA;AAAA,iCAAA,EAAiC,IAAI,OAAO;AAAA,CAAI,CAAA;AAAA;AAElE;AAEA,SAAS,YAAe,GAAA;AACtB,EAAM,MAAA,OAAA,GAAU,KAAK,IAAK,CAAA,CAAC,MAAM,CAAE,CAAA,UAAA,CAAW,SAAS,CAAC,CAAA;AACxD,EAAM,MAAA,IAAA,GAAO,OAAU,GAAA,QAAA,CAAS,OAAQ,CAAA,KAAA,CAAM,GAAG,CAAE,CAAA,CAAC,CAAG,EAAA,EAAE,CAAI,GAAA,GAAA;AAC7D,EAAA,qBAAA,CAAsB,EAAE,IAAM,EAAA,GAAA,EAAK,OAAQ,CAAA,GAAA,IAAO,CAAA;AACpD;AAEA,SAAS,QAAW,GAAA;AAClB,EAAA,OAAA,CAAQ,GAAI,CAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,CAiBb,CAAA;AACD;AAEA,SAAS,WAAc,GAAA;AACrB,EAAA,MAAM,OAAUA,GAAAA,sBAAAA,CAAK,IAAK,CAAA,QAAA,EAAU,cAAc,CAAA;AAClD,EAAIE,IAAAA,oBAAAA,CAAG,UAAW,CAAA,OAAO,CAAG,EAAA;AAC1B,IAAA,MAAM,MAAM,IAAK,CAAA,KAAA,CAAMA,qBAAG,YAAa,CAAA,OAAA,EAAS,OAAO,CAAC,CAAA;AACxD,IAAA,OAAA,CAAQ,GAAI,CAAA,CAAA,YAAA,EAAe,GAAI,CAAA,OAAO,CAAE,CAAA,CAAA;AAAA,GACnC,MAAA;AACL,IAAA,OAAA,CAAQ,IAAI,mBAAmB,CAAA;AAAA;AAEnC;AAEA,QAAQ,OAAS;AAAA,EACf,KAAK,MAAA;AACH,IAAW,UAAA,EAAA;AACX,IAAA;AAAA,EACF,KAAK,QAAA;AAAA,EACL,KAAK,QAAA;AACH,IAAa,YAAA,EAAA;AACb,IAAA;AAAA,EACF,KAAK,cAAA;AAAA,EACL,KAAK,SAAA;AACH,IAAkB,iBAAA,EAAA;AAClB,IAAA;AAAA,EACF,KAAK,KAAA;AACH,IAAA,SAAA,CAAU,UAAU,CAAA;AACpB,IAAA;AAAA,EACF,KAAK,MAAA;AACH,IAAW,UAAA,EAAA;AACX,IAAA;AAAA,EACF,KAAK,SAAA;AAAA,EACL,KAAK,IAAA;AAAA,EACL,KAAK,WAAA;AACH,IAAY,WAAA,EAAA;AACZ,IAAA;AAAA,EACF,KAAK,MAAA;AAAA,EACL,KAAK,IAAA;AAAA,EACL,KAAK,QAAA;AAAA,EACL;AACE,IAAS,QAAA,EAAA;AACT,IAAA;AACJ","file":"cli.cjs","sourcesContent":["/**\n * W3C DTCG Token JSON -> CSS Custom Properties 변환 유틸리티\n */\nexport function compileTokensToCss(tokenJson: Record<string, any>): string {\n const cssVars: string[] = [];\n\n function traverse(obj: any) {\n if (!obj || typeof obj !== 'object') return;\n\n if (obj.variable && obj.$value !== undefined) {\n cssVars.push(` ${obj.variable}: ${obj.$value};`);\n return;\n }\n\n for (const key of Object.keys(obj)) {\n if (key.startsWith('$')) continue;\n traverse(obj[key]);\n }\n }\n\n traverse(tokenJson);\n\n return `:root {\\n${cssVars.join('\\n')}\\n}\\n`;\n}\n","import http from 'http';\nimport fs from 'fs';\nimport path from 'path';\nimport { compileTokensToCss } from './tokenCompiler';\n\nexport function startLocalTokenStudio(options: { port?: number; cwd?: string } = {}) {\n const port = options.port || 4000;\n const cwd = options.cwd || process.cwd();\n\n // Find token files\n const tokenJsonPath = path.join(cwd, 'tokens', 'token.json');\n const cssPath = path.join(cwd, 'css', 'atom-ui.css');\n const designMdPath = path.join(cwd, 'atom.design.md');\n\n const server = http.createServer((req, res) => {\n // CORS headers for local usage\n res.setHeader('Access-Control-Allow-Origin', '*');\n res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type');\n\n if (req.method === 'OPTIONS') {\n res.writeHead(200);\n res.end();\n return;\n }\n\n const url = new URL(req.url || '/', `http://localhost:${port}`);\n\n // API: GET tokens\n if (url.pathname === '/api/tokens' && req.method === 'GET') {\n let data: any = {};\n if (fs.existsSync(tokenJsonPath)) {\n try {\n data = JSON.parse(fs.readFileSync(tokenJsonPath, 'utf-8'));\n } catch (e) {\n data = { error: 'Failed to parse tokens/token.json' };\n }\n }\n res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });\n res.end(JSON.stringify(data));\n return;\n }\n\n // API: POST update tokens\n if (url.pathname === '/api/tokens' && req.method === 'POST') {\n let body = '';\n req.on('data', (chunk) => {\n body += chunk;\n });\n req.on('end', () => {\n try {\n const newTokens = JSON.parse(body);\n\n // 1. Save tokens/token.json\n const tokensDir = path.dirname(tokenJsonPath);\n if (!fs.existsSync(tokensDir)) fs.mkdirSync(tokensDir, { recursive: true });\n fs.writeFileSync(tokenJsonPath, JSON.stringify(newTokens, null, 2), 'utf-8');\n\n // 2. Compile and save to css/atom-ui.css\n const compiledCss = compileTokensToCss(newTokens);\n const cssDir = path.dirname(cssPath);\n if (!fs.existsSync(cssDir)) fs.mkdirSync(cssDir, { recursive: true });\n fs.writeFileSync(cssPath, compiledCss, 'utf-8');\n\n res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });\n res.end(JSON.stringify({ success: true, message: 'Tokens and CSS compiled successfully!' }));\n } catch (err: any) {\n res.writeHead(400, { 'Content-Type': 'application/json; charset=utf-8' });\n res.end(JSON.stringify({ success: false, error: err.message }));\n }\n });\n return;\n }\n\n // Serve Local Token Studio Web UI\n if (url.pathname === '/' || url.pathname === '/index.html') {\n res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });\n res.end(getStudioHtml());\n return;\n }\n\n res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });\n res.end('Not Found');\n });\n\n server.listen(port, () => {\n console.log(`\\n🎨 AtomSystem Local Token Studio running at:`);\n console.log(` 👉 http://localhost:${port}\\n`);\n console.log(` Tokens file: ${path.relative(cwd, tokenJsonPath)}`);\n console.log(` Compiled CSS: ${path.relative(cwd, cssPath)}`);\n console.log(`\\nPress Ctrl+C to stop the studio server.\\n`);\n });\n\n return server;\n}\n\nfunction getStudioHtml(): string {\n return `<!DOCTYPE html>\n<html lang=\"ko\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>AtomSystem Local Token Studio</title>\n <style>\n :root {\n --bg: #0a0a0a;\n --card-bg: #141414;\n --border: #262626;\n --text: #ededed;\n --muted: #888888;\n --accent: #3182f6;\n --radius: 8px;\n }\n * { box-sizing: border-box; margin: 0; padding: 0; }\n body {\n background: var(--bg);\n color: var(--text);\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Pretendard, sans-serif;\n padding: 32px 20px;\n line-height: 1.5;\n }\n .container { max-width: 1100px; margin: 0 auto; }\n header {\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n padding-bottom: 24px;\n border-bottom: 1px solid var(--border);\n margin-bottom: 32px;\n }\n h1 { font-size: 24px; font-weight: 700; letter-spacing: -0.02em; }\n p.desc { font-size: 13px; color: var(--muted); margin-top: 4px; }\n .badge {\n font-size: 11px;\n font-family: monospace;\n padding: 3px 8px;\n background: #1a1a1a;\n border: 1px solid var(--border);\n border-radius: 4px;\n color: var(--muted);\n }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }\n @media (max-width: 860px) { .grid { grid-template-columns: 1fr; } }\n .card {\n background: var(--card-bg);\n border: 1px solid var(--border);\n border-radius: var(--radius);\n padding: 20px;\n }\n h2 { font-size: 15px; font-weight: 600; margin-bottom: 16px; display: flex; align-items: center; justify-content: space-between; }\n .field { margin-bottom: 16px; }\n label { display: block; font-size: 12px; font-weight: 500; margin-bottom: 6px; color: var(--text); }\n .meta { font-size: 11px; color: var(--muted); font-family: monospace; margin-top: 4px; }\n .input-row { display: flex; gap: 8px; align-items: center; }\n input[type=\"text\"], select {\n flex: 1;\n background: #1e1e1e;\n border: 1px solid var(--border);\n color: var(--text);\n padding: 8px 12px;\n font-size: 13px;\n border-radius: 6px;\n outline: none;\n }\n input[type=\"color\"] {\n -webkit-appearance: none;\n border: 1px solid var(--border);\n width: 38px;\n height: 38px;\n border-radius: 6px;\n background: none;\n cursor: pointer;\n padding: 2px;\n }\n .btn-save {\n background: var(--text);\n color: var(--bg);\n border: none;\n padding: 10px 20px;\n font-size: 13px;\n font-weight: 600;\n border-radius: 6px;\n cursor: pointer;\n transition: opacity 0.2s;\n }\n .btn-save:hover { opacity: 0.9; }\n .preview-box {\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 20px;\n background: #0f0f0f;\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n .preview-btn {\n padding: 10px 18px;\n border-radius: var(--sample-radius, 8px);\n background: var(--sample-primary, #3182f6);\n color: #ffffff;\n border: none;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n }\n .preview-card {\n padding: 16px;\n border-radius: var(--sample-radius, 8px);\n background: var(--sample-surface, #18181b);\n border: 1px solid var(--border);\n color: var(--text);\n font-size: 13px;\n }\n .toast {\n position: fixed;\n bottom: 24px;\n right: 24px;\n background: #10b981;\n color: #000;\n padding: 10px 18px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 600;\n box-shadow: 0 4px 12px rgba(0,0,0,0.5);\n display: none;\n }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <header>\n <div>\n <div class=\"badge\" style=\"margin-bottom: 8px; display: inline-block;\">W3C DTCG Zero-Runtime</div>\n <h1>AtomSystem Local Token Studio</h1>\n <p class=\"desc\">로컬 환경(tokens/token.json)의 토큰을 GUI로 직접 수정하고 실시간으로 css/atom-ui.css로 재컴파일합니다.</p>\n </div>\n <button class=\"btn-save\" onclick=\"saveTokens()\">저장 및 CSS 재컴파일</button>\n </header>\n\n <div class=\"grid\">\n <!-- 1. Color Tokens -->\n <div class=\"card\">\n <h2>🎨 시맨틱 브랜드 & 서피스 토큰</h2>\n \n <div class=\"field\">\n <label>브랜드 대표 색상 (Primary Color)</label>\n <div class=\"input-row\">\n <input type=\"color\" id=\"picker-primary\" oninput=\"onColorChange('primary', this.value)\">\n <input type=\"text\" id=\"val-primary\" oninput=\"onColorChange('primary', this.value)\">\n </div>\n <div class=\"meta\">var(--atom-color-primary)</div>\n </div>\n\n <div class=\"field\">\n <label>호버 상태 색상 (Primary Hover)</label>\n <div class=\"input-row\">\n <input type=\"color\" id=\"picker-primary-hover\" oninput=\"onColorChange('primary-hover', this.value)\">\n <input type=\"text\" id=\"val-primary-hover\" oninput=\"onColorChange('primary-hover', this.value)\">\n </div>\n <div class=\"meta\">var(--atom-color-primary-hover)</div>\n </div>\n\n <div class=\"field\">\n <label>서피스 배경 (Surface Background)</label>\n <div class=\"input-row\">\n <input type=\"color\" id=\"picker-bg-surface\" oninput=\"onColorChange('bg-surface', this.value)\">\n <input type=\"text\" id=\"val-bg-surface\" oninput=\"onColorChange('bg-surface', this.value)\">\n </div>\n <div class=\"meta\">var(--atom-bg-surface)</div>\n </div>\n\n <div class=\"field\">\n <label>기본 모서리 곡률 (Border Radius)</label>\n <select id=\"val-radius\" onchange=\"onRadiusChange(this.value)\">\n <option value=\"4px\">4px (Sharp Minimal)</option>\n <option value=\"6px\">6px (Swiss Modern)</option>\n <option value=\"8px\">8px (Standard Clean)</option>\n <option value=\"12px\">12px (Rounded Friendly)</option>\n <option value=\"16px\">16px (Toss Soft)</option>\n </select>\n <div class=\"meta\">var(--atom-radius-md)</div>\n </div>\n </div>\n\n <!-- 2. Live Previewer -->\n <div class=\"card\">\n <h2>⚡ 실시간 토큰 반영 프리뷰</h2>\n <div class=\"preview-box\" id=\"preview-box\">\n <div class=\"preview-card\" id=\"sample-card\">\n <div style=\"font-weight: 600; margin-bottom: 4px;\">대시보드 위젯 컴포넌트</div>\n <div style=\"color: var(--muted); font-size: 12px; margin-bottom: 14px;\">\n 토큰 변경 시 실시간으로 디자인이 반영되며 즉시 CSS 파일에 동기화됩니다.\n </div>\n <button class=\"preview-btn\" id=\"sample-btn\">확인 및 승인</button>\n </div>\n\n <div style=\"font-size: 11px; font-family: monospace; color: var(--muted); background: #161616; padding: 12px; border-radius: 6px; border: 1px solid var(--border);\">\n <div>// 컴파일 대상 파일</div>\n <div style=\"color: #60a5fa; margin-top: 4px;\">tokens/token.json (W3C DTCG)</div>\n <div style=\"color: #34d399; margin-top: 2px;\">css/atom-ui.css (0KB Pure CSS)</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div id=\"toast\" class=\"toast\">✓ 토큰 및 CSS가 성공적으로 재컴파일되었습니다!</div>\n\n <script>\n let currentTokens = {};\n\n async function loadTokens() {\n try {\n const res = await fetch('/api/tokens');\n currentTokens = await res.json();\n populateFields();\n updatePreview();\n } catch (e) {\n console.error('Failed to fetch tokens', e);\n }\n }\n\n function populateFields() {\n const primary = currentTokens?.color?.brand?.['color-primary']?.$value || '#3182f6';\n const hover = currentTokens?.color?.brand?.['color-primary-hover']?.$value || '#1b64da';\n const surface = currentTokens?.color?.surface?.['bg-surface']?.$value || '#18181b';\n const radius = currentTokens?.borderRadius?.md?.$value || '8px';\n\n document.getElementById('picker-primary').value = primary.startsWith('#') ? primary : '#3182f6';\n document.getElementById('val-primary').value = primary;\n\n document.getElementById('picker-primary-hover').value = hover.startsWith('#') ? hover : '#1b64da';\n document.getElementById('val-primary-hover').value = hover;\n\n document.getElementById('picker-bg-surface').value = surface.startsWith('#') ? surface : '#18181b';\n document.getElementById('val-bg-surface').value = surface;\n\n document.getElementById('val-radius').value = radius;\n }\n\n function onColorChange(key, val) {\n if (!currentTokens.color) currentTokens.color = {};\n if (key === 'primary') {\n document.getElementById('picker-primary').value = val.startsWith('#') ? val : '#3182f6';\n document.getElementById('val-primary').value = val;\n if (!currentTokens.color.brand) currentTokens.color.brand = {};\n if (!currentTokens.color.brand['color-primary']) currentTokens.color.brand['color-primary'] = { variable: '--atom-color-primary' };\n currentTokens.color.brand['color-primary'].$value = val;\n }\n if (key === 'primary-hover') {\n document.getElementById('picker-primary-hover').value = val.startsWith('#') ? val : '#1b64da';\n document.getElementById('val-primary-hover').value = val;\n if (!currentTokens.color.brand) currentTokens.color.brand = {};\n if (!currentTokens.color.brand['color-primary-hover']) currentTokens.color.brand['color-primary-hover'] = { variable: '--atom-color-primary-hover' };\n currentTokens.color.brand['color-primary-hover'].$value = val;\n }\n if (key === 'bg-surface') {\n document.getElementById('picker-bg-surface').value = val.startsWith('#') ? val : '#18181b';\n document.getElementById('val-bg-surface').value = val;\n if (!currentTokens.color.surface) currentTokens.color.surface = {};\n if (!currentTokens.color.surface['bg-surface']) currentTokens.color.surface['bg-surface'] = { variable: '--atom-bg-surface' };\n currentTokens.color.surface['bg-surface'].$value = val;\n }\n updatePreview();\n }\n\n function onRadiusChange(val) {\n if (!currentTokens.borderRadius) currentTokens.borderRadius = {};\n if (!currentTokens.borderRadius.md) currentTokens.borderRadius.md = { variable: '--atom-radius-md' };\n currentTokens.borderRadius.md.$value = val;\n updatePreview();\n }\n\n function updatePreview() {\n const primary = document.getElementById('val-primary').value;\n const surface = document.getElementById('val-bg-surface').value;\n const radius = document.getElementById('val-radius').value;\n\n const btn = document.getElementById('sample-btn');\n const card = document.getElementById('sample-card');\n\n btn.style.backgroundColor = primary;\n btn.style.borderRadius = radius;\n card.style.backgroundColor = surface;\n card.style.borderRadius = radius;\n }\n\n async function saveTokens() {\n try {\n const res = await fetch('/api/tokens', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(currentTokens)\n });\n const result = await res.json();\n if (result.success) {\n showToast();\n } else {\n alert('저장 실패: ' + result.error);\n }\n } catch (e) {\n alert('서버 통신 오류: ' + e.message);\n }\n }\n\n function showToast() {\n const toast = document.getElementById('toast');\n toast.style.display = 'block';\n setTimeout(() => { toast.style.display = 'none'; }, 2500);\n }\n\n loadTokens();\n </script>\n</body>\n</html>`;\n}\n","#!/usr/bin/env node\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { startLocalTokenStudio } from './studioServer';\nimport { compileTokensToCss } from './tokenCompiler';\n\nfunction getPkgRoot(): string {\n try {\n if (typeof __dirname !== 'undefined') {\n return path.resolve(__dirname, '..');\n }\n const currentFile = fileURLToPath(import.meta.url);\n return path.resolve(path.dirname(currentFile), '..');\n } catch {\n return process.cwd();\n }\n}\n\nconst PKG_ROOT = getPkgRoot();\nconst args = process.argv.slice(2);\nconst command = args[0] || 'help';\nconst targetName = args[1];\n\nfunction copyFileSafe(src: string, dest: string, label: string) {\n const targetDir = path.dirname(dest);\n if (!fs.existsSync(targetDir)) {\n fs.mkdirSync(targetDir, { recursive: true });\n }\n fs.copyFileSync(src, dest);\n console.log(` ✓ ${label} -> ${path.relative(process.cwd(), dest)}`);\n}\n\nfunction handleInit() {\n const cwd = process.cwd();\n console.log('\\n🚀 Initializing AtomSystem Universal Design System...\\n');\n\n // 1. AI Assistant Master Guidelines (Multi-agent SSOT)\n const srcAgentGuide = path.join(PKG_ROOT, 'presets', 'agents.guide.md');\n if (fs.existsSync(srcAgentGuide)) {\n // AGENTS.md (Universal)\n copyFileSafe(srcAgentGuide, path.join(cwd, 'AGENTS.md'), 'Universal AI Guide (AGENTS.md)');\n // CLAUDE.md (Claude Code)\n copyFileSafe(srcAgentGuide, path.join(cwd, 'CLAUDE.md'), 'Claude Code Guidelines (CLAUDE.md)');\n // .cursorrules (Cursor IDE)\n copyFileSafe(srcAgentGuide, path.join(cwd, '.cursorrules'), 'Cursor Rules (.cursorrules)');\n }\n\n // 2. Install AI Agent Skill\n const srcSkill = path.join(PKG_ROOT, 'skills', 'atomsystem.skill.md');\n if (fs.existsSync(srcSkill)) {\n copyFileSafe(srcSkill, path.join(cwd, '.agents', 'skills', 'atomsystem', 'SKILL.md'), 'Agent Skill (.agents/skills/atomsystem/SKILL.md)');\n }\n\n // 3. Install 4-Tier Specifications\n const specs = [\n { src: path.join(PKG_ROOT, 'presets', 'default.design.md'), dest: path.join(cwd, 'atom.design.md'), label: 'Design Tokens (atom.design.md)' },\n { src: path.join(PKG_ROOT, 'presets', 'components.md'), dest: path.join(cwd, 'atom.components.md'), label: 'Components Spec (atom.components.md)' },\n { src: path.join(PKG_ROOT, 'presets', 'blocks.md'), dest: path.join(cwd, 'atom.blocks.md'), label: 'Design Blocks Spec (atom.blocks.md)' },\n { src: path.join(PKG_ROOT, 'presets', 'uxPattern.md'), dest: path.join(cwd, 'atom.uxPattern.md'), label: 'UX Patterns (atom.uxPattern.md)' },\n ];\n\n specs.forEach((s) => {\n if (fs.existsSync(s.src)) {\n copyFileSafe(s.src, s.dest, s.label);\n }\n });\n\n // 4. Install Token JSON & Zero-Runtime CSS\n const srcToken = path.join(PKG_ROOT, 'tokens', 'token.json');\n if (fs.existsSync(srcToken)) {\n copyFileSafe(srcToken, path.join(cwd, 'tokens', 'token.json'), 'W3C DTCG Token JSON (tokens/token.json)');\n }\n\n const srcCss = path.join(PKG_ROOT, 'css', 'atom-ui.css');\n if (fs.existsSync(srcCss)) {\n copyFileSafe(srcCss, path.join(cwd, 'css', 'atom-ui.css'), 'Zero-Runtime Semantic CSS (css/atom-ui.css)');\n }\n\n console.log('\\n✨ AtomSystem initialization completed successfully!');\n console.log('\\n🎨 Local Token Studio Available:');\n console.log(' Run \"npx atomsystem studio\" to launch the local web customizer GUI.');\n console.log(' You can visually edit tokens and immediately recompile css/atom-ui.css.');\n console.log('\\n📌 How AI Coding Works Now:');\n console.log(' Any AI assistant (Claude Code, Cursor, Copilot, Antigravity) will now');\n console.log(' AUTOMATICALLY detect the design tokens, components, and UX patterns.');\n console.log('\\n📌 You can now ask your AI:');\n console.log(' \"대시보드 화면에 실시간 차트와 가격 정책 블록을 레고처럼 조립해줘.\"');\n console.log(' \"atom.design.md의 색상 토큰을 바탕으로 결제 확인 모달을 만들어줘.\"\\n');\n}\n\nconst COMPONENT_MAP: Record<string, string> = {\n button: 'Button.tsx',\n card: 'Card.tsx',\n badge: 'Badge.tsx',\n input: 'Input.tsx',\n table: 'Table.tsx',\n tabs: 'Tabs.tsx',\n switch: 'Switch.tsx',\n modal: 'Modal.tsx',\n container: 'Container.tsx',\n layout: 'Layout.tsx',\n};\n\nconst BLOCK_MAP: Record<string, { file: string; deps: string[] }> = {\n 'realtime-chart': { file: 'RealtimeChartBlock.tsx', deps: ['card', 'button', 'badge'] },\n 'interactive-chat': { file: 'InteractiveChatBlock.tsx', deps: ['card', 'input', 'button', 'badge'] },\n 'pricing-table': { file: 'PricingPlanBlock.tsx', deps: ['card', 'button', 'badge'] },\n 'card-list': { file: 'CardListBlock.tsx', deps: ['card', 'input', 'button', 'badge'] },\n 'interactive-slider': { file: 'SliderShowcaseBlock.tsx', deps: ['card', 'button', 'badge'] },\n 'metric-stats': { file: 'MetricStatsBlock.tsx', deps: ['card', 'badge'] },\n 'file-explorer': { file: 'FileExplorerBlock.tsx', deps: ['card', 'button', 'badge'] },\n};\n\nfunction handleAdd(name?: string) {\n if (!name) {\n console.error('\\n❌ Please specify an item to add. Example: npx atomsystem add button\\n');\n handleList();\n return;\n }\n\n const cwd = process.cwd();\n const normalized = name.toLowerCase().trim();\n\n // 1. Check if it's a component\n if (COMPONENT_MAP[normalized]) {\n const fileName = COMPONENT_MAP[normalized];\n const src = path.join(PKG_ROOT, 'components', 'ui', fileName);\n const dest = path.join(cwd, 'components', 'ui', fileName);\n if (fs.existsSync(src)) {\n copyFileSafe(src, dest, `Component (${fileName})`);\n console.log(`\\n✅ Added ${normalized} component to components/ui/${fileName}\\n`);\n } else {\n console.error(`\\n❌ Source component file not found: ${src}\\n`);\n }\n return;\n }\n\n // 2. Check if it's a block\n if (BLOCK_MAP[normalized]) {\n const { file, deps } = BLOCK_MAP[normalized];\n console.log(`\\n📦 Adding block \"${normalized}\" and its dependent components...\\n`);\n\n // Copy dependencies first (Component-First rule)\n deps.forEach((dep) => {\n const depFile = COMPONENT_MAP[dep];\n if (depFile) {\n const srcDep = path.join(PKG_ROOT, 'components', 'ui', depFile);\n const destDep = path.join(cwd, 'components', 'ui', depFile);\n if (fs.existsSync(srcDep)) {\n copyFileSafe(srcDep, destDep, `Dependent Component (${depFile})`);\n }\n }\n });\n\n // Copy block file\n const srcBlock = path.join(PKG_ROOT, 'components', 'blocks', file);\n const destBlock = path.join(cwd, 'components', 'blocks', file);\n if (fs.existsSync(srcBlock)) {\n copyFileSafe(srcBlock, destBlock, `Block (${file})`);\n console.log(`\\n✅ Block \"${normalized}\" successfully added to components/blocks/${file}\\n`);\n } else {\n console.error(`\\n❌ Source block file not found: ${srcBlock}\\n`);\n }\n return;\n }\n\n console.error(`\\n❌ Unknown item: \"${name}\".`);\n handleList();\n}\n\nfunction handleList() {\n console.log(`\nAvailable Components:\n - button (Button, ButtonVariants)\n - card (Card container)\n - badge (Status badge)\n - input (Input with status)\n - table (Table, Header, Row, Cell)\n - tabs (TabsList, TabsTrigger)\n - switch (A11y Switch toggle)\n - modal (Dialog with Esc key support)\n\nAvailable Design Blocks:\n - realtime-chart (Live streaming candlestick/line chart)\n - interactive-chat (AI chatbot feed with suggestions)\n - pricing-table (Monthly/annual tier pricing table)\n - card-list (Responsive grid & list filter)\n - interactive-slider (Cost simulation calculator & carousel)\n - metric-stats (4 KPI executive metric cards)\n - file-explorer (Hierarchical directory tree explorer)\n\nInstall any item:\n npx atomsystem add <item-name>\n`);\n}\n\nfunction handleBuildTokens() {\n const cwd = process.cwd();\n const tokenJsonPath = path.join(cwd, 'tokens', 'token.json');\n const cssPath = path.join(cwd, 'css', 'atom-ui.css');\n\n if (!fs.existsSync(tokenJsonPath)) {\n console.error(`\\n❌ tokens/token.json not found at ${tokenJsonPath}. Run 'npx atomsystem init' first.\\n`);\n return;\n }\n\n try {\n const tokens = JSON.parse(fs.readFileSync(tokenJsonPath, 'utf-8'));\n const css = compileTokensToCss(tokens);\n const cssDir = path.dirname(cssPath);\n if (!fs.existsSync(cssDir)) fs.mkdirSync(cssDir, { recursive: true });\n fs.writeFileSync(cssPath, css, 'utf-8');\n console.log(`\\n✨ Successfully compiled tokens to ${path.relative(cwd, cssPath)}!\\n`);\n } catch (err: any) {\n console.error(`\\n❌ Failed to compile tokens: ${err.message}\\n`);\n }\n}\n\nfunction handleStudio() {\n const portArg = args.find((a) => a.startsWith('--port='));\n const port = portArg ? parseInt(portArg.split('=')[1], 10) : 4000;\n startLocalTokenStudio({ port, cwd: process.cwd() });\n}\n\nfunction showHelp() {\n console.log(`\nAtomSystem CLI - Universal Design Token & Agentic UI System\n\nUsage:\n npx atomsystem <command> [options]\n\nCommands:\n init Initialize AI guidelines, tokens, specs, and CSS in your project\n studio Launch Local Web Token Studio GUI (interactive token customizer)\n build:tokens Compile tokens/token.json into zero-runtime css/atom-ui.css\n add <name> Add a component or block directly to your project\n list List all available components and blocks\n help Display this help message\n version Print version info\n\nOptions for studio:\n --port=<port> Port for the local studio server (default: 4000)\n`);\n}\n\nfunction showVersion() {\n const pkgPath = path.join(PKG_ROOT, 'package.json');\n if (fs.existsSync(pkgPath)) {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n console.log(`atomsystem v${pkg.version}`);\n } else {\n console.log('atomsystem v0.5.0');\n }\n}\n\nswitch (command) {\n case 'init':\n handleInit();\n break;\n case 'studio':\n case 'editor':\n handleStudio();\n break;\n case 'build:tokens':\n case 'compile':\n handleBuildTokens();\n break;\n case 'add':\n handleAdd(targetName);\n break;\n case 'list':\n handleList();\n break;\n case 'version':\n case '-v':\n case '--version':\n showVersion();\n break;\n case 'help':\n case '-h':\n case '--help':\n default:\n showHelp();\n break;\n}\n"]}
1
+ {"version":3,"sources":["../src/tokenCompiler.ts","../src/studioServer.ts","../src/cli.ts"],"names":["path","http","fs","fileURLToPath"],"mappings":"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","file":"cli.cjs","sourcesContent":["/**\n * W3C DTCG Token JSON -> CSS Custom Properties 변환 유틸리티\n */\nexport function compileTokensToCss(tokenJson: Record<string, any>): string {\n const cssVars: string[] = [];\n\n function traverse(obj: any) {\n if (!obj || typeof obj !== 'object') return;\n\n if (obj.variable && obj.$value !== undefined) {\n cssVars.push(` ${obj.variable}: ${obj.$value};`);\n return;\n }\n\n for (const key of Object.keys(obj)) {\n if (key.startsWith('$')) continue;\n traverse(obj[key]);\n }\n }\n\n traverse(tokenJson);\n\n return `:root {\\n${cssVars.join('\\n')}\\n}\\n`;\n}\n","import http from 'http';\nimport fs from 'fs';\nimport path from 'path';\nimport { compileTokensToCss } from './tokenCompiler';\n\nexport function startLocalTokenStudio(options: { port?: number; cwd?: string } = {}) {\n const port = options.port || 4000;\n const cwd = options.cwd || process.cwd();\n\n // Find token files\n const tokenJsonPath = path.join(cwd, 'tokens', 'token.json');\n const cssPath = path.join(cwd, 'css', 'atom-ui.css');\n const designMdPath = path.join(cwd, 'atom.design.md');\n\n const server = http.createServer((req, res) => {\n // CORS headers for local usage\n res.setHeader('Access-Control-Allow-Origin', '*');\n res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type');\n\n if (req.method === 'OPTIONS') {\n res.writeHead(200);\n res.end();\n return;\n }\n\n const url = new URL(req.url || '/', `http://localhost:${port}`);\n\n // API: GET tokens\n if (url.pathname === '/api/tokens' && req.method === 'GET') {\n let data: any = {};\n if (fs.existsSync(tokenJsonPath)) {\n try {\n data = JSON.parse(fs.readFileSync(tokenJsonPath, 'utf-8'));\n } catch (e) {\n data = { error: 'Failed to parse tokens/token.json' };\n }\n }\n res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });\n res.end(JSON.stringify(data));\n return;\n }\n\n // API: POST update tokens\n if (url.pathname === '/api/tokens' && req.method === 'POST') {\n let body = '';\n req.on('data', (chunk) => {\n body += chunk;\n });\n req.on('end', () => {\n try {\n const newTokens = JSON.parse(body);\n\n // 1. Save tokens/token.json\n const tokensDir = path.dirname(tokenJsonPath);\n if (!fs.existsSync(tokensDir)) fs.mkdirSync(tokensDir, { recursive: true });\n fs.writeFileSync(tokenJsonPath, JSON.stringify(newTokens, null, 2), 'utf-8');\n\n // 2. Compile and save to css/atom-ui.css\n const compiledCss = compileTokensToCss(newTokens);\n const cssDir = path.dirname(cssPath);\n if (!fs.existsSync(cssDir)) fs.mkdirSync(cssDir, { recursive: true });\n fs.writeFileSync(cssPath, compiledCss, 'utf-8');\n\n res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });\n res.end(JSON.stringify({ success: true, message: 'Tokens and CSS compiled successfully!' }));\n } catch (err: any) {\n res.writeHead(400, { 'Content-Type': 'application/json; charset=utf-8' });\n res.end(JSON.stringify({ success: false, error: err.message }));\n }\n });\n return;\n }\n\n // Serve Local Token Studio Web UI\n if (url.pathname === '/' || url.pathname === '/index.html') {\n res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });\n res.end(getStudioHtml());\n return;\n }\n\n res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });\n res.end('Not Found');\n });\n\n server.listen(port, () => {\n console.log(`\\n🎨 AtomSystem Local Token Studio running at:`);\n console.log(` 👉 http://localhost:${port}\\n`);\n console.log(` Tokens file: ${path.relative(cwd, tokenJsonPath)}`);\n console.log(` Compiled CSS: ${path.relative(cwd, cssPath)}`);\n console.log(`\\nPress Ctrl+C to stop the studio server.\\n`);\n });\n\n return server;\n}\n\nfunction getStudioHtml(): string {\n return `<!DOCTYPE html>\n<html lang=\"ko\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>AtomSystem Local Token Studio</title>\n <style>\n :root {\n --bg: #0a0a0a;\n --card-bg: #141414;\n --border: #262626;\n --text: #ededed;\n --muted: #888888;\n --accent: #3182f6;\n --radius: 8px;\n }\n * { box-sizing: border-box; margin: 0; padding: 0; }\n body {\n background: var(--bg);\n color: var(--text);\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Pretendard, sans-serif;\n padding: 32px 20px;\n line-height: 1.5;\n }\n .container { max-width: 1100px; margin: 0 auto; }\n header {\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n padding-bottom: 24px;\n border-bottom: 1px solid var(--border);\n margin-bottom: 32px;\n }\n h1 { font-size: 24px; font-weight: 700; letter-spacing: -0.02em; }\n p.desc { font-size: 13px; color: var(--muted); margin-top: 4px; }\n .badge {\n font-size: 11px;\n font-family: monospace;\n padding: 3px 8px;\n background: #1a1a1a;\n border: 1px solid var(--border);\n border-radius: 4px;\n color: var(--muted);\n }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }\n @media (max-width: 860px) { .grid { grid-template-columns: 1fr; } }\n .card {\n background: var(--card-bg);\n border: 1px solid var(--border);\n border-radius: var(--radius);\n padding: 20px;\n }\n h2 { font-size: 15px; font-weight: 600; margin-bottom: 16px; display: flex; align-items: center; justify-content: space-between; }\n .field { margin-bottom: 16px; }\n label { display: block; font-size: 12px; font-weight: 500; margin-bottom: 6px; color: var(--text); }\n .meta { font-size: 11px; color: var(--muted); font-family: monospace; margin-top: 4px; }\n .input-row { display: flex; gap: 8px; align-items: center; }\n input[type=\"text\"], select {\n flex: 1;\n background: #1e1e1e;\n border: 1px solid var(--border);\n color: var(--text);\n padding: 8px 12px;\n font-size: 13px;\n border-radius: 6px;\n outline: none;\n }\n input[type=\"color\"] {\n -webkit-appearance: none;\n border: 1px solid var(--border);\n width: 38px;\n height: 38px;\n border-radius: 6px;\n background: none;\n cursor: pointer;\n padding: 2px;\n }\n .btn-save {\n background: var(--text);\n color: var(--bg);\n border: none;\n padding: 10px 20px;\n font-size: 13px;\n font-weight: 600;\n border-radius: 6px;\n cursor: pointer;\n transition: opacity 0.2s;\n }\n .btn-save:hover { opacity: 0.9; }\n .preview-box {\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 20px;\n background: #0f0f0f;\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n .preview-btn {\n padding: 10px 18px;\n border-radius: var(--sample-radius, 8px);\n background: var(--sample-primary, #3182f6);\n color: #ffffff;\n border: none;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n }\n .preview-card {\n padding: 16px;\n border-radius: var(--sample-radius, 8px);\n background: var(--sample-surface, #18181b);\n border: 1px solid var(--border);\n color: var(--text);\n font-size: 13px;\n }\n .toast {\n position: fixed;\n bottom: 24px;\n right: 24px;\n background: #10b981;\n color: #000;\n padding: 10px 18px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 600;\n box-shadow: 0 4px 12px rgba(0,0,0,0.5);\n display: none;\n }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <header>\n <div>\n <div class=\"badge\" style=\"margin-bottom: 8px; display: inline-block;\">W3C DTCG Zero-Runtime</div>\n <h1>AtomSystem Local Token Studio</h1>\n <p class=\"desc\">로컬 환경(tokens/token.json)의 토큰을 GUI로 직접 수정하고 실시간으로 css/atom-ui.css로 재컴파일합니다.</p>\n </div>\n <button class=\"btn-save\" onclick=\"saveTokens()\">저장 및 CSS 재컴파일</button>\n </header>\n\n <div class=\"grid\">\n <!-- 1. Color Tokens -->\n <div class=\"card\">\n <h2>🎨 시맨틱 브랜드 & 서피스 토큰</h2>\n \n <div class=\"field\">\n <label>브랜드 대표 색상 (Primary Color)</label>\n <div class=\"input-row\">\n <input type=\"color\" id=\"picker-primary\" oninput=\"onColorChange('primary', this.value)\">\n <input type=\"text\" id=\"val-primary\" oninput=\"onColorChange('primary', this.value)\">\n </div>\n <div class=\"meta\">var(--atom-color-primary)</div>\n </div>\n\n <div class=\"field\">\n <label>호버 상태 색상 (Primary Hover)</label>\n <div class=\"input-row\">\n <input type=\"color\" id=\"picker-primary-hover\" oninput=\"onColorChange('primary-hover', this.value)\">\n <input type=\"text\" id=\"val-primary-hover\" oninput=\"onColorChange('primary-hover', this.value)\">\n </div>\n <div class=\"meta\">var(--atom-color-primary-hover)</div>\n </div>\n\n <div class=\"field\">\n <label>서피스 배경 (Surface Background)</label>\n <div class=\"input-row\">\n <input type=\"color\" id=\"picker-bg-surface\" oninput=\"onColorChange('bg-surface', this.value)\">\n <input type=\"text\" id=\"val-bg-surface\" oninput=\"onColorChange('bg-surface', this.value)\">\n </div>\n <div class=\"meta\">var(--atom-bg-surface)</div>\n </div>\n\n <div class=\"field\">\n <label>기본 모서리 곡률 (Border Radius)</label>\n <select id=\"val-radius\" onchange=\"onRadiusChange(this.value)\">\n <option value=\"4px\">4px (Sharp Minimal)</option>\n <option value=\"6px\">6px (Swiss Modern)</option>\n <option value=\"8px\">8px (Standard Clean)</option>\n <option value=\"12px\">12px (Rounded Friendly)</option>\n <option value=\"16px\">16px (Toss Soft)</option>\n </select>\n <div class=\"meta\">var(--atom-radius-md)</div>\n </div>\n </div>\n\n <!-- 2. Live Previewer -->\n <div class=\"card\">\n <h2>⚡ 실시간 토큰 반영 프리뷰</h2>\n <div class=\"preview-box\" id=\"preview-box\">\n <div class=\"preview-card\" id=\"sample-card\">\n <div style=\"font-weight: 600; margin-bottom: 4px;\">대시보드 위젯 컴포넌트</div>\n <div style=\"color: var(--muted); font-size: 12px; margin-bottom: 14px;\">\n 토큰 변경 시 실시간으로 디자인이 반영되며 즉시 CSS 파일에 동기화됩니다.\n </div>\n <button class=\"preview-btn\" id=\"sample-btn\">확인 및 승인</button>\n </div>\n\n <div style=\"font-size: 11px; font-family: monospace; color: var(--muted); background: #161616; padding: 12px; border-radius: 6px; border: 1px solid var(--border);\">\n <div>// 컴파일 대상 파일</div>\n <div style=\"color: #60a5fa; margin-top: 4px;\">tokens/token.json (W3C DTCG)</div>\n <div style=\"color: #34d399; margin-top: 2px;\">css/atom-ui.css (0KB Pure CSS)</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div id=\"toast\" class=\"toast\">✓ 토큰 및 CSS가 성공적으로 재컴파일되었습니다!</div>\n\n <script>\n let currentTokens = {};\n\n async function loadTokens() {\n try {\n const res = await fetch('/api/tokens');\n currentTokens = await res.json();\n populateFields();\n updatePreview();\n } catch (e) {\n console.error('Failed to fetch tokens', e);\n }\n }\n\n function populateFields() {\n const primary = currentTokens?.color?.brand?.['color-primary']?.$value || '#3182f6';\n const hover = currentTokens?.color?.brand?.['color-primary-hover']?.$value || '#1b64da';\n const surface = currentTokens?.color?.surface?.['bg-surface']?.$value || '#18181b';\n const radius = currentTokens?.borderRadius?.md?.$value || '8px';\n\n document.getElementById('picker-primary').value = primary.startsWith('#') ? primary : '#3182f6';\n document.getElementById('val-primary').value = primary;\n\n document.getElementById('picker-primary-hover').value = hover.startsWith('#') ? hover : '#1b64da';\n document.getElementById('val-primary-hover').value = hover;\n\n document.getElementById('picker-bg-surface').value = surface.startsWith('#') ? surface : '#18181b';\n document.getElementById('val-bg-surface').value = surface;\n\n document.getElementById('val-radius').value = radius;\n }\n\n function onColorChange(key, val) {\n if (!currentTokens.color) currentTokens.color = {};\n if (key === 'primary') {\n document.getElementById('picker-primary').value = val.startsWith('#') ? val : '#3182f6';\n document.getElementById('val-primary').value = val;\n if (!currentTokens.color.brand) currentTokens.color.brand = {};\n if (!currentTokens.color.brand['color-primary']) currentTokens.color.brand['color-primary'] = { variable: '--atom-color-primary' };\n currentTokens.color.brand['color-primary'].$value = val;\n }\n if (key === 'primary-hover') {\n document.getElementById('picker-primary-hover').value = val.startsWith('#') ? val : '#1b64da';\n document.getElementById('val-primary-hover').value = val;\n if (!currentTokens.color.brand) currentTokens.color.brand = {};\n if (!currentTokens.color.brand['color-primary-hover']) currentTokens.color.brand['color-primary-hover'] = { variable: '--atom-color-primary-hover' };\n currentTokens.color.brand['color-primary-hover'].$value = val;\n }\n if (key === 'bg-surface') {\n document.getElementById('picker-bg-surface').value = val.startsWith('#') ? val : '#18181b';\n document.getElementById('val-bg-surface').value = val;\n if (!currentTokens.color.surface) currentTokens.color.surface = {};\n if (!currentTokens.color.surface['bg-surface']) currentTokens.color.surface['bg-surface'] = { variable: '--atom-bg-surface' };\n currentTokens.color.surface['bg-surface'].$value = val;\n }\n updatePreview();\n }\n\n function onRadiusChange(val) {\n if (!currentTokens.borderRadius) currentTokens.borderRadius = {};\n if (!currentTokens.borderRadius.md) currentTokens.borderRadius.md = { variable: '--atom-radius-md' };\n currentTokens.borderRadius.md.$value = val;\n updatePreview();\n }\n\n function updatePreview() {\n const primary = document.getElementById('val-primary').value;\n const surface = document.getElementById('val-bg-surface').value;\n const radius = document.getElementById('val-radius').value;\n\n const btn = document.getElementById('sample-btn');\n const card = document.getElementById('sample-card');\n\n btn.style.backgroundColor = primary;\n btn.style.borderRadius = radius;\n card.style.backgroundColor = surface;\n card.style.borderRadius = radius;\n }\n\n async function saveTokens() {\n try {\n const res = await fetch('/api/tokens', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(currentTokens)\n });\n const result = await res.json();\n if (result.success) {\n showToast();\n } else {\n alert('저장 실패: ' + result.error);\n }\n } catch (e) {\n alert('서버 통신 오류: ' + e.message);\n }\n }\n\n function showToast() {\n const toast = document.getElementById('toast');\n toast.style.display = 'block';\n setTimeout(() => { toast.style.display = 'none'; }, 2500);\n }\n\n loadTokens();\n </script>\n</body>\n</html>`;\n}\n","#!/usr/bin/env node\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { startLocalTokenStudio } from './studioServer';\nimport { compileTokensToCss } from './tokenCompiler';\n\nfunction getPkgRoot(): string {\n try {\n if (typeof __dirname !== 'undefined') {\n return path.resolve(__dirname, '..');\n }\n const currentFile = fileURLToPath(import.meta.url);\n return path.resolve(path.dirname(currentFile), '..');\n } catch {\n return process.cwd();\n }\n}\n\nconst PKG_ROOT = getPkgRoot();\nconst args = process.argv.slice(2);\nconst command = args[0] || 'help';\nconst targetName = args[1];\n\nfunction copyFileSafe(src: string, dest: string, label: string) {\n const targetDir = path.dirname(dest);\n if (!fs.existsSync(targetDir)) {\n fs.mkdirSync(targetDir, { recursive: true });\n }\n fs.copyFileSync(src, dest);\n console.log(` ✓ ${label} -> ${path.relative(process.cwd(), dest)}`);\n}\n\nfunction handleInit() {\n const cwd = process.cwd();\n console.log('\\n🚀 Initializing AtomSystem Universal Design System...\\n');\n\n // 1. AI Assistant Master Guidelines (Multi-agent SSOT)\n const srcAgentGuide = path.join(PKG_ROOT, 'presets', 'agents.guide.md');\n if (fs.existsSync(srcAgentGuide)) {\n // AGENTS.md (Universal)\n copyFileSafe(srcAgentGuide, path.join(cwd, 'AGENTS.md'), 'Universal AI Guide (AGENTS.md)');\n // CLAUDE.md (Claude Code)\n copyFileSafe(srcAgentGuide, path.join(cwd, 'CLAUDE.md'), 'Claude Code Guidelines (CLAUDE.md)');\n // .cursorrules (Cursor IDE)\n copyFileSafe(srcAgentGuide, path.join(cwd, '.cursorrules'), 'Cursor Rules (.cursorrules)');\n }\n\n // 2. Install AI Agent Skill\n const srcSkill = path.join(PKG_ROOT, 'skills', 'atomsystem.skill.md');\n if (fs.existsSync(srcSkill)) {\n copyFileSafe(srcSkill, path.join(cwd, '.agents', 'skills', 'atomsystem', 'SKILL.md'), 'Agent Skill (.agents/skills/atomsystem/SKILL.md)');\n }\n\n // 3. Install 4-Tier Specifications\n const specs = [\n { src: path.join(PKG_ROOT, 'presets', 'default.design.md'), dest: path.join(cwd, 'atom.design.md'), label: 'Design Tokens (atom.design.md)' },\n { src: path.join(PKG_ROOT, 'presets', 'components.md'), dest: path.join(cwd, 'atom.components.md'), label: 'Components Spec (atom.components.md)' },\n { src: path.join(PKG_ROOT, 'presets', 'blocks.md'), dest: path.join(cwd, 'atom.blocks.md'), label: 'Design Blocks Spec (atom.blocks.md)' },\n { src: path.join(PKG_ROOT, 'presets', 'uxPattern.md'), dest: path.join(cwd, 'atom.uxPattern.md'), label: 'UX Patterns (atom.uxPattern.md)' },\n ];\n\n specs.forEach((s) => {\n if (fs.existsSync(s.src)) {\n copyFileSafe(s.src, s.dest, s.label);\n }\n });\n\n // 4. Install Token JSON & Zero-Runtime CSS\n const srcToken = path.join(PKG_ROOT, 'tokens', 'token.json');\n if (fs.existsSync(srcToken)) {\n copyFileSafe(srcToken, path.join(cwd, 'tokens', 'token.json'), 'W3C DTCG Token JSON (tokens/token.json)');\n }\n\n const srcCss = path.join(PKG_ROOT, 'css', 'atom-ui.css');\n if (fs.existsSync(srcCss)) {\n copyFileSafe(srcCss, path.join(cwd, 'css', 'atom-ui.css'), 'Zero-Runtime Semantic CSS (css/atom-ui.css)');\n }\n\n console.log('\\n✨ AtomSystem initialization completed successfully!');\n console.log('\\n🎨 Local Token Studio Available:');\n console.log(' Run \"npx atomsystem studio\" to launch the local web customizer GUI.');\n console.log(' You can visually edit tokens and immediately recompile css/atom-ui.css.');\n console.log('\\n📌 How AI Coding Works Now:');\n console.log(' Any AI assistant (Claude Code, Cursor, Copilot, Antigravity) will now');\n console.log(' AUTOMATICALLY detect the design tokens, components, and UX patterns.');\n console.log('\\n📌 You can now ask your AI:');\n console.log(' \"대시보드 화면에 실시간 차트와 가격 정책 블록을 레고처럼 조립해줘.\"');\n console.log(' \"atom.design.md의 색상 토큰을 바탕으로 결제 확인 모달을 만들어줘.\"\\n');\n}\n\nconst COMPONENT_MAP: Record<string, string> = {\n button: 'Button.tsx',\n card: 'Card.tsx',\n badge: 'Badge.tsx',\n input: 'Input.tsx',\n table: 'Table.tsx',\n tabs: 'Tabs.tsx',\n switch: 'Switch.tsx',\n modal: 'Modal.tsx',\n container: 'Container.tsx',\n layout: 'Layout.tsx',\n};\n\nconst BLOCK_MAP: Record<string, { file: string; deps: string[] }> = {\n 'realtime-chart': { file: 'RealtimeChartBlock.tsx', deps: ['card', 'button', 'badge'] },\n 'interactive-chat': { file: 'InteractiveChatBlock.tsx', deps: ['card', 'input', 'button', 'badge'] },\n 'pricing-table': { file: 'PricingPlanBlock.tsx', deps: ['card', 'button', 'badge'] },\n 'card-list': { file: 'CardListBlock.tsx', deps: ['card', 'input', 'button', 'badge'] },\n 'interactive-slider': { file: 'SliderShowcaseBlock.tsx', deps: ['card', 'button', 'badge'] },\n 'metric-stats': { file: 'MetricStatsBlock.tsx', deps: ['card', 'badge'] },\n 'file-explorer': { file: 'FileExplorerBlock.tsx', deps: ['card', 'button', 'badge'] },\n};\n\nfunction handleAdd(name?: string) {\n if (!name) {\n console.error('\\n❌ Please specify an item to add. Example: npx atomsystem add button\\n');\n handleList();\n return;\n }\n\n const cwd = process.cwd();\n const normalized = name.toLowerCase().trim();\n\n // 1. Check if it's a component\n if (COMPONENT_MAP[normalized]) {\n const fileName = COMPONENT_MAP[normalized];\n const src = path.join(PKG_ROOT, 'components', 'ui', fileName);\n const dest = path.join(cwd, 'components', 'ui', fileName);\n if (fs.existsSync(src)) {\n copyFileSafe(src, dest, `Component (${fileName})`);\n console.log(`\\n✅ Added ${normalized} component to components/ui/${fileName}\\n`);\n } else {\n console.error(`\\n❌ Source component file not found: ${src}\\n`);\n }\n return;\n }\n\n // 2. Check if it's a block\n if (BLOCK_MAP[normalized]) {\n const { file, deps } = BLOCK_MAP[normalized];\n console.log(`\\n📦 Adding block \"${normalized}\" and its dependent components...\\n`);\n\n // Copy dependencies first (Component-First rule)\n deps.forEach((dep) => {\n const depFile = COMPONENT_MAP[dep];\n if (depFile) {\n const srcDep = path.join(PKG_ROOT, 'components', 'ui', depFile);\n const destDep = path.join(cwd, 'components', 'ui', depFile);\n if (fs.existsSync(srcDep)) {\n copyFileSafe(srcDep, destDep, `Dependent Component (${depFile})`);\n }\n }\n });\n\n // Copy block file\n const srcBlock = path.join(PKG_ROOT, 'components', 'blocks', file);\n const destBlock = path.join(cwd, 'components', 'blocks', file);\n if (fs.existsSync(srcBlock)) {\n copyFileSafe(srcBlock, destBlock, `Block (${file})`);\n console.log(`\\n✅ Block \"${normalized}\" successfully added to components/blocks/${file}\\n`);\n } else {\n console.error(`\\n❌ Source block file not found: ${srcBlock}\\n`);\n }\n return;\n }\n\n console.error(`\\n❌ Unknown item: \"${name}\".`);\n handleList();\n}\n\nfunction handleList() {\n console.log(`\nAvailable Components:\n - button (Button, ButtonVariants)\n - card (Card container)\n - badge (Status badge)\n - input (Input with status)\n - table (Table, Header, Row, Cell)\n - tabs (TabsList, TabsTrigger)\n - switch (A11y Switch toggle)\n - modal (Dialog with Esc key support)\n\nAvailable Design Blocks:\n - realtime-chart (Live streaming candlestick/line chart)\n - interactive-chat (AI chatbot feed with suggestions)\n - pricing-table (Monthly/annual tier pricing table)\n - card-list (Responsive grid & list filter)\n - interactive-slider (Cost simulation calculator & carousel)\n - metric-stats (4 KPI executive metric cards)\n - file-explorer (Hierarchical directory tree explorer)\n\nInstall any item:\n npx atomsystem add <item-name>\n`);\n}\n\nfunction handleBuildTokens() {\n const cwd = process.cwd();\n const tokenJsonPath = path.join(cwd, 'tokens', 'token.json');\n const cssPath = path.join(cwd, 'css', 'atom-ui.css');\n\n if (!fs.existsSync(tokenJsonPath)) {\n console.error(`\\n❌ tokens/token.json not found at ${tokenJsonPath}. Run 'npx atomsystem init' first.\\n`);\n return;\n }\n\n try {\n const tokens = JSON.parse(fs.readFileSync(tokenJsonPath, 'utf-8'));\n const css = compileTokensToCss(tokens);\n const cssDir = path.dirname(cssPath);\n if (!fs.existsSync(cssDir)) fs.mkdirSync(cssDir, { recursive: true });\n fs.writeFileSync(cssPath, css, 'utf-8');\n console.log(`\\n✨ Successfully compiled tokens to ${path.relative(cwd, cssPath)}!\\n`);\n } catch (err: any) {\n console.error(`\\n❌ Failed to compile tokens: ${err.message}\\n`);\n }\n}\n\nfunction handleStudio() {\n const portArg = args.find((a) => a.startsWith('--port='));\n const port = portArg ? parseInt(portArg.split('=')[1], 10) : 4000;\n startLocalTokenStudio({ port, cwd: process.cwd() });\n}\n\nfunction showHelp() {\n console.log(`\nAtomSystem CLI - Universal Design Token & Agentic UI System\n\nUsage:\n npx atomsystem <command> [options]\n\nCommands:\n init Initialize AI guidelines, tokens, specs, and CSS in your project\n studio Launch Local Web Token Studio GUI (interactive token customizer)\n build:tokens Compile tokens/token.json into zero-runtime css/atom-ui.css\n add <name> Add a component or block directly to your project\n list List all available components and blocks\n help Display this help message\n version Print version info\n\nOptions for studio:\n --port=<port> Port for the local studio server (default: 4000)\n`);\n}\n\nfunction showVersion() {\n const pkgPath = path.join(PKG_ROOT, 'package.json');\n if (fs.existsSync(pkgPath)) {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n console.log(`atomsystem v${pkg.version}`);\n } else {\n console.log('atomsystem v0.5.1');\n }\n}\n\nswitch (command) {\n case 'init':\n handleInit();\n break;\n case 'studio':\n case 'editor':\n handleStudio();\n break;\n case 'build:tokens':\n case 'compile':\n handleBuildTokens();\n break;\n case 'add':\n handleAdd(targetName);\n break;\n case 'list':\n handleList();\n break;\n case 'version':\n case '-v':\n case '--version':\n showVersion();\n break;\n case 'help':\n case '-h':\n case '--help':\n default:\n showHelp();\n break;\n}\n"]}
package/dist/cli.js CHANGED
@@ -651,7 +651,7 @@ function showVersion() {
651
651
  const pkg = JSON.parse(fs2.readFileSync(pkgPath, "utf-8"));
652
652
  console.log(`atomsystem v${pkg.version}`);
653
653
  } else {
654
- console.log("atomsystem v0.5.0");
654
+ console.log("atomsystem v0.5.1");
655
655
  }
656
656
  }
657
657
  switch (command) {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tokenCompiler.ts","../src/studioServer.ts","../src/cli.ts"],"names":["path","fs"],"mappings":"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","file":"cli.js","sourcesContent":["/**\n * W3C DTCG Token JSON -> CSS Custom Properties 변환 유틸리티\n */\nexport function compileTokensToCss(tokenJson: Record<string, any>): string {\n const cssVars: string[] = [];\n\n function traverse(obj: any) {\n if (!obj || typeof obj !== 'object') return;\n\n if (obj.variable && obj.$value !== undefined) {\n cssVars.push(` ${obj.variable}: ${obj.$value};`);\n return;\n }\n\n for (const key of Object.keys(obj)) {\n if (key.startsWith('$')) continue;\n traverse(obj[key]);\n }\n }\n\n traverse(tokenJson);\n\n return `:root {\\n${cssVars.join('\\n')}\\n}\\n`;\n}\n","import http from 'http';\nimport fs from 'fs';\nimport path from 'path';\nimport { compileTokensToCss } from './tokenCompiler';\n\nexport function startLocalTokenStudio(options: { port?: number; cwd?: string } = {}) {\n const port = options.port || 4000;\n const cwd = options.cwd || process.cwd();\n\n // Find token files\n const tokenJsonPath = path.join(cwd, 'tokens', 'token.json');\n const cssPath = path.join(cwd, 'css', 'atom-ui.css');\n const designMdPath = path.join(cwd, 'atom.design.md');\n\n const server = http.createServer((req, res) => {\n // CORS headers for local usage\n res.setHeader('Access-Control-Allow-Origin', '*');\n res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type');\n\n if (req.method === 'OPTIONS') {\n res.writeHead(200);\n res.end();\n return;\n }\n\n const url = new URL(req.url || '/', `http://localhost:${port}`);\n\n // API: GET tokens\n if (url.pathname === '/api/tokens' && req.method === 'GET') {\n let data: any = {};\n if (fs.existsSync(tokenJsonPath)) {\n try {\n data = JSON.parse(fs.readFileSync(tokenJsonPath, 'utf-8'));\n } catch (e) {\n data = { error: 'Failed to parse tokens/token.json' };\n }\n }\n res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });\n res.end(JSON.stringify(data));\n return;\n }\n\n // API: POST update tokens\n if (url.pathname === '/api/tokens' && req.method === 'POST') {\n let body = '';\n req.on('data', (chunk) => {\n body += chunk;\n });\n req.on('end', () => {\n try {\n const newTokens = JSON.parse(body);\n\n // 1. Save tokens/token.json\n const tokensDir = path.dirname(tokenJsonPath);\n if (!fs.existsSync(tokensDir)) fs.mkdirSync(tokensDir, { recursive: true });\n fs.writeFileSync(tokenJsonPath, JSON.stringify(newTokens, null, 2), 'utf-8');\n\n // 2. Compile and save to css/atom-ui.css\n const compiledCss = compileTokensToCss(newTokens);\n const cssDir = path.dirname(cssPath);\n if (!fs.existsSync(cssDir)) fs.mkdirSync(cssDir, { recursive: true });\n fs.writeFileSync(cssPath, compiledCss, 'utf-8');\n\n res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });\n res.end(JSON.stringify({ success: true, message: 'Tokens and CSS compiled successfully!' }));\n } catch (err: any) {\n res.writeHead(400, { 'Content-Type': 'application/json; charset=utf-8' });\n res.end(JSON.stringify({ success: false, error: err.message }));\n }\n });\n return;\n }\n\n // Serve Local Token Studio Web UI\n if (url.pathname === '/' || url.pathname === '/index.html') {\n res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });\n res.end(getStudioHtml());\n return;\n }\n\n res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });\n res.end('Not Found');\n });\n\n server.listen(port, () => {\n console.log(`\\n🎨 AtomSystem Local Token Studio running at:`);\n console.log(` 👉 http://localhost:${port}\\n`);\n console.log(` Tokens file: ${path.relative(cwd, tokenJsonPath)}`);\n console.log(` Compiled CSS: ${path.relative(cwd, cssPath)}`);\n console.log(`\\nPress Ctrl+C to stop the studio server.\\n`);\n });\n\n return server;\n}\n\nfunction getStudioHtml(): string {\n return `<!DOCTYPE html>\n<html lang=\"ko\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>AtomSystem Local Token Studio</title>\n <style>\n :root {\n --bg: #0a0a0a;\n --card-bg: #141414;\n --border: #262626;\n --text: #ededed;\n --muted: #888888;\n --accent: #3182f6;\n --radius: 8px;\n }\n * { box-sizing: border-box; margin: 0; padding: 0; }\n body {\n background: var(--bg);\n color: var(--text);\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Pretendard, sans-serif;\n padding: 32px 20px;\n line-height: 1.5;\n }\n .container { max-width: 1100px; margin: 0 auto; }\n header {\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n padding-bottom: 24px;\n border-bottom: 1px solid var(--border);\n margin-bottom: 32px;\n }\n h1 { font-size: 24px; font-weight: 700; letter-spacing: -0.02em; }\n p.desc { font-size: 13px; color: var(--muted); margin-top: 4px; }\n .badge {\n font-size: 11px;\n font-family: monospace;\n padding: 3px 8px;\n background: #1a1a1a;\n border: 1px solid var(--border);\n border-radius: 4px;\n color: var(--muted);\n }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }\n @media (max-width: 860px) { .grid { grid-template-columns: 1fr; } }\n .card {\n background: var(--card-bg);\n border: 1px solid var(--border);\n border-radius: var(--radius);\n padding: 20px;\n }\n h2 { font-size: 15px; font-weight: 600; margin-bottom: 16px; display: flex; align-items: center; justify-content: space-between; }\n .field { margin-bottom: 16px; }\n label { display: block; font-size: 12px; font-weight: 500; margin-bottom: 6px; color: var(--text); }\n .meta { font-size: 11px; color: var(--muted); font-family: monospace; margin-top: 4px; }\n .input-row { display: flex; gap: 8px; align-items: center; }\n input[type=\"text\"], select {\n flex: 1;\n background: #1e1e1e;\n border: 1px solid var(--border);\n color: var(--text);\n padding: 8px 12px;\n font-size: 13px;\n border-radius: 6px;\n outline: none;\n }\n input[type=\"color\"] {\n -webkit-appearance: none;\n border: 1px solid var(--border);\n width: 38px;\n height: 38px;\n border-radius: 6px;\n background: none;\n cursor: pointer;\n padding: 2px;\n }\n .btn-save {\n background: var(--text);\n color: var(--bg);\n border: none;\n padding: 10px 20px;\n font-size: 13px;\n font-weight: 600;\n border-radius: 6px;\n cursor: pointer;\n transition: opacity 0.2s;\n }\n .btn-save:hover { opacity: 0.9; }\n .preview-box {\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 20px;\n background: #0f0f0f;\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n .preview-btn {\n padding: 10px 18px;\n border-radius: var(--sample-radius, 8px);\n background: var(--sample-primary, #3182f6);\n color: #ffffff;\n border: none;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n }\n .preview-card {\n padding: 16px;\n border-radius: var(--sample-radius, 8px);\n background: var(--sample-surface, #18181b);\n border: 1px solid var(--border);\n color: var(--text);\n font-size: 13px;\n }\n .toast {\n position: fixed;\n bottom: 24px;\n right: 24px;\n background: #10b981;\n color: #000;\n padding: 10px 18px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 600;\n box-shadow: 0 4px 12px rgba(0,0,0,0.5);\n display: none;\n }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <header>\n <div>\n <div class=\"badge\" style=\"margin-bottom: 8px; display: inline-block;\">W3C DTCG Zero-Runtime</div>\n <h1>AtomSystem Local Token Studio</h1>\n <p class=\"desc\">로컬 환경(tokens/token.json)의 토큰을 GUI로 직접 수정하고 실시간으로 css/atom-ui.css로 재컴파일합니다.</p>\n </div>\n <button class=\"btn-save\" onclick=\"saveTokens()\">저장 및 CSS 재컴파일</button>\n </header>\n\n <div class=\"grid\">\n <!-- 1. Color Tokens -->\n <div class=\"card\">\n <h2>🎨 시맨틱 브랜드 & 서피스 토큰</h2>\n \n <div class=\"field\">\n <label>브랜드 대표 색상 (Primary Color)</label>\n <div class=\"input-row\">\n <input type=\"color\" id=\"picker-primary\" oninput=\"onColorChange('primary', this.value)\">\n <input type=\"text\" id=\"val-primary\" oninput=\"onColorChange('primary', this.value)\">\n </div>\n <div class=\"meta\">var(--atom-color-primary)</div>\n </div>\n\n <div class=\"field\">\n <label>호버 상태 색상 (Primary Hover)</label>\n <div class=\"input-row\">\n <input type=\"color\" id=\"picker-primary-hover\" oninput=\"onColorChange('primary-hover', this.value)\">\n <input type=\"text\" id=\"val-primary-hover\" oninput=\"onColorChange('primary-hover', this.value)\">\n </div>\n <div class=\"meta\">var(--atom-color-primary-hover)</div>\n </div>\n\n <div class=\"field\">\n <label>서피스 배경 (Surface Background)</label>\n <div class=\"input-row\">\n <input type=\"color\" id=\"picker-bg-surface\" oninput=\"onColorChange('bg-surface', this.value)\">\n <input type=\"text\" id=\"val-bg-surface\" oninput=\"onColorChange('bg-surface', this.value)\">\n </div>\n <div class=\"meta\">var(--atom-bg-surface)</div>\n </div>\n\n <div class=\"field\">\n <label>기본 모서리 곡률 (Border Radius)</label>\n <select id=\"val-radius\" onchange=\"onRadiusChange(this.value)\">\n <option value=\"4px\">4px (Sharp Minimal)</option>\n <option value=\"6px\">6px (Swiss Modern)</option>\n <option value=\"8px\">8px (Standard Clean)</option>\n <option value=\"12px\">12px (Rounded Friendly)</option>\n <option value=\"16px\">16px (Toss Soft)</option>\n </select>\n <div class=\"meta\">var(--atom-radius-md)</div>\n </div>\n </div>\n\n <!-- 2. Live Previewer -->\n <div class=\"card\">\n <h2>⚡ 실시간 토큰 반영 프리뷰</h2>\n <div class=\"preview-box\" id=\"preview-box\">\n <div class=\"preview-card\" id=\"sample-card\">\n <div style=\"font-weight: 600; margin-bottom: 4px;\">대시보드 위젯 컴포넌트</div>\n <div style=\"color: var(--muted); font-size: 12px; margin-bottom: 14px;\">\n 토큰 변경 시 실시간으로 디자인이 반영되며 즉시 CSS 파일에 동기화됩니다.\n </div>\n <button class=\"preview-btn\" id=\"sample-btn\">확인 및 승인</button>\n </div>\n\n <div style=\"font-size: 11px; font-family: monospace; color: var(--muted); background: #161616; padding: 12px; border-radius: 6px; border: 1px solid var(--border);\">\n <div>// 컴파일 대상 파일</div>\n <div style=\"color: #60a5fa; margin-top: 4px;\">tokens/token.json (W3C DTCG)</div>\n <div style=\"color: #34d399; margin-top: 2px;\">css/atom-ui.css (0KB Pure CSS)</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div id=\"toast\" class=\"toast\">✓ 토큰 및 CSS가 성공적으로 재컴파일되었습니다!</div>\n\n <script>\n let currentTokens = {};\n\n async function loadTokens() {\n try {\n const res = await fetch('/api/tokens');\n currentTokens = await res.json();\n populateFields();\n updatePreview();\n } catch (e) {\n console.error('Failed to fetch tokens', e);\n }\n }\n\n function populateFields() {\n const primary = currentTokens?.color?.brand?.['color-primary']?.$value || '#3182f6';\n const hover = currentTokens?.color?.brand?.['color-primary-hover']?.$value || '#1b64da';\n const surface = currentTokens?.color?.surface?.['bg-surface']?.$value || '#18181b';\n const radius = currentTokens?.borderRadius?.md?.$value || '8px';\n\n document.getElementById('picker-primary').value = primary.startsWith('#') ? primary : '#3182f6';\n document.getElementById('val-primary').value = primary;\n\n document.getElementById('picker-primary-hover').value = hover.startsWith('#') ? hover : '#1b64da';\n document.getElementById('val-primary-hover').value = hover;\n\n document.getElementById('picker-bg-surface').value = surface.startsWith('#') ? surface : '#18181b';\n document.getElementById('val-bg-surface').value = surface;\n\n document.getElementById('val-radius').value = radius;\n }\n\n function onColorChange(key, val) {\n if (!currentTokens.color) currentTokens.color = {};\n if (key === 'primary') {\n document.getElementById('picker-primary').value = val.startsWith('#') ? val : '#3182f6';\n document.getElementById('val-primary').value = val;\n if (!currentTokens.color.brand) currentTokens.color.brand = {};\n if (!currentTokens.color.brand['color-primary']) currentTokens.color.brand['color-primary'] = { variable: '--atom-color-primary' };\n currentTokens.color.brand['color-primary'].$value = val;\n }\n if (key === 'primary-hover') {\n document.getElementById('picker-primary-hover').value = val.startsWith('#') ? val : '#1b64da';\n document.getElementById('val-primary-hover').value = val;\n if (!currentTokens.color.brand) currentTokens.color.brand = {};\n if (!currentTokens.color.brand['color-primary-hover']) currentTokens.color.brand['color-primary-hover'] = { variable: '--atom-color-primary-hover' };\n currentTokens.color.brand['color-primary-hover'].$value = val;\n }\n if (key === 'bg-surface') {\n document.getElementById('picker-bg-surface').value = val.startsWith('#') ? val : '#18181b';\n document.getElementById('val-bg-surface').value = val;\n if (!currentTokens.color.surface) currentTokens.color.surface = {};\n if (!currentTokens.color.surface['bg-surface']) currentTokens.color.surface['bg-surface'] = { variable: '--atom-bg-surface' };\n currentTokens.color.surface['bg-surface'].$value = val;\n }\n updatePreview();\n }\n\n function onRadiusChange(val) {\n if (!currentTokens.borderRadius) currentTokens.borderRadius = {};\n if (!currentTokens.borderRadius.md) currentTokens.borderRadius.md = { variable: '--atom-radius-md' };\n currentTokens.borderRadius.md.$value = val;\n updatePreview();\n }\n\n function updatePreview() {\n const primary = document.getElementById('val-primary').value;\n const surface = document.getElementById('val-bg-surface').value;\n const radius = document.getElementById('val-radius').value;\n\n const btn = document.getElementById('sample-btn');\n const card = document.getElementById('sample-card');\n\n btn.style.backgroundColor = primary;\n btn.style.borderRadius = radius;\n card.style.backgroundColor = surface;\n card.style.borderRadius = radius;\n }\n\n async function saveTokens() {\n try {\n const res = await fetch('/api/tokens', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(currentTokens)\n });\n const result = await res.json();\n if (result.success) {\n showToast();\n } else {\n alert('저장 실패: ' + result.error);\n }\n } catch (e) {\n alert('서버 통신 오류: ' + e.message);\n }\n }\n\n function showToast() {\n const toast = document.getElementById('toast');\n toast.style.display = 'block';\n setTimeout(() => { toast.style.display = 'none'; }, 2500);\n }\n\n loadTokens();\n </script>\n</body>\n</html>`;\n}\n","#!/usr/bin/env node\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { startLocalTokenStudio } from './studioServer';\nimport { compileTokensToCss } from './tokenCompiler';\n\nfunction getPkgRoot(): string {\n try {\n if (typeof __dirname !== 'undefined') {\n return path.resolve(__dirname, '..');\n }\n const currentFile = fileURLToPath(import.meta.url);\n return path.resolve(path.dirname(currentFile), '..');\n } catch {\n return process.cwd();\n }\n}\n\nconst PKG_ROOT = getPkgRoot();\nconst args = process.argv.slice(2);\nconst command = args[0] || 'help';\nconst targetName = args[1];\n\nfunction copyFileSafe(src: string, dest: string, label: string) {\n const targetDir = path.dirname(dest);\n if (!fs.existsSync(targetDir)) {\n fs.mkdirSync(targetDir, { recursive: true });\n }\n fs.copyFileSync(src, dest);\n console.log(` ✓ ${label} -> ${path.relative(process.cwd(), dest)}`);\n}\n\nfunction handleInit() {\n const cwd = process.cwd();\n console.log('\\n🚀 Initializing AtomSystem Universal Design System...\\n');\n\n // 1. AI Assistant Master Guidelines (Multi-agent SSOT)\n const srcAgentGuide = path.join(PKG_ROOT, 'presets', 'agents.guide.md');\n if (fs.existsSync(srcAgentGuide)) {\n // AGENTS.md (Universal)\n copyFileSafe(srcAgentGuide, path.join(cwd, 'AGENTS.md'), 'Universal AI Guide (AGENTS.md)');\n // CLAUDE.md (Claude Code)\n copyFileSafe(srcAgentGuide, path.join(cwd, 'CLAUDE.md'), 'Claude Code Guidelines (CLAUDE.md)');\n // .cursorrules (Cursor IDE)\n copyFileSafe(srcAgentGuide, path.join(cwd, '.cursorrules'), 'Cursor Rules (.cursorrules)');\n }\n\n // 2. Install AI Agent Skill\n const srcSkill = path.join(PKG_ROOT, 'skills', 'atomsystem.skill.md');\n if (fs.existsSync(srcSkill)) {\n copyFileSafe(srcSkill, path.join(cwd, '.agents', 'skills', 'atomsystem', 'SKILL.md'), 'Agent Skill (.agents/skills/atomsystem/SKILL.md)');\n }\n\n // 3. Install 4-Tier Specifications\n const specs = [\n { src: path.join(PKG_ROOT, 'presets', 'default.design.md'), dest: path.join(cwd, 'atom.design.md'), label: 'Design Tokens (atom.design.md)' },\n { src: path.join(PKG_ROOT, 'presets', 'components.md'), dest: path.join(cwd, 'atom.components.md'), label: 'Components Spec (atom.components.md)' },\n { src: path.join(PKG_ROOT, 'presets', 'blocks.md'), dest: path.join(cwd, 'atom.blocks.md'), label: 'Design Blocks Spec (atom.blocks.md)' },\n { src: path.join(PKG_ROOT, 'presets', 'uxPattern.md'), dest: path.join(cwd, 'atom.uxPattern.md'), label: 'UX Patterns (atom.uxPattern.md)' },\n ];\n\n specs.forEach((s) => {\n if (fs.existsSync(s.src)) {\n copyFileSafe(s.src, s.dest, s.label);\n }\n });\n\n // 4. Install Token JSON & Zero-Runtime CSS\n const srcToken = path.join(PKG_ROOT, 'tokens', 'token.json');\n if (fs.existsSync(srcToken)) {\n copyFileSafe(srcToken, path.join(cwd, 'tokens', 'token.json'), 'W3C DTCG Token JSON (tokens/token.json)');\n }\n\n const srcCss = path.join(PKG_ROOT, 'css', 'atom-ui.css');\n if (fs.existsSync(srcCss)) {\n copyFileSafe(srcCss, path.join(cwd, 'css', 'atom-ui.css'), 'Zero-Runtime Semantic CSS (css/atom-ui.css)');\n }\n\n console.log('\\n✨ AtomSystem initialization completed successfully!');\n console.log('\\n🎨 Local Token Studio Available:');\n console.log(' Run \"npx atomsystem studio\" to launch the local web customizer GUI.');\n console.log(' You can visually edit tokens and immediately recompile css/atom-ui.css.');\n console.log('\\n📌 How AI Coding Works Now:');\n console.log(' Any AI assistant (Claude Code, Cursor, Copilot, Antigravity) will now');\n console.log(' AUTOMATICALLY detect the design tokens, components, and UX patterns.');\n console.log('\\n📌 You can now ask your AI:');\n console.log(' \"대시보드 화면에 실시간 차트와 가격 정책 블록을 레고처럼 조립해줘.\"');\n console.log(' \"atom.design.md의 색상 토큰을 바탕으로 결제 확인 모달을 만들어줘.\"\\n');\n}\n\nconst COMPONENT_MAP: Record<string, string> = {\n button: 'Button.tsx',\n card: 'Card.tsx',\n badge: 'Badge.tsx',\n input: 'Input.tsx',\n table: 'Table.tsx',\n tabs: 'Tabs.tsx',\n switch: 'Switch.tsx',\n modal: 'Modal.tsx',\n container: 'Container.tsx',\n layout: 'Layout.tsx',\n};\n\nconst BLOCK_MAP: Record<string, { file: string; deps: string[] }> = {\n 'realtime-chart': { file: 'RealtimeChartBlock.tsx', deps: ['card', 'button', 'badge'] },\n 'interactive-chat': { file: 'InteractiveChatBlock.tsx', deps: ['card', 'input', 'button', 'badge'] },\n 'pricing-table': { file: 'PricingPlanBlock.tsx', deps: ['card', 'button', 'badge'] },\n 'card-list': { file: 'CardListBlock.tsx', deps: ['card', 'input', 'button', 'badge'] },\n 'interactive-slider': { file: 'SliderShowcaseBlock.tsx', deps: ['card', 'button', 'badge'] },\n 'metric-stats': { file: 'MetricStatsBlock.tsx', deps: ['card', 'badge'] },\n 'file-explorer': { file: 'FileExplorerBlock.tsx', deps: ['card', 'button', 'badge'] },\n};\n\nfunction handleAdd(name?: string) {\n if (!name) {\n console.error('\\n❌ Please specify an item to add. Example: npx atomsystem add button\\n');\n handleList();\n return;\n }\n\n const cwd = process.cwd();\n const normalized = name.toLowerCase().trim();\n\n // 1. Check if it's a component\n if (COMPONENT_MAP[normalized]) {\n const fileName = COMPONENT_MAP[normalized];\n const src = path.join(PKG_ROOT, 'components', 'ui', fileName);\n const dest = path.join(cwd, 'components', 'ui', fileName);\n if (fs.existsSync(src)) {\n copyFileSafe(src, dest, `Component (${fileName})`);\n console.log(`\\n✅ Added ${normalized} component to components/ui/${fileName}\\n`);\n } else {\n console.error(`\\n❌ Source component file not found: ${src}\\n`);\n }\n return;\n }\n\n // 2. Check if it's a block\n if (BLOCK_MAP[normalized]) {\n const { file, deps } = BLOCK_MAP[normalized];\n console.log(`\\n📦 Adding block \"${normalized}\" and its dependent components...\\n`);\n\n // Copy dependencies first (Component-First rule)\n deps.forEach((dep) => {\n const depFile = COMPONENT_MAP[dep];\n if (depFile) {\n const srcDep = path.join(PKG_ROOT, 'components', 'ui', depFile);\n const destDep = path.join(cwd, 'components', 'ui', depFile);\n if (fs.existsSync(srcDep)) {\n copyFileSafe(srcDep, destDep, `Dependent Component (${depFile})`);\n }\n }\n });\n\n // Copy block file\n const srcBlock = path.join(PKG_ROOT, 'components', 'blocks', file);\n const destBlock = path.join(cwd, 'components', 'blocks', file);\n if (fs.existsSync(srcBlock)) {\n copyFileSafe(srcBlock, destBlock, `Block (${file})`);\n console.log(`\\n✅ Block \"${normalized}\" successfully added to components/blocks/${file}\\n`);\n } else {\n console.error(`\\n❌ Source block file not found: ${srcBlock}\\n`);\n }\n return;\n }\n\n console.error(`\\n❌ Unknown item: \"${name}\".`);\n handleList();\n}\n\nfunction handleList() {\n console.log(`\nAvailable Components:\n - button (Button, ButtonVariants)\n - card (Card container)\n - badge (Status badge)\n - input (Input with status)\n - table (Table, Header, Row, Cell)\n - tabs (TabsList, TabsTrigger)\n - switch (A11y Switch toggle)\n - modal (Dialog with Esc key support)\n\nAvailable Design Blocks:\n - realtime-chart (Live streaming candlestick/line chart)\n - interactive-chat (AI chatbot feed with suggestions)\n - pricing-table (Monthly/annual tier pricing table)\n - card-list (Responsive grid & list filter)\n - interactive-slider (Cost simulation calculator & carousel)\n - metric-stats (4 KPI executive metric cards)\n - file-explorer (Hierarchical directory tree explorer)\n\nInstall any item:\n npx atomsystem add <item-name>\n`);\n}\n\nfunction handleBuildTokens() {\n const cwd = process.cwd();\n const tokenJsonPath = path.join(cwd, 'tokens', 'token.json');\n const cssPath = path.join(cwd, 'css', 'atom-ui.css');\n\n if (!fs.existsSync(tokenJsonPath)) {\n console.error(`\\n❌ tokens/token.json not found at ${tokenJsonPath}. Run 'npx atomsystem init' first.\\n`);\n return;\n }\n\n try {\n const tokens = JSON.parse(fs.readFileSync(tokenJsonPath, 'utf-8'));\n const css = compileTokensToCss(tokens);\n const cssDir = path.dirname(cssPath);\n if (!fs.existsSync(cssDir)) fs.mkdirSync(cssDir, { recursive: true });\n fs.writeFileSync(cssPath, css, 'utf-8');\n console.log(`\\n✨ Successfully compiled tokens to ${path.relative(cwd, cssPath)}!\\n`);\n } catch (err: any) {\n console.error(`\\n❌ Failed to compile tokens: ${err.message}\\n`);\n }\n}\n\nfunction handleStudio() {\n const portArg = args.find((a) => a.startsWith('--port='));\n const port = portArg ? parseInt(portArg.split('=')[1], 10) : 4000;\n startLocalTokenStudio({ port, cwd: process.cwd() });\n}\n\nfunction showHelp() {\n console.log(`\nAtomSystem CLI - Universal Design Token & Agentic UI System\n\nUsage:\n npx atomsystem <command> [options]\n\nCommands:\n init Initialize AI guidelines, tokens, specs, and CSS in your project\n studio Launch Local Web Token Studio GUI (interactive token customizer)\n build:tokens Compile tokens/token.json into zero-runtime css/atom-ui.css\n add <name> Add a component or block directly to your project\n list List all available components and blocks\n help Display this help message\n version Print version info\n\nOptions for studio:\n --port=<port> Port for the local studio server (default: 4000)\n`);\n}\n\nfunction showVersion() {\n const pkgPath = path.join(PKG_ROOT, 'package.json');\n if (fs.existsSync(pkgPath)) {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n console.log(`atomsystem v${pkg.version}`);\n } else {\n console.log('atomsystem v0.5.0');\n }\n}\n\nswitch (command) {\n case 'init':\n handleInit();\n break;\n case 'studio':\n case 'editor':\n handleStudio();\n break;\n case 'build:tokens':\n case 'compile':\n handleBuildTokens();\n break;\n case 'add':\n handleAdd(targetName);\n break;\n case 'list':\n handleList();\n break;\n case 'version':\n case '-v':\n case '--version':\n showVersion();\n break;\n case 'help':\n case '-h':\n case '--help':\n default:\n showHelp();\n break;\n}\n"]}
1
+ {"version":3,"sources":["../src/tokenCompiler.ts","../src/studioServer.ts","../src/cli.ts"],"names":["path","fs"],"mappings":"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","file":"cli.js","sourcesContent":["/**\n * W3C DTCG Token JSON -> CSS Custom Properties 변환 유틸리티\n */\nexport function compileTokensToCss(tokenJson: Record<string, any>): string {\n const cssVars: string[] = [];\n\n function traverse(obj: any) {\n if (!obj || typeof obj !== 'object') return;\n\n if (obj.variable && obj.$value !== undefined) {\n cssVars.push(` ${obj.variable}: ${obj.$value};`);\n return;\n }\n\n for (const key of Object.keys(obj)) {\n if (key.startsWith('$')) continue;\n traverse(obj[key]);\n }\n }\n\n traverse(tokenJson);\n\n return `:root {\\n${cssVars.join('\\n')}\\n}\\n`;\n}\n","import http from 'http';\nimport fs from 'fs';\nimport path from 'path';\nimport { compileTokensToCss } from './tokenCompiler';\n\nexport function startLocalTokenStudio(options: { port?: number; cwd?: string } = {}) {\n const port = options.port || 4000;\n const cwd = options.cwd || process.cwd();\n\n // Find token files\n const tokenJsonPath = path.join(cwd, 'tokens', 'token.json');\n const cssPath = path.join(cwd, 'css', 'atom-ui.css');\n const designMdPath = path.join(cwd, 'atom.design.md');\n\n const server = http.createServer((req, res) => {\n // CORS headers for local usage\n res.setHeader('Access-Control-Allow-Origin', '*');\n res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type');\n\n if (req.method === 'OPTIONS') {\n res.writeHead(200);\n res.end();\n return;\n }\n\n const url = new URL(req.url || '/', `http://localhost:${port}`);\n\n // API: GET tokens\n if (url.pathname === '/api/tokens' && req.method === 'GET') {\n let data: any = {};\n if (fs.existsSync(tokenJsonPath)) {\n try {\n data = JSON.parse(fs.readFileSync(tokenJsonPath, 'utf-8'));\n } catch (e) {\n data = { error: 'Failed to parse tokens/token.json' };\n }\n }\n res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });\n res.end(JSON.stringify(data));\n return;\n }\n\n // API: POST update tokens\n if (url.pathname === '/api/tokens' && req.method === 'POST') {\n let body = '';\n req.on('data', (chunk) => {\n body += chunk;\n });\n req.on('end', () => {\n try {\n const newTokens = JSON.parse(body);\n\n // 1. Save tokens/token.json\n const tokensDir = path.dirname(tokenJsonPath);\n if (!fs.existsSync(tokensDir)) fs.mkdirSync(tokensDir, { recursive: true });\n fs.writeFileSync(tokenJsonPath, JSON.stringify(newTokens, null, 2), 'utf-8');\n\n // 2. Compile and save to css/atom-ui.css\n const compiledCss = compileTokensToCss(newTokens);\n const cssDir = path.dirname(cssPath);\n if (!fs.existsSync(cssDir)) fs.mkdirSync(cssDir, { recursive: true });\n fs.writeFileSync(cssPath, compiledCss, 'utf-8');\n\n res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });\n res.end(JSON.stringify({ success: true, message: 'Tokens and CSS compiled successfully!' }));\n } catch (err: any) {\n res.writeHead(400, { 'Content-Type': 'application/json; charset=utf-8' });\n res.end(JSON.stringify({ success: false, error: err.message }));\n }\n });\n return;\n }\n\n // Serve Local Token Studio Web UI\n if (url.pathname === '/' || url.pathname === '/index.html') {\n res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });\n res.end(getStudioHtml());\n return;\n }\n\n res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });\n res.end('Not Found');\n });\n\n server.listen(port, () => {\n console.log(`\\n🎨 AtomSystem Local Token Studio running at:`);\n console.log(` 👉 http://localhost:${port}\\n`);\n console.log(` Tokens file: ${path.relative(cwd, tokenJsonPath)}`);\n console.log(` Compiled CSS: ${path.relative(cwd, cssPath)}`);\n console.log(`\\nPress Ctrl+C to stop the studio server.\\n`);\n });\n\n return server;\n}\n\nfunction getStudioHtml(): string {\n return `<!DOCTYPE html>\n<html lang=\"ko\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>AtomSystem Local Token Studio</title>\n <style>\n :root {\n --bg: #0a0a0a;\n --card-bg: #141414;\n --border: #262626;\n --text: #ededed;\n --muted: #888888;\n --accent: #3182f6;\n --radius: 8px;\n }\n * { box-sizing: border-box; margin: 0; padding: 0; }\n body {\n background: var(--bg);\n color: var(--text);\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Pretendard, sans-serif;\n padding: 32px 20px;\n line-height: 1.5;\n }\n .container { max-width: 1100px; margin: 0 auto; }\n header {\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n padding-bottom: 24px;\n border-bottom: 1px solid var(--border);\n margin-bottom: 32px;\n }\n h1 { font-size: 24px; font-weight: 700; letter-spacing: -0.02em; }\n p.desc { font-size: 13px; color: var(--muted); margin-top: 4px; }\n .badge {\n font-size: 11px;\n font-family: monospace;\n padding: 3px 8px;\n background: #1a1a1a;\n border: 1px solid var(--border);\n border-radius: 4px;\n color: var(--muted);\n }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }\n @media (max-width: 860px) { .grid { grid-template-columns: 1fr; } }\n .card {\n background: var(--card-bg);\n border: 1px solid var(--border);\n border-radius: var(--radius);\n padding: 20px;\n }\n h2 { font-size: 15px; font-weight: 600; margin-bottom: 16px; display: flex; align-items: center; justify-content: space-between; }\n .field { margin-bottom: 16px; }\n label { display: block; font-size: 12px; font-weight: 500; margin-bottom: 6px; color: var(--text); }\n .meta { font-size: 11px; color: var(--muted); font-family: monospace; margin-top: 4px; }\n .input-row { display: flex; gap: 8px; align-items: center; }\n input[type=\"text\"], select {\n flex: 1;\n background: #1e1e1e;\n border: 1px solid var(--border);\n color: var(--text);\n padding: 8px 12px;\n font-size: 13px;\n border-radius: 6px;\n outline: none;\n }\n input[type=\"color\"] {\n -webkit-appearance: none;\n border: 1px solid var(--border);\n width: 38px;\n height: 38px;\n border-radius: 6px;\n background: none;\n cursor: pointer;\n padding: 2px;\n }\n .btn-save {\n background: var(--text);\n color: var(--bg);\n border: none;\n padding: 10px 20px;\n font-size: 13px;\n font-weight: 600;\n border-radius: 6px;\n cursor: pointer;\n transition: opacity 0.2s;\n }\n .btn-save:hover { opacity: 0.9; }\n .preview-box {\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 20px;\n background: #0f0f0f;\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n .preview-btn {\n padding: 10px 18px;\n border-radius: var(--sample-radius, 8px);\n background: var(--sample-primary, #3182f6);\n color: #ffffff;\n border: none;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n }\n .preview-card {\n padding: 16px;\n border-radius: var(--sample-radius, 8px);\n background: var(--sample-surface, #18181b);\n border: 1px solid var(--border);\n color: var(--text);\n font-size: 13px;\n }\n .toast {\n position: fixed;\n bottom: 24px;\n right: 24px;\n background: #10b981;\n color: #000;\n padding: 10px 18px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 600;\n box-shadow: 0 4px 12px rgba(0,0,0,0.5);\n display: none;\n }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <header>\n <div>\n <div class=\"badge\" style=\"margin-bottom: 8px; display: inline-block;\">W3C DTCG Zero-Runtime</div>\n <h1>AtomSystem Local Token Studio</h1>\n <p class=\"desc\">로컬 환경(tokens/token.json)의 토큰을 GUI로 직접 수정하고 실시간으로 css/atom-ui.css로 재컴파일합니다.</p>\n </div>\n <button class=\"btn-save\" onclick=\"saveTokens()\">저장 및 CSS 재컴파일</button>\n </header>\n\n <div class=\"grid\">\n <!-- 1. Color Tokens -->\n <div class=\"card\">\n <h2>🎨 시맨틱 브랜드 & 서피스 토큰</h2>\n \n <div class=\"field\">\n <label>브랜드 대표 색상 (Primary Color)</label>\n <div class=\"input-row\">\n <input type=\"color\" id=\"picker-primary\" oninput=\"onColorChange('primary', this.value)\">\n <input type=\"text\" id=\"val-primary\" oninput=\"onColorChange('primary', this.value)\">\n </div>\n <div class=\"meta\">var(--atom-color-primary)</div>\n </div>\n\n <div class=\"field\">\n <label>호버 상태 색상 (Primary Hover)</label>\n <div class=\"input-row\">\n <input type=\"color\" id=\"picker-primary-hover\" oninput=\"onColorChange('primary-hover', this.value)\">\n <input type=\"text\" id=\"val-primary-hover\" oninput=\"onColorChange('primary-hover', this.value)\">\n </div>\n <div class=\"meta\">var(--atom-color-primary-hover)</div>\n </div>\n\n <div class=\"field\">\n <label>서피스 배경 (Surface Background)</label>\n <div class=\"input-row\">\n <input type=\"color\" id=\"picker-bg-surface\" oninput=\"onColorChange('bg-surface', this.value)\">\n <input type=\"text\" id=\"val-bg-surface\" oninput=\"onColorChange('bg-surface', this.value)\">\n </div>\n <div class=\"meta\">var(--atom-bg-surface)</div>\n </div>\n\n <div class=\"field\">\n <label>기본 모서리 곡률 (Border Radius)</label>\n <select id=\"val-radius\" onchange=\"onRadiusChange(this.value)\">\n <option value=\"4px\">4px (Sharp Minimal)</option>\n <option value=\"6px\">6px (Swiss Modern)</option>\n <option value=\"8px\">8px (Standard Clean)</option>\n <option value=\"12px\">12px (Rounded Friendly)</option>\n <option value=\"16px\">16px (Toss Soft)</option>\n </select>\n <div class=\"meta\">var(--atom-radius-md)</div>\n </div>\n </div>\n\n <!-- 2. Live Previewer -->\n <div class=\"card\">\n <h2>⚡ 실시간 토큰 반영 프리뷰</h2>\n <div class=\"preview-box\" id=\"preview-box\">\n <div class=\"preview-card\" id=\"sample-card\">\n <div style=\"font-weight: 600; margin-bottom: 4px;\">대시보드 위젯 컴포넌트</div>\n <div style=\"color: var(--muted); font-size: 12px; margin-bottom: 14px;\">\n 토큰 변경 시 실시간으로 디자인이 반영되며 즉시 CSS 파일에 동기화됩니다.\n </div>\n <button class=\"preview-btn\" id=\"sample-btn\">확인 및 승인</button>\n </div>\n\n <div style=\"font-size: 11px; font-family: monospace; color: var(--muted); background: #161616; padding: 12px; border-radius: 6px; border: 1px solid var(--border);\">\n <div>// 컴파일 대상 파일</div>\n <div style=\"color: #60a5fa; margin-top: 4px;\">tokens/token.json (W3C DTCG)</div>\n <div style=\"color: #34d399; margin-top: 2px;\">css/atom-ui.css (0KB Pure CSS)</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div id=\"toast\" class=\"toast\">✓ 토큰 및 CSS가 성공적으로 재컴파일되었습니다!</div>\n\n <script>\n let currentTokens = {};\n\n async function loadTokens() {\n try {\n const res = await fetch('/api/tokens');\n currentTokens = await res.json();\n populateFields();\n updatePreview();\n } catch (e) {\n console.error('Failed to fetch tokens', e);\n }\n }\n\n function populateFields() {\n const primary = currentTokens?.color?.brand?.['color-primary']?.$value || '#3182f6';\n const hover = currentTokens?.color?.brand?.['color-primary-hover']?.$value || '#1b64da';\n const surface = currentTokens?.color?.surface?.['bg-surface']?.$value || '#18181b';\n const radius = currentTokens?.borderRadius?.md?.$value || '8px';\n\n document.getElementById('picker-primary').value = primary.startsWith('#') ? primary : '#3182f6';\n document.getElementById('val-primary').value = primary;\n\n document.getElementById('picker-primary-hover').value = hover.startsWith('#') ? hover : '#1b64da';\n document.getElementById('val-primary-hover').value = hover;\n\n document.getElementById('picker-bg-surface').value = surface.startsWith('#') ? surface : '#18181b';\n document.getElementById('val-bg-surface').value = surface;\n\n document.getElementById('val-radius').value = radius;\n }\n\n function onColorChange(key, val) {\n if (!currentTokens.color) currentTokens.color = {};\n if (key === 'primary') {\n document.getElementById('picker-primary').value = val.startsWith('#') ? val : '#3182f6';\n document.getElementById('val-primary').value = val;\n if (!currentTokens.color.brand) currentTokens.color.brand = {};\n if (!currentTokens.color.brand['color-primary']) currentTokens.color.brand['color-primary'] = { variable: '--atom-color-primary' };\n currentTokens.color.brand['color-primary'].$value = val;\n }\n if (key === 'primary-hover') {\n document.getElementById('picker-primary-hover').value = val.startsWith('#') ? val : '#1b64da';\n document.getElementById('val-primary-hover').value = val;\n if (!currentTokens.color.brand) currentTokens.color.brand = {};\n if (!currentTokens.color.brand['color-primary-hover']) currentTokens.color.brand['color-primary-hover'] = { variable: '--atom-color-primary-hover' };\n currentTokens.color.brand['color-primary-hover'].$value = val;\n }\n if (key === 'bg-surface') {\n document.getElementById('picker-bg-surface').value = val.startsWith('#') ? val : '#18181b';\n document.getElementById('val-bg-surface').value = val;\n if (!currentTokens.color.surface) currentTokens.color.surface = {};\n if (!currentTokens.color.surface['bg-surface']) currentTokens.color.surface['bg-surface'] = { variable: '--atom-bg-surface' };\n currentTokens.color.surface['bg-surface'].$value = val;\n }\n updatePreview();\n }\n\n function onRadiusChange(val) {\n if (!currentTokens.borderRadius) currentTokens.borderRadius = {};\n if (!currentTokens.borderRadius.md) currentTokens.borderRadius.md = { variable: '--atom-radius-md' };\n currentTokens.borderRadius.md.$value = val;\n updatePreview();\n }\n\n function updatePreview() {\n const primary = document.getElementById('val-primary').value;\n const surface = document.getElementById('val-bg-surface').value;\n const radius = document.getElementById('val-radius').value;\n\n const btn = document.getElementById('sample-btn');\n const card = document.getElementById('sample-card');\n\n btn.style.backgroundColor = primary;\n btn.style.borderRadius = radius;\n card.style.backgroundColor = surface;\n card.style.borderRadius = radius;\n }\n\n async function saveTokens() {\n try {\n const res = await fetch('/api/tokens', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(currentTokens)\n });\n const result = await res.json();\n if (result.success) {\n showToast();\n } else {\n alert('저장 실패: ' + result.error);\n }\n } catch (e) {\n alert('서버 통신 오류: ' + e.message);\n }\n }\n\n function showToast() {\n const toast = document.getElementById('toast');\n toast.style.display = 'block';\n setTimeout(() => { toast.style.display = 'none'; }, 2500);\n }\n\n loadTokens();\n </script>\n</body>\n</html>`;\n}\n","#!/usr/bin/env node\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { startLocalTokenStudio } from './studioServer';\nimport { compileTokensToCss } from './tokenCompiler';\n\nfunction getPkgRoot(): string {\n try {\n if (typeof __dirname !== 'undefined') {\n return path.resolve(__dirname, '..');\n }\n const currentFile = fileURLToPath(import.meta.url);\n return path.resolve(path.dirname(currentFile), '..');\n } catch {\n return process.cwd();\n }\n}\n\nconst PKG_ROOT = getPkgRoot();\nconst args = process.argv.slice(2);\nconst command = args[0] || 'help';\nconst targetName = args[1];\n\nfunction copyFileSafe(src: string, dest: string, label: string) {\n const targetDir = path.dirname(dest);\n if (!fs.existsSync(targetDir)) {\n fs.mkdirSync(targetDir, { recursive: true });\n }\n fs.copyFileSync(src, dest);\n console.log(` ✓ ${label} -> ${path.relative(process.cwd(), dest)}`);\n}\n\nfunction handleInit() {\n const cwd = process.cwd();\n console.log('\\n🚀 Initializing AtomSystem Universal Design System...\\n');\n\n // 1. AI Assistant Master Guidelines (Multi-agent SSOT)\n const srcAgentGuide = path.join(PKG_ROOT, 'presets', 'agents.guide.md');\n if (fs.existsSync(srcAgentGuide)) {\n // AGENTS.md (Universal)\n copyFileSafe(srcAgentGuide, path.join(cwd, 'AGENTS.md'), 'Universal AI Guide (AGENTS.md)');\n // CLAUDE.md (Claude Code)\n copyFileSafe(srcAgentGuide, path.join(cwd, 'CLAUDE.md'), 'Claude Code Guidelines (CLAUDE.md)');\n // .cursorrules (Cursor IDE)\n copyFileSafe(srcAgentGuide, path.join(cwd, '.cursorrules'), 'Cursor Rules (.cursorrules)');\n }\n\n // 2. Install AI Agent Skill\n const srcSkill = path.join(PKG_ROOT, 'skills', 'atomsystem.skill.md');\n if (fs.existsSync(srcSkill)) {\n copyFileSafe(srcSkill, path.join(cwd, '.agents', 'skills', 'atomsystem', 'SKILL.md'), 'Agent Skill (.agents/skills/atomsystem/SKILL.md)');\n }\n\n // 3. Install 4-Tier Specifications\n const specs = [\n { src: path.join(PKG_ROOT, 'presets', 'default.design.md'), dest: path.join(cwd, 'atom.design.md'), label: 'Design Tokens (atom.design.md)' },\n { src: path.join(PKG_ROOT, 'presets', 'components.md'), dest: path.join(cwd, 'atom.components.md'), label: 'Components Spec (atom.components.md)' },\n { src: path.join(PKG_ROOT, 'presets', 'blocks.md'), dest: path.join(cwd, 'atom.blocks.md'), label: 'Design Blocks Spec (atom.blocks.md)' },\n { src: path.join(PKG_ROOT, 'presets', 'uxPattern.md'), dest: path.join(cwd, 'atom.uxPattern.md'), label: 'UX Patterns (atom.uxPattern.md)' },\n ];\n\n specs.forEach((s) => {\n if (fs.existsSync(s.src)) {\n copyFileSafe(s.src, s.dest, s.label);\n }\n });\n\n // 4. Install Token JSON & Zero-Runtime CSS\n const srcToken = path.join(PKG_ROOT, 'tokens', 'token.json');\n if (fs.existsSync(srcToken)) {\n copyFileSafe(srcToken, path.join(cwd, 'tokens', 'token.json'), 'W3C DTCG Token JSON (tokens/token.json)');\n }\n\n const srcCss = path.join(PKG_ROOT, 'css', 'atom-ui.css');\n if (fs.existsSync(srcCss)) {\n copyFileSafe(srcCss, path.join(cwd, 'css', 'atom-ui.css'), 'Zero-Runtime Semantic CSS (css/atom-ui.css)');\n }\n\n console.log('\\n✨ AtomSystem initialization completed successfully!');\n console.log('\\n🎨 Local Token Studio Available:');\n console.log(' Run \"npx atomsystem studio\" to launch the local web customizer GUI.');\n console.log(' You can visually edit tokens and immediately recompile css/atom-ui.css.');\n console.log('\\n📌 How AI Coding Works Now:');\n console.log(' Any AI assistant (Claude Code, Cursor, Copilot, Antigravity) will now');\n console.log(' AUTOMATICALLY detect the design tokens, components, and UX patterns.');\n console.log('\\n📌 You can now ask your AI:');\n console.log(' \"대시보드 화면에 실시간 차트와 가격 정책 블록을 레고처럼 조립해줘.\"');\n console.log(' \"atom.design.md의 색상 토큰을 바탕으로 결제 확인 모달을 만들어줘.\"\\n');\n}\n\nconst COMPONENT_MAP: Record<string, string> = {\n button: 'Button.tsx',\n card: 'Card.tsx',\n badge: 'Badge.tsx',\n input: 'Input.tsx',\n table: 'Table.tsx',\n tabs: 'Tabs.tsx',\n switch: 'Switch.tsx',\n modal: 'Modal.tsx',\n container: 'Container.tsx',\n layout: 'Layout.tsx',\n};\n\nconst BLOCK_MAP: Record<string, { file: string; deps: string[] }> = {\n 'realtime-chart': { file: 'RealtimeChartBlock.tsx', deps: ['card', 'button', 'badge'] },\n 'interactive-chat': { file: 'InteractiveChatBlock.tsx', deps: ['card', 'input', 'button', 'badge'] },\n 'pricing-table': { file: 'PricingPlanBlock.tsx', deps: ['card', 'button', 'badge'] },\n 'card-list': { file: 'CardListBlock.tsx', deps: ['card', 'input', 'button', 'badge'] },\n 'interactive-slider': { file: 'SliderShowcaseBlock.tsx', deps: ['card', 'button', 'badge'] },\n 'metric-stats': { file: 'MetricStatsBlock.tsx', deps: ['card', 'badge'] },\n 'file-explorer': { file: 'FileExplorerBlock.tsx', deps: ['card', 'button', 'badge'] },\n};\n\nfunction handleAdd(name?: string) {\n if (!name) {\n console.error('\\n❌ Please specify an item to add. Example: npx atomsystem add button\\n');\n handleList();\n return;\n }\n\n const cwd = process.cwd();\n const normalized = name.toLowerCase().trim();\n\n // 1. Check if it's a component\n if (COMPONENT_MAP[normalized]) {\n const fileName = COMPONENT_MAP[normalized];\n const src = path.join(PKG_ROOT, 'components', 'ui', fileName);\n const dest = path.join(cwd, 'components', 'ui', fileName);\n if (fs.existsSync(src)) {\n copyFileSafe(src, dest, `Component (${fileName})`);\n console.log(`\\n✅ Added ${normalized} component to components/ui/${fileName}\\n`);\n } else {\n console.error(`\\n❌ Source component file not found: ${src}\\n`);\n }\n return;\n }\n\n // 2. Check if it's a block\n if (BLOCK_MAP[normalized]) {\n const { file, deps } = BLOCK_MAP[normalized];\n console.log(`\\n📦 Adding block \"${normalized}\" and its dependent components...\\n`);\n\n // Copy dependencies first (Component-First rule)\n deps.forEach((dep) => {\n const depFile = COMPONENT_MAP[dep];\n if (depFile) {\n const srcDep = path.join(PKG_ROOT, 'components', 'ui', depFile);\n const destDep = path.join(cwd, 'components', 'ui', depFile);\n if (fs.existsSync(srcDep)) {\n copyFileSafe(srcDep, destDep, `Dependent Component (${depFile})`);\n }\n }\n });\n\n // Copy block file\n const srcBlock = path.join(PKG_ROOT, 'components', 'blocks', file);\n const destBlock = path.join(cwd, 'components', 'blocks', file);\n if (fs.existsSync(srcBlock)) {\n copyFileSafe(srcBlock, destBlock, `Block (${file})`);\n console.log(`\\n✅ Block \"${normalized}\" successfully added to components/blocks/${file}\\n`);\n } else {\n console.error(`\\n❌ Source block file not found: ${srcBlock}\\n`);\n }\n return;\n }\n\n console.error(`\\n❌ Unknown item: \"${name}\".`);\n handleList();\n}\n\nfunction handleList() {\n console.log(`\nAvailable Components:\n - button (Button, ButtonVariants)\n - card (Card container)\n - badge (Status badge)\n - input (Input with status)\n - table (Table, Header, Row, Cell)\n - tabs (TabsList, TabsTrigger)\n - switch (A11y Switch toggle)\n - modal (Dialog with Esc key support)\n\nAvailable Design Blocks:\n - realtime-chart (Live streaming candlestick/line chart)\n - interactive-chat (AI chatbot feed with suggestions)\n - pricing-table (Monthly/annual tier pricing table)\n - card-list (Responsive grid & list filter)\n - interactive-slider (Cost simulation calculator & carousel)\n - metric-stats (4 KPI executive metric cards)\n - file-explorer (Hierarchical directory tree explorer)\n\nInstall any item:\n npx atomsystem add <item-name>\n`);\n}\n\nfunction handleBuildTokens() {\n const cwd = process.cwd();\n const tokenJsonPath = path.join(cwd, 'tokens', 'token.json');\n const cssPath = path.join(cwd, 'css', 'atom-ui.css');\n\n if (!fs.existsSync(tokenJsonPath)) {\n console.error(`\\n❌ tokens/token.json not found at ${tokenJsonPath}. Run 'npx atomsystem init' first.\\n`);\n return;\n }\n\n try {\n const tokens = JSON.parse(fs.readFileSync(tokenJsonPath, 'utf-8'));\n const css = compileTokensToCss(tokens);\n const cssDir = path.dirname(cssPath);\n if (!fs.existsSync(cssDir)) fs.mkdirSync(cssDir, { recursive: true });\n fs.writeFileSync(cssPath, css, 'utf-8');\n console.log(`\\n✨ Successfully compiled tokens to ${path.relative(cwd, cssPath)}!\\n`);\n } catch (err: any) {\n console.error(`\\n❌ Failed to compile tokens: ${err.message}\\n`);\n }\n}\n\nfunction handleStudio() {\n const portArg = args.find((a) => a.startsWith('--port='));\n const port = portArg ? parseInt(portArg.split('=')[1], 10) : 4000;\n startLocalTokenStudio({ port, cwd: process.cwd() });\n}\n\nfunction showHelp() {\n console.log(`\nAtomSystem CLI - Universal Design Token & Agentic UI System\n\nUsage:\n npx atomsystem <command> [options]\n\nCommands:\n init Initialize AI guidelines, tokens, specs, and CSS in your project\n studio Launch Local Web Token Studio GUI (interactive token customizer)\n build:tokens Compile tokens/token.json into zero-runtime css/atom-ui.css\n add <name> Add a component or block directly to your project\n list List all available components and blocks\n help Display this help message\n version Print version info\n\nOptions for studio:\n --port=<port> Port for the local studio server (default: 4000)\n`);\n}\n\nfunction showVersion() {\n const pkgPath = path.join(PKG_ROOT, 'package.json');\n if (fs.existsSync(pkgPath)) {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n console.log(`atomsystem v${pkg.version}`);\n } else {\n console.log('atomsystem v0.5.1');\n }\n}\n\nswitch (command) {\n case 'init':\n handleInit();\n break;\n case 'studio':\n case 'editor':\n handleStudio();\n break;\n case 'build:tokens':\n case 'compile':\n handleBuildTokens();\n break;\n case 'add':\n handleAdd(targetName);\n break;\n case 'list':\n handleList();\n break;\n case 'version':\n case '-v':\n case '--version':\n showVersion();\n break;\n case 'help':\n case '-h':\n case '--help':\n default:\n showHelp();\n break;\n}\n"]}
package/dist/index.cjs CHANGED
@@ -8907,7 +8907,7 @@ function cn(...inputs) {
8907
8907
 
8908
8908
  // src/index.ts
8909
8909
  var ATOM_UI_CSS_PATH = "atomsystem/css/atom-ui.css";
8910
- var ATOM_VERSION = "0.5.0";
8910
+ var ATOM_VERSION = "0.5.1";
8911
8911
  var ATOM_LIB_NAME = "atomsystem";
8912
8912
 
8913
8913
  exports.ATOM_LIB_NAME = ATOM_LIB_NAME;