# Angular PrimeNG Best Practices
> Usar junto con el skill `angular-component`.
---
## 1. Tree-Shake PrimeNG Imports
**Impact: MEDIUM** (Reduce bundle size)
Importar componentes PrimeNG individualmente usando la API standalone. No importar módulos completos.
**Incorrecto:**
```typescript
import { ButtonModule } from 'primeng/button';
@NgModule({ imports: [ButtonModule, TableModule, DialogModule] })
```
**Correcto:**
```typescript
@Component({
imports: [Button, Select, Table], // Solo lo que se necesita
})
```
---
## 2. PrimeNG Table con Lazy Loading
**Impact: HIGH** (Maneja 100k+ registros eficientemente)
Usar `[lazy]="true"` con `(onLazyLoad)` para paginación, ordenamiento y filtrado server-side.
**Incorrecto:**
```html
```
**Correcto:**
```html
```
---
## 3. Sistema de Theming de PrimeNG
**Impact: MEDIUM** (Diseño consistente con tokens)
Usar el styled mode con presets Aura o Lara. Customizar vía design tokens en `providePrimeNG()`.
**Incorrecto:**
```css
.p-button { background: #1976d2 !important; }
```
**Correcto:**
```typescript
providePrimeNG({
theme: { preset: Aura, options: { darkModeSelector: '.dark' } }
})
```
---
## 4. Dark Mode en este proyecto
El dark mode se controla con `ThemeService` y `[data-mode='dark']` en el documentElement.
Para evitar conflictos con PrimeNG, usar `darkModeSelector: '.fake-dark-mode'` (clase inexistente) en `providePrimeNG()`. Los estilos dark de PrimeNG se aplican vía `_primeng-overrides.scss` con `[data-mode='dark']`.