uixskills 0.1.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/README.md ADDED
@@ -0,0 +1,71 @@
1
+ # UIXskills CLI
2
+
3
+ Install UI/UX skills from the [UIXskills Gallery](https://uixskills.com/skills) with a single command.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ # Using npx (no installation required)
9
+ npx uixskills add <owner/repo>
10
+
11
+ # Or install globally
12
+ npm install -g uixskills
13
+ ```
14
+
15
+ ## Commands
16
+
17
+ ### Add a skill
18
+
19
+ ```bash
20
+ # Install a skill from GitHub
21
+ npx uixskills add hooosberg/react-glassmorphism
22
+
23
+ # Install to a custom directory
24
+ npx uixskills add hooosberg/react-glassmorphism --dir ./my-skills
25
+
26
+ # Force overwrite existing files
27
+ npx uixskills add hooosberg/react-glassmorphism --force
28
+ ```
29
+
30
+ ### List top skills
31
+
32
+ ```bash
33
+ # Show top 10 skills (all time)
34
+ npx uixskills list
35
+
36
+ # Show top 20 trending skills
37
+ npx uixskills list -n 20 --trending
38
+ ```
39
+
40
+ ### Search for skills
41
+
42
+ ```bash
43
+ # Search for glassmorphism skills
44
+ npx uixskills search glassmorphism
45
+
46
+ # Search with more results
47
+ npx uixskills search button -n 20
48
+ ```
49
+
50
+ ## Creating a Skill
51
+
52
+ To make your GitHub repository installable via UIXskills, add a `uixskill.json` file:
53
+
54
+ ```json
55
+ {
56
+ "name": "my-awesome-skill",
57
+ "version": "1.0.0",
58
+ "description": "A beautiful UI component skill",
59
+ "files": [
60
+ "components/",
61
+ "styles/",
62
+ "README.md"
63
+ ]
64
+ }
65
+ ```
66
+
67
+ Then submit your skill at [uixskills.com/skills/submit](https://uixskills.com/skills/submit).
68
+
69
+ ## License
70
+
71
+ MIT
package/dist/add.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Add command - Install a skill from GitHub
3
+ */
4
+ interface AddOptions {
5
+ dir: string;
6
+ force: boolean;
7
+ }
8
+ export declare function addSkill(repo: string, options: AddOptions): Promise<void>;
9
+ export {};
10
+ //# sourceMappingURL=add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../src/add.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,UAAU,UAAU;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA2E/E"}
package/dist/add.js ADDED
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ /**
3
+ * Add command - Install a skill from GitHub
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.addSkill = addSkill;
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const ora_1 = __importDefault(require("ora"));
12
+ const promises_1 = __importDefault(require("fs/promises"));
13
+ const path_1 = __importDefault(require("path"));
14
+ const utils_js_1 = require("./utils.js");
15
+ async function addSkill(repo, options) {
16
+ // Validate repo format
17
+ const repoPattern = /^[a-zA-Z0-9_-]+\/[a-zA-Z0-9_.-]+$/;
18
+ if (!repoPattern.test(repo)) {
19
+ console.error(chalk_1.default.red('Error: Invalid repository format. Use: owner/repo'));
20
+ process.exit(1);
21
+ }
22
+ const [owner, repoName] = repo.split('/');
23
+ const spinner = (0, ora_1.default)(`Fetching skill from ${chalk_1.default.cyan(repo)}...`).start();
24
+ try {
25
+ // 1. Fetch skill manifest
26
+ spinner.text = 'Fetching skill manifest...';
27
+ const manifest = await (0, utils_js_1.fetchSkillManifest)(owner, repoName);
28
+ if (!manifest) {
29
+ spinner.fail(chalk_1.default.red('No skill manifest found (uixskill.json or skill.json)'));
30
+ console.log(chalk_1.default.yellow('\nTo create a valid skill, add a uixskill.json file to your repo:'));
31
+ console.log(chalk_1.default.gray(`
32
+ {
33
+ "name": "my-skill",
34
+ "version": "1.0.0",
35
+ "description": "A great UI/UX skill",
36
+ "files": ["components/", "styles/"]
37
+ }
38
+ `));
39
+ process.exit(1);
40
+ }
41
+ // 2. Create target directory
42
+ const targetDir = path_1.default.resolve(options.dir, manifest.name || repoName);
43
+ try {
44
+ await promises_1.default.access(targetDir);
45
+ if (!options.force) {
46
+ spinner.fail(chalk_1.default.red(`Directory already exists: ${targetDir}`));
47
+ console.log(chalk_1.default.yellow('Use --force to overwrite existing files'));
48
+ process.exit(1);
49
+ }
50
+ }
51
+ catch {
52
+ // Directory doesn't exist, create it
53
+ await promises_1.default.mkdir(targetDir, { recursive: true });
54
+ }
55
+ // 3. Download skill files
56
+ spinner.text = 'Downloading skill files...';
57
+ const files = await (0, utils_js_1.downloadSkillFiles)(owner, repoName, manifest.files || ['']);
58
+ // 4. Write files to target directory
59
+ spinner.text = 'Installing skill...';
60
+ for (const file of files) {
61
+ const filePath = path_1.default.join(targetDir, file.path);
62
+ await promises_1.default.mkdir(path_1.default.dirname(filePath), { recursive: true });
63
+ await promises_1.default.writeFile(filePath, file.content);
64
+ }
65
+ // 5. Record installation (for stats)
66
+ await (0, utils_js_1.recordInstall)(owner, repoName);
67
+ spinner.succeed(chalk_1.default.green(`Skill installed successfully!`));
68
+ console.log(`
69
+ ${chalk_1.default.bold('Installed:')} ${chalk_1.default.cyan(manifest.name || repoName)}
70
+ ${chalk_1.default.bold('Location:')} ${chalk_1.default.gray(targetDir)}
71
+ ${chalk_1.default.bold('Files:')} ${files.length} files
72
+
73
+ ${chalk_1.default.dim('To use this skill, import from:')}
74
+ ${chalk_1.default.yellow(`import { ... } from '${options.dir}/${manifest.name || repoName}'`)}
75
+ `);
76
+ }
77
+ catch (error) {
78
+ spinner.fail(chalk_1.default.red('Failed to install skill'));
79
+ console.error(chalk_1.default.red(error instanceof Error ? error.message : 'Unknown error'));
80
+ process.exit(1);
81
+ }
82
+ }
83
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../src/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * UIXskills CLI
4
+ * Install UI/UX skills from the UIXskills gallery
5
+ *
6
+ * Usage:
7
+ * npx uixskills add <owner/repo>
8
+ * npx uixskills list
9
+ * npx uixskills search <query>
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG"}
package/dist/index.js ADDED
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * UIXskills CLI
5
+ * Install UI/UX skills from the UIXskills gallery
6
+ *
7
+ * Usage:
8
+ * npx uixskills add <owner/repo>
9
+ * npx uixskills list
10
+ * npx uixskills search <query>
11
+ */
12
+ var __importDefault = (this && this.__importDefault) || function (mod) {
13
+ return (mod && mod.__esModule) ? mod : { "default": mod };
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ const commander_1 = require("commander");
17
+ const chalk_1 = __importDefault(require("chalk"));
18
+ const add_js_1 = require("./add.js");
19
+ const list_js_1 = require("./list.js");
20
+ const search_js_1 = require("./search.js");
21
+ const program = new commander_1.Command();
22
+ // ASCII Logo
23
+ const logo = `
24
+ ${chalk_1.default.blue('╔═══════════════════════════════════════╗')}
25
+ ${chalk_1.default.blue('║')} ${chalk_1.default.bold.white('UIXSKILLS')} - UI/UX Skills Directory ${chalk_1.default.blue('║')}
26
+ ${chalk_1.default.blue('╚═══════════════════════════════════════╝')}
27
+ `;
28
+ program
29
+ .name('uixskills')
30
+ .description('CLI tool for installing UI/UX skills from the UIXskills gallery')
31
+ .version('0.1.0')
32
+ .addHelpText('beforeAll', logo);
33
+ // Add command
34
+ program
35
+ .command('add <repo>')
36
+ .description('Install a skill from a GitHub repository (format: owner/repo)')
37
+ .option('-d, --dir <directory>', 'Target directory for installation', './.uixskills')
38
+ .option('-f, --force', 'Overwrite existing files', false)
39
+ .action(async (repo, options) => {
40
+ await (0, add_js_1.addSkill)(repo, options);
41
+ });
42
+ // List command
43
+ program
44
+ .command('list')
45
+ .description('List top skills from the UIXskills gallery')
46
+ .option('-n, --number <count>', 'Number of skills to show', '10')
47
+ .option('-t, --trending', 'Show trending skills (24h)', false)
48
+ .action(async (options) => {
49
+ await (0, list_js_1.listSkills)(options);
50
+ });
51
+ // Search command
52
+ program
53
+ .command('search <query>')
54
+ .description('Search for skills in the gallery')
55
+ .option('-n, --number <count>', 'Number of results to show', '10')
56
+ .action(async (query, options) => {
57
+ await (0, search_js_1.searchSkills)(query, options);
58
+ });
59
+ // Parse arguments
60
+ program.parse();
61
+ // Show help if no command provided
62
+ if (!process.argv.slice(2).length) {
63
+ console.log(logo);
64
+ program.outputHelp();
65
+ }
66
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA;;;;;;;;GAQG;;;;;AAEH,yCAAoC;AACpC,kDAA0B;AAC1B,qCAAoC;AACpC,uCAAuC;AACvC,2CAA2C;AAE3C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,aAAa;AACb,MAAM,IAAI,GAAG;EACX,eAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC;EACvD,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,+BAA+B,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC;EAC/F,eAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC;CACxD,CAAC;AAEF,OAAO;KACF,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,iEAAiE,CAAC;KAC9E,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAEpC,cAAc;AACd,OAAO;KACF,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,MAAM,CAAC,uBAAuB,EAAE,mCAAmC,EAAE,cAAc,CAAC;KACpF,MAAM,CAAC,aAAa,EAAE,0BAA0B,EAAE,KAAK,CAAC;KACxD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAwC,EAAE,EAAE;IACrE,MAAM,IAAA,iBAAQ,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEP,eAAe;AACf,OAAO;KACF,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,sBAAsB,EAAE,0BAA0B,EAAE,IAAI,CAAC;KAChE,MAAM,CAAC,gBAAgB,EAAE,4BAA4B,EAAE,KAAK,CAAC;KAC7D,MAAM,CAAC,KAAK,EAAE,OAA8C,EAAE,EAAE;IAC7D,MAAM,IAAA,oBAAU,EAAC,OAAO,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEP,iBAAiB;AACjB,OAAO;KACF,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,sBAAsB,EAAE,2BAA2B,EAAE,IAAI,CAAC;KACjE,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,OAA2B,EAAE,EAAE;IACzD,MAAM,IAAA,wBAAY,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC,CAAC,CAAC;AAEP,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAC;AAEhB,mCAAmC;AACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,OAAO,CAAC,UAAU,EAAE,CAAC;AACzB,CAAC"}
package/dist/list.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ /**
2
+ * List command - Show top skills from the gallery
3
+ */
4
+ interface ListOptions {
5
+ number: string;
6
+ trending: boolean;
7
+ }
8
+ export declare function listSkills(options: ListOptions): Promise<void>;
9
+ export {};
10
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../src/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,UAAU,WAAW;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCpE"}
package/dist/list.js ADDED
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ /**
3
+ * List command - Show top skills from the gallery
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.listSkills = listSkills;
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const ora_1 = __importDefault(require("ora"));
12
+ const utils_js_1 = require("./utils.js");
13
+ async function listSkills(options) {
14
+ const spinner = (0, ora_1.default)('Fetching skills...').start();
15
+ try {
16
+ const limit = parseInt(options.number, 10) || 10;
17
+ const skills = await (0, utils_js_1.fetchLeaderboard)(limit, options.trending);
18
+ spinner.stop();
19
+ console.log(`
20
+ ${chalk_1.default.bold.white('SKILLS LEADERBOARD')} ${options.trending ? chalk_1.default.yellow('(Trending 24h)') : chalk_1.default.gray('(All Time)')}
21
+ ${'─'.repeat(60)}
22
+ `);
23
+ // Header
24
+ console.log(chalk_1.default.gray('#'.padEnd(4)) +
25
+ chalk_1.default.gray('SKILL'.padEnd(35)) +
26
+ chalk_1.default.gray('INSTALLS'.padStart(10)));
27
+ console.log(chalk_1.default.gray('─'.repeat(60)));
28
+ // Skills list
29
+ skills.forEach((skill, index) => {
30
+ const rank = chalk_1.default.gray(`${index + 1}`.padEnd(4));
31
+ const name = chalk_1.default.white(skill.title.toLowerCase().padEnd(20));
32
+ const repo = chalk_1.default.gray(skill.github_full_path?.padEnd(15) || '');
33
+ const installs = chalk_1.default.cyan((0, utils_js_1.formatInstalls)(skill.install_count).padStart(10));
34
+ console.log(`${rank}${name}${repo}${installs}`);
35
+ });
36
+ console.log(`
37
+ ${chalk_1.default.dim('Install a skill:')} ${chalk_1.default.cyan('npx uixskills add <owner/repo>')}
38
+ `);
39
+ }
40
+ catch (error) {
41
+ spinner.fail(chalk_1.default.red('Failed to fetch skills'));
42
+ console.error(chalk_1.default.red(error instanceof Error ? error.message : 'Unknown error'));
43
+ process.exit(1);
44
+ }
45
+ }
46
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../src/list.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AAWH,gCAyCC;AAlDD,kDAA0B;AAC1B,8CAAsB;AACtB,yCAA8D;AAOvD,KAAK,UAAU,UAAU,CAAC,OAAoB;IACjD,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;IAElD,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAgB,EAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE/D,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,OAAO,CAAC,GAAG,CAAC;EAClB,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC;EACtH,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;CACf,CAAC,CAAC;QAEK,SAAS;QACT,OAAO,CAAC,GAAG,CACP,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACzB,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC9B,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CACtC,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAExC,cAAc;QACd,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,MAAM,IAAI,GAAG,eAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/D,MAAM,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YAClE,MAAM,QAAQ,GAAG,eAAK,CAAC,IAAI,CAAC,IAAA,yBAAc,EAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YAE9E,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,QAAQ,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC;EAClB,eAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,eAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC;KAC1E,CAAC,CAAC;IAEH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Search command - Search for skills in the gallery
3
+ */
4
+ interface SearchOptions {
5
+ number: string;
6
+ }
7
+ export declare function searchSkills(query: string, options: SearchOptions): Promise<void>;
8
+ export {};
9
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,UAAU,aAAa;IACnB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CvF"}
package/dist/search.js ADDED
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ /**
3
+ * Search command - Search for skills in the gallery
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.searchSkills = searchSkills;
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const ora_1 = __importDefault(require("ora"));
12
+ const utils_js_1 = require("./utils.js");
13
+ async function searchSkills(query, options) {
14
+ const spinner = (0, ora_1.default)(`Searching for "${query}"...`).start();
15
+ try {
16
+ const limit = parseInt(options.number, 10) || 10;
17
+ const skills = await (0, utils_js_1.searchSkillsApi)(query, limit);
18
+ spinner.stop();
19
+ if (skills.length === 0) {
20
+ console.log(chalk_1.default.yellow(`No skills found for "${query}"`));
21
+ return;
22
+ }
23
+ console.log(`
24
+ ${chalk_1.default.bold.white('SEARCH RESULTS')} for "${chalk_1.default.cyan(query)}"
25
+ ${'─'.repeat(60)}
26
+ `);
27
+ // Header
28
+ console.log(chalk_1.default.gray('#'.padEnd(4)) +
29
+ chalk_1.default.gray('SKILL'.padEnd(35)) +
30
+ chalk_1.default.gray('INSTALLS'.padStart(10)));
31
+ console.log(chalk_1.default.gray('─'.repeat(60)));
32
+ // Skills list
33
+ skills.forEach((skill, index) => {
34
+ const rank = chalk_1.default.gray(`${index + 1}`.padEnd(4));
35
+ const name = chalk_1.default.white(skill.title.toLowerCase().padEnd(20));
36
+ const repo = chalk_1.default.gray((skill.github_full_path || '').padEnd(15));
37
+ const installs = chalk_1.default.cyan((0, utils_js_1.formatInstalls)(skill.install_count).padStart(10));
38
+ console.log(`${rank}${name}${repo}${installs}`);
39
+ });
40
+ console.log(`
41
+ ${chalk_1.default.dim('Install a skill:')} ${chalk_1.default.cyan('npx uixskills add <owner/repo>')}
42
+ `);
43
+ }
44
+ catch (error) {
45
+ spinner.fail(chalk_1.default.red('Failed to search skills'));
46
+ console.error(chalk_1.default.red(error instanceof Error ? error.message : 'Unknown error'));
47
+ process.exit(1);
48
+ }
49
+ }
50
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AAUH,oCA8CC;AAtDD,kDAA0B;AAC1B,8CAAsB;AACtB,yCAA6D;AAMtD,KAAK,UAAU,YAAY,CAAC,KAAa,EAAE,OAAsB;IACpE,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,kBAAkB,KAAK,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IAE3D,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAe,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAEnD,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,wBAAwB,KAAK,GAAG,CAAC,CAAC,CAAC;YAC5D,OAAO;QACX,CAAC;QAED,OAAO,CAAC,GAAG,CAAC;EAClB,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC;EAC5D,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;CACf,CAAC,CAAC;QAEK,SAAS;QACT,OAAO,CAAC,GAAG,CACP,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACzB,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC9B,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CACtC,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAExC,cAAc;QACd,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,MAAM,IAAI,GAAG,eAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/D,MAAM,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACnE,MAAM,QAAQ,GAAG,eAAK,CAAC,IAAI,CAAC,IAAA,yBAAc,EAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YAE9E,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,QAAQ,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC;EAClB,eAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,eAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC;KAC1E,CAAC,CAAC;IAEH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Utility functions for the UIXskills CLI
3
+ */
4
+ export interface SkillManifest {
5
+ name: string;
6
+ version?: string;
7
+ description?: string;
8
+ files?: string[];
9
+ dependencies?: Record<string, string>;
10
+ }
11
+ export interface Skill {
12
+ id: string;
13
+ title: string;
14
+ github_owner?: string;
15
+ github_repo?: string;
16
+ github_full_path?: string;
17
+ install_count: number;
18
+ }
19
+ export interface DownloadedFile {
20
+ path: string;
21
+ content: string;
22
+ }
23
+ /**
24
+ * Format install count (e.g., 1234 -> "1.2K")
25
+ */
26
+ export declare function formatInstalls(count: number): string;
27
+ /**
28
+ * Fetch skill manifest from GitHub repo
29
+ */
30
+ export declare function fetchSkillManifest(owner: string, repo: string): Promise<SkillManifest | null>;
31
+ /**
32
+ * Download skill files from GitHub
33
+ */
34
+ export declare function downloadSkillFiles(owner: string, repo: string, files: string[]): Promise<DownloadedFile[]>;
35
+ /**
36
+ * Record skill installation for stats
37
+ */
38
+ export declare function recordInstall(owner: string, repo: string): Promise<void>;
39
+ /**
40
+ * Fetch skills leaderboard
41
+ */
42
+ export declare function fetchLeaderboard(limit?: number, trending?: boolean): Promise<Skill[]>;
43
+ /**
44
+ * Search for skills
45
+ */
46
+ export declare function searchSkillsApi(query: string, limit?: number): Promise<Skill[]>;
47
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,KAAK;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACpC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAsC/B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACpC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,cAAc,EAAE,CAAC,CAgE3B;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAc9E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAClC,KAAK,GAAE,MAAW,EAClB,QAAQ,GAAE,OAAe,GAC1B,OAAO,CAAC,KAAK,EAAE,CAAC,CAUlB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACjC,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAW,GACnB,OAAO,CAAC,KAAK,EAAE,CAAC,CAUlB"}
package/dist/utils.js ADDED
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ /**
3
+ * Utility functions for the UIXskills CLI
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.formatInstalls = formatInstalls;
7
+ exports.fetchSkillManifest = fetchSkillManifest;
8
+ exports.downloadSkillFiles = downloadSkillFiles;
9
+ exports.recordInstall = recordInstall;
10
+ exports.fetchLeaderboard = fetchLeaderboard;
11
+ exports.searchSkillsApi = searchSkillsApi;
12
+ const API_BASE = 'https://uixskills.com/api';
13
+ const GITHUB_RAW_BASE = 'https://raw.githubusercontent.com';
14
+ /**
15
+ * Format install count (e.g., 1234 -> "1.2K")
16
+ */
17
+ function formatInstalls(count) {
18
+ if (!count || count === 0)
19
+ return '0';
20
+ if (count >= 1000) {
21
+ return (count / 1000).toFixed(1).replace(/\.0$/, '') + 'K';
22
+ }
23
+ return count.toString();
24
+ }
25
+ /**
26
+ * Fetch skill manifest from GitHub repo
27
+ */
28
+ async function fetchSkillManifest(owner, repo) {
29
+ // Try uixskill.json first
30
+ try {
31
+ const response = await fetch(`${GITHUB_RAW_BASE}/${owner}/${repo}/main/uixskill.json`);
32
+ if (response.ok) {
33
+ return await response.json();
34
+ }
35
+ }
36
+ catch {
37
+ // Ignore and try fallback
38
+ }
39
+ // Try skill.json
40
+ try {
41
+ const response = await fetch(`${GITHUB_RAW_BASE}/${owner}/${repo}/main/skill.json`);
42
+ if (response.ok) {
43
+ return await response.json();
44
+ }
45
+ }
46
+ catch {
47
+ // Ignore
48
+ }
49
+ // Try master branch
50
+ try {
51
+ const response = await fetch(`${GITHUB_RAW_BASE}/${owner}/${repo}/master/uixskill.json`);
52
+ if (response.ok) {
53
+ return await response.json();
54
+ }
55
+ }
56
+ catch {
57
+ // Ignore
58
+ }
59
+ return null;
60
+ }
61
+ /**
62
+ * Download skill files from GitHub
63
+ */
64
+ async function downloadSkillFiles(owner, repo, files) {
65
+ const downloadedFiles = [];
66
+ for (const filePath of files) {
67
+ try {
68
+ // If it's a directory pattern, we need to use GitHub API to list files
69
+ if (filePath.endsWith('/')) {
70
+ const apiUrl = `https://api.github.com/repos/${owner}/${repo}/contents/${filePath}`;
71
+ const response = await fetch(apiUrl);
72
+ if (response.ok) {
73
+ const contents = await response.json();
74
+ for (const item of contents) {
75
+ if (item.type === 'file' && item.download_url) {
76
+ const fileResponse = await fetch(item.download_url);
77
+ if (fileResponse.ok) {
78
+ downloadedFiles.push({
79
+ path: item.path,
80
+ content: await fileResponse.text(),
81
+ });
82
+ }
83
+ }
84
+ }
85
+ }
86
+ }
87
+ else {
88
+ // Single file
89
+ const url = `${GITHUB_RAW_BASE}/${owner}/${repo}/main/${filePath}`;
90
+ const response = await fetch(url);
91
+ if (response.ok) {
92
+ downloadedFiles.push({
93
+ path: filePath,
94
+ content: await response.text(),
95
+ });
96
+ }
97
+ }
98
+ }
99
+ catch (error) {
100
+ console.warn(`Warning: Could not download ${filePath}`);
101
+ }
102
+ }
103
+ // If no specific files, download common patterns
104
+ if (downloadedFiles.length === 0) {
105
+ const commonFiles = ['README.md', 'index.ts', 'index.tsx', 'index.js', 'styles.css'];
106
+ for (const file of commonFiles) {
107
+ try {
108
+ const url = `${GITHUB_RAW_BASE}/${owner}/${repo}/main/${file}`;
109
+ const response = await fetch(url);
110
+ if (response.ok) {
111
+ downloadedFiles.push({
112
+ path: file,
113
+ content: await response.text(),
114
+ });
115
+ }
116
+ }
117
+ catch {
118
+ // Ignore
119
+ }
120
+ }
121
+ }
122
+ return downloadedFiles;
123
+ }
124
+ /**
125
+ * Record skill installation for stats
126
+ */
127
+ async function recordInstall(owner, repo) {
128
+ try {
129
+ await fetch(`${API_BASE}/skills/install`, {
130
+ method: 'POST',
131
+ headers: { 'Content-Type': 'application/json' },
132
+ body: JSON.stringify({
133
+ github_owner: owner,
134
+ github_repo: repo,
135
+ cli_version: '0.1.0',
136
+ }),
137
+ });
138
+ }
139
+ catch {
140
+ // Silently fail - stats recording is not critical
141
+ }
142
+ }
143
+ /**
144
+ * Fetch skills leaderboard
145
+ */
146
+ async function fetchLeaderboard(limit = 10, trending = false) {
147
+ const response = await fetch(`${API_BASE}/skills/leaderboard?limit=${limit}&trending=${trending}`);
148
+ if (!response.ok) {
149
+ throw new Error('Failed to fetch leaderboard');
150
+ }
151
+ return await response.json();
152
+ }
153
+ /**
154
+ * Search for skills
155
+ */
156
+ async function searchSkillsApi(query, limit = 10) {
157
+ const response = await fetch(`${API_BASE}/skills/search?q=${encodeURIComponent(query)}&limit=${limit}`);
158
+ if (!response.ok) {
159
+ throw new Error('Failed to search skills');
160
+ }
161
+ return await response.json();
162
+ }
163
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";AAAA;;GAEG;;AA8BH,wCAMC;AAKD,gDAyCC;AAKD,gDAoEC;AAKD,sCAcC;AAKD,4CAaC;AAKD,0CAaC;AAhND,MAAM,QAAQ,GAAG,2BAA2B,CAAC;AAC7C,MAAM,eAAe,GAAG,mCAAmC,CAAC;AAwB5D;;GAEG;AACH,SAAgB,cAAc,CAAC,KAAa;IACxC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACtC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IAC/D,CAAC;IACD,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB,CACpC,KAAa,EACb,IAAY;IAEZ,0BAA0B;IAC1B,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CACxB,GAAG,eAAe,IAAI,KAAK,IAAI,IAAI,qBAAqB,CAC3D,CAAC;QACF,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAmB,CAAC;QAClD,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,0BAA0B;IAC9B,CAAC;IAED,iBAAiB;IACjB,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CACxB,GAAG,eAAe,IAAI,KAAK,IAAI,IAAI,kBAAkB,CACxD,CAAC;QACF,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAmB,CAAC;QAClD,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,SAAS;IACb,CAAC;IAED,oBAAoB;IACpB,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CACxB,GAAG,eAAe,IAAI,KAAK,IAAI,IAAI,uBAAuB,CAC7D,CAAC;QACF,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAmB,CAAC;QAClD,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,SAAS;IACb,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB,CACpC,KAAa,EACb,IAAY,EACZ,KAAe;IAEf,MAAM,eAAe,GAAqB,EAAE,CAAC;IAE7C,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC;YACD,uEAAuE;YACvE,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,gCAAgC,KAAK,IAAI,IAAI,aAAa,QAAQ,EAAE,CAAC;gBACpF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;gBAErC,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACd,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAiE,CAAC;oBAEtG,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;wBAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;4BAC5C,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;4BACpD,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;gCAClB,eAAe,CAAC,IAAI,CAAC;oCACjB,IAAI,EAAE,IAAI,CAAC,IAAI;oCACf,OAAO,EAAE,MAAM,YAAY,CAAC,IAAI,EAAE;iCACrC,CAAC,CAAC;4BACP,CAAC;wBACL,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,cAAc;gBACd,MAAM,GAAG,GAAG,GAAG,eAAe,IAAI,KAAK,IAAI,IAAI,SAAS,QAAQ,EAAE,CAAC;gBACnE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;gBAElC,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACd,eAAe,CAAC,IAAI,CAAC;wBACjB,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE;qBACjC,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAC;QAC5D,CAAC;IACL,CAAC;IAED,iDAAiD;IACjD,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QAErF,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACD,MAAM,GAAG,GAAG,GAAG,eAAe,IAAI,KAAK,IAAI,IAAI,SAAS,IAAI,EAAE,CAAC;gBAC/D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;gBAElC,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACd,eAAe,CAAC,IAAI,CAAC;wBACjB,IAAI,EAAE,IAAI;wBACV,OAAO,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE;qBACjC,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACL,SAAS;YACb,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,eAAe,CAAC;AAC3B,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa,CAAC,KAAa,EAAE,IAAY;IAC3D,IAAI,CAAC;QACD,MAAM,KAAK,CAAC,GAAG,QAAQ,iBAAiB,EAAE;YACtC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACjB,YAAY,EAAE,KAAK;gBACnB,WAAW,EAAE,IAAI;gBACjB,WAAW,EAAE,OAAO;aACvB,CAAC;SACL,CAAC,CAAC;IACP,CAAC;IAAC,MAAM,CAAC;QACL,kDAAkD;IACtD,CAAC;AACL,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CAClC,QAAgB,EAAE,EAClB,WAAoB,KAAK;IAEzB,MAAM,QAAQ,GAAG,MAAM,KAAK,CACxB,GAAG,QAAQ,6BAA6B,KAAK,aAAa,QAAQ,EAAE,CACvE,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAa,CAAC;AAC5C,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe,CACjC,KAAa,EACb,QAAgB,EAAE;IAElB,MAAM,QAAQ,GAAG,MAAM,KAAK,CACxB,GAAG,QAAQ,oBAAoB,kBAAkB,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE,CAC5E,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAa,CAAC;AAC5C,CAAC"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "uixskills",
3
+ "version": "0.1.0",
4
+ "description": "CLI tool for installing UI/UX skills from the UIXskills gallery",
5
+ "author": "UIXskills",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/hooosberg/UIXskills"
10
+ },
11
+ "keywords": [
12
+ "uixskills",
13
+ "ui",
14
+ "ux",
15
+ "skills",
16
+ "cli",
17
+ "design",
18
+ "components"
19
+ ],
20
+ "bin": {
21
+ "uixskills": "dist/index.js"
22
+ },
23
+ "main": "./dist/index.js",
24
+ "types": "./dist/index.d.ts",
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "scripts": {
29
+ "build": "tsc",
30
+ "dev": "tsc --watch",
31
+ "prepublishOnly": "npm run build",
32
+ "test": "node dist/index.js --help"
33
+ },
34
+ "dependencies": {
35
+ "chalk": "^5.3.0",
36
+ "commander": "^12.0.0",
37
+ "node-fetch": "^3.3.2",
38
+ "ora": "^8.0.1"
39
+ },
40
+ "devDependencies": {
41
+ "@types/node": "^20.11.0",
42
+ "typescript": "^5.3.3"
43
+ },
44
+ "engines": {
45
+ "node": ">=18.0.0"
46
+ }
47
+ }