Instalación en Angular
Aprende cómo instalar y configurar el Sistema de Diseño de Tiendana para proyectos Angular.
Requisitos Previos
- Node.js 20.x o superior (requisito de
@tiendana/utils) - Angular 19.x o superior
- Gestor de paquetes npm o yarn
Instalación
Los paquetes @tiendana están alojados en AWS CodeArtifact privado, no en el registro público de npm. Autentica npm con Tiendana CLI (tdn auth npm) antes de instalar.
📖 Guía completa: Configuración de CodeArtifact
1. Autenticarse con CodeArtifact
tdn auth npm
O en la app de la barra de menú: Tiendana CLI → Registries → npm → Refresh. El proyecto necesita además el .npmrc que dirige el scope @tiendana a CodeArtifact; ver Configurar el Proyecto.
2. Instalar Paquetes
Una vez autenticado, instala los paquetes:
npm install @tiendana/ngx-core @tiendana/utils @tiendana/web-foundation
O usando yarn:
yarn add @tiendana/ngx-core @tiendana/utils @tiendana/web-foundation
Esta documentación se escribió contra @tiendana/ngx-core ^0.9.0, @tiendana/utils ^0.5.0 y @tiendana/web-foundation ^0.5.5. En versiones 0.x el rango ^ no cruza de minor (^0.8.0 nunca resuelve 0.9.0), así que actualiza los tres en el mismo cambio.
3. Dependencias Peer
@tiendana/ngx-core 0.9.0 declara estas dependencias peer:
| Paquete | Rango | Obligatoria |
|---|---|---|
@angular/core, @angular/common | >=19.x | Sí |
@tiendana/api-types | >=1.x.x | Sí |
@tiendana/utils | >=0.4.0 | Sí |
@ngx-translate/core | >=16.0.4 | Sí |
@angular/router | >=19.x | Opcional |
@tiendana/web-foundation | >=0.5.4 | Opcional |
@amplitude/analytics-browser | >=2.x | Opcional |
Si tu proyecto aún no los tiene, instálalos explícitamente. Con una versión menor de @tiendana/utils o @tiendana/web-foundation, npm falla con ERESOLVE.
npm install @tiendana/api-types @ngx-translate/core
Si importas cualquier cosa de @tiendana/ngx-core/tracking, instala también @amplitude/analytics-browser y @angular/router: el punto de entrada los importa de forma estática aunque no uses AmplitudeProvider.
Configuración
1. Importar Estilos
Los estilos de Web Foundation se importan en el styles.scss global. La entrada styles compila la hoja completa (reset, tipografía, componentes y utilidades):
@use '@tiendana/web-foundation/styles';
También puedes cargar el CSS ya compilado desde angular.json, importando el subpath exportado /css y no la ruta de archivo dentro de node_modules:
{
"projects": {
"tu-proyecto": {
"architect": {
"build": {
"options": {
"styles": [
"@tiendana/web-foundation/css",
"src/styles.scss"
]
}
}
}
}
}
}
@use '@tiendana/web-foundation' as tdn; (sin /styles) solo expone variables, funciones y mixins SCSS: no emite ningún CSS. Úsalo para leer tokens (tdn.$spacing-md) o mixins (tdn.respond-to(md)), además de importar la hoja completa. Consulta CSS/HTML para ver las entradas disponibles.
2. Registrar Providers
Registra en app.config.ts los providers que necesitan los componentes que uses:
import { ApplicationConfig, LOCALE_ID } from '@angular/core';
import { registerLocaleData } from '@angular/common';
import localeEs from '@angular/common/locales/es';
import { provideRouter } from '@angular/router';
import { TDN_DATE_FORMATTER, DateFormatter } from '@tiendana/ngx-core/forms';
import { routes } from './app.routes';
registerLocaleData(localeEs);
const dateFormatter: DateFormatter = {
format: (date: Date) =>
new Intl.DateTimeFormat('es-ES', { day: '2-digit', month: '2-digit', year: 'numeric' }).format(date),
formatRange: (from: Date, to: Date) => {
const formatter = new Intl.DateTimeFormat('es-ES', { day: '2-digit', month: '2-digit', year: 'numeric' });
return `${formatter.format(from)} - ${formatter.format(to)}`;
}
};
export const appConfig: ApplicationConfig = {
providers: [
provideRouter(routes),
{ provide: LOCALE_ID, useValue: 'es-ES' },
{ provide: TDN_DATE_FORMATTER, useValue: dateFormatter }
]
};
TdnInputDateComponent inyecta TDN_DATE_FORMATTER sin valor por defecto. Si usas tdn-input-date y no registras el provider, Angular lanza NullInjectorError al crear el componente. Ver tdn-input-date.
Otros providers según lo que uses:
| Si usas | Necesitas |
|---|---|
tdn-order-status | Un TranslateService configurado con las claves PEDIDO_* (@ngx-translate/core) |
| Tracking | provideTracking({ ... }) desde @tiendana/ngx-core/tracking, con @angular/router y @amplitude/analytics-browser instalados |
3. Importar Componentes
El paquete tiene un punto de entrada por área. Todos los componentes son standalone, así que se importan directamente en cada componente:
| Entry point | Contenido |
|---|---|
@tiendana/ngx-core | Raíz del paquete; solo exporta NGX_CORE_VERSION |
@tiendana/ngx-core/ui | Drawer, backdrop, tabs, status, timeline, stepper, display templates y más |
@tiendana/ngx-core/forms | tdn-form-element, inputs, tdn-select, errores y FormRevealService |
@tiendana/ngx-core/pipes | Pipes de transformación de datos |
@tiendana/ngx-core/validators | Validadores y utilidades de lectura de archivos |
@tiendana/ngx-core/tracking | TrackingService, tdnTrack y proveedores de analítica |
@tiendana/ngx-core/logomark | <tdn-logomark>, el logomark animado de Tiendana |
import { Component } from '@angular/core';
import { DrawerComponent } from '@tiendana/ngx-core/ui';
@Component({
selector: 'app-example',
standalone: true,
imports: [DrawerComponent],
template: `
<drawer #drawer>
<p>Contenido del drawer</p>
</drawer>
<button class="bttn bttn--primary" (click)="drawer.open()">
Abrir Drawer
</button>
`
})
export class ExampleComponent {}
4. Importar Utilidades
Importa utilidades de @tiendana/utils según sea necesario:
import { deepMerge, Patterns, copyTextToClipboard } from '@tiendana/utils';
const merged = deepMerge(obj1, obj2);
const valid = Patterns.EMAIL.test('usuario@ejemplo.com');
await copyTextToClipboard('Texto a copiar');
El paquete declara sideEffects: false, por lo que el bundler descarta lo que no uses. El logomark vive en su propio punto de entrada (@tiendana/utils/logomark) y no forma parte del barrel raíz. Para usarlo desde Angular consulta tdn-logomark.
@tiendana/utils define un exports map: solo se pueden importar @tiendana/utils y @tiendana/utils/logomark desde TypeScript, y @tiendana/utils/logomark/colourways desde SCSS (@use). Los imports profundos (@tiendana/utils/dist/...) ya no resuelven.
Próximos Pasos
- Explora Fundamentos para entender tokens, colores y tipografía
- Navega por Componentes para ver los componentes UI disponibles
- Revisa Formularios Angular para componentes de formularios reactivos
- Explora Pipes Angular para transformación de datos
- Consulta UI Angular para directivas y componentes auxiliares
- Conoce el logomark de Tiendana y su referencia en utilidades
- Añade analítica con Tracking