// app.config.tsimport{providePrimeNG}from'primeng/config';exportconstappConfig={providers:[providePrimeNG({unstyled:true,// โ no default CSS emitted})]};
With unstyled: true, every PrimeNG component renders bare semantic markup. You attach the dashboard's glass styles via the pt (pass-through) prop on each component instance, or globally via a shared preset.
Static label/value grid. No PrimeNG component needed.
Analytics charts (8)
ngx-echarts (wraps echarts)
Frequency bars, CFR trend, duration histogram, funnel, status donut, heatmap, leaderboard, incidents list. ECharts option objects per chart; NgxEchartsModule provided once in app config.
p-drawer, p-popover, p-selectButton, p-toggleSwitch, p-select, p-checkbox, p-radioButton, pInputText. Tree-shakes to only imported components. Configured with unstyled: true.
@swimlane/ngx-graph
^9.x
MIT
Directed graph visualization
Swimlanes view โ one <ngx-graph> instance per service lane. Dagre layout (orientation: 'LR'). Custom #nodeTemplate, #linkTemplate, #defsTemplate. Bundles its own D3 subset.
lucide-angular
^0.x
ISC
Icon library
Mono-weight stroke icons for topbar controls (filter, fields, correlation, theme switch, close buttons). Tree-shakeable โ import individual icons.
date-fns
^4.x
MIT
Date/time formatting
formatDistanceToNow() for elapsed display ("3h ago") on tiles/nodes. format() for absolute UTC in drawer/inspector. Tree-shakeable.
ngx-echarts
^21.0.0
MIT
Apache ECharts wrapper for Angular
Analytics view โ all 8 charts (frequency bars, CFR trend, duration histogram, funnel, status donut, heatmap, leaderboard, incidents list). Wraps echarts (peer dep). Chosen for Angular-21 compatibility (see note below).
echarts
^5.x
Apache-2.0
Apache ECharts core (peer dep of ngx-echarts)
Chart rendering engine. Tree-shakeable via echarts/core + per-chart imports.
Total added dependencies: 6 packages. No jQuery, no standalone D3, no state-management library, no CSS framework. PrimeNG tree-shakes to only the ~8 imported components. Angular built-ins (HttpClient, Signals, Animations, Router, Forms) and browser-native APIs (EventSource, localStorage, matchMedia, RxJS) complete the stack.
ngx-echarts was chosen over @swimlane/ngx-charts because @swimlane/ngx-charts is not compatible with Angular 21 (last tested against Angular 15; the project is on Angular 21). ngx-echarts ^21.0.0 follows Angular's major-version numbering convention and targets Angular 21; compatibility is confirmed via peer-dep range. echarts ^5.x is stable and tree-shakeable via echarts/core imports.