@smart-coder-labs/apple-design-system 1.2.2 → 1.3.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../cli/commands/add.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,GAAG,GAAU,YAAY,MAAM,EAAE,kBA2E7C,CAAC"}
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../cli/commands/add.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,GAAG,GAAU,YAAY,MAAM,EAAE,kBAoF7C,CAAC"}
@@ -10,36 +10,40 @@ const fs_extra_1 = __importDefault(require("fs-extra"));
10
10
  const chalk_1 = __importDefault(require("chalk"));
11
11
  const ora_1 = __importDefault(require("ora"));
12
12
  const registry_1 = require("../utils/registry");
13
+ const config_1 = require("../utils/config");
13
14
  const add = async (components) => {
15
+ const available = await (0, registry_1.getAvailableComponents)();
14
16
  if (!components || components.length === 0) {
15
- // If no components specified, list available ones
16
- const available = await (0, registry_1.getAvailableComponents)();
17
- const response = await (0, prompts_1.default)({
18
- type: "multiselect",
19
- name: "items",
20
- message: "Which components would you like to add?",
21
- choices: available.map(c => ({ title: c, value: c })),
22
- min: 1
17
+ const modeResponse = await (0, prompts_1.default)({
18
+ type: "select",
19
+ name: "mode",
20
+ message: "What would you like to do?",
21
+ choices: [
22
+ { title: "Add all components", value: "all" },
23
+ { title: "Select specific components", value: "select" },
24
+ ],
23
25
  });
24
- components = response.items;
26
+ if (modeResponse.mode === "all") {
27
+ components = available;
28
+ console.log(chalk_1.default.green(`\n✓ Selected all ${available.length} components`));
29
+ }
30
+ else {
31
+ const response = await (0, prompts_1.default)({
32
+ type: "multiselect",
33
+ name: "items",
34
+ message: "Which components would you like to add?",
35
+ choices: available.map((c) => ({ title: c, value: c })),
36
+ min: 1,
37
+ });
38
+ components = response.items;
39
+ }
25
40
  }
26
41
  if (!components || components.length === 0) {
27
42
  console.log(chalk_1.default.yellow("No components selected."));
28
43
  return;
29
44
  }
30
- // Load config
31
- let config = { componentsDir: "./components/ui" };
32
- if (fs_extra_1.default.existsSync("design-system.json")) {
33
- try {
34
- config = await fs_extra_1.default.readJSON("design-system.json");
35
- }
36
- catch (e) {
37
- console.warn("Could not read design-system.json, using defaults.");
38
- }
39
- }
40
- else {
41
- console.warn("design-system.json not found. Using default ./components/ui");
42
- }
45
+ const config = await (0, config_1.loadConfig)();
46
+ const dsVersion = await (0, registry_1.getRegistryVersion)();
43
47
  const spinner = (0, ora_1.default)("Installing components...").start();
44
48
  const queue = [...components];
45
49
  const processed = new Set();
@@ -54,26 +58,29 @@ const add = async (components) => {
54
58
  spinner.warn(`Component '${component}' not found.`);
55
59
  continue;
56
60
  }
57
- // Parse main file for local dependencies (e.g., import { Button } from "../Button")
61
+ // Detect local dependencies from main file
58
62
  const mainFile = files.find((f) => f.name === `${component}.tsx`);
59
63
  if (mainFile) {
60
64
  const localImportRegex = /from\s+['"]\.\.\/([A-Z][a-zA-Z0-9]*)['"]/g;
61
65
  let match;
62
66
  while ((match = localImportRegex.exec(mainFile.content)) !== null) {
63
- const dependentComponent = match[1];
64
- if (!processed.has(dependentComponent) && !queue.includes(dependentComponent)) {
65
- queue.push(dependentComponent);
66
- spinner.info(`Detected dependency: ${dependentComponent}`);
67
+ const dep = match[1];
68
+ if (!processed.has(dep) && !queue.includes(dep)) {
69
+ queue.push(dep);
70
+ spinner.info(`Detected dependency: ${dep}`);
67
71
  }
68
72
  }
69
73
  }
70
74
  const componentDir = path_1.default.resolve(process.cwd(), config.componentsDir, component);
71
75
  await fs_extra_1.default.ensureDir(componentDir);
72
76
  for (const file of files) {
73
- await fs_extra_1.default.writeFile(path_1.default.join(componentDir, file.name), file.content);
77
+ const content = config.rsc ? file.content : (0, config_1.stripUseClient)(file.content);
78
+ await fs_extra_1.default.writeFile(path_1.default.join(componentDir, file.name), content);
74
79
  }
80
+ await (0, config_1.recordInstall)(config, component, dsVersion, "folder");
75
81
  spinner.succeed(`Installed ${component}`);
76
82
  }
83
+ await (0, config_1.saveConfig)(config);
77
84
  spinner.stop();
78
85
  console.log(chalk_1.default.bold.green("\nDone!"));
79
86
  };
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../cli/commands/add.ts"],"names":[],"mappings":";;;;;;AACA,sDAA8B;AAC9B,gDAAwB;AACxB,wDAA0B;AAC1B,kDAA0B;AAC1B,8CAAsB;AACtB,gDAA8E;AAEvE,MAAM,GAAG,GAAG,KAAK,EAAE,UAAoB,EAAE,EAAE;IAChD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,kDAAkD;QAClD,MAAM,SAAS,GAAG,MAAM,IAAA,iCAAsB,GAAE,CAAC;QACjD,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAO,EAAC;YAC7B,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,yCAAyC;YAClD,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACrD,GAAG,EAAE,CAAC;SACP,CAAC,CAAC;QACH,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,cAAc;IACd,IAAI,MAAM,GAAG,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC;IAClD,IAAI,kBAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC;YACD,MAAM,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACvE,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;IAExD,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,SAAS;QAErD,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,GAAG,cAAc,SAAS,KAAK,CAAC;QAE5C,MAAM,KAAK,GAAG,MAAM,IAAA,4BAAiB,EAAC,SAAS,CAAC,CAAC;QAEjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,cAAc,SAAS,cAAc,CAAC,CAAC;YACpD,SAAS;QACX,CAAC;QAED,oFAAoF;QACpF,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,SAAS,MAAM,CAAC,CAAC;QAClE,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,gBAAgB,GAAG,2CAA2C,CAAC;YACrE,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAClE,MAAM,kBAAkB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;oBAC9E,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;oBAC/B,OAAO,CAAC,IAAI,CAAC,wBAAwB,kBAAkB,EAAE,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QAClF,MAAM,kBAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,aAAa,SAAS,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,CAAC,IAAI,EAAE,CAAC;IACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC;AA3EW,QAAA,GAAG,OA2Ed"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../cli/commands/add.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../cli/commands/init.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,IAAI,qBAkHhB,CAAC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../cli/commands/init.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,IAAI,qBA0LhB,CAAC"}
@@ -10,49 +10,109 @@ const fs_extra_1 = __importDefault(require("fs-extra"));
10
10
  const chalk_1 = __importDefault(require("chalk"));
11
11
  const ora_1 = __importDefault(require("ora"));
12
12
  const registry_1 = require("../utils/registry");
13
+ const framework_1 = require("../utils/framework");
14
+ const FRAMEWORK_CHOICES = [
15
+ { title: "Next.js (App Router)", value: "next-app" },
16
+ { title: "Next.js (Pages Router)", value: "next-pages" },
17
+ { title: "Vite", value: "vite" },
18
+ { title: "Astro", value: "astro" },
19
+ { title: "Remix / React Router", value: "remix" },
20
+ { title: "Other", value: "unknown" },
21
+ ];
22
+ function resolveRsc(value) {
23
+ if (value === "next-app")
24
+ return { framework: "next", rsc: true };
25
+ if (value === "next-pages")
26
+ return { framework: "next", rsc: false };
27
+ return { framework: value, rsc: false };
28
+ }
13
29
  const init = async () => {
14
- console.log(chalk_1.default.bold.green("🍏 Apple Design System Initialization"));
15
- console.log("This utility will help you configure your project.");
30
+ console.log(chalk_1.default.bold.green("\n🍏 Apple Design System Initialization\n"));
31
+ // ── 1. Auto-detect framework ──────────────────────────────────────────────
32
+ const detected = (0, framework_1.detectFramework)(process.cwd());
33
+ if (detected.framework !== "unknown") {
34
+ const rscNote = detected.rsc ? chalk_1.default.gray(" (App Router — RSC enabled)") : "";
35
+ console.log(chalk_1.default.cyan(`Detected framework: `) +
36
+ chalk_1.default.bold(detected.label) +
37
+ rscNote);
38
+ }
39
+ else {
40
+ console.log(chalk_1.default.yellow("Could not auto-detect framework."));
41
+ }
42
+ // ── 2. Confirm or override ────────────────────────────────────────────────
43
+ let framework = detected.framework;
44
+ let rsc = detected.rsc;
45
+ if (detected.framework !== "unknown") {
46
+ const { confirm } = await (0, prompts_1.default)({
47
+ type: "confirm",
48
+ name: "confirm",
49
+ message: `Is this correct?`,
50
+ initial: true,
51
+ });
52
+ if (!confirm) {
53
+ const { choice } = await (0, prompts_1.default)({
54
+ type: "select",
55
+ name: "choice",
56
+ message: "Select your framework:",
57
+ choices: FRAMEWORK_CHOICES,
58
+ });
59
+ const resolved = resolveRsc(choice);
60
+ framework = resolved.framework;
61
+ rsc = resolved.rsc;
62
+ }
63
+ }
64
+ else {
65
+ const { choice } = await (0, prompts_1.default)({
66
+ type: "select",
67
+ name: "choice",
68
+ message: "Select your framework:",
69
+ choices: FRAMEWORK_CHOICES,
70
+ });
71
+ const resolved = resolveRsc(choice);
72
+ framework = resolved.framework;
73
+ rsc = resolved.rsc;
74
+ }
75
+ // ── 3. Rest of project config ─────────────────────────────────────────────
16
76
  const response = await (0, prompts_1.default)([
17
77
  {
18
78
  type: "text",
19
79
  name: "projectRoot",
20
- message: "What is your project root directory?",
80
+ message: "Project root directory?",
21
81
  initial: "./src",
22
82
  },
23
83
  {
24
84
  type: "text",
25
85
  name: "componentsDir",
26
- message: "Where would you like to install components?",
86
+ message: "Where to install components?",
27
87
  initial: (prev) => `${prev}/components/ui`,
28
88
  },
29
89
  {
30
90
  type: "text",
31
91
  name: "globalCss",
32
- message: "Where is your global CSS file?",
33
- initial: (prev, values) => `${values.projectRoot}/index.css`,
92
+ message: "Global CSS file path?",
93
+ initial: (_prev, values) => `${values.projectRoot}/index.css`,
34
94
  },
35
95
  {
36
96
  type: "confirm",
37
97
  name: "installDeps",
38
- message: "Would you like to install required dependencies now?",
98
+ message: "Install required dependencies now?",
39
99
  initial: true,
40
100
  },
41
101
  ]);
42
102
  const spin = (0, ora_1.default)("Configuring project...").start();
43
- // Create config file
103
+ // ── 4. Write design-system.json ───────────────────────────────────────────
44
104
  const config = {
105
+ framework,
106
+ rsc,
45
107
  componentsDir: response.componentsDir,
46
108
  globalCss: response.globalCss,
109
+ components: {},
47
110
  };
48
111
  await fs_extra_1.default.writeJSON("design-system.json", config, { spaces: 2 });
49
- spin.succeed("Configuration file design-system.json created.");
50
- // Check/Create components directory
112
+ spin.succeed("Created design-system.json");
113
+ // ── 5. Ensure directories ─────────────────────────────────────────────────
51
114
  const resolvedComponentsDir = path_1.default.resolve(process.cwd(), response.componentsDir);
52
115
  await fs_extra_1.default.ensureDir(resolvedComponentsDir);
53
- // Also create a lib/utils.ts for cn helper if it doesn't exist
54
- // We try to infer lib location from componentsDir or projectRoot
55
- // If components are in src/components/ui, lib should be src/lib
56
116
  const utilsDir = path_1.default.resolve(process.cwd(), response.projectRoot, "lib");
57
117
  const utilsPath = path_1.default.resolve(utilsDir, "utils.ts");
58
118
  if (!fs_extra_1.default.existsSync(utilsPath)) {
@@ -64,9 +124,9 @@ export function cn(...inputs: ClassValue[]) {
64
124
  return twMerge(clsx(inputs))
65
125
  }
66
126
  `);
67
- console.log(chalk_1.default.green(`Created ${path_1.default.relative(process.cwd(), utilsPath)} for 'cn' utility.`));
127
+ console.log(chalk_1.default.green(`Created ${path_1.default.relative(process.cwd(), utilsPath)}`));
68
128
  }
69
- // Fetch and create styles directory and write apple-ds.css
129
+ // ── 6. Fetch and write global CSS ─────────────────────────────────────────
70
130
  spin.text = "Fetching global styles...";
71
131
  const cssContent = await (0, registry_1.getGlobalCss)();
72
132
  if (cssContent) {
@@ -75,45 +135,52 @@ export function cn(...inputs: ClassValue[]) {
75
135
  const cssPath = path_1.default.resolve(stylesDir, "apple-ds.css");
76
136
  await fs_extra_1.default.writeFile(cssPath, cssContent);
77
137
  console.log(chalk_1.default.green(`Created ${path_1.default.relative(process.cwd(), cssPath)}`));
78
- // Inject CSS import into global CSS if provided
79
138
  if (response.globalCss) {
80
139
  const globalCssPath = path_1.default.resolve(process.cwd(), response.globalCss);
81
140
  if (fs_extra_1.default.existsSync(globalCssPath)) {
82
141
  let existingCss = await fs_extra_1.default.readFile(globalCssPath, "utf-8");
83
- // Calculate relative path from global CSS to apple-ds.css
84
142
  const globalCssDir = path_1.default.dirname(globalCssPath);
85
143
  const relativePath = path_1.default.relative(globalCssDir, cssPath);
86
- // Ensure it starts with ./ or ../
87
144
  const importPath = relativePath.startsWith(".") ? relativePath : `./${relativePath}`;
88
145
  const importStatement = `@import '${importPath}';`;
89
146
  if (!existingCss.includes("apple-ds.css")) {
90
- // Prepend to file
91
147
  await fs_extra_1.default.writeFile(globalCssPath, `${importStatement}\n${existingCss}`);
92
148
  console.log(chalk_1.default.green(`Updated ${response.globalCss} with design system styles.`));
93
149
  }
94
150
  }
95
151
  else {
96
- console.log(chalk_1.default.yellow(`Global CSS file not found at ${response.globalCss}. Skipping style import.`));
152
+ console.log(chalk_1.default.yellow(`CSS file not found at ${response.globalCss}. Skipping import.`));
97
153
  }
98
154
  }
99
155
  }
100
156
  else {
101
- spin.warn("Failed to fetch global styles. Please install styles manually.");
157
+ spin.warn("Failed to fetch global styles. Install styles manually.");
102
158
  }
159
+ // ── 7. Install deps ───────────────────────────────────────────────────────
103
160
  if (response.installDeps) {
104
161
  spin.start("Installing dependencies...");
105
162
  try {
106
- const { execSync } = require('child_process');
107
- execSync('npm install clsx tailwind-merge cva framer-motion lucide-react', { stdio: 'inherit' });
163
+ const { execSync } = require("child_process");
164
+ execSync("npm install clsx tailwind-merge cva framer-motion lucide-react", {
165
+ stdio: "inherit",
166
+ });
108
167
  spin.succeed("Dependencies installed.");
109
168
  }
110
- catch (e) {
111
- spin.fail("Failed to install dependencies. Please run manually:");
169
+ catch {
170
+ spin.fail("Failed to install dependencies. Run manually:");
112
171
  console.log(chalk_1.default.cyan("npm install clsx tailwind-merge cva framer-motion lucide-react"));
113
172
  }
114
173
  }
115
- console.log(chalk_1.default.bold.green("\nSuccess! Project initialized."));
116
- console.log(`You can now run ${chalk_1.default.cyan("npx apple-design-system add [component]")} to add components.`);
174
+ // ── 8. Framework-specific hints ───────────────────────────────────────────
175
+ if (framework === "astro") {
176
+ console.log(chalk_1.default.yellow("\n⚠ Astro: Components use React — make sure to add the React integration\n" +
177
+ " and use client:* directives when mounting them in .astro files."));
178
+ }
179
+ if (!rsc && framework !== "astro") {
180
+ console.log(chalk_1.default.gray("\nℹ 'use client' directives are stripped from components (not needed outside Next.js App Router)."));
181
+ }
182
+ console.log(chalk_1.default.bold.green("\n✓ Project initialized."));
183
+ console.log(`Run ${chalk_1.default.cyan("npx apple-design-system add")} to install components.`);
117
184
  };
118
185
  exports.init = init;
119
186
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../cli/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../cli/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"update-components.d.ts","sourceRoot":"","sources":["../../../cli/commands/update-components.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,gBAAgB,qBA2H5B,CAAC"}
1
+ {"version":3,"file":"update-components.d.ts","sourceRoot":"","sources":["../../../cli/commands/update-components.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,gBAAgB,qBAwG5B,CAAC"}
@@ -10,65 +10,44 @@ const chalk_1 = __importDefault(require("chalk"));
10
10
  const ora_1 = __importDefault(require("ora"));
11
11
  const prompts_1 = __importDefault(require("prompts"));
12
12
  const registry_1 = require("../utils/registry");
13
+ const config_1 = require("../utils/config");
13
14
  const updateComponents = async () => {
14
- // 1. Load config
15
- let config = { componentsDir: "./components/ui" };
16
- if (fs_extra_1.default.existsSync("design-system.json")) {
17
- try {
18
- config = await fs_extra_1.default.readJSON("design-system.json");
19
- }
20
- catch (e) {
21
- console.warn("Could not read design-system.json, using defaults.");
22
- }
23
- }
24
- else {
25
- console.warn("design-system.json not found. Using default ./components/ui");
26
- }
15
+ const config = await (0, config_1.loadConfig)();
27
16
  const resolvedComponentsDir = path_1.default.resolve(process.cwd(), config.componentsDir);
28
- // 2. Check if components directory exists
29
- if (!fs_extra_1.default.existsSync(resolvedComponentsDir)) {
30
- console.log(chalk_1.default.yellow(`Components directory not found at ${config.componentsDir}`));
31
- return;
32
- }
33
- // 3. Get installed components
17
+ // 1. Scan installed components (folders + flat files + config tracking)
34
18
  const spinner = (0, ora_1.default)("Scanning for installed components...").start();
35
- const entries = await fs_extra_1.default.readdir(resolvedComponentsDir, { withFileTypes: true });
36
19
  const availableComponents = await (0, registry_1.getAvailableComponents)();
37
- const installedComponents = entries
38
- .filter((e) => e.isDirectory())
39
- .map((e) => e.name)
40
- .filter((name) => availableComponents.includes(name))
41
- .sort();
20
+ const installedComponents = await (0, config_1.detectInstalledComponents)(resolvedComponentsDir, availableComponents, config);
42
21
  spinner.stop();
43
22
  if (installedComponents.length === 0) {
44
23
  console.log(chalk_1.default.yellow("No installed components found."));
45
24
  return;
46
25
  }
47
26
  console.log(chalk_1.default.blue(`\nFound ${installedComponents.length} installed components:\n`));
48
- // 4. Present selection options
49
- const response = await (0, prompts_1.default)([
50
- {
51
- type: "select",
52
- name: "updateMode",
53
- message: "What would you like to do?",
54
- choices: [
55
- { title: "Update all components", value: "all" },
56
- { title: "Select specific components", value: "select" },
57
- ],
58
- },
59
- ]);
27
+ // 2. Selection
28
+ const response = await (0, prompts_1.default)({
29
+ type: "select",
30
+ name: "updateMode",
31
+ message: "What would you like to do?",
32
+ choices: [
33
+ { title: "Update all components", value: "all" },
34
+ { title: "Select specific components", value: "select" },
35
+ ],
36
+ });
60
37
  let componentsToUpdate = [];
61
38
  if (response.updateMode === "all") {
62
39
  componentsToUpdate = installedComponents;
63
40
  console.log(chalk_1.default.green(`\n✓ Selected all ${installedComponents.length} components`));
64
41
  }
65
42
  else {
66
- // Let user select specific components
67
43
  const selectResponse = await (0, prompts_1.default)({
68
44
  type: "multiselect",
69
45
  name: "items",
70
46
  message: "Which components would you like to update?",
71
- choices: installedComponents.map((c) => ({ title: c, value: c })),
47
+ choices: installedComponents.map((c) => ({
48
+ title: `${c}${config.components[c] ? chalk_1.default.gray(` (v${config.components[c].version})`) : ""}`,
49
+ value: c,
50
+ })),
72
51
  min: 1,
73
52
  });
74
53
  componentsToUpdate = selectResponse.items;
@@ -78,7 +57,8 @@ const updateComponents = async () => {
78
57
  }
79
58
  console.log(chalk_1.default.green(`\n✓ Selected ${componentsToUpdate.length} components`));
80
59
  }
81
- // 5. Fetch and update components
60
+ // 3. Fetch and update
61
+ const dsVersion = await (0, registry_1.getRegistryVersion)();
82
62
  const updateSpinner = (0, ora_1.default)("Updating components...").start();
83
63
  let successCount = 0;
84
64
  let failCount = 0;
@@ -94,8 +74,10 @@ const updateComponents = async () => {
94
74
  const componentDir = path_1.default.resolve(resolvedComponentsDir, component);
95
75
  await fs_extra_1.default.ensureDir(componentDir);
96
76
  for (const file of files) {
97
- await fs_extra_1.default.writeFile(path_1.default.join(componentDir, file.name), file.content);
77
+ const content = config.rsc ? file.content : (0, config_1.stripUseClient)(file.content);
78
+ await fs_extra_1.default.writeFile(path_1.default.join(componentDir, file.name), content);
98
79
  }
80
+ await (0, config_1.recordInstall)(config, component, dsVersion, "folder");
99
81
  updateSpinner.succeed(`Updated ${component}`);
100
82
  successCount++;
101
83
  }
@@ -105,7 +87,8 @@ const updateComponents = async () => {
105
87
  }
106
88
  }
107
89
  updateSpinner.stop();
108
- // 6. Summary
90
+ await (0, config_1.saveConfig)(config);
91
+ // 4. Summary
109
92
  console.log(chalk_1.default.bold("\n=== Update Summary ==="));
110
93
  console.log(chalk_1.default.green(`✓ Successfully updated: ${successCount} components`));
111
94
  if (failCount > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"update-components.js","sourceRoot":"","sources":["../../../cli/commands/update-components.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update-components.js","sourceRoot":"","sources":["../../../cli/commands/update-components.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export interface ComponentRecord {
2
+ version: string;
3
+ type: "folder" | "flat";
4
+ installedAt: string;
5
+ updatedAt: string;
6
+ }
7
+ import type { Framework } from "./framework";
8
+ export interface DesignSystemConfig {
9
+ componentsDir: string;
10
+ globalCss?: string;
11
+ framework: Framework;
12
+ /** True when using React Server Components (Next.js App Router). */
13
+ rsc: boolean;
14
+ components: Record<string, ComponentRecord>;
15
+ }
16
+ export declare function loadConfig(): Promise<DesignSystemConfig>;
17
+ export declare function saveConfig(config: DesignSystemConfig): Promise<void>;
18
+ /**
19
+ * Strips the `'use client'` directive from a file's content.
20
+ * Used for non-RSC projects (Vite, Astro, Remix, Next.js Pages Router).
21
+ */
22
+ export declare function stripUseClient(content: string): string;
23
+ export declare function recordInstall(config: DesignSystemConfig, componentName: string, version: string, type: "folder" | "flat"): Promise<DesignSystemConfig>;
24
+ /**
25
+ * Detect installed components from disk.
26
+ * Supports both folder structure (ComponentName/) and flat files (ComponentName.tsx).
27
+ * Also merges components tracked in design-system.json.
28
+ */
29
+ export declare function detectInstalledComponents(resolvedComponentsDir: string, availableComponents: string[], config: DesignSystemConfig): Promise<string[]>;
30
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../cli/utils/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,oEAAoE;IACpE,GAAG,EAAE,OAAO,CAAC;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC7C;AAUD,wBAAsB,UAAU,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAY9D;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAItD;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,kBAAkB,EAC1B,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,QAAQ,GAAG,MAAM,GACtB,OAAO,CAAC,kBAAkB,CAAC,CAU7B;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,qBAAqB,EAAE,MAAM,EAC7B,mBAAmB,EAAE,MAAM,EAAE,EAC7B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,MAAM,EAAE,CAAC,CA8BnB"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loadConfig = loadConfig;
7
+ exports.saveConfig = saveConfig;
8
+ exports.stripUseClient = stripUseClient;
9
+ exports.recordInstall = recordInstall;
10
+ exports.detectInstalledComponents = detectInstalledComponents;
11
+ const fs_extra_1 = __importDefault(require("fs-extra"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const CONFIG_FILE = "design-system.json";
14
+ const DEFAULT_CONFIG = {
15
+ componentsDir: "./components/ui",
16
+ framework: "unknown",
17
+ rsc: false,
18
+ components: {},
19
+ };
20
+ async function loadConfig() {
21
+ if (!fs_extra_1.default.existsSync(CONFIG_FILE)) {
22
+ console.warn("design-system.json not found. Using defaults.");
23
+ return { ...DEFAULT_CONFIG };
24
+ }
25
+ try {
26
+ const raw = await fs_extra_1.default.readJSON(CONFIG_FILE);
27
+ return { ...DEFAULT_CONFIG, ...raw, components: raw.components ?? {} };
28
+ }
29
+ catch {
30
+ console.warn("Could not read design-system.json. Using defaults.");
31
+ return { ...DEFAULT_CONFIG };
32
+ }
33
+ }
34
+ async function saveConfig(config) {
35
+ await fs_extra_1.default.writeJSON(CONFIG_FILE, config, { spaces: 2 });
36
+ }
37
+ /**
38
+ * Strips the `'use client'` directive from a file's content.
39
+ * Used for non-RSC projects (Vite, Astro, Remix, Next.js Pages Router).
40
+ */
41
+ function stripUseClient(content) {
42
+ return content
43
+ .replace(/^['"]use client['"]\s*\n?/m, "")
44
+ .trimStart();
45
+ }
46
+ async function recordInstall(config, componentName, version, type) {
47
+ const now = new Date().toISOString();
48
+ const existing = config.components[componentName];
49
+ config.components[componentName] = {
50
+ version,
51
+ type,
52
+ installedAt: existing?.installedAt ?? now,
53
+ updatedAt: now,
54
+ };
55
+ return config;
56
+ }
57
+ /**
58
+ * Detect installed components from disk.
59
+ * Supports both folder structure (ComponentName/) and flat files (ComponentName.tsx).
60
+ * Also merges components tracked in design-system.json.
61
+ */
62
+ async function detectInstalledComponents(resolvedComponentsDir, availableComponents, config) {
63
+ const found = new Set();
64
+ // 1. From disk
65
+ if (fs_extra_1.default.existsSync(resolvedComponentsDir)) {
66
+ const entries = await fs_extra_1.default.readdir(resolvedComponentsDir, { withFileTypes: true });
67
+ for (const entry of entries) {
68
+ if (entry.isDirectory() && availableComponents.includes(entry.name)) {
69
+ found.add(entry.name);
70
+ }
71
+ else if (entry.isFile()) {
72
+ const name = path_1.default.basename(entry.name, path_1.default.extname(entry.name));
73
+ if ((entry.name.endsWith(".tsx") || entry.name.endsWith(".ts")) &&
74
+ availableComponents.includes(name)) {
75
+ found.add(name);
76
+ }
77
+ }
78
+ }
79
+ }
80
+ // 2. From config tracking (catches components installed elsewhere)
81
+ for (const name of Object.keys(config.components)) {
82
+ if (availableComponents.includes(name)) {
83
+ found.add(name);
84
+ }
85
+ }
86
+ return Array.from(found).sort();
87
+ }
88
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../cli/utils/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type Framework = "next" | "vite" | "astro" | "remix" | "unknown";
2
+ export interface FrameworkInfo {
3
+ framework: Framework;
4
+ /** True when the project uses React Server Components (Next.js App Router). */
5
+ rsc: boolean;
6
+ label: string;
7
+ }
8
+ export declare function detectFramework(cwd?: string): FrameworkInfo;
9
+ //# sourceMappingURL=framework.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework.d.ts","sourceRoot":"","sources":["../../../cli/utils/framework.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAExE,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,SAAS,CAAC;IACrB,+EAA+E;IAC/E,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAwDD,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAsB,GAAG,aAAa,CAW1E"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.detectFramework = detectFramework;
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const CONFIG_FILES = [
10
+ { file: ["next.config.js", "next.config.ts", "next.config.mjs", "next.config.cjs"], framework: "next" },
11
+ { file: ["astro.config.mjs", "astro.config.ts", "astro.config.js"], framework: "astro" },
12
+ { file: ["react-router.config.ts", "react-router.config.js", "remix.config.js"], framework: "remix" },
13
+ { file: ["vite.config.ts", "vite.config.js", "vite.config.mts", "vite.config.mjs"], framework: "vite" },
14
+ ];
15
+ const FRAMEWORK_LABELS = {
16
+ next: "Next.js",
17
+ vite: "Vite",
18
+ astro: "Astro",
19
+ remix: "Remix / React Router",
20
+ unknown: "Unknown",
21
+ };
22
+ function hasAppRouter(cwd) {
23
+ return (fs_extra_1.default.existsSync(path_1.default.join(cwd, "app")) ||
24
+ fs_extra_1.default.existsSync(path_1.default.join(cwd, "src", "app")));
25
+ }
26
+ function detectFromConfigFiles(cwd) {
27
+ for (const { file, framework } of CONFIG_FILES) {
28
+ const files = Array.isArray(file) ? file : [file];
29
+ if (files.some((f) => fs_extra_1.default.existsSync(path_1.default.join(cwd, f)))) {
30
+ return framework;
31
+ }
32
+ }
33
+ return null;
34
+ }
35
+ function detectFromPackageJson(cwd) {
36
+ const pkgPath = path_1.default.join(cwd, "package.json");
37
+ if (!fs_extra_1.default.existsSync(pkgPath))
38
+ return null;
39
+ try {
40
+ const pkg = fs_extra_1.default.readJSONSync(pkgPath);
41
+ const deps = {
42
+ ...pkg.dependencies,
43
+ ...pkg.devDependencies,
44
+ };
45
+ if (deps["next"])
46
+ return "next";
47
+ if (deps["astro"])
48
+ return "astro";
49
+ if (deps["@remix-run/react"] || deps["react-router"])
50
+ return "remix";
51
+ if (deps["vite"])
52
+ return "vite";
53
+ }
54
+ catch {
55
+ // ignore
56
+ }
57
+ return null;
58
+ }
59
+ function detectFramework(cwd = process.cwd()) {
60
+ const framework = detectFromConfigFiles(cwd) ?? detectFromPackageJson(cwd) ?? "unknown";
61
+ const rsc = framework === "next" && hasAppRouter(cwd);
62
+ return {
63
+ framework,
64
+ rsc,
65
+ label: FRAMEWORK_LABELS[framework],
66
+ };
67
+ }
68
+ //# sourceMappingURL=framework.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework.js","sourceRoot":"","sources":["../../../cli/utils/framework.ts"],"names":[],"mappings":";;;;;AAkEA,0CAWC;AA7ED,wDAA0B;AAC1B,gDAAwB;AAWxB,MAAM,YAAY,GAA6D;IAC7E,EAAE,IAAI,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE;IACvG,EAAE,IAAI,EAAE,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE;IACxF,EAAE,IAAI,EAAE,CAAC,wBAAwB,EAAE,wBAAwB,EAAE,iBAAiB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE;IACrG,EAAE,IAAI,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE;CACxG,CAAC;AAEF,MAAM,gBAAgB,GAA8B;IAClD,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,sBAAsB;IAC7B,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,CACL,kBAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACpC,kBAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAC5C,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAW;IACxC,KAAK,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,YAAY,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAW;IACxC,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/C,IAAI,CAAC,kBAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,kBAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG;YACX,GAAG,GAAG,CAAC,YAAY;YACnB,GAAG,GAAG,CAAC,eAAe;SACvB,CAAC;QAEF,IAAI,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QAChC,IAAI,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;QAClC,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC;YAAE,OAAO,OAAO,CAAC;QACrE,IAAI,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,eAAe,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACzD,MAAM,SAAS,GACb,qBAAqB,CAAC,GAAG,CAAC,IAAI,qBAAqB,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;IAExE,MAAM,GAAG,GAAG,SAAS,KAAK,MAAM,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;IAEtD,OAAO;QACL,SAAS;QACT,GAAG;QACH,KAAK,EAAE,gBAAgB,CAAC,SAAS,CAAC;KACnC,CAAC;AACJ,CAAC"}
@@ -1,3 +1,4 @@
1
+ export declare function getRegistryVersion(): Promise<string>;
1
2
  export declare function getAvailableComponents(): Promise<string[]>;
2
3
  export declare function getComponentFiles(componentName: string): Promise<Array<{
3
4
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../cli/utils/registry.ts"],"names":[],"mappings":"AAuCA,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAGhE;AAED,wBAAsB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAAC,CAuBvH;AAED,wBAAsB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAIvF;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAW3D"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../cli/utils/registry.ts"],"names":[],"mappings":"AAuCA,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAG1D;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAGhE;AAED,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAAC,CAuB1D;AAED,wBAAsB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAIvF;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAW3D"}
@@ -1,12 +1,11 @@
1
1
  "use strict";
2
- // This registry.ts now fetches from a remote JSON file on GitHub Raw.
3
- // It replaces local file system calls with fetch.
4
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getRegistryVersion = getRegistryVersion;
5
4
  exports.getAvailableComponents = getAvailableComponents;
6
5
  exports.getComponentFiles = getComponentFiles;
7
6
  exports.getComponentDependencies = getComponentDependencies;
8
7
  exports.getGlobalCss = getGlobalCss;
9
- // TODO: Make this configurable? For now hardcoded to main branch.
8
+ // Fetches from a remote JSON registry on GitHub Raw.
10
9
  const REGISTRY_URL = "https://raw.githubusercontent.com/smart-coder-labs/design-system/refs/heads/main/registry.json";
11
10
  const CSS_URL = "https://raw.githubusercontent.com/smart-coder-labs/design-system/refs/heads/main/globals.css";
12
11
  let cachedRegistry = null;
@@ -16,10 +15,9 @@ async function fetchRegistry() {
16
15
  try {
17
16
  const res = await fetch(REGISTRY_URL);
18
17
  if (!res.ok) {
19
- throw new Error(`Failed to fetch registry from ${REGISTRY_URL}: ${res.statusText}`);
18
+ throw new Error(`Failed to fetch registry: ${res.statusText}`);
20
19
  }
21
- const data = await res.json();
22
- cachedRegistry = data;
20
+ cachedRegistry = (await res.json());
23
21
  return cachedRegistry;
24
22
  }
25
23
  catch (error) {
@@ -27,9 +25,13 @@ async function fetchRegistry() {
27
25
  return {};
28
26
  }
29
27
  }
28
+ async function getRegistryVersion() {
29
+ const registry = await fetchRegistry();
30
+ return registry._version ?? "unknown";
31
+ }
30
32
  async function getAvailableComponents() {
31
33
  const registry = await fetchRegistry();
32
- return Object.keys(registry);
34
+ return Object.keys(registry).filter((k) => k !== "_version");
33
35
  }
34
36
  async function getComponentFiles(componentName) {
35
37
  const registry = await fetchRegistry();
@@ -41,7 +43,7 @@ async function getComponentFiles(componentName) {
41
43
  const results = await Promise.all(component.files.map(async (file) => {
42
44
  const res = await fetch(file.url);
43
45
  if (!res.ok) {
44
- throw new Error(`Failed to fetch ${file.name} from ${file.url}: ${res.statusText}`);
46
+ throw new Error(`Failed to fetch ${file.name}: ${res.statusText}`);
45
47
  }
46
48
  return { name: file.name, content: await res.text() };
47
49
  }));
@@ -55,13 +57,13 @@ async function getComponentFiles(componentName) {
55
57
  async function getComponentDependencies(componentName) {
56
58
  const registry = await fetchRegistry();
57
59
  const component = registry[componentName];
58
- return component?.dependencies || [];
60
+ return component?.dependencies ?? [];
59
61
  }
60
62
  async function getGlobalCss() {
61
63
  try {
62
64
  const res = await fetch(CSS_URL);
63
65
  if (!res.ok) {
64
- throw new Error(`Failed to fetch global css from ${CSS_URL}: ${res.statusText}`);
66
+ throw new Error(`Failed to fetch global css: ${res.statusText}`);
65
67
  }
66
68
  return await res.text();
67
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../cli/utils/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../cli/utils/registry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smart-coder-labs/apple-design-system",
3
- "version": "1.2.2",
3
+ "version": "1.3.0",
4
4
  "description": "Design system completo estilo Apple (macOS/iOS/VisionOS) con Framer Motion",
5
5
  "keywords": [
6
6
  "apple-design-system",