Port the HLCRF application frame from lthn-desktop into core/gui/ui/ as a reusable Angular framework. Adds: - ApplicationFrameComponent: header, collapsible sidebar, content area, footer - SystemTrayFrameComponent: 380x480 frameless panel with provider status cards - ProviderDiscoveryService: fetches GET /api/v1/providers, loads custom elements - ProviderHostComponent: renders any custom element by tag via Renderer2 - ProviderNavComponent: dynamic sidebar navigation from provider discovery - StatusBarComponent: footer with time, version, provider count, WS status - WebSocketService: persistent connection with auto-reconnect - ApiConfigService: configurable API base URL - TranslationService: key-value i18n with API fallback Navigation is dynamic (populated from providers), sidebar shows icons-only in collapsed mode with expand on click, dark mode supported throughout. Co-Authored-By: Virgil <virgil@lethean.io>
20 lines
609 B
TypeScript
20 lines
609 B
TypeScript
// SPDX-Licence-Identifier: EUPL-1.2
|
|
|
|
import { DoBootstrap, Injector, NgModule, provideBrowserGlobalErrorListeners } from '@angular/core';
|
|
import { BrowserModule } from '@angular/platform-browser';
|
|
import { createCustomElement } from '@angular/elements';
|
|
|
|
import { App } from './app';
|
|
|
|
@NgModule({
|
|
imports: [BrowserModule, App],
|
|
providers: [provideBrowserGlobalErrorListeners()],
|
|
})
|
|
export class AppModule implements DoBootstrap {
|
|
constructor(private injector: Injector) {
|
|
const el = createCustomElement(App, { injector });
|
|
customElements.define('core-display', el);
|
|
}
|
|
|
|
ngDoBootstrap() {}
|
|
}
|