import { DeesElement, customElement, html, css, cssManager, property, type TemplateResult, } from '@design.estate/dees-element'; import type { IStatsTile } from '@design.estate/dees-catalog'; declare global { interface HTMLElementTagNameMap { 'sz-status-grid-cluster': SzStatusGridCluster; } } export interface IClusterStats { totalServices: number; running: number; stopped: number; dockerStatus: 'running' | 'stopped'; } @customElement('sz-status-grid-cluster') export class SzStatusGridCluster extends DeesElement { public static demo = () => html`
`; public static demoGroups = ['Dashboard Grids']; @property({ type: Object }) public accessor stats: IClusterStats = { totalServices: 0, running: 0, stopped: 0, dockerStatus: 'stopped', }; public static styles = [ cssManager.defaultStyles, css` :host { display: block; } `, ]; private get tiles(): IStatsTile[] { return [ { id: 'total', title: 'Total Services', value: this.stats.totalServices, type: 'number', icon: 'lucide:server', }, { id: 'running', title: 'Running', value: this.stats.running, type: 'number', icon: 'lucide:check', color: '#22c55e', }, { id: 'stopped', title: 'Stopped', value: this.stats.stopped, type: 'number', icon: 'lucide:circleStop', color: this.stats.stopped > 0 ? '#f59e0b' : undefined, }, { id: 'docker', title: 'Docker', value: this.stats.dockerStatus === 'running' ? 'Running' : 'Stopped', type: 'text', icon: 'lucide:container', color: this.stats.dockerStatus === 'running' ? '#22c55e' : '#ef4444', }, ]; } public render(): TemplateResult { return html` `; } }