alexui 1.0.0 → 1.0.2

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 CHANGED
@@ -1,42 +1,68 @@
1
- # alexui CLI
1
+ <div align="center">
2
+ <h1>✨ AlexUI CLI ✨</h1>
3
+ <p><b>Componentes React glassmorphic premium directo a tu proyecto</b></p>
4
+ <p>Estilo shadcn: instalás el código fuente, no dependés de paquetes compilados.</p>
5
+
6
+ [![Website](https://img.shields.io/badge/Website-alexui.netlify.app-ec4899?style=for-the-badge&logo=react)](https://alexui.netlify.app/)
7
+ [![NPM Version](https://img.shields.io/npm/v/alexui?style=for-the-badge&color=6366f1)](https://www.npmjs.com/package/alexui)
8
+ </div>
2
9
 
3
- **AlexUI by Alexis Jardin** — instalá componentes glassmorphic en tu proyecto React (estilo shadcn: copiás el código fuente).
10
+ <br />
4
11
 
5
- ## Requisitos
12
+ ## 🌟 Explorá el Catálogo Interactivo
13
+
14
+ Antes de instalar nada, date una vuelta por nuestro catálogo para ver los más de **80 componentes en vivo**, probar temas, interactuar con la UI y copiar prompts optimizados para IA (Claude, Cursor, etc).
15
+
16
+ 👉 **[Descubrí AlexUI en alexui.netlify.app](https://alexui.netlify.app/)**
17
+
18
+ ---
19
+
20
+ ## 🚀 Requisitos
6
21
 
7
22
  - Node.js 18+
8
- - Proyecto React con Tailwind CSS v4
23
+ - Proyecto React (Vite, Next.js, etc)
24
+ - **Tailwind CSS v4** configurado
25
+
26
+ ## 💻 Instalación Rápida
9
27
 
10
- ## Instalación
28
+ La CLI de `alexui` hace todo el trabajo por vos. No hace falta instalarla globalmente, usá `npx`:
11
29
 
12
30
  ```bash
31
+ # 1. Inicializá la configuración en la raíz de tu proyecto
13
32
  npx alexui@latest init
14
- npx alexui@latest add dock
33
+
34
+ # 2. Agregá los componentes que te gusten
35
+ npx alexui@latest add dock loginform
15
36
  ```
16
37
 
17
- O global:
38
+ ## 💖 TUI Interactiva (Recomendado)
39
+
40
+ Si querés la mejor experiencia visual, la CLI viene con una interfaz de terminal premium con gradientes y menús interactivos.
18
41
 
19
42
  ```bash
20
- npm install -g alexui
21
- alexui tui
43
+ npx alexui@latest tui
22
44
  ```
23
45
 
24
- ## Comandos
46
+ Desde ahí vas a poder navegar por todo el registro de componentes usando las flechas de tu teclado y agregarlos visualmente a tu proyecto.
47
+
48
+ ## 🛠 Comandos Disponibles
25
49
 
26
50
  | Comando | Descripción |
27
51
  |---------|-------------|
28
- | `alexui init` | Crea `alexui.json` y opcionalmente el CSS de tema |
29
- | `alexui add <id>` | Copia componente(s) y dependencias internas |
30
- | `alexui list` | Lista los 86 componentes del registry |
31
- | `alexui tui` | Modo interactivo con @clack/prompts |
52
+ | `alexui init` | Crea el archivo `alexui.json` y opcionalmente el CSS base glassmorphic |
53
+ | `alexui add <id>` | Copia el componente elegido y resuelve sus dependencias internas automáticamente |
54
+ | `alexui list` | Lista todos los componentes disponibles en el registry |
55
+ | `alexui tui` | Abre el Modo Interactivo en terminal |
32
56
 
33
- ### Proyecto externo
57
+ ### Usar en un proyecto externo
58
+ Si estás parado en otra carpeta, podés apuntar la CLI hacia tu app usando `--cwd`:
34
59
 
35
60
  ```bash
36
- alexui --cwd ../mi-app add loginform
61
+ npx alexui@latest --cwd ../mi-app add loginform
37
62
  ```
38
63
 
39
- ## Configuración (`alexui.json`)
64
+ ## ⚙️ Configuración (`alexui.json`)
65
+ Cuando corras `init`, se te va a generar un archivo como este para que la CLI sepa dónde meter las cosas:
40
66
 
41
67
  ```json
42
68
  {
@@ -45,13 +71,7 @@ alexui --cwd ../mi-app add loginform
45
71
  }
46
72
  ```
47
73
 
48
- ## Catálogo y documentación
49
-
50
- - Sitio: [alexui.dev](https://alexui.dev) *(actualizar cuando esté en producción)*
51
- - Preview en vivo, docs y prompts IA por componente
52
-
53
- ## Licencia
54
-
55
- MIT — © 2026 Alexis Jardin. Los componentes copiados a tu proyecto son tuyos para modificar.
74
+ ## 📜 Licencia
56
75
 
57
- Templates Pro y licencias comerciales: ver sitio AlexUI Pro (próximamente).
76
+ MIT © 2026 Alexis Jardin.
77
+ Los componentes copiados a tu proyecto son tuyos para modificar, extender y usar en producción como quieras.
package/dist/index.js CHANGED
@@ -56,5 +56,5 @@ if (!isCommandMode) {
56
56
  await runTui(projectDir);
57
57
  }
58
58
  else {
59
- program.parse(['node', 'alexui', ...args], { from: 'user' });
59
+ program.parse(args, { from: 'user' });
60
60
  }
@@ -12,22 +12,23 @@ export function renderProjectPanel(cwd) {
12
12
  const lines = [
13
13
  statusBadge(ready) + pc.dim(' ') + pc.dim(shortenPath(cwd, 44)),
14
14
  '',
15
- `${icon.project} ${pc.bold('Proyecto')} ${pc.white(shortenPath(cwd))}`,
16
- `${icon.pm} ${pc.bold('Gestor')} ${pc.cyan(pm)}`,
17
- `${icon.list} ${pc.bold('Catálogo')} ${pc.dim(`AlexUI ${registry.version} · ${registry.componentCount} componentes`)}`,
15
+ ` ${pc.cyan(icon.project)} ${pc.bold('Proyecto').padEnd(10)} ${pc.white(shortenPath(cwd))}`,
16
+ ` ${pc.cyan(icon.pm)} ${pc.bold('Gestor').padEnd(10)} ${pc.magenta(pm)}`,
17
+ ` ${pc.cyan(icon.list)} ${pc.bold('Catálogo').padEnd(10)} ${pc.dim(`AlexUI ${registry.version} · ${registry.componentCount} componentes`)}`,
18
18
  ];
19
19
  if (ready) {
20
20
  const config = readConfig(cwd);
21
- lines.splice(3, 0, `${icon.folder} ${pc.bold('UI')} ${pc.dim(path.join(cwd, config.componentDir))}`, `${icon.css} ${pc.bold('CSS')} ${pc.dim(path.join(cwd, config.tailwind.css))}`);
21
+ lines.splice(3, 0, ` ${pc.cyan(icon.folder)} ${pc.bold('UI').padEnd(10)} ${pc.dim(path.join(cwd, config.componentDir))}`, ` ${pc.cyan(icon.css)} ${pc.bold('CSS').padEnd(10)} ${pc.dim(path.join(cwd, config.tailwind.css))}`);
22
22
  }
23
23
  else {
24
- lines.splice(3, 0, pc.yellow(` ${icon.warn} Sin alexui.json — inicializá el proyecto primero`));
24
+ lines.splice(3, 0, pc.yellow(` ${icon.warn} Sin alexui.json — inicializá el proyecto primero`));
25
25
  }
26
26
  return lines.join('\n');
27
27
  }
28
28
  export function printWelcome(cwd) {
29
29
  const registry = getRegistry();
30
30
  console.log(renderBanner(registry.version, registry.componentCount));
31
+ p.intro(pc.bgCyan(pc.black(' AlexUI ')));
31
32
  p.note(renderProjectPanel(cwd), `${icon.logo} Panel de control`);
32
33
  }
33
34
  export function printProjectPanel(cwd, title = 'Estado actualizado') {
@@ -36,13 +37,13 @@ export function printProjectPanel(cwd, title = 'Estado actualizado') {
36
37
  export function menuOptions(cwd) {
37
38
  const registry = getRegistry();
38
39
  return [
39
- { value: 'init', label: `${icon.init} Inicializar proyecto`, hint: 'alexui.json + tema CSS' },
40
- { value: 'add', label: `${icon.add} Agregar componentes`, hint: 'multiselección rápida' },
41
- { value: 'browse', label: `${icon.browse} Explorar catálogo`, hint: 'detalle y preview' },
42
- { value: 'search', label: `${icon.search} Buscar`, hint: 'id, título o categoría' },
43
- { value: 'list', label: `${icon.list} Ver catálogo completo`, hint: `${registry.componentCount} items` },
44
- { value: 'chdir', label: `${icon.chdir} Cambiar proyecto`, hint: shortenPath(cwd, 36) },
45
- { value: 'exit', label: `${icon.exit} Salir`, hint: 'cerrar TUI' },
40
+ { value: 'init', label: `${pc.cyan(icon.init)} ${'Inicializar proyecto'.padEnd(22)}`, hint: 'alexui.json + tema CSS' },
41
+ { value: 'add', label: `${pc.cyan(icon.add)} ${'Agregar componentes'.padEnd(22)}`, hint: 'multiselección rápida' },
42
+ { value: 'browse', label: `${pc.cyan(icon.browse)} ${'Explorar catálogo'.padEnd(22)}`, hint: 'detalle y preview' },
43
+ { value: 'search', label: `${pc.cyan(icon.search)} ${'Buscar'.padEnd(22)}`, hint: 'id, título o categoría' },
44
+ { value: 'list', label: `${pc.cyan(icon.list)} ${'Ver catálogo completo'.padEnd(22)}`, hint: `${registry.componentCount} items` },
45
+ { value: 'chdir', label: `${pc.cyan(icon.chdir)} ${'Cambiar proyecto'.padEnd(22)}`, hint: shortenPath(cwd, 36) },
46
+ { value: 'exit', label: `${pc.red(icon.exit)} ${'Salir'.padEnd(22)}`, hint: 'cerrar TUI' },
46
47
  ];
47
48
  }
48
49
  export function sectionHeader(title) {
@@ -1,23 +1,23 @@
1
1
  export declare const icon: {
2
- readonly logo: "";
3
- readonly project: "";
4
- readonly folder: "";
5
- readonly css: "";
2
+ readonly logo: "";
3
+ readonly project: "📦";
4
+ readonly folder: "📁";
5
+ readonly css: "🎨";
6
6
  readonly pm: "⚡";
7
- readonly init: "";
8
- readonly add: "";
9
- readonly browse: "";
10
- readonly search: "";
11
- readonly list: "";
12
- readonly chdir: "";
13
- readonly exit: "";
14
- readonly complete: "";
15
- readonly atomic: "";
16
- readonly npm: "";
17
- readonly internal: "";
18
- readonly ok: "";
19
- readonly warn: "!";
20
- readonly back: "";
7
+ readonly init: "🚀";
8
+ readonly add: "📦";
9
+ readonly browse: "🧭";
10
+ readonly search: "🔍";
11
+ readonly list: "📜";
12
+ readonly chdir: "🔀";
13
+ readonly exit: "";
14
+ readonly complete: "🧊";
15
+ readonly atomic: "💧";
16
+ readonly npm: "";
17
+ readonly internal: "🔗";
18
+ readonly ok: "";
19
+ readonly warn: "";
20
+ readonly back: "";
21
21
  };
22
22
  export declare function categoryIcon(category: string): string;
23
23
  export declare function shortenPath(fullPath: string, max?: number): string;
package/dist/tui/theme.js CHANGED
@@ -1,24 +1,25 @@
1
1
  import pc from 'picocolors';
2
+ import gradient from 'gradient-string';
2
3
  export const icon = {
3
- logo: '',
4
- project: '',
5
- folder: '',
6
- css: '',
4
+ logo: '',
5
+ project: '📦',
6
+ folder: '📁',
7
+ css: '🎨',
7
8
  pm: '⚡',
8
- init: '',
9
- add: '',
10
- browse: '',
11
- search: '',
12
- list: '',
13
- chdir: '',
14
- exit: '',
15
- complete: '',
16
- atomic: '',
17
- npm: '',
18
- internal: '',
19
- ok: '',
20
- warn: '!',
21
- back: '',
9
+ init: '🚀',
10
+ add: '📦',
11
+ browse: '🧭',
12
+ search: '🔍',
13
+ list: '📜',
14
+ chdir: '🔀',
15
+ exit: '',
16
+ complete: '🧊',
17
+ atomic: '💧',
18
+ npm: '',
19
+ internal: '🔗',
20
+ ok: '',
21
+ warn: '',
22
+ back: '',
22
23
  };
23
24
  const CATEGORY_ICONS = {
24
25
  entradas: '⌨',
@@ -42,30 +43,38 @@ export function shortenPath(fullPath, max = 52) {
42
43
  return `${parts[0]}/…/${parts.slice(-2).join('/')}`;
43
44
  }
44
45
  export function renderBanner(version, componentCount) {
45
- const line = ''.repeat(36);
46
+ const brandGradient = gradient(['#06b6d4', '#d946ef']); // Cyan to Magenta
47
+ const asciiLogo = `
48
+ ___ __ __ ______
49
+ / | / /____ _ / / / / _/
50
+ / /| | / / _ \\ |/_// / / // /
51
+ / ___ |/ / __/> </ /_/ // /
52
+ /_/ |_/_/\\___/_/|_|\\____/___/
53
+ `;
46
54
  return [
47
55
  '',
48
- pc.magenta(` ${icon.logo} `) + pc.bold(pc.white('AlexUI')) + pc.dim(` v${version}`),
49
- pc.dim(` ${line}`),
50
- pc.dim(` ${componentCount} componentes`) + pc.magenta(' · ') + pc.dim('glassmorphic react'),
56
+ brandGradient.multiline(asciiLogo),
57
+ '',
58
+ ` ${pc.bold(pc.white('AlexUI CLI'))} ${pc.dim(`v${version}`)}`,
59
+ ` ${pc.dim(`${componentCount} componentes`)} ${pc.magenta('·')} ${pc.dim('glassmorphic react')}`,
51
60
  '',
52
61
  ].join('\n');
53
62
  }
54
63
  export function renderDivider(label) {
55
64
  if (!label)
56
- return pc.dim(' ────────────────────────────────────');
57
- const pad = Math.max(2, 34 - label.length);
58
- return pc.dim(` ── ${label} ${'─'.repeat(pad)}`);
65
+ return pc.dim(' ────────────────────────────────────────────');
66
+ const pad = Math.max(2, 42 - label.length);
67
+ return pc.dim(` ── `) + pc.white(pc.bold(label)) + pc.dim(` ${'─'.repeat(pad)}`);
59
68
  }
60
69
  export function statusBadge(ready) {
61
70
  return ready
62
- ? pc.bgGreen(pc.black(` ${icon.ok} listo `))
63
- : pc.bgYellow(pc.black(` ${icon.warn} sin init `));
71
+ ? pc.bgGreen(pc.black(` ${icon.ok} Listo `))
72
+ : pc.bgYellow(pc.black(` ${icon.warn} Sin init `));
64
73
  }
65
74
  export function groupBadge(group) {
66
75
  return group === 'completos'
67
- ? pc.bgMagenta(pc.black(` ${icon.complete} completo `))
68
- : pc.bgBlue(pc.black(` ${icon.atomic} atómico `));
76
+ ? pc.bgMagenta(pc.black(` ${icon.complete} Completo `))
77
+ : pc.bgBlue(pc.black(` ${icon.atomic} Atómico `));
69
78
  }
70
79
  export function depPills(deps, kind) {
71
80
  if (deps.length === 0)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alexui",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "CLI para agregar componentes AlexUI by Alexis Jardin a tu proyecto React",
5
5
  "author": "Alexis Jardin",
6
6
  "license": "MIT",
@@ -35,6 +35,7 @@
35
35
  "dependencies": {
36
36
  "@clack/prompts": "^0.10.1",
37
37
  "commander": "^13.1.0",
38
+ "gradient-string": "^3.0.0",
38
39
  "picocolors": "^1.1.1"
39
40
  },
40
41
  "devDependencies": {