skillui 1.1.4 → 1.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/cli.js +25 -8
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -104561,7 +104561,7 @@ gradient.pastel = pastel;
104561
104561
  // src/ui.ts
104562
104562
  var import_cli_progress = __toESM(require_cli_progress());
104563
104563
  var path15 = __toESM(require("path"));
104564
- var VERSION = "1.1.4";
104564
+ var VERSION = "1.1.5";
104565
104565
  function padAnsi(str, width) {
104566
104566
  const raw = stripAnsi(str);
104567
104567
  return str + " ".repeat(Math.max(0, width - raw.length));
@@ -104755,7 +104755,7 @@ function showUltraPlaywrightError() {
104755
104755
  console.log("");
104756
104756
  }
104757
104757
  function showResults(data) {
104758
- const { profile, animations, skillFilePath, designMdPath, projectName } = data;
104758
+ const { profile, animations, skillFilePath, designMdPath, projectName, skillInstalled } = data;
104759
104759
  const fontCount = new Set(profile.typography.map((t) => t.fontFamily)).size;
104760
104760
  const framework = profile.frameworks.map((f) => f.name).join(", ") || "none detected";
104761
104761
  const darkMode = profile.designTraits.hasDarkMode ? "detected" : "not detected";
@@ -104806,17 +104806,17 @@ function showResults(data) {
104806
104806
  }));
104807
104807
  console.log("");
104808
104808
  }
104809
+ const skillLine = skillInstalled ? source_default.hex("#4ade80")(" \u2713 Skill auto-installed") + source_default.dim(" \u2014 type ") + source_default.hex("#38bdf8")("/skills") + source_default.dim(" in Claude Code to see it") : source_default.dim(" Copy SKILL.md to ") + source_default.hex("#38bdf8")("~/.claude/skills/" + projectName + ".md");
104809
104810
  const nextSteps = [
104810
- source_default.dim(" Install skill in Claude Code:"),
104811
- " " + source_default.hex("#38bdf8")("claude skill install ./" + projectName + ".skill"),
104811
+ skillLine,
104812
104812
  "",
104813
- source_default.dim(" Or drop DESIGN.md into your project and ask Claude:"),
104814
- " " + source_default.dim('"Build me a UI that matches this design system"')
104813
+ source_default.dim(" Then ask Claude:"),
104814
+ " " + source_default.dim('"Build me a UI that matches the ' + projectName + ' design system"')
104815
104815
  ].join("\n");
104816
104816
  console.log(boxen(nextSteps, {
104817
104817
  title: source_default.bold(" Next steps "),
104818
104818
  borderStyle: "round",
104819
- borderColor: "yellow",
104819
+ borderColor: skillInstalled ? "green" : "yellow",
104820
104820
  width: 76,
104821
104821
  padding: { top: 0, bottom: 0, left: 0, right: 1 }
104822
104822
  }));
@@ -104973,12 +104973,14 @@ program2.name("skillui").description("Reverse-engineer design systems from any p
104973
104973
  succeedSpinner(spWrite, "DESIGN.md", designMdPath);
104974
104974
  }
104975
104975
  let skillFilePath;
104976
+ let skillInstalled = false;
104976
104977
  if (shouldWriteSkill) {
104977
104978
  const spSkill = startSpinner("Bundling .skill package...");
104978
104979
  try {
104979
104980
  const result = await generateSkill(profile, designMdContent, path16.resolve(opts.out), screenshotPath, ultraAnimations);
104980
104981
  skillFilePath = result.skillFile;
104981
104982
  succeedSpinner(spSkill, ".skill package", skillFilePath);
104983
+ skillInstalled = installSkillForClaude(result.skillDir, safeName);
104982
104984
  } catch (e) {
104983
104985
  failSpinner(spSkill, ".skill package", e.message);
104984
104986
  throw e;
@@ -104989,7 +104991,8 @@ program2.name("skillui").description("Reverse-engineer design systems from any p
104989
104991
  animations: ultraAnimations ?? void 0,
104990
104992
  skillFilePath,
104991
104993
  designMdPath,
104992
- projectName: safeName
104994
+ projectName: safeName,
104995
+ skillInstalled
104993
104996
  });
104994
104997
  } catch (err) {
104995
104998
  console.error(`
@@ -104999,6 +105002,20 @@ program2.name("skillui").description("Reverse-engineer design systems from any p
104999
105002
  }
105000
105003
  });
105001
105004
  program2.parse();
105005
+ function installSkillForClaude(skillDir, safeName) {
105006
+ try {
105007
+ const skillMdSrc = path16.join(skillDir, "SKILL.md");
105008
+ if (!fs14.existsSync(skillMdSrc)) return false;
105009
+ const homeDir = process.env.HOME || process.env.USERPROFILE || "";
105010
+ const claudeSkillsDir = path16.join(homeDir, ".claude", "skills");
105011
+ fs14.mkdirSync(claudeSkillsDir, { recursive: true });
105012
+ const dest = path16.join(claudeSkillsDir, `${safeName}.md`);
105013
+ fs14.copyFileSync(skillMdSrc, dest);
105014
+ return true;
105015
+ } catch {
105016
+ return false;
105017
+ }
105018
+ }
105002
105019
  /*! Bundled license information:
105003
105020
 
105004
105021
  tmp/lib/tmp.js:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillui",
3
- "version": "1.1.4",
3
+ "version": "1.1.5",
4
4
  "description": "Reverse-engineer design systems from any website, repo, or project. Extracts colors, fonts, spacing, animations, and components — packaged as a .skill file for Claude. Pure static analysis, zero AI, zero API keys.",
5
5
  "main": "dist/cli.js",
6
6
  "bin": {