@lesterarte/sefin-ui 0.0.1

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 (2) hide show
  1. package/README.md +296 -0
  2. package/package.json +60 -0
package/README.md ADDED
@@ -0,0 +1,296 @@
1
+ # @sefin/sefin-ui
2
+
3
+ Una librería de sistema de diseño Angular completa basada en principios de Atomic Design y design tokens de la Secretaría de Finanzas.
4
+
5
+ ## Resumen
6
+
7
+ `@sefin/sefin-ui` es una librería UI Angular lista para producción diseñada para aplicaciones empresariales a gran escala. Proporciona:
8
+
9
+ - **Design Tokens**: Variables CSS y constantes TypeScript para temas consistentes
10
+ - **Estructura Atomic Design**: Componentes organizados (atoms, molecules, organisms)
11
+ - **Múltiples Temas**: Temas light, dark y brand (colores de Secretaría de Finanzas)
12
+ - **Integración con Angular Material**: Tema Material personalizado basado en design tokens
13
+ - **Componentes Type-Safe**: Soporte completo de TypeScript
14
+ - **Testing Completo**: Tests unitarios con Jest
15
+ - **Documentación Storybook**: Documentación visual de componentes con cambio de temas
16
+
17
+ ## Estructura del Proyecto
18
+
19
+ ```
20
+ sefin-ui/
21
+ ├── src/
22
+ │ ├── atoms/ # Bloques básicos (Button, Icon, Input)
23
+ │ ├── molecules/ # Componentes compuestos (FormField, Dropdown, Card)
24
+ │ ├── organisms/ # Bloques UI complejos (Header, LoginForm, Toolbar)
25
+ │ ├── tokens/ # Design tokens (colors, spacing, typography, etc.)
26
+ │ ├── themes/ # Configuraciones de temas (light, dark, brand)
27
+ │ ├── utils/ # Utilidades (ThemeLoader)
28
+ │ ├── shared/ # Tipos e interfaces compartidos
29
+ │ ├── styles/ # Estilos globales y resets
30
+ │ └── public-api.ts # Exportaciones de la API pública
31
+ ├── .storybook/ # Configuración de Storybook
32
+ ├── ng-package.json # Configuración de build
33
+ └── package.json # Configuración del paquete
34
+ ```
35
+
36
+ ## Instalación
37
+
38
+ ### Construir la Librería
39
+
40
+ ```bash
41
+ npm run build
42
+ ```
43
+
44
+ Esto creará el paquete distribuible en `dist/`.
45
+
46
+ ### Publicar en NPM
47
+
48
+ 1. Actualiza la versión en `package.json`
49
+ 2. Construye la librería: `npm run build`
50
+ 3. Navega a dist: `cd dist`
51
+ 4. Publica: `npm publish --access public`
52
+
53
+ ### Instalar en Tu Aplicación
54
+
55
+ ```bash
56
+ npm install @sefin/sefin-ui
57
+ ```
58
+
59
+ ## Uso
60
+
61
+ > 📖 **Guía Completa**: Para una guía detallada de cómo usar la librería, consulta [GUIA_CONSUMO.md](./GUIA_CONSUMO.md)
62
+
63
+ ### Inicio Rápido
64
+
65
+ ### 1. Importar Estilos
66
+
67
+ En tu `styles.scss` o `angular.json`:
68
+
69
+ ```scss
70
+ @import '@sefin/sefin-ui/styles';
71
+ ```
72
+
73
+ O en `angular.json`:
74
+
75
+ ```json
76
+ {
77
+ "styles": [
78
+ "node_modules/@sefin/sefin-ui/styles/index.scss"
79
+ ]
80
+ }
81
+ ```
82
+
83
+ ### 2. Cargar Tema
84
+
85
+ En tu `app.component.ts`:
86
+
87
+ ```typescript
88
+ import { Component, OnInit } from '@angular/core';
89
+ import { ThemeLoader } from '@sefin/sefin-ui';
90
+
91
+ @Component({
92
+ selector: 'app-root',
93
+ // ...
94
+ })
95
+ export class AppComponent implements OnInit {
96
+ ngOnInit(): void {
97
+ // Cargar tema brand (colores de Secretaría de Finanzas)
98
+ ThemeLoader.loadTheme('brand');
99
+
100
+ // O cargar tema light
101
+ // ThemeLoader.loadTheme('light');
102
+
103
+ // O cargar tema dark
104
+ // ThemeLoader.loadTheme('dark');
105
+ }
106
+ }
107
+ ```
108
+
109
+ ### 3. Usar Componentes
110
+
111
+ Todos los componentes son standalone y se pueden importar directamente:
112
+
113
+ ```typescript
114
+ import { Component } from '@angular/core';
115
+ import { ButtonComponent, CardComponent } from '@sefin/sefin-ui';
116
+
117
+ @Component({
118
+ selector: 'app-example',
119
+ standalone: true,
120
+ imports: [ButtonComponent, CardComponent],
121
+ template: `
122
+ <sefin-card variant="elevated">
123
+ <h2>Hola Mundo</h2>
124
+ <sefin-button variant="primary" (clicked)="handleClick()">
125
+ Haz Clic
126
+ </sefin-button>
127
+ </sefin-card>
128
+ `,
129
+ })
130
+ export class ExampleComponent {
131
+ handleClick() {
132
+ console.log('¡Botón clickeado!');
133
+ }
134
+ }
135
+ ```
136
+
137
+ ## Componentes Disponibles
138
+
139
+ ### Atoms
140
+
141
+ - **Button**: `sefin-button` - Múltiples variantes (primary, secondary, outline, ghost, danger) y tamaños
142
+ - **Icon**: `sefin-icon` - Componente contenedor de iconos
143
+ - **Input**: `sefin-input` - Input de formulario con soporte ControlValueAccessor
144
+
145
+ ### Molecules
146
+
147
+ - **FormField**: `sefin-form-field` - Campo de formulario completo con label, input, hint y error
148
+ - **Dropdown**: `sefin-dropdown` - Componente de selección dropdown
149
+ - **Card**: `sefin-card` - Contenedor de tarjeta con variantes (default, elevated, outlined)
150
+
151
+ ### Organisms
152
+
153
+ - **Header**: `sefin-header` - Encabezado de aplicación con logo, título y menú de usuario
154
+ - **LoginForm**: `sefin-login-form` - Componente de formulario de login completo
155
+ - **Toolbar**: `sefin-toolbar` - Barra de herramientas con título y botones de acción
156
+
157
+ ## Design Tokens
158
+
159
+ ### Paleta de Colores - Secretaría de Finanzas
160
+
161
+ - **Dark Gray**: `#383838`
162
+ - **Light Gray**: `#cecece`
163
+ - **Light Blue**: `#55C3D8`
164
+ - **White**: `#ffffff`
165
+
166
+ ### Usando Variables CSS
167
+
168
+ Todos los design tokens están disponibles como variables CSS:
169
+
170
+ ```scss
171
+ .mi-componente {
172
+ color: var(--sefin-color-primary);
173
+ padding: var(--sefin-spacing-md);
174
+ border-radius: var(--sefin-radius-md);
175
+ font-size: var(--sefin-font-size-base);
176
+ box-shadow: var(--sefin-shadow-md);
177
+ }
178
+ ```
179
+
180
+ ### Usando Constantes TypeScript
181
+
182
+ ```typescript
183
+ import { COLOR_TOKENS, SPACING_TOKENS } from '@sefin/sefin-ui';
184
+
185
+ const primaryColor = COLOR_TOKENS.brand.lightBlue;
186
+ const mediumSpacing = SPACING_TOKENS.md;
187
+ ```
188
+
189
+ ## Temas
190
+
191
+ ### Temas Disponibles
192
+
193
+ - **brand**: Tema con colores exactos de Secretaría de Finanzas (por defecto)
194
+ - **light**: Tema claro
195
+ - **dark**: Tema oscuro
196
+
197
+ ### Cambiar Temas
198
+
199
+ ```typescript
200
+ import { ThemeLoader } from '@sefin/sefin-ui';
201
+
202
+ // Cambiar a tema brand
203
+ ThemeLoader.loadTheme('brand');
204
+
205
+ // Cambiar a tema dark
206
+ ThemeLoader.loadTheme('dark');
207
+ ```
208
+
209
+ ## Tipografía
210
+
211
+ La librería usa la fuente **Pluto** de Secretaría de Finanzas:
212
+ - **Pluto-Light** (300)
213
+ - **Pluto-Regular** (400)
214
+ - **Pluto-Bold** (700)
215
+
216
+ Nota: Debes incluir los archivos de fuente Pluto en tu proyecto.
217
+
218
+ ## Desarrollo
219
+
220
+ ### Ejecutar Tests
221
+
222
+ ```bash
223
+ npm test
224
+ ```
225
+
226
+ ### Ejecutar Tests en Modo Watch
227
+
228
+ ```bash
229
+ npm run test:watch
230
+ ```
231
+
232
+ ### Generar Reporte de Cobertura
233
+
234
+ ```bash
235
+ npm run test:coverage
236
+ ```
237
+
238
+ ### Ejecutar Storybook
239
+
240
+ ```bash
241
+ npm run storybook
242
+ ```
243
+
244
+ Esto iniciará Storybook en `http://localhost:6006` con:
245
+ - Documentación de componentes
246
+ - Playground interactivo de componentes
247
+ - Cambio de temas
248
+ - Testing de accesibilidad
249
+
250
+ ### Construir la Librería
251
+
252
+ ```bash
253
+ npm run build
254
+ ```
255
+
256
+ ## Versionado
257
+
258
+ Este proyecto sigue [Semantic Versioning](https://semver.org/):
259
+
260
+ - **MAJOR**: Cambios que rompen compatibilidad
261
+ - **MINOR**: Nuevas características (compatibles hacia atrás)
262
+ - **PATCH**: Correcciones de bugs (compatibles hacia atrás)
263
+
264
+ ## Flujo de Publicación
265
+
266
+ 1. Actualiza la versión en `package.json`
267
+ 2. Actualiza CHANGELOG.md
268
+ 3. Construye la librería: `npm run build`
269
+ 4. Prueba el build localmente
270
+ 5. Publica: `cd dist && npm publish --access public`
271
+
272
+ ## Mejores Prácticas
273
+
274
+ ### Para Mantenedores de la Librería
275
+
276
+ 1. **Siempre prueba antes de publicar**: Ejecuta tests y Storybook
277
+ 2. **Actualiza documentación**: Mantén README y stories de Storybook actualizados
278
+ 3. **Sigue Atomic Design**: Mantén los componentes organizados por jerarquía
279
+ 4. **Usa design tokens**: Nunca hardcodees colores, spacing, etc.
280
+ 5. **Escribe tests**: Mantén alta cobertura de tests
281
+
282
+ ### Para Consumidores
283
+
284
+ 1. **Importa solo lo que necesites**: Usa imports amigables con tree-shaking
285
+ 2. **Carga el tema temprano**: Inicializa el tema en AppComponent
286
+ 3. **Usa variables CSS**: Prefiere variables CSS sobre constantes TypeScript en estilos
287
+ 4. **Sigue las APIs de componentes**: Usa los componentes como están documentados
288
+ 5. **Extiende, no modifiques**: Crea componentes wrapper para personalización
289
+
290
+ ## Soporte
291
+
292
+ Para problemas, preguntas o contribuciones, por favor abre un issue en el repositorio.
293
+
294
+ ## Licencia
295
+
296
+ MIT
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@lesterarte/sefin-ui",
3
+ "version": "0.0.1",
4
+ "description": "Sefin Design System - A comprehensive Angular UI library based on Atomic Design and design tokens",
5
+ "keywords": [
6
+ "angular",
7
+ "design-system",
8
+ "ui-library",
9
+ "components",
10
+ "atomic-design",
11
+ "design-tokens"
12
+ ],
13
+ "author": "Sefin",
14
+ "license": "MIT",
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/sefin/sefin-ui.git"
18
+ },
19
+ "peerDependencies": {
20
+ "@angular/common": "^21.0.0",
21
+ "@angular/core": "^21.0.0",
22
+ "@angular/forms": "^21.0.0",
23
+ "@angular/material": "^21.0.0",
24
+ "@angular/cdk": "^21.0.0",
25
+ "@angular/animations": "^21.0.0"
26
+ },
27
+ "dependencies": {
28
+ "tslib": "^2.3.0"
29
+ },
30
+ "sideEffects": [
31
+ "**/*.scss",
32
+ "**/*.css"
33
+ ],
34
+ "main": "./dist/sefin-ui/fesm2022/sefin-ui.mjs",
35
+ "module": "fesm2022/lesterarte-sefin-ui.mjs",
36
+ "es2022": "./dist/sefin-ui/fesm2022/sefin-ui.mjs",
37
+ "esm2022": "./dist/sefin-ui/esm2022/sefin-ui.mjs",
38
+ "fesm2022": "./dist/sefin-ui/fesm2022/sefin-ui.mjs",
39
+ "typings": "types/lesterarte-sefin-ui.d.ts",
40
+ "exports": {
41
+ ".": {
42
+ "types": "./types/lesterarte-sefin-ui.d.ts",
43
+ "esm2022": "./dist/sefin-ui/esm2022/sefin-ui.mjs",
44
+ "es2022": "./dist/sefin-ui/fesm2022/sefin-ui.mjs",
45
+ "default": "./fesm2022/lesterarte-sefin-ui.mjs"
46
+ },
47
+ "./styles": {
48
+ "default": "./dist/sefin-ui/styles.css"
49
+ },
50
+ "./package.json": {
51
+ "default": "./package.json"
52
+ }
53
+ },
54
+ "files": [
55
+ "dist/sefin-ui"
56
+ ],
57
+ "publishConfig": {
58
+ "access": "public"
59
+ }
60
+ }