@beaket/ui 1.5.1 → 1.7.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beaket/ui",
3
- "version": "1.5.1",
3
+ "version": "1.7.0",
4
4
  "description": "CLI tool for adding Beaket UI components to your project",
5
5
  "type": "module",
6
6
  "bin": {
@@ -14,7 +14,7 @@ export async function add(componentName: string, options: AddOptions) {
14
14
  // Read config
15
15
  const config = await getConfig();
16
16
  if (!config) {
17
- console.log(pc.red("Error:"), "beaket.json not found.");
17
+ console.log(pc.red("Error:"), "beaket.ui.json not found.");
18
18
  console.log("Run", pc.cyan("npx @beaket/ui init"), "first.");
19
19
  process.exit(1);
20
20
  }
@@ -4,28 +4,105 @@ import pc from "picocolors";
4
4
  import prompts from "prompts";
5
5
  import { writeConfig, type BeaketConfig } from "../utils/config.ts";
6
6
 
7
+ interface TsConfig {
8
+ compilerOptions?: {
9
+ paths?: Record<string, string[]>;
10
+ };
11
+ }
12
+
13
+ async function detectAliasPath(): Promise<string> {
14
+ const cwd = process.cwd();
15
+
16
+ // Try to read tsconfig.json or tsconfig.app.json
17
+ for (const configFile of ["tsconfig.json", "tsconfig.app.json"]) {
18
+ const configPath = path.join(cwd, configFile);
19
+ if (await fs.pathExists(configPath)) {
20
+ try {
21
+ const content = await fs.readFile(configPath, "utf-8");
22
+ const tsconfig: TsConfig = JSON.parse(content);
23
+ const paths = tsconfig.compilerOptions?.paths;
24
+ if (paths?.["@/*"]) {
25
+ const aliasPath = paths["@/*"][0];
26
+ // "./src/*" -> "src", "./*" -> ""
27
+ const prefix = aliasPath.replace(/^\.\/|\/?\*$/g, "");
28
+ return prefix ? `${prefix}/components/ui` : "components/ui";
29
+ }
30
+ } catch {
31
+ // Ignore parse errors
32
+ }
33
+ }
34
+ }
35
+
36
+ // Fallback: detect from package.json
37
+ const pkgPath = path.join(cwd, "package.json");
38
+ if (await fs.pathExists(pkgPath)) {
39
+ try {
40
+ const content = await fs.readFile(pkgPath, "utf-8");
41
+ const pkg = JSON.parse(content);
42
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
43
+ // Next.js uses root alias by default
44
+ if (deps.next) {
45
+ return "components/ui";
46
+ }
47
+ } catch {
48
+ // Ignore parse errors
49
+ }
50
+ }
51
+
52
+ // Default to src/components/ui (Vite style)
53
+ return "src/components/ui";
54
+ }
55
+
56
+ async function detectCssPath(): Promise<string> {
57
+ const cwd = process.cwd();
58
+ const pkgPath = path.join(cwd, "package.json");
59
+
60
+ if (await fs.pathExists(pkgPath)) {
61
+ try {
62
+ const content = await fs.readFile(pkgPath, "utf-8");
63
+ const pkg = JSON.parse(content);
64
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
65
+ if (deps.next) {
66
+ return "app/globals.css";
67
+ }
68
+ } catch {
69
+ // Ignore parse errors
70
+ }
71
+ }
72
+
73
+ return "src/index.css";
74
+ }
75
+
7
76
  const CSS_VARIABLES = `
8
77
  /* Beaket UI Design System */
78
+ @theme {
79
+ --color-inverse: var(--paper);
80
+ --shadow-offset: 2px 2px 0px 0px var(--chrome);
81
+ --shadow-offset-dark: 2px 2px 0px 0px var(--aluminum);
82
+ --shadow-offset-hover: 3px 3px 0px 0px var(--chrome);
83
+ --shadow-offset-active: 1px 1px 0px 0px var(--chrome);
84
+ }
85
+
9
86
  :root {
10
- --branch: #1C1F24;
11
- --ink: #0D0D0D;
12
- --paper: #F8F8F8;
13
- --steel: #6B6B6B;
14
- --chrome: #C8C8C8;
15
- --graphite: #1A1A1A;
16
- --iron: #2D2D2D;
87
+ --graphite: #0d0d0d;
88
+ --ink: #1a1a1a;
89
+ --branch: #1c1f24;
90
+ --iron: #2d2d2d;
17
91
  --slate: #404040;
18
92
  --zinc: #525252;
19
- --aluminum: #9E9E9E;
20
- --silver: #DEDEDE;
21
- --platinum: #F0F0F0;
22
- --frost: #F5F5F5;
23
- --signal-blue: #2B6CB0;
24
- --signal-red: #D32F2F;
25
- --signal-green: #137752;
26
- --signal-amber: #A86800;
27
- --signal-purple: #6F2DA8;
28
- --signal-cyan: #1A6B7C;
93
+ --steel: #595959;
94
+ --aluminum: #9e9e9e;
95
+ --chrome: #d0d0d0;
96
+ --silver: #dedede;
97
+ --platinum: #e8e8e8;
98
+ --frost: #f5f5f5;
99
+ --paper: #fafafa;
100
+ --signal-blue: #00449e;
101
+ --signal-red: #c41e1e;
102
+ --signal-green: #00794c;
103
+ --signal-amber: #b8860b;
104
+ --signal-purple: #6f2da8;
105
+ --signal-cyan: #1a6b7c;
29
106
  }
30
107
  `;
31
108
 
@@ -34,18 +111,22 @@ export async function init() {
34
111
  console.log(pc.bold("Initializing Beaket UI..."));
35
112
  console.log();
36
113
 
114
+ // Auto-detect defaults based on project structure
115
+ const detectedComponentsPath = await detectAliasPath();
116
+ const detectedCssPath = await detectCssPath();
117
+
37
118
  const response = await prompts([
38
119
  {
39
120
  type: "text",
40
121
  name: "components",
41
122
  message: "Where should components be installed?",
42
- initial: "src/components/ui",
123
+ initial: detectedComponentsPath,
43
124
  },
44
125
  {
45
126
  type: "text",
46
127
  name: "css",
47
128
  message: "Where is your Tailwind CSS file?",
48
- initial: "src/index.css",
129
+ initial: detectedCssPath,
49
130
  },
50
131
  ]);
51
132
 
@@ -54,14 +135,14 @@ export async function init() {
54
135
  process.exit(1);
55
136
  }
56
137
 
57
- // Write beaket.json (only components path)
138
+ // Write beaket.ui.json (only components path)
58
139
  const config: BeaketConfig = {
59
140
  $schema: "https://beaket.dev/schema.json",
60
141
  components: response.components,
61
142
  };
62
143
 
63
144
  await writeConfig(config);
64
- console.log(pc.green("✔"), "Created beaket.json");
145
+ console.log(pc.green("✔"), "Created beaket.ui.json");
65
146
 
66
147
  // Inject CSS variables into Tailwind CSS file
67
148
  if (response.css) {
@@ -6,7 +6,7 @@ export interface BeaketConfig {
6
6
  components: string;
7
7
  }
8
8
 
9
- const CONFIG_FILE = "beaket.json";
9
+ const CONFIG_FILE = "beaket.ui.json";
10
10
 
11
11
  export async function getConfig(): Promise<BeaketConfig | null> {
12
12
  const configPath = path.join(process.cwd(), CONFIG_FILE);