nave-ui-icons 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,174 @@
1
+ # nave-ui-icons
2
+
3
+ Libreria de iconos React para el Design System de Nave.
4
+
5
+ La libreria se penso para resolver tres cosas:
6
+
7
+ - centralizar los iconos del sistema en un solo paquete
8
+ - exponer una API estable para apps y librerias
9
+ - evitar que cada proyecto importe SVGs sueltos o dependa de una implementacion distinta
10
+
11
+ ## Que contiene
12
+
13
+ `nave-ui-icons` expone dos consumos principales:
14
+
15
+ - `nave-ui-icons`
16
+ Usa iconos estaticos tipo Lucide.
17
+ - `nave-ui-icons/icons`
18
+ Usa los iconos Nebula del Design System.
19
+
20
+ Para el sistema de producto, el import recomendado es `nave-ui-icons/icons`.
21
+
22
+ ## Como se creo la libreria
23
+
24
+ La libreria se armo como un paquete independiente dentro de `packages/ui-icons`.
25
+
26
+ El flujo fue este:
27
+
28
+ 1. Se creo un paquete React separado para que los iconos no vivan mezclados con `ui-library`.
29
+ 2. Se definio una API unica para los iconos del sistema: `NebulaIcon`.
30
+ 3. Se tomaron como fuente los iconos de `icons.xml` y los SVGs agregados en `src/figma`.
31
+ 4. Se genero un catalogo tipado para poder buscar, documentar y renderizar iconos de forma consistente.
32
+ 5. Se dejo el paquete con build ESM, CJS y tipos para poder publicarlo o moverlo a otro proyecto.
33
+
34
+ Archivos clave:
35
+
36
+ - `packages/ui-icons/package.json`
37
+ - `packages/ui-icons/tsup.config.ts`
38
+ - `packages/ui-icons/src/icons.ts`
39
+ - `packages/ui-icons/src/figma/index.tsx`
40
+ - `packages/ui-icons/src/catalog.ts`
41
+
42
+ ## Instalacion
43
+
44
+ ### Opcion A: paquete publicado
45
+
46
+ ```bash
47
+ npm install nave-ui-icons
48
+ ```
49
+
50
+ ### Opcion B: consumo local dentro de un monorepo
51
+
52
+ En el `package.json` del proyecto consumidor:
53
+
54
+ ```json
55
+ {
56
+ "dependencies": {
57
+ "nave-ui-icons": "file:../ui-icons"
58
+ }
59
+ }
60
+ ```
61
+
62
+ Despues:
63
+
64
+ ```bash
65
+ npm install
66
+ ```
67
+
68
+ ## Como importarla
69
+
70
+ ### Import recomendado para iconos del Design System
71
+
72
+ ```tsx
73
+ import { NebulaIcon } from 'nave-ui-icons/icons';
74
+ ```
75
+
76
+ ### Import recomendado si el nombre viaja por props
77
+
78
+ ```tsx
79
+ import { NebulaIcon, type NebulaIconName } from 'nave-ui-icons/icons';
80
+ ```
81
+
82
+ ### Import de iconos estaticos tipo Lucide
83
+
84
+ ```tsx
85
+ import { SearchIcon, ChevronRightIcon } from 'nave-ui-icons';
86
+ ```
87
+
88
+ ## Como usarla
89
+
90
+ ### Caso simple
91
+
92
+ ```tsx
93
+ import { NebulaIcon } from 'nave-ui-icons/icons';
94
+
95
+ export function SearchButton() {
96
+ return (
97
+ <button className="inline-flex items-center gap-2">
98
+ Buscar
99
+ <NebulaIcon name="Search" size={18} />
100
+ </button>
101
+ );
102
+ }
103
+ ```
104
+
105
+ ### Caso con props tipadas
106
+
107
+ ```tsx
108
+ import { NebulaIcon, type NebulaIconName } from 'nave-ui-icons/icons';
109
+
110
+ type ItemProps = {
111
+ icon: NebulaIconName;
112
+ label: string;
113
+ };
114
+
115
+ export function Item({ icon, label }: ItemProps) {
116
+ return (
117
+ <div className="inline-flex items-center gap-2">
118
+ <NebulaIcon name={icon} size={16} />
119
+ <span>{label}</span>
120
+ </div>
121
+ );
122
+ }
123
+ ```
124
+
125
+ ### Color y accesibilidad
126
+
127
+ ```tsx
128
+ import { NebulaIcon } from 'nave-ui-icons/icons';
129
+
130
+ <NebulaIcon name="Search" size={16} aria-hidden="true" />
131
+ <NebulaIcon name="Bell" size={20} color="#652BDF" aria-hidden="true" />
132
+ <NebulaIcon name="AlertCircle" size={20} title="Hay alertas pendientes" />
133
+ ```
134
+
135
+ ## Reglas de uso para el equipo
136
+
137
+ 1. Si el componente necesita un icono oficial del sistema, importar desde `nave-ui-icons/icons`.
138
+ 2. No importar SVGs sueltos dentro de una app si ese icono puede vivir en esta libreria.
139
+ 3. Usar `size` para escala.
140
+ 4. Usar `color` o `className` para integrarlo al estilo del componente.
141
+ 5. Para iconos decorativos, usar `aria-hidden="true"`.
142
+ 6. Para iconos con significado, usar `title` o acompanarlos con texto visible.
143
+ 7. Si falta un icono, primero agregarlo a `ui-icons` y despues consumirlo.
144
+
145
+ ## Que tener en cuenta al llevarla a otro proyecto
146
+
147
+ - El proyecto consumidor necesita `react`.
148
+ - El proyecto consumidor tambien debe resolver las dependencias del paquete.
149
+ - Si vas a publicar la libreria, conviene mantener el nombre del paquete y sus subpaths estables.
150
+ - El import para Nebula debe seguir siendo `nave-ui-icons/icons` para no romper adopcion futura.
151
+ - Si el otro proyecto no usa el resto del monorepo, esta libreria igual puede funcionar de forma aislada porque sale compilada en `dist`.
152
+
153
+ ## Build y chequeos
154
+
155
+ Dentro de `packages/ui-icons`:
156
+
157
+ ```bash
158
+ npm run typecheck
159
+ npm run build
160
+ ```
161
+
162
+ Salida esperada:
163
+
164
+ - `dist/index.*`
165
+ - `dist/dynamic.*`
166
+ - `dist/icons.*`
167
+ - `dist/catalog.*`
168
+
169
+ ## Resumen rapido
170
+
171
+ - `nave-ui-icons` = iconos estaticos
172
+ - `nave-ui-icons/icons` = iconos Nebula del Design System
173
+ - `NebulaIcon` = API recomendada para producto
174
+ - si falta un icono, se agrega en esta libreria antes de usarlo en otra app