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 +174 -0
- package/dist/catalog.cjs +30667 -0
- package/dist/catalog.cjs.map +1 -0
- package/dist/catalog.d.cts +26 -0
- package/dist/catalog.d.ts +26 -0
- package/dist/catalog.js +30645 -0
- package/dist/catalog.js.map +1 -0
- package/dist/dynamic.cjs +72 -0
- package/dist/dynamic.cjs.map +1 -0
- package/dist/dynamic.d.cts +39 -0
- package/dist/dynamic.d.ts +39 -0
- package/dist/dynamic.js +48 -0
- package/dist/dynamic.js.map +1 -0
- package/dist/figma.cjs +30615 -0
- package/dist/figma.cjs.map +1 -0
- package/dist/figma.d.cts +72 -0
- package/dist/figma.d.ts +72 -0
- package/dist/figma.js +30582 -0
- package/dist/figma.js.map +1 -0
- package/dist/icons.cjs +30615 -0
- package/dist/icons.cjs.map +1 -0
- package/dist/icons.d.cts +4 -0
- package/dist/icons.d.ts +4 -0
- package/dist/icons.js +30582 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.cjs +200 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +7 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/package.json +57 -0
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
|