diff --git a/ogWebconsole/src/app/components/global-status/global-status.component.css b/ogWebconsole/src/app/components/global-status/global-status.component.css index 46d0462..af473ac 100644 --- a/ogWebconsole/src/app/components/global-status/global-status.component.css +++ b/ogWebconsole/src/app/components/global-status/global-status.component.css @@ -1,13 +1,14 @@ /* ===== HEADER DE BIENVENIDA ===== */ .welcome-header { - background: #3f51b5; + background: linear-gradient(120deg, #3b3080 0%, #2d2b55 50%, #1e1e2f 100%); color: white; - padding: 2rem 2rem 1.5rem 2rem; + padding: 1.2rem 1.5rem; display: flex; justify-content: space-between; - align-items: flex-start; + align-items: center; position: relative; overflow: hidden; + gap: 1rem; } .welcome-header::before { @@ -24,62 +25,119 @@ .welcome-content { display: flex; align-items: center; - gap: 1.5rem; + gap: 1rem; position: relative; z-index: 1; + min-width: 0; } .welcome-icon { background: rgba(255, 255, 255, 0.2); border-radius: 50%; - width: 60px; - height: 60px; + width: 46px; + height: 46px; display: flex; align-items: center; justify-content: center; backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.3); + flex-shrink: 0; } .welcome-icon mat-icon { - font-size: 32px; - width: 32px; - height: 32px; + font-size: 26px; + width: 26px; + height: 26px; color: white; } .welcome-text { - flex: 1; + min-width: 0; } .welcome-title { - margin: 0 0 0.5rem 0; - font-size: 2rem; + margin: 0 0 0.2rem 0; + font-size: 1.5rem; font-weight: 700; text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); + white-space: nowrap; } .welcome-subtitle { - margin: 0 0 0.25rem 0; - font-size: 1.1rem; - font-weight: 500; - opacity: 0.95; -} - -.welcome-description { margin: 0; font-size: 0.9rem; - opacity: 0.8; + font-weight: 400; + opacity: 0.85; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } .welcome-actions { display: flex; - gap: 0.5rem; + align-items: center; + gap: 0.75rem; position: relative; z-index: 1; + flex-shrink: 0; +} + +/* ===== PANEL DE VERSIONES ===== */ +.release-panel { + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 0.4rem; +} + +.release-channel { + background: rgba(255, 255, 255, 0.25); + border: 1px solid rgba(255, 255, 255, 0.4); + padding: 0.15rem 0.6rem; + border-radius: 10px; + font-size: 0.65rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 1px; + opacity: 0.95; +} + +.release-chips { + display: flex; + flex-wrap: wrap; + gap: 0.3rem; + justify-content: flex-end; + max-width: 320px; +} + +.release-chip { + display: flex; + align-items: center; + gap: 0.3rem; + background: rgba(0, 0, 0, 0.2); + border: 1px solid rgba(255, 255, 255, 0.2); + padding: 0.15rem 0.5rem; + border-radius: 8px; + cursor: default; + transition: background 0.2s ease; +} + +.release-chip:hover { + background: rgba(0, 0, 0, 0.35); +} + +.chip-name { + font-size: 0.65rem; + opacity: 0.8; + font-weight: 500; +} + +.chip-version { + font-size: 0.65rem; + font-weight: 700; + font-family: 'Courier New', monospace; } -.help-button, .refresh-button { background: rgba(255, 255, 255, 0.2) !important; color: white !important; @@ -88,7 +146,6 @@ transition: all 0.3s ease; } -.help-button:hover, .refresh-button:hover { background: rgba(255, 255, 255, 0.3) !important; transform: translateY(-2px); @@ -104,7 +161,7 @@ mat-dialog-content { } .main-content { - padding: 2rem; + padding: 1.25rem 1.5rem; } /* ===== SPINNER DE CARGA ===== */ @@ -143,19 +200,19 @@ mat-dialog-content { /* ===== RESUMEN DEL SISTEMA ===== */ .system-overview { display: grid; - grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); - gap: 1.5rem; - margin-bottom: 2rem; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 1rem; + margin-bottom: 1.25rem; } .overview-card { background: white; - border-radius: 16px; - padding: 1.5rem; + border-radius: 12px; + padding: 1rem; display: flex; align-items: center; - gap: 1rem; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); + gap: 0.75rem; + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.07); transition: all 0.3s ease; border: 1px solid rgba(0, 0, 0, 0.05); position: relative; @@ -202,8 +259,8 @@ mat-dialog-content { .overview-icon { background: linear-gradient(135deg, #667eea, #764ba2); border-radius: 50%; - width: 50px; - height: 50px; + width: 40px; + height: 40px; display: flex; align-items: center; justify-content: center; @@ -212,21 +269,21 @@ mat-dialog-content { .overview-icon mat-icon { color: white; - font-size: 24px; - width: 24px; - height: 24px; + font-size: 20px; + width: 20px; + height: 20px; } .overview-content h3 { - margin: 0 0 0.5rem 0; - font-size: 1.1rem; + margin: 0 0 0.3rem 0; + font-size: 0.95rem; font-weight: 600; color: #2c3e50; } .overview-content p { margin: 0; - font-size: 0.9rem; + font-size: 0.82rem; color: #6c757d; } @@ -411,7 +468,7 @@ mat-dialog-content { display: flex; justify-content: space-between; align-items: center; - padding: 1.5rem 2rem; + padding: 0.6rem 1.25rem; background: white; border-top: 1px solid #e9ecef; border-radius: 0 0 12px 12px; @@ -447,23 +504,26 @@ mat-dialog-content { /* ===== RESPONSIVE ===== */ @media (max-width: 768px) { .welcome-header { - padding: 1.5rem 1rem 1rem 1rem; - flex-direction: column; - gap: 1rem; - text-align: center; - } - - .welcome-content { - flex-direction: column; - gap: 1rem; + padding: 1rem; + flex-wrap: wrap; + gap: 0.75rem; } .welcome-title { - font-size: 1.5rem; + font-size: 1.25rem; } .welcome-subtitle { - font-size: 1rem; + font-size: 0.8rem; + } + + .release-panel { + align-items: flex-start; + } + + .release-chips { + justify-content: flex-start; + max-width: 100%; } .main-content { @@ -471,12 +531,12 @@ mat-dialog-content { } .system-overview { - grid-template-columns: 1fr; - gap: 1rem; + grid-template-columns: repeat(2, 1fr); + gap: 0.75rem; } .overview-card { - padding: 1rem; + padding: 0.75rem; } .action-container { @@ -550,6 +610,7 @@ mat-dialog-content { .overview-card:nth-child(1) { animation-delay: 0.1s; } .overview-card:nth-child(2) { animation-delay: 0.2s; } .overview-card:nth-child(3) { animation-delay: 0.3s; } +.overview-card:nth-child(4) { animation-delay: 0.4s; } /* ===== ESTILOS GLOBALES DEL DIALOG ===== */ ::ng-deep .mat-dialog-container { diff --git a/ogWebconsole/src/app/components/global-status/global-status.component.ts b/ogWebconsole/src/app/components/global-status/global-status.component.ts index c7489e5..a373ca2 100644 --- a/ogWebconsole/src/app/components/global-status/global-status.component.ts +++ b/ogWebconsole/src/app/components/global-status/global-status.component.ts @@ -34,6 +34,11 @@ export class GlobalStatusComponent implements OnInit { repositories: any[] = []; repositoryStatuses: { [key: string]: any } = {}; selectedRepositoryUuid: string = ''; + selectedSection: 'repositories' | 'ogboot' | 'dhcp' | 'ogcore' = 'ogcore'; + + ogBootDiskUsage: any = {}; + ogBootServicesStatus: any = {}; + ogBootDiskUsageChartData: any[] = []; dhcpsApiUrl: string; dhcps: any[] = []; @@ -46,10 +51,19 @@ export class GlobalStatusComponent implements OnInit { selectedBootServerUuid: string = ''; lastUpdateTime: string = ''; - selectedSection: 'repositories' | 'ogboot' | 'dhcp' | 'ogcore' = 'repositories'; ogCoreApiUrl: string; + releaseInfo: Record | null = null; + releaseLoading: boolean = false; + + loadingOgBootOgLives: boolean = false; + loadingOgBootServices: boolean = false; + loadingOgBootDisk: boolean = false; + loadingDhcpSubnets: boolean = false; + loadingDhcpServices: boolean = false; + loadingDhcpDisk: boolean = false; + constructor( private configService: ConfigService, private toastService: ToastrService, @@ -66,6 +80,9 @@ export class GlobalStatusComponent implements OnInit { this.loading = true; this.updateLastUpdateTime(); + this.loadReleaseInfo(); + this.loadDhcps(false); + this.loadRepositories(false); this.loadDhcps(true); this.loadRepositories(true); this.loadBootServers(true); @@ -74,6 +91,30 @@ export class GlobalStatusComponent implements OnInit { this.syncSubnets(); } + get releasePackages(): { key: string; value: string }[] { + if (!this.releaseInfo) return []; + return Object.entries(this.releaseInfo) + .filter(([key]) => key !== 'Versión instalada') + .map(([key, value]) => ({ key, value })); + } + + get releaseChannel(): string { + return this.releaseInfo?.['Versión instalada'] ?? ''; + } + + loadReleaseInfo(): void { + this.releaseLoading = true; + this.http.get>(`${this.baseUrl}/opengnsys/server/release`).subscribe({ + next: data => { + this.releaseInfo = data; + this.releaseLoading = false; + }, + error: () => { + this.releaseLoading = false; + } + }); + } + syncSubnets() { this.http.get(`${this.dhcpsApiUrl}?page=1&itemsPerPage=10`).subscribe(data => { const dhcps = data['hydra:member'] || []; diff --git a/ogWebconsole/src/app/components/global-status/ogboot-status/ogboot-status.component.css b/ogWebconsole/src/app/components/global-status/ogboot-status/ogboot-status.component.css index 46d0462..e22f6a5 100644 --- a/ogWebconsole/src/app/components/global-status/ogboot-status/ogboot-status.component.css +++ b/ogWebconsole/src/app/components/global-status/ogboot-status/ogboot-status.component.css @@ -1,886 +1,233 @@ -/* ===== HEADER DE BIENVENIDA ===== */ -.welcome-header { - background: #3f51b5; - color: white; - padding: 2rem 2rem 1.5rem 2rem; - display: flex; - justify-content: space-between; - align-items: flex-start; - position: relative; - overflow: hidden; +.section-content { + padding: 0.75rem 1rem; } -.welcome-header::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: url('data:image/svg+xml,'); - opacity: 0.2; -} - -.welcome-content { - display: flex; - align-items: center; - gap: 1.5rem; - position: relative; - z-index: 1; -} - -.welcome-icon { - background: rgba(255, 255, 255, 0.2); - border-radius: 50%; - width: 60px; - height: 60px; - display: flex; - align-items: center; - justify-content: center; - backdrop-filter: blur(10px); - border: 1px solid rgba(255, 255, 255, 0.3); -} - -.welcome-icon mat-icon { - font-size: 32px; - width: 32px; - height: 32px; - color: white; -} - -.welcome-text { - flex: 1; -} - -.welcome-title { - margin: 0 0 0.5rem 0; - font-size: 2rem; - font-weight: 700; - text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); -} - -.welcome-subtitle { - margin: 0 0 0.25rem 0; - font-size: 1.1rem; - font-weight: 500; - opacity: 0.95; -} - -.welcome-description { - margin: 0; - font-size: 0.9rem; - opacity: 0.8; -} - -.welcome-actions { - display: flex; - gap: 0.5rem; - position: relative; - z-index: 1; -} - -.help-button, -.refresh-button { - background: rgba(255, 255, 255, 0.2) !important; - color: white !important; - backdrop-filter: blur(10px); - border: 1px solid rgba(255, 255, 255, 0.3); - transition: all 0.3s ease; -} - -.help-button:hover, -.refresh-button:hover { - background: rgba(255, 255, 255, 0.3) !important; - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); -} - -/* ===== CONTENIDO PRINCIPAL ===== */ -mat-dialog-content { - height: calc(100% - 200px); - overflow: auto; - padding: 0 !important; - background: #f8f9fa; -} - -.main-content { - padding: 2rem; -} - -/* ===== SPINNER DE CARGA ===== */ -.spinner-container { - display: flex; - justify-content: center; - align-items: center; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - z-index: 1000; - background: rgba(255, 255, 255, 0.95); - border-radius: 16px; - padding: 2rem; - box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); - backdrop-filter: blur(10px); -} - -.loading-content { - text-align: center; -} - -.loading-spinner { - width: 60px !important; - height: 60px !important; - margin-bottom: 1rem; -} - -.loading-text { - margin: 0; - color: #666; - font-weight: 500; -} - -/* ===== RESUMEN DEL SISTEMA ===== */ -.system-overview { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); - gap: 1.5rem; - margin-bottom: 2rem; -} - -.overview-card { - background: white; - border-radius: 16px; - padding: 1.5rem; - display: flex; - align-items: center; - gap: 1rem; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - transition: all 0.3s ease; - border: 1px solid rgba(0, 0, 0, 0.05); - position: relative; - overflow: hidden; -} - -.overview-card::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 4px; - background: linear-gradient(90deg, #667eea, #764ba2); - opacity: 0; - transition: opacity 0.3s ease; -} - -.overview-card:hover { - transform: translateY(-4px); - box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15); - border-color: #667eea; -} - -.overview-card:hover::before { - opacity: 1; -} - -.overview-card.clickable { - cursor: pointer; - transition: all 0.3s ease; -} - -.overview-card.clickable:hover { - transform: translateY(-4px); - box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15); -} - -.overview-card.clickable:active { - transform: translateY(-2px); - box-shadow: 0 8px 25px rgba(0, 0, 0, 0.12); -} - -.overview-icon { - background: linear-gradient(135deg, #667eea, #764ba2); - border-radius: 50%; - width: 50px; - height: 50px; - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; -} - -.overview-icon mat-icon { - color: white; - font-size: 24px; - width: 24px; - height: 24px; -} - -.overview-content h3 { - margin: 0 0 0.5rem 0; - font-size: 1.1rem; - font-weight: 600; - color: #2c3e50; -} - -.overview-content p { - margin: 0; - font-size: 0.9rem; - color: #6c757d; -} - -.click-hint { - margin-top: 0.5rem !important; - font-size: 0.75rem !important; - color: #667eea !important; - font-weight: 500; - opacity: 0.8; - transition: opacity 0.3s ease; - display: flex; - align-items: center; - gap: 0.25rem; -} - -.hint-icon { - font-size: 0.875rem !important; - width: 0.875rem !important; - height: 0.875rem !important; -} - -.overview-card.clickable:hover .click-hint { - opacity: 1; -} - -/* ===== BADGES DE ESTADO ===== */ -.status-badge { - display: inline-block; - padding: 0.25rem 0.75rem; - border-radius: 20px; - font-size: 0.8rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.5px; -} - -.status-badge.online { - background: linear-gradient(135deg, #28a745, #20c997); - color: white; -} - -.status-badge.offline { - background: linear-gradient(135deg, #dc3545, #c82333); - color: white; -} - -.status-badge.info { - background: linear-gradient(135deg, #17a2b8, #138496); - color: white; -} - -/* ===== TABS PRINCIPALES ===== */ -.main-tabs { - background: white; - border-radius: 16px; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - overflow: hidden; -} - -::ng-deep .main-tabs .mat-tab-header { - background: #f8f9fa; - border-bottom: 1px solid #e9ecef; -} - -::ng-deep .main-tabs .mat-tab-label { - font-weight: 600; - color: #6c757d; - transition: all 0.3s ease; -} - -::ng-deep .main-tabs .mat-tab-label-active { - color: #667eea; -} - -::ng-deep .main-tabs .mat-ink-bar { - background: linear-gradient(90deg, #667eea, #764ba2); - height: 3px; -} - -.tab-content { - padding: 2rem; -} - -/* ===== CONTENEDOR DE ERRORES ===== */ -.error-container { - display: flex; - justify-content: center; - align-items: center; - min-height: 300px; - padding: 2rem; -} - -.error-card { - background: white; - border-radius: 16px; - padding: 3rem 2rem; - text-align: center; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - border: 1px solid #e9ecef; - max-width: 400px; -} - -.error-icon { - font-size: 64px; - width: 64px; - height: 64px; - color: #dc3545; - margin-bottom: 1rem; -} - -.error-card h3 { - margin: 0 0 1rem 0; - color: #2c3e50; - font-weight: 600; -} - -.error-card p { - margin: 0 0 2rem 0; - color: #6c757d; - line-height: 1.5; -} - -/* ===== REPOSITORIOS ===== */ .repositories-container { - padding: 1rem; + padding: 0; } .repositories-selector-container { display: flex; flex-direction: column; - gap: 2rem; + gap: 0.75rem; } .repository-selector { display: flex; - justify-content: center; - padding: 1rem 0; -} - -.repository-content { - padding: 1rem; + padding: 0.25rem 0 0; } .repository-select-field { - min-width: 300px; - max-width: 500px; + min-width: 260px; + max-width: 420px; width: 100%; } +.repository-content { + padding: 0; +} + .selected-repository-content { - animation: fadeInUp 0.6s ease-out; + animation: fadeInUp 0.3s ease-out; } -.no-repository-selected { - text-align: center; - padding: 3rem 2rem; - color: #6c757d; -} - -.no-repository-selected .no-data-icon { - font-size: 4rem; - width: 4rem; - height: 4rem; - margin-bottom: 1rem; - opacity: 0.5; -} - -.no-repository-selected h3 { - margin: 0 0 1rem 0; - color: #2c3e50; - font-weight: 600; -} - -.no-repository-selected p { - margin: 0; - font-size: 1rem; - line-height: 1.5; -} - -/* ===== FOOTER CON ACCIONES ===== */ -.action-container { +.section-header { display: flex; justify-content: space-between; align-items: center; - padding: 1.5rem 2rem; - background: white; - border-top: 1px solid #e9ecef; - border-radius: 0 0 12px 12px; + margin-bottom: 0.75rem; + padding-bottom: 0.6rem; + border-bottom: 1px solid #e9ecef; } -.action-info { - flex: 1; -} - -.last-update { +.section-header h2 { margin: 0; - font-size: 0.85rem; - color: #6c757d; -} - -.action-buttons { + font-size: 1.1rem; + font-weight: 600; + color: #2c3e50; display: flex; - gap: 1rem; -} - -.secondary-button { - color: #6c757d !important; - border: 1px solid #dee2e6 !important; - transition: all 0.3s ease; -} - -.secondary-button:hover { - background: #f8f9fa !important; - border-color: #667eea !important; - color: #667eea !important; -} - -/* ===== RESPONSIVE ===== */ -@media (max-width: 768px) { - .welcome-header { - padding: 1.5rem 1rem 1rem 1rem; - flex-direction: column; - gap: 1rem; - text-align: center; - } - - .welcome-content { - flex-direction: column; - gap: 1rem; - } - - .welcome-title { - font-size: 1.5rem; - } - - .welcome-subtitle { - font-size: 1rem; - } - - .main-content { - padding: 1rem; - } - - .system-overview { - grid-template-columns: 1fr; - gap: 1rem; - } - - .overview-card { - padding: 1rem; - } - - .action-container { - flex-direction: column; - gap: 1rem; - text-align: center; - } - - .action-buttons { - width: 100%; - justify-content: center; - } -} - -@media (max-width: 480px) { - .welcome-header { - padding: 1rem; - } - - .welcome-icon { - width: 50px; - height: 50px; - } - - .welcome-icon mat-icon { - font-size: 28px; - width: 28px; - height: 28px; - } - - .welcome-title { - font-size: 1.25rem; - } - - .overview-card { - flex-direction: column; - text-align: center; - } - - .tab-content { - padding: 1rem; - } - - .repository-select-field { - min-width: 250px; - max-width: 100%; - } -} - -/* ===== ANIMACIONES ===== */ -@keyframes fadeInUp { - from { - opacity: 0; - transform: translateY(20px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -.system-overview, -.main-tabs { - animation: fadeInUp 0.6s ease-out; -} - -.overview-card { - animation: fadeInUp 0.6s ease-out; -} - -.overview-card:nth-child(1) { animation-delay: 0.1s; } -.overview-card:nth-child(2) { animation-delay: 0.2s; } -.overview-card:nth-child(3) { animation-delay: 0.3s; } - -/* ===== ESTILOS GLOBALES DEL DIALOG ===== */ -::ng-deep .mat-dialog-container { - border-radius: 16px !important; - overflow: hidden !important; - padding: 0 !important; -} - -::ng-deep .mat-dialog-content { - margin: 0 !important; - padding: 0 !important; -} - -/* ===== LOADING INDIVIDUAL POR TAB ===== */ -.loading-container { - display: flex; - justify-content: center; align-items: center; - min-height: 300px; - padding: 2rem; + gap: 0.4rem; } -.loading-container .loading-content { - text-align: center; - background: rgba(255, 255, 255, 0.95); - border-radius: 16px; - padding: 2rem; - box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); - backdrop-filter: blur(10px); +.section-header h2::before { + content: ''; + width: 3px; + height: 18px; + background: linear-gradient(135deg, #667eea, #764ba2); + border-radius: 2px; + flex-shrink: 0; } -.loading-container .loading-spinner { - width: 60px !important; - height: 60px !important; - margin-bottom: 1rem; +.logs-button { + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + color: white; + border: none; + padding: 0.4rem 1rem; + border-radius: 20px; + cursor: pointer; + display: flex; + align-items: center; + gap: 0.35rem; + font-weight: 600; + font-size: 0.82rem; + transition: all 0.2s ease; + box-shadow: 0 2px 8px rgba(102, 126, 234, 0.25); } -.loading-container .loading-text { - margin: 0; - color: #666; - font-weight: 500; +.logs-button:hover { + transform: translateY(-1px); + box-shadow: 0 4px 14px rgba(102, 126, 234, 0.35); +} + +.logs-button mat-icon { + font-size: 1rem; + width: 1rem; + height: 1rem; } -/* ===== SECCIÓN DE LOGS ===== */ .logs-section { - margin-top: 2rem; - padding: 1.5rem; + margin-top: 0.5rem; + padding: 0.75rem 1rem; background: white; - border-radius: 12px; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + border-radius: 8px; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.07); border: 1px solid #e9ecef; } .logs-header { - margin-bottom: 1rem; + margin-bottom: 0.5rem; } .logs-header h3 { - margin: 0 0 0.5rem 0; - font-size: 1.25rem; + margin: 0; + font-size: 1rem; font-weight: 600; color: #2c3e50; display: flex; align-items: center; - gap: 0.5rem; + gap: 0.4rem; } .logs-header h3::before { content: ''; - width: 4px; - height: 20px; + width: 3px; + height: 16px; background: linear-gradient(135deg, #667eea, #764ba2); border-radius: 2px; + flex-shrink: 0; } .logs-header p { - margin: 0; - font-size: 0.9rem; - color: #6c757d; + display: none; } .logs-container { - display: flex; - justify-content: center; - align-items: center; background: #f8f9fa; - border-radius: 8px; - padding: 1rem; + border-radius: 6px; + padding: 0.4rem; border: 1px solid #e9ecef; } .ogboot-logs-iframe { border: none; - border-radius: 6px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); - background: white; + border-radius: 4px; + display: block; } -.dhcp-logs-iframe { - border: none; - border-radius: 6px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); - background: white; +.no-repositories { + text-align: center; + padding: 2rem 1rem; + color: #6c757d; } -/* Responsive para logs */ -@media (max-width: 768px) { - .logs-section { - margin-top: 1.5rem; - padding: 1rem; - } - - .logs-container { - padding: 0.5rem; - } - - .ogboot-logs-iframe { - width: 100% !important; - height: 150px !important; - } +.no-repositories .no-data-icon { + font-size: 2.5rem; + width: 2.5rem; + height: 2.5rem; + margin-bottom: 0.5rem; + opacity: 0.4; } -/* ===== TARJETAS ACTIVAS ===== */ -.overview-card.clickable.active { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; - transform: translateY(-2px); - box-shadow: 0 8px 25px rgba(102, 126, 234, 0.3); -} - -.overview-card.clickable.active .overview-icon { - background: rgba(255, 255, 255, 0.2); - color: white; -} - -.overview-card.clickable.active .status-badge { - background: rgba(255, 255, 255, 0.2); - color: white; -} - -.overview-card.clickable.active .click-hint { - color: rgba(255, 255, 255, 0.8); -} - -.overview-card.clickable.active h3 { - color: white; -} - -.overview-card.clickable.active p { - color: rgba(255, 255, 255, 0.9); -} - -/* ===== CONTENIDO DINÁMICO ===== */ -.dynamic-content { - background: white; - border-radius: 16px; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - overflow: hidden; - animation: fadeInUp 0.6s ease-out; -} - -.section-content { - padding: 2rem; -} - -/* ===== HEADER DE SECCIÓN Y BOTÓN DE LOGS ===== */ -.section-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 2rem; - padding-bottom: 1rem; - border-bottom: 2px solid #e9ecef; -} - -.section-header h2 { - margin: 0; - font-size: 1.5rem; +.no-repositories h3 { + margin: 0 0 0.4rem; + font-size: 1rem; font-weight: 600; color: #2c3e50; - display: flex; - align-items: center; - gap: 0.5rem; } -.section-header h2::before { - content: ''; - width: 4px; - height: 24px; - background: linear-gradient(135deg, #667eea, #764ba2); - border-radius: 2px; -} - -.logs-button { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; - border: none; - padding: 0.75rem 1.5rem; - border-radius: 25px; - cursor: pointer; - display: flex; - align-items: center; - gap: 0.5rem; - font-weight: 600; - font-size: 0.9rem; - transition: all 0.3s ease; - box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3); -} - -.logs-button:hover { - transform: translateY(-2px); - box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4); - background: linear-gradient(135deg, #5a6fd8 0%, #6a4190 100%); -} - -.logs-button:active { - transform: translateY(0); - box-shadow: 0 2px 10px rgba(102, 126, 234, 0.3); -} - -.logs-button mat-icon { - font-size: 1.1rem; - width: 1.1rem; - height: 1.1rem; -} - -/* Responsive para el header de sección */ -@media (max-width: 768px) { - .section-header { - flex-direction: column; - gap: 1rem; - align-items: flex-start; - } - - .section-header h2 { - font-size: 1.25rem; - } - - .logs-button { - padding: 0.5rem 1.25rem; - font-size: 0.8rem; - } - - .logs-button mat-icon { - font-size: 1rem; - width: 1rem; - height: 1rem; - } -} - -/* ===== HEADER DE SECCIÓN Y BOTÓN DE LOGS ===== */ -.section-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 2rem; - padding-bottom: 1rem; - border-bottom: 2px solid #e9ecef; -} - -.section-header h2 { +.no-repositories p { margin: 0; - font-size: 1.5rem; + font-size: 0.85rem; +} + +.no-repository-selected { + text-align: center; + padding: 1.5rem 1rem; + color: #6c757d; +} + +.no-repository-selected .no-data-icon { + font-size: 2.5rem; + width: 2.5rem; + height: 2.5rem; + margin-bottom: 0.5rem; + opacity: 0.4; +} + +.no-repository-selected h3 { + margin: 0 0 0.4rem; + font-size: 1rem; font-weight: 600; color: #2c3e50; - display: flex; - align-items: center; - gap: 0.5rem; } -.section-header h2::before { - content: ''; - width: 4px; - height: 24px; - background: linear-gradient(135deg, #667eea, #764ba2); - border-radius: 2px; +.no-repository-selected p { + margin: 0; + font-size: 0.85rem; } -.logs-button { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; - border: none; - padding: 0.75rem 1.5rem; - border-radius: 25px; - cursor: pointer; +.error-container { display: flex; + justify-content: center; align-items: center; - gap: 0.5rem; + min-height: 160px; + padding: 1rem; +} + +.error-card { + background: white; + border-radius: 12px; + padding: 1.5rem; + text-align: center; + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); + border: 1px solid #e9ecef; + max-width: 360px; +} + +.error-icon { + font-size: 42px; + width: 42px; + height: 42px; + color: #dc3545; + margin-bottom: 0.5rem; +} + +.error-card h3 { + margin: 0 0 0.4rem; + color: #2c3e50; font-weight: 600; - font-size: 0.9rem; - transition: all 0.3s ease; - box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3); + font-size: 1rem; } -.logs-button:hover { - transform: translateY(-2px); - box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4); - background: linear-gradient(135deg, #5a6fd8 0%, #6a4190 100%); +.error-card p { + margin: 0 0 1rem; + color: #6c757d; + font-size: 0.85rem; + line-height: 1.4; } -.logs-button:active { - transform: translateY(0); - box-shadow: 0 2px 10px rgba(102, 126, 234, 0.3); +@keyframes fadeInUp { + from { opacity: 0; transform: translateY(8px); } + to { opacity: 1; transform: translateY(0); } } - -.logs-button mat-icon { - font-size: 1.1rem; - width: 1.1rem; - height: 1.1rem; -} - -/* Responsive para el header de sección */ -@media (max-width: 768px) { - .section-header { - flex-direction: column; - gap: 1rem; - align-items: flex-start; - } - - .section-header h2 { - font-size: 1.25rem; - } - - .logs-button { - padding: 0.5rem 1.25rem; - font-size: 0.8rem; - } - - .logs-button mat-icon { - font-size: 1rem; - width: 1rem; - height: 1rem; - } -} \ No newline at end of file diff --git a/ogWebconsole/src/app/components/global-status/ogcore-status/ogcore-status.component.css b/ogWebconsole/src/app/components/global-status/ogcore-status/ogcore-status.component.css index 46d0462..b6e8111 100644 --- a/ogWebconsole/src/app/components/global-status/ogcore-status/ogcore-status.component.css +++ b/ogWebconsole/src/app/components/global-status/ogcore-status/ogcore-status.component.css @@ -1,886 +1,56 @@ -/* ===== HEADER DE BIENVENIDA ===== */ -.welcome-header { - background: #3f51b5; - color: white; - padding: 2rem 2rem 1.5rem 2rem; - display: flex; - justify-content: space-between; - align-items: flex-start; - position: relative; - overflow: hidden; -} - -.welcome-header::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: url('data:image/svg+xml,'); - opacity: 0.2; -} - -.welcome-content { - display: flex; - align-items: center; - gap: 1.5rem; - position: relative; - z-index: 1; -} - -.welcome-icon { - background: rgba(255, 255, 255, 0.2); - border-radius: 50%; - width: 60px; - height: 60px; - display: flex; - align-items: center; - justify-content: center; - backdrop-filter: blur(10px); - border: 1px solid rgba(255, 255, 255, 0.3); -} - -.welcome-icon mat-icon { - font-size: 32px; - width: 32px; - height: 32px; - color: white; -} - -.welcome-text { - flex: 1; -} - -.welcome-title { - margin: 0 0 0.5rem 0; - font-size: 2rem; - font-weight: 700; - text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); -} - -.welcome-subtitle { - margin: 0 0 0.25rem 0; - font-size: 1.1rem; - font-weight: 500; - opacity: 0.95; -} - -.welcome-description { - margin: 0; - font-size: 0.9rem; - opacity: 0.8; -} - -.welcome-actions { - display: flex; - gap: 0.5rem; - position: relative; - z-index: 1; -} - -.help-button, -.refresh-button { - background: rgba(255, 255, 255, 0.2) !important; - color: white !important; - backdrop-filter: blur(10px); - border: 1px solid rgba(255, 255, 255, 0.3); - transition: all 0.3s ease; -} - -.help-button:hover, -.refresh-button:hover { - background: rgba(255, 255, 255, 0.3) !important; - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); -} - -/* ===== CONTENIDO PRINCIPAL ===== */ -mat-dialog-content { - height: calc(100% - 200px); - overflow: auto; - padding: 0 !important; - background: #f8f9fa; -} - -.main-content { - padding: 2rem; -} - -/* ===== SPINNER DE CARGA ===== */ -.spinner-container { - display: flex; - justify-content: center; - align-items: center; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - z-index: 1000; - background: rgba(255, 255, 255, 0.95); - border-radius: 16px; - padding: 2rem; - box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); - backdrop-filter: blur(10px); -} - -.loading-content { - text-align: center; -} - -.loading-spinner { - width: 60px !important; - height: 60px !important; - margin-bottom: 1rem; -} - -.loading-text { - margin: 0; - color: #666; - font-weight: 500; -} - -/* ===== RESUMEN DEL SISTEMA ===== */ -.system-overview { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); - gap: 1.5rem; - margin-bottom: 2rem; -} - -.overview-card { - background: white; - border-radius: 16px; - padding: 1.5rem; - display: flex; - align-items: center; - gap: 1rem; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - transition: all 0.3s ease; - border: 1px solid rgba(0, 0, 0, 0.05); - position: relative; - overflow: hidden; -} - -.overview-card::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 4px; - background: linear-gradient(90deg, #667eea, #764ba2); - opacity: 0; - transition: opacity 0.3s ease; -} - -.overview-card:hover { - transform: translateY(-4px); - box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15); - border-color: #667eea; -} - -.overview-card:hover::before { - opacity: 1; -} - -.overview-card.clickable { - cursor: pointer; - transition: all 0.3s ease; -} - -.overview-card.clickable:hover { - transform: translateY(-4px); - box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15); -} - -.overview-card.clickable:active { - transform: translateY(-2px); - box-shadow: 0 8px 25px rgba(0, 0, 0, 0.12); -} - -.overview-icon { - background: linear-gradient(135deg, #667eea, #764ba2); - border-radius: 50%; - width: 50px; - height: 50px; - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; -} - -.overview-icon mat-icon { - color: white; - font-size: 24px; - width: 24px; - height: 24px; -} - -.overview-content h3 { - margin: 0 0 0.5rem 0; - font-size: 1.1rem; - font-weight: 600; - color: #2c3e50; -} - -.overview-content p { - margin: 0; - font-size: 0.9rem; - color: #6c757d; -} - -.click-hint { - margin-top: 0.5rem !important; - font-size: 0.75rem !important; - color: #667eea !important; - font-weight: 500; - opacity: 0.8; - transition: opacity 0.3s ease; - display: flex; - align-items: center; - gap: 0.25rem; -} - -.hint-icon { - font-size: 0.875rem !important; - width: 0.875rem !important; - height: 0.875rem !important; -} - -.overview-card.clickable:hover .click-hint { - opacity: 1; -} - -/* ===== BADGES DE ESTADO ===== */ -.status-badge { - display: inline-block; - padding: 0.25rem 0.75rem; - border-radius: 20px; - font-size: 0.8rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.5px; -} - -.status-badge.online { - background: linear-gradient(135deg, #28a745, #20c997); - color: white; -} - -.status-badge.offline { - background: linear-gradient(135deg, #dc3545, #c82333); - color: white; -} - -.status-badge.info { - background: linear-gradient(135deg, #17a2b8, #138496); - color: white; -} - -/* ===== TABS PRINCIPALES ===== */ -.main-tabs { - background: white; - border-radius: 16px; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - overflow: hidden; -} - -::ng-deep .main-tabs .mat-tab-header { - background: #f8f9fa; - border-bottom: 1px solid #e9ecef; -} - -::ng-deep .main-tabs .mat-tab-label { - font-weight: 600; - color: #6c757d; - transition: all 0.3s ease; -} - -::ng-deep .main-tabs .mat-tab-label-active { - color: #667eea; -} - -::ng-deep .main-tabs .mat-ink-bar { - background: linear-gradient(90deg, #667eea, #764ba2); - height: 3px; +.section-content { + padding: 0.75rem 1rem; } .tab-content { - padding: 2rem; + padding: 0; } -/* ===== CONTENEDOR DE ERRORES ===== */ -.error-container { - display: flex; - justify-content: center; - align-items: center; - min-height: 300px; - padding: 2rem; -} - -.error-card { - background: white; - border-radius: 16px; - padding: 3rem 2rem; - text-align: center; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - border: 1px solid #e9ecef; - max-width: 400px; -} - -.error-icon { - font-size: 64px; - width: 64px; - height: 64px; - color: #dc3545; - margin-bottom: 1rem; -} - -.error-card h3 { - margin: 0 0 1rem 0; - color: #2c3e50; - font-weight: 600; -} - -.error-card p { - margin: 0 0 2rem 0; - color: #6c757d; - line-height: 1.5; -} - -/* ===== REPOSITORIOS ===== */ -.repositories-container { - padding: 1rem; -} - -.repositories-selector-container { - display: flex; - flex-direction: column; - gap: 2rem; -} - -.repository-selector { - display: flex; - justify-content: center; - padding: 1rem 0; -} - -.repository-content { - padding: 1rem; -} - -.repository-select-field { - min-width: 300px; - max-width: 500px; - width: 100%; -} - -.selected-repository-content { - animation: fadeInUp 0.6s ease-out; -} - -.no-repository-selected { - text-align: center; - padding: 3rem 2rem; - color: #6c757d; -} - -.no-repository-selected .no-data-icon { - font-size: 4rem; - width: 4rem; - height: 4rem; - margin-bottom: 1rem; - opacity: 0.5; -} - -.no-repository-selected h3 { - margin: 0 0 1rem 0; - color: #2c3e50; - font-weight: 600; -} - -.no-repository-selected p { - margin: 0; - font-size: 1rem; - line-height: 1.5; -} - -/* ===== FOOTER CON ACCIONES ===== */ -.action-container { - display: flex; - justify-content: space-between; - align-items: center; - padding: 1.5rem 2rem; - background: white; - border-top: 1px solid #e9ecef; - border-radius: 0 0 12px 12px; -} - -.action-info { - flex: 1; -} - -.last-update { - margin: 0; - font-size: 0.85rem; - color: #6c757d; -} - -.action-buttons { - display: flex; - gap: 1rem; -} - -.secondary-button { - color: #6c757d !important; - border: 1px solid #dee2e6 !important; - transition: all 0.3s ease; -} - -.secondary-button:hover { - background: #f8f9fa !important; - border-color: #667eea !important; - color: #667eea !important; -} - -/* ===== RESPONSIVE ===== */ -@media (max-width: 768px) { - .welcome-header { - padding: 1.5rem 1rem 1rem 1rem; - flex-direction: column; - gap: 1rem; - text-align: center; - } - - .welcome-content { - flex-direction: column; - gap: 1rem; - } - - .welcome-title { - font-size: 1.5rem; - } - - .welcome-subtitle { - font-size: 1rem; - } - - .main-content { - padding: 1rem; - } - - .system-overview { - grid-template-columns: 1fr; - gap: 1rem; - } - - .overview-card { - padding: 1rem; - } - - .action-container { - flex-direction: column; - gap: 1rem; - text-align: center; - } - - .action-buttons { - width: 100%; - justify-content: center; - } -} - -@media (max-width: 480px) { - .welcome-header { - padding: 1rem; - } - - .welcome-icon { - width: 50px; - height: 50px; - } - - .welcome-icon mat-icon { - font-size: 28px; - width: 28px; - height: 28px; - } - - .welcome-title { - font-size: 1.25rem; - } - - .overview-card { - flex-direction: column; - text-align: center; - } - - .tab-content { - padding: 1rem; - } - - .repository-select-field { - min-width: 250px; - max-width: 100%; - } -} - -/* ===== ANIMACIONES ===== */ -@keyframes fadeInUp { - from { - opacity: 0; - transform: translateY(20px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -.system-overview, -.main-tabs { - animation: fadeInUp 0.6s ease-out; -} - -.overview-card { - animation: fadeInUp 0.6s ease-out; -} - -.overview-card:nth-child(1) { animation-delay: 0.1s; } -.overview-card:nth-child(2) { animation-delay: 0.2s; } -.overview-card:nth-child(3) { animation-delay: 0.3s; } - -/* ===== ESTILOS GLOBALES DEL DIALOG ===== */ -::ng-deep .mat-dialog-container { - border-radius: 16px !important; - overflow: hidden !important; - padding: 0 !important; -} - -::ng-deep .mat-dialog-content { - margin: 0 !important; - padding: 0 !important; -} - -/* ===== LOADING INDIVIDUAL POR TAB ===== */ -.loading-container { - display: flex; - justify-content: center; - align-items: center; - min-height: 300px; - padding: 2rem; -} - -.loading-container .loading-content { - text-align: center; - background: rgba(255, 255, 255, 0.95); - border-radius: 16px; - padding: 2rem; - box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); - backdrop-filter: blur(10px); -} - -.loading-container .loading-spinner { - width: 60px !important; - height: 60px !important; - margin-bottom: 1rem; -} - -.loading-container .loading-text { - margin: 0; - color: #666; - font-weight: 500; -} - -/* ===== SECCIÓN DE LOGS ===== */ .logs-section { - margin-top: 2rem; - padding: 1.5rem; + margin-top: 0.5rem; + padding: 0.75rem 1rem; background: white; - border-radius: 12px; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + border-radius: 8px; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.07); border: 1px solid #e9ecef; } .logs-header { - margin-bottom: 1rem; + margin-bottom: 0.5rem; } .logs-header h3 { - margin: 0 0 0.5rem 0; - font-size: 1.25rem; + margin: 0; + font-size: 1rem; font-weight: 600; color: #2c3e50; display: flex; align-items: center; - gap: 0.5rem; + gap: 0.4rem; } .logs-header h3::before { content: ''; - width: 4px; - height: 20px; + width: 3px; + height: 16px; background: linear-gradient(135deg, #667eea, #764ba2); border-radius: 2px; + flex-shrink: 0; } .logs-header p { - margin: 0; - font-size: 0.9rem; - color: #6c757d; + display: none; } .logs-container { - display: flex; - justify-content: center; - align-items: center; background: #f8f9fa; - border-radius: 8px; - padding: 1rem; + border-radius: 6px; + padding: 0.4rem; border: 1px solid #e9ecef; } -.ogboot-logs-iframe { +.ogcore-logs-iframe { border: none; - border-radius: 6px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); - background: white; + border-radius: 4px; + display: block; } - -.dhcp-logs-iframe { - border: none; - border-radius: 6px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); - background: white; -} - -/* Responsive para logs */ -@media (max-width: 768px) { - .logs-section { - margin-top: 1.5rem; - padding: 1rem; - } - - .logs-container { - padding: 0.5rem; - } - - .ogboot-logs-iframe { - width: 100% !important; - height: 150px !important; - } -} - -/* ===== TARJETAS ACTIVAS ===== */ -.overview-card.clickable.active { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; - transform: translateY(-2px); - box-shadow: 0 8px 25px rgba(102, 126, 234, 0.3); -} - -.overview-card.clickable.active .overview-icon { - background: rgba(255, 255, 255, 0.2); - color: white; -} - -.overview-card.clickable.active .status-badge { - background: rgba(255, 255, 255, 0.2); - color: white; -} - -.overview-card.clickable.active .click-hint { - color: rgba(255, 255, 255, 0.8); -} - -.overview-card.clickable.active h3 { - color: white; -} - -.overview-card.clickable.active p { - color: rgba(255, 255, 255, 0.9); -} - -/* ===== CONTENIDO DINÁMICO ===== */ -.dynamic-content { - background: white; - border-radius: 16px; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - overflow: hidden; - animation: fadeInUp 0.6s ease-out; -} - -.section-content { - padding: 2rem; -} - -/* ===== HEADER DE SECCIÓN Y BOTÓN DE LOGS ===== */ -.section-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 2rem; - padding-bottom: 1rem; - border-bottom: 2px solid #e9ecef; -} - -.section-header h2 { - margin: 0; - font-size: 1.5rem; - font-weight: 600; - color: #2c3e50; - display: flex; - align-items: center; - gap: 0.5rem; -} - -.section-header h2::before { - content: ''; - width: 4px; - height: 24px; - background: linear-gradient(135deg, #667eea, #764ba2); - border-radius: 2px; -} - -.logs-button { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; - border: none; - padding: 0.75rem 1.5rem; - border-radius: 25px; - cursor: pointer; - display: flex; - align-items: center; - gap: 0.5rem; - font-weight: 600; - font-size: 0.9rem; - transition: all 0.3s ease; - box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3); -} - -.logs-button:hover { - transform: translateY(-2px); - box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4); - background: linear-gradient(135deg, #5a6fd8 0%, #6a4190 100%); -} - -.logs-button:active { - transform: translateY(0); - box-shadow: 0 2px 10px rgba(102, 126, 234, 0.3); -} - -.logs-button mat-icon { - font-size: 1.1rem; - width: 1.1rem; - height: 1.1rem; -} - -/* Responsive para el header de sección */ -@media (max-width: 768px) { - .section-header { - flex-direction: column; - gap: 1rem; - align-items: flex-start; - } - - .section-header h2 { - font-size: 1.25rem; - } - - .logs-button { - padding: 0.5rem 1.25rem; - font-size: 0.8rem; - } - - .logs-button mat-icon { - font-size: 1rem; - width: 1rem; - height: 1rem; - } -} - -/* ===== HEADER DE SECCIÓN Y BOTÓN DE LOGS ===== */ -.section-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 2rem; - padding-bottom: 1rem; - border-bottom: 2px solid #e9ecef; -} - -.section-header h2 { - margin: 0; - font-size: 1.5rem; - font-weight: 600; - color: #2c3e50; - display: flex; - align-items: center; - gap: 0.5rem; -} - -.section-header h2::before { - content: ''; - width: 4px; - height: 24px; - background: linear-gradient(135deg, #667eea, #764ba2); - border-radius: 2px; -} - -.logs-button { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; - border: none; - padding: 0.75rem 1.5rem; - border-radius: 25px; - cursor: pointer; - display: flex; - align-items: center; - gap: 0.5rem; - font-weight: 600; - font-size: 0.9rem; - transition: all 0.3s ease; - box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3); -} - -.logs-button:hover { - transform: translateY(-2px); - box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4); - background: linear-gradient(135deg, #5a6fd8 0%, #6a4190 100%); -} - -.logs-button:active { - transform: translateY(0); - box-shadow: 0 2px 10px rgba(102, 126, 234, 0.3); -} - -.logs-button mat-icon { - font-size: 1.1rem; - width: 1.1rem; - height: 1.1rem; -} - -/* Responsive para el header de sección */ -@media (max-width: 768px) { - .section-header { - flex-direction: column; - gap: 1rem; - align-items: flex-start; - } - - .section-header h2 { - font-size: 1.25rem; - } - - .logs-button { - padding: 0.5rem 1.25rem; - font-size: 0.8rem; - } - - .logs-button mat-icon { - font-size: 1rem; - width: 1rem; - height: 1rem; - } -} \ No newline at end of file diff --git a/ogWebconsole/src/app/components/global-status/ogcore-status/ogcore-status.component.html b/ogWebconsole/src/app/components/global-status/ogcore-status/ogcore-status.component.html index 8779afe..d051185 100644 --- a/ogWebconsole/src/app/components/global-status/ogcore-status/ogcore-status.component.html +++ b/ogWebconsole/src/app/components/global-status/ogcore-status/ogcore-status.component.html @@ -1,9 +1,5 @@
-
-

{{ 'ogCoreServer' | translate }}

-
-

{{ 'ogcoreLogs' | translate }}

diff --git a/ogWebconsole/src/app/components/global-status/ogdhcp-status/ogdhcp-status.component.css b/ogWebconsole/src/app/components/global-status/ogdhcp-status/ogdhcp-status.component.css index 46d0462..8e1a422 100644 --- a/ogWebconsole/src/app/components/global-status/ogdhcp-status/ogdhcp-status.component.css +++ b/ogWebconsole/src/app/components/global-status/ogdhcp-status/ogdhcp-status.component.css @@ -1,886 +1,233 @@ -/* ===== HEADER DE BIENVENIDA ===== */ -.welcome-header { - background: #3f51b5; - color: white; - padding: 2rem 2rem 1.5rem 2rem; - display: flex; - justify-content: space-between; - align-items: flex-start; - position: relative; - overflow: hidden; +.section-content { + padding: 0.75rem 1rem; } -.welcome-header::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: url('data:image/svg+xml,'); - opacity: 0.2; -} - -.welcome-content { - display: flex; - align-items: center; - gap: 1.5rem; - position: relative; - z-index: 1; -} - -.welcome-icon { - background: rgba(255, 255, 255, 0.2); - border-radius: 50%; - width: 60px; - height: 60px; - display: flex; - align-items: center; - justify-content: center; - backdrop-filter: blur(10px); - border: 1px solid rgba(255, 255, 255, 0.3); -} - -.welcome-icon mat-icon { - font-size: 32px; - width: 32px; - height: 32px; - color: white; -} - -.welcome-text { - flex: 1; -} - -.welcome-title { - margin: 0 0 0.5rem 0; - font-size: 2rem; - font-weight: 700; - text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); -} - -.welcome-subtitle { - margin: 0 0 0.25rem 0; - font-size: 1.1rem; - font-weight: 500; - opacity: 0.95; -} - -.welcome-description { - margin: 0; - font-size: 0.9rem; - opacity: 0.8; -} - -.welcome-actions { - display: flex; - gap: 0.5rem; - position: relative; - z-index: 1; -} - -.help-button, -.refresh-button { - background: rgba(255, 255, 255, 0.2) !important; - color: white !important; - backdrop-filter: blur(10px); - border: 1px solid rgba(255, 255, 255, 0.3); - transition: all 0.3s ease; -} - -.help-button:hover, -.refresh-button:hover { - background: rgba(255, 255, 255, 0.3) !important; - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); -} - -/* ===== CONTENIDO PRINCIPAL ===== */ -mat-dialog-content { - height: calc(100% - 200px); - overflow: auto; - padding: 0 !important; - background: #f8f9fa; -} - -.main-content { - padding: 2rem; -} - -/* ===== SPINNER DE CARGA ===== */ -.spinner-container { - display: flex; - justify-content: center; - align-items: center; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - z-index: 1000; - background: rgba(255, 255, 255, 0.95); - border-radius: 16px; - padding: 2rem; - box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); - backdrop-filter: blur(10px); -} - -.loading-content { - text-align: center; -} - -.loading-spinner { - width: 60px !important; - height: 60px !important; - margin-bottom: 1rem; -} - -.loading-text { - margin: 0; - color: #666; - font-weight: 500; -} - -/* ===== RESUMEN DEL SISTEMA ===== */ -.system-overview { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); - gap: 1.5rem; - margin-bottom: 2rem; -} - -.overview-card { - background: white; - border-radius: 16px; - padding: 1.5rem; - display: flex; - align-items: center; - gap: 1rem; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - transition: all 0.3s ease; - border: 1px solid rgba(0, 0, 0, 0.05); - position: relative; - overflow: hidden; -} - -.overview-card::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 4px; - background: linear-gradient(90deg, #667eea, #764ba2); - opacity: 0; - transition: opacity 0.3s ease; -} - -.overview-card:hover { - transform: translateY(-4px); - box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15); - border-color: #667eea; -} - -.overview-card:hover::before { - opacity: 1; -} - -.overview-card.clickable { - cursor: pointer; - transition: all 0.3s ease; -} - -.overview-card.clickable:hover { - transform: translateY(-4px); - box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15); -} - -.overview-card.clickable:active { - transform: translateY(-2px); - box-shadow: 0 8px 25px rgba(0, 0, 0, 0.12); -} - -.overview-icon { - background: linear-gradient(135deg, #667eea, #764ba2); - border-radius: 50%; - width: 50px; - height: 50px; - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; -} - -.overview-icon mat-icon { - color: white; - font-size: 24px; - width: 24px; - height: 24px; -} - -.overview-content h3 { - margin: 0 0 0.5rem 0; - font-size: 1.1rem; - font-weight: 600; - color: #2c3e50; -} - -.overview-content p { - margin: 0; - font-size: 0.9rem; - color: #6c757d; -} - -.click-hint { - margin-top: 0.5rem !important; - font-size: 0.75rem !important; - color: #667eea !important; - font-weight: 500; - opacity: 0.8; - transition: opacity 0.3s ease; - display: flex; - align-items: center; - gap: 0.25rem; -} - -.hint-icon { - font-size: 0.875rem !important; - width: 0.875rem !important; - height: 0.875rem !important; -} - -.overview-card.clickable:hover .click-hint { - opacity: 1; -} - -/* ===== BADGES DE ESTADO ===== */ -.status-badge { - display: inline-block; - padding: 0.25rem 0.75rem; - border-radius: 20px; - font-size: 0.8rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.5px; -} - -.status-badge.online { - background: linear-gradient(135deg, #28a745, #20c997); - color: white; -} - -.status-badge.offline { - background: linear-gradient(135deg, #dc3545, #c82333); - color: white; -} - -.status-badge.info { - background: linear-gradient(135deg, #17a2b8, #138496); - color: white; -} - -/* ===== TABS PRINCIPALES ===== */ -.main-tabs { - background: white; - border-radius: 16px; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - overflow: hidden; -} - -::ng-deep .main-tabs .mat-tab-header { - background: #f8f9fa; - border-bottom: 1px solid #e9ecef; -} - -::ng-deep .main-tabs .mat-tab-label { - font-weight: 600; - color: #6c757d; - transition: all 0.3s ease; -} - -::ng-deep .main-tabs .mat-tab-label-active { - color: #667eea; -} - -::ng-deep .main-tabs .mat-ink-bar { - background: linear-gradient(90deg, #667eea, #764ba2); - height: 3px; -} - -.tab-content { - padding: 2rem; -} - -/* ===== CONTENEDOR DE ERRORES ===== */ -.error-container { - display: flex; - justify-content: center; - align-items: center; - min-height: 300px; - padding: 2rem; -} - -.error-card { - background: white; - border-radius: 16px; - padding: 3rem 2rem; - text-align: center; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - border: 1px solid #e9ecef; - max-width: 400px; -} - -.error-icon { - font-size: 64px; - width: 64px; - height: 64px; - color: #dc3545; - margin-bottom: 1rem; -} - -.error-card h3 { - margin: 0 0 1rem 0; - color: #2c3e50; - font-weight: 600; -} - -.error-card p { - margin: 0 0 2rem 0; - color: #6c757d; - line-height: 1.5; -} - -/* ===== REPOSITORIOS ===== */ .repositories-container { - padding: 1rem; + padding: 0; } .repositories-selector-container { display: flex; flex-direction: column; - gap: 2rem; + gap: 0.75rem; } .repository-selector { display: flex; - justify-content: center; - padding: 1rem 0; -} - -.repository-content { - padding: 1rem; + padding: 0.25rem 0 0; } .repository-select-field { - min-width: 300px; - max-width: 500px; + min-width: 260px; + max-width: 420px; width: 100%; } +.repository-content { + padding: 0; +} + .selected-repository-content { - animation: fadeInUp 0.6s ease-out; + animation: fadeInUp 0.3s ease-out; } -.no-repository-selected { - text-align: center; - padding: 3rem 2rem; - color: #6c757d; -} - -.no-repository-selected .no-data-icon { - font-size: 4rem; - width: 4rem; - height: 4rem; - margin-bottom: 1rem; - opacity: 0.5; -} - -.no-repository-selected h3 { - margin: 0 0 1rem 0; - color: #2c3e50; - font-weight: 600; -} - -.no-repository-selected p { - margin: 0; - font-size: 1rem; - line-height: 1.5; -} - -/* ===== FOOTER CON ACCIONES ===== */ -.action-container { +.section-header { display: flex; justify-content: space-between; align-items: center; - padding: 1.5rem 2rem; - background: white; - border-top: 1px solid #e9ecef; - border-radius: 0 0 12px 12px; + margin-bottom: 0.75rem; + padding-bottom: 0.6rem; + border-bottom: 1px solid #e9ecef; } -.action-info { - flex: 1; -} - -.last-update { +.section-header h2 { margin: 0; - font-size: 0.85rem; - color: #6c757d; -} - -.action-buttons { + font-size: 1.1rem; + font-weight: 600; + color: #2c3e50; display: flex; - gap: 1rem; -} - -.secondary-button { - color: #6c757d !important; - border: 1px solid #dee2e6 !important; - transition: all 0.3s ease; -} - -.secondary-button:hover { - background: #f8f9fa !important; - border-color: #667eea !important; - color: #667eea !important; -} - -/* ===== RESPONSIVE ===== */ -@media (max-width: 768px) { - .welcome-header { - padding: 1.5rem 1rem 1rem 1rem; - flex-direction: column; - gap: 1rem; - text-align: center; - } - - .welcome-content { - flex-direction: column; - gap: 1rem; - } - - .welcome-title { - font-size: 1.5rem; - } - - .welcome-subtitle { - font-size: 1rem; - } - - .main-content { - padding: 1rem; - } - - .system-overview { - grid-template-columns: 1fr; - gap: 1rem; - } - - .overview-card { - padding: 1rem; - } - - .action-container { - flex-direction: column; - gap: 1rem; - text-align: center; - } - - .action-buttons { - width: 100%; - justify-content: center; - } -} - -@media (max-width: 480px) { - .welcome-header { - padding: 1rem; - } - - .welcome-icon { - width: 50px; - height: 50px; - } - - .welcome-icon mat-icon { - font-size: 28px; - width: 28px; - height: 28px; - } - - .welcome-title { - font-size: 1.25rem; - } - - .overview-card { - flex-direction: column; - text-align: center; - } - - .tab-content { - padding: 1rem; - } - - .repository-select-field { - min-width: 250px; - max-width: 100%; - } -} - -/* ===== ANIMACIONES ===== */ -@keyframes fadeInUp { - from { - opacity: 0; - transform: translateY(20px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -.system-overview, -.main-tabs { - animation: fadeInUp 0.6s ease-out; -} - -.overview-card { - animation: fadeInUp 0.6s ease-out; -} - -.overview-card:nth-child(1) { animation-delay: 0.1s; } -.overview-card:nth-child(2) { animation-delay: 0.2s; } -.overview-card:nth-child(3) { animation-delay: 0.3s; } - -/* ===== ESTILOS GLOBALES DEL DIALOG ===== */ -::ng-deep .mat-dialog-container { - border-radius: 16px !important; - overflow: hidden !important; - padding: 0 !important; -} - -::ng-deep .mat-dialog-content { - margin: 0 !important; - padding: 0 !important; -} - -/* ===== LOADING INDIVIDUAL POR TAB ===== */ -.loading-container { - display: flex; - justify-content: center; align-items: center; - min-height: 300px; - padding: 2rem; + gap: 0.4rem; } -.loading-container .loading-content { - text-align: center; - background: rgba(255, 255, 255, 0.95); - border-radius: 16px; - padding: 2rem; - box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); - backdrop-filter: blur(10px); +.section-header h2::before { + content: ''; + width: 3px; + height: 18px; + background: linear-gradient(135deg, #667eea, #764ba2); + border-radius: 2px; + flex-shrink: 0; } -.loading-container .loading-spinner { - width: 60px !important; - height: 60px !important; - margin-bottom: 1rem; +.logs-button { + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + color: white; + border: none; + padding: 0.4rem 1rem; + border-radius: 20px; + cursor: pointer; + display: flex; + align-items: center; + gap: 0.35rem; + font-weight: 600; + font-size: 0.82rem; + transition: all 0.2s ease; + box-shadow: 0 2px 8px rgba(102, 126, 234, 0.25); } -.loading-container .loading-text { - margin: 0; - color: #666; - font-weight: 500; +.logs-button:hover { + transform: translateY(-1px); + box-shadow: 0 4px 14px rgba(102, 126, 234, 0.35); +} + +.logs-button mat-icon { + font-size: 1rem; + width: 1rem; + height: 1rem; } -/* ===== SECCIÓN DE LOGS ===== */ .logs-section { - margin-top: 2rem; - padding: 1.5rem; + margin-top: 0.5rem; + padding: 0.75rem 1rem; background: white; - border-radius: 12px; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + border-radius: 8px; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.07); border: 1px solid #e9ecef; } .logs-header { - margin-bottom: 1rem; + margin-bottom: 0.5rem; } .logs-header h3 { - margin: 0 0 0.5rem 0; - font-size: 1.25rem; + margin: 0; + font-size: 1rem; font-weight: 600; color: #2c3e50; display: flex; align-items: center; - gap: 0.5rem; + gap: 0.4rem; } .logs-header h3::before { content: ''; - width: 4px; - height: 20px; + width: 3px; + height: 16px; background: linear-gradient(135deg, #667eea, #764ba2); border-radius: 2px; + flex-shrink: 0; } .logs-header p { - margin: 0; - font-size: 0.9rem; - color: #6c757d; + display: none; } .logs-container { - display: flex; - justify-content: center; - align-items: center; background: #f8f9fa; - border-radius: 8px; - padding: 1rem; + border-radius: 6px; + padding: 0.4rem; border: 1px solid #e9ecef; } -.ogboot-logs-iframe { +.repository-logs-iframe { border: none; - border-radius: 6px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); - background: white; + border-radius: 4px; + display: block; } -.dhcp-logs-iframe { - border: none; - border-radius: 6px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); - background: white; +.no-repositories { + text-align: center; + padding: 2rem 1rem; + color: #6c757d; } -/* Responsive para logs */ -@media (max-width: 768px) { - .logs-section { - margin-top: 1.5rem; - padding: 1rem; - } - - .logs-container { - padding: 0.5rem; - } - - .ogboot-logs-iframe { - width: 100% !important; - height: 150px !important; - } +.no-repositories .no-data-icon { + font-size: 2.5rem; + width: 2.5rem; + height: 2.5rem; + margin-bottom: 0.5rem; + opacity: 0.4; } -/* ===== TARJETAS ACTIVAS ===== */ -.overview-card.clickable.active { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; - transform: translateY(-2px); - box-shadow: 0 8px 25px rgba(102, 126, 234, 0.3); -} - -.overview-card.clickable.active .overview-icon { - background: rgba(255, 255, 255, 0.2); - color: white; -} - -.overview-card.clickable.active .status-badge { - background: rgba(255, 255, 255, 0.2); - color: white; -} - -.overview-card.clickable.active .click-hint { - color: rgba(255, 255, 255, 0.8); -} - -.overview-card.clickable.active h3 { - color: white; -} - -.overview-card.clickable.active p { - color: rgba(255, 255, 255, 0.9); -} - -/* ===== CONTENIDO DINÁMICO ===== */ -.dynamic-content { - background: white; - border-radius: 16px; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - overflow: hidden; - animation: fadeInUp 0.6s ease-out; -} - -.section-content { - padding: 2rem; -} - -/* ===== HEADER DE SECCIÓN Y BOTÓN DE LOGS ===== */ -.section-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 2rem; - padding-bottom: 1rem; - border-bottom: 2px solid #e9ecef; -} - -.section-header h2 { - margin: 0; - font-size: 1.5rem; +.no-repositories h3 { + margin: 0 0 0.4rem; + font-size: 1rem; font-weight: 600; color: #2c3e50; - display: flex; - align-items: center; - gap: 0.5rem; } -.section-header h2::before { - content: ''; - width: 4px; - height: 24px; - background: linear-gradient(135deg, #667eea, #764ba2); - border-radius: 2px; -} - -.logs-button { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; - border: none; - padding: 0.75rem 1.5rem; - border-radius: 25px; - cursor: pointer; - display: flex; - align-items: center; - gap: 0.5rem; - font-weight: 600; - font-size: 0.9rem; - transition: all 0.3s ease; - box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3); -} - -.logs-button:hover { - transform: translateY(-2px); - box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4); - background: linear-gradient(135deg, #5a6fd8 0%, #6a4190 100%); -} - -.logs-button:active { - transform: translateY(0); - box-shadow: 0 2px 10px rgba(102, 126, 234, 0.3); -} - -.logs-button mat-icon { - font-size: 1.1rem; - width: 1.1rem; - height: 1.1rem; -} - -/* Responsive para el header de sección */ -@media (max-width: 768px) { - .section-header { - flex-direction: column; - gap: 1rem; - align-items: flex-start; - } - - .section-header h2 { - font-size: 1.25rem; - } - - .logs-button { - padding: 0.5rem 1.25rem; - font-size: 0.8rem; - } - - .logs-button mat-icon { - font-size: 1rem; - width: 1rem; - height: 1rem; - } -} - -/* ===== HEADER DE SECCIÓN Y BOTÓN DE LOGS ===== */ -.section-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 2rem; - padding-bottom: 1rem; - border-bottom: 2px solid #e9ecef; -} - -.section-header h2 { +.no-repositories p { margin: 0; - font-size: 1.5rem; + font-size: 0.85rem; +} + +.no-repository-selected { + text-align: center; + padding: 1.5rem 1rem; + color: #6c757d; +} + +.no-repository-selected .no-data-icon { + font-size: 2.5rem; + width: 2.5rem; + height: 2.5rem; + margin-bottom: 0.5rem; + opacity: 0.4; +} + +.no-repository-selected h3 { + margin: 0 0 0.4rem; + font-size: 1rem; font-weight: 600; color: #2c3e50; - display: flex; - align-items: center; - gap: 0.5rem; } -.section-header h2::before { - content: ''; - width: 4px; - height: 24px; - background: linear-gradient(135deg, #667eea, #764ba2); - border-radius: 2px; +.no-repository-selected p { + margin: 0; + font-size: 0.85rem; } -.logs-button { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; - border: none; - padding: 0.75rem 1.5rem; - border-radius: 25px; - cursor: pointer; +.error-container { display: flex; + justify-content: center; align-items: center; - gap: 0.5rem; + min-height: 160px; + padding: 1rem; +} + +.error-card { + background: white; + border-radius: 12px; + padding: 1.5rem; + text-align: center; + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); + border: 1px solid #e9ecef; + max-width: 360px; +} + +.error-icon { + font-size: 42px; + width: 42px; + height: 42px; + color: #dc3545; + margin-bottom: 0.5rem; +} + +.error-card h3 { + margin: 0 0 0.4rem; + color: #2c3e50; font-weight: 600; - font-size: 0.9rem; - transition: all 0.3s ease; - box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3); + font-size: 1rem; } -.logs-button:hover { - transform: translateY(-2px); - box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4); - background: linear-gradient(135deg, #5a6fd8 0%, #6a4190 100%); +.error-card p { + margin: 0 0 1rem; + color: #6c757d; + font-size: 0.85rem; + line-height: 1.4; } -.logs-button:active { - transform: translateY(0); - box-shadow: 0 2px 10px rgba(102, 126, 234, 0.3); +@keyframes fadeInUp { + from { opacity: 0; transform: translateY(8px); } + to { opacity: 1; transform: translateY(0); } } - -.logs-button mat-icon { - font-size: 1.1rem; - width: 1.1rem; - height: 1.1rem; -} - -/* Responsive para el header de sección */ -@media (max-width: 768px) { - .section-header { - flex-direction: column; - gap: 1rem; - align-items: flex-start; - } - - .section-header h2 { - font-size: 1.25rem; - } - - .logs-button { - padding: 0.5rem 1.25rem; - font-size: 0.8rem; - } - - .logs-button mat-icon { - font-size: 1rem; - width: 1rem; - height: 1rem; - } -} \ No newline at end of file diff --git a/ogWebconsole/src/app/components/global-status/ogrepository-status/ogrepository-status.component.css b/ogWebconsole/src/app/components/global-status/ogrepository-status/ogrepository-status.component.css index 46d0462..8e1a422 100644 --- a/ogWebconsole/src/app/components/global-status/ogrepository-status/ogrepository-status.component.css +++ b/ogWebconsole/src/app/components/global-status/ogrepository-status/ogrepository-status.component.css @@ -1,886 +1,233 @@ -/* ===== HEADER DE BIENVENIDA ===== */ -.welcome-header { - background: #3f51b5; - color: white; - padding: 2rem 2rem 1.5rem 2rem; - display: flex; - justify-content: space-between; - align-items: flex-start; - position: relative; - overflow: hidden; +.section-content { + padding: 0.75rem 1rem; } -.welcome-header::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: url('data:image/svg+xml,'); - opacity: 0.2; -} - -.welcome-content { - display: flex; - align-items: center; - gap: 1.5rem; - position: relative; - z-index: 1; -} - -.welcome-icon { - background: rgba(255, 255, 255, 0.2); - border-radius: 50%; - width: 60px; - height: 60px; - display: flex; - align-items: center; - justify-content: center; - backdrop-filter: blur(10px); - border: 1px solid rgba(255, 255, 255, 0.3); -} - -.welcome-icon mat-icon { - font-size: 32px; - width: 32px; - height: 32px; - color: white; -} - -.welcome-text { - flex: 1; -} - -.welcome-title { - margin: 0 0 0.5rem 0; - font-size: 2rem; - font-weight: 700; - text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); -} - -.welcome-subtitle { - margin: 0 0 0.25rem 0; - font-size: 1.1rem; - font-weight: 500; - opacity: 0.95; -} - -.welcome-description { - margin: 0; - font-size: 0.9rem; - opacity: 0.8; -} - -.welcome-actions { - display: flex; - gap: 0.5rem; - position: relative; - z-index: 1; -} - -.help-button, -.refresh-button { - background: rgba(255, 255, 255, 0.2) !important; - color: white !important; - backdrop-filter: blur(10px); - border: 1px solid rgba(255, 255, 255, 0.3); - transition: all 0.3s ease; -} - -.help-button:hover, -.refresh-button:hover { - background: rgba(255, 255, 255, 0.3) !important; - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); -} - -/* ===== CONTENIDO PRINCIPAL ===== */ -mat-dialog-content { - height: calc(100% - 200px); - overflow: auto; - padding: 0 !important; - background: #f8f9fa; -} - -.main-content { - padding: 2rem; -} - -/* ===== SPINNER DE CARGA ===== */ -.spinner-container { - display: flex; - justify-content: center; - align-items: center; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - z-index: 1000; - background: rgba(255, 255, 255, 0.95); - border-radius: 16px; - padding: 2rem; - box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); - backdrop-filter: blur(10px); -} - -.loading-content { - text-align: center; -} - -.loading-spinner { - width: 60px !important; - height: 60px !important; - margin-bottom: 1rem; -} - -.loading-text { - margin: 0; - color: #666; - font-weight: 500; -} - -/* ===== RESUMEN DEL SISTEMA ===== */ -.system-overview { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); - gap: 1.5rem; - margin-bottom: 2rem; -} - -.overview-card { - background: white; - border-radius: 16px; - padding: 1.5rem; - display: flex; - align-items: center; - gap: 1rem; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - transition: all 0.3s ease; - border: 1px solid rgba(0, 0, 0, 0.05); - position: relative; - overflow: hidden; -} - -.overview-card::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 4px; - background: linear-gradient(90deg, #667eea, #764ba2); - opacity: 0; - transition: opacity 0.3s ease; -} - -.overview-card:hover { - transform: translateY(-4px); - box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15); - border-color: #667eea; -} - -.overview-card:hover::before { - opacity: 1; -} - -.overview-card.clickable { - cursor: pointer; - transition: all 0.3s ease; -} - -.overview-card.clickable:hover { - transform: translateY(-4px); - box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15); -} - -.overview-card.clickable:active { - transform: translateY(-2px); - box-shadow: 0 8px 25px rgba(0, 0, 0, 0.12); -} - -.overview-icon { - background: linear-gradient(135deg, #667eea, #764ba2); - border-radius: 50%; - width: 50px; - height: 50px; - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; -} - -.overview-icon mat-icon { - color: white; - font-size: 24px; - width: 24px; - height: 24px; -} - -.overview-content h3 { - margin: 0 0 0.5rem 0; - font-size: 1.1rem; - font-weight: 600; - color: #2c3e50; -} - -.overview-content p { - margin: 0; - font-size: 0.9rem; - color: #6c757d; -} - -.click-hint { - margin-top: 0.5rem !important; - font-size: 0.75rem !important; - color: #667eea !important; - font-weight: 500; - opacity: 0.8; - transition: opacity 0.3s ease; - display: flex; - align-items: center; - gap: 0.25rem; -} - -.hint-icon { - font-size: 0.875rem !important; - width: 0.875rem !important; - height: 0.875rem !important; -} - -.overview-card.clickable:hover .click-hint { - opacity: 1; -} - -/* ===== BADGES DE ESTADO ===== */ -.status-badge { - display: inline-block; - padding: 0.25rem 0.75rem; - border-radius: 20px; - font-size: 0.8rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.5px; -} - -.status-badge.online { - background: linear-gradient(135deg, #28a745, #20c997); - color: white; -} - -.status-badge.offline { - background: linear-gradient(135deg, #dc3545, #c82333); - color: white; -} - -.status-badge.info { - background: linear-gradient(135deg, #17a2b8, #138496); - color: white; -} - -/* ===== TABS PRINCIPALES ===== */ -.main-tabs { - background: white; - border-radius: 16px; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - overflow: hidden; -} - -::ng-deep .main-tabs .mat-tab-header { - background: #f8f9fa; - border-bottom: 1px solid #e9ecef; -} - -::ng-deep .main-tabs .mat-tab-label { - font-weight: 600; - color: #6c757d; - transition: all 0.3s ease; -} - -::ng-deep .main-tabs .mat-tab-label-active { - color: #667eea; -} - -::ng-deep .main-tabs .mat-ink-bar { - background: linear-gradient(90deg, #667eea, #764ba2); - height: 3px; -} - -.tab-content { - padding: 2rem; -} - -/* ===== CONTENEDOR DE ERRORES ===== */ -.error-container { - display: flex; - justify-content: center; - align-items: center; - min-height: 300px; - padding: 2rem; -} - -.error-card { - background: white; - border-radius: 16px; - padding: 3rem 2rem; - text-align: center; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - border: 1px solid #e9ecef; - max-width: 400px; -} - -.error-icon { - font-size: 64px; - width: 64px; - height: 64px; - color: #dc3545; - margin-bottom: 1rem; -} - -.error-card h3 { - margin: 0 0 1rem 0; - color: #2c3e50; - font-weight: 600; -} - -.error-card p { - margin: 0 0 2rem 0; - color: #6c757d; - line-height: 1.5; -} - -/* ===== REPOSITORIOS ===== */ .repositories-container { - padding: 1rem; + padding: 0; } .repositories-selector-container { display: flex; flex-direction: column; - gap: 2rem; + gap: 0.75rem; } .repository-selector { display: flex; - justify-content: center; - padding: 1rem 0; -} - -.repository-content { - padding: 1rem; + padding: 0.25rem 0 0; } .repository-select-field { - min-width: 300px; - max-width: 500px; + min-width: 260px; + max-width: 420px; width: 100%; } +.repository-content { + padding: 0; +} + .selected-repository-content { - animation: fadeInUp 0.6s ease-out; + animation: fadeInUp 0.3s ease-out; } -.no-repository-selected { - text-align: center; - padding: 3rem 2rem; - color: #6c757d; -} - -.no-repository-selected .no-data-icon { - font-size: 4rem; - width: 4rem; - height: 4rem; - margin-bottom: 1rem; - opacity: 0.5; -} - -.no-repository-selected h3 { - margin: 0 0 1rem 0; - color: #2c3e50; - font-weight: 600; -} - -.no-repository-selected p { - margin: 0; - font-size: 1rem; - line-height: 1.5; -} - -/* ===== FOOTER CON ACCIONES ===== */ -.action-container { +.section-header { display: flex; justify-content: space-between; align-items: center; - padding: 1.5rem 2rem; - background: white; - border-top: 1px solid #e9ecef; - border-radius: 0 0 12px 12px; + margin-bottom: 0.75rem; + padding-bottom: 0.6rem; + border-bottom: 1px solid #e9ecef; } -.action-info { - flex: 1; -} - -.last-update { +.section-header h2 { margin: 0; - font-size: 0.85rem; - color: #6c757d; -} - -.action-buttons { + font-size: 1.1rem; + font-weight: 600; + color: #2c3e50; display: flex; - gap: 1rem; -} - -.secondary-button { - color: #6c757d !important; - border: 1px solid #dee2e6 !important; - transition: all 0.3s ease; -} - -.secondary-button:hover { - background: #f8f9fa !important; - border-color: #667eea !important; - color: #667eea !important; -} - -/* ===== RESPONSIVE ===== */ -@media (max-width: 768px) { - .welcome-header { - padding: 1.5rem 1rem 1rem 1rem; - flex-direction: column; - gap: 1rem; - text-align: center; - } - - .welcome-content { - flex-direction: column; - gap: 1rem; - } - - .welcome-title { - font-size: 1.5rem; - } - - .welcome-subtitle { - font-size: 1rem; - } - - .main-content { - padding: 1rem; - } - - .system-overview { - grid-template-columns: 1fr; - gap: 1rem; - } - - .overview-card { - padding: 1rem; - } - - .action-container { - flex-direction: column; - gap: 1rem; - text-align: center; - } - - .action-buttons { - width: 100%; - justify-content: center; - } -} - -@media (max-width: 480px) { - .welcome-header { - padding: 1rem; - } - - .welcome-icon { - width: 50px; - height: 50px; - } - - .welcome-icon mat-icon { - font-size: 28px; - width: 28px; - height: 28px; - } - - .welcome-title { - font-size: 1.25rem; - } - - .overview-card { - flex-direction: column; - text-align: center; - } - - .tab-content { - padding: 1rem; - } - - .repository-select-field { - min-width: 250px; - max-width: 100%; - } -} - -/* ===== ANIMACIONES ===== */ -@keyframes fadeInUp { - from { - opacity: 0; - transform: translateY(20px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -.system-overview, -.main-tabs { - animation: fadeInUp 0.6s ease-out; -} - -.overview-card { - animation: fadeInUp 0.6s ease-out; -} - -.overview-card:nth-child(1) { animation-delay: 0.1s; } -.overview-card:nth-child(2) { animation-delay: 0.2s; } -.overview-card:nth-child(3) { animation-delay: 0.3s; } - -/* ===== ESTILOS GLOBALES DEL DIALOG ===== */ -::ng-deep .mat-dialog-container { - border-radius: 16px !important; - overflow: hidden !important; - padding: 0 !important; -} - -::ng-deep .mat-dialog-content { - margin: 0 !important; - padding: 0 !important; -} - -/* ===== LOADING INDIVIDUAL POR TAB ===== */ -.loading-container { - display: flex; - justify-content: center; align-items: center; - min-height: 300px; - padding: 2rem; + gap: 0.4rem; } -.loading-container .loading-content { - text-align: center; - background: rgba(255, 255, 255, 0.95); - border-radius: 16px; - padding: 2rem; - box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); - backdrop-filter: blur(10px); +.section-header h2::before { + content: ''; + width: 3px; + height: 18px; + background: linear-gradient(135deg, #667eea, #764ba2); + border-radius: 2px; + flex-shrink: 0; } -.loading-container .loading-spinner { - width: 60px !important; - height: 60px !important; - margin-bottom: 1rem; +.logs-button { + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + color: white; + border: none; + padding: 0.4rem 1rem; + border-radius: 20px; + cursor: pointer; + display: flex; + align-items: center; + gap: 0.35rem; + font-weight: 600; + font-size: 0.82rem; + transition: all 0.2s ease; + box-shadow: 0 2px 8px rgba(102, 126, 234, 0.25); } -.loading-container .loading-text { - margin: 0; - color: #666; - font-weight: 500; +.logs-button:hover { + transform: translateY(-1px); + box-shadow: 0 4px 14px rgba(102, 126, 234, 0.35); +} + +.logs-button mat-icon { + font-size: 1rem; + width: 1rem; + height: 1rem; } -/* ===== SECCIÓN DE LOGS ===== */ .logs-section { - margin-top: 2rem; - padding: 1.5rem; + margin-top: 0.5rem; + padding: 0.75rem 1rem; background: white; - border-radius: 12px; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + border-radius: 8px; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.07); border: 1px solid #e9ecef; } .logs-header { - margin-bottom: 1rem; + margin-bottom: 0.5rem; } .logs-header h3 { - margin: 0 0 0.5rem 0; - font-size: 1.25rem; + margin: 0; + font-size: 1rem; font-weight: 600; color: #2c3e50; display: flex; align-items: center; - gap: 0.5rem; + gap: 0.4rem; } .logs-header h3::before { content: ''; - width: 4px; - height: 20px; + width: 3px; + height: 16px; background: linear-gradient(135deg, #667eea, #764ba2); border-radius: 2px; + flex-shrink: 0; } .logs-header p { - margin: 0; - font-size: 0.9rem; - color: #6c757d; + display: none; } .logs-container { - display: flex; - justify-content: center; - align-items: center; background: #f8f9fa; - border-radius: 8px; - padding: 1rem; + border-radius: 6px; + padding: 0.4rem; border: 1px solid #e9ecef; } -.ogboot-logs-iframe { +.repository-logs-iframe { border: none; - border-radius: 6px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); - background: white; + border-radius: 4px; + display: block; } -.dhcp-logs-iframe { - border: none; - border-radius: 6px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); - background: white; +.no-repositories { + text-align: center; + padding: 2rem 1rem; + color: #6c757d; } -/* Responsive para logs */ -@media (max-width: 768px) { - .logs-section { - margin-top: 1.5rem; - padding: 1rem; - } - - .logs-container { - padding: 0.5rem; - } - - .ogboot-logs-iframe { - width: 100% !important; - height: 150px !important; - } +.no-repositories .no-data-icon { + font-size: 2.5rem; + width: 2.5rem; + height: 2.5rem; + margin-bottom: 0.5rem; + opacity: 0.4; } -/* ===== TARJETAS ACTIVAS ===== */ -.overview-card.clickable.active { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; - transform: translateY(-2px); - box-shadow: 0 8px 25px rgba(102, 126, 234, 0.3); -} - -.overview-card.clickable.active .overview-icon { - background: rgba(255, 255, 255, 0.2); - color: white; -} - -.overview-card.clickable.active .status-badge { - background: rgba(255, 255, 255, 0.2); - color: white; -} - -.overview-card.clickable.active .click-hint { - color: rgba(255, 255, 255, 0.8); -} - -.overview-card.clickable.active h3 { - color: white; -} - -.overview-card.clickable.active p { - color: rgba(255, 255, 255, 0.9); -} - -/* ===== CONTENIDO DINÁMICO ===== */ -.dynamic-content { - background: white; - border-radius: 16px; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - overflow: hidden; - animation: fadeInUp 0.6s ease-out; -} - -.section-content { - padding: 2rem; -} - -/* ===== HEADER DE SECCIÓN Y BOTÓN DE LOGS ===== */ -.section-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 2rem; - padding-bottom: 1rem; - border-bottom: 2px solid #e9ecef; -} - -.section-header h2 { - margin: 0; - font-size: 1.5rem; +.no-repositories h3 { + margin: 0 0 0.4rem; + font-size: 1rem; font-weight: 600; color: #2c3e50; - display: flex; - align-items: center; - gap: 0.5rem; } -.section-header h2::before { - content: ''; - width: 4px; - height: 24px; - background: linear-gradient(135deg, #667eea, #764ba2); - border-radius: 2px; -} - -.logs-button { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; - border: none; - padding: 0.75rem 1.5rem; - border-radius: 25px; - cursor: pointer; - display: flex; - align-items: center; - gap: 0.5rem; - font-weight: 600; - font-size: 0.9rem; - transition: all 0.3s ease; - box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3); -} - -.logs-button:hover { - transform: translateY(-2px); - box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4); - background: linear-gradient(135deg, #5a6fd8 0%, #6a4190 100%); -} - -.logs-button:active { - transform: translateY(0); - box-shadow: 0 2px 10px rgba(102, 126, 234, 0.3); -} - -.logs-button mat-icon { - font-size: 1.1rem; - width: 1.1rem; - height: 1.1rem; -} - -/* Responsive para el header de sección */ -@media (max-width: 768px) { - .section-header { - flex-direction: column; - gap: 1rem; - align-items: flex-start; - } - - .section-header h2 { - font-size: 1.25rem; - } - - .logs-button { - padding: 0.5rem 1.25rem; - font-size: 0.8rem; - } - - .logs-button mat-icon { - font-size: 1rem; - width: 1rem; - height: 1rem; - } -} - -/* ===== HEADER DE SECCIÓN Y BOTÓN DE LOGS ===== */ -.section-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 2rem; - padding-bottom: 1rem; - border-bottom: 2px solid #e9ecef; -} - -.section-header h2 { +.no-repositories p { margin: 0; - font-size: 1.5rem; + font-size: 0.85rem; +} + +.no-repository-selected { + text-align: center; + padding: 1.5rem 1rem; + color: #6c757d; +} + +.no-repository-selected .no-data-icon { + font-size: 2.5rem; + width: 2.5rem; + height: 2.5rem; + margin-bottom: 0.5rem; + opacity: 0.4; +} + +.no-repository-selected h3 { + margin: 0 0 0.4rem; + font-size: 1rem; font-weight: 600; color: #2c3e50; - display: flex; - align-items: center; - gap: 0.5rem; } -.section-header h2::before { - content: ''; - width: 4px; - height: 24px; - background: linear-gradient(135deg, #667eea, #764ba2); - border-radius: 2px; +.no-repository-selected p { + margin: 0; + font-size: 0.85rem; } -.logs-button { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; - border: none; - padding: 0.75rem 1.5rem; - border-radius: 25px; - cursor: pointer; +.error-container { display: flex; + justify-content: center; align-items: center; - gap: 0.5rem; + min-height: 160px; + padding: 1rem; +} + +.error-card { + background: white; + border-radius: 12px; + padding: 1.5rem; + text-align: center; + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); + border: 1px solid #e9ecef; + max-width: 360px; +} + +.error-icon { + font-size: 42px; + width: 42px; + height: 42px; + color: #dc3545; + margin-bottom: 0.5rem; +} + +.error-card h3 { + margin: 0 0 0.4rem; + color: #2c3e50; font-weight: 600; - font-size: 0.9rem; - transition: all 0.3s ease; - box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3); + font-size: 1rem; } -.logs-button:hover { - transform: translateY(-2px); - box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4); - background: linear-gradient(135deg, #5a6fd8 0%, #6a4190 100%); +.error-card p { + margin: 0 0 1rem; + color: #6c757d; + font-size: 0.85rem; + line-height: 1.4; } -.logs-button:active { - transform: translateY(0); - box-shadow: 0 2px 10px rgba(102, 126, 234, 0.3); +@keyframes fadeInUp { + from { opacity: 0; transform: translateY(8px); } + to { opacity: 1; transform: translateY(0); } } - -.logs-button mat-icon { - font-size: 1.1rem; - width: 1.1rem; - height: 1.1rem; -} - -/* Responsive para el header de sección */ -@media (max-width: 768px) { - .section-header { - flex-direction: column; - gap: 1rem; - align-items: flex-start; - } - - .section-header h2 { - font-size: 1.25rem; - } - - .logs-button { - padding: 0.5rem 1.25rem; - font-size: 0.8rem; - } - - .logs-button mat-icon { - font-size: 1rem; - width: 1rem; - height: 1rem; - } -} \ No newline at end of file diff --git a/ogWebconsole/src/app/components/global-status/status-tab/status-tab.component.css b/ogWebconsole/src/app/components/global-status/status-tab/status-tab.component.css index 03d746c..264ffdf 100644 --- a/ogWebconsole/src/app/components/global-status/status-tab/status-tab.component.css +++ b/ogWebconsole/src/app/components/global-status/status-tab/status-tab.component.css @@ -2,15 +2,15 @@ .dashboard { display: flex; flex-direction: column; - gap: 2rem; + gap: 1rem; padding: 0; } /* ===== SECCIÓN DE RECURSOS ===== */ .resources-section { display: grid; - grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); - gap: 1.5rem; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 1rem; } /* Layout específico para repositorios - gráficas en una sola fila */ @@ -25,8 +25,8 @@ .resource-card { background: white; - border-radius: 16px; - padding: 1.5rem; + border-radius: 12px; + padding: 1rem; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); border: 1px solid rgba(0, 0, 0, 0.05); transition: all 0.3s ease; @@ -59,8 +59,8 @@ .resource-header { display: flex; align-items: center; - gap: 1rem; - margin-bottom: 1.5rem; + gap: 0.75rem; + margin-bottom: 0.75rem; } .resource-icon { @@ -173,14 +173,14 @@ /* ===== SECCIÓN DE SERVICIOS ===== */ .services-section { display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 1.5rem; + grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); + gap: 1rem; } .service-card { background: white; - border-radius: 16px; - padding: 1.5rem; + border-radius: 12px; + padding: 1rem; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); border: 1px solid rgba(0, 0, 0, 0.05); transition: all 0.3s ease; @@ -194,8 +194,8 @@ .service-header { display: flex; align-items: center; - gap: 1rem; - margin-bottom: 1.5rem; + gap: 0.75rem; + margin-bottom: 0.75rem; } .service-icon { @@ -298,13 +298,13 @@ .data-section { display: flex; flex-direction: column; - gap: 1.5rem; + gap: 1rem; } .data-card { background: white; - border-radius: 16px; - padding: 1.5rem; + border-radius: 12px; + padding: 1rem; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); border: 1px solid rgba(0, 0, 0, 0.05); transition: all 0.3s ease; @@ -318,8 +318,8 @@ .data-header { display: flex; align-items: center; - gap: 1rem; - margin-bottom: 1.5rem; + gap: 0.75rem; + margin-bottom: 0.75rem; } .data-icon { diff --git a/ogWebconsole/src/app/components/groups/shared/organizational-units/manage-organizational-unit/manage-organizational-unit.component.html b/ogWebconsole/src/app/components/groups/shared/organizational-units/manage-organizational-unit/manage-organizational-unit.component.html index 419f435..8ff0cee 100644 --- a/ogWebconsole/src/app/components/groups/shared/organizational-units/manage-organizational-unit/manage-organizational-unit.component.html +++ b/ogWebconsole/src/app/components/groups/shared/organizational-units/manage-organizational-unit/manage-organizational-unit.component.html @@ -67,6 +67,7 @@
{{ 'projectorAlt' | translate }} {{ 'boardToggle' | translate }} + {{ 'remotePcLabel' | translate }}
} diff --git a/ogWebconsole/src/app/components/groups/shared/organizational-units/manage-organizational-unit/manage-organizational-unit.component.ts b/ogWebconsole/src/app/components/groups/shared/organizational-units/manage-organizational-unit/manage-organizational-unit.component.ts index ecd3be7..4009445 100644 --- a/ogWebconsole/src/app/components/groups/shared/organizational-units/manage-organizational-unit/manage-organizational-unit.component.ts +++ b/ogWebconsole/src/app/components/groups/shared/organizational-units/manage-organizational-unit/manage-organizational-unit.component.ts @@ -107,6 +107,7 @@ export class ManageOrganizationalUnitComponent implements OnInit { location: [null], projector: [false], board: [false], + remotePc: [false], capacity: [null, [Validators.required, Validators.min(0)]], remoteCalendar: [null] }); @@ -273,6 +274,7 @@ export class ManageOrganizationalUnitComponent implements OnInit { location: data.location, projector: data.projector, board: data.board, + remotePc: data.remotePc ?? false, capacity: data.capacity, remoteCalendar: data.remoteCalendar ? data.remoteCalendar['@id'] : null }); @@ -347,6 +349,7 @@ export class ManageOrganizationalUnitComponent implements OnInit { location: this.classroomInfoFormGroup.value.location, projector: this.classroomInfoFormGroup.value.projector, board: this.classroomInfoFormGroup.value.board, + remotePc: this.classroomInfoFormGroup.value.remotePc, capacity: this.classroomInfoFormGroup.value.capacity, }; diff --git a/ogWebconsole/src/app/components/repositories/edit-image/edit-image.component.css b/ogWebconsole/src/app/components/repositories/edit-image/edit-image.component.css index bdecbfa..1eaaeb6 100644 --- a/ogWebconsole/src/app/components/repositories/edit-image/edit-image.component.css +++ b/ogWebconsole/src/app/components/repositories/edit-image/edit-image.component.css @@ -37,3 +37,7 @@ mat-dialog-actions { .selected-item button { margin-left: 10px; } + +.toggle-field { + margin-top: 12px; +} diff --git a/ogWebconsole/src/app/components/repositories/edit-image/edit-image.component.html b/ogWebconsole/src/app/components/repositories/edit-image/edit-image.component.html index a5b6166..1285a08 100644 --- a/ogWebconsole/src/app/components/repositories/edit-image/edit-image.component.html +++ b/ogWebconsole/src/app/components/repositories/edit-image/edit-image.component.html @@ -7,6 +7,9 @@ +
+ {{ 'remotePcLabel' | translate }} +
diff --git a/ogWebconsole/src/app/components/repositories/edit-image/edit-image.component.ts b/ogWebconsole/src/app/components/repositories/edit-image/edit-image.component.ts index 83d7676..e339bb5 100644 --- a/ogWebconsole/src/app/components/repositories/edit-image/edit-image.component.ts +++ b/ogWebconsole/src/app/components/repositories/edit-image/edit-image.component.ts @@ -30,7 +30,8 @@ export class EditImageComponent implements OnInit{ ) { this.baseUrl = this.configService.apiUrl; this.imageForm = this.fb.group({ - description: [''] + description: [''], + remotePc: [false], }) } @@ -43,7 +44,8 @@ export class EditImageComponent implements OnInit{ this.http.get(`${this.baseUrl}${this.data.image['@id']}`).subscribe({ next: (response) => { this.imageForm.patchValue({ - description: response.description + description: response.description, + remotePc: response.remotePc ?? false, }); this.loading = false; }, diff --git a/ogWebconsole/src/app/components/repositories/manage-repository/manage-repository.component.css b/ogWebconsole/src/app/components/repositories/manage-repository/manage-repository.component.css index 710cd97..f0e2a8d 100644 --- a/ogWebconsole/src/app/components/repositories/manage-repository/manage-repository.component.css +++ b/ogWebconsole/src/app/components/repositories/manage-repository/manage-repository.component.css @@ -38,3 +38,4 @@ margin-bottom: 8px; } } +.toggle-field { margin-top: 12px; } diff --git a/ogWebconsole/src/app/components/repositories/manage-repository/manage-repository.component.ts b/ogWebconsole/src/app/components/repositories/manage-repository/manage-repository.component.ts index d147881..875d480 100644 --- a/ogWebconsole/src/app/components/repositories/manage-repository/manage-repository.component.ts +++ b/ogWebconsole/src/app/components/repositories/manage-repository/manage-repository.component.ts @@ -51,8 +51,8 @@ export class ManageRepositoryComponent implements OnInit { this.imageForm = this.fb.group({ name: [response.name, Validators.required], ip: [response.ip], - sshPort: [response.sshPort?? '22' ], - user: [response.user?? 'opengnsys'], + sshPort: [response.sshPort ?? '22'], + user: [response.user ?? 'opengnsys'], comments: [response.comments], }); this.repositoryId = response['@id'];