@shadsapp/cli 0.1.3 → 2.0.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.
Files changed (43) hide show
  1. package/README.md +44 -54
  2. package/dist/api.d.ts +74 -0
  3. package/dist/api.d.ts.map +1 -0
  4. package/dist/api.js +169 -0
  5. package/dist/api.js.map +1 -0
  6. package/dist/cli.js +60 -29
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/create.d.ts +5 -1
  9. package/dist/commands/create.d.ts.map +1 -1
  10. package/dist/commands/create.js +32 -29
  11. package/dist/commands/create.js.map +1 -1
  12. package/dist/commands/install.d.ts +8 -1
  13. package/dist/commands/install.d.ts.map +1 -1
  14. package/dist/commands/install.js +74 -14
  15. package/dist/commands/install.js.map +1 -1
  16. package/dist/commands/login.d.ts +2 -0
  17. package/dist/commands/login.d.ts.map +1 -0
  18. package/dist/commands/login.js +25 -0
  19. package/dist/commands/login.js.map +1 -0
  20. package/dist/commands/logout.d.ts +2 -0
  21. package/dist/commands/logout.d.ts.map +1 -0
  22. package/dist/commands/logout.js +6 -0
  23. package/dist/commands/logout.js.map +1 -0
  24. package/dist/commands/migrate-icons.d.ts.map +1 -1
  25. package/dist/commands/migrate-icons.js +13 -3
  26. package/dist/commands/migrate-icons.js.map +1 -1
  27. package/dist/commands/themes.d.ts +1 -1
  28. package/dist/commands/themes.d.ts.map +1 -1
  29. package/dist/commands/themes.js +20 -16
  30. package/dist/commands/themes.js.map +1 -1
  31. package/dist/commands/validate.d.ts.map +1 -1
  32. package/dist/commands/validate.js +5 -6
  33. package/dist/commands/validate.js.map +1 -1
  34. package/dist/commands/whoami.d.ts +2 -0
  35. package/dist/commands/whoami.d.ts.map +1 -0
  36. package/dist/commands/whoami.js +10 -0
  37. package/dist/commands/whoami.js.map +1 -0
  38. package/dist/credentials.d.ts +10 -0
  39. package/dist/credentials.d.ts.map +1 -0
  40. package/dist/credentials.js +45 -0
  41. package/dist/credentials.js.map +1 -0
  42. package/dist/data/icon-map.json +186 -13
  43. package/package.json +8 -5
package/README.md CHANGED
@@ -1,86 +1,76 @@
1
1
  # @shadsapp/cli
2
2
 
3
- CLI for creating shadcn/ui apps from [shads.app](https://shads.app) themes, and for installing those themes into existing projects.
3
+ Install shads.app themes into shadcn projects with `shads`.
4
4
 
5
5
  ## Install
6
6
 
7
7
  ```bash
8
8
  npm install -g @shadsapp/cli
9
- ```
10
-
11
- Or run without installing:
12
-
13
- ```bash
9
+ # or
14
10
  npx @shadsapp/cli --help
15
11
  ```
16
12
 
17
- The binary name is **`shads`**.
18
-
19
13
  ## Commands
20
14
 
21
15
  ```bash
22
- # Create a new app (runs the official shadcn CLI)
23
- shads create my-app -t workspace
24
- shads create my-app --template vite -t terminal
25
- shads create my-app --preset https://shads.app/r/workspace-theme.json
26
-
27
- # Install theme files into the current project
28
- shads install -t workspace
29
-
30
- # List public starter themes
31
- shads themes list
32
-
33
- # Import a theme (theme.json + theme.css)
34
- shads themes import workspace
35
-
36
- # Validate a theme document
16
+ shads themes # list catalog themes, grouped by system
17
+ shads install system-modern-default-theme
18
+ shads install system-modern-terminal-theme --yes
19
+ shads install https://registry.example/item.json
20
+ shads install ./theme.css
21
+ shads create my-app -t system-modern-terminal-theme
22
+ shads create my-app --preset https://registry.example/item.json
23
+ shads themes import system-modern-terminal-theme
24
+ shads login [--key <key>]
25
+ shads whoami
26
+ shads logout
37
27
  shads validate theme.json
38
-
39
- # Print active schema id
40
28
  shads schema
29
+ shads migrate icons --from lucide --to tabler
41
30
  ```
42
31
 
43
- `create` is a thin wrapper around `npx shadcn@latest create --preset <url>`. It does not replace the shadcn CLI.
44
-
45
- ## What gets written
46
-
47
- `create` scaffolds a shadcn app, then applies the theme (tokens, fonts, and adapters).
48
-
49
- `install` writes:
50
-
51
- - `theme.json`
52
- - `src/styles/theme.css`
32
+ Three catalog themes are tagged `(free)` and install without an account or
33
+ activation: Modern · Claret (`system-modern-default-theme`), Swiss Grid ·
34
+ Original (`system-swiss-original-theme`), and Neobrutalism · Original
35
+ (`system-neobrutalism-original-theme`). Other catalog installs are saved to
36
+ your shads.app library. A Free account has three lifetime activations; the
37
+ first registry fetch activates a theme, which can then be installed any number
38
+ of times. The CLI asks for confirmation before using your final activation;
39
+ `--yes` / `-y` skips that prompt. Activated themes are not re-counted.
53
40
 
54
- Import the CSS in your app entry (e.g. `main.tsx` or `layout.tsx`).
41
+ ## Login and CI
55
42
 
56
- ## Examples
43
+ Create a free account at https://shads.app, copy the API key from Account
44
+ settings, then run:
57
45
 
58
46
  ```bash
59
- npx @shadsapp/cli create my-app -t workspace
60
- npx @shadsapp/cli install -t workspace
61
- npx @shadsapp/cli themes import terminal
62
- npx @shadsapp/cli validate ./theme.json
47
+ shads login
48
+ # or pass it directly
49
+ shads login --key shads_live_...
50
+ shads whoami
51
+ shads logout
63
52
  ```
64
53
 
65
- ## For AI agents
66
-
67
- Prefer the MCP server over scraping the builder:
68
-
69
- ```bash
70
- npx -y @shadsapp/mcp
71
- ```
54
+ Credentials are stored in `${XDG_CONFIG_HOME:-~/.config}/shads/credentials.json`
55
+ with directory mode `0700` and file mode `0600`. For CI, set `SHADS_API_KEY`;
56
+ it takes precedence over saved credentials. Set `SHADS_ORIGIN` to use a
57
+ self-hosted or local API origin.
72
58
 
73
- If you only have a shell, `shads themes list`, `shads themes import <id>`, and `shads create` are the install path. Full docs: https://shads.app/docs/cli
59
+ ## Project creation and installs
74
60
 
75
- ## Customize themes
61
+ `shads create` delegates to `npx shadcn@latest create --preset …`. A catalog
62
+ preset uses the public registry URL for Free themes and the authenticated
63
+ library registry URL for other themes. Explicit third-party registry URLs are
64
+ passed through unchanged. `shads install <registry-url>` likewise delegates to
65
+ `npx shadcn@latest add <url>`. Local `.css` paths copy only that stylesheet.
76
66
 
77
- Edit visually at [shads.app](https://shads.app), then export a create or add command from the builder.
67
+ Run `shads themes` to browse the complete 122-theme metadata catalog.
78
68
 
79
69
  ## Related packages
80
70
 
81
- - [`@shadsapp/themes`](https://www.npmjs.com/package/@shadsapp/themes) — theme bundles
82
- - [`@shadsapp/schema`](https://www.npmjs.com/package/@shadsapp/schema) — `theme.json` spec
83
- - [`@shadsapp/mcp`](https://www.npmjs.com/package/@shadsapp/mcp) — MCP server for AI agents
71
+ - [`@shadsapp/themes`](https://www.npmjs.com/package/@shadsapp/themes) — metadata-only catalog
72
+ - [`@shadsapp/schema`](https://www.npmjs.com/package/@shadsapp/schema) — ThemeV1 schema and validation
73
+ - [Remote MCP server](https://mcp.shads.app) — `https://mcp.shads.app`
84
74
 
85
75
  ## License
86
76
 
package/dist/api.d.ts ADDED
@@ -0,0 +1,74 @@
1
+ import { type PublicThemeMeta } from "@shadsapp/themes";
2
+ export declare const MISSING_KEY_INSTRUCTIONS = "Create a free account at https://shads.app, copy your API key from Account settings, then run `shads login`.";
3
+ export type ActivationState = {
4
+ status: "activated";
5
+ } | {
6
+ status: "available";
7
+ used: number;
8
+ limit: number | null;
9
+ isLast: boolean;
10
+ } | {
11
+ status: "blocked";
12
+ used: number;
13
+ limit: number;
14
+ activated: Array<{
15
+ id: string;
16
+ name: string;
17
+ }>;
18
+ };
19
+ export interface InstallInfo {
20
+ state: ActivationState;
21
+ itemName: string;
22
+ commands: {
23
+ registryUrl: string;
24
+ };
25
+ }
26
+ export interface ApiStatus {
27
+ plan?: string;
28
+ entitlements?: {
29
+ plan?: string;
30
+ limits?: {
31
+ activations?: number | null;
32
+ };
33
+ usage?: {
34
+ activations?: number;
35
+ };
36
+ };
37
+ }
38
+ export interface CatalogInstallResolution {
39
+ meta: PublicThemeMeta;
40
+ registryUrl: string;
41
+ state?: ActivationState;
42
+ }
43
+ export declare class ShadsApiError extends Error {
44
+ readonly status?: number | undefined;
45
+ readonly code?: string | undefined;
46
+ constructor(message: string, status?: number | undefined, code?: string | undefined);
47
+ }
48
+ export declare function getOrigin(): string;
49
+ export declare function getApiKey(): string | null;
50
+ export declare function activationLimitMessage(state: Extract<ActivationState, {
51
+ status: "blocked";
52
+ }>): string;
53
+ export declare function apiRequest<T>(path: string, options?: {
54
+ key?: string;
55
+ origin?: string;
56
+ method?: string;
57
+ body?: unknown;
58
+ }): Promise<T>;
59
+ export declare function validateApiKey(key: string, origin?: string): Promise<ApiStatus>;
60
+ export declare function promptForApiKey(): Promise<string>;
61
+ export declare function confirmLastActivation(state: Extract<ActivationState, {
62
+ status: "available";
63
+ }>, yes?: boolean): Promise<boolean>;
64
+ export declare function resolveCatalogInstall(themeId: string, options?: {
65
+ yes?: boolean;
66
+ confirm?: typeof confirmLastActivation;
67
+ }): Promise<CatalogInstallResolution>;
68
+ export declare function resolveRegistryPreset(presetUrl: string, options?: {
69
+ yes?: boolean;
70
+ confirm?: typeof confirmLastActivation;
71
+ }): Promise<CatalogInstallResolution | {
72
+ registryUrl: string;
73
+ }>;
74
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/api.js ADDED
@@ -0,0 +1,169 @@
1
+ import { createInterface } from "node:readline/promises";
2
+ import { stdin, stdout } from "node:process";
3
+ import { getThemeMeta } from "@shadsapp/themes";
4
+ import { readCredentials } from "./credentials.js";
5
+ const DEFAULT_ORIGIN = "https://shads.app";
6
+ export const MISSING_KEY_INSTRUCTIONS = "Create a free account at https://shads.app, copy your API key from Account settings, then run `shads login`.";
7
+ export class ShadsApiError extends Error {
8
+ status;
9
+ code;
10
+ constructor(message, status, code) {
11
+ super(message);
12
+ this.status = status;
13
+ this.code = code;
14
+ this.name = "ShadsApiError";
15
+ }
16
+ }
17
+ export function getOrigin() {
18
+ const storedOrigin = readCredentials()?.origin;
19
+ return (process.env.SHADS_ORIGIN || storedOrigin || DEFAULT_ORIGIN).replace(/\/$/, "");
20
+ }
21
+ export function getApiKey() {
22
+ const envKey = process.env.SHADS_API_KEY?.trim();
23
+ return envKey || readCredentials()?.key || null;
24
+ }
25
+ export function activationLimitMessage(state) {
26
+ const lines = [`Activation limit reached (${state.used} of ${state.limit} activated).`];
27
+ if (state.activated.length > 0) {
28
+ lines.push("Activated themes:", ...state.activated.map((theme) => ` - ${theme.name}`));
29
+ }
30
+ lines.push("Upgrade: https://shads.app/pricing");
31
+ return lines.join("\n");
32
+ }
33
+ function errorMessage(status, body) {
34
+ const code = typeof body.code === "string" ? body.code : undefined;
35
+ const detail = typeof body.message === "string"
36
+ ? body.message
37
+ : typeof body.error === "string"
38
+ ? body.error
39
+ : "";
40
+ if (status === 401) {
41
+ return new ShadsApiError(`API key is missing or invalid. ${MISSING_KEY_INSTRUCTIONS}`, status, code);
42
+ }
43
+ if (status === 402) {
44
+ const message = detail || "Activation limit reached.";
45
+ return new ShadsApiError(message.includes("https://shads.app/pricing") ? message : `${message}\nUpgrade: https://shads.app/pricing`, status, code);
46
+ }
47
+ if (status === 403) {
48
+ return new ShadsApiError("This theme is not available. Save it in shads.app first.", status, code);
49
+ }
50
+ if (status === 404) {
51
+ return new ShadsApiError(code === "source_not_found"
52
+ ? "Theme not found in the catalog. Save it in shads.app first."
53
+ : detail || "Theme not found.", status, code);
54
+ }
55
+ return new ShadsApiError(detail || `shads.app request failed (${status}).`, status, code);
56
+ }
57
+ export async function apiRequest(path, options = {}) {
58
+ const key = options.key ?? getApiKey();
59
+ if (!key)
60
+ throw new ShadsApiError(`API key required. ${MISSING_KEY_INSTRUCTIONS}`);
61
+ const origin = (options.origin ?? getOrigin()).replace(/\/$/, "");
62
+ let response;
63
+ try {
64
+ response = await fetch(`${origin}${path}`, {
65
+ method: options.method ?? "GET",
66
+ headers: {
67
+ Authorization: `Bearer ${key}`,
68
+ ...(options.body === undefined ? {} : { "Content-Type": "application/json" }),
69
+ },
70
+ ...(options.body === undefined ? {} : { body: JSON.stringify(options.body) }),
71
+ });
72
+ }
73
+ catch (error) {
74
+ throw new ShadsApiError(`Could not connect to shads.app: ${error instanceof Error ? error.message : String(error)}`);
75
+ }
76
+ const body = await response.json().catch(() => ({}));
77
+ if (!response.ok) {
78
+ const record = body && typeof body === "object" ? body : {};
79
+ throw errorMessage(response.status, record);
80
+ }
81
+ return body;
82
+ }
83
+ export async function validateApiKey(key, origin = getOrigin()) {
84
+ return apiRequest("/api/mcp/status", { key, origin });
85
+ }
86
+ export async function promptForApiKey() {
87
+ if (!stdin.isTTY) {
88
+ const chunks = [];
89
+ for await (const chunk of stdin)
90
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
91
+ return Buffer.concat(chunks).toString("utf8").trim();
92
+ }
93
+ const readline = createInterface({ input: stdin, output: stdout, terminal: true });
94
+ readline._writeToOutput = () => { };
95
+ stdout.write("API key: ");
96
+ try {
97
+ return (await readline.question("")).trim();
98
+ }
99
+ finally {
100
+ readline.close();
101
+ }
102
+ }
103
+ export async function confirmLastActivation(state, yes = false) {
104
+ const message = `This install uses your final free activation (${state.used + 1} of ${state.limit ?? "unlimited"}). Activated themes install any number of times.`;
105
+ if (yes) {
106
+ console.log(message);
107
+ return true;
108
+ }
109
+ if (!stdin.isTTY)
110
+ throw new Error(message);
111
+ const readline = createInterface({ input: stdin, output: stdout });
112
+ try {
113
+ console.log(message);
114
+ const answer = await readline.question("Continue? [y/N] ");
115
+ return answer.trim().toLowerCase() === "y" || answer.trim().toLowerCase() === "yes";
116
+ }
117
+ finally {
118
+ readline.close();
119
+ }
120
+ }
121
+ export async function resolveCatalogInstall(themeId, options = {}) {
122
+ const meta = getThemeMeta(themeId);
123
+ const origin = getOrigin();
124
+ if (meta.free) {
125
+ return { meta, registryUrl: `${origin}/r/${meta.itemName}.json` };
126
+ }
127
+ const created = await apiRequest("/api/library", {
128
+ method: "POST",
129
+ body: { source: { kind: "catalog", id: meta.itemName } },
130
+ });
131
+ const install = await apiRequest(`/api/themes/${encodeURIComponent(created.theme.id)}/install`);
132
+ const state = install.state;
133
+ if (state.status === "blocked")
134
+ throw new ShadsApiError(activationLimitMessage(state), 402, "activation_limit");
135
+ if (state.status === "available" && state.isLast) {
136
+ const confirm = options.confirm ?? confirmLastActivation;
137
+ if (!(await confirm(state, options.yes))) {
138
+ throw new ShadsApiError("Installation cancelled.");
139
+ }
140
+ }
141
+ return { meta, registryUrl: install.commands.registryUrl, state };
142
+ }
143
+ export async function resolveRegistryPreset(presetUrl, options = {}) {
144
+ let url;
145
+ try {
146
+ url = new URL(presetUrl);
147
+ }
148
+ catch {
149
+ return { registryUrl: presetUrl };
150
+ }
151
+ const match = url.pathname.match(/^\/r\/([^/]+)\.json$/);
152
+ if (!match)
153
+ return { registryUrl: presetUrl };
154
+ let itemName;
155
+ try {
156
+ itemName = decodeURIComponent(match[1]);
157
+ }
158
+ catch {
159
+ return { registryUrl: presetUrl };
160
+ }
161
+ try {
162
+ getThemeMeta(itemName);
163
+ }
164
+ catch {
165
+ return { registryUrl: presetUrl };
166
+ }
167
+ return resolveCatalogInstall(itemName, options);
168
+ }
169
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -1,32 +1,42 @@
1
1
  #!/usr/bin/env node
2
- import { THEME_SCHEMA } from "@shadsapp/schema";
2
+ import { THEME_SCHEMA_ID } from "@shadsapp/schema";
3
3
  import { runCreate } from "./commands/create.js";
4
4
  import { runInstall } from "./commands/install.js";
5
+ import { runLogin } from "./commands/login.js";
6
+ import { runLogout } from "./commands/logout.js";
5
7
  import { runMigrateIcons } from "./commands/migrate-icons.js";
6
8
  import { runThemesImport, runThemesList } from "./commands/themes.js";
7
9
  import { runValidate } from "./commands/validate.js";
10
+ import { runWhoami } from "./commands/whoami.js";
8
11
  function printHelp() {
9
- console.log(`shads — theme tooling for shadcn/ui projects
12
+ console.log(`shads — design-system theme tooling for shadcn/ui projects
10
13
 
11
14
  Usage:
12
- shads create <name> [-t <theme>] [--template next]
13
- shads create <name> --preset <url>
14
- shads install -t <theme> Install theme files into the current project
15
- shads themes list List public starter themes
16
- shads themes import <theme> Import a public theme into the current project
17
- shads validate <file> Validate a theme.json document
15
+ shads install <theme> [--yes] Install a catalog theme
16
+ shads install <registry-url> Add a shadcn registry item
17
+ shads install <file.css> Install a local CSS file
18
+ shads create <name> [-t <theme>] [--template next] [--yes]
19
+ shads create <name> --preset <url> [--yes]
20
+ shads themes [list] List themes grouped by design system
21
+ shads themes import <theme> Install a catalog theme into the current project
22
+ shads login [--key <key>] Save and validate your API key
23
+ shads logout Remove saved credentials
24
+ shads whoami Show your plan and activation usage
25
+ shads validate <file> Validate a Theme v1 JSON document
18
26
  shads migrate icons --from <pack> --to <pack> [--yes]
19
- shads schema Print the active theme document schema id
27
+ shads schema Print the active Theme v1 schema id
20
28
 
21
29
  Examples:
22
- npx @shadsapp/cli create my-app -t workspace
23
- npx @shadsapp/cli create my-app --template vite -t terminal
24
- npx @shadsapp/cli create my-app --preset https://shads.app/r/workspace-theme.json
25
- npx @shadsapp/cli install -t workspace
26
- npx @shadsapp/cli themes import workspace
30
+ npx @shadsapp/cli install system-modern-default-theme
31
+ npx @shadsapp/cli install system-modern-terminal-theme
32
+ npx @shadsapp/cli create my-app -t system-modern-terminal-theme
33
+ npx @shadsapp/cli themes
34
+ npx @shadsapp/cli login
27
35
  npx @shadsapp/cli validate theme.json
28
36
 
29
- create runs the official shadcn CLI (npx shadcn@latest create --preset …).
37
+ Free-tagged themes install without an account. Other themes require an API key;
38
+ run \`shads login\` or set SHADS_API_KEY for CI.
39
+ Create an API key at https://shads.app in Account settings.
30
40
  `);
31
41
  }
32
42
  async function main() {
@@ -36,7 +46,7 @@ async function main() {
36
46
  return;
37
47
  }
38
48
  if (command === "schema") {
39
- console.log(THEME_SCHEMA);
49
+ console.log(THEME_SCHEMA_ID);
40
50
  return;
41
51
  }
42
52
  if (command === "validate") {
@@ -63,21 +73,23 @@ async function main() {
63
73
  return;
64
74
  }
65
75
  if (command === "install") {
66
- let themeId = "workspace";
67
- for (let index = 0; index < rest.length; index += 1) {
68
- const token = rest[index];
76
+ const tokens = [subcommand, ...rest].filter((token) => typeof token === "string");
77
+ let theme = "system-modern-default-theme";
78
+ let yes = false;
79
+ for (let index = 0; index < tokens.length; index += 1) {
80
+ const token = tokens[index];
69
81
  if (token === "-t" || token === "--theme") {
70
- themeId = rest[index + 1] ?? themeId;
82
+ theme = tokens[index + 1] ?? theme;
71
83
  index += 1;
72
84
  }
85
+ else if (token === "--yes" || token === "-y") {
86
+ yes = true;
87
+ }
88
+ else if (token && !token.startsWith("-")) {
89
+ theme = token;
90
+ }
73
91
  }
74
- if (subcommand === "-t" || subcommand === "--theme") {
75
- themeId = rest[0] ?? themeId;
76
- }
77
- else if (subcommand && !subcommand.startsWith("-")) {
78
- themeId = subcommand;
79
- }
80
- await runInstall(themeId);
92
+ await runInstall(theme, "Installed", { yes });
81
93
  return;
82
94
  }
83
95
  if (command === "themes") {
@@ -86,16 +98,35 @@ async function main() {
86
98
  return;
87
99
  }
88
100
  if (subcommand === "import") {
89
- const themeId = rest[0];
101
+ let themeId;
102
+ let yes = false;
103
+ for (const token of rest) {
104
+ if (token === "--yes" || token === "-y")
105
+ yes = true;
106
+ else if (!token.startsWith("-"))
107
+ themeId = token;
108
+ }
90
109
  if (!themeId) {
91
110
  console.error("Missing theme id. Usage: shads themes import <theme>");
92
111
  process.exitCode = 1;
93
112
  return;
94
113
  }
95
- await runThemesImport(themeId);
114
+ await runThemesImport(themeId, yes);
96
115
  return;
97
116
  }
98
117
  }
118
+ if (command === "login") {
119
+ await runLogin([subcommand, ...rest].filter((token) => typeof token === "string"));
120
+ return;
121
+ }
122
+ if (command === "logout") {
123
+ runLogout();
124
+ return;
125
+ }
126
+ if (command === "whoami") {
127
+ await runWhoami();
128
+ return;
129
+ }
99
130
  console.error(`Unknown command: ${command}`);
100
131
  printHelp();
101
132
  process.exitCode = 1;
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,19 @@
1
+ import { type CatalogInstallResolution } from "../api.js";
1
2
  export type ParsedCreateArgs = {
2
3
  name: string;
3
4
  themeId: string;
4
5
  presetUrl: string | null;
5
6
  template: string;
6
7
  passthrough: string[];
8
+ yes: boolean;
7
9
  };
8
10
  type ParseCreateResult = ParsedCreateArgs | {
9
11
  error: string;
10
12
  };
11
13
  export declare function parseCreateArgs(argv: string[]): ParseCreateResult;
12
- export declare function resolveCreatePresetUrl(args: ParsedCreateArgs, origin?: string): string;
14
+ export declare function resolveCreatePreset(args: ParsedCreateArgs): Promise<CatalogInstallResolution | {
15
+ registryUrl: string;
16
+ }>;
13
17
  export declare function buildShadcnCreateArgv(args: ParsedCreateArgs, presetUrl: string): string[];
14
18
  export declare function runCreate(argv: string[]): Promise<void>;
15
19
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AA4BA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,EAAE,CAAA;CACtB,CAAA;AAED,KAAK,iBAAiB,GAAG,gBAAgB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAkB7D,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,iBAAiB,CA4FjE;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,gBAAgB,EACtB,MAAM,SAA+D,GACpE,MAAM,CAKR;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,MAAM,GAChB,MAAM,EAAE,CAYV;AAMD,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B7D"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,WAAW,CAAA;AAalB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,GAAG,EAAE,OAAO,CAAA;CACb,CAAA;AAED,KAAK,iBAAiB,GAAG,gBAAgB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAc7D,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAqGjE;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,wBAAwB,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAK7D;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,MAAM,GAChB,MAAM,EAAE,CAYV;AAYD,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B7D"}