@eqproject/eqp-ui
eqp-ui
Libreria di componenti UI di layout per applicazioni Angular basate su CoreUI. Fornisce la struttura fondamentale dell'applicazione: sidebar navigabile, header, footer, container e breadcrumb. Tutti i componenti sono standalone o raggruppati in moduli leggeri e sfruttano Angular Signals per la gestione reattiva dello stato della sidebar.
Installazione
npm install @eqproject/eqp-ui --legacy-peer-deps
Importazione del modulo
Per le applicazioni NgModule:
import { EqpUiModule } from '@eqproject/eqp-ui';
@NgModule({
imports: [EqpUiModule]
})
export class AppModule {}
EqpUiModule re-esporta SidebarModule, BreadcrumbModule e ContainerComponent.
Per applicazioni standalone è possibile importare direttamente i singoli componenti/moduli (SidebarModule, BreadcrumbModule, ecc.).
Stili globali
Aggiungere in angular.json (o src/styles.scss) il riferimento al foglio di stile principale:
@use '@eqproject/eqp-ui/src/lib/scss/eqpui';
Indice
- Struttura base dell'applicazione
- Sidebar
- Header
- Footer
- Container
- Breadcrumb
- Servizi di utilità
- Direttive
- Modelli e tipi
- Personalizzazione SCSS
Struttura base dell'applicazione
Il layout tipico di un'applicazione che utilizza eqp-ui è il seguente:
<body class="sidebar-fixed">
<eqp-sidebar id="mySidebar" [visible]="true">
<eqp-sidebar-brand
[brandFull]="{ src: 'assets/logo.png', width: 120, height: 46, alt: 'Logo' }"
[brandNarrow]="{ src: 'assets/logo-sm.png', width: 46, height: 46, alt: 'Logo' }"
[routerLink]="['/']"
></eqp-sidebar-brand>
<eqp-sidebar-header><!-- contenuto header sidebar --></eqp-sidebar-header>
<eqp-sidebar-nav [navItems]="navItems"></eqp-sidebar-nav>
<eqp-sidebar-footer><!-- contenuto footer sidebar --></eqp-sidebar-footer>
<eqp-sidebar-toggler eqpSidebarToggle></eqp-sidebar-toggler>
</eqp-sidebar>
<div class="wrapper d-flex flex-column min-vh-100">
<c-header class="header header-sticky" position="sticky">
<button eqpSidebarToggle type="button">☰</button>
<eqp-breadcrumb-router></eqp-breadcrumb-router>
</c-header>
<div class="body flex-grow-1 px-3">
<eqp-container [breakpoint]="'lg'">
<router-outlet></router-outlet>
</eqp-container>
</div>
<c-footer>
<span>© 2026 EQProject</span>
</c-footer>
</div>
</body>
Sidebar
eqp-sidebar
Selettore: eqp-sidebar
Export as: eqpSidebar
Standalone: true
Il componente radice della sidebar. Gestisce la visibilità, la modalità narrow/unfoldable e l'adattamento mobile tramite BreakpointObserver. Lo stato è sincronizzato con SidebarService tramite un effect() di Angular Signals: ogni cambiamento pubblicato sul signal sidebarState viene recepito e applicato automaticamente al componente.
Input
| Input | Tipo | Default | Descrizione |
|---|---|---|---|
[visible] |
boolean |
false |
Visibilità della sidebar. Emette visibleChange al cambio. |
[narrow] |
boolean |
false |
Rende la sidebar ridotta (solo icone). Incompatibile con unfoldable. |
[unfoldable] |
boolean |
false |
In modalità narrow, la sidebar si espande al passaggio del mouse. |
[overlaid] |
boolean |
false |
La sidebar si sovrappone al contenuto anziché spingerlo. |
[colorScheme] |
'dark' | 'light' |
undefined |
Schema colori per adattare il testo all'sfondo. |
[id] |
string |
undefined |
ID HTML della sidebar, usato da [eqpSidebarToggle] per il targeting. |
[placement] |
'start' | 'end' |
undefined |
Posizionamento (sinistra o destra). |
[position] |
'fixed' | 'sticky' |
'fixed' |
Tipo di posizionamento CSS. |
[size] |
'sm' | 'lg' | 'xl' |
undefined |
Dimensione della sidebar. |
Output
| Output | Tipo | Descrizione |
|---|---|---|
(visibleChange) |
boolean |
Emesso ogni volta che la visibilità cambia (anche da toggle programmatico). |
Classi CSS applicate dinamicamente
Il componente applica automaticamente le seguenti classi CSS all'elemento host in base allo stato:
| Classe | Condizione |
|---|---|
sidebar |
Sempre |
sidebar-fixed |
position() === 'fixed' e non mobile |
sidebar-narrow |
narrow && !unfoldable |
sidebar-narrow-unfoldable |
unfoldable |
sidebar-overlaid |
overlaid |
sidebar-{size} |
Se size() è definito |
show |
Visibile su mobile |
hide |
Non visibile |
Comportamento mobile
La sidebar osserva il breakpoint definito dalla variabile CSS --cui-mobile-breakpoint (default md, ovvero 767.98px). Al di sotto di tale breakpoint:
- la sidebar viene nascosta automaticamente
- la modalità
unfoldableviene disabilitata - al click su un link di navigazione, la sidebar si chiude automaticamente
Esempio
<!-- Sidebar fissa, visibile di default, con schema scuro -->
<eqp-sidebar id="sidebar" [visible]="true" colorScheme="dark" position="fixed">
<!-- ... -->
</eqp-sidebar>
<!-- Toggle su un pulsante nell'header -->
<button type="button" eqpSidebarToggle="sidebar">Menu</button>
eqp-sidebar-header
Selettore: eqp-sidebar-header
Standalone: true
Contenitore per contenuto posizionato in cima alla sidebar, prima della navigazione. Applica automaticamente la classe sidebar-header. Si utilizza tipicamente per inserire un campo di ricerca o un'intestazione utente.
<eqp-sidebar-header>
<div class="sidebar-header-text">v1.2.0</div>
</eqp-sidebar-header>
eqp-sidebar-brand
Selettore: eqp-sidebar-brand
Standalone: true
Gestisce il logo/brand della sidebar con supporto nativo per la modalità narrow. Applica automaticamente la classe sidebar-brand.
Input
| Input | Tipo | Descrizione |
|---|---|---|
[brandFull] |
any |
Logo completo mostrato quando la sidebar è espansa. Accetta oggetto { src, width, height, alt }. |
[brandNarrow] |
any |
Logo ridotto mostrato in modalità narrow. |
[routerLink] |
string | any[] |
Route a cui navigare al click sul brand. |
<eqp-sidebar-brand
[brandFull]="{ src: 'assets/brand/logo.png', width: 118, height: 46, alt: 'Logo' }"
[brandNarrow]="{ src: 'assets/brand/logo-sm.png', width: 46, height: 46, alt: 'Logo' }"
[routerLink]="['/dashboard']"
>
</eqp-sidebar-brand>
eqp-sidebar-footer
Selettore: eqp-sidebar-footer
Standalone: true
Contenitore per contenuto posizionato in fondo alla sidebar. Applica automaticamente la classe sidebar-footer. Utile per informazioni sull'utente loggato o versione dell'app.
<eqp-sidebar-footer class="d-none d-md-flex">
<span>Utente: Mario Rossi</span>
</eqp-sidebar-footer>
eqp-sidebar-toggler
Selettore: eqp-sidebar-toggler
Standalone: true
Pulsante di toggle posizionato in fondo alla sidebar per passare tra modalità narrow e modalità espansa. Applica automaticamente la classe sidebar-toggler. Non richiede configurazione: il toggle è gestito dalla [eqpSidebarToggle] direttiva applicata allo stesso elemento o a qualsiasi elemento esterno.
<!-- Inserito dentro eqp-sidebar, funge da toggler nativo della sidebar -->
<eqp-sidebar-toggler eqpSidebarToggle toggle="unfoldable"></eqp-sidebar-toggler>
eqp-sidebar-nav
Selettore: eqp-sidebar-nav
Standalone: true
Componente di navigazione che renderizza un array di INavData come lista di voci di menu. Gestisce automaticamente i diversi tipi di voce (link, gruppo, titolo, divisore, etichetta) e chiude la sidebar su mobile al click su un link.
Input
| Input | Tipo | Default | Descrizione |
|---|---|---|---|
[navItems] |
INavData[] |
[] |
Array delle voci di navigazione. |
[dropdownMode] |
'path' | 'none' | 'close' |
'path' |
Comportamento dei gruppi di navigazione. Vedi sotto. |
[compact] |
boolean |
undefined |
Se true, applica la classe compact alla nav. |
Valori di dropdownMode:
| Valore | Comportamento |
|---|---|
'path' |
Il gruppo si apre automaticamente se il percorso corrente corrisponde a una delle voci figlie. |
'none' |
I gruppi non reagiscono alla navigazione. |
'close' |
Al click su un gruppo, tutti gli altri gruppi non correlati al percorso corrente vengono chiusi. |
<eqp-sidebar-nav [navItems]="navItems" dropdownMode="close"></eqp-sidebar-nav>
[eqpSidebarToggle]
Selettore: [eqpSidebarToggle]
Export as: eqpSidebarToggle
Standalone: true
Direttiva che, al click sull'elemento host, invia un'azione di toggle a SidebarService. Può essere applicata a qualsiasi elemento (pulsanti nell'header, toggler della sidebar, ecc.).
Input
| Input | Tipo | Default | Descrizione |
|---|---|---|---|
[eqpSidebarToggle] |
string |
undefined |
ID della sidebar target. Se omesso, agisce sulla prima sidebar registrata. |
[toggle] |
'visible' | 'unfoldable' |
'visible' |
Proprietà da alternare. |
<!-- Toggle visibilità (per l'header) -->
<button type="button" [eqpSidebarToggle]="'mySidebar'" toggle="visible">
<span class="navbar-toggler-icon"></span>
</button>
<!-- Toggle narrow/unfoldable (per il toggler nella sidebar) -->
<eqp-sidebar-toggler [eqpSidebarToggle]="'mySidebar'" toggle="unfoldable">
</eqp-sidebar-toggler>
SidebarService
Servizio singleton (providedIn: 'root') che gestisce lo stato della sidebar tramite Angular Signals.
readonly sidebarState = signal<ISidebarAction>({});
toggle(action: ISidebarAction): void
ISidebarAction è l'interfaccia dell'azione inviata al service:
| Proprietà | Tipo | Descrizione |
|---|---|---|
visible |
boolean | 'toggle' |
Visibilità target |
unfoldable |
boolean | 'toggle' |
Stato unfoldable target |
toggle |
'visible' | 'unfoldable' |
Indica che la proprietà va alternata (anziché impostata) |
narrow |
boolean |
Stato narrow |
mobile |
boolean |
Indica se il cambiamento proviene da un breakpoint mobile |
sidebar |
SidebarComponent |
Riferimento diretto al componente sidebar |
id |
string |
ID della sidebar target (alternativa al riferimento diretto) |
SidebarComponent si sottoscrive al signal tramite un effect() e aggiorna il proprio stato interno ad ogni emit. Il backdrop su mobile viene gestito da SidebarBackdropService, che aggiunge/rimuove un overlay DOM tramite Renderer2.
Utilizzo programmatico:
constructor(private sidebarService: SidebarService) {}
openSidebar() {
this.sidebarService.toggle({ visible: true, id: 'mySidebar' });
}
closeSidebar() {
this.sidebarService.toggle({ visible: false, id: 'mySidebar' });
}
toggleSidebar() {
this.sidebarService.toggle({ toggle: 'visible', id: 'mySidebar' });
}
Header
Selettore: c-header oppure [c-header]
Standalone: true
Componente header dell'applicazione. Gestisce il posizionamento e il wrapping opzionale in un container Bootstrap.
Input
| Input | Tipo | Default | Descrizione |
|---|---|---|---|
[container] |
boolean | 'sm' | 'md' | 'lg' | 'xl' | 'xxl' | 'fluid' |
undefined |
Se definito, avvolge il contenuto in un container Bootstrap del breakpoint specificato. |
[position] |
'fixed' | 'sticky' |
undefined |
Posizionamento CSS dell'header. |
[role] |
string |
'header' |
Attributo role HTML. |
<!-- Header sticky con container responsive lg -->
<c-header position="sticky" [container]="'lg'">
<button type="button" eqpSidebarToggle>
<span class="navbar-toggler-icon"></span>
</button>
<eqp-breadcrumb-router></eqp-breadcrumb-router>
</c-header>
Footer
Selettore: c-footer oppure [cFooter]
Standalone: true
Componente footer dell'applicazione. Applica automaticamente la classe footer.
Input
| Input | Tipo | Default | Descrizione |
|---|---|---|---|
[position] |
'fixed' | 'sticky' |
undefined |
Posizionamento CSS del footer. |
[role] |
string |
'footer' |
Attributo role HTML. |
<c-footer>
<span>© 2026 EQProject. Tutti i diritti riservati.</span>
<span class="ms-auto">Powered by <a href="#">EQProject</a></span>
</c-footer>
Container
Selettore: eqp-container
Wrapper Bootstrap per il contenuto principale. Gestisce le varianti container, container-fluid e container-{breakpoint}.
Input
| Input | Tipo | Default | Descrizione |
|---|---|---|---|
[breakpoint] |
'sm' | 'md' | 'lg' | 'xl' | 'xxl' | string |
'' |
Applica container-{breakpoint}. La larghezza è al 100% fino al breakpoint indicato. |
[fluid] |
boolean |
false |
Se true, applica container-fluid (larghezza sempre al 100%). |
<!-- Container con larghezza massima a partire da lg -->
<eqp-container [breakpoint]="'lg'">
<router-outlet></router-outlet>
</eqp-container>
<!-- Container fluid -->
<eqp-container [fluid]="true">
<router-outlet></router-outlet>
</eqp-container>
Breadcrumb
eqp-breadcrumb e eqp-breadcrumb-item
Per la breadcrumb manuale, si compongono eqp-breadcrumb ed eqp-breadcrumb-item.
eqp-breadcrumb — Selettore: eqp-breadcrumb, standalone: true
Contenitore della breadcrumb. Applica role="navigation" e aria-label="breadcrumb".
| Input | Tipo | Default | Descrizione |
|---|---|---|---|
[ariaLabel] |
string |
'breadcrumb' |
Valore dell'attributo aria-label. |
[role] |
string |
'navigation' |
Valore dell'attributo role. |
eqp-breadcrumb-item — Selettore: eqp-breadcrumb-item
Singola voce della breadcrumb. Se [url] è presente, renderizza un [routerLink]; se [active] è true, applica la classe active e l'attributo aria-current="page".
| Input | Tipo | Descrizione |
|---|---|---|
[active] |
boolean |
Voce attiva (ultima nella breadcrumb). |
[url] |
string | any[] |
URL per il [routerLink] interno. |
[attributes] |
INavAttributes |
Attributi HTML aggiuntivi applicati al link. |
[linkProps] |
INavLinkProps |
NavigationExtras e opzioni di routerLinkActive. |
<eqp-breadcrumb>
<eqp-breadcrumb-item [url]="['/']">Home</eqp-breadcrumb-item>
<eqp-breadcrumb-item [url]="['/utenti']">Utenti</eqp-breadcrumb-item>
<eqp-breadcrumb-item [active]="true">Dettaglio</eqp-breadcrumb-item>
</eqp-breadcrumb>
eqp-breadcrumb-router
Selettore: eqp-breadcrumb-router
Standalone: true
Breadcrumb automatica basata sulla navigazione Angular. Genera le voci leggendo la proprietà title dei data di ogni ActivatedRoute. Non richiede configurazione manuale delle voci: si aggiorna automaticamente ad ogni NavigationEnd.
Input
| Input | Tipo | Default | Descrizione |
|---|---|---|---|
[items] |
IBreadcrumbItem[] |
undefined |
Se fornito, sovrascrive la generazione automatica con un array statico di voci. |
// Nel routing module
const routes: Routes = [
{
path: 'utenti',
component: UtentiComponent,
data: { title: 'Utenti' },
children: [
{
path: ':id',
component: DettaglioComponent,
data: { title: 'Dettaglio utente' }
}
]
}
];
<!-- Nel template dell'header: si aggiorna automaticamente -->
<eqp-breadcrumb-router></eqp-breadcrumb-router>
<!-- Con override manuale -->
<eqp-breadcrumb-router [items]="breadcrumbItems"></eqp-breadcrumb-router>
BreadcrumbRouterService
Servizio singleton (providedIn: 'root') che mantiene la lista delle voci della breadcrumb in un signal Angular.
readonly breadcrumbs = signal<IBreadcrumbItem[]>([]);
Si sottoscrive ai NavigationEnd del Router e percorre la struttura degli ActivatedRoute per costruire la breadcrumb a partire dalle proprietà data.title di ogni segmento dell'URL.
IBreadcrumbItem:
| Proprietà | Tipo | Descrizione |
|---|---|---|
label |
string |
Testo della voce |
url |
string | any[] |
URL della voce |
attributes |
INavAttributes |
Attributi HTML aggiuntivi |
linkProps |
INavLinkProps |
Opzioni routerLink |
class |
string |
Classi CSS aggiuntive |
Servizi di utilità
ClassToggleService
Servizio singleton (providedIn: 'root') per il toggle di classi CSS su qualsiasi elemento del DOM tramite un selettore CSS.
toggle(selector: string, className: string): void
Utile per aggiungere/rimuovere classi direttamente sul body o su elementi di layout (es. per nascondere la sidebar via JavaScript puro).
constructor(private classToggle: ClassToggleService) {}
toggleDarkMode() {
this.classToggle.toggle('body', 'dark-mode');
}
SidebarNavService
Classe astratta injectable che può essere estesa per fornire la configurazione delle voci di navigazione tramite dependency injection, disaccoppiando la definizione del menu dal componente che lo utilizza.
@Injectable()
export abstract class SidebarNavService {
abstract getSidebarNavItemsConfig(): INavData[];
}
Utilizzo:
@Injectable({ providedIn: 'root' })
export class MyNavService extends SidebarNavService {
getSidebarNavItemsConfig(): INavData[] {
return [
{ name: 'Dashboard', url: '/dashboard', icon: 'cil-speedometer' },
{ name: 'Utenti', url: '/utenti', icon: 'cil-people' },
];
}
}
Direttive
[eqpHtmlAttr]
Selettore: [eqpHtmlAttr]
Export as: eqpHtmlAttr
Standalone: true
Direttiva per applicare dinamicamente attributi HTML, classi e stili inline a un elemento tramite un oggetto. Usata internamente da eqp-sidebar-brand per propagare attributi al tag <a> del brand, ma disponibile per uso generico.
Input
| Input | Tipo | Descrizione |
|---|---|---|
[eqpHtmlAttr] |
{ [key: string]: any } |
Oggetto di attributi da applicare all'elemento host. La chiave style accetta un oggetto di proprietà CSS; la chiave class accetta una stringa o un array di stringhe; tutte le altre chiavi vengono trattate come attributi HTML standard. |
<!-- Applica attributi data, stili e classi dinamicamente -->
<span
[eqpHtmlAttr]="{ 'data-id': item.id, class: 'custom-class', style: { color: 'red' } }"
>
</span>
Modelli e tipi
INavData
Interfaccia principale per la definizione delle voci di navigazione della sidebar. Ogni voce dell'array passato a [navItems] deve rispettare questa struttura.
| Proprietà | Tipo | Descrizione |
|---|---|---|
name |
string |
Testo visualizzato nella voce |
url |
string | any[] |
URL per la navigazione interna (routerLink) |
href |
string |
URL esterno (<a href>) — determina link esterno se inizia con http |
icon |
string |
Classe CSS dell'icona (es. 'cil-home', 'fa fa-home') |
iconComponent |
any |
Componente icona alternativo |
badge |
INavBadge |
Badge da mostrare accanto al nome della voce |
title |
boolean |
Se true, la voce è un titolo di sezione (non cliccabile) |
children |
INavData[] |
Voci figlie — trasforma la voce in un gruppo espandibile |
divider |
boolean |
Se true, la voce è un separatore visivo |
class |
string |
Classi CSS aggiuntive da applicare alla voce |
label |
INavLabel |
Etichetta colorata accanto alla voce |
wrapper |
INavWrapper |
Wrapper HTML aggiuntivo intorno al contenuto |
attributes |
INavAttributes |
Attributi HTML arbitrari (es. disabled: true) |
linkProps |
INavLinkProps |
Opzioni routerLink (queryParams, fragment, routerLinkActive, ecc.) |
variant |
string |
Variante visiva della voce |
INavBadge:
| Proprietà | Tipo | Descrizione |
|---|---|---|
text |
string |
Testo del badge |
color |
string |
Colore Bootstrap ('primary', 'danger', ecc.) |
size |
string |
Dimensione del badge |
class |
string |
Classi CSS aggiuntive |
INavLabel:
| Proprietà | Tipo | Descrizione |
|---|---|---|
variant |
string |
Tipo di etichetta (es. 'pill') |
class |
string |
Classi CSS dell'etichetta |
Esempio di configurazione menu completa:
export const navItems: INavData[] = [
{
name: 'Dashboard',
url: '/dashboard',
icon: 'cil-speedometer',
badge: { color: 'info', text: 'NUOVO' }
},
{
title: true,
name: 'Gestione'
},
{
name: 'Utenti',
url: '/utenti',
icon: 'cil-people',
children: [
{ name: 'Lista utenti', url: '/utenti/lista', icon: 'cil-list' },
{ name: 'Aggiungi utente', url: '/utenti/nuovo', icon: 'cil-user-follow' }
]
},
{ divider: true },
{
name: 'Link esterno',
href: 'https://www.eqproject.it',
icon: 'cil-external-link',
attributes: { target: '_blank', rel: 'noopener' }
},
{
name: 'Voce disabilitata',
url: '/non-disponibile',
icon: 'cil-ban',
attributes: { disabled: true }
}
];
Tipi di utilità
eqpui.types.ts esporta una serie di tipi TypeScript utilizzati dagli input dei componenti per garantire il type-safety delle configurazioni.
| Tipo | Valori | Utilizzo |
|---|---|---|
Colors |
'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | string |
Colori Bootstrap per badge, link, ecc. |
ColorsGradient |
`${Colors}-gradient` |
Variante gradient di un colore |
BackgroundColors |
Colors | 'body' | 'white' | 'transparent' |
Colori di sfondo |
TextColors |
Esteso da Colors + varianti emphasis/muted |
Colori del testo |
Positions |
'fixed' | 'sticky' |
Posizionamento CSS di header, footer, sidebar |
Sizes |
'sm' | 'md' | 'lg' | 'xl' | 'xxl' | string |
Dimensioni componenti |
Breakpoints |
'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl' | string |
Breakpoint Bootstrap |
Shapes |
'rounded' | 'rounded-circle' | 'rounded-pill' | ... |
Arrotondamento elementi |
Placements |
'auto' | 'top' | 'bottom' | 'start' | 'end' | ... |
Posizionamento tooltip/popover |
Directions |
'down' | 'up' | 'start' | 'end' | '' |
Direzione apertura dropdown |
InputType |
'text' | 'email' | 'password' | 'number' | ... |
Tipo input HTML |
ButtonType |
'button' | 'submit' | 'reset' |
Tipo pulsante HTML |
BadgePositions |
'top-start' | 'top-end' | 'bottom-end' | 'bottom-start' |
Posizione badge |
Alignment |
'baseline' | 'top' | 'middle' | 'bottom' | ... |
Allineamento verticale |
INavLinkProps raccoglie le proprietà di NavigationExtras applicabili ai link interni:
| Proprietà | Tipo | Descrizione |
|---|---|---|
queryParams |
{ [k: string]: any } |
Query parameters da aggiungere alla navigazione |
fragment |
string |
Frammento URL |
queryParamsHandling |
'merge' | 'preserve' | '' |
Gestione dei query params esistenti |
preserveFragment |
boolean |
Preserva il frammento durante la navigazione |
skipLocationChange |
boolean |
Non aggiorna la barra degli indirizzi |
replaceUrl |
boolean |
Sostituisce l'entry nello storico del browser |
routerLinkActiveOptions |
{ exact: boolean } | IsActiveMatchOptions |
Opzioni per routerLinkActive |
routerLinkActive |
string | string[] |
Classi da aggiungere quando il link è attivo |
ariaCurrentWhenActive |
'page' | 'step' | 'location' | ... |
Attributo aria-current quando il link è attivo |
Personalizzazione SCSS
eqp-ui espone un sistema di variabili SCSS con prefisso $cui- e variabili CSS custom con prefisso --cui- per la personalizzazione del tema senza dover modificare i file sorgente.
Variabili SCSS principali della sidebar
// Dimensioni
$sidebar-width: 16rem !default;
$sidebar-narrow-width: 4rem !default;
// Colori generali
$sidebar-bg: #3c4b64 !default;
$sidebar-color: rgba(255, 255, 255, 0.87) !default;
$sidebar-border-color: transparent !default;
// Brand
$sidebar-brand-height: 4rem !default;
$sidebar-brand-bg: rgba(0, 0, 0, 0.2) !default;
// Voci di navigazione
$sidebar-nav-link-color: rgba(255, 255, 255, 0.6) !default;
$sidebar-nav-link-hover-bg: rgba(255, 255, 255, 0.05) !default;
$sidebar-nav-link-active-color: #fff !default;
$sidebar-nav-link-active-bg: rgba(255, 255, 255, 0.1) !default;
$sidebar-nav-link-disabled-color: rgba(255, 255, 255, 0.25) !default;
Sovrascrittura tramite CSS custom properties
Le variabili CSS sono esposte sull'elemento .sidebar e possono essere sovrascritte direttamente nell'applicazione ospite:
// src/styles.scss
.sidebar {
--cui-sidebar-bg: #2c3e50;
--cui-sidebar-nav-link-active-bg: #e74c3c;
--cui-sidebar-brand-bg: transparent;
}
File SCSS disponibili
| File | Descrizione |
|---|---|
_eqpui.scss |
Entry point principale — include tutti i partial |
_variables.scss |
Variabili di design token (colori, spacing, ecc.) |
_sidebar.scss |
Stili base della sidebar (carica sidebar/_sidebar.scss, _sidebar-nav.scss, _sidebar-narrow.scss) |
_header.scss |
Stili dell'header |
_footer.scss |
Stili del footer |
_breadcrumb.scss |
Stili della breadcrumb |
_layout.scss |
Stili del layout generale (wrapper, body dell'app) |
eqpui-grid.scss |
Solo il sistema a griglia Bootstrap |
eqpui-reboot.scss |
Solo i CSS reset |
eqpui-utilities.scss |
Solo le utility classes |
È possibile importare i file separati per ridurre il bundle CSS finale includendo solo i moduli necessari.