import { DeesElement, customElement, html, css, cssManager, property, type TemplateResult, } from '@design.estate/dees-element'; declare global { interface HTMLElementTagNameMap { 'sz-stat-card': SzStatCard; } } @customElement('sz-stat-card') export class SzStatCard extends DeesElement { public static demo = () => html`
`; public static demoGroups = ['Dashboard']; @property({ type: String }) public accessor label: string = ''; @property({ type: String }) public accessor value: string = ''; @property({ type: String }) public accessor icon: string = ''; @property({ type: String }) public accessor variant: 'default' | 'success' | 'warning' | 'error' = 'default'; @property({ type: Boolean }) public accessor valueBadge: boolean = false; public static styles = [ cssManager.defaultStyles, css` :host { display: block; height: 100%; } .card { background: ${cssManager.bdTheme('#ffffff', '#09090b')}; border: 1px solid ${cssManager.bdTheme('#e4e4e7', '#27272a')}; border-radius: 8px; padding: 20px; transition: all 200ms ease; height: 100%; box-sizing: border-box; } .card:hover { border-color: ${cssManager.bdTheme('#d4d4d8', '#3f3f46')}; box-shadow: 0 4px 12px ${cssManager.bdTheme('rgba(0,0,0,0.05)', 'rgba(0,0,0,0.2)')}; } .header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; } .label { font-size: 14px; font-weight: 500; color: ${cssManager.bdTheme('#71717a', '#a1a1aa')}; } .icon { width: 20px; height: 20px; color: ${cssManager.bdTheme('#71717a', '#a1a1aa')}; } .value { font-size: 28px; font-weight: 700; color: ${cssManager.bdTheme('#18181b', '#fafafa')}; line-height: 1.2; } .value.success { color: ${cssManager.bdTheme('#16a34a', '#22c55e')}; } .value.warning { color: ${cssManager.bdTheme('#ca8a04', '#facc15')}; } .value.error { color: ${cssManager.bdTheme('#dc2626', '#ef4444')}; } .badge { display: inline-flex; align-items: center; padding: 4px 12px; border-radius: 9999px; font-size: 14px; font-weight: 500; } .badge.success { background: ${cssManager.bdTheme('#dcfce7', 'rgba(34, 197, 94, 0.2)')}; color: ${cssManager.bdTheme('#16a34a', '#22c55e')}; } .badge.warning { background: ${cssManager.bdTheme('#fef9c3', 'rgba(250, 204, 21, 0.2)')}; color: ${cssManager.bdTheme('#ca8a04', '#facc15')}; } .badge.error { background: ${cssManager.bdTheme('#fee2e2', 'rgba(239, 68, 68, 0.2)')}; color: ${cssManager.bdTheme('#dc2626', '#ef4444')}; } .badge.default { background: ${cssManager.bdTheme('#f4f4f5', '#27272a')}; color: ${cssManager.bdTheme('#71717a', '#a1a1aa')}; } `, ]; public render(): TemplateResult { const valueClass = this.valueBadge ? `badge ${this.variant}` : `value ${this.variant}`; return html`
${this.label} ${this.renderIcon()}
${this.value}
`; } private renderIcon(): TemplateResult { const icons: Record = { server: html``, check: html``, stop: html``, container: html``, }; return icons[this.icon] || html``; } }