agnosticui-cli 2.0.0-alpha.10

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 (50) hide show
  1. package/README.md +135 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +100 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/add.d.ts +3 -0
  7. package/dist/commands/add.d.ts.map +1 -0
  8. package/dist/commands/add.js +443 -0
  9. package/dist/commands/add.js.map +1 -0
  10. package/dist/commands/init.d.ts +3 -0
  11. package/dist/commands/init.d.ts.map +1 -0
  12. package/dist/commands/init.js +449 -0
  13. package/dist/commands/init.js.map +1 -0
  14. package/dist/commands/list.d.ts +2 -0
  15. package/dist/commands/list.d.ts.map +1 -0
  16. package/dist/commands/list.js +72 -0
  17. package/dist/commands/list.js.map +1 -0
  18. package/dist/commands/remove.d.ts +3 -0
  19. package/dist/commands/remove.d.ts.map +1 -0
  20. package/dist/commands/remove.js +96 -0
  21. package/dist/commands/remove.js.map +1 -0
  22. package/dist/commands/sync.d.ts +6 -0
  23. package/dist/commands/sync.d.ts.map +1 -0
  24. package/dist/commands/sync.js +143 -0
  25. package/dist/commands/sync.js.map +1 -0
  26. package/dist/types/index.d.ts +62 -0
  27. package/dist/types/index.d.ts.map +1 -0
  28. package/dist/types/index.js +5 -0
  29. package/dist/types/index.js.map +1 -0
  30. package/dist/utils/components.d.ts +76 -0
  31. package/dist/utils/components.d.ts.map +1 -0
  32. package/dist/utils/components.js +208 -0
  33. package/dist/utils/components.js.map +1 -0
  34. package/dist/utils/config.d.ts +9 -0
  35. package/dist/utils/config.d.ts.map +1 -0
  36. package/dist/utils/config.js +78 -0
  37. package/dist/utils/config.js.map +1 -0
  38. package/dist/utils/dependencies.d.ts +23 -0
  39. package/dist/utils/dependencies.d.ts.map +1 -0
  40. package/dist/utils/dependencies.js +93 -0
  41. package/dist/utils/dependencies.js.map +1 -0
  42. package/dist/utils/files.d.ts +48 -0
  43. package/dist/utils/files.d.ts.map +1 -0
  44. package/dist/utils/files.js +171 -0
  45. package/dist/utils/files.js.map +1 -0
  46. package/dist/utils/logger.d.ts +12 -0
  47. package/dist/utils/logger.d.ts.map +1 -0
  48. package/dist/utils/logger.js +37 -0
  49. package/dist/utils/logger.js.map +1 -0
  50. package/package.json +60 -0
@@ -0,0 +1,449 @@
1
+ /**
2
+ * ag init command - Initialize AgnosticUI Local in a project
3
+ */
4
+ import * as p from '@clack/prompts';
5
+ import path from 'node:path';
6
+ import { existsSync } from 'node:fs';
7
+ import { readFile, writeFile, copyFile } from 'node:fs/promises';
8
+ import { logger } from '../utils/logger.js';
9
+ import { loadConfig, saveConfig, createDefaultConfig } from '../utils/config.js';
10
+ import { extractTarball, ensureDir, pathExists, updateIgnoreFile, updateEslintConfig } from '../utils/files.js';
11
+ import { getFrameworkDependencies, checkDependenciesInstalled, installDependencies, detectPackageManager, } from '../utils/dependencies.js';
12
+ import pc from 'picocolors';
13
+ const DEFAULT_COMPONENTS_PATH = './src/components/ag';
14
+ const DEFAULT_REFERENCE_PATH = './agnosticui';
15
+ export async function init(options = {}) {
16
+ console.log('');
17
+ p.intro(pc.bold(pc.cyan('AgnosticUI Local - Initialization')));
18
+ // Check if already initialized
19
+ const existingConfig = await loadConfig();
20
+ if (existingConfig) {
21
+ logger.error('AgnosticUI is already initialized in this project.');
22
+ logger.info('Run ' + pc.cyan('npx agnosticui-cli add <component>') + ' to add components.');
23
+ process.exit(1);
24
+ }
25
+ // Validate we're inside a project directory
26
+ if (!existsSync(path.join(process.cwd(), 'package.json'))) {
27
+ logger.error("It looks like you haven't set up a project yet.");
28
+ logger.info('Please run ' + pc.cyan('npm create vite@latest') + ' before initializing AgnosticUI.');
29
+ process.exit(1);
30
+ }
31
+ const hasMainTs = existsSync(path.join(process.cwd(), 'src', 'main.ts'));
32
+ const hasMainTsx = existsSync(path.join(process.cwd(), 'src', 'main.tsx'));
33
+ const entryPoint = hasMainTsx ? 'main.tsx' : hasMainTs ? 'main.ts' : 'main.{ts|tsx}';
34
+ // Prompt for framework if not provided
35
+ let framework = options.framework;
36
+ if (!framework) {
37
+ if (options.skipPrompts) {
38
+ logger.error('Framework not specified. Use --framework option in non-interactive mode.');
39
+ logger.info('Example: ' + pc.cyan('npx agnosticui-cli init --framework react --skip-prompts'));
40
+ process.exit(1);
41
+ }
42
+ const frameworkChoice = await p.select({
43
+ message: 'Which framework are you using?',
44
+ options: [
45
+ { value: 'react', label: 'React' },
46
+ { value: 'vue', label: 'Vue' },
47
+ { value: 'lit', label: 'Lit' },
48
+ { value: 'svelte', label: 'Svelte' },
49
+ { value: 'other', label: 'Other (Angular, Solid, Preact, etc. - Uses web components)' },
50
+ ],
51
+ });
52
+ if (p.isCancel(frameworkChoice)) {
53
+ p.cancel('Operation cancelled.');
54
+ process.exit(0);
55
+ }
56
+ framework = frameworkChoice;
57
+ }
58
+ // Prompt for components path if not provided
59
+ let componentsPath = options.componentsPath;
60
+ if (!componentsPath) {
61
+ if (options.skipPrompts) {
62
+ componentsPath = DEFAULT_COMPONENTS_PATH;
63
+ }
64
+ else {
65
+ const pathChoice = await p.text({
66
+ message: 'Where should components be generated?',
67
+ placeholder: DEFAULT_COMPONENTS_PATH,
68
+ defaultValue: DEFAULT_COMPONENTS_PATH,
69
+ });
70
+ if (p.isCancel(pathChoice)) {
71
+ p.cancel('Operation cancelled.');
72
+ process.exit(0);
73
+ }
74
+ componentsPath = pathChoice;
75
+ }
76
+ }
77
+ // Determine tarball path
78
+ const version = options.version || 'alpha';
79
+ const tarballPath = options.tarball || await determineTarballPath(version);
80
+ if (!tarballPath) {
81
+ logger.error('Could not find AgnosticUI tarball.');
82
+ logger.info('Please specify a tarball path with --tarball option or ensure agnosticui-core is published to NPM.');
83
+ process.exit(1);
84
+ }
85
+ // Start spinner
86
+ const spinner = p.spinner();
87
+ spinner.start('Initializing AgnosticUI Local...');
88
+ try {
89
+ // Extract tarball to reference path
90
+ spinner.message('Extracting reference library...');
91
+ await ensureDir(DEFAULT_REFERENCE_PATH);
92
+ await extractTarball(tarballPath, DEFAULT_REFERENCE_PATH);
93
+ // Read version from extracted tarball
94
+ const versionJsonPath = path.join(DEFAULT_REFERENCE_PATH, 'version.json');
95
+ let tarballVersion = '2.0.0-alpha'; // fallback
96
+ if (pathExists(versionJsonPath)) {
97
+ try {
98
+ const versionData = JSON.parse(await readFile(versionJsonPath, 'utf-8'));
99
+ tarballVersion = versionData.version || tarballVersion;
100
+ }
101
+ catch {
102
+ // Use fallback version
103
+ }
104
+ }
105
+ // Create config file
106
+ spinner.message('Creating configuration...');
107
+ const config = createDefaultConfig(framework, componentsPath, tarballVersion);
108
+ // Add tarball info to config
109
+ config.tarball = {
110
+ source: path.resolve(tarballPath),
111
+ version: tarballVersion,
112
+ installed: new Date().toISOString(),
113
+ };
114
+ await saveConfig(config);
115
+ // Create components directory
116
+ spinner.message('Creating components directory...');
117
+ await ensureDir(componentsPath);
118
+ // Copy CSS tokens to components/styles directory
119
+ spinner.message('Copying CSS tokens...');
120
+ const stylesPath = path.join(componentsPath, 'styles');
121
+ await ensureDir(stylesPath);
122
+ const tokensSourcePath = path.join(DEFAULT_REFERENCE_PATH, 'src', 'styles');
123
+ const tokenFiles = ['ag-tokens.css', 'ag-tokens-dark.css'];
124
+ for (const tokenFile of tokenFiles) {
125
+ const srcFile = path.join(tokensSourcePath, tokenFile);
126
+ const destFile = path.join(stylesPath, tokenFile);
127
+ if (pathExists(srcFile)) {
128
+ await copyFile(srcFile, destFile);
129
+ }
130
+ }
131
+ // Copy shared infrastructure (shared, utils, styles, types)
132
+ spinner.message('Copying shared infrastructure...');
133
+ const { copyDirectoryFiltered } = await import('../utils/files.js');
134
+ const infraDirs = ['shared', 'utils', 'styles', 'types'];
135
+ for (const dir of infraDirs) {
136
+ const srcDir = path.join(DEFAULT_REFERENCE_PATH, 'src', dir);
137
+ const destDir = path.join(componentsPath, dir);
138
+ if (pathExists(srcDir)) {
139
+ await copyDirectoryFiltered(srcDir, destDir, {
140
+ exclude: ['*.spec.ts', '*.spec.js'] // Skip test files
141
+ });
142
+ }
143
+ }
144
+ spinner.stop(pc.green('✓') + ' Initialized successfully!');
145
+ // Check and install dependencies
146
+ await handleDependencies(framework, options.skipPrompts);
147
+ // Update ignore files for the reference library
148
+ spinner.message('Updating .gitignore...');
149
+ const referenceDirName = path.basename(DEFAULT_REFERENCE_PATH);
150
+ const ignorePattern = `${referenceDirName}/`;
151
+ // Update .gitignore
152
+ await updateIgnoreFile(path.join(process.cwd(), '.gitignore'), ignorePattern);
153
+ // Check for eslint.config.js and update or warn
154
+ const eslintConfigPath = path.join(process.cwd(), 'eslint.config.js');
155
+ if (pathExists(eslintConfigPath)) {
156
+ spinner.message('Updating eslint.config.js...');
157
+ const updated = await updateEslintConfig(eslintConfigPath, `${referenceDirName}/`);
158
+ if (!updated) {
159
+ logger.newline();
160
+ logger.info(pc.yellow('ESLint Configuration:') + ' Please add the following to your ' + pc.cyan('eslint.config.js') + ':');
161
+ console.log(' ' + pc.dim('{'));
162
+ console.log(' ' + pc.cyan(`ignores: ["${referenceDirName}/"]`));
163
+ console.log(' ' + pc.dim('}'));
164
+ }
165
+ }
166
+ // Update TS Configs
167
+ spinner.message('Configuring TypeScript...');
168
+ await updateTsConfigs();
169
+ spinner.stop(pc.green('✓') + ' Initialized successfully!');
170
+ logger.newline();
171
+ // Generate example import statement based on framework
172
+ let exampleImport = '';
173
+ if (framework === 'react') {
174
+ exampleImport = `import { ReactButton } from '${componentsPath}/Button/react/ReactButton'`;
175
+ }
176
+ else if (framework === 'vue') {
177
+ exampleImport = `import VueButton from '${componentsPath}/Button/vue/VueButton.vue'`;
178
+ }
179
+ else {
180
+ // Lit, Svelte, and Other (Angular, Solid, etc.) use web components from core
181
+ exampleImport = `import '${componentsPath}/Button/core/Button'`;
182
+ }
183
+ logger.box('Next Steps:', [
184
+ pc.dim(`1. Import CSS tokens in your app entry point (${entryPoint}):`),
185
+ ' ' + logger.code(`import '${componentsPath}/styles/ag-tokens.css'`),
186
+ ' ' + logger.code(`import '${componentsPath}/styles/ag-tokens-dark.css'`),
187
+ pc.dim(' (Or use <link> tags in your index.html)'),
188
+ '',
189
+ pc.dim('2. Set up theming (override Vite\'s default dark mode):'),
190
+ ' ' + pc.dim('Add to your main CSS file or <style> tag:'),
191
+ ' ' + logger.code('body { background: var(--ag-background-primary); color: var(--ag-text-primary); }'),
192
+ ' ' + pc.dim('For dark mode, add to <html>: data-theme="dark"'),
193
+ ' ' + pc.dim('See: https://www.agnosticui.com/theming.html'),
194
+ '',
195
+ pc.dim('3. Add a component:'),
196
+ ' ' + logger.command('npx agnosticui-cli add button'),
197
+ '',
198
+ pc.dim('4. List available components:'),
199
+ ' ' + logger.command('npx agnosticui-cli list'),
200
+ '',
201
+ pc.dim('5. Use in your app:'),
202
+ ' ' + logger.code(exampleImport),
203
+ ]);
204
+ // Clean up temporary download directory if it exists
205
+ await cleanupTempDownload();
206
+ }
207
+ catch (error) {
208
+ spinner.stop(pc.red('✖') + ' Failed to initialize');
209
+ logger.error(`Initialization failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
210
+ // Clean up on error too
211
+ await cleanupTempDownload();
212
+ process.exit(1);
213
+ }
214
+ }
215
+ /**
216
+ * Update tsconfig files with required options
217
+ */
218
+ async function updateTsConfigs() {
219
+ const tsconfigFiles = ['tsconfig.json', 'tsconfig.app.json', 'tsconfig.node.json'];
220
+ const cwd = process.cwd();
221
+ let updatedAny = false;
222
+ for (const file of tsconfigFiles) {
223
+ const filePath = path.join(cwd, file);
224
+ if (pathExists(filePath)) {
225
+ try {
226
+ const content = await readFile(filePath, 'utf-8');
227
+ // Try to parse JSON (support comments by stripping them)
228
+ let json;
229
+ try {
230
+ const jsonContent = stripJsonComments(content);
231
+ json = JSON.parse(jsonContent);
232
+ }
233
+ catch {
234
+ // If parsing still fails
235
+ continue;
236
+ }
237
+ let modified = false;
238
+ // Ensure compilerOptions exists
239
+ if (!json.compilerOptions) {
240
+ json.compilerOptions = {};
241
+ modified = true;
242
+ }
243
+ // Set experimentalDecorators
244
+ if (json.compilerOptions.experimentalDecorators !== true) {
245
+ json.compilerOptions.experimentalDecorators = true;
246
+ modified = true;
247
+ }
248
+ // Set useDefineForClassFields
249
+ if (json.compilerOptions.useDefineForClassFields !== false) {
250
+ json.compilerOptions.useDefineForClassFields = false;
251
+ modified = true;
252
+ }
253
+ // Disable erasableSyntaxOnly if present (as it conflicts with decorators)
254
+ if (json.compilerOptions.erasableSyntaxOnly === true) {
255
+ json.compilerOptions.erasableSyntaxOnly = false;
256
+ modified = true;
257
+ }
258
+ // Add exclude pattern if not present
259
+ if (!json.exclude) {
260
+ json.exclude = [];
261
+ }
262
+ const excludePatterns = ['agnosticui', '**/agnosticui/**'];
263
+ for (const pattern of excludePatterns) {
264
+ if (!json.exclude.includes(pattern)) {
265
+ json.exclude.push(pattern);
266
+ modified = true;
267
+ }
268
+ }
269
+ if (modified) {
270
+ await writeFile(filePath, JSON.stringify(json, null, 2));
271
+ logger.info(`Updated ${file} with required configuration.`);
272
+ updatedAny = true;
273
+ }
274
+ }
275
+ catch (error) {
276
+ // Ignore errors, user will see the note
277
+ }
278
+ }
279
+ }
280
+ // Show verify note instead of "Add to..." if we updated files
281
+ showTypeScriptNote(updatedAny);
282
+ }
283
+ /**
284
+ * Determine the tarball path (local or download from NPM)
285
+ */
286
+ async function determineTarballPath(version = 'alpha') {
287
+ // For local development, look for the tarball in the dist folder
288
+ const localTarballPath = path.resolve(process.cwd(), '../../dist/agnosticui-local-v2.0.0-alpha.tar.gz');
289
+ if (existsSync(localTarballPath)) {
290
+ logger.info('Using local development tarball');
291
+ return localTarballPath;
292
+ }
293
+ // In production, download from NPM registry
294
+ try {
295
+ const { execSync } = await import('child_process');
296
+ const { readdir, rm } = await import('node:fs/promises');
297
+ const tmpDir = path.join(process.cwd(), '.tmp-ag-download');
298
+ await ensureDir(tmpDir);
299
+ logger.info(`Downloading agnosticui-core@${version} from NPM...`);
300
+ // Download package using npm pack
301
+ execSync(`npm pack agnosticui-core@${version}`, {
302
+ cwd: tmpDir,
303
+ stdio: 'pipe'
304
+ });
305
+ // Find the downloaded tarball
306
+ const files = await readdir(tmpDir);
307
+ const tarball = files.find(f => f.startsWith('agnosticui-core-') && f.endsWith('.tgz'));
308
+ if (tarball) {
309
+ return path.join(tmpDir, tarball);
310
+ }
311
+ // Clean up if no tarball found
312
+ await rm(tmpDir, { recursive: true, force: true });
313
+ }
314
+ catch (error) {
315
+ logger.error('Failed to download agnosticui-core from NPM');
316
+ logger.info(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
317
+ }
318
+ return null;
319
+ }
320
+ /**
321
+ * Clean up temporary download directory
322
+ */
323
+ async function cleanupTempDownload() {
324
+ try {
325
+ const { rm } = await import('node:fs/promises');
326
+ const tmpDir = path.join(process.cwd(), '.tmp-ag-download');
327
+ if (pathExists(tmpDir)) {
328
+ await rm(tmpDir, { recursive: true, force: true });
329
+ }
330
+ }
331
+ catch (error) {
332
+ // Ignore cleanup errors - not critical
333
+ }
334
+ }
335
+ /**
336
+ * Handle dependency installation for the selected framework
337
+ */
338
+ async function handleDependencies(framework, skipPrompts = false) {
339
+ const requiredDeps = getFrameworkDependencies(framework);
340
+ // Check if dependencies are already installed
341
+ if (checkDependenciesInstalled(requiredDeps)) {
342
+ logger.newline();
343
+ logger.info('Required dependencies already installed: ' + pc.dim(requiredDeps.join(', ')));
344
+ return;
345
+ }
346
+ // Skip installation in non-interactive mode
347
+ if (skipPrompts) {
348
+ logger.newline();
349
+ logger.info(`This framework requires the following dependencies:`);
350
+ requiredDeps.forEach(dep => {
351
+ console.log(' ' + pc.cyan(dep));
352
+ });
353
+ logger.newline();
354
+ const packageManager = detectPackageManager();
355
+ logger.info(`Install them with: ${pc.cyan(`${packageManager} ${packageManager === 'npm' ? 'install' : 'add'} ${requiredDeps.join(' ')}`)}`);
356
+ return;
357
+ }
358
+ // Detect package manager
359
+ const packageManager = detectPackageManager();
360
+ // Prompt user
361
+ logger.newline();
362
+ logger.info(`This framework requires the following dependencies:`);
363
+ requiredDeps.forEach(dep => {
364
+ console.log(' ' + pc.cyan(dep));
365
+ });
366
+ logger.newline();
367
+ const shouldInstall = await p.confirm({
368
+ message: `Install using ${pc.cyan(packageManager)}?`,
369
+ initialValue: true,
370
+ });
371
+ if (p.isCancel(shouldInstall)) {
372
+ logger.newline();
373
+ logger.warn('Skipped dependency installation.');
374
+ logger.info(`You can install manually later with: ${pc.cyan(`${packageManager} ${packageManager === 'npm' ? 'install' : 'add'} ${requiredDeps.join(' ')}`)}`);
375
+ return;
376
+ }
377
+ if (!shouldInstall) {
378
+ logger.newline();
379
+ logger.warn('Skipped dependency installation.');
380
+ logger.info(`You can install manually later with: ${pc.cyan(`${packageManager} ${packageManager === 'npm' ? 'install' : 'add'} ${requiredDeps.join(' ')}`)}`);
381
+ return;
382
+ }
383
+ // Install dependencies
384
+ const spinner = p.spinner();
385
+ spinner.start('Installing dependencies...');
386
+ try {
387
+ installDependencies(requiredDeps);
388
+ spinner.stop(pc.green('✓') + ' Dependencies installed successfully!');
389
+ }
390
+ catch (error) {
391
+ spinner.stop(pc.red('✖') + ' Failed to install dependencies');
392
+ logger.error(`Installation failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
393
+ logger.info(`You can install manually with: ${pc.cyan(`${packageManager} ${packageManager === 'npm' ? 'install' : 'add'} ${requiredDeps.join(' ')}`)}`);
394
+ }
395
+ }
396
+ /**
397
+ * Show TypeScript decorator configuration note
398
+ */
399
+ function showTypeScriptNote(wasUpdated = false) {
400
+ if (pathExists('tsconfig.json')) {
401
+ logger.newline();
402
+ if (wasUpdated) {
403
+ logger.info(pc.green('TypeScript Configuration Updated:') + ' verified the following settings:');
404
+ }
405
+ else {
406
+ logger.info(pc.yellow('TypeScript Note:') + ' Add to ' + pc.cyan('ALL') + ' tsconfig files:');
407
+ }
408
+ console.log(' ' + pc.dim('"compilerOptions": {'));
409
+ console.log(' ' + pc.cyan('"experimentalDecorators": true'));
410
+ console.log(' ' + pc.dim('},'));
411
+ console.log(' ' + pc.dim('"exclude": ['));
412
+ console.log(' ' + pc.cyan('"agnosticui",'));
413
+ console.log(' ' + pc.cyan('"**/agnosticui/**"'));
414
+ console.log(' ' + pc.dim(']'));
415
+ logger.newline();
416
+ if (!wasUpdated) {
417
+ logger.info(pc.dim('(For Vite: add to both tsconfig.json AND tsconfig.app.json)'));
418
+ }
419
+ }
420
+ }
421
+ /**
422
+ * Strip comments from JSON content
423
+ *
424
+ * The regex matches either:
425
+ * 1. Complete quoted strings (to preserve them, including glob patterns)
426
+ * 2. Single-line comments (// ...)
427
+ * 3. Multi-line comments (slash-star ... star-slash)
428
+ *
429
+ * Only captured comments (group g) are removed; strings are preserved.
430
+ *
431
+ * Example - Vue's tsconfig.app.json contains:
432
+ * "include": ["src/STAR-STAR/STAR.ts", "src/STAR-STAR/STAR.tsx", "src/STAR-STAR/STAR.vue"]
433
+ * (where STAR = asterisk, written this way to avoid closing this JSDoc comment)
434
+ *
435
+ * The glob pattern "src/STAR-STAR/STAR.ts" contains "/STAR-STAR/" which looks like
436
+ * a multi-line comment. The regex must match the ENTIRE quoted string first, so the
437
+ * glob is preserved:
438
+ *
439
+ * Pattern: "(?:\\"|[^"])*"
440
+ * Input: "src/STAR-STAR/STAR.ts"
441
+ * Match: "src/STAR-STAR/STAR.ts" (entire string matched, preserved)
442
+ *
443
+ * Without the full string pattern matching first, the glob would incorrectly
444
+ * be treated as containing a comment and get stripped, corrupting it to "src*.ts".
445
+ */
446
+ function stripJsonComments(json) {
447
+ return json.replace(/"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g, (m, g) => g ? "" : m);
448
+ }
449
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function list(): Promise<void>;
2
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAUA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAyE1C"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * ag list command - List available components
3
+ */
4
+ import path from 'node:path';
5
+ import { logger } from '../utils/logger.js';
6
+ import { loadConfig } from '../utils/config.js';
7
+ import { getAvailableComponents } from '../utils/components.js';
8
+ import { pathExists } from '../utils/files.js';
9
+ import pc from 'picocolors';
10
+ export async function list() {
11
+ // Load config
12
+ const config = await loadConfig();
13
+ if (!config) {
14
+ logger.error('AgnosticUI is not initialized in this project.');
15
+ logger.info('Run ' + pc.cyan('npx agnosticui-cli init') + ' to get started.');
16
+ process.exit(1);
17
+ }
18
+ const referencePath = path.resolve(config.paths.reference);
19
+ // Validate reference library exists
20
+ if (!pathExists(referencePath)) {
21
+ logger.error(`Reference library not found at: ${referencePath}`);
22
+ logger.info('Please run ' + pc.cyan('npx agnosticui-cli init') + ' again.');
23
+ process.exit(1);
24
+ }
25
+ try {
26
+ const availableComponents = await getAvailableComponents(referencePath);
27
+ const addedComponents = Object.keys(config.components);
28
+ logger.newline();
29
+ logger.box('AgnosticUI Local Components', [
30
+ pc.dim(`Framework: ${config.framework}`),
31
+ pc.dim(`Total available: ${availableComponents.length}`),
32
+ pc.dim(`Added to project: ${addedComponents.length}`),
33
+ ]);
34
+ logger.newline();
35
+ console.log(pc.bold('Available Components:'));
36
+ console.log('');
37
+ // Display components in columns
38
+ const columns = 3;
39
+ const rows = Math.ceil(availableComponents.length / columns);
40
+ for (let row = 0; row < rows; row++) {
41
+ const rowComponents = [];
42
+ for (let col = 0; col < columns; col++) {
43
+ const index = row + col * rows;
44
+ if (index < availableComponents.length) {
45
+ const name = availableComponents[index];
46
+ const isAdded = addedComponents.includes(name);
47
+ const displayName = isAdded
48
+ ? pc.green('✓ ' + name)
49
+ : pc.dim(' ' + name);
50
+ rowComponents.push(displayName.padEnd(25));
51
+ }
52
+ }
53
+ console.log(' ' + rowComponents.join(''));
54
+ }
55
+ logger.newline();
56
+ logger.info(pc.green('✓') + ' = Already added to your project');
57
+ logger.newline();
58
+ // Show usage hint
59
+ logger.box('Add Components:', [
60
+ pc.dim('Add a single component:'),
61
+ ' ' + logger.command('npx agnosticui-cli add button'),
62
+ '',
63
+ pc.dim('Add multiple components:'),
64
+ ' ' + logger.command('npx agnosticui-cli add button input checkbox'),
65
+ ]);
66
+ }
67
+ catch (error) {
68
+ logger.error(`Failed to list components: ${error instanceof Error ? error.message : 'Unknown error'}`);
69
+ process.exit(1);
70
+ }
71
+ }
72
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { RemoveOptions } from '../types/index.js';
2
+ export declare function remove(componentNames: string[], options?: RemoveOptions): Promise<void>;
3
+ //# sourceMappingURL=remove.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAOvD,wBAAsB,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkGjG"}