import { commitinfo } from '../00_commitinfo_data.js'; import * as plugins from '../plugins.js'; import * as appstate from '../appstate.js'; import { DeesElement, css, cssManager, customElement, html, state } from '@design.estate/dees-element'; import { CloudlyViewBackups } from './cloudly-view-backups.js'; import { CloudlyViewClusters } from './cloudly-view-clusters.js'; import { CloudlyViewDbs } from './cloudly-view-dbs.js'; import { CloudlyViewDeployments } from './cloudly-view-deployments.js'; import { CloudlyViewDns } from './cloudly-view-dns.js'; import { CloudlyViewDomains } from './cloudly-view-domains.js'; import { CloudlyViewImages } from './cloudly-view-images.js'; import { CloudlyViewLogs } from './cloudly-view-logs.js'; import { CloudlyViewMails } from './cloudly-view-mails.js'; import { CloudlyViewOverview } from './cloudly-view-overview.js'; import { CloudlyViewS3 } from './cloudly-view-s3.js'; import { CloudlyViewSecretBundles } from './cloudly-view-secretbundles.js'; import { CloudlyViewSecretGroups } from './cloudly-view-secretgroups.js'; import { CloudlyViewServices } from './cloudly-view-services.js'; import { CloudlyViewExternalRegistries } from './cloudly-view-externalregistries.js'; import { CloudlyViewSettings } from './cloudly-view-settings.js'; import { CloudlyViewTasks } from './cloudly-view-tasks.js'; declare global { interface HTMLElementTagNameMap { 'cvault-dashboard': CloudlyDashboard; } } @customElement('cloudly-dashboard') export class CloudlyDashboard extends DeesElement { @state() private identity: plugins.interfaces.data.IIdentity; @state() private data: appstate.IDataState = { secretGroups: [], secretBundles: [], clusters: [], }; // Keep view tabs stable across renders to preserve active selection private readonly viewTabs: plugins.deesCatalog.IView[] = [ { name: 'Overview', iconName: 'lucide:LayoutDashboard', element: CloudlyViewOverview, }, { name: 'Settings', iconName: 'lucide:Settings', element: CloudlyViewSettings, }, { name: 'SecretGroups', iconName: 'lucide:ShieldCheck', element: CloudlyViewSecretGroups, }, { name: 'SecretBundles', iconName: 'lucide:LockKeyhole', element: CloudlyViewSecretBundles, }, { name: 'Clusters', iconName: 'lucide:Network', element: CloudlyViewClusters, }, { name: 'ExternalRegistries', iconName: 'lucide:Package', element: CloudlyViewExternalRegistries, }, { name: 'Images', iconName: 'lucide:Image', element: CloudlyViewImages, }, { name: 'Services', iconName: 'lucide:Layers', element: CloudlyViewServices, }, { name: 'Testing & Building', iconName: 'lucide:HardHat', element: CloudlyViewServices, }, { name: 'Deployments', iconName: 'lucide:Rocket', element: CloudlyViewDeployments, }, { name: 'Tasks', iconName: 'lucide:ListChecks', element: CloudlyViewTasks, }, { name: 'Domains', iconName: 'lucide:Globe2', element: CloudlyViewDomains, }, { name: 'DNS', iconName: 'lucide:Globe', element: CloudlyViewDns, }, { name: 'Mails', iconName: 'lucide:Mail', element: CloudlyViewMails, }, { name: 'Logs', iconName: 'lucide:FileText', element: CloudlyViewLogs, }, { name: 's3', iconName: 'lucide:Cloud', element: CloudlyViewS3, }, { name: 'DBs', iconName: 'lucide:Database', element: CloudlyViewDbs, }, { name: 'Backups', iconName: 'lucide:Save', element: CloudlyViewBackups, }, { name: 'Fleet', iconName: 'lucide:Truck', element: CloudlyViewBackups, }, ]; constructor() { super(); document.title = `cloudly v${commitinfo.version}`; const subcription = appstate.dataState .select((stateArg) => stateArg) .subscribe((dataArg) => { this.data = dataArg; }); this.rxSubscriptions.push(subcription); } public static styles = [ cssManager.defaultStyles, css` .maincontainer { position: relative; width: 100vw; height: 100vh; } h1 { font-weight: 400; font-size: 24px; font-family: 'Cal Sans'; } `, ]; public render() { return html`