var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); var _, done = false; for (var i = decorators.length - 1; i >= 0; i--) { var context = {}; for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; for (var p in contextIn.access) context.access[p] = contextIn.access[p]; context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); if (kind === "accessor") { if (result === void 0) continue; if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } if (target) Object.defineProperty(target, contextIn.name, descriptor); done = true; }; var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) { var useValue = arguments.length > 2; for (var i = 0; i < initializers.length; i++) { value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); } return useValue ? value : void 0; }; import * as plugins from '../../plugins.js'; import { DeesElement, property, html, customElement, css, cssManager, unsafeCSS, state, } from '@design.estate/dees-element'; import * as sharedStyles from '../../styles/shared.styles.js'; import { demoFunc } from './upladmin-dashboard.demo.js'; let UpladminDashboard = (() => { let _classDecorators = [customElement('upladmin-dashboard')]; let _classDescriptor; let _classExtraInitializers = []; let _classThis; let _classSuper = DeesElement; let _monitors_decorators; let _monitors_initializers = []; let _monitors_extraInitializers = []; let _incidents_decorators; let _incidents_initializers = []; let _incidents_extraInitializers = []; let _overallStatus_decorators; let _overallStatus_initializers = []; let _overallStatus_extraInitializers = []; let _loading_decorators; let _loading_initializers = []; let _loading_extraInitializers = []; var UpladminDashboard = class extends _classSuper { static { _classThis = this; } static { const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0; _monitors_decorators = [property({ type: Array })]; _incidents_decorators = [property({ type: Array })]; _overallStatus_decorators = [property({ type: Object })]; _loading_decorators = [property({ type: Boolean })]; __esDecorate(this, null, _monitors_decorators, { kind: "accessor", name: "monitors", static: false, private: false, access: { has: obj => "monitors" in obj, get: obj => obj.monitors, set: (obj, value) => { obj.monitors = value; } }, metadata: _metadata }, _monitors_initializers, _monitors_extraInitializers); __esDecorate(this, null, _incidents_decorators, { kind: "accessor", name: "incidents", static: false, private: false, access: { has: obj => "incidents" in obj, get: obj => obj.incidents, set: (obj, value) => { obj.incidents = value; } }, metadata: _metadata }, _incidents_initializers, _incidents_extraInitializers); __esDecorate(this, null, _overallStatus_decorators, { kind: "accessor", name: "overallStatus", static: false, private: false, access: { has: obj => "overallStatus" in obj, get: obj => obj.overallStatus, set: (obj, value) => { obj.overallStatus = value; } }, metadata: _metadata }, _overallStatus_initializers, _overallStatus_extraInitializers); __esDecorate(this, null, _loading_decorators, { kind: "accessor", name: "loading", static: false, private: false, access: { has: obj => "loading" in obj, get: obj => obj.loading, set: (obj, value) => { obj.loading = value; } }, metadata: _metadata }, _loading_initializers, _loading_extraInitializers); __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); UpladminDashboard = _classThis = _classDescriptor.value; if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); } static demo = demoFunc; #monitors_accessor_storage = __runInitializers(this, _monitors_initializers, []); get monitors() { return this.#monitors_accessor_storage; } set monitors(value) { this.#monitors_accessor_storage = value; } #incidents_accessor_storage = (__runInitializers(this, _monitors_extraInitializers), __runInitializers(this, _incidents_initializers, [])); get incidents() { return this.#incidents_accessor_storage; } set incidents(value) { this.#incidents_accessor_storage = value; } #overallStatus_accessor_storage = (__runInitializers(this, _incidents_extraInitializers), __runInitializers(this, _overallStatus_initializers, null)); get overallStatus() { return this.#overallStatus_accessor_storage; } set overallStatus(value) { this.#overallStatus_accessor_storage = value; } #loading_accessor_storage = (__runInitializers(this, _overallStatus_extraInitializers), __runInitializers(this, _loading_initializers, false)); get loading() { return this.#loading_accessor_storage; } set loading(value) { this.#loading_accessor_storage = value; } static styles = [ plugins.domtools.elementBasic.staticStyles, sharedStyles.commonStyles, css ` :host { display: block; font-family: ${unsafeCSS(sharedStyles.fonts.base)}; } .dashboard { display: grid; gap: ${unsafeCSS(sharedStyles.spacing.lg)}; } /* Overall Status Banner */ .status-banner { display: flex; align-items: center; gap: ${unsafeCSS(sharedStyles.spacing.md)}; padding: ${unsafeCSS(sharedStyles.spacing.lg)}; border-radius: ${unsafeCSS(sharedStyles.borderRadius.lg)}; border: 1px solid; } .status-banner.operational { background: ${cssManager.bdTheme('rgba(34, 197, 94, 0.1)', 'rgba(34, 197, 94, 0.15)')}; border-color: ${sharedStyles.colors.status.operational}; } .status-banner.degraded { background: ${cssManager.bdTheme('rgba(234, 179, 8, 0.1)', 'rgba(234, 179, 8, 0.15)')}; border-color: ${sharedStyles.colors.status.degraded}; } .status-banner.partial_outage { background: ${cssManager.bdTheme('rgba(249, 115, 22, 0.1)', 'rgba(249, 115, 22, 0.15)')}; border-color: ${sharedStyles.colors.status.partialOutage}; } .status-banner.major_outage { background: ${cssManager.bdTheme('rgba(239, 68, 68, 0.1)', 'rgba(239, 68, 68, 0.15)')}; border-color: ${sharedStyles.colors.status.majorOutage}; } .status-banner.maintenance { background: ${cssManager.bdTheme('rgba(59, 130, 246, 0.1)', 'rgba(59, 130, 246, 0.15)')}; border-color: ${sharedStyles.colors.status.maintenance}; } .status-indicator { width: 48px; height: 48px; border-radius: 50%; display: flex; align-items: center; justify-content: center; flex-shrink: 0; color: white; } .status-indicator dees-icon { --icon-size: 24px; } .status-indicator.operational { background: ${sharedStyles.colors.status.operational}; } .status-indicator.degraded { background: ${sharedStyles.colors.status.degraded}; } .status-indicator.partial_outage { background: ${sharedStyles.colors.status.partialOutage}; } .status-indicator.major_outage { background: ${sharedStyles.colors.status.majorOutage}; } .status-indicator.maintenance { background: ${sharedStyles.colors.status.maintenance}; } .status-content { flex: 1; } .status-title { font-size: 18px; font-weight: 600; color: ${sharedStyles.colors.text.primary}; margin-bottom: 4px; } .status-message { font-size: 14px; color: ${sharedStyles.colors.text.secondary}; } .status-meta { font-size: 12px; color: ${sharedStyles.colors.text.muted}; margin-top: 4px; } /* Stats Grid Container */ .stats-container { margin: 0; } dees-statsgrid { --tile-padding: 20px; --value-font-size: 28px; } /* Content Grid */ .content-grid { display: grid; grid-template-columns: 1fr 1fr; gap: ${unsafeCSS(sharedStyles.spacing.lg)}; } @media (max-width: 900px) { .content-grid { grid-template-columns: 1fr; } } /* Section Card */ .section-card { background: ${sharedStyles.colors.background.secondary}; border: 1px solid ${sharedStyles.colors.border.default}; border-radius: ${unsafeCSS(sharedStyles.borderRadius.lg)}; overflow: hidden; } .section-header { display: flex; align-items: center; justify-content: space-between; padding: ${unsafeCSS(sharedStyles.spacing.md)} ${unsafeCSS(sharedStyles.spacing.lg)}; border-bottom: 1px solid ${sharedStyles.colors.border.default}; } .section-title { font-size: 15px; font-weight: 600; color: ${sharedStyles.colors.text.primary}; } .section-action { display: inline-flex; align-items: center; gap: 4px; font-size: 13px; font-weight: 500; color: ${sharedStyles.colors.accent.primary}; background: none; border: none; cursor: pointer; transition: opacity ${unsafeCSS(sharedStyles.durations.fast)} ${unsafeCSS(sharedStyles.easings.default)}; } .section-action:hover { opacity: 0.8; } .section-action dees-icon { --icon-size: 14px; } .section-body { padding: ${unsafeCSS(sharedStyles.spacing.md)}; } /* Status By Category */ .category-list { display: flex; flex-direction: column; gap: ${unsafeCSS(sharedStyles.spacing.sm)}; } .category-item { display: flex; align-items: center; gap: ${unsafeCSS(sharedStyles.spacing.md)}; padding: ${unsafeCSS(sharedStyles.spacing.sm)} ${unsafeCSS(sharedStyles.spacing.md)}; background: ${sharedStyles.colors.background.primary}; border-radius: ${unsafeCSS(sharedStyles.borderRadius.base)}; } .category-name { flex: 1; font-size: 14px; font-weight: 500; color: ${sharedStyles.colors.text.primary}; } .category-stats { display: flex; align-items: center; gap: ${unsafeCSS(sharedStyles.spacing.sm)}; } .category-count { font-size: 13px; color: ${sharedStyles.colors.text.muted}; } .category-bar { width: 80px; height: 6px; background: ${sharedStyles.colors.background.muted}; border-radius: 3px; overflow: hidden; } .category-bar-fill { height: 100%; background: ${sharedStyles.colors.status.operational}; border-radius: 3px; transition: width ${unsafeCSS(sharedStyles.durations.normal)} ${unsafeCSS(sharedStyles.easings.default)}; } /* Active Incidents */ .incident-list { display: flex; flex-direction: column; gap: ${unsafeCSS(sharedStyles.spacing.sm)}; } .incident-item { display: flex; align-items: flex-start; gap: ${unsafeCSS(sharedStyles.spacing.md)}; padding: ${unsafeCSS(sharedStyles.spacing.md)}; background: ${sharedStyles.colors.background.primary}; border-radius: ${unsafeCSS(sharedStyles.borderRadius.base)}; border-left: 3px solid; cursor: pointer; transition: background ${unsafeCSS(sharedStyles.durations.fast)} ${unsafeCSS(sharedStyles.easings.default)}; } .incident-item:hover { background: ${sharedStyles.colors.background.muted}; } .incident-item.critical { border-left-color: ${sharedStyles.colors.status.majorOutage}; } .incident-item.major { border-left-color: ${sharedStyles.colors.status.partialOutage}; } .incident-item.minor { border-left-color: ${sharedStyles.colors.status.degraded}; } .incident-item.maintenance { border-left-color: ${sharedStyles.colors.status.maintenance}; } .incident-content { flex: 1; min-width: 0; } .incident-title { font-size: 14px; font-weight: 500; color: ${sharedStyles.colors.text.primary}; margin-bottom: 4px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .incident-meta { display: flex; align-items: center; gap: ${unsafeCSS(sharedStyles.spacing.sm)}; font-size: 12px; color: ${sharedStyles.colors.text.muted}; } .incident-status { display: inline-flex; align-items: center; gap: 4px; padding: 2px 8px; font-size: 10px; font-weight: 600; text-transform: uppercase; border-radius: 9999px; background: ${sharedStyles.colors.background.muted}; color: ${sharedStyles.colors.text.secondary}; } /* Quick Actions */ .quick-actions { display: grid; grid-template-columns: repeat(2, 1fr); gap: ${unsafeCSS(sharedStyles.spacing.sm)}; } .quick-action { display: flex; flex-direction: column; align-items: center; gap: 8px; padding: ${unsafeCSS(sharedStyles.spacing.lg)}; background: ${sharedStyles.colors.background.primary}; border: 1px solid ${sharedStyles.colors.border.default}; border-radius: ${unsafeCSS(sharedStyles.borderRadius.base)}; cursor: pointer; transition: all ${unsafeCSS(sharedStyles.durations.fast)} ${unsafeCSS(sharedStyles.easings.default)}; color: ${sharedStyles.colors.text.secondary}; } .quick-action:hover { background: ${sharedStyles.colors.background.muted}; border-color: ${sharedStyles.colors.border.strong}; color: ${sharedStyles.colors.text.primary}; } .quick-action-icon { display: flex; align-items: center; justify-content: center; } .quick-action-icon dees-icon { --icon-size: 24px; } .quick-action-label { font-size: 13px; font-weight: 500; color: ${sharedStyles.colors.text.primary}; text-align: center; } /* Empty State */ .empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: ${unsafeCSS(sharedStyles.spacing.xl)}; text-align: center; color: ${sharedStyles.colors.text.muted}; } .empty-icon { margin-bottom: ${unsafeCSS(sharedStyles.spacing.sm)}; opacity: 0.5; } .empty-icon dees-icon { --icon-size: 32px; } .empty-text { font-size: 14px; color: ${sharedStyles.colors.text.muted}; } ` ]; get statsTiles() { const activeIncidents = this.incidents.filter(i => !['resolved', 'postmortem'].includes(i.status)); const operationalCount = this.monitors.filter(m => m.currentStatus === 'operational').length; const degradedCount = this.monitors.filter(m => m.currentStatus === 'degraded').length; const outageCount = this.monitors.filter(m => ['partial_outage', 'major_outage'].includes(m.currentStatus)).length; const avgUptime = this.monitors.length > 0 ? this.monitors.reduce((sum, m) => sum + m.uptime30d, 0) / this.monitors.length : 100; const uptimeColor = avgUptime >= 99.9 ? sharedStyles.colors.status.operational.cssText : avgUptime >= 99 ? sharedStyles.colors.status.degraded.cssText : sharedStyles.colors.status.majorOutage.cssText; return [ { id: 'uptime', title: 'Average Uptime (30d)', value: avgUptime, unit: '%', type: 'percentage', color: uptimeColor, icon: 'lucide:barChart3', description: avgUptime >= 99.9 ? 'Excellent' : avgUptime >= 99 ? 'Good' : 'Needs attention', }, { id: 'operational', title: 'Operational Services', value: operationalCount, type: 'number', icon: 'lucide:checkCircle', color: sharedStyles.colors.status.operational.cssText, }, { id: 'issues', title: 'Services with Issues', value: degradedCount + outageCount, type: 'number', icon: 'lucide:alertTriangle', color: (degradedCount + outageCount) > 0 ? sharedStyles.colors.status.degraded.cssText : undefined, }, { id: 'incidents', title: 'Active Incidents', value: activeIncidents.length, type: 'number', icon: 'lucide:alertCircle', color: activeIncidents.length > 0 ? sharedStyles.colors.status.majorOutage.cssText : undefined, }, ]; } render() { const activeIncidents = this.incidents.filter(i => !['resolved', 'postmortem'].includes(i.status)); return html `
${this.renderStatusBanner()}
Active Incidents
${activeIncidents.length > 0 ? html `
${activeIncidents.slice(0, 5).map(incident => this.renderIncidentItem(incident))}
` : html `
No active incidents
`}
Status by Category
${this.renderCategoryStatus()}
Quick Actions
`; } renderStatusBanner() { const status = this.overallStatus || this.calculateOverallStatus(); const statusIcons = { operational: 'lucide:check', degraded: 'lucide:alertTriangle', partial_outage: 'lucide:zap', major_outage: 'lucide:x', maintenance: 'lucide:wrench', }; const statusTitles = { operational: 'All Systems Operational', degraded: 'Degraded Performance', partial_outage: 'Partial System Outage', major_outage: 'Major System Outage', maintenance: 'Scheduled Maintenance', }; return html `
${statusTitles[status.status]}
${status.message}
Last updated: ${new Date(status.lastUpdated).toLocaleString()}
`; } renderIncidentItem(incident) { const formatTime = (timestamp) => { const now = Date.now(); const diff = now - timestamp; const hours = Math.floor(diff / (1000 * 60 * 60)); if (hours < 1) return `${Math.floor(diff / (1000 * 60))}m ago`; if (hours < 24) return `${hours}h ago`; return `${Math.floor(hours / 24)}d ago`; }; return html `
${incident.title}
${incident.status} ${formatTime(incident.startTime)} ${incident.affectedServices.length} services
`; } renderCategoryStatus() { const categories = [...new Set(this.monitors.map(m => m.category || 'Uncategorized'))]; if (categories.length === 0) { return html `
No monitors configured
`; } return html `
${categories.map(category => { const categoryMonitors = this.monitors.filter(m => (m.category || 'Uncategorized') === category); const operational = categoryMonitors.filter(m => m.currentStatus === 'operational').length; const percentage = (operational / categoryMonitors.length) * 100; return html `
${category}
${operational}/${categoryMonitors.length}
`; })}
`; } calculateOverallStatus() { const hasOutage = this.monitors.some(m => ['partial_outage', 'major_outage'].includes(m.currentStatus)); const hasDegraded = this.monitors.some(m => m.currentStatus === 'degraded'); const hasMaintenance = this.monitors.some(m => m.currentStatus === 'maintenance'); const affectedCount = this.monitors.filter(m => m.currentStatus !== 'operational').length; let status = 'operational'; let message = 'All systems are operating normally.'; if (hasOutage) { status = this.monitors.some(m => m.currentStatus === 'major_outage') ? 'major_outage' : 'partial_outage'; message = `${affectedCount} services are experiencing issues.`; } else if (hasDegraded) { status = 'degraded'; message = `${affectedCount} services are experiencing degraded performance.`; } else if (hasMaintenance) { status = 'maintenance'; message = `${affectedCount} services are under maintenance.`; } return { status, message, lastUpdated: Date.now(), affectedServices: affectedCount, totalServices: this.monitors.length, }; } handleViewAllIncidents() { this.dispatchEvent(new CustomEvent('navigateIncidents', { bubbles: true, composed: true })); } handleViewAllMonitors() { this.dispatchEvent(new CustomEvent('navigateMonitors', { bubbles: true, composed: true })); } handleIncidentClick(incident) { this.dispatchEvent(new CustomEvent('incidentSelect', { detail: { incident }, bubbles: true, composed: true })); } handleNewIncident() { this.dispatchEvent(new CustomEvent('createIncident', { bubbles: true, composed: true })); } handleNewMonitor() { this.dispatchEvent(new CustomEvent('createMonitor', { bubbles: true, composed: true })); } handleScheduleMaintenance() { this.dispatchEvent(new CustomEvent('scheduleMaintenance', { bubbles: true, composed: true })); } handleViewConfig() { this.dispatchEvent(new CustomEvent('navigateConfig', { bubbles: true, composed: true })); } constructor() { super(...arguments); __runInitializers(this, _loading_extraInitializers); } static { __runInitializers(_classThis, _classExtraInitializers); } }; return UpladminDashboard = _classThis; })(); export { UpladminDashboard }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsYWRtaW4tZGFzaGJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzL3VwbGFkbWluLWRhc2hib2FyZC91cGxhZG1pbi1kYXNoYm9hcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUNMLFdBQVcsRUFDWCxRQUFRLEVBQ1IsSUFBSSxFQUNKLGFBQWEsRUFFYixHQUFHLEVBQ0gsVUFBVSxFQUNWLFNBQVMsRUFDVCxLQUFLLEdBQ04sTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEtBQUssWUFBWSxNQUFNLCtCQUErQixDQUFDO0FBRzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztJQVczQyxpQkFBaUI7NEJBRDdCLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQzs7OztzQkFDRyxXQUFXOzs7Ozs7Ozs7Ozs7O2lDQUFuQixTQUFRLFdBQVc7Ozs7b0NBRy9DLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztxQ0FHekIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO3lDQUd6QixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7bUNBRzFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztZQVI1Qiw2S0FBUyxRQUFRLDZCQUFSLFFBQVEsMkZBQXdCO1lBR3pDLGdMQUFTLFNBQVMsNkJBQVQsU0FBUyw2RkFBMEI7WUFHNUMsNExBQVMsYUFBYSw2QkFBYixhQUFhLHFHQUErQjtZQUdyRCwwS0FBUyxPQUFPLDZCQUFQLE9BQU8seUZBQWtCO1lBYnBDLDZLQThvQkM7Ozs7UUE3b0JRLE1BQU0sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1FB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