oip-common 0.6.2 → 0.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"oip-common.mjs","sources":["../../../projects/oip-common/src/services/top-bar.service.ts","../../../projects/oip-common/src/services/msg.service.ts","../../../projects/oip-common/src/services/app-title.service.ts","../../../projects/oip-common/src/helpers/date.helper.ts","../../../projects/oip-common/src/services/app.layout.service.ts","../../../projects/oip-common/src/services/l10n.service.ts","../../../projects/oip-common/src/services/security.service.ts","../../../projects/oip-common/src/api/http-client.ts","../../../projects/oip-common/src/components/base-module/base-module.component.ts","../../../projects/oip-common/src/api/security.api.ts","../../../projects/oip-common/src/components/security/security.component.ts","../../../projects/oip-common/src/services/theme-presets.token.ts","../../../projects/oip-common/src/components/app-configurator/app-configurator.component.ts","../../../projects/oip-common/src/api/user-profile.api.ts","../../../projects/oip-common/src/services/user.service.ts","../../../projects/oip-common/src/components/logo.component.ts","../../../projects/oip-common/src/services/logo.service.ts","../../../projects/oip-common/src/api/notification.api.ts","../../../projects/oip-common/src/services/notification.service.ts","../../../projects/oip-common/src/components/user-notifications/user-notifications.component.ts","../../../projects/oip-common/src/api/applications.api.ts","../../../projects/oip-common/src/services/application-registry.service.ts","../../../projects/oip-common/src/components/top-bar-application-switcher.component.ts","../../../projects/oip-common/src/components/top-bar.component.ts","../../../projects/oip-common/src/components/footer.component.ts","../../../projects/oip-common/src/api/menu.api.ts","../../../projects/oip-common/src/services/app.menu.service.ts","../../../projects/oip-common/src/components/menu/menu-item.component.ts","../../../projects/oip-common/src/components/menu/menu-item-create-dialog.component.ts","../../../projects/oip-common/src/components/menu/menu-item-edit-dialog.component.ts","../../../projects/oip-common/src/components/menu/menu.component.ts","../../../projects/oip-common/src/components/sidebar.component.ts","../../../projects/oip-common/src/components/app.layout.component.ts","../../../projects/oip-common/src/components/app-floating-configurator.component.ts","../../../projects/oip-common/src/components/notfound/notfound.component.ts","../../../projects/oip-common/src/components/auth/unauthorized/unauthorized.component.ts","../../../projects/oip-common/src/components/auth/access/access.component.ts","../../../projects/oip-common/src/components/auth/error/error.component.ts","../../../projects/oip-common/src/components/user-profile/user-profile.component.ts","../../../projects/oip-common/src/components/config/config.component.ts","../../../projects/oip-common/src/components/db-migration/db-migration.component.ts","../../../projects/oip-common/src/api/extension-modules.api.ts","../../../projects/oip-common/src/api/module.api.ts","../../../projects/oip-common/src/components/app-modules/app-modules.component.ts","../../../projects/oip-common/src/api/applications-data-contracts.ts","../../../projects/oip-common/src/components/applications/applications.component.ts","../../../projects/oip-common/src/api/discussion.api.ts","../../../projects/oip-common/src/helpers/avatar.helper.ts","../../../projects/oip-common/src/components/discussion/discussion.component.ts","../../../projects/oip-common/src/components/iframe-module/iframe-module.component.ts","../../../projects/oip-common/src/extension-host/extension-host.events.ts","../../../projects/oip-common/src/extension-host/extension-loader.service.ts","../../../projects/oip-common/src/components/custom-element-extension-module-host.component.ts","../../../projects/oip-common/src/components/extension-module-host.component.ts","../../../projects/oip-common/src/services/auth-guard.service.ts","../../../projects/oip-common/src/services/module-instance-rights.service.ts","../../../projects/oip-common/src/services/module-access-guard.service.ts","../../../projects/oip-common/src/services/table-filter.service.ts","../../../projects/oip-common/src/services/theme-presets.provider.ts","../../../projects/oip-common/src/services/app-default.theme.ts","../../../projects/oip-common/src/intercepts/i18n-intercept.service.ts","../../../projects/oip-common/src/providers/oip.provider.ts","../../../projects/oip-common/src/api/folder-module.api.ts","../../../projects/oip-common/src/api/iframe-module.api.ts","../../../projects/oip-common/src/public-api.ts","../../../projects/oip-common/src/oip-common.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { TopBarDto } from '../dtos/top-bar.dto';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TopBarService {\n topBarItems: TopBarDto[] = [];\n private readonly activeIdSubject = new Subject<string | undefined>();\n\n readonly activeId$ = this.activeIdSubject.asObservable();\n\n private _activeId: string | undefined;\n\n get availableTopBarItems(): TopBarDto[] {\n return this.topBarItems;\n }\n\n get activeTopBarItem(): TopBarDto | undefined {\n if (this._activeId === undefined) {\n return undefined;\n }\n return this.topBarItems.find((topBarItem: TopBarDto) => topBarItem.id === this._activeId);\n }\n\n get activeId(): string | undefined {\n return this._activeId;\n }\n\n set activeId(value: string | undefined) {\n this._activeId = value;\n const activeTopBarItem = this.activeTopBarItem;\n if (activeTopBarItem?.click) activeTopBarItem.click();\n this.activeIdSubject.next(value);\n }\n\n constructor() {}\n\n // Set tob bar items\n setTopBarItems(items: TopBarDto[]) {\n this.topBarItems = items;\n }\n\n checkId(id: string): boolean {\n const activeTopBarItem = this.activeTopBarItem;\n const result = activeTopBarItem === undefined ? id === 'content' : activeTopBarItem.id == id;\n return result;\n }\n}\n","import { inject, Injectable } from '@angular/core';\r\nimport { MessageService } from 'primeng/api';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { ToastMessageOptions } from 'primeng/api';\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class MsgService {\r\n protected readonly messageService: MessageService = inject(MessageService);\r\n private readonly translate = inject(TranslateService);\r\n private readonly lifetime: number = 2000;\r\n\r\n add(msg: ToastMessageOptions) {\r\n this.messageService.add(msg);\r\n }\r\n\r\n success(detail: any, summary: any = this.translate.instant('msgService.success'), life: number = this.lifetime) {\r\n this.messageService.add({\r\n severity: 'success',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n\r\n info(detail: any, summary: any = this.translate.instant('msgService.info'), life: number = this.lifetime) {\r\n this.messageService.add({\r\n severity: 'info',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n\r\n warn(detail: any, summary: any = this.translate.instant('msgService.warn'), life: number = this.lifetime) {\r\n this.messageService.add({\r\n severity: 'warn',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n\r\n error(detail: any, summary: any = this.translate.instant('msgService.error'), life: number = this.lifetime) {\r\n if (detail instanceof HttpErrorResponse) {\r\n summary = `Error: ${detail.status} ${detail.statusText}`;\r\n detail = this.extractErrorMessage(detail, `${detail.name} \\r\\n ${detail.message}`);\r\n } else {\r\n detail = this.extractErrorMessage(detail, detail?.toString?.() ?? this.translate.instant('msgService.error'));\r\n }\r\n\r\n this.messageService.add({\r\n severity: 'error',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n\r\n extractErrorMessage(error: unknown, fallback: string): string {\r\n const validationMessage = this.extractValidationMessage(error);\r\n if (validationMessage) {\r\n return validationMessage;\r\n }\r\n\r\n const apiExceptionMessage = this.extractApiExceptionMessage(error);\r\n if (apiExceptionMessage) {\r\n return apiExceptionMessage;\r\n }\r\n\r\n if (typeof error === 'object' && error && 'message' in error && typeof error.message === 'string') {\r\n return error.message;\r\n }\r\n\r\n return fallback;\r\n }\r\n\r\n private extractValidationMessage(error: unknown): string | null {\r\n const responseError = this.getObjectProperty(error, 'error');\r\n const validationErrors = this.getObjectProperty(responseError, 'errors') ?? this.getObjectProperty(error, 'errors');\r\n\r\n if (!validationErrors) {\r\n return null;\r\n }\r\n\r\n const messages = Object.entries(validationErrors)\r\n .reduce<string[]>((result, [field, value]) => [...result, ...this.toValidationMessages(field, value)], [])\r\n .filter((message) => message.length > 0);\r\n\r\n return messages.length > 0 ? messages.join('\\n') : null;\r\n }\r\n\r\n private extractApiExceptionMessage(error: unknown): string | null {\r\n const responseError = this.getObjectProperty(error, 'error');\r\n const message = this.getStringProperty(responseError, 'message') ?? this.getStringProperty(error, 'message');\r\n const title = this.getStringProperty(responseError, 'title') ?? this.getStringProperty(error, 'title');\r\n\r\n if (message && title) {\r\n return `${title}: ${message}`;\r\n }\r\n\r\n return message ?? title;\r\n }\r\n\r\n private toValidationMessages(field: string, value: unknown): string[] {\r\n if (Array.isArray(value)) {\r\n return value\r\n .filter((message): message is string => typeof message === 'string')\r\n .map((message) => `${field}: ${message}`);\r\n }\r\n\r\n if (typeof value === 'string') {\r\n return [`${field}: ${value}`];\r\n }\r\n\r\n return [];\r\n }\r\n\r\n private getObjectProperty(source: unknown, property: string): Record<string, unknown> | null {\r\n if (typeof source !== 'object' || source === null || !(property in source)) {\r\n return null;\r\n }\r\n\r\n const value = (source as Record<string, unknown>)[property];\r\n return typeof value === 'object' && value !== null ? (value as Record<string, unknown>) : null;\r\n }\r\n\r\n private getStringProperty(source: unknown, property: string): string | null {\r\n if (typeof source !== 'object' || source === null || !(property in source)) {\r\n return null;\r\n }\r\n\r\n const value = (source as Record<string, unknown>)[property];\r\n return typeof value === 'string' && value.length > 0 ? value : null;\r\n }\r\n\r\n errorFromException(error: unknown, fallback: string, summary: string = fallback, life: number = this.lifetime) {\r\n this.error(this.extractErrorMessage(error, fallback), summary, life);\r\n }\r\n\r\n contrast(detail: any, summary: any = this.translate.instant('msgService.error'), life: number = this.lifetime) {\r\n this.messageService.add({\r\n severity: 'contrast',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n\r\n secondary(detail: any, summary: any = this.translate.instant('msgService.secondary'), life: number = this.lifetime) {\r\n this.messageService.add({\r\n severity: 'secondary',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { Title } from '@angular/platform-browser';\r\n\r\n/**\r\n * Service to manage the application title.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class AppTitleService {\r\n private readonly title = inject(Title);\r\n private titleSubject = new BehaviorSubject<string>('');\r\n public title$ = this.titleSubject.asObservable();\r\n\r\n /**\r\n * Set the title of the current HTML document.\r\n * @param newTitle\r\n */\r\n setTitle(newTitle: string): void {\r\n this.title.setTitle(newTitle);\r\n this.titleSubject.next(newTitle);\r\n }\r\n}\r\n","/**\r\n * Convert Date to string in format 2022-02-22\r\n * @param date\r\n */\r\nexport function dateToString(date: Date): string {\r\n const year = date.getFullYear();\r\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\r\n const day = date.getDate().toString().padStart(2, '0');\r\n\r\n return `${year}-${month}-${day}`;\r\n}\r\n\r\n/**\r\n * Convert string in format 2022-02-22 to Date\r\n * @param date\r\n */\r\nexport function stringToDate(date: string): Date {\r\n const dateParts = date.split('-');\r\n const day = parseInt(dateParts[2], 10);\r\n const month = parseInt(dateParts[1], 10) - 1;\r\n const year = parseInt(dateParts[0], 10);\r\n\r\n return new Date(year, month, day);\r\n}\r\n\r\n/**\r\n * Add days to date\r\n * @param date\r\n * @param days\r\n */\r\nexport function addDays(date: Date, days: number): Date {\r\n const clonedDate = structuredClone(date);\r\n clonedDate.setDate(clonedDate.getDate() + days);\r\n return clonedDate;\r\n}\r\n\r\n/**\r\n * Get today's date\r\n * @param date\r\n */\r\nexport function getTodayDate(): Date {\r\n const date = new Date();\r\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n}\r\n\r\n/* Convert dateformat from DatePipe to PrimeNG*/\r\nexport function convertToPrimeNgDateFormat(dateformat: string): string {\r\n switch (dateformat) {\r\n case 'dd.MM.yyyy':\r\n return 'dd.mm.yy';\r\n case 'dd.MM.yy':\r\n return 'dd.mm.y';\r\n case 'yyyy-MM-dd':\r\n return 'yy-mm-dd';\r\n case 'dd.MMM.yyyy':\r\n return 'dd.M.yy';\r\n default:\r\n console.error(`Failed to convert format: ${dateformat}`);\r\n }\r\n}\r\n\r\n/**\r\n * Convert all properties of an object with string dates to Date objects\r\n * @param obj\r\n */\r\nexport function restoreDates(obj: any) {\r\n if (obj === null || typeof obj !== 'object') return obj;\r\n\r\n if (Array.isArray(obj)) {\r\n return obj.map((item) => restoreDates(item));\r\n }\r\n\r\n const result = {};\r\n for (const key in obj) {\r\n const value = obj[key];\r\n\r\n if (typeof value === 'string' && isIsoDate(value)) {\r\n result[key] = new Date(value);\r\n } else if (typeof value === 'object' && value !== null && !(value instanceof Date)) {\r\n result[key] = restoreDates(value);\r\n } else {\r\n result[key] = value;\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Check if a string is a date in ISO format\r\n * @param str\r\n */\r\nexport function isIsoDate(str: string) {\r\n return /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$/.test(str);\r\n}\r\n","import { Injectable, effect, signal, computed } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { convertToPrimeNgDateFormat } from '../helpers/date.helper';\n\nexport interface AppConfig {\n preset?: string;\n primary?: string;\n surface?: string | null;\n darkTheme?: boolean;\n menuMode?: string;\n language?: string;\n dateFormat: string;\n timeFormat: string;\n dateTimeFormat: string;\n timeZone: string;\n adminMode?: boolean;\n}\n\ninterface LayoutState {\n staticMenuDesktopInactive?: boolean;\n overlayMenuActive?: boolean;\n configSidebarVisible?: boolean;\n staticMenuMobileActive?: boolean;\n menuHoverActive?: boolean;\n}\n\ninterface MenuChangeEvent {\n key: string;\n routeEvent?: boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class LayoutService {\n _config: AppConfig = this.getAppConfigFromStorage();\n\n _state: LayoutState = {\n staticMenuDesktopInactive: false,\n overlayMenuActive: false,\n configSidebarVisible: false,\n staticMenuMobileActive: false,\n menuHoverActive: false\n };\n\n layoutConfig = signal<AppConfig>(this._config);\n\n layoutState = signal<LayoutState>(this._state);\n\n private readonly configUpdate = new Subject<AppConfig>();\n\n private readonly overlayOpen = new Subject<any>();\n\n private readonly menuSource = new Subject<MenuChangeEvent>();\n\n private readonly resetSource = new Subject();\n\n menuSource$ = this.menuSource.asObservable();\n\n resetSource$ = this.resetSource.asObservable();\n\n configUpdate$ = this.configUpdate.asObservable();\n\n overlayOpen$ = this.overlayOpen.asObservable();\n\n theme = computed(() => (this.layoutConfig()?.darkTheme ? 'light' : 'dark'));\n\n isSidebarActive = computed(() => this.layoutState().overlayMenuActive || this.layoutState().staticMenuMobileActive);\n\n isDarkTheme = computed(() => this.layoutConfig().darkTheme);\n\n getPrimary = computed(() => this.layoutConfig().primary);\n\n getSurface = computed(() => this.layoutConfig().surface);\n\n isOverlay = computed(() => this.layoutConfig().menuMode === 'overlay');\n\n language = computed(() => this.layoutConfig().language);\n\n dateFormat = computed(() => this.layoutConfig().dateFormat);\n\n primeNgDateFormat = computed(() => convertToPrimeNgDateFormat(this.layoutConfig().dateFormat));\n\n timeFormat = computed(() => this.layoutConfig().timeFormat);\n\n dateTimeFormat = computed(() => `${this.layoutConfig().dateFormat} ${this.layoutConfig().timeFormat}`);\n\n monthFormat = computed(() => {\n const reDay = /d+/i;\n const reDelimiter = /^[^\\w]|[^\\w]$|([^\\w])\\1+/;\n const ngDateFormat = convertToPrimeNgDateFormat(this.layoutConfig().dateFormat);\n const ngDate = ngDateFormat.replace(reDay, '');\n const dateGroups = ngDate.match(reDelimiter);\n if (Array.isArray(dateGroups) && dateGroups.length > 1) {\n return dateGroups[1] !== undefined\n ? ngDate.replace(dateGroups[0], '')\n : ngDate.startsWith(dateGroups[0])\n ? ngDate.substring(1)\n : ngDate.substring(0, ngDate.length - 1);\n }\n return ngDateFormat;\n });\n\n timeZone = computed(() => this.layoutConfig().timeZone);\n\n adminMode = computed(() => this.layoutConfig().adminMode ?? false);\n\n transitionComplete = signal<boolean>(false);\n\n private initialized = false;\n\n constructor() {\n effect(() => {\n const config = this.layoutConfig();\n if (config) {\n this.onConfigUpdate();\n }\n });\n\n effect(() => {\n const config = this.layoutConfig();\n\n if (!this.initialized || !config) {\n this.initialized = true;\n return;\n }\n\n this.handleDarkModeTransition(config);\n });\n }\n\n /**\n * Get application settings from browser storage\n * @returns AppConfig\n */\n private getAppConfigFromStorage(): AppConfig {\n const appConfigUiString = localStorage.getItem('layoutConfig');\n if (appConfigUiString != null) {\n const config = JSON.parse(appConfigUiString) as AppConfig;\n config.timeZone ??= Intl.DateTimeFormat().resolvedOptions().timeZone;\n return config;\n }\n return {\n preset: 'Aura',\n primary: 'emerald',\n surface: null,\n darkTheme: false,\n menuMode: 'static',\n language: 'ru',\n dateFormat: 'yyyy-MM-dd',\n timeFormat: 'HH:mm:ss',\n dateTimeFormat: 'yyyy-MM-dd HH:mm:ss',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n adminMode: false\n };\n }\n\n private handleDarkModeTransition(config: AppConfig): void {\n if ((document as any).startViewTransition) {\n this.startViewTransition(config);\n } else {\n this.toggleDarkMode(config);\n this.onTransitionEnd();\n }\n }\n\n private startViewTransition(config: AppConfig): void {\n const transition = (document as any).startViewTransition(() => {\n this.toggleDarkMode(config);\n });\n\n transition.ready\n .then(() => {\n this.onTransitionEnd();\n })\n .catch(() => {});\n }\n\n toggleDarkMode(config?: AppConfig): void {\n const _config = config || this.layoutConfig();\n if (_config.darkTheme) {\n document.documentElement.classList.add('app-dark');\n } else {\n document.documentElement.classList.remove('app-dark');\n }\n }\n\n private onTransitionEnd() {\n this.transitionComplete.set(true);\n setTimeout(() => {\n this.transitionComplete.set(false);\n });\n }\n\n onMenuToggle() {\n if (this.isOverlay()) {\n this.layoutState.update((prev) => ({ ...prev, overlayMenuActive: !this.layoutState().overlayMenuActive }));\n\n if (this.layoutState().overlayMenuActive) {\n this.overlayOpen.next(null);\n }\n }\n\n if (this.isDesktop()) {\n this.layoutState.update((prev) => ({\n ...prev,\n staticMenuDesktopInactive: !this.layoutState().staticMenuDesktopInactive\n }));\n } else {\n this.layoutState.update((prev) => ({\n ...prev,\n staticMenuMobileActive: !this.layoutState().staticMenuMobileActive\n }));\n\n if (this.layoutState().staticMenuMobileActive) {\n this.overlayOpen.next(null);\n }\n }\n }\n\n isDesktop() {\n return window.innerWidth > 991;\n }\n\n isMobile() {\n return !this.isDesktop();\n }\n\n onConfigUpdate() {\n this._config = { ...this.layoutConfig() };\n this.configUpdate.next(this.layoutConfig());\n localStorage.setItem('layoutConfig', JSON.stringify(this.layoutConfig()));\n }\n\n onMenuStateChange(event: MenuChangeEvent) {\n this.menuSource.next(event);\n }\n\n reset() {\n this.resetSource.next(true);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { InterpolationParameters, TranslateService, Translation, TranslationObject } from '@ngx-translate/core';\nimport { LayoutService } from './app.layout.service';\nimport { PrimeNG } from 'primeng/config';\nimport { Observable, of, shareReplay, tap } from 'rxjs';\nimport en from './l10n/en.json';\nimport ru from './l10n/ru.json';\n\n/**\n * Translations of a single namespace grouped by language code, e.g. { en: {...}, ru: {...} }\n */\nexport type TranslationsByLang = Record<string, TranslationObject>;\n\n/**\n * Global dictionaries shared by all components. They are bundled with the library,\n * so the application never requests `assets/i18n/{lang}.json`.\n */\nconst globalTranslations: TranslationsByLang = { en, ru };\n\nexport interface LanguageDto {\n code: string;\n name: string;\n icon: string;\n}\n\n/**\n * Service for managing translation loading in the application\n */\n@Injectable({ providedIn: 'root' }) // Provided at root level for singleton usage\nexport class L10nService {\n private loadedTranslations: Set<string> = new Set();\n private loadingTranslations: Map<string, Observable<unknown>> = new Map();\n private httpClient = inject(HttpClient);\n private translateService = inject(TranslateService);\n private readonly primeNg = inject(PrimeNG);\n private readonly layoutService = inject(LayoutService);\n public availableLanguages: LanguageDto[];\n\n /**\n * Translations bundled with components, registered at module load time.\n */\n private static readonly staticTranslations: Map<string, TranslationsByLang> = new Map();\n\n /**\n * Registers translations bundled with a component instead of loading them over HTTP.\n * Namespaces are taken from the root keys of the passed dictionaries.\n * Components derived from <c>BaseModuleComponent</c> don't call it directly - it is enough\n * to declare the static <c>translations</c> field.\n * @param byLang - Translations grouped by language code\n * @param namespace - Explicit namespace, needed when the dictionaries are still empty\n */\n public static registerTranslations(byLang: TranslationsByLang | undefined, namespace?: string): void {\n if (!byLang) {\n return;\n }\n if (namespace) {\n L10nService.staticTranslations.set(namespace, byLang);\n }\n for (const translations of Object.values(byLang)) {\n for (const namespace of Object.keys(translations)) {\n L10nService.staticTranslations.set(namespace, byLang);\n }\n }\n }\n\n constructor() {\n // Global dictionaries are available before the first `use()` call, so TranslateHttpLoader is never asked for them.\n L10nService.registerTranslations(globalTranslations);\n Object.entries(globalTranslations).forEach(([lang, translations]) => this.mergeTranslation(lang, translations));\n\n // Static translations are merged once per language, so they have to be re-merged on every language change.\n this.translateService.onLangChange.subscribe((event) => {\n L10nService.staticTranslations.forEach((byLang) => {\n const translations = byLang[event.lang];\n if (translations) {\n this.mergeTranslation(event.lang, translations);\n }\n });\n });\n }\n\n /**\n * Loads translations for a specific component\n * @param component - Name of the component to load translations for\n */\n public loadComponentTranslations(component: string): Observable<unknown> {\n const lang = this.translateService.currentLang || this.layoutService.language() || 'en';\n return this.loadTranslations(component, lang);\n }\n\n /**\n * Loads translations from an explicit asset URL and merges them into the active language dictionary.\n * Use this for extension modules whose assets are hosted outside the shell application.\n */\n public loadTranslationsFromUrl(namespace: string, url: string, lang?: string): Observable<unknown> {\n const selectedLang = lang || this.translateService.currentLang || this.layoutService.language() || 'en';\n const key = `${namespace}.${selectedLang}.${url}`;\n if (this.loadedTranslations.has(key)) {\n return of(null);\n }\n\n const loading = this.loadingTranslations.get(key);\n if (loading) {\n return loading;\n }\n\n const request = this.httpClient.get(url).pipe(\n tap((translations) => {\n this.mergeTranslation(selectedLang, translations as TranslationObject);\n this.loadedTranslations.add(key);\n this.loadingTranslations.delete(key);\n }),\n shareReplay(1)\n );\n\n this.loadingTranslations.set(key, request);\n request.subscribe({\n error: (e) => {\n this.loadingTranslations.delete(key);\n console.error(`No translations found for ${namespace}.${selectedLang}.json at ${url}`);\n console.error(e);\n }\n });\n\n return request;\n }\n\n /**\n * Gets the translated value of a key (or an array of keys)\n * @returns the translated key, or an object of translated keys\n */\n public get(key: string) {\n this.loadComponentTranslations(key.split('.')[0]);\n return this.translateService.get(key);\n }\n\n /**\n * Internal method to load translations from JSON files\n * @param component - Component or translation namespace\n * @param lang - Language code to load translations for\n */\n private loadTranslations(component: string, lang: string): Observable<unknown> {\n const key = `${component}.${lang}`;\n if (this.loadedTranslations.has(key)) {\n return of(null);\n }\n\n // Translations bundled with the component - no HTTP request needed.\n const staticTranslations = L10nService.staticTranslations.get(component);\n if (staticTranslations) {\n const translations = staticTranslations[lang];\n if (translations) {\n this.mergeTranslation(lang, translations);\n }\n return of(null);\n }\n\n const loading = this.loadingTranslations.get(key);\n if (loading) {\n return loading;\n }\n\n const request = this.httpClient.get(`./assets/i18n/${component}.${lang}.json`).pipe(\n tap((translations) => {\n this.mergeTranslation(lang, translations as TranslationObject);\n this.loadedTranslations.add(key);\n this.loadingTranslations.delete(key);\n }),\n shareReplay(1)\n );\n\n this.loadingTranslations.set(key, request);\n request.subscribe({\n error: (e) => {\n this.loadingTranslations.delete(key);\n console.error(`No translations found for ${component}.${lang}.json`);\n console.error(e);\n }\n });\n\n return request;\n }\n\n /**\n * Merges a translation dictionary into the dictionary of the given language\n * @param lang - Language code\n * @param translations - Translations to merge\n */\n private mergeTranslation(lang: string, translations: TranslationObject): void {\n const current = this.translateService.translations[lang] || {};\n this.translateService.setTranslation(lang, { ...current, ...translations }, true);\n }\n\n /**\n * Changes the lang currently used\n */\n use(selectedLanguage: string, key: string = null) {\n if (key) {\n this.get(key);\n }\n this.translateService.use(selectedLanguage);\n }\n\n init(languages: LanguageDto[]) {\n this.availableLanguages = languages;\n this.translateService.addLangs(languages.map((x) => x.code));\n const lang = this.layoutService.language() ? this.layoutService.language() : 'en';\n this.translateService.setDefaultLang(lang);\n this.translateService.use(lang).subscribe(() => {\n this.loadComponentTranslations('app-info');\n this.translateService.get('primeng').subscribe((res) => this.primeNg.setTranslation(res));\n });\n }\n\n instant(key: string | string[], interpolateParams?: InterpolationParameters): Translation | TranslationObject {\n return this.translateService.instant(key, interpolateParams);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, OnDestroy, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, ReplaySubject, firstValueFrom, of } from 'rxjs';\nimport { catchError, distinctUntilChanged, filter, tap } from 'rxjs/operators';\n\ntype RefreshCustomParams = { [key: string]: string | number | boolean };\n\nexport type AuthSessionRefreshResult = {\n isAuthenticated: boolean;\n userData: any;\n};\n\nexport type AuthCsrfToken = {\n token: string;\n headerName: string;\n};\n\ntype AuthSessionResponse = {\n isAuthenticated: boolean;\n userName?: string;\n displayName?: string;\n email?: string;\n roles: string[];\n};\n\ntype CurrentUser = {\n userName?: string;\n displayName?: string;\n email?: string;\n roles: string[];\n preferred_username?: string;\n name?: string;\n given_name?: string;\n family_name?: string;\n};\n\nexport abstract class SecurityService {\n abstract auth(): void;\n\n abstract logout(): void;\n\n abstract isAuthenticated(): Observable<boolean>;\n\n abstract getAccessToken(): Observable<string>;\n\n abstract isTokenExpired(): Observable<boolean>;\n\n abstract getCurrentUser(): any;\n\n abstract getCurrentUser$(): Observable<any>;\n\n abstract forceRefreshSession(\n customParams?: RefreshCustomParams,\n configId?: string\n ): Observable<AuthSessionRefreshResult>;\n\n abstract getCsrfToken(): Observable<AuthCsrfToken | null>;\n\n abstract isAdmin(): boolean;\n\n abstract authorize(returnUrl?: string): void;\n\n abstract payload: BehaviorSubject<any>;\n}\n\n@Injectable()\nexport class BffSecurityService implements OnDestroy, SecurityService {\n public static readonly authorizeAfterLogoutReturnUrlKey = 'oip.authorizeAfterLogoutReturnUrl';\n\n private readonly http = inject(HttpClient);\n private readonly authenticated = new BehaviorSubject<boolean | null>(null);\n private readonly currentUser = new BehaviorSubject<any>(null);\n private readonly csrfToken = new ReplaySubject<AuthCsrfToken | null>(1);\n\n public readonly payload = new BehaviorSubject<any>(null);\n\n auth(): void {\n this.http\n .get<AuthSessionResponse>(this.buildUrl('api/security/get-current-auth-session'), {\n withCredentials: true\n })\n .pipe(\n tap((session) => this.applySession(session)),\n catchError(() => {\n this.applyAnonymousSession();\n return of(null);\n })\n )\n .subscribe();\n }\n\n logout(): void {\n firstValueFrom(this.getCsrfToken()).then((csrfToken) => {\n this.storeAuthorizeAfterLogoutReturnUrl();\n\n const form = this.createPostForm(this.buildUrl('api/security/delete-auth-session'));\n if (csrfToken?.token) {\n const tokenInput = document.createElement('input');\n tokenInput.type = 'hidden';\n tokenInput.name = '__RequestVerificationToken';\n tokenInput.value = csrfToken.token;\n form.appendChild(tokenInput);\n }\n document.body.appendChild(form);\n form.submit();\n });\n }\n\n isAuthenticated(): Observable<boolean> {\n return this.authenticated.asObservable().pipe(\n filter((value): value is boolean => value !== null),\n distinctUntilChanged()\n );\n }\n\n getAccessToken(): Observable<string> {\n return of('');\n }\n\n isTokenExpired(): Observable<boolean> {\n return of(false);\n }\n\n getCurrentUser(): any {\n return this.currentUser.getValue();\n }\n\n getCurrentUser$(): Observable<any> {\n return this.currentUser.asObservable();\n }\n\n forceRefreshSession(): Observable<AuthSessionRefreshResult> {\n this.auth();\n return of({\n isAuthenticated: this.authenticated.getValue() === true,\n userData: this.currentUser.getValue()\n });\n }\n\n getCsrfToken(): Observable<AuthCsrfToken | null> {\n this.http\n .get<AuthCsrfToken>(this.buildUrl('api/security/get-auth-csrf-token'), {\n withCredentials: true\n })\n .pipe(catchError(() => of(null)))\n .subscribe((token) => this.csrfToken.next(token));\n\n return this.csrfToken.asObservable();\n }\n\n isAdmin(): boolean {\n return this.payload.getValue()?.realm_access?.roles?.includes('admin') ?? false;\n }\n\n authorize(returnUrl?: string): void {\n const normalizedReturnUrl = this.normalizeReturnUrl(returnUrl);\n this.replaceWithUnauthorizedUrl(normalizedReturnUrl);\n\n const form = this.createPostForm(this.buildUrl('api/security/create-auth-session'));\n document.body.appendChild(form);\n form.submit();\n }\n\n ngOnDestroy(): void {\n this.authenticated.complete();\n this.currentUser.complete();\n this.payload.complete();\n }\n\n private applySession(session: AuthSessionResponse): void {\n const roles = session.roles ?? [];\n const user = this.createCurrentUser(session, roles);\n\n this.authenticated.next(session.isAuthenticated);\n this.currentUser.next(user);\n this.payload.next({ realm_access: { roles }, ...user });\n }\n\n private createCurrentUser(session: AuthSessionResponse, roles: string[]): CurrentUser {\n const displayName = session.displayName || session.userName || session.email;\n const nameParts = this.splitDisplayName(displayName);\n\n return {\n userName: session.userName,\n displayName,\n email: session.email,\n roles,\n preferred_username: session.userName,\n name: displayName,\n given_name: nameParts.givenName,\n family_name: nameParts.familyName\n };\n }\n\n private splitDisplayName(displayName?: string): { givenName?: string; familyName?: string } {\n const parts = displayName?.trim().split(/\\s+/).filter(Boolean) ?? [];\n\n return {\n givenName: parts[0],\n familyName: parts.length > 1 ? parts.slice(1).join(' ') : undefined\n };\n }\n\n private applyAnonymousSession(): void {\n this.authenticated.next(false);\n this.currentUser.next(null);\n this.payload.next(null);\n this.csrfToken.next(null);\n }\n\n private createPostForm(action: string): HTMLFormElement {\n const form = document.createElement('form');\n form.method = 'post';\n form.action = action;\n form.style.display = 'none';\n return form;\n }\n\n private normalizeReturnUrl(returnUrl?: string): string {\n const candidate = returnUrl?.trim();\n if (!candidate || /[\\u0000-\\u001f\\u007f\\\\]/.test(candidate)) {\n return '/';\n }\n\n if (!candidate.startsWith('/') || candidate.startsWith('//')) {\n return '/';\n }\n\n try {\n const url = new URL(candidate, window.location.origin);\n if (url.origin !== window.location.origin) {\n return '/';\n }\n\n const normalizedUrl = `${url.pathname}${url.search}${url.hash}`;\n return normalizedUrl.startsWith('/unauthorized') ? '/' : normalizedUrl;\n } catch {\n return '/';\n }\n }\n\n private replaceWithUnauthorizedUrl(returnUrl: string): void {\n const unauthorizedUrl = new URL('unauthorized', this.getBaseUrl());\n unauthorizedUrl.searchParams.set('returnUrl', returnUrl);\n\n history.replaceState(history.state, '', `${unauthorizedUrl.pathname}${unauthorizedUrl.search}`);\n }\n\n private storeAuthorizeAfterLogoutReturnUrl(): void {\n sessionStorage.setItem(\n BffSecurityService.authorizeAfterLogoutReturnUrlKey,\n this.normalizeReturnUrl(`${window.location.pathname}${window.location.search}${window.location.hash}`)\n );\n }\n\n private buildUrl(path: string): string {\n return `${this.getBaseUrl()}${path}`;\n }\n\n private getBaseUrl(): string {\n const baseUrl = document.getElementsByTagName('base')[0].href;\n return baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`;\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { inject, Injectable } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { firstValueFrom } from \"rxjs\";\nimport { LayoutService } from \"../services/app.layout.service\";\nimport { SecurityService } from \"../services/security.service\";\n\nexport type QueryParamsType = Record<string | number, any>;\nexport type ResponseFormat = keyof Omit<Body, \"body\" | \"bodyUsed\">;\n\nexport interface FullRequestParams extends Omit<RequestInit, \"body\"> {\n /** set parameter to `true` for call `securityWorker` for this request */\n secure?: boolean;\n /** request path */\n path: string;\n /** content type of request body */\n type?: ContentType;\n /** query params */\n query?: QueryParamsType;\n /** format of response (i.e. response.json() -> format: \"json\") */\n format?: ResponseFormat;\n /** request body */\n body?: unknown;\n /** base url */\n baseUrl?: string;\n /** request cancellation token */\n cancelToken?: CancelToken;\n}\n\nexport type RequestParams = Omit<\n FullRequestParams,\n \"body\" | \"method\" | \"query\" | \"path\"\n>;\n\nexport interface ApiConfig<SecurityDataType = unknown> {\n baseUrl?: string;\n baseApiParams?: Omit<RequestParams, \"baseUrl\" | \"cancelToken\" | \"signal\">;\n securityWorker?: (\n securityData: SecurityDataType | null,\n ) => Promise<RequestParams | void> | RequestParams | void;\n customFetch?: typeof fetch;\n}\n\nexport interface HttpResponse<D extends unknown, E extends unknown = unknown>\n extends Response {\n data: D;\n error: E;\n}\n\ntype CancelToken = Symbol | string | number;\n\nexport enum ContentType {\n Json = \"application/json\",\n JsonApi = \"application/vnd.api+json\",\n FormData = \"multipart/form-data\",\n UrlEncoded = \"application/x-www-form-urlencoded\",\n Text = \"text/plain\",\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class HttpClient<SecurityDataType = unknown> {\n protected securityService = inject(SecurityService);\n protected layoutService = inject(LayoutService);\n protected router = inject(Router);\n public baseUrl: string = \"\";\n private securityWorker?: ApiConfig<SecurityDataType>[\"securityWorker\"] =\n () => {\n const moduleInstanceId = this.getCurrentModuleInstanceId();\n return {\n headers: {\n \"Accept-language\": this.layoutService.language()\n ? this.layoutService.language()\n : \"en\",\n \"X-Timezone\": this.layoutService.timeZone(),\n ...(moduleInstanceId != null\n ? { \"X-Module-Instance-Id\": String(moduleInstanceId) }\n : {}),\n },\n };\n };\n\n /**\n * Reads the module instance id of the deepest activated route.\n * The backend uses it to check module instance rights on endpoints that do not carry the id in their contract.\n */\n protected getCurrentModuleInstanceId(): number | undefined {\n // May run before the first navigation completes, when route snapshots are not available yet.\n let route: ActivatedRoute | null | undefined =\n this.router.routerState?.root;\n let id: string | null = null;\n\n while (route) {\n id = route.snapshot?.paramMap?.get(\"id\") ?? id;\n route = route.firstChild;\n }\n\n const parsed = id != null ? Number(id) : Number.NaN;\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n\n private abortControllers = new Map<CancelToken, AbortController>();\n private customFetch = (...fetchParams: Parameters<typeof fetch>) =>\n fetch(...fetchParams);\n\n private baseApiParams: RequestParams = {\n credentials: \"same-origin\",\n headers: {},\n redirect: \"follow\",\n referrerPolicy: \"no-referrer\",\n };\n\n public setSecurityData = (data: SecurityDataType | null) => {};\n\n protected encodeQueryParam(key: string, value: any) {\n const encodedKey = encodeURIComponent(key);\n return `${encodedKey}=${encodeURIComponent(typeof value === \"number\" ? value : `${value}`)}`;\n }\n\n protected addQueryParam(query: QueryParamsType, key: string) {\n return this.encodeQueryParam(key, query[key]);\n }\n\n protected addArrayQueryParam(query: QueryParamsType, key: string) {\n const value = query[key];\n return value.map((v: any) => this.encodeQueryParam(key, v)).join(\"&\");\n }\n\n protected toQueryString(rawQuery?: QueryParamsType): string {\n const query = rawQuery || {};\n const keys = Object.keys(query).filter(\n (key) => \"undefined\" !== typeof query[key],\n );\n return keys\n .map((key) =>\n Array.isArray(query[key])\n ? this.addArrayQueryParam(query, key)\n : this.addQueryParam(query, key),\n )\n .join(\"&\");\n }\n\n protected addQueryParams(rawQuery?: QueryParamsType): string {\n const queryString = this.toQueryString(rawQuery);\n return queryString ? `?${queryString}` : \"\";\n }\n\n private contentFormatters: Record<ContentType, (input: any) => any> = {\n [ContentType.Json]: (input: any) =>\n input !== null && (typeof input === \"object\" || typeof input === \"string\")\n ? JSON.stringify(input)\n : input,\n [ContentType.JsonApi]: (input: any) =>\n input !== null && (typeof input === \"object\" || typeof input === \"string\")\n ? JSON.stringify(input)\n : input,\n [ContentType.Text]: (input: any) =>\n input !== null && typeof input !== \"string\"\n ? JSON.stringify(input)\n : input,\n [ContentType.FormData]: (input: any) => {\n if (input instanceof FormData) {\n return input;\n }\n\n return Object.keys(input || {}).reduce((formData, key) => {\n const property = input[key];\n formData.append(\n key,\n property instanceof Blob\n ? property\n : typeof property === \"object\" && property !== null\n ? JSON.stringify(property)\n : `${property}`,\n );\n return formData;\n }, new FormData());\n },\n [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input),\n };\n\n protected mergeRequestParams(\n params1: RequestParams,\n params2?: RequestParams,\n ): RequestParams {\n return {\n ...this.baseApiParams,\n ...params1,\n ...(params2 || {}),\n headers: {\n ...(this.baseApiParams.headers || {}),\n ...(params1.headers || {}),\n ...((params2 && params2.headers) || {}),\n },\n };\n }\n\n protected createAbortSignal = (\n cancelToken: CancelToken,\n ): AbortSignal | undefined => {\n if (this.abortControllers.has(cancelToken)) {\n const abortController = this.abortControllers.get(cancelToken);\n if (abortController) {\n return abortController.signal;\n }\n return void 0;\n }\n\n const abortController = new AbortController();\n this.abortControllers.set(cancelToken, abortController);\n return abortController.signal;\n };\n\n public abortRequest = (cancelToken: CancelToken) => {\n const abortController = this.abortControllers.get(cancelToken);\n\n if (abortController) {\n abortController.abort();\n this.abortControllers.delete(cancelToken);\n }\n };\n\n public request = async <T = any, E = any>({\n body,\n secure,\n path,\n type,\n query,\n format,\n baseUrl,\n cancelToken,\n ...params\n }: FullRequestParams): Promise<T> => {\n const secureParams =\n ((typeof secure === \"boolean\" ? secure : this.baseApiParams.secure) &&\n this.securityWorker &&\n (await this.securityWorker(null))) ||\n {};\n const csrfParams = await this.getCsrfRequestParams(params.method, path);\n const requestParams = this.mergeRequestParams(\n this.mergeRequestParams(params, secureParams),\n csrfParams,\n );\n const queryString = query && this.toQueryString(query);\n const payloadFormatter = this.contentFormatters[type || ContentType.Json];\n let responseFormat = format || requestParams.format;\n\n return this.customFetch(\n `${baseUrl || this.baseUrl || \"\"}${path}${queryString ? `?${queryString}` : \"\"}`,\n {\n ...requestParams,\n headers: {\n ...(requestParams.headers || {}),\n ...(type && type !== ContentType.FormData\n ? { \"Content-Type\": type }\n : {}),\n },\n signal:\n (cancelToken\n ? this.createAbortSignal(cancelToken)\n : requestParams.signal) || null,\n body:\n typeof body === \"undefined\" || body === null\n ? null\n : payloadFormatter(body),\n },\n ).then(async (response) => {\n const r = response as HttpResponse<T, E>;\n r.data = null as unknown as T;\n r.error = null as unknown as E;\n\n if (typeof E !== undefined && responseFormat === undefined)\n responseFormat = \"json\";\n\n const responseToParse = responseFormat ? response.clone() : response;\n const data = !responseFormat\n ? r\n : await responseToParse[responseFormat]()\n .then((data) => {\n if (r.ok) {\n r.data = data;\n } else {\n r.error = data;\n }\n return r;\n })\n .catch((e) => {\n r.error = e;\n return r;\n });\n\n if (cancelToken) {\n this.abortControllers.delete(cancelToken);\n }\n\n if (!response.ok) {\n this.authorizeOnUnauthorized(response, path);\n throw data;\n }\n return data.data;\n });\n };\n\n private authorizeOnUnauthorized(response: Response, path: string): void {\n if (\n response.status !== 401 ||\n path.includes(\"/api/security/create-auth-session\")\n ) {\n return;\n }\n\n this.securityService.authorize(\n `${window.location.pathname}${window.location.search}${window.location.hash}`,\n );\n }\n\n private async getCsrfRequestParams(\n method: string | undefined,\n path: string,\n ): Promise<RequestParams> {\n if (\n !method ||\n ![\"POST\", \"PUT\", \"PATCH\", \"DELETE\"].includes(method.toUpperCase())\n ) {\n return {};\n }\n\n if (\n path.includes(\"/api/security/create-auth-session\") ||\n path.includes(\"/api/security/get-auth-csrf-token\")\n ) {\n return {};\n }\n\n const csrfToken = await firstValueFrom(this.securityService.getCsrfToken());\n return csrfToken?.token\n ? { headers: { [csrfToken.headerName]: csrfToken.token } }\n : {};\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n DestroyRef,\n effect,\n inject,\n OnDestroy,\n OnInit,\n signal,\n WritableSignal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TopBarDto } from '../../dtos/top-bar.dto';\nimport { TopBarService } from '../../services/top-bar.service';\nimport { MsgService } from '../../services/msg.service';\nimport { ActivatedRoute } from '@angular/router';\nimport { InterpolationParameters, TranslateService, Translation, TranslationObject } from '@ngx-translate/core';\nimport { from, Observable, Subject, Subscription } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { AppTitleService } from '../../services/app-title.service';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { L10nService, TranslationsByLang } from '../../services/l10n.service';\nimport { SecurityDto } from '../../dtos/security.dto';\nimport { SecurityService } from '../../services/security.service';\nimport { ContentType, HttpClient } from '../../api/http-client';\nimport { PutSecurityDto } from '../../dtos/put-security.dto';\nimport { ApiExceptionResponse } from '../../api/data-contracts';\n\nimport en from './l10n/base-module.en.json';\nimport ru from './l10n/base-module.ru.json';\n\nL10nService.registerTranslations({ en, ru });\n\ninterface BaseComponentLocalization {\n security: string;\n settings: string;\n content: string;\n}\n\n@Component({standalone: true, template: ''})\nexport abstract class BaseModuleComponent<TBackendStoreSettings, TLocalStoreSettings> implements OnInit, OnDestroy {\n private static readonly readRight = 'read';\n private static readonly editRight = 'edit';\n private static readonly deleteRight = 'delete';\n\n protected isInitialized = false;\n protected moduleInstanceReloadPromise: Promise<void> = Promise.resolve();\n protected rightsSubscription?: Subscription;\n protected securityRoles: string[] = [];\n protected securitySettings: SecurityDto[] = [];\n protected readonly destroyRef = inject(DestroyRef);\n protected readonly securityService = inject(SecurityService);\n protected readonly httpClient = inject(HttpClient);\n\n /**\n * Provide access to app settings\n */\n public readonly layoutService = inject(LayoutService);\n /**\n * Provides access to topbar related functionality, such as managing visibility and content.\n * @type {TopBarService}\n */\n public readonly topBarService: TopBarService = inject(TopBarService);\n\n /**\n * Provides access to information about the current route.\n * This includes route parameters, data, and the route's path.\n */\n public readonly route: ActivatedRoute = inject(ActivatedRoute);\n\n /**\n * Provides access to messaging services.\n */\n public readonly msgService = inject(MsgService);\n\n /**\n * Provides access to translation functionality.\n */\n public readonly translateService = inject(TranslateService);\n\n /**\n * Provides access to the application's title service.\n */\n public readonly appTitleService = inject(AppTitleService);\n\n /**\n * Reference to the ChangeDetector. Used to trigger change detection manually.\n */\n private changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n /**\n * Represents a subscription to an observable.\n * Manages the lifecycle of receiving data from the observable and allows unsubscribing to stop receiving data.\n * @type {Subscription}\n */\n public subscriptions: Subscription[] = [];\n /**\n * Configuration object for backend storage\n * @type {TBackendStoreSettings}\n */\n public settings: TBackendStoreSettings = {} as TBackendStoreSettings;\n\n /**\n * Configuration object for local storage.\n * @type {TLocalStoreSettings}\n */\n public _localSettings: TLocalStoreSettings = {} as TLocalStoreSettings;\n\n /**\n * A signal representing the local application settings. Changes to this signal\n * propagate updates to the underlying local store settings.\n * @type {WritableSignal<TLocalStoreSettings>}\n */\n public localSettings: WritableSignal<TLocalStoreSettings> = signal<TLocalStoreSettings>(this._localSettings);\n\n /**\n * A Subject emitting updates to local store settings. Observables can subscribe to this Subject to react to changes in local settings.\n * @type {Subject<TLocalStoreSettings>}\n */\n public localSettingsUpdate: Subject<TLocalStoreSettings> = new Subject<TLocalStoreSettings>();\n\n /**\n * The title of the component. Get from Title in ngOnInit\n * @type {string}\n */\n public title: string;\n /**\n * Translations bundled with the component, grouped by language code.\n * Declare it in a derived component to load translations from the component folder\n * instead of `assets/i18n`:\n *\n * ```ts\n * static override readonly translations = { en, ru };\n * ```\n */\n public static readonly translations: TranslationsByLang | undefined;\n\n public l10nService = inject(L10nService);\n public l10n$: Observable<Translation | TranslationObject>;\n public canRead = false;\n public canEdit = false;\n public canDelete = false;\n public securityRightsLoaded = false;\n\n /**\n * Updates local settings and persists them to local storage.\n * @return {void}\n */\n private onConfigUpdate(): void {\n if (Object.keys(this.localSettings()).length > 0) {\n this._localSettings = {...this.localSettings()};\n this.localSettingsUpdate.next(this._localSettings);\n localStorage.setItem(`Instance_${this.id}`, JSON.stringify(this._localSettings));\n }\n }\n\n private getLocalStorageSettings() {\n try {\n const localStorageSettingsString = localStorage.getItem(`Instance_${this.id}`);\n if (localStorageSettingsString != null) {\n this.localSettings.set(JSON.parse(localStorageSettingsString) as TLocalStoreSettings);\n } else {\n this.localSettings.set({} as TLocalStoreSettings);\n }\n } catch (error) {\n this.msgService.error(error, 'Error parsing layoutConfig:');\n this.localSettings.set({} as TLocalStoreSettings);\n }\n }\n\n /**\n * A unique numerical identifier for the module.\n * @type {number}\n */\n id: number | undefined = undefined;\n\n /**\n * The name of the controller currently handling the request.\n * @type {string}\n */\n controller: string;\n\n /**\n * Checks if the content ID is present.\n * @returns {boolean} True if the content ID is present, false otherwise.\n */\n get isContent(): boolean {\n return this.topBarService.checkId('content');\n }\n\n /**\n * Checks if the settings ID is present.\n * @returns {boolean} True if the settings ID is present, false otherwise.\n */\n get isSettings(): boolean {\n return this.topBarService.checkId('settings');\n }\n\n /**\n * Checks if the security ID is present.\n * @returns {boolean} True if the security ID is present, false otherwise.\n */\n get isSecurity(): boolean {\n return this.topBarService.checkId('security');\n }\n\n /**\n * Defines the top bar items.\n */\n public topBarItems: TopBarDto[] = [\n {id: 'content', icon: 'pi-box', caption: ''},\n {id: 'settings', icon: 'pi-cog', caption: ''},\n {id: 'security', icon: 'pi-lock', caption: ''}\n ];\n\n /**\n * Gets an instant translation for a key or an array of keys.\n */\n public t(key: string | string[], interpolateParams?: InterpolationParameters): Translation | TranslationObject {\n return this.translateService.instant(key, interpolateParams);\n }\n\n /**\n * Checks whether the current user has the specified security right.\n */\n public hasRight(code: string): boolean {\n return this.hasSecurityRight(this.securityRoles, this.securitySettings, code);\n }\n\n /**\n * Initializes the component and subscribes to local settings updates.\n */\n constructor() {\n // Must run before the route subscription below asks L10nService for the translations.\n L10nService.registerTranslations((this.constructor as typeof BaseModuleComponent).translations);\n this.l10nService.get('baseComponent');\n effect(() => {\n const config = this.localSettings();\n if (config) {\n this.onConfigUpdate();\n }\n });\n this.subscriptions.push(\n this.route.url.subscribe((url) => {\n this.controller = url[0].path;\n // The route path is the translation namespace, register it before asking for translations.\n L10nService.registerTranslations((this.constructor as typeof BaseModuleComponent).translations, this.controller);\n this.l10n$ = this.l10nService.get(this.controller);\n })\n );\n this.subscriptions.push(\n this.route.paramMap.subscribe((params) => {\n const routeId = params.get('id');\n const nextId = routeId != null ? +routeId : undefined;\n const idChanged = this.id !== nextId;\n\n this.id = nextId;\n this.getLocalStorageSettings();\n\n if (this.isInitialized && idChanged) {\n void this.reloadModuleInstance();\n }\n })\n );\n }\n\n /**\n * Lifecycle hook that is called when a component is destroyed.\n * Unsubscribes from all subscriptions to prevent memory leaks,\n * resets the top bar items to an empty array, and sets the active ID\n * to the ID of the first top bar item (if available).\n */\n ngOnDestroy() {\n this.topBarService.setTopBarItems([]);\n this.topBarService.activeId = this.topBarItems[0].id;\n this.rightsSubscription?.unsubscribe();\n this.subscriptions.forEach((s) => s.unsubscribe());\n }\n\n /**\n * Initializes the component. Subscribes to translation service to set captions for top bar items,\n * sets the top bar items via the top bar service, sets the active ID,\n * subscribes to route parameters to get the ID, and retrieves settings.\n * @return {Promise<void>} A promise that resolves when the initialization is complete.\n */\n async ngOnInit(): Promise<void> {\n this.subscriptions.push(\n this.translateService.stream('baseComponent').subscribe((value: BaseComponentLocalization) => {\n this.topBarItems.forEach((item) => {\n item.caption = value[item.id];\n });\n })\n );\n\n this.topBarService.setTopBarItems(this.topBarItems);\n this.topBarService.activeId = this.topBarItems[0].id;\n\n this.isInitialized = true;\n await this.reloadModuleInstance();\n\n this.subscriptions.push(\n this.appTitleService.title$.subscribe((title) => {\n this.title = title;\n this.changeDetectorRef.detectChanges();\n })\n );\n }\n\n /**\n * Retrieves module instance settings.\n * @return {Promise<void>} A promise that resolves when settings are retrieved.\n */\n async getSettings(): Promise<void> {\n try {\n if (this.id == null) {\n return;\n }\n\n this.settings = await this.getModuleInstanceSettings<TBackendStoreSettings>();\n } catch (error) {\n this.msgService.error(error);\n }\n }\n\n /**\n * Saves the provided settings to the backend.\n * @param {TLocalStoreSettings} settings - The settings object to save.\n * @return {Promise<void>} A promise that resolves when the settings are saved. Reject if an error occurs.\n */\n async saveSettings(settings: TBackendStoreSettings): Promise<void> {\n if (this.id == null) {\n this.msgService.error('Module id not passed!');\n return;\n }\n\n await this.saveModuleInstanceSettings({\n id: this.id,\n settings: settings\n })\n .then(() => {\n this.msgService.success(this.translateService.instant('baseComponent.success'));\n })\n .catch((error) => {\n this.msgService.error(error);\n });\n }\n\n /**\n * Called whenever the module instance changes, including the first load.\n * Derived components can override this to refresh module-specific data.\n */\n protected async onModuleInstanceChange(): Promise<void> {\n }\n\n /**\n * Called whenever current user rights for the active module instance are recalculated.\n */\n protected onSecurityRightsChange(): void {\n }\n\n /**\n * Starts watching current token roles and maps them to module instance security settings.\n */\n protected watchSecurityRights(controller: string = this.controller, id: number | undefined = this.id): Promise<void> {\n this.rightsSubscription?.unsubscribe();\n this.resetRightsState();\n\n if (!controller || id == null) {\n return Promise.resolve();\n }\n\n return new Promise<void>((resolve) => {\n let settled = false;\n const settle = () => {\n if (!settled) {\n settled = true;\n resolve();\n }\n };\n\n this.rightsSubscription = this.securityService.payload\n .pipe(\n switchMap((payload) =>\n from(this.getSecurity(controller, id)).pipe(map((securitySettings) => ({payload, securitySettings})))\n ),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe({\n next: ({payload, securitySettings}) => {\n const roles = payload?.realm_access?.roles ?? [];\n this.updateRightsState(roles, securitySettings);\n settle();\n },\n error: (error) => {\n this.securityRightsLoaded = true;\n console.error('Не удалось загрузить права', error);\n this.onSecurityRightsChange();\n settle();\n }\n });\n });\n }\n\n private resetRightsState(): void {\n this.canRead = false;\n this.canEdit = false;\n this.canDelete = false;\n this.securityRightsLoaded = false;\n this.securityRoles = [];\n this.securitySettings = [];\n }\n\n private updateRightsState(roles: string[], securitySettings: SecurityDto[]): void {\n this.securityRoles = roles;\n this.securitySettings = securitySettings;\n this.canRead = this.hasSecurityRight(roles, securitySettings, BaseModuleComponent.readRight);\n this.canEdit = this.hasSecurityRight(roles, securitySettings, BaseModuleComponent.editRight);\n this.canDelete = this.hasSecurityRight(roles, securitySettings, BaseModuleComponent.deleteRight);\n this.securityRightsLoaded = true;\n this.onSecurityRightsChange();\n }\n\n protected hasSecurityRight(roles: string[], securitySettings: SecurityDto[], code: string): boolean {\n return (\n securitySettings.find((security) => security.code === code)?.roles?.some((role) => roles.includes(role)) ?? false\n );\n }\n\n protected getSecurity(controller: string = this.controller, id: number | undefined = this.id): Promise<SecurityDto[]> {\n if (!controller || id == null) {\n return Promise.resolve([]);\n }\n\n return this.httpClient.request<SecurityDto[], ApiExceptionResponse>({\n path: `/api/${controller}/get-security`,\n method: 'GET',\n secure: true,\n format: 'json'\n });\n }\n\n protected saveSecurity(request: PutSecurityDto, controller: string = this.controller): Promise<unknown> {\n return this.httpClient.request<unknown, ApiExceptionResponse>({\n path: `/api/${controller}/put-security`,\n method: 'PUT',\n body: request,\n secure: true,\n type: ContentType.Json\n });\n }\n\n protected getModuleInstanceSettings<TSettings>(controller: string = this.controller): Promise<TSettings> {\n return this.httpClient.request<TSettings, ApiExceptionResponse>({\n path: `/api/${controller}/get-module-instance-settings`,\n method: 'GET',\n secure: true,\n format: 'json'\n });\n }\n\n protected saveModuleInstanceSettings<TSettings>(\n request: { id: number; settings: TSettings },\n controller: string = this.controller\n ): Promise<unknown> {\n return this.httpClient.request<unknown, ApiExceptionResponse>({\n path: `/api/${controller}/put-module-instance-settings`,\n method: 'PUT',\n body: request,\n secure: true,\n type: ContentType.Json\n });\n }\n\n protected getMigrations<TMigration>(controller: string = this.controller): Promise<TMigration[]> {\n return this.httpClient.request<TMigration[], ApiExceptionResponse>({\n path: `/api/${controller}/get-migrations`,\n method: 'GET',\n secure: true,\n format: 'json'\n });\n }\n\n protected applyModuleMigration(request: unknown, controller: string = this.controller): Promise<unknown> {\n return this.httpClient.request<unknown, ApiExceptionResponse>({\n path: `/api/${controller}/apply-migration`,\n method: 'POST',\n body: request,\n secure: true,\n type: ContentType.Json\n });\n }\n\n private async reloadModuleInstance(): Promise<void> {\n this.moduleInstanceReloadPromise = this.moduleInstanceReloadPromise.then(async () => {\n // Rights first: the backend rejects settings and data requests without the read right.\n await this.watchSecurityRights();\n if (!this.canRead) {\n return;\n }\n\n await this.getSettings();\n await this.onModuleInstanceChange();\n });\n\n await this.moduleInstanceReloadPromise;\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n ApiExceptionResponse,\n AuthCsrfTokenResponse,\n AuthSessionResponse,\n} from \"./data-contracts\";\nimport { HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class SecurityApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getCurrentAuthSession = (params: RequestParams = {}) =>\n this.request<AuthSessionResponse, ApiExceptionResponse>({\n path: `/api/security/get-current-auth-session`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n createAuthSession = (params: RequestParams = {}) =>\n this.request<any, void | ApiExceptionResponse>({\n path: `/api/security/create-auth-session`,\n method: \"POST\",\n secure: true,\n ...params,\n });\n deleteAuthSession = (params: RequestParams = {}) =>\n this.request<any, void | ApiExceptionResponse>({\n path: `/api/security/delete-auth-session`,\n method: \"POST\",\n secure: true,\n ...params,\n });\n getAuthCsrfToken = (params: RequestParams = {}) =>\n this.request<AuthCsrfTokenResponse, ApiExceptionResponse>({\n path: `/api/security/get-auth-csrf-token`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n getRealmRoles = (params: RequestParams = {}) =>\n this.request<string[], any>({\n path: `/api/security/get-realm-roles`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","import { Component, inject, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { ButtonModule } from 'primeng/button';\nimport { FormsModule } from '@angular/forms';\nimport { MsgService } from '../../services/msg.service';\nimport { PutSecurityDto } from '../../dtos/put-security.dto';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { ContentType, HttpClient } from '../../api/http-client';\nimport { SecurityDto } from '../../dtos/security.dto';\nimport { SecurityApi } from '../../api/security.api';\nimport { L10nService } from '../../services/l10n.service';\n\nimport en from './l10n/security.en.json';\nimport ru from './l10n/security.ru.json';\n\nL10nService.registerTranslations({ en, ru });\n\n@Component({\n selector: 'security',\n template: `\n <div class=\"flex flex-col md:flex-row gap-8\">\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">\n {{ 'securityComponent.security' | translate }}\n </div>\n @for (item of securityData; track item.name) {\n <div class=\"flex flex-col gap-2\">\n <label htmlFor=\"oip-security-multiselect-{{ item.name }}\">\n {{ item.name }}\n <span class=\"pi pi-question-circle\" pTooltip=\"{{ item.description }}\" tooltipPosition=\"right\"></span>\n </label>\n <p-multiSelect\n id=\"oip-security-multiselect-{{ item.name }}\"\n placeholder=\"{{ 'securityComponent.selectRoles' | translate }}\"\n [maxSelectedLabels]=\"10\"\n [options]=\"roles\"\n [(ngModel)]=\"item.roles\" />\n </div>\n }\n <div class=\"flex justify-content-end flex-wrap\">\n <p-button\n icon=\"pi pi-save\"\n id=\"oip-security-save-button\"\n label=\"{{ 'securityComponent.save' | translate }}\"\n (click)=\"saveClick()\"\n (keydown)=\"saveKeyDown($event)\" />\n </div>\n </div>\n </div>\n </div>\n `,\n imports: [MultiSelectModule, TooltipModule, FormsModule, ButtonModule, TranslatePipe],\n standalone: true\n})\nexport class SecurityComponent implements OnChanges, OnInit, OnDestroy {\n private readonly msgService = inject(MsgService);\n private readonly translateService = inject(TranslateService);\n private readonly httpClient = inject(HttpClient);\n private readonly securityApi = inject(SecurityApi);\n private securityLoadToken = 0;\n\n securityData: SecurityDto[] = [];\n @Input() id?: number;\n @Input() controller?: string;\n roles: string[] = [];\n\n constructor(l10nService: L10nService) {\n l10nService.get('securityComponent');\n }\n\n ngOnDestroy(): void {\n // on destroy\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['id'] || changes['controller']) {\n void this.loadSecurity();\n }\n }\n\n ngOnInit(): void {\n this.securityApi.getRealmRoles().then(\n (result) => {\n this.roles = result;\n },\n (error) => this.msgService.error(error)\n );\n }\n\n saveClick() {\n if (this.id == null) {\n this.msgService.error('Module id not passed!');\n return;\n }\n if (!this.controller) {\n this.msgService.error('Controller not passed!');\n return;\n }\n\n const request: PutSecurityDto = {\n id: this.id,\n securities: this.securityData\n };\n this.saveSecurity(this.controller, request).then(\n (result) => {\n this.msgService.success(this.translateService.instant('securityComponent.savedSecurity'));\n },\n (error) => this.msgService.error(error)\n );\n }\n\n saveKeyDown($event: KeyboardEvent) {\n if ($event.key === 'Enter' || $event.key === 'Space') {\n this.saveClick();\n }\n }\n\n private async loadSecurity(): Promise<void> {\n const loadToken = ++this.securityLoadToken;\n const controller = this.controller;\n const id = this.id;\n\n this.securityData = [];\n\n if (!controller || id == null) {\n return;\n }\n\n try {\n const result = await this.getSecurity(controller);\n if (loadToken === this.securityLoadToken) {\n this.securityData = result;\n }\n } catch (error) {\n if (loadToken === this.securityLoadToken) {\n this.msgService.error(error);\n }\n }\n }\n\n private getSecurity(controller: string) {\n return this.httpClient.request<SecurityDto[]>({\n path: `/api/${controller}/get-security`,\n method: 'GET',\n secure: true,\n format: 'json'\n });\n }\n\n private saveSecurity(controller: string, request: PutSecurityDto) {\n return this.httpClient.request<unknown>({\n path: `/api/${controller}/put-security`,\n method: 'PUT',\n body: request,\n secure: true,\n type: ContentType.Json\n });\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport type { PaletteDesignToken, Preset } from '@primeuix/themes/types';\n\nexport interface AppThemePreset {\n id: string;\n label?: string;\n preset: Preset;\n primaryColors?: Record<string, PaletteDesignToken | undefined>;\n surfaceColors?: Record<string, PaletteDesignToken | undefined>;\n}\n\nexport type AppThemePresetMergeMode = 'mergeWithDefaults' | 'replaceDefaults';\n\nexport const APP_THEME_PRESETS = new InjectionToken<ReadonlyArray<AppThemePreset>>('APP_THEME_PRESETS', {\n factory: () => []\n});\n\nexport const APP_THEME_PRESETS_MERGE_MODE = new InjectionToken<AppThemePresetMergeMode>(\n 'APP_THEME_PRESETS_MERGE_MODE',\n {\n factory: () => 'mergeWithDefaults'\n }\n);\n","import { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { Component, computed, inject, PLATFORM_ID, signal, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { $t, updatePreset, updateSurfacePalette } from '@primeng/themes';\nimport type { PaletteDesignToken, Preset } from '@primeuix/themes/types';\nimport Aura from '@primeng/themes/aura';\nimport Lara from '@primeng/themes/lara';\nimport Nora from '@primeng/themes/nora';\nimport { PrimeNG } from 'primeng/config';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { APP_THEME_PRESETS, APP_THEME_PRESETS_MERGE_MODE, AppThemePreset } from '../../services/theme-presets.token';\nimport { L10nService } from '../../services/l10n.service';\n\nimport en from './l10n/app-configurator.en.json';\nimport ru from './l10n/app-configurator.ru.json';\n\nL10nService.registerTranslations({ en, ru });\n\nconst DEFAULT_THEME_PRESETS: ReadonlyArray<AppThemePreset> = [\n { id: 'Aura', label: 'Aura', preset: Aura as Preset },\n { id: 'Lara', label: 'Lara', preset: Lara as Preset },\n { id: 'Nora', label: 'Nora', preset: Nora as Preset }\n];\n\nconst PRIMARY_COLORS = [\n 'emerald',\n 'green',\n 'lime',\n 'orange',\n 'amber',\n 'yellow',\n 'teal',\n 'cyan',\n 'sky',\n 'blue',\n 'indigo',\n 'violet',\n 'purple',\n 'fuchsia',\n 'pink',\n 'rose'\n] as const;\n\ndeclare type SurfacesType = {\n name?: string;\n palette?: PaletteDesignToken;\n};\n\n@Component({\n selector: 'app-configurator',\n standalone: true,\n imports: [CommonModule, FormsModule, SelectButtonModule, TranslatePipe],\n template: `\n <div class=\"flex flex-col gap-4\">\n <div>\n <span class=\"text-sm text-muted-color font-semibold\">{{ 'app-configurator.primary' | translate }}</span>\n <div class=\"pt-2 flex gap-2 flex-wrap justify-start\">\n @for (primaryColor of primaryColors(); track primaryColor.name) {\n <button\n class=\"border-none w-5 h-5 rounded-full p-0 cursor-pointer outline-none outline-offset-1\"\n id=\"oip-app-configurator-primary-color-{{ primaryColor.name }}\"\n type=\"button\"\n [ngClass]=\"{\n 'outline-primary': primaryColor.name === selectedPrimaryColor()\n }\"\n [style]=\"{\n 'background-color': primaryColor?.name === 'noir' ? 'var(--text-color)' : primaryColor?.palette?.['500']\n }\"\n [title]=\"primaryColor.name\"\n (click)=\"updateColors($event, 'primary', primaryColor)\"></button>\n }\n </div>\n </div>\n <div>\n <span class=\"text-sm text-muted-color font-semibold\">{{ 'app-configurator.surface' | translate }}</span>\n <div class=\"pt-2 flex gap-2 flex-wrap justify-start\">\n @for (surface of surfaceColors(); track surface.name) {\n <button\n class=\"border-none w-5 h-5 rounded-full p-0 cursor-pointer outline-none outline-offset-1\"\n id=\"oip-app-configurator-surface-color-{{ surface.name }}\"\n type=\"button\"\n [ngClass]=\"{\n 'outline-primary': selectedSurfaceColor()\n ? selectedSurfaceColor() === surface.name\n : layoutService.layoutConfig().darkTheme\n ? surface.name === 'zinc'\n : surface.name === 'slate'\n }\"\n [style]=\"{\n 'background-color': surface?.name === 'noir' ? 'var(--text-color)' : surface?.palette?.['500']\n }\"\n [title]=\"surface.name\"\n (click)=\"updateColors($event, 'surface', surface)\"></button>\n }\n </div>\n </div>\n <div class=\"flex flex-col gap-2\">\n <span class=\"text-sm text-muted-color font-semibold\">{{ 'app-configurator.presets' | translate }}</span>\n <p-selectButton\n id=\"oip-app-configurator-preset-select-button\"\n optionLabel=\"label\"\n optionValue=\"value\"\n size=\"small\"\n [allowEmpty]=\"false\"\n [ngModel]=\"selectedPreset()\"\n [options]=\"presets\"\n (ngModelChange)=\"onPresetChange($event)\" />\n </div>\n @if (showMenuModeButton()) {\n <div class=\"flex flex-col gap-2\">\n <span class=\"text-sm text-muted-color font-semibold\">{{ 'app-configurator.menuMode' | translate }}</span>\n <p-selectButton\n id=\"oip-app-configurator-menu-mode-select-button\"\n size=\"small\"\n [allowEmpty]=\"false\"\n [ngModel]=\"menuMode()\"\n [options]=\"menuModeOptions\"\n (ngModelChange)=\"onMenuModeChange($event)\">\n <ng-template pTemplate=\"item\" let-item>\n {{ item.label | translate }}\n </ng-template>\n </p-selectButton>\n </div>\n }\n </div>\n `,\n host: {\n class:\n 'hidden absolute top-[3.25rem] right-0 w-72 p-4 bg-surface-0 dark:bg-surface-900 border border-surface rounded-border origin-top shadow-[0px_3px_5px_rgba(0,0,0,0.02),0px_0px_2px_rgba(0,0,0,0.05),0px_1px_4px_rgba(0,0,0,0.08)]'\n }\n})\nexport class AppConfiguratorComponent implements OnInit {\n router = inject(Router);\n\n config: PrimeNG = inject(PrimeNG);\n\n layoutService: LayoutService = inject(LayoutService);\n\n platformId = inject(PLATFORM_ID);\n\n primeng = inject(PrimeNG);\n\n private readonly injectedThemePresets = inject(APP_THEME_PRESETS);\n private readonly themePresetMergeMode = inject(APP_THEME_PRESETS_MERGE_MODE);\n\n private readonly themePresets = this.getThemePresets();\n\n private readonly themePresetsMap = new Map(this.themePresets.map((theme) => [theme.id, theme]));\n\n private readonly defaultThemePreset = this.themePresets[0] ?? DEFAULT_THEME_PRESETS[0];\n\n private readonly fallbackPrimaryColors = ((\n DEFAULT_THEME_PRESETS[0].preset as { primitive?: Record<string, PaletteDesignToken> }\n ).primitive ?? {}) as Record<string, PaletteDesignToken>;\n\n presets = this.themePresets.map((theme) => ({ label: theme.label ?? theme.id, value: theme.id }));\n\n showMenuModeButton = signal(!this.router.url.includes('auth'));\n\n menuModeOptions = [\n { label: 'app-configurator.menuModeStatic', value: 'static' },\n { label: 'app-configurator.menuModeOverlay', value: 'overlay' }\n ];\n\n constructor(l10nService: L10nService) {\n l10nService.get('app-configurator');\n }\n\n ngOnInit() {\n if (isPlatformBrowser(this.platformId)) {\n const presetId = this.ensureValidThemeId(this.layoutService.layoutConfig().preset);\n this.onPresetChange(presetId);\n }\n }\n\n surfaces: SurfacesType[] = [\n {\n name: 'slate',\n palette: {\n 0: '#ffffff',\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#0f172a',\n 950: '#020617'\n }\n },\n {\n name: 'gray',\n palette: {\n 0: '#ffffff',\n 50: '#f9fafb',\n 100: '#f3f4f6',\n 200: '#e5e7eb',\n 300: '#d1d5db',\n 400: '#9ca3af',\n 500: '#6b7280',\n 600: '#4b5563',\n 700: '#374151',\n 800: '#1f2937',\n 900: '#111827',\n 950: '#030712'\n }\n },\n {\n name: 'zinc',\n palette: {\n 0: '#ffffff',\n 50: '#fafafa',\n 100: '#f4f4f5',\n 200: '#e4e4e7',\n 300: '#d4d4d8',\n 400: '#a1a1aa',\n 500: '#71717a',\n 600: '#52525b',\n 700: '#3f3f46',\n 800: '#27272a',\n 900: '#18181b',\n 950: '#09090b'\n }\n },\n {\n name: 'neutral',\n palette: {\n 0: '#ffffff',\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#e5e5e5',\n 300: '#d4d4d4',\n 400: '#a3a3a3',\n 500: '#737373',\n 600: '#525252',\n 700: '#404040',\n 800: '#262626',\n 900: '#171717',\n 950: '#0a0a0a'\n }\n },\n {\n name: 'stone',\n palette: {\n 0: '#ffffff',\n 50: '#fafaf9',\n 100: '#f5f5f4',\n 200: '#e7e5e4',\n 300: '#d6d3d1',\n 400: '#a8a29e',\n 500: '#78716c',\n 600: '#57534e',\n 700: '#44403c',\n 800: '#292524',\n 900: '#1c1917',\n 950: '#0c0a09'\n }\n },\n {\n name: 'soho',\n palette: {\n 0: '#ffffff',\n 50: '#ececec',\n 100: '#dedfdf',\n 200: '#c4c4c6',\n 300: '#adaeb0',\n 400: '#97979b',\n 500: '#7f8084',\n 600: '#6a6b70',\n 700: '#55565b',\n 800: '#3f4046',\n 900: '#2c2c34',\n 950: '#16161d'\n }\n },\n {\n name: 'viva',\n palette: {\n 0: '#ffffff',\n 50: '#f3f3f3',\n 100: '#e7e7e8',\n 200: '#cfd0d0',\n 300: '#b7b8b9',\n 400: '#9fa1a1',\n 500: '#87898a',\n 600: '#6e7173',\n 700: '#565a5b',\n 800: '#3e4244',\n 900: '#262b2c',\n 950: '#0e1315'\n }\n },\n {\n name: 'ocean',\n palette: {\n 0: '#ffffff',\n 50: '#fbfcfc',\n 100: '#F7F9F8',\n 200: '#EFF3F2',\n 300: '#DADEDD',\n 400: '#B1B7B6',\n 500: '#828787',\n 600: '#5F7274',\n 700: '#415B61',\n 800: '#29444E',\n 900: '#183240',\n 950: '#0c1920'\n }\n }\n ];\n\n selectedPrimaryColor = computed(() => {\n return this.layoutService.layoutConfig().primary;\n });\n\n selectedSurfaceColor = computed(() => this.layoutService.layoutConfig().surface);\n\n selectedPreset = computed(() => this.layoutService.layoutConfig().preset);\n\n menuMode = computed(() => this.layoutService.layoutConfig().menuMode);\n\n primaryColors = computed<SurfacesType[]>(() => {\n const activeThemePreset = this.getThemeById(this.layoutService.layoutConfig().preset);\n return this.getPrimaryColorOptions(activeThemePreset);\n });\n\n surfaceColors = computed<SurfacesType[]>(() => {\n const activeThemePreset = this.getThemeById(this.layoutService.layoutConfig().preset);\n return this.getSurfaceColorOptions(activeThemePreset);\n });\n\n getPresetExt() {\n const color: SurfacesType = this.primaryColors().find((c) => c.name === this.selectedPrimaryColor()) || {};\n const preset = this.getThemeById(this.layoutService.layoutConfig().preset).id;\n\n if (color.name === 'noir') {\n return {\n semantic: {\n primary: {\n 50: '{surface.50}',\n 100: '{surface.100}',\n 200: '{surface.200}',\n 300: '{surface.300}',\n 400: '{surface.400}',\n 500: '{surface.500}',\n 600: '{surface.600}',\n 700: '{surface.700}',\n 800: '{surface.800}',\n 900: '{surface.900}',\n 950: '{surface.950}'\n },\n colorScheme: {\n light: {\n primary: {\n color: '{primary.950}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.800}',\n activeColor: '{primary.700}'\n },\n highlight: {\n background: '{primary.950}',\n focusBackground: '{primary.700}',\n color: '#ffffff',\n focusColor: '#ffffff'\n }\n },\n dark: {\n primary: {\n color: '{primary.50}',\n contrastColor: '{primary.950}',\n hoverColor: '{primary.200}',\n activeColor: '{primary.300}'\n },\n highlight: {\n background: '{primary.50}',\n focusBackground: '{primary.300}',\n color: '{primary.950}',\n focusColor: '{primary.950}'\n }\n }\n }\n }\n };\n } else if (preset === 'Nora') {\n return {\n semantic: {\n primary: color.palette,\n colorScheme: {\n light: {\n primary: {\n color: '{primary.600}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.700}',\n activeColor: '{primary.800}'\n },\n highlight: {\n background: '{primary.600}',\n focusBackground: '{primary.700}',\n color: '#ffffff',\n focusColor: '#ffffff'\n }\n },\n dark: {\n primary: {\n color: '{primary.500}',\n contrastColor: '{surface.900}',\n hoverColor: '{primary.400}',\n activeColor: '{primary.300}'\n },\n highlight: {\n background: '{primary.500}',\n focusBackground: '{primary.400}',\n color: '{surface.900}',\n focusColor: '{surface.900}'\n }\n }\n }\n }\n };\n } else {\n return {\n semantic: {\n primary: color.palette,\n colorScheme: {\n light: {\n primary: {\n color: '{primary.500}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.600}',\n activeColor: '{primary.700}'\n },\n highlight: {\n background: '{primary.50}',\n focusBackground: '{primary.100}',\n color: '{primary.700}',\n focusColor: '{primary.800}'\n }\n },\n dark: {\n primary: {\n color: '{primary.400}',\n contrastColor: '{surface.900}',\n hoverColor: '{primary.300}',\n activeColor: '{primary.200}'\n },\n highlight: {\n background: 'color-mix(in srgb, {primary.400}, transparent 84%)',\n focusBackground: 'color-mix(in srgb, {primary.400}, transparent 76%)',\n color: 'rgba(255,255,255,.87)',\n focusColor: 'rgba(255,255,255,.87)'\n }\n }\n }\n }\n };\n }\n }\n\n private getThemePresets(): AppThemePreset[] {\n const source = this.themePresetMergeMode === 'replaceDefaults' ? [] : [...DEFAULT_THEME_PRESETS];\n const result = [...source];\n for (const theme of this.injectedThemePresets ?? []) {\n if (!theme?.id || !theme?.preset) {\n continue;\n }\n const index = result.findIndex((item) => item.id === theme.id);\n if (index >= 0) {\n result[index] = theme;\n } else {\n result.push(theme);\n }\n }\n return result;\n }\n\n private getThemeById(themeId?: string): AppThemePreset {\n return this.themePresetsMap.get(themeId ?? '') ?? this.defaultThemePreset;\n }\n\n private getPrimaryColorOptions(activeThemePreset: AppThemePreset): SurfacesType[] {\n if (activeThemePreset.primaryColors) {\n return Object.entries(activeThemePreset.primaryColors)\n .filter((entry): entry is [string, PaletteDesignToken] => Boolean(entry[1]))\n .map(([name, palette]) => ({ name, palette }));\n }\n\n const presetPalette =\n (activeThemePreset.preset as { primitive?: Record<string, PaletteDesignToken> }).primitive ?? {};\n const palettes: SurfacesType[] = [{ name: 'noir', palette: {} }];\n\n PRIMARY_COLORS.forEach((color) => {\n palettes.push({\n name: color,\n palette: presetPalette[color] ?? this.fallbackPrimaryColors[color]\n });\n });\n\n return palettes;\n }\n\n private getSurfaceColorOptions(activeThemePreset: AppThemePreset): SurfacesType[] {\n if (activeThemePreset.surfaceColors) {\n return Object.entries(activeThemePreset.surfaceColors)\n .filter((entry): entry is [string, PaletteDesignToken] => Boolean(entry[1]))\n .map(([name, palette]) => ({ name, palette }));\n }\n\n return this.surfaces;\n }\n\n private ensureValidThemeId(themeId?: string): string {\n if (themeId && this.themePresetsMap.has(themeId)) {\n return themeId;\n }\n\n if (themeId && isPlatformBrowser(this.platformId)) {\n console.warn(`[AppConfigurator] Unknown theme preset \"${themeId}\", fallback to \"${this.defaultThemePreset.id}\".`);\n }\n\n return this.defaultThemePreset.id;\n }\n\n updateColors(event: MouseEvent, type: string, color: SurfacesType) {\n if (type === 'primary') {\n this.layoutService.layoutConfig.update((state) => ({\n ...state,\n primary: color.name\n }));\n } else if (type === 'surface') {\n this.layoutService.layoutConfig.update((state) => ({\n ...state,\n surface: color.name\n }));\n }\n this.applyTheme(type, color);\n\n event.stopPropagation();\n }\n\n applyTheme(type: string, color: SurfacesType) {\n if (type === 'primary') {\n updatePreset(this.getPresetExt());\n } else if (type === 'surface') {\n updateSurfacePalette(color.palette);\n }\n }\n\n onPresetChange(event: string) {\n const nextThemeId = this.ensureValidThemeId(event);\n const nextTheme = this.getThemeById(nextThemeId);\n const primaryColors = this.getPrimaryColorOptions(nextTheme);\n const surfaceColors = this.getSurfaceColorOptions(nextTheme);\n\n this.layoutService.layoutConfig.update((state) => ({\n ...state,\n preset: nextThemeId,\n primary: primaryColors.some((color) => color.name === state.primary)\n ? state.primary\n : (primaryColors[0]?.name ?? state.primary),\n surface:\n nextTheme.surfaceColors && !surfaceColors.some((color) => color.name === state.surface)\n ? (surfaceColors[0]?.name ?? state.surface)\n : state.surface\n }));\n const preset = nextTheme.preset;\n const surfacePalette = this.surfaceColors().find((s) => s.name === this.selectedSurfaceColor())?.palette;\n $t().preset(preset).preset(this.getPresetExt()).surfacePalette(surfacePalette).use({ useDefaultOptions: true });\n }\n\n onMenuModeChange(event: string) {\n this.layoutService.layoutConfig.update((prev) => ({\n ...prev,\n menuMode: event\n }));\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\nimport {\n ApiExceptionResponse,\n GetUserPhotoByIdParams,\n PostUserPhotoPayload,\n UserSettingsDto,\n} from \"./users-data-contracts\";\n\n@Injectable()\nexport class UserProfileApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getUserPhoto = (params: RequestParams = {}) =>\n this.request<Blob, ApiExceptionResponse>({\n path: `/api/user-profile/get-user-photo`,\n method: \"GET\",\n secure: true,\n format: \"blob\",\n ...params,\n });\n getUserPhotoById = (\n { userId, ...query }: GetUserPhotoByIdParams,\n params: RequestParams = {},\n ) =>\n this.request<Blob, ApiExceptionResponse>({\n path: `/api/user-profile/get-user-photo-by-id/${userId}`,\n method: \"GET\",\n secure: true,\n format: \"blob\",\n ...params,\n });\n postUserPhoto = (data: PostUserPhotoPayload, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/user-profile/post-user-photo`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.FormData,\n ...params,\n });\n deleteUserPhoto = (params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/user-profile/delete-user-photo`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n getSettings = (params: RequestParams = {}) =>\n this.request<UserSettingsDto, ApiExceptionResponse>({\n path: `/api/user-profile/get-settings`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n setSettings = (data: UserSettingsDto, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/user-profile/set-settings`,\n method: \"PUT\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { SecurityService } from './security.service';\nimport { distinctUntilChanged, filter, map } from 'rxjs/operators';\nimport { UserProfileApi } from '../api/user-profile.api';\nimport { MsgService } from './msg.service';\nimport { TranslateService } from '@ngx-translate/core';\n\n/**\n * UserService is responsible for retrieving and handling user-related data,\n * including the user's photo and short label for avatar display.\n */\n@Injectable()\nexport class UserService {\n private readonly securityService = inject(SecurityService);\n private readonly userProfileApi = inject(UserProfileApi);\n private readonly msgService = inject(MsgService);\n private readonly translateService = inject(TranslateService);\n private requestedPhotoKey: string | null = null;\n\n constructor() {\n this.securityService\n .getCurrentUser$()\n .pipe(\n map((user) => this.getCurrentUserPhotoKey(user)),\n filter((photoKey) => !!photoKey),\n distinctUntilChanged()\n )\n .subscribe(() => {\n this.getUserPhoto();\n });\n }\n\n /**\n * Stores the user's photo as a data URL or binary blob, depending on how it's processed.\n */\n photo: any = null;\n\n /**\n * Indicates whether the user photo has finished loading.\n */\n photoLoaded: boolean = false;\n\n /**\n * Returns a short label composed of the user's initials.\n * Typically used for avatar display when a photo is unavailable.\n */\n get shortLabel(): string {\n const data = this.securityService.getCurrentUser();\n const givenNameInitial = data?.given_name?.trim()?.[0];\n const familyNameInitial = data?.family_name?.trim()?.[0];\n const displayNameInitials = this.getInitials(\n data?.displayName ?? data?.name ?? data?.userName ?? data?.preferred_username\n );\n\n return `${givenNameInitial ?? ''}${familyNameInitial ?? ''}`.toUpperCase() || displayNameInitials;\n }\n\n get userName(): string {\n const data = this.securityService.getCurrentUser();\n return (\n [data?.given_name, data?.family_name].filter(Boolean).join(' ') ||\n data?.displayName ||\n data?.name ||\n data?.userName ||\n data?.preferred_username ||\n data?.email ||\n ''\n );\n }\n\n /**\n * Initiates an HTTP request to fetch the current user's photo,\n * and updates the `photo` and `photoLoaded` properties accordingly.\n */\n getUserPhoto(): void {\n const photoKey = this.getCurrentUserPhotoKey(this.securityService.getCurrentUser());\n\n if (!photoKey) {\n return;\n }\n\n if (this.requestedPhotoKey === photoKey && (this.photoLoaded || this.photo)) {\n return;\n }\n\n this.requestedPhotoKey = photoKey;\n\n this.userProfileApi.getUserPhoto({ format: 'blob' }).then(\n (data) => {\n this.createImageFromBlob(data as Blob);\n this.photoLoaded = true;\n },\n (error) => {\n // A 404 just means the user hasn't uploaded a photo yet (e.g. on first login) —\n // that's an expected state, not a failure, so fall back to initials silently.\n if ((error as { status?: number })?.status !== 404) {\n this.msgService.errorFromException(error, this.translateService.instant('profileComponent.failedToLoadPhoto'));\n }\n this.photoLoaded = false;\n }\n );\n }\n\n refreshUserPhoto(): void {\n this.requestedPhotoKey = null;\n this.photo = null;\n this.photoLoaded = false;\n this.getUserPhoto();\n }\n\n /**\n * Converts a Blob image into a Base64 data URL and stores it in the `photo` property.\n *\n * @param image - The image Blob to be converted.\n */\n private createImageFromBlob(image: Blob): void {\n const reader = new FileReader();\n reader.addEventListener(\n 'load',\n () => {\n this.photo = reader.result;\n },\n false\n );\n if (image) {\n reader.readAsDataURL(image);\n }\n }\n\n private getInitials(value?: string): string {\n return (\n value\n ?.trim()\n .split(/\\s+/)\n .filter(Boolean)\n .slice(0, 2)\n .map((part) => part[0])\n .join('')\n .toUpperCase() ?? ''\n );\n }\n\n private getCurrentUserPhotoKey(user: any): string | null {\n return user?.sub || user?.userName || user?.preferred_username || user?.displayName || user?.name || null;\n }\n}\n","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'logo',\r\n standalone: true,\r\n template: `\r\n <svg\r\n viewBox=\"0.8516 1.7159 60.0074 64.7142\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n [attr.height]=\"height + 'px'\"\r\n [attr.width]=\"width + 'px'\">\r\n <path\r\n class=\"primary-logo-color\"\r\n d=\"M -130.45 -104.78 C -130.45 -105.9 -130.43 -107.01 -130.45 -108.13 C -130.49 -108.52 -130.28 -108.9 -129.92 -109.07 C -125.87 -111.4 -121.82 -113.74 -117.77 -116.08 C -115.7 -117.26 -113.63 -118.45 -111.58 -119.67 C -111.26 -119.89 -110.83 -119.89 -110.51 -119.67 C -101.66 -114.53 -92.787 -109.41 -83.915 -104.29 C -83.752 -104.2 -83.479 -104.16 -83.475 -103.94 C -83.472 -103.72 -83.766 -103.65 -83.947 -103.54 C -86.326 -102.16 -88.716 -100.79 -91.092 -99.39 C -91.377 -99.18 -91.761 -99.18 -92.046 -99.39 C -98.211 -102.98 -104.38 -106.55 -110.56 -110.12 C -110.85 -110.33 -111.23 -110.33 -111.52 -110.12 C -114.88 -108.16 -118.25 -106.22 -121.63 -104.28 C -122.01 -104.11 -122.24 -103.71 -122.2 -103.3 C -122.18 -101.11 -122.2 -98.922 -122.2 -96.736 C -122.19 -95.98 -122.21 -95.98 -122.84 -96.335 C -125.2 -97.7 -127.57 -99.07 -129.93 -100.42 C -130.27 -100.57 -130.49 -100.92 -130.46 -101.3 C -130.43 -102.46 -130.45 -103.62 -130.45 -104.78 Z\"\r\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\r\n <path\r\n class=\"primary-logo-color\"\r\n d=\"M -70.504 -100.94 L -70.504 -90.438 C -70.447 -89.98 -70.692 -89.537 -71.11 -89.342 C -78.942 -84.839 -86.769 -80.325 -94.592 -75.8 C -95.635 -75.2 -96.684 -74.612 -97.713 -73.988 C -98.17 -73.708 -98.255 -73.846 -98.255 -74.314 L -98.255 -82.785 C -98.268 -83.116 -98.07 -83.419 -97.762 -83.541 C -92.003 -86.86 -86.269 -90.236 -80.468 -93.47 C -79.181 -94.179 -78.667 -94.934 -78.731 -96.441 C -78.869 -99.76 -78.791 -103.09 -78.755 -106.42 C -78.694 -107 -79.02 -107.56 -79.56 -107.8 C -81.436 -108.83 -83.28 -109.93 -85.138 -110.99 C -85.734 -111.34 -85.734 -111.34 -85.113 -111.7 C -82.748 -113.07 -80.379 -114.43 -78.021 -115.82 C -77.707 -116.05 -77.283 -116.06 -76.957 -115.84 C -74.962 -114.66 -72.953 -113.5 -70.929 -112.37 C -70.62 -112.19 -70.456 -111.84 -70.521 -111.49 C -70.514 -107.99 -70.508 -104.48 -70.504 -100.94 Z\"\r\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\r\n <path\r\n class=\"primary-logo-color\"\r\n d=\"M -108.68 -85.743 L -108.68 -75.169 C -108.72 -74.754 -108.5 -74.358 -108.12 -74.179 C -104.77 -72.267 -101.44 -70.339 -98.117 -68.396 C -97.762 -68.141 -97.284 -68.141 -96.929 -68.396 C -95.028 -69.527 -93.096 -70.598 -91.195 -71.725 C -90.667 -72.041 -90.581 -71.892 -90.581 -71.371 C -90.596 -68.591 -90.596 -65.811 -90.581 -63.03 C -90.551 -62.7 -90.729 -62.386 -91.028 -62.243 C -93.083 -61.073 -95.13 -59.891 -97.17 -58.697 C -97.436 -58.537 -97.775 -58.569 -98.007 -58.775 C -102.74 -61.517 -107.47 -64.254 -112.22 -66.984 C -113.63 -67.796 -115.01 -68.615 -116.42 -69.406 C -116.77 -69.561 -116.97 -69.913 -116.94 -70.286 C -116.93 -80.555 -116.93 -90.823 -116.94 -101.09 C -116.94 -101.63 -116.86 -101.75 -116.35 -101.44 C -113.98 -100.05 -111.59 -98.667 -109.19 -97.303 C -108.84 -97.135 -108.62 -96.76 -108.66 -96.367 C -108.68 -92.833 -108.69 -89.291 -108.68 -85.743 Z\"\r\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\r\n <path\r\n class=\"secondary-logo-color\"\r\n d=\"M -122.18 -85.807 L -122.18 -82.129 C -122.18 -81.637 -122.34 -81.615 -122.72 -81.839 C -125.16 -83.257 -127.6 -84.667 -130.05 -86.069 C -130.35 -86.219 -130.53 -86.535 -130.5 -86.867 L -130.5 -94.09 C -130.5 -94.64 -130.34 -94.679 -129.89 -94.417 C -127.49 -92.998 -125.09 -91.607 -122.67 -90.243 C -122.35 -90.103 -122.15 -89.772 -122.18 -89.42 C -122.21 -88.214 -122.18 -87.012 -122.18 -85.807 Z M -82.688 -119.15 C -83.954 -118.41 -85.17 -117.7 -86.365 -117.02 C -87.748 -116.22 -89.138 -115.44 -90.514 -114.63 C -90.761 -114.45 -91.093 -114.45 -91.34 -114.63 C -93.432 -115.86 -95.535 -117.07 -97.649 -118.27 C -98.053 -118.5 -98.191 -118.63 -97.67 -118.93 C -95.216 -120.32 -92.776 -121.74 -90.337 -123.15 C -90.134 -123.33 -89.845 -123.36 -89.61 -123.23 L -82.918 -119.33 C -82.862 -119.28 -82.812 -119.24 -82.688 -119.15 Z M -85.365 -65.616 L -85.365 -72.062 L -85.365 -74.622 C -85.403 -74.928 -85.24 -75.223 -84.961 -75.353 C -82.886 -76.534 -80.83 -77.736 -78.77 -78.931 C -78.174 -79.286 -78.135 -79.257 -78.135 -78.576 L -78.135 -70.303 C -78.135 -69.991 -78.135 -69.711 -78.468 -69.52 C -80.656 -68.275 -82.833 -67.013 -85.014 -65.761 C -85.127 -65.704 -85.245 -65.655 -85.365 -65.616 Z\"\r\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\r\n </svg>\r\n `,\r\n styles: [\r\n `\r\n .primary-logo-color {\r\n fill: var(--primary-color);\r\n }\r\n\r\n .secondary-logo-color {\r\n fill: var(--p-primary-600);\r\n }\r\n `\r\n ]\r\n})\r\nexport class LogoComponent {\r\n @Input() width: number;\r\n @Input() height: number;\r\n}\r\n","import { Injectable, Type, InjectionToken, inject } from '@angular/core';\r\nimport { LogoComponent } from '../components/logo.component';\r\nimport { Provider } from '@angular/core';\r\n\r\nexport const LOGO_COMPONENT_TOKEN = new InjectionToken<Type<any>>('LOGO_COMPONENT_TOKEN');\r\n\r\nexport function provideLogoComponent(component: Type<any>): Provider {\r\n return {\r\n provide: LOGO_COMPONENT_TOKEN,\r\n useValue: component\r\n };\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LogoService {\r\n private customLogoComponent = inject(LOGO_COMPONENT_TOKEN, { optional: true });\r\n\r\n getLogoComponent(): Type<any> {\r\n return this.customLogoComponent || LogoComponent;\r\n }\r\n}\r\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport { HttpClient, RequestParams } from \"./http-client\";\nimport {\n ApiExceptionResponse,\n GetNotificationByIdParams,\n GetNotificationByUserParams,\n MarkNotificationAsReadParams,\n UserNotificationCountResponse,\n UserNotificationDto,\n UserNotificationListResponse,\n} from \"./notification-data-contracts\";\n\n@Injectable()\nexport class NotificationApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getNotificationByUser = (\n query: GetNotificationByUserParams,\n params: RequestParams = {},\n ) =>\n this.request<UserNotificationListResponse, ApiExceptionResponse>({\n path: `/api/notification/get-notification-by-user`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n getNotificationCountByUser = (params: RequestParams = {}) =>\n this.request<UserNotificationCountResponse, ApiExceptionResponse>({\n path: `/api/notification/get-notification-count-by-user`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n markNotificationAsRead = (\n { id, ...query }: MarkNotificationAsReadParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/notification/mark-notification-as-read/${id}`,\n method: \"POST\",\n secure: true,\n ...params,\n });\n getNotificationById = (\n query: GetNotificationByIdParams,\n params: RequestParams = {},\n ) =>\n this.request<UserNotificationDto, ApiExceptionResponse>({\n path: `/api/notification/get-notification-by-id`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","import * as signalR from '@microsoft/signalr';\r\nimport { SecurityService } from './security.service';\r\nimport { inject, Injectable, signal } from '@angular/core';\r\nimport { MsgService } from './msg.service';\r\nimport { NotificationApi } from '../api/notification.api';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NotificationService {\r\n private connection: signalR.HubConnection;\r\n private securityService = inject(SecurityService);\r\n private msgService = inject(MsgService);\r\n private notificationApi = inject(NotificationApi);\r\n unreadNotificationCount = signal<number | undefined>(undefined);\r\n\r\n constructor() {\r\n this.connection = new signalR.HubConnectionBuilder()\r\n .withUrl('/hubs/notification', {\r\n withCredentials: true,\r\n skipNegotiation: true,\r\n transport: signalR.HttpTransportType.WebSockets\r\n })\r\n .configureLogging(signalR.LogLevel.Error)\r\n .build();\r\n\r\n this.connection.on('ReceiveNotification', (notification) => {\r\n const opt = {\r\n severity: notification.severity,\r\n summary: notification.subject,\r\n detail: notification.message,\r\n life: 0\r\n };\r\n this.msgService.add(opt);\r\n this.unreadNotificationCount.update((count) => (count ?? 0) + 1);\r\n });\r\n\r\n this.securityService.isAuthenticated().subscribe((authenticated) => {\r\n if (!authenticated) {\r\n this.unreadNotificationCount.set(undefined);\r\n if (this.connection.state !== signalR.HubConnectionState.Disconnected) {\r\n this.connection.stop();\r\n }\r\n return;\r\n }\r\n\r\n this.loadUnreadNotificationCount();\r\n\r\n if (this.connection.state === signalR.HubConnectionState.Disconnected) {\r\n this.connection.start().catch((error) => console.error('Failed to start notification connection', error));\r\n return;\r\n }\r\n\r\n this.connection.stop().then(() => {\r\n this.connection.start().catch((error) => console.error('Failed to restart notification connection', error));\r\n });\r\n });\r\n }\r\n\r\n loadUnreadNotificationCount(): void {\r\n this.notificationApi\r\n .getNotificationCountByUser()\r\n .then((response) => this.unreadNotificationCount.set(response.count ?? 0))\r\n .catch((error) => console.error('Failed to load notification count', error));\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\nimport { Component, ViewChild, computed, inject } from '@angular/core';\nimport { BadgeModule } from 'primeng/badge';\nimport { ButtonModule } from 'primeng/button';\nimport { PaginatorModule, PaginatorState } from 'primeng/paginator';\nimport { Popover } from 'primeng/popover';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { Tag } from 'primeng/tag';\nimport { Tooltip } from 'primeng/tooltip';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { NotificationApi } from '../../api/notification.api';\nimport { UserNotificationDto } from '../../api/notification-data-contracts';\nimport { MsgService } from '../../services/msg.service';\nimport { NotificationService } from '../../services/notification.service';\nimport { L10nService } from '../../services/l10n.service';\n\nimport en from './l10n/user-notifications.en.json';\nimport ru from './l10n/user-notifications.ru.json';\n\nL10nService.registerTranslations({ en, ru });\n\n@Component({\n selector: 'app-user-notifications',\n standalone: true,\n imports: [\n CommonModule,\n BadgeModule,\n ButtonModule,\n PaginatorModule,\n Popover,\n ProgressSpinnerModule,\n Tag,\n Tooltip,\n TranslatePipe\n ],\n template: `\n <button\n class=\"layout-topbar-action relative\"\n id=\"oip-app-topbar-notification-button\"\n type=\"button\"\n [attr.aria-label]=\"'Notifications: ' + unreadNotificationCount()\"\n (click)=\"toggle($event)\">\n <i class=\"pi pi-bell\"></i>\n @if (unreadNotificationCount() > 0) {\n <p-badge\n class=\"absolute -top-1 -right-1\"\n severity=\"danger\"\n [badgeSize]=\"'small'\"\n [value]=\"unreadNotificationBadge()\" />\n }\n </button>\n\n <p-popover #popover styleClass=\"w-[min(92vw,34rem)]\">\n <div class=\"flex items-center justify-between gap-3 mb-4\">\n <div class=\"font-semibold text-lg\">\n {{ 'userNotifications.title' | translate }}\n </div>\n <p-button\n icon=\"pi pi-refresh\"\n rounded=\"true\"\n severity=\"secondary\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"loading\"\n [pTooltip]=\"'userNotifications.refresh' | translate\"\n (onClick)=\"loadNotifications()\"></p-button>\n </div>\n\n @if (loading && notifications.length === 0) {\n <div class=\"flex justify-center py-8\">\n <p-progressSpinner style=\"w-8 h-8\"></p-progressSpinner>\n </div>\n } @else if (notifications.length === 0) {\n <div class=\"text-center py-8 text-surface-500\">\n {{ 'userNotifications.empty' | translate }}\n </div>\n } @else {\n <div class=\"flex flex-col gap-3 max-h-[26rem] overflow-y-auto pr-1\">\n @for (notification of notifications; track notification.notificationUserId) {\n <div class=\"border border-surface-200 dark:border-surface-700 rounded-md p-3\">\n <div class=\"flex items-start justify-between gap-3\">\n <div class=\"min-w-0\">\n <div class=\"font-medium leading-snug break-words\">\n {{ notification.subject }}\n </div>\n <div class=\"text-xs text-surface-500 mt-1\">\n {{ notification.createdAt | date: 'dd.MM.yyyy HH:mm' }}\n </div>\n </div>\n @if (notification.importance) {\n <p-tag\n class=\"shrink-0\"\n [severity]=\"getImportanceSeverity(notification.importance)\"\n [value]=\"notification.importance\"></p-tag>\n }\n </div>\n\n <div class=\"text-sm text-surface-700 dark:text-surface-200 mt-3 whitespace-pre-line break-words\">\n {{ notification.message }}\n </div>\n\n <div class=\"flex justify-end mt-3\">\n <p-button\n icon=\"pi pi-check\"\n size=\"small\"\n [label]=\"'userNotifications.markAsRead' | translate\"\n [loading]=\"readingNotificationId === notification.notificationUserId\"\n (onClick)=\"markAsRead(notification)\"></p-button>\n </div>\n </div>\n }\n </div>\n\n <p-paginator\n class=\"mt-3\"\n [first]=\"skip\"\n [rows]=\"take\"\n [rowsPerPageOptions]=\"[5, 10, 20]\"\n [totalRecords]=\"totalCount\"\n (onPageChange)=\"onPageChange($event)\"></p-paginator>\n }\n </p-popover>\n `\n})\nexport class UserNotificationsComponent {\n @ViewChild('popover') private popover?: Popover;\n\n protected notifications: UserNotificationDto[] = [];\n protected totalCount = 0;\n protected skip = 0;\n protected take = 5;\n protected loading = false;\n protected readingNotificationId?: number;\n\n private readonly notificationApi = inject(NotificationApi);\n private readonly notificationService = inject(NotificationService);\n private readonly msgService = inject(MsgService);\n private readonly translateService = inject(TranslateService);\n\n protected readonly unreadNotificationCount = computed(() => this.notificationService.unreadNotificationCount() ?? 0);\n protected readonly unreadNotificationBadge = computed(() => {\n const count = this.unreadNotificationCount();\n\n return count > 99 ? '99+' : count.toString();\n });\n\n constructor(l10nService: L10nService) {\n l10nService.get('userNotifications');\n }\n\n protected async toggle(event: Event): Promise<void> {\n this.popover?.toggle(event);\n await this.loadNotifications();\n }\n\n async loadNotifications(): Promise<void> {\n this.loading = true;\n\n try {\n const response = await this.notificationApi.getNotificationByUser({\n skip: this.skip,\n take: this.take,\n unreadOnly: true\n });\n\n this.notifications = response.notifications ?? [];\n this.totalCount = response.totalCount ?? 0;\n } catch (error) {\n this.msgService.error(error);\n } finally {\n this.loading = false;\n }\n }\n\n async onPageChange(event: PaginatorState): Promise<void> {\n this.skip = event.first ?? 0;\n this.take = event.rows ?? this.take;\n await this.loadNotifications();\n }\n\n async markAsRead(notification: UserNotificationDto): Promise<void> {\n if (!notification.notificationUserId) {\n return;\n }\n\n this.readingNotificationId = notification.notificationUserId;\n\n try {\n await this.notificationApi.markNotificationAsRead({ id: notification.notificationUserId });\n this.msgService.success(this.translateService.instant('userNotifications.markedAsRead'));\n this.notificationService.loadUnreadNotificationCount();\n\n if (this.notifications.length === 1 && this.skip > 0) {\n this.skip = Math.max(this.skip - this.take, 0);\n }\n\n await this.loadNotifications();\n } catch (error) {\n this.msgService.error(error);\n } finally {\n this.readingNotificationId = undefined;\n }\n }\n\n protected getImportanceSeverity(importance: string): 'success' | 'info' | 'warn' | 'danger' | 'secondary' {\n switch (importance) {\n case 'Critical':\n case 'High':\n return 'danger';\n case 'Medium':\n return 'warn';\n case 'Low':\n return 'info';\n default:\n return 'secondary';\n }\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n ApiExceptionResponse,\n ApplicationRegistryItemDto,\n DeleteApplicationRegistryItemParams,\n GetApplicationRegistryItemByCodeParams,\n UpdateApplicationRegistryItemParams,\n} from \"./applications-data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class ApplicationsApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getApplicationRegistryItems = (params: RequestParams = {}) =>\n this.request<ApplicationRegistryItemDto[], ApiExceptionResponse>({\n path: `/api/applications/get-application-registry-items`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n getApplicationRegistryItemByCode = (\n { code, ...query }: GetApplicationRegistryItemByCodeParams,\n params: RequestParams = {},\n ) =>\n this.request<any, ApiExceptionResponse>({\n path: `/api/applications/get-application-registry-item-by-code/${code}`,\n method: \"GET\",\n secure: true,\n ...params,\n });\n createApplicationRegistryItem = (\n data: ApplicationRegistryItemDto,\n params: RequestParams = {},\n ) =>\n this.request<any, ApiExceptionResponse>({\n path: `/api/applications/create-application-registry-item`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n updateApplicationRegistryItem = (\n { code, ...query }: UpdateApplicationRegistryItemParams,\n data: ApplicationRegistryItemDto,\n params: RequestParams = {},\n ) =>\n this.request<any, ApiExceptionResponse>({\n path: `/api/applications/update-application-registry-item/${code}`,\n method: \"PUT\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n deleteApplicationRegistryItem = (\n { code, ...query }: DeleteApplicationRegistryItemParams,\n params: RequestParams = {},\n ) =>\n this.request<any, ApiExceptionResponse>({\n path: `/api/applications/delete-application-registry-item/${code}`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ApplicationsApi } from '../api/applications.api';\nimport { ApplicationRegistryItemDto } from '../api/applications-data-contracts';\n\n@Injectable()\nexport class ApplicationRegistryService {\n private readonly applicationsApi = inject(ApplicationsApi);\n\n applications: ApplicationRegistryItemDto[] = [];\n currentApplication: ApplicationRegistryItemDto | null = null;\n\n async loadApplications(): Promise<void> {\n this.applications = await this.applicationsApi.getApplicationRegistryItems();\n this.currentApplication = this.applications.find((application) => application.isCurrent) ?? null;\n }\n\n openApplication(application: ApplicationRegistryItemDto): void {\n if (application.isCurrent || !application.baseUrl) {\n return;\n }\n\n window.location.href = application.baseUrl;\n }\n}\n","import { CommonModule } from '@angular/common';\r\nimport { Component, inject, OnInit } from '@angular/core';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { MenuModule } from 'primeng/menu';\r\nimport { ApplicationsApi } from '../api/applications.api';\r\nimport { ApplicationRegistryItemDto } from '../api/applications-data-contracts';\r\nimport { ApplicationRegistryService } from '../services/application-registry.service';\r\n\r\n@Component({\r\n selector: 'app-topbar-application-switcher',\r\n standalone: true,\r\n imports: [CommonModule, ButtonModule, MenuModule, TranslatePipe],\r\n template: `\r\n @if (applicationRegistryService.applications.length > 1) {\r\n <p-button\r\n class=\"layout-topbar-action\"\r\n id=\"oip-app-topbar-application-switcher-button\"\r\n severity=\"secondary\"\r\n type=\"button\"\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n (click)=\"applicationMenu.toggle($event)\">\r\n <i [ngClass]=\"applicationRegistryService.currentApplication?.icon || 'pi pi-th-large'\"></i>\r\n <span class=\"ml-2 hidden md:inline\">\r\n {{ applicationRegistryService.currentApplication?.displayName || ('topbar.applications' | translate) }}\r\n </span>\r\n </p-button>\r\n <p-menu #applicationMenu [model]=\"applicationMenuItems\" [popup]=\"true\" />\r\n }\r\n `,\r\n providers: [ApplicationsApi, ApplicationRegistryService]\r\n})\r\nexport class AppTopbarApplicationSwitcherComponent implements OnInit {\r\n protected applicationMenuItems: MenuItem[] = [];\r\n protected readonly applicationRegistryService = inject(ApplicationRegistryService);\r\n\r\n async ngOnInit(): Promise<void> {\r\n try {\r\n await this.applicationRegistryService.loadApplications();\r\n this.applicationMenuItems = this.applicationRegistryService.applications.map((application) =>\r\n this.createApplicationMenuItem(application)\r\n );\r\n } catch {\r\n this.applicationMenuItems = [];\r\n }\r\n }\r\n\r\n private createApplicationMenuItem(application: ApplicationRegistryItemDto): MenuItem {\r\n return {\r\n id: `oip-app-switcher-${application.code}`,\r\n label: application.displayName ?? '',\r\n icon: application.icon ?? undefined,\r\n disabled: application.isCurrent,\r\n command: () => this.applicationRegistryService.openApplication(application)\r\n };\r\n }\r\n}\r\n","import { Component, inject } from '@angular/core';\nimport { ConfirmationService } from 'primeng/api';\nimport { RouterModule } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { StyleClassModule } from 'primeng/styleclass';\nimport { LayoutService } from '../services/app.layout.service';\nimport { AppConfiguratorComponent } from './app-configurator/app-configurator.component';\nimport { SecurityService } from '../services/security.service';\nimport { TopBarService } from '../services/top-bar.service';\nimport { Tab, TabList, Tabs } from 'primeng/tabs';\nimport { AvatarModule } from 'primeng/avatar';\nimport { UserService } from '../services/user.service';\nimport { ButtonModule } from 'primeng/button';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { LogoService } from '../services/logo.service';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { UserNotificationsComponent } from './user-notifications/user-notifications.component';\nimport { AppTopbarApplicationSwitcherComponent } from './top-bar-application-switcher.component';\n\n@Component({\n selector: 'app-topbar',\n standalone: true,\n imports: [\n RouterModule,\n CommonModule,\n StyleClassModule,\n AppConfiguratorComponent,\n Tabs,\n TabList,\n Tab,\n AvatarModule,\n ButtonModule,\n ConfirmDialog,\n UserNotificationsComponent,\n TranslatePipe,\n AppTopbarApplicationSwitcherComponent\n ],\n template: `\n <div class=\"layout-topbar\">\n <p-confirmDialog appendTo=\"body\"/>\n <div class=\"layout-topbar-logo-container\">\n <button class=\"layout-menu-button layout-topbar-action\" (click)=\"layoutService.onMenuToggle()\">\n <i class=\"pi pi-bars\"></i>\n </button>\n <a class=\"layout-topbar-logo\" id=\"oip-app-topbar-logo-link\" routerLink=\"\">\n <ng-container\n *ngComponentOutlet=\"logoService.getLogoComponent(); inputs: { width: 36, height: 36 }\"></ng-container>\n <span>{{ 'app-info.title' | translate }}</span>\n </a>\n </div>\n\n @if (securityService.isAdmin() && topBarService.topBarItems.length > 0) {\n <p-tabs\n class=\"layout-topbar-tabs ml-2\"\n [value]=\"topBarService.activeId\"\n (valueChange)=\"onActiveTabChange($event)\">\n <p-tablist>\n @for (tab of topBarService.availableTopBarItems; track tab.id) {\n <p-tab id=\"oip-app-topbar-tab-{{ tab.id }}\" [value]=\"tab.id\">\n <i class=\"pi {{ tab.icon }}\"></i>\n <span class=\"ml-2\">{{ tab.caption }}</span>\n </p-tab>\n }\n </p-tablist>\n </p-tabs>\n }\n <div class=\"layout-topbar-actions\">\n <div class=\"layout-config-menu\">\n <app-topbar-application-switcher/>\n <app-user-notifications/>\n <p-button\n class=\"layout-topbar-action\"\n id=\"oip-app-topbar-theme-button\"\n severity=\"secondary\"\n type=\"button\"\n [rounded]=\"true\"\n [text]=\"true\"\n (click)=\"toggleDarkMode()\">\n <i\n class=\"pi\"\n [ngClass]=\"{\n 'pi-moon': layoutService.isDarkTheme(),\n 'pi-sun': !layoutService.isDarkTheme()\n }\"></i>\n </p-button>\n <div class=\"relative\">\n <p-button\n class=\"layout-topbar-action layout-topbar-action-highlight\"\n enterActiveClass=\"animate-scalein\"\n enterFromClass=\"hidden\"\n id=\"oip-app-topbar-palette-button\"\n leaveActiveClass=\"animate-fadeout\"\n leaveToClass=\"hidden\"\n pStyleClass=\"@next\"\n [hideOnOutsideClick]=\"true\"\n [rounded]=\"true\">\n <i class=\"pi pi-palette\"></i>\n </p-button>\n <app-configurator/>\n </div>\n </div>\n\n <button\n class=\"layout-topbar-menu-button layout-topbar-action\"\n enterActiveClass=\"animate-scalein\"\n enterFromClass=\"hidden\"\n id=\"oip-app-topbar-menu-expand-button\"\n leaveActiveClass=\"animate-fadeout\"\n leaveToClass=\"hidden\"\n pStyleClass=\"@next\"\n [hideOnOutsideClick]=\"true\">\n <i class=\"pi pi-ellipsis-v\"></i>\n </button>\n\n <div class=\"layout-topbar-menu hidden lg:block\">\n <div class=\"layout-topbar-menu-content\">\n <button\n class=\"layout-topbar-action\"\n id=\"oip-app-topbar-logout-button\"\n type=\"button\"\n (click)=\"confirmLogout()\"\n (keydown)=\"logoutKeyDown($event)\">\n <i class=\"pi pi-sign-out\"></i>\n <span>{{ 'topbar.logout' | translate }}</span>\n </button>\n <button class=\"layout-topbar-action\" routerLink=\"config\">\n <p-avatar\n class=\"p-link flex align-items-center\"\n id=\"oip-app-topbar-user-avatar\"\n shape=\"circle\"\n size=\"normal\"\n [image]=\"userService.photoLoaded ? userService.photo : null\"\n >{{ !userService.photoLoaded ? userService.shortLabel : null }}\n </p-avatar>\n <span class=\"ml-2\">{{ 'topbar.profile' | translate }}</span>\n </button>\n </div>\n </div>\n </div>\n </div>`,\n providers: [ConfirmationService]\n})\nexport class AppTopbar {\n securityService = inject(SecurityService);\n topBarService = inject(TopBarService);\n userService = inject(UserService);\n layoutService = inject(LayoutService);\n logoService = inject(LogoService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly translateService = inject(TranslateService);\n\n onActiveTabChange(value: string | number | undefined) {\n const nextActiveId = value == null ? undefined : String(value);\n this.topBarService.activeId = nextActiveId;\n }\n\n toggleDarkMode() {\n this.layoutService.layoutConfig.update((state) => ({\n ...state,\n darkTheme: !state.darkTheme\n }));\n }\n\n logoutKeyDown($event: KeyboardEvent) {\n if ($event.key === 'Enter') {\n $event.preventDefault();\n this.confirmLogout();\n }\n }\n\n confirmLogout() {\n this.confirmationService.confirm({\n header: this.translateService.instant('topbar.logoutConfirmHeader'),\n message: this.translateService.instant('topbar.logoutConfirmMessage'),\n icon: 'pi pi-sign-out',\n rejectButtonProps: {\n label: this.translateService.instant('topbar.logoutConfirmCancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.translateService.instant('topbar.logoutConfirmAccept'),\n severity: 'danger'\n },\n accept: () => {\n this.securityService.logout();\n }\n });\n }\n}\n","import { Component, inject } from '@angular/core';\r\nimport { LogoComponent } from './logo.component';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { NgComponentOutlet } from '@angular/common';\r\nimport { LogoService } from '../services/logo.service';\r\n\r\n@Component({\r\n selector: 'app-footer',\r\n template: `\r\n <div class=\"layout-footer\">\r\n <div class=\"flex justify-center flex-1\">\r\n <div class=\"mr-2 -my-0.5\">\r\n <ng-container\r\n *ngComponentOutlet=\"logoService.getLogoComponent(); inputs: { width: 18, height: 18 }\"></ng-container>\r\n </div>\r\n <span class=\"font-medium\">{{ 'app-info.footer' | translate }}</span>\r\n </div>\r\n <p class=\"mr-auto\">{{ 'app-info.version' | translate }}</p>\r\n </div>\r\n `,\r\n standalone: true,\r\n imports: [TranslatePipe, NgComponentOutlet]\r\n})\r\nexport class FooterComponent {\r\n protected logoService = inject(LogoService);\r\n}\r\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n AddModuleInstanceDto,\n ApiExceptionResponse,\n ChangeOrderParams,\n DeleteModuleInstanceParams,\n EditModuleInstanceDto,\n GetModuleInstanceRightsParams,\n IntKeyValueDto,\n ModuleInstanceDto,\n} from \"./data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class MenuApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n get = (params: RequestParams = {}) =>\n this.request<ModuleInstanceDto[], any>({\n path: `/api/menu/get`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n getModuleInstanceRights = (\n query: GetModuleInstanceRightsParams,\n params: RequestParams = {},\n ) =>\n this.request<string[], ApiExceptionResponse>({\n path: `/api/menu/get-module-instance-rights`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n getAdminMenu = (params: RequestParams = {}) =>\n this.request<ModuleInstanceDto[], any>({\n path: `/api/menu/get-admin-menu`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n getModules = (params: RequestParams = {}) =>\n this.request<IntKeyValueDto[], any>({\n path: `/api/menu/get-modules`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n addModuleInstance = (\n data: AddModuleInstanceDto,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/add-module-instance`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n editModuleInstance = (\n data: EditModuleInstanceDto,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/edit-module-instance`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n deleteModuleInstance = (\n query: DeleteModuleInstanceParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/delete-module-instance`,\n method: \"DELETE\",\n query: query,\n secure: true,\n ...params,\n });\n changeOrder = (query: ChangeOrderParams, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/change-order`,\n method: \"POST\",\n query: query,\n secure: true,\n ...params,\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { MenuChangeEvent } from '../events/menu-change.event';\nimport { MenuApi } from '../api/menu.api';\nimport { AppTitleService } from './app-title.service';\nimport { LayoutService } from './app.layout.service';\nimport {\n AddModuleInstanceDto,\n DeleteModuleInstanceParams,\n EditModuleInstanceDto,\n ModuleInstanceDto\n} from '../api/data-contracts';\n\n@Injectable()\nexport class MenuService {\n private readonly menuSource = new Subject<MenuChangeEvent>();\n private readonly resetSource = new Subject();\n private readonly titleService = inject(AppTitleService);\n private readonly menuDataService = inject(MenuApi);\n private readonly layoutService = inject(LayoutService);\n menuSource$ = this.menuSource.asObservable();\n resetSource$ = this.resetSource.asObservable();\n contextMenuItem: any;\n\n public menu: ModuleInstanceDto[] = [];\n\n get adminMode(): boolean {\n return this.layoutService.adminMode();\n }\n\n set adminMode(value: boolean) {\n this.layoutService.layoutConfig.update((config) => ({ ...config, adminMode: value }));\n }\n\n async loadMenu() {\n this.menu = this.adminMode ? await this.getAdminMenu() : await this.getMenu();\n }\n\n /**\n * Handles changes in the menu state.\n * @param {MenuChangeEvent} event - The event containing information about the menu state change.\n * @return {void}\n */\n onMenuStateChange(event: MenuChangeEvent): void {\n this.menuSource.next(event);\n if (!event.item.items?.length) {\n this.titleService.setTitle(event.item.label);\n }\n }\n\n reset() {\n this.resetSource.next(true);\n }\n\n getMenu() {\n return this.menuDataService.get();\n }\n\n getAdminMenu() {\n return this.menuDataService.getAdminMenu();\n }\n\n getModules() {\n return this.menuDataService.getModules();\n }\n\n addModuleInstance(addModuleInstance: AddModuleInstanceDto) {\n return this.menuDataService.addModuleInstance(addModuleInstance as AddModuleInstanceDto);\n }\n\n deleteItem(moduleInstanceId: number) {\n return this.menuDataService.deleteModuleInstance({ id: moduleInstanceId } as DeleteModuleInstanceParams);\n }\n\n editModuleInstance(item: EditModuleInstanceDto) {\n return this.menuDataService.editModuleInstance(item);\n }\n}\n","import { ChangeDetectorRef, Component, HostBinding, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { NavigationEnd, Router, RouterLinkActive, RouterLink } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { MenuService } from '../../services/app.menu.service';\nimport { RippleModule } from 'primeng/ripple';\nimport { NgClass } from '@angular/common';\nimport { ConfirmationService, ContextMenuService, MenuItem, MenuItemCommandEvent, PrimeIcons } from 'primeng/api';\nimport { MenuItemCreateDialogComponent } from './menu-item-create-dialog.component';\nimport { ContextMenu, ContextMenuModule } from 'primeng/contextmenu';\nimport { MsgService } from '../../services/msg.service';\nimport { MenuItemEditDialogComponent } from './menu-item-edit-dialog.component';\nimport { ContextMenuItemDto } from '../../dtos/context-menu-item.dto';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { MenuApi } from '../../api/menu.api';\nimport { ChangeOrderParams, DeleteModuleInstanceParams, ModuleInstanceDto } from '../../api/data-contracts';\nimport { SecurityService } from '../../services/security.service';\n\ninterface MenuItemComponentTranslation {\n delete: string;\n edit: string;\n new: string;\n deleteItemConfirmHeader: string;\n deleteItemConfirmMessage: string;\n deleteItemSuccessMessage: string;\n deleteItemConfirmRejectButtonPropsLabel: string;\n deleteItemConfirmAcceptButtonPropsLabel: string;\n moveUp: string;\n moveDown: string;\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[app-menuitem]',\n template: `\n <ng-container>\n <p-confirm-dialog />\n @if (root && item.visible !== false) {\n <div class=\"layout-menuitem-root-text\" (contextmenu)=\"onContextMenu($event, item)\">\n {{ item.label }}\n </div>\n }\n @if ((!item.routerLink || item.items) && item.visible !== false) {\n <a\n pRipple\n tabindex=\"0\"\n [attr.href]=\"item.url\"\n [attr.target]=\"item.target\"\n [ngClass]=\"item.class\"\n (click)=\"itemClick($event)\"\n (contextmenu)=\"onContextMenu($event, item)\">\n <i class=\"layout-menuitem-icon\" [ngClass]=\"item.icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label }}</span>\n @if (item.items) {\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"></i>\n }\n </a>\n }\n @if (item.routerLink && !item.items && item.visible !== false) {\n <a\n pRipple\n routerLinkActive=\"active-route\"\n tabindex=\"0\"\n [attr.target]=\"item.target\"\n [fragment]=\"item.fragment\"\n [ngClass]=\"item.class\"\n [preserveFragment]=\"item.preserveFragment\"\n [queryParams]=\"item.queryParams\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [replaceUrl]=\"item.replaceUrl\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActiveOptions]=\"\n item.routerLinkActiveOptions || {\n paths: 'exact',\n queryParams: 'ignored',\n matrixParams: 'ignored',\n fragment: 'ignored'\n }\n \"\n [skipLocationChange]=\"item.skipLocationChange\"\n [state]=\"item.state\"\n (click)=\"itemClick($event)\"\n (contextmenu)=\"onContextMenu($event, item)\">\n <i class=\"layout-menuitem-icon\" [ngClass]=\"item.icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label }}</span>\n @if (item.items) {\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"></i>\n }\n </a>\n }\n\n @if (item.items && item.visible !== false) {\n <ul class=\"layout-submenu\" [class.layout-submenu-expanded]=\"isSubmenuExpanded\">\n @for (child of item.items; track child; let i = $index) {\n <li\n app-menuitem\n [class]=\"child.badgeClass\"\n [contextMenu]=\"contextMenu\"\n [index]=\"i\"\n [item]=\"child\"\n [menuItemCreateDialogComponent]=\"menuItemCreateDialogComponent\"\n [menuItemEditDialogComponent]=\"menuItemEditDialogComponent\"\n [parentKey]=\"key\"></li>\n }\n </ul>\n }\n </ng-container>\n `,\n imports: [RippleModule, NgClass, RouterLinkActive, RouterLink, ContextMenuModule, ConfirmDialog],\n providers: [ConfirmationService]\n})\nexport class MenuItemComponent implements OnInit, OnDestroy {\n private readonly layoutService = inject(LayoutService);\n private readonly translateService = inject(TranslateService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly msgService = inject(MsgService);\n private readonly menuDataService = inject(MenuApi);\n private readonly securityService = inject(SecurityService);\n\n @Input() item: ContextMenuItemDto;\n @Input() index!: number;\n @Input() @HostBinding('class.layout-root-menuitem') root!: boolean;\n @Input() parentKey!: string;\n @Input() menuItemCreateDialogComponent: MenuItemCreateDialogComponent;\n @Input() menuItemEditDialogComponent: MenuItemEditDialogComponent;\n @Input() contextMenu: ContextMenu;\n\n private active = false;\n private subscriptions: Subscription[] = [];\n private localization: MenuItemComponentTranslation = {} as MenuItemComponentTranslation;\n\n protected key: string = '';\n\n constructor(\n private readonly cd: ChangeDetectorRef,\n public router: Router,\n private readonly menuService: MenuService\n ) {\n this.subscriptions.push(\n this.menuService.menuSource$.subscribe((value) => {\n Promise.resolve(null).then(() => {\n if (value.routeEvent && (value.key === this.key || value.key.startsWith(this.key + '-'))) {\n this.active = true;\n }\n });\n })\n );\n\n this.subscriptions.push(\n this.menuService.resetSource$.subscribe(() => {\n this.active = false;\n })\n );\n\n this.subscriptions.push(\n this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe((params) => {\n if (this.item.routerLink) {\n this.updateActiveStateFromRoute();\n }\n })\n );\n\n this.subscriptions.push(\n this.translateService.get('menuItemComponent').subscribe((value: MenuItemComponentTranslation) => {\n this.localization = value;\n })\n );\n }\n\n ngOnInit() {\n this.key = this.parentKey ? this.parentKey + '-' + this.index : String(this.index);\n if (this.item.routerLink) {\n this.updateActiveStateFromRoute();\n }\n }\n\n updateActiveStateFromRoute() {\n const activeRoute = this.router.isActive(this.item.routerLink[0], {\n paths: 'exact',\n queryParams: 'ignored',\n matrixParams: 'ignored',\n fragment: 'ignored'\n });\n\n if (activeRoute) {\n this.menuService.onMenuStateChange({\n key: this.key,\n item: this.item,\n routeEvent: true\n });\n }\n }\n\n itemClick(event: Event) {\n // avoid processing disabled items\n if (this.item.disabled) {\n event.preventDefault();\n return;\n }\n\n // execute command\n if (this.item.command) {\n this.item.command({ originalEvent: event, item: this.item });\n }\n\n // toggle active state\n if (this.item.items) {\n this.active = !this.active;\n }\n\n this.menuService.onMenuStateChange({ key: this.key, item: this.item });\n }\n\n get isSubmenuExpanded() {\n return this.root || this.active;\n }\n\n @HostBinding('class.active-menuitem')\n get activeClass() {\n return this.active && !this.root;\n }\n\n ngOnDestroy() {\n this.subscriptions.map((s) => s.unsubscribe());\n }\n\n private newClick(e: MenuItemCommandEvent) {\n this.menuItemCreateDialogComponent.showDialog();\n }\n\n onContextMenu($event: MouseEvent, item: any) {\n if (!this.securityService.isAdmin()) {\n return;\n }\n\n $event.stopPropagation();\n $event.preventDefault();\n\n this.menuService.contextMenuItem = item;\n this.contextMenu.model = [\n {\n label: this.localization.new,\n icon: PrimeIcons.PLUS,\n command: (event) => this.newClick(event)\n },\n {\n label: this.localization.edit,\n icon: PrimeIcons.FILE_EDIT,\n command: (event) => this.editClick(event)\n },\n { separator: true },\n {\n label: this.localization.delete,\n icon: PrimeIcons.TRASH,\n command: (event) => this.deleteItem(event)\n },\n { separator: true, visible: this.hasVisibleNext(item) || this.hasVisiblePrev(item) },\n {\n label: this.localization.moveUp,\n icon: PrimeIcons.ANGLE_UP,\n command: (event) => {\n this.moveUp(item);\n $event.stopPropagation();\n $event.preventDefault();\n },\n visible: this.hasVisiblePrev(item)\n },\n {\n label: this.localization.moveDown,\n icon: PrimeIcons.ANGLE_DOWN,\n command: (event) => {\n this.moveDown(item);\n $event.stopPropagation();\n $event.preventDefault();\n },\n visible: this.hasVisibleNext(item)\n }\n ];\n this.contextMenu.show($event);\n }\n\n private deleteItem(event: MenuItemCommandEvent) {\n this.confirmationService.confirm({\n header: this.localization.deleteItemConfirmHeader,\n message: this.localization.deleteItemConfirmMessage,\n icon: PrimeIcons.TRASH,\n rejectButtonProps: {\n label: this.localization.deleteItemConfirmRejectButtonPropsLabel,\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.localization.deleteItemConfirmAcceptButtonPropsLabel,\n severity: 'danger'\n },\n accept: async () => {\n await this.menuDataService.deleteModuleInstance({\n id: this.menuService.contextMenuItem?.moduleInstanceId\n } as DeleteModuleInstanceParams);\n this.msgService.success(this.localization.deleteItemSuccessMessage);\n await this.menuService.loadMenu();\n }\n });\n }\n\n private editClick(event: MenuItemCommandEvent) {\n this.menuItemEditDialogComponent.showDialog().then();\n }\n\n moveUp(currentItem: any) {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId === currentItem.moduleInstanceId);\n\n if (currentIndex > 0) {\n const prevVisibleItem = this.findPrevVisibleItem(items, currentIndex);\n if (prevVisibleItem !== null) {\n this.swapItems(items[currentIndex], items[prevVisibleItem]);\n }\n }\n }\n\n moveDown(currentItem: any) {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId === currentItem.moduleInstanceId);\n\n if (currentIndex < items.length - 1) {\n const nextVisibleIndex = this.findNextVisibleIndex(items, currentIndex);\n if (nextVisibleIndex !== -1) {\n this.swapItems(items[currentIndex], items[nextVisibleIndex]);\n }\n }\n }\n\n private findPrevVisibleItem(items: any[], currentIndex: number): number {\n for (let i = currentIndex - 1; i >= 0; i--) {\n if (items[i].visible !== false) {\n return i;\n }\n }\n return -1;\n }\n\n private findNextVisibleIndex(items: any[], currentIndex: number): number {\n for (let i = currentIndex + 1; i < items.length; i++) {\n if (items[i].visible !== false) {\n return i;\n }\n }\n return -1;\n }\n\n private swapItems(firstModule: any, secondModule: any) {\n const items = this.getItems(firstModule);\n\n const firstIndex = items.findIndex((item) => item.moduleInstanceId === firstModule.moduleInstanceId);\n const secondIndex = items.findIndex((item) => item.moduleInstanceId === secondModule.moduleInstanceId);\n\n [items[firstIndex], items[secondIndex]] = [items[secondIndex], items[firstIndex]];\n\n this.menuDataService\n .changeOrder({\n firstModuleId: firstModule.moduleInstanceId,\n secondModuleId: secondModule.moduleInstanceId\n } as ChangeOrderParams)\n .then();\n }\n\n hasVisiblePrev(currentItem: any): boolean {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId == currentItem.moduleInstanceId);\n return this.findPrevVisibleItem(items, currentIndex) !== -1;\n }\n\n private getItems(currentItem: any): ModuleInstanceDto[] {\n if (!currentItem.parentId) {\n return this.menuService.menu;\n }\n\n return this.findItemByModuleInstanceId(this.menuService.menu, currentItem.parentId)?.items ?? [];\n }\n\n private findItemByModuleInstanceId(items: ModuleInstanceDto[], moduleInstanceId: number): ModuleInstanceDto | null {\n for (const item of items) {\n if (item.moduleInstanceId == moduleInstanceId) {\n return item;\n }\n\n const foundItem = this.findItemByModuleInstanceId(item.items ?? [], moduleInstanceId);\n if (foundItem) {\n return foundItem;\n }\n }\n\n return null;\n }\n\n hasVisibleNext(currentItem: any): boolean {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId == currentItem.moduleInstanceId);\n return this.findNextVisibleIndex(items, currentIndex) !== -1;\n }\n}\n","import { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { SelectModule } from 'primeng/select';\nimport { PrimeIcons } from 'primeng/api';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { AddModuleInstanceDto, IntKeyValueDto } from '../../api/data-contracts';\nimport { MenuApi } from '../../api/menu.api';\nimport { MenuService } from '../../services/app.menu.service';\nimport { MsgService } from '../../services/msg.service';\n\ntype PrimeIconOption = {\n label: string;\n value: string;\n};\n\n@Component({\n selector: 'menu-item-create-dialog',\n standalone: true,\n imports: [ButtonModule, DialogModule, InputTextModule, SelectModule, FormsModule, TranslatePipe],\n template: `\n <p-dialog\n header=\"{{ 'menuItemCreateDialogComponent.header' | translate }}\"\n [modal]=\"true\"\n [style]=\"{ width: '40rem' }\"\n [(visible)]=\"visible\"\n (keydown.enter)=\"save()\">\n @if (menuService.contextMenuItem) {\n <div class=\"flex items-center gap-4 mb-4 mt-1\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-dialog-parent-input\">\n {{ 'menuItemCreateDialogComponent.parentLabel' | translate }}\n </label>\n <input\n autocomplete=\"off\"\n class=\"flex-auto\"\n id=\"oip-menu-item-create-dialog-parent-input\"\n pInputText\n readonly\n [ngModel]=\"menuService.contextMenuItem?.label\" />\n </div>\n }\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-label\">\n {{ 'menuItemCreateDialogComponent.label' | translate }}\n </label>\n <input autocomplete=\"off\" class=\"flex-auto\" id=\"oip-menu-item-create-label\" pInputText [(ngModel)]=\"label\" />\n </div>\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-module\">\n {{ 'menuItemCreateDialogComponent.module' | translate }}\n </label>\n <p-select\n appendTo=\"body\"\n class=\"flex-auto\"\n filterBy=\"value\"\n filterPlaceholder=\"{{ 'menuItemCreateDialogComponent.searchModule' | translate }}\"\n id=\"oip-menu-item-create-module\"\n optionLabel=\"value\"\n optionValue=\"key\"\n placeholder=\"{{ 'menuItemCreateDialogComponent.selectModule' | translate }}\"\n scrollHeight=\"18rem\"\n [filter]=\"true\"\n [options]=\"modules\"\n [(ngModel)]=\"selectModule\" />\n </div>\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-dialog-icon\">\n {{ 'menuItemCreateDialogComponent.icon' | translate }}\n </label>\n <p-select\n appendTo=\"body\"\n class=\"flex-auto\"\n filterBy=\"label,value\"\n id=\"oip-menu-item-create-dialog-icon\"\n optionLabel=\"label\"\n optionValue=\"value\"\n scrollHeight=\"18rem\"\n [filter]=\"true\"\n [options]=\"iconOptions\"\n [(ngModel)]=\"selectIcon\">\n <ng-template let-icon pTemplate=\"selectedItem\">\n <div class=\"flex items-center gap-2\">\n <i [class]=\"icon.value\"></i>\n <span>{{ icon.label }}</span>\n </div>\n </ng-template>\n <ng-template let-icon pTemplate=\"item\">\n <div class=\"flex items-center gap-2\">\n <i [class]=\"icon.value\"></i>\n <span>{{ icon.label }}</span>\n </div>\n </ng-template>\n </p-select>\n </div>\n <div class=\"flex justify-end gap-2\">\n <p-button\n id=\"oip-menu-item-create-cancel\"\n label=\"{{ 'menuItemCreateDialogComponent.cancel' | translate }}\"\n severity=\"secondary\"\n [disabled]=\"saving\"\n (click)=\"changeVisible()\" />\n <p-button\n id=\"oip-menu-item-create-save\"\n label=\"{{ 'menuItemCreateDialogComponent.save' | translate }}\"\n [disabled]=\"!canSave\"\n [loading]=\"saving\"\n (click)=\"save()\" />\n </div>\n </p-dialog>\n `\n})\nexport class MenuItemCreateDialogComponent implements OnInit {\n protected readonly menuService = inject(MenuService);\n protected readonly menu = inject(MenuApi);\n private readonly msgService = inject(MsgService);\n @Input() visible!: boolean;\n @Output() visibleChange = new EventEmitter<boolean>();\n modules: IntKeyValueDto[] = [];\n iconOptions: PrimeIconOption[] = Object.values(PrimeIcons)\n .filter((icon): icon is string => typeof icon === 'string')\n .map((icon) => ({\n label: icon.replace('pi pi-', ''),\n value: icon\n }))\n .sort((left, right) => left.label.localeCompare(right.label));\n selectModule: any;\n label: string;\n selectIcon: string = 'pi pi-box';\n saving = false;\n\n get canSave(): boolean {\n return !this.saving && !!this.selectModule;\n }\n\n async ngOnInit() {\n this.modules = await this.menu.getModules();\n }\n\n changeVisible() {\n this.visible = !this.visible;\n this.visibleChange.emit(this.visible);\n }\n\n async save() {\n if (this.saving) {\n return;\n }\n\n if (!this.selectModule) {\n return;\n }\n\n const item: AddModuleInstanceDto = {\n moduleId: this.selectModule,\n label: this.label,\n icon: this.selectIcon,\n parentId: this.menuService.contextMenuItem?.moduleInstanceId\n };\n\n this.saving = true;\n try {\n await this.menuService.addModuleInstance(item);\n await this.menuService.loadMenu();\n this.hide();\n } catch (error) {\n this.msgService.errorFromException(error, 'Unexpected error');\n } finally {\n this.saving = false;\n }\n }\n\n hide() {\n this.visible = false;\n this.visibleChange.emit(this.visible);\n }\n\n showDialog() {\n this.visible = true;\n this.visibleChange.emit(this.visible);\n }\n}\n","import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { SelectModule } from 'primeng/select';\nimport { PrimeIcons } from 'primeng/api';\nimport { FormsModule } from '@angular/forms';\nimport { MenuService } from '../../services/app.menu.service';\nimport { MsgService } from '../../services/msg.service';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { EditModuleInstanceDto } from '../../api/data-contracts';\nimport { SecurityApi } from '../../api/security.api';\n\ntype PrimeIconOption = {\n label: string;\n value: string;\n};\n\n@Component({\n imports: [ButtonModule, DialogModule, InputTextModule, SelectModule, FormsModule, TranslatePipe, MultiSelectModule],\n selector: 'menu-item-edit-dialog',\n standalone: true,\n template: `\n <p-dialog\n header=\"{{ 'menuItemEditDialogComponent.header' | translate }}\"\n [modal]=\"true\"\n [style]=\"{ width: '40rem' }\"\n [(visible)]=\"visible\"\n (keydown.enter)=\"save()\">\n <div class=\"flex items-center gap-4 mb-4 mt-1\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-edit-dialog-menu-input\">\n {{ 'menuItemEditDialogComponent.label' | translate }}\n </label>\n <input\n autocomplete=\"off\"\n class=\"flex-auto\"\n id=\"oip-menu-item-edit-dialog-menu-input\"\n pInputText\n [(ngModel)]=\"item.label\" />\n </div>\n\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-edit-dialog-icon\">\n {{ 'menuItemEditDialogComponent.icon' | translate }}\n </label>\n <p-select\n appendTo=\"body\"\n class=\"flex-auto\"\n filterBy=\"label,value\"\n id=\"oip-menu-item-edit-dialog-icon\"\n optionLabel=\"label\"\n optionValue=\"value\"\n scrollHeight=\"18rem\"\n [filter]=\"true\"\n [options]=\"iconOptions\"\n [(ngModel)]=\"item.icon\">\n <ng-template let-icon pTemplate=\"selectedItem\">\n <div class=\"flex items-center gap-2\">\n <i [class]=\"icon.value\"></i>\n <span>{{ icon.label }}</span>\n </div>\n </ng-template>\n <ng-template let-icon pTemplate=\"item\">\n <div class=\"flex items-center gap-2\">\n <i [class]=\"icon.value\"></i>\n <span>{{ icon.label }}</span>\n </div>\n </ng-template>\n </p-select>\n </div>\n\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"security\">\n {{ 'menuItemEditDialogComponent.security' | translate }}\n </label>\n <p-multiSelect\n appendTo=\"body\"\n class=\"flex-auto\"\n id=\"oip-menu-item-edit-dialog-roles-multi-select\"\n placeholder=\"Select roles\"\n [maxSelectedLabels]=\"10\"\n [options]=\"roles\"\n [(ngModel)]=\"item.viewRoles\" />\n </div>\n\n <div class=\"flex justify-end gap-2\">\n <p-button\n id=\"oip-menu-item-edit-dialog-cancel-edit-button\"\n label=\"{{ 'menuItemEditDialogComponent.cancel' | translate }}\"\n severity=\"secondary\"\n [disabled]=\"saving\"\n (click)=\"changeVisible()\" />\n <p-button\n id=\"oip-menu-item-edit-dialog-save-edit-button\"\n label=\"{{ 'menuItemEditDialogComponent.save' | translate }}\"\n [disabled]=\"saving\"\n [loading]=\"saving\"\n (click)=\"save()\" />\n </div>\n </p-dialog>\n `\n})\nexport class MenuItemEditDialogComponent {\n private readonly menuService = inject(MenuService);\n private readonly securityApi = inject(SecurityApi);\n private readonly msgService = inject(MsgService);\n\n @Input() visible!: boolean;\n @Output() visibleChange = new EventEmitter<boolean>();\n\n roles: string[] = [];\n iconOptions: PrimeIconOption[] = Object.values(PrimeIcons)\n .filter((icon): icon is string => typeof icon === 'string')\n .map((icon) => ({\n label: icon.replace('pi pi-', ''),\n value: icon\n }))\n .sort((left, right) => left.label.localeCompare(right.label));\n item: EditModuleInstanceDto = {\n icon: '',\n label: '',\n viewRoles: [''],\n moduleId: 0,\n moduleInstanceId: 0,\n parentId: 0\n };\n saving = false;\n\n changeVisible() {\n this.visible = !this.visible;\n this.visibleChange.emit(this.visible);\n }\n\n async save() {\n if (this.saving) {\n return;\n }\n\n this.saving = true;\n try {\n await this.menuService.editModuleInstance(this.item);\n await this.menuService.loadMenu();\n this.hide();\n } catch (error) {\n this.msgService.error(error);\n } finally {\n this.saving = false;\n }\n }\n\n hide() {\n this.visible = false;\n this.visibleChange.emit(this.visible);\n }\n\n async showDialog() {\n this.item = {\n moduleInstanceId: this.menuService.contextMenuItem?.moduleInstanceId,\n moduleId: this.menuService.contextMenuItem?.moduleId,\n parentId: this.menuService.contextMenuItem?.parentId,\n label: this.menuService.contextMenuItem?.label,\n icon: this.menuService.contextMenuItem?.icon,\n viewRoles: this.menuService.contextMenuItem?.securities\n };\n\n this.roles = await this.securityApi.getRealmRoles();\n\n this.visible = true;\n this.visibleChange.emit(this.visible);\n }\n}\n","import { Component, inject, OnInit, ViewChild } from '@angular/core';\nimport { MenuService } from '../../services/app.menu.service';\nimport { ButtonModule } from 'primeng/button';\nimport { SecurityService } from '../../services/security.service';\nimport { ContextMenu, ContextMenuModule } from 'primeng/contextmenu';\nimport { DialogModule } from 'primeng/dialog';\nimport { MenuItemCommandEvent, PrimeIcons } from 'primeng/api';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { FormsModule } from '@angular/forms';\nimport { MenuItemComponent } from './menu-item.component';\nimport { MenuItemCreateDialogComponent } from './menu-item-create-dialog.component';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MenuItemEditDialogComponent } from './menu-item-edit-dialog.component';\nimport { MenuApi } from '../../api/menu.api';\n\n@Component({\n imports: [\n MenuItemComponent,\n ButtonModule,\n ContextMenuModule,\n DialogModule,\n InputTextModule,\n MenuItemCreateDialogComponent,\n FormsModule,\n MenuItemEditDialogComponent\n ],\n providers: [MenuApi],\n selector: 'app-menu',\n standalone: true,\n template: ` <div #empty class=\"layout-sidebar\" (contextmenu)=\"onContextMenu($event)\">\n <ul class=\"layout-menu\">\n @for (item of menuService.menu; track item; let i = $index) {\n <ng-container>\n @if (item.separator) {\n <li class=\"menu-separator\"></li>\n } @else {\n <li\n app-menuitem\n [contextMenu]=\"contextMenu\"\n [index]=\"i\"\n [item]=\"item\"\n [menuItemCreateDialogComponent]=\"menuItemCreateDialogComponent\"\n [menuItemEditDialogComponent]=\"menuItemEditDialogComponent\"\n [root]=\"true\"></li>\n }\n </ng-container>\n }\n </ul>\n </div>\n @if (securityService.isAdmin()) {\n <p-contextMenu [target]=\"empty\" />\n <menu-item-create-dialog />\n <menu-item-edit-dialog />\n }`\n})\nexport class MenuComponent implements OnInit {\n readonly menuService = inject(MenuService);\n readonly securityService = inject(SecurityService);\n readonly translateService = inject(TranslateService);\n @ViewChild(MenuItemCreateDialogComponent) menuItemCreateDialogComponent: MenuItemCreateDialogComponent;\n @ViewChild(MenuItemEditDialogComponent) menuItemEditDialogComponent: MenuItemEditDialogComponent;\n @ViewChild(ContextMenu) contextMenu: ContextMenu;\n\n ngOnInit() {\n this.menuService.loadMenu().then();\n }\n\n private newClick(e: MenuItemCommandEvent) {\n this.menuItemCreateDialogComponent.showDialog();\n }\n\n protected onContextMenu($event: MouseEvent) {\n if (!this.securityService.isAdmin()) {\n return;\n }\n\n this.menuService.contextMenuItem = null;\n this.contextMenu.model = [\n {\n label: this.translateService.instant('menuComponent.new'),\n icon: PrimeIcons.PLUS,\n command: (event) => this.newClick(event)\n }\n ];\n }\n}\n","import { Component } from '@angular/core';\r\nimport { MenuComponent } from './menu/menu.component';\r\n\r\n@Component({\r\n selector: 'app-sidebar',\r\n template: ` <app-menu></app-menu>`,\r\n standalone: true,\r\n imports: [MenuComponent]\r\n})\r\nexport class SidebarComponent {\r\n constructor() {}\r\n}\r\n","import { Component, Renderer2, ViewChild, OnDestroy, inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { AppTopbar } from './top-bar.component';\r\nimport { FooterComponent } from './footer.component';\r\nimport { LayoutService } from './../services/app.layout.service';\r\nimport { SidebarComponent } from './sidebar.component';\r\nimport { MenuApi } from '../api/menu.api';\r\nimport { MenuService } from '../services/app.menu.service';\r\n\r\n@Component({\r\n selector: 'app-layout',\r\n standalone: true,\r\n imports: [CommonModule, AppTopbar, SidebarComponent, RouterModule, FooterComponent],\r\n template: `\r\n <div class=\"layout-wrapper\" [ngClass]=\"containerClass\">\r\n <app-topbar></app-topbar>\r\n <app-sidebar></app-sidebar>\r\n <div class=\"layout-main-container\">\r\n <div class=\"layout-main\">\r\n <router-outlet></router-outlet>\r\n </div>\r\n <app-footer></app-footer>\r\n </div>\r\n <div class=\"layout-mask animate-fadein\"></div>\r\n </div>\r\n `,\r\n providers: [MenuService, MenuApi]\r\n})\r\nexport class AppLayoutComponent implements OnDestroy {\r\n protected layoutService = inject(LayoutService);\r\n protected router = inject(Router);\r\n protected renderer = inject(Renderer2);\r\n overlayMenuOpenSubscription: Subscription;\r\n\r\n menuOutsideClickListener: () => void;\r\n\r\n @ViewChild(SidebarComponent) appSidebar!: SidebarComponent;\r\n\r\n @ViewChild(AppTopbar) appTopBar!: AppTopbar;\r\n\r\n constructor() {\r\n this.overlayMenuOpenSubscription = this.layoutService.overlayOpen$.subscribe(() => {\r\n if (!this.menuOutsideClickListener) {\r\n this.menuOutsideClickListener = this.renderer.listen('document', 'click', (event) => {\r\n if (this.isOutsideClicked(event)) {\r\n this.hideMenu();\r\n }\r\n });\r\n }\r\n\r\n if (this.layoutService.layoutState().staticMenuMobileActive) {\r\n this.blockBodyScroll();\r\n }\r\n });\r\n\r\n this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe(() => {\r\n this.hideMenu();\r\n });\r\n }\r\n\r\n isOutsideClicked(event: MouseEvent) {\r\n const sidebarEl = document.querySelector('.layout-sidebar');\r\n const topbarEl = document.querySelector('.layout-menu-button');\r\n const eventTarget = event.target as Node;\r\n\r\n return !(\r\n sidebarEl?.isSameNode(eventTarget) ||\r\n sidebarEl?.contains(eventTarget) ||\r\n topbarEl?.isSameNode(eventTarget) ||\r\n topbarEl?.contains(eventTarget)\r\n );\r\n }\r\n\r\n hideMenu() {\r\n this.layoutService.layoutState.update((prev) => ({\r\n ...prev,\r\n overlayMenuActive: false,\r\n staticMenuMobileActive: false,\r\n menuHoverActive: false\r\n }));\r\n if (this.menuOutsideClickListener) {\r\n this.menuOutsideClickListener();\r\n this.menuOutsideClickListener = null;\r\n }\r\n this.unblockBodyScroll();\r\n }\r\n\r\n blockBodyScroll(): void {\r\n if (document.body.classList) {\r\n document.body.classList.add('blocked-scroll');\r\n } else {\r\n document.body.className += ' blocked-scroll';\r\n }\r\n }\r\n\r\n unblockBodyScroll(): void {\r\n if (document.body.classList) {\r\n document.body.classList.remove('blocked-scroll');\r\n } else {\r\n document.body.className = document.body.className.replace(\r\n new RegExp('(^|\\\\b)' + 'blocked-scroll'.split(' ').join('|') + '(\\\\b|$)', 'gi'),\r\n ' '\r\n );\r\n }\r\n }\r\n\r\n get containerClass() {\r\n return {\r\n 'layout-overlay': this.layoutService.layoutConfig().menuMode === 'overlay',\r\n 'layout-static': this.layoutService.layoutConfig().menuMode === 'static',\r\n 'layout-static-inactive':\r\n this.layoutService.layoutState().staticMenuDesktopInactive &&\r\n this.layoutService.layoutConfig().menuMode === 'static',\r\n 'layout-overlay-active': this.layoutService.layoutState().overlayMenuActive,\r\n 'layout-mobile-active': this.layoutService.layoutState().staticMenuMobileActive\r\n };\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.overlayMenuOpenSubscription) {\r\n this.overlayMenuOpenSubscription.unsubscribe();\r\n }\r\n\r\n if (this.menuOutsideClickListener) {\r\n this.menuOutsideClickListener();\r\n }\r\n }\r\n}\r\n","import { Component, computed, inject } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { StyleClassModule } from 'primeng/styleclass';\nimport { AppConfiguratorComponent } from './app-configurator/app-configurator.component';\nimport { LayoutService } from '../services/app.layout.service';\n\n@Component({\n selector: 'app-floating-configurator',\n imports: [ButtonModule, StyleClassModule, AppConfiguratorComponent],\n template: `\n <div class=\"fixed flex gap-4 top-8 right-8\">\n <p-button\n id=\"oip-app-floating-configurator-dark-theme-button\"\n severity=\"secondary\"\n type=\"button\"\n [icon]=\"isDarkTheme() ? 'pi pi-moon' : 'pi pi-sun'\"\n [rounded]=\"true\"\n (onClick)=\"toggleDarkMode()\" />\n <div class=\"relative\">\n <p-button\n enterActiveClass=\"animate-scalein\"\n enterFromClass=\"hidden\"\n icon=\"pi pi-palette\"\n id=\"oip-app-floating-configurator-next-button\"\n leaveActiveClass=\"animate-fadeout\"\n leaveToClass=\"hidden\"\n pStyleClass=\"@next\"\n type=\"button\"\n [hideOnOutsideClick]=\"true\"\n [rounded]=\"true\" />\n <app-configurator />\n </div>\n </div>\n `\n})\nexport class AppFloatingConfiguratorComponent {\n LayoutService = inject(LayoutService);\n\n isDarkTheme = computed(() => this.LayoutService.layoutConfig().darkTheme);\n\n toggleDarkMode() {\n this.LayoutService.layoutConfig.update((state) => ({\n ...state,\n darkTheme: !state.darkTheme\n }));\n }\n}\n","import { Component } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { LogoComponent } from '../logo.component';\nimport { Button } from 'primeng/button';\nimport { AppFloatingConfiguratorComponent } from '../app-floating-configurator.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { L10nService } from '../../services/l10n.service';\n\nimport en from './l10n/notfound.en.json';\nimport ru from './l10n/notfound.ru.json';\n\nL10nService.registerTranslations({ en, ru });\n\n@Component({\n selector: 'app-notfound',\n template: ` <app-floating-configurator />\n <div class=\"flex items-center justify-center min-h-screen overflow-hidden\">\n <div class=\"flex flex-col items-center justify-center\">\n <div\n style=\"border-radius: 56px; padding: 0.3rem; background: linear-gradient(180deg, color-mix(in srgb, var(--primary-color), transparent 60%) 10%, var(--surface-ground) 30%)\">\n <div\n class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20 flex flex-col items-center\"\n style=\"border-radius: 53px\">\n <div class=\"flex flex-col items-center justify-center\">\n <logo [height]=\"96\" [width]=\"96\"></logo>\n </div>\n <span class=\"text-primary font-bold text-3xl\">{{ 'notfound.errorCode' | translate }}</span>\n <h1 class=\"text-surface-900 dark:text-surface-0 font-bold text-3xl lg:text-5xl mb-2\">\n {{ 'notfound.title' | translate }}\n </h1>\n <div class=\"text-surface-600 dark:text-surface-200 mb-8\">{{ 'notfound.description' | translate }}</div>\n <p-button id=\"oip-app-notfound-go-to-home-button\" routerLink=\"/\" [label]=\"'notfound.button' | translate\" />\n </div>\n </div>\n </div>\n </div>`,\n imports: [RouterLink, LogoComponent, Button, AppFloatingConfiguratorComponent, TranslateModule],\n standalone: true\n})\nexport class NotfoundComponent {\n constructor(l10nService: L10nService) {\n l10nService.get('notfound');\n }\n}\n","import { Component, OnInit, inject } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { RippleModule } from 'primeng/ripple';\r\nimport { LogoComponent } from '../../logo.component';\r\nimport { BffSecurityService, SecurityService } from '../../../services/security.service';\r\nimport { AppFloatingConfiguratorComponent } from '../../app-floating-configurator.component';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\n\r\n@Component({\r\n template: `\r\n <app-floating-configurator />\r\n <div\r\n class=\"bg-surface-50 dark:bg-surface-950 flex items-center justify-center min-h-screen min-w-[100vw] overflow-hidden\">\r\n <div class=\"flex flex-col items-center justify-center\">\r\n <div\r\n style=\"border-radius: 56px; padding: 0.3rem; background: linear-gradient(180deg, var(--primary-color) 10%, rgba(33, 150, 243, 0) 30%)\">\r\n <div class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20\" style=\"border-radius: 53px\">\r\n <div class=\"flex flex-col items-center justify-center\">\r\n <logo [height]=\"96\" [width]=\"96\" />\r\n </div>\r\n <div class=\"text-center mb-8\">\r\n <div class=\"text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4\">\r\n {{ 'unauthorized.welcomeToOip' | translate }}\r\n </div>\r\n <span class=\"text-muted-color font-medium\">{{ 'unauthorized.signInToContinue' | translate }}</span>\r\n </div>\r\n <div>\r\n <p-button\r\n id=\"oip-unauthorized-error-sign-in-button\"\r\n label=\"{{ 'unauthorized.signIn' | translate }}\"\r\n styleClass=\"w-full\"\r\n (click)=\"signIn()\"></p-button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n imports: [\r\n ButtonModule,\r\n RippleModule,\r\n LogoComponent,\r\n AppFloatingConfiguratorComponent,\r\n ReactiveFormsModule,\r\n TranslatePipe\r\n ]\r\n})\r\nexport class UnauthorizedComponent implements OnInit {\r\n protected readonly securityService = inject(SecurityService);\r\n private readonly route = inject(ActivatedRoute);\r\n\r\n ngOnInit(): void {\r\n const returnUrl = sessionStorage.getItem(BffSecurityService.authorizeAfterLogoutReturnUrlKey);\r\n if (!returnUrl) {\r\n return;\r\n }\r\n\r\n sessionStorage.removeItem(BffSecurityService.authorizeAfterLogoutReturnUrlKey);\r\n this.securityService.authorize(returnUrl);\r\n }\r\n\r\n protected signIn(): void {\r\n const returnUrl = this.route.snapshot.queryParamMap.get('returnUrl') || '/';\r\n this.securityService.authorize(returnUrl);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { ButtonModule } from 'primeng/button';\nimport { RippleModule } from 'primeng/ripple';\n\n@Component({\n selector: 'app-access',\n template: `<div\n class=\"surface-ground flex align-items-center justify-content-center min-h-screen min-w-screen overflow-hidden\">\n <div class=\"flex flex-column align-items-center justify-content-center\">\n <img alt=\"Sakai logo\" class=\"mb-5 w-6rem flex-shrink-0\" src=\"assets/demo/images/access/logo-orange.svg\" />\n <div\n style=\"border-radius:56px; padding:0.3rem; background: linear-gradient(180deg, rgba(247, 149, 48, 0.4) 10%, rgba(247, 149, 48, 0) 30%);\">\n <div\n class=\"w-full surface-card py-8 px-5 sm:px-8 flex flex-column align-items-center\"\n style=\"border-radius:53px\">\n <div class=\"grid flex-column align-items-center\">\n <div\n class=\"flex justify-content-center align-items-center bg-orange-500 border-circle\"\n style=\"width:3.2rem; height:3.2rem;\">\n <i class=\"text-50 pi pi-fw pi-lock text-2xl\"></i>\n </div>\n <h1 class=\"text-900 font-bold text-4xl lg:text-5xl mb-2\">Access Denied</h1>\n <span class=\"text-600 mb-5\">You do not have the necessary permisions. Please contact admins.</span>\n <img alt=\"Access denied\" class=\"mb-5\" src=\"assets/demo/images/access/asset-access.svg\" width=\"80%\" />\n <p-button\n class=\"p-button-text\"\n icon=\"pi pi-arrow-left\"\n id=\"oip-app-access-go-to-dashboard-button\"\n label=\"Go to Dashboard\"\n pButton\n pRipple\n [routerLink]=\"['/']\"></p-button>\n </div>\n </div>\n </div>\n </div>\n </div>`,\n imports: [RouterLink, ButtonModule, RippleModule],\n standalone: true\n})\nexport class AccessComponent {}\n","import { Component } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { RippleModule } from 'primeng/ripple';\r\nimport { RouterLink } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-error',\r\n template: `<div\r\n class=\"surface-ground flex align-items-center justify-content-center min-h-screen min-w-screen overflow-hidden\">\r\n <div class=\"flex flex-column align-items-center justify-content-center\">\r\n <img alt=\"Sakai logo\" class=\"mb-5 w-6rem flex-shrink-0\" src=\"assets/demo/images/error/logo-error.svg\" />\r\n <div\r\n style=\"border-radius:56px; padding:0.3rem; background: linear-gradient(180deg, rgba(233, 30, 99, 0.4) 10%, rgba(33, 150, 243, 0) 30%);\">\r\n <div\r\n class=\"w-full surface-card py-8 px-5 sm:px-8 flex flex-column align-items-center\"\r\n style=\"border-radius:53px\">\r\n <div class=\"grid flex flex-column align-items-center\">\r\n <div\r\n class=\"flex justify-content-center align-items-center bg-pink-500 border-circle\"\r\n style=\"height:3.2rem; width:3.2rem;\">\r\n <i class=\"pi pi-fw pi-exclamation-circle text-2xl text-white\"></i>\r\n </div>\r\n <h1 class=\"text-900 font-bold text-5xl mb-2\">Error Occured</h1>\r\n <span class=\"text-600 mb-5\">Requested resource is not available.</span>\r\n <img alt=\"Error\" class=\"mb-5\" src=\"assets/demo/images/error/asset-error.svg\" width=\"80%\" />\r\n <button\r\n class=\"p-button-text\"\r\n icon=\"pi pi-arrow-left\"\r\n id=\"oip-app-error-go-to-dashboard-button\"\r\n label=\"Go to Dashboard\"\r\n pButton\r\n pRipple\r\n [routerLink]=\"['/']\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>`,\r\n standalone: true,\r\n imports: [ButtonModule, RippleModule, RouterLink]\r\n})\r\nexport class ErrorComponent {}\r\n","import { Component, inject } from '@angular/core';\nimport { FileUploadModule } from 'primeng/fileupload';\nimport { ImageModule } from 'primeng/image';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ButtonModule } from 'primeng/button';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { ConfirmationService } from 'primeng/api';\nimport { MsgService } from '../../services/msg.service';\nimport { UserService } from '../../services/user.service';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { UserProfileApi } from '../../api/user-profile.api';\nimport { L10nService } from '../../services/l10n.service';\n\nimport en from './l10n/profile.en.json';\nimport ru from './l10n/profile.ru.json';\n\nL10nService.registerTranslations({ en, ru });\n\n@Component({\n selector: 'user-profile',\n standalone: true,\n imports: [FileUploadModule, ImageModule, AvatarModule, ButtonModule, ConfirmDialog, TranslatePipe],\n providers: [ConfirmationService],\n template: `\n <p-confirmDialog></p-confirmDialog>\n <p-avatar\n class=\"mr-2\"\n id=\"oip-user-profile-photo-avatar\"\n shape=\"circle\"\n size=\"xlarge\"\n [image]=\"userService.photoLoaded ? userService.photo : null\" />\n <div class=\"mt-2 flex gap-2\">\n <p-fileupload\n accept=\"image/*\"\n chooseIcon=\"pi pi-upload\"\n chooseLabel=\"{{ 'profileComponent.changePhoto' | translate }}\"\n id=\"oip-user-profile-file-upload\"\n maxFileSize=\"1000000\"\n mode=\"basic\"\n name=\"files\"\n [auto]=\"true\"\n [customUpload]=\"true\"\n (uploadHandler)=\"uploadPhoto($event)\" />\n @if (userService.photoLoaded) {\n <p-button\n icon=\"pi pi-trash\"\n id=\"oip-user-profile-delete-photo\"\n label=\"{{ 'profileComponent.deletePhoto' | translate }}\"\n severity=\"danger\"\n [outlined]=\"true\"\n (onClick)=\"confirmDeletePhoto($event)\" />\n }\n </div>\n `\n})\nexport class UserProfileComponent {\n readonly userService = inject(UserService);\n readonly msgService = inject(MsgService);\n readonly translateService = inject(TranslateService);\n readonly userProfileApi = inject(UserProfileApi);\n private readonly confirmationService = inject(ConfirmationService);\n\n constructor(l10nService: L10nService) {\n l10nService.get('profileComponent');\n }\n\n async uploadPhoto(event: any): Promise<void> {\n const file = event.files?.[0];\n if (!file) {\n return;\n }\n\n try {\n await this.userProfileApi.postUserPhoto({ files: file });\n this.userService.refreshUserPhoto();\n this.msgService.success(this.translateService.instant('profileComponent.successfullyUploaded'));\n } catch (error) {\n this.msgService.error(error);\n }\n }\n\n confirmDeletePhoto(event: Event): void {\n this.confirmationService.confirm({\n target: event.target as EventTarget,\n header: this.translateService.instant('profileComponent.deletePhotoConfirmHeader'),\n message: this.translateService.instant('profileComponent.deletePhotoConfirmMessage'),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.translateService.instant('profileComponent.deletePhotoConfirmRejectButtonPropsLabel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.translateService.instant('profileComponent.deletePhotoConfirmAcceptButtonPropsLabel'),\n severity: 'danger'\n },\n accept: async () => {\n await this.deletePhoto();\n }\n });\n }\n\n private async deletePhoto(): Promise<void> {\n try {\n await this.userProfileApi.deleteUserPhoto();\n this.userService.refreshUserPhoto();\n this.msgService.success(this.translateService.instant('profileComponent.photoDeleted'));\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('profileComponent.failedToDeletePhoto'));\n }\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { UserProfileComponent } from '../user-profile/user-profile.component';\nimport { Tooltip } from 'primeng/tooltip';\nimport { FormsModule } from '@angular/forms';\nimport { Select } from 'primeng/select';\nimport { TableModule } from 'primeng/table';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { UserService } from '../../services/user.service';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\nimport { RouterLink } from '@angular/router';\nimport { SecurityService } from '../../services/security.service';\nimport { MenuService } from '../../services/app.menu.service';\nimport { Button } from 'primeng/button';\nimport { L10nService } from '../../services/l10n.service';\nimport { TranslatePipe } from '@ngx-translate/core';\n\nimport en from './l10n/config.en.json';\nimport ru from './l10n/config.ru.json';\n\nL10nService.registerTranslations({ en, ru });\n\n@Component({\n selector: 'app-config',\n template: `\n <div class=\"flex flex-col md:flex-row gap-4\">\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ 'config.profile' | translate }}</div>\n <div class=\"flex justify-content-end flex-wrap\">\n {{ userService.userName }}\n </div>\n <label>\n {{ 'config.photo' | translate }}\n <span\n class=\"pi pi-question-circle\"\n pTooltip=\"{{ 'config.usePhoto256x256Pixel' | translate }}\"\n tooltipPosition=\"right\"></span>\n </label>\n <div class=\"flex justify-content-end flex-wrap\">\n <user-profile></user-profile>\n </div>\n </div>\n </div>\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ 'config.localization' | translate }}</div>\n <label> {{ 'config.selectLanguage' | translate }} </label>\n <div class=\"flex justify-content-end flex-wrap\">\n <p-select\n class=\"w-full md:w-56\"\n optionLabel=\"name\"\n optionValue=\"code\"\n qa-id=\"oip-app-config-language-select\"\n [options]=\"l10nService.availableLanguages\"\n [(ngModel)]=\"selectedLanguage\"\n (onChange)=\"changeLanguage()\">\n <ng-template #selectedItem let-selectedOption>\n <div class=\"flex items-center gap-2\">\n <span [class]=\"selectedOption.icon\"></span>\n <div>{{ selectedOption.name }}</div>\n </div>\n </ng-template>\n <ng-template #item let-languages>\n <div class=\"flex items-center gap-2\">\n <span [class]=\"languages.icon\"></span>\n <div>{{ languages.name }}</div>\n </div>\n </ng-template>\n </p-select>\n </div>\n <div class=\"flex flex-col gap-5\">\n <div class=\"mt-5\">{{ 'config.dateTimeFormat' | translate }}</div>\n <p-select\n class=\"w-full md:w-56\"\n qa-id=\"oip-app-config-date-format-select\"\n [options]=\"dateFormats\"\n [placeholder]=\"'config.dateFormat' | translate\"\n [(ngModel)]=\"selectedDateFormat\"\n (onChange)=\"changeDateFormat()\" />\n <p-select\n class=\"w-full md:w-56\"\n qa-id=\"oip-app-config-time-format-select\"\n [options]=\"timeFormats\"\n [placeholder]=\"'config.timeFormat' | translate\"\n [(ngModel)]=\"selectedTimeFormat\"\n (onChange)=\"changeTimeFormat()\" />\n <div class=\"mt-5\">{{ 'config.timeZone' | translate }}</div>\n <p-select\n class=\"w-full md:w-56\"\n qa-id=\"oip-app-config-timezone-select\"\n [filter]=\"true\"\n [options]=\"allTimeZones\"\n [placeholder]=\"'config.timeZone' | translate\"\n [virtualScroll]=\"true\"\n [virtualScrollItemSize]=\"34\"\n [(ngModel)]=\"selectedTimeZone\"\n (onChange)=\"changeTimeZone()\" />\n </div>\n </div>\n </div>\n @if (securityService.isAdmin()) {\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ 'config.menu' | translate }}</div>\n <div class=\"flex items-center gap-2\">\n <label for=\"oip-app-config-admin-mode\">{{ 'config.all' | translate }}</label>\n <p-toggle-switch\n id=\"oip-app-config-admin-mode\"\n [(ngModel)]=\"menuService.adminMode\"\n (onChange)=\"onSwitchChange()\"></p-toggle-switch>\n </div>\n <div class=\"flex items-center gap-2\">\n <label for=\"oip-app-config-admin-mode\">{{ 'config.moduleManagement' | translate }}</label>\n <p-button icon=\"pi pi-cog\" label=\"{{ 'config.goTo' | translate }}\" routerLink=\"/modules\" />\n </div>\n <div class=\"flex items-center gap-2\">\n <label for=\"oip-app-config-applications-link\">{{ 'config.applicationManagement' | translate }}</label>\n <p-button\n icon=\"pi pi-th-large\"\n id=\"oip-app-config-applications-link\"\n label=\"{{ 'config.goTo' | translate }}\"\n routerLink=\"/applications\" />\n </div>\n </div>\n </div>\n }\n </div>\n `,\n imports: [\n UserProfileComponent,\n Tooltip,\n FormsModule,\n Select,\n TableModule,\n TranslatePipe,\n ToggleSwitchModule,\n Button,\n RouterLink\n ]\n})\nexport class ConfigComponent {\n private readonly layoutService = inject(LayoutService);\n protected readonly l10nService = inject(L10nService);\n protected readonly userService = inject(UserService);\n protected readonly securityService = inject(SecurityService);\n protected readonly menuService = inject(MenuService);\n protected readonly dateFormats: string[] = ['dd.MM.yyyy', 'dd.MM.yy', 'yyyy-MM-dd', 'dd.MMM.yyyy'];\n protected readonly timeFormats: string[] = ['HH:mm:ss', 'HH:mm'];\n // @ts-ignore\n protected readonly allTimeZones: any[] = Intl.supportedValuesOf('timeZone');\n\n protected selectedLanguage: any;\n protected selectedDateFormat: string;\n protected selectedTimeFormat: string;\n protected selectedTimeZone: string;\n\n constructor() {\n this.l10nService.loadComponentTranslations('config');\n this.selectedLanguage = this.layoutService.language();\n this.selectedDateFormat = this.layoutService.dateFormat();\n this.selectedTimeFormat = this.layoutService.timeFormat();\n this.selectedTimeZone = this.layoutService.timeZone();\n }\n\n changeLanguage() {\n this.layoutService.layoutConfig.update((config) => ({\n ...config,\n language: this.selectedLanguage\n }));\n this.l10nService.use(this.selectedLanguage, 'config');\n }\n\n changeDateFormat() {\n this.layoutService.layoutConfig.update((config) => ({ ...config, dateFormat: this.selectedDateFormat }));\n }\n\n changeTimeFormat() {\n this.layoutService.layoutConfig.update((config) => ({ ...config, timeFormat: this.selectedTimeFormat }));\n }\n\n changeTimeZone() {\n this.layoutService.layoutConfig.update((config) => ({ ...config, timeZone: this.selectedTimeZone }));\n }\n\n async onSwitchChange(): Promise<void> {\n await this.menuService.loadMenu();\n }\n}\n","import { Component, inject, OnDestroy, OnInit } from '@angular/core';\nimport { TagModule } from 'primeng/tag';\nimport { ConfirmationService, SharedModule } from 'primeng/api';\nimport { TableModule } from 'primeng/table';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { TextareaModule } from 'primeng/textarea';\nimport { ButtonModule } from 'primeng/button';\nimport { FormsModule } from '@angular/forms';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { Tooltip } from 'primeng/tooltip';\nimport { BaseModuleComponent } from '../base-module/base-module.component';\nimport { NoSettingsDto } from '../../dtos/no-settings.dto';\nimport { SecurityComponent } from '../security/security.component';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport en from './l10n/db-migration.en.json';\nimport ru from './l10n/db-migration.ru.json';\n\nexport interface MigrationDto {\n name: string;\n applied: boolean;\n pending: boolean;\n exist: boolean;\n}\n\nexport interface ApplyMigrationRequest {\n name: string;\n}\n\n@Component({\n imports: [\n TableModule,\n SharedModule,\n TagModule,\n InputTextModule,\n TextareaModule,\n ButtonModule,\n FormsModule,\n ConfirmDialog,\n SecurityComponent,\n Tooltip,\n TranslatePipe\n ],\n selector: 'db-migration',\n template: `\n @if (isContent) {\n <div class=\"card\" style=\"height: 100%\">\n <p-confirmDialog />\n <div>\n <h5>{{ 'db-migration.migrationManager' | translate }}</h5>\n <div class=\"flex flex-row gap-2\">\n <p-button\n icon=\"pi pi-refresh\"\n severity=\"secondary\"\n tooltipPosition=\"bottom\"\n [outlined]=\"true\"\n [pTooltip]=\"'db-migration.actions.refresh' | translate\"\n (click)=\"refreshAction()\" />\n <p-button\n icon=\"pi pi-filter-slash\"\n severity=\"secondary\"\n tooltipPosition=\"bottom\"\n [outlined]=\"true\"\n [pTooltip]=\"'db-migration.actions.cleanFilter' | translate\"\n (click)=\"dt.clear()\" />\n </div>\n <div>\n <p-table #dt dataKey=\"name\" editMode=\"row\" size=\"small\" [scrollable]=\"true\" [value]=\"data\">\n <ng-template let-columns pTemplate=\"header\">\n <tr>\n <th pSortableColumn=\"name\" scope=\"col\">\n {{ 'db-migration.columns.name' | translate }}\n <p-columnFilter display=\"menu\" field=\"name\" type=\"text\" />\n </th>\n <th scope=\"col\">{{ 'db-migration.columns.applied' | translate }}</th>\n <th scope=\"col\">{{ 'db-migration.columns.exist' | translate }}</th>\n <th scope=\"col\">{{ 'db-migration.columns.pending' | translate }}</th>\n <th scope=\"col\"></th>\n </tr>\n </ng-template>\n\n <ng-template #body let-columns=\"columns\" let-editing=\"editing\" let-ri=\"rowIndex\" let-rowData>\n <tr [pEditableRow]=\"rowData\">\n <td>\n {{ rowData.name }}\n </td>\n <td>\n @if (rowData.applied) {\n <p-button icon=\"pi pi-check\" severity=\"success\" [rounded]=\"true\" [text]=\"true\"></p-button>\n }\n </td>\n <td>\n @if (rowData.exist) {\n <p-button icon=\"pi pi-check\" severity=\"success\" [rounded]=\"true\" [text]=\"true\" />\n }\n </td>\n <td>\n @if (rowData.pending) {\n <p-button icon=\"pi pi-check\" severity=\"success\" [rounded]=\"true\" [text]=\"true\"></p-button>\n }\n </td>\n <td>\n <p-button\n icon=\"pi pi-bolt\"\n pCancelEditableRow\n pTooltip=\"{{ 'db-migration.actions.applyMigration' | translate }}\"\n severity=\"secondary\"\n tooltipPosition=\"left\"\n [rounded]=\"true\"\n [text]=\"true\"\n (click)=\"applyMigration(rowData)\">\n </p-button>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n </div>\n } @else if (isSecurity) {\n <security [controller]=\"controller\" [id]=\"id\" />\n }\n `,\n providers: [ConfirmationService]\n})\nexport class DbMigrationComponent\n extends BaseModuleComponent<NoSettingsDto, NoSettingsDto>\n implements OnInit, OnDestroy\n{\n static override readonly translations = { en, ru };\n\n data: MigrationDto[];\n\n async ngOnInit() {\n await super.ngOnInit();\n await this.refreshAction();\n }\n\n async refreshAction() {\n this.getData()\n .then((response) => {\n this.data = response;\n })\n .catch((error) => {\n console.log(error);\n this.msgService.error(this.l10nService.instant('db-migration.messages.errorRefreshing'));\n });\n }\n\n async getData() {\n return this.getMigrations<MigrationDto>();\n }\n\n async applyMigration(rowData: MigrationDto) {\n const request = { name: rowData.name } as ApplyMigrationRequest;\n return this.applyModuleMigration(request);\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n ApiExceptionResponse,\n DeleteExtensionModuleParams,\n GetExtensionModuleByKeyParams,\n ModuleDto,\n RegisterExtensionModuleRequest,\n UpdateExtensionModuleParams,\n UpdateExtensionModuleRequest,\n} from \"./data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class ExtensionModulesApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getExtensionModules = (params: RequestParams = {}) =>\n this.request<ModuleDto[], ApiExceptionResponse>({\n path: `/api/extension-modules/get-extension-modules`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n getExtensionModuleByKey = (\n { extensionKey, ...query }: GetExtensionModuleByKeyParams,\n params: RequestParams = {},\n ) =>\n this.request<ModuleDto, ApiExceptionResponse>({\n path: `/api/extension-modules/get-extension-module-by-key/${extensionKey}`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n registerExtensionModule = (\n data: RegisterExtensionModuleRequest,\n params: RequestParams = {},\n ) =>\n this.request<ModuleDto, ApiExceptionResponse>({\n path: `/api/extension-modules/register-extension-module`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n updateExtensionModule = (\n { id, ...query }: UpdateExtensionModuleParams,\n data: UpdateExtensionModuleRequest,\n params: RequestParams = {},\n ) =>\n this.request<ModuleDto, ApiExceptionResponse>({\n path: `/api/extension-modules/update-extension-module/${id}`,\n method: \"PUT\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n deleteExtensionModule = (\n { id, ...query }: DeleteExtensionModuleParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/extension-modules/delete-extension-module/${id}`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n ApiExceptionResponse,\n ExistModuleDto,\n ModuleDeleteRequest,\n ModuleDto,\n} from \"./data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class ModuleApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getAll = (params: RequestParams = {}) =>\n this.request<ModuleDto[], ApiExceptionResponse>({\n path: `/api/module/get-all`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n insert = (data: ModuleDto, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/module/insert`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n delete = (data: ModuleDeleteRequest, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/module/delete`,\n method: \"DELETE\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n getModulesWithLoadStatus = (params: RequestParams = {}) =>\n this.request<ExistModuleDto[], ApiExceptionResponse>({\n path: `/api/module/get-modules-with-load-status`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { Tooltip } from 'primeng/tooltip';\nimport { FormsModule } from '@angular/forms';\nimport { TableModule } from 'primeng/table';\nimport { Tag } from 'primeng/tag';\nimport { ButtonModule } from 'primeng/button';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { MsgService } from '../../services/msg.service';\nimport { ConfirmationService } from 'primeng/api';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { L10nService } from '../../services/l10n.service';\nimport { ExtensionModulesApi } from '../../api/extension-modules.api';\nimport { ModuleApi } from '../../api/module.api';\nimport { ExistModuleDto } from '../../api/data-contracts';\nimport { AppTitleService } from '../../services/app-title.service';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { firstValueFrom } from 'rxjs';\n\nimport en from './l10n/app-modules.en.json';\nimport ru from './l10n/app-modules.ru.json';\n\nL10nService.registerTranslations({ en, ru });\n\n@Component({\n imports: [\n FormsModule,\n TableModule,\n Tag,\n ButtonModule,\n ToolbarModule,\n Tooltip,\n ConfirmDialog,\n TranslatePipe,\n InputTextModule\n ],\n providers: [ConfirmationService, ModuleApi, ExtensionModulesApi],\n selector: 'app-modules',\n template: `\n <p-confirmDialog></p-confirmDialog>\n <div class=\"flex flex-col md:flex-row gap-4\">\n <div class=\"card w-full\">\n <div class=\"font-semibold text-xl mb-4\">\n {{ 'app-modules.title' | translate }}\n </div>\n <div class=\"mb-4\">\n <p-toolbar>\n <div class=\"flex flex-col md:flex-row md:items-center gap-2 w-full\">\n <div class=\"flex flex-col sm:flex-row gap-2 flex-1\">\n <input\n class=\"w-full\"\n pInputText\n type=\"url\"\n [disabled]=\"registeringExternalModule\"\n [placeholder]=\"'app-modules.register.manifestUrlPlaceholder' | translate\"\n [(ngModel)]=\"externalModuleManifestUrl\"\n (keydown.enter)=\"registerExternalModule()\" />\n <p-button\n icon=\"pi pi-plus\"\n severity=\"success\"\n [disabled]=\"!canRegisterExternalModule\"\n [label]=\"'app-modules.register.button' | translate\"\n [loading]=\"registeringExternalModule\"\n (onClick)=\"registerExternalModule()\"></p-button>\n </div>\n <p-button\n icon=\"pi pi-refresh\"\n rounded=\"true\"\n severity=\"secondary\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [pTooltip]=\"'app-modules.refreshTooltip' | translate\"\n (onClick)=\"refreshAction()\"></p-button>\n </div>\n </p-toolbar>\n </div>\n <p-table class=\"mt-4\" [paginator]=\"true\" [rows]=\"100\" [value]=\"modules\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th>{{ 'app-modules.table.moduleId' | translate }}</th>\n <th>{{ 'app-modules.table.name' | translate }}</th>\n <th>{{ 'app-modules.table.currentlyLoaded' | translate }}</th>\n <th style=\"width: 4rem\"></th>\n </tr>\n </ng-template>\n <ng-template let-module pTemplate=\"body\">\n <tr>\n <td>{{ module.moduleId }}</td>\n <td>{{ module.name }}</td>\n <td>\n <p-tag\n [severity]=\"module.currentlyLoaded ? 'success' : 'danger'\"\n [value]=\"\n (module.currentlyLoaded ? 'app-modules.table.yes' : 'app-modules.table.no') | translate\n \"></p-tag>\n </td>\n <td>\n <p-button\n icon=\"pi pi-trash\"\n rounded=\"true\"\n severity=\"danger\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [pTooltip]=\"'app-modules.table.deleteTooltip' | translate\"\n (onClick)=\"deleteModule(module)\"></p-button>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n `\n})\nexport class AppModulesComponent implements OnInit {\n protected modules: ExistModuleDto[] = [];\n protected msgService = inject(MsgService);\n protected confirmationService = inject(ConfirmationService);\n protected l10nService = inject(L10nService);\n protected titleService = inject(AppTitleService);\n protected externalModuleManifestUrl = '';\n protected registeringExternalModule = false;\n private moduleService = inject(ModuleApi);\n private extensionModulesService = inject(ExtensionModulesApi);\n private translationsReady: Promise<unknown>;\n\n constructor() {\n this.translationsReady = firstValueFrom(this.l10nService.loadComponentTranslations('app-modules'));\n }\n\n async ngOnInit() {\n await this.translationsReady;\n this.titleService.setTitle(this.t('app-modules.title'));\n await this.refreshAction();\n }\n\n async refreshAction() {\n this.modules = await this.moduleService.getModulesWithLoadStatus();\n }\n\n protected get canRegisterExternalModule() {\n return !!this.externalModuleManifestUrl.trim() && !this.registeringExternalModule;\n }\n\n async registerExternalModule() {\n if (!this.canRegisterExternalModule) {\n return;\n }\n\n await this.translationsReady;\n this.registeringExternalModule = true;\n\n try {\n await this.extensionModulesService.registerExtensionModule({\n manifestUrl: this.externalModuleManifestUrl.trim()\n });\n this.externalModuleManifestUrl = '';\n await this.refreshAction();\n this.msgService.success(this.t('app-modules.messages.registerSuccess'));\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.t('app-modules.messages.registerError'),\n this.t('app-modules.messages.registerError')\n );\n } finally {\n this.registeringExternalModule = false;\n }\n }\n\n async deleteModule(module: ExistModuleDto) {\n await this.translationsReady;\n\n this.confirmationService.confirm({\n header: this.t('app-modules.confirm.header'),\n message: this.t('app-modules.confirm.message'),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.t('app-modules.confirm.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.t('app-modules.confirm.delete'),\n severity: 'danger'\n },\n accept: async () => {\n try {\n await this.moduleService.delete({\n moduleId: module.moduleId\n });\n await this.refreshAction();\n this.msgService.success(this.t('app-modules.messages.deleteSuccess'));\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.t('app-modules.messages.deleteError'),\n this.t('app-modules.messages.deleteError')\n );\n }\n }\n });\n }\n\n t(key: string) {\n return this.l10nService.instant(key);\n }\n}\n","export enum ServiceType {\n Service = \"Service\",\n Application = \"Application\",\n}\n\nexport interface ApiExceptionResponse {\n title?: string | null;\n message?: string | null;\n statusCode?: number;\n stackTrace?: string | null;\n}\n\nexport interface ApplicationRegistryItemDto {\n code?: string | null;\n displayName?: string | null;\n baseUrl?: string | null;\n internalBaseUrl?: string | null;\n icon?: string | null;\n order?: number;\n enabled?: boolean;\n serviceType?: ServiceType;\n isCurrent?: boolean;\n}\n\nexport interface GetApplicationRegistryItemByCodeParams {\n code: string;\n}\n\nexport interface UpdateApplicationRegistryItemParams {\n code: string;\n}\n\nexport interface DeleteApplicationRegistryItemParams {\n code: string;\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ConfirmationService } from 'primeng/api';\nimport { ButtonModule } from 'primeng/button';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { InputText } from 'primeng/inputtext';\nimport { SelectModule } from 'primeng/select';\nimport { TableModule } from 'primeng/table';\nimport { Tag } from 'primeng/tag';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { Tooltip } from 'primeng/tooltip';\nimport { firstValueFrom } from 'rxjs';\nimport { ApplicationsApi } from '../../api/applications.api';\nimport { ApplicationRegistryItemDto, ServiceType } from '../../api/applications-data-contracts';\nimport { AppTitleService } from '../../services/app-title.service';\nimport { L10nService } from '../../services/l10n.service';\nimport { MsgService } from '../../services/msg.service';\n\nimport en from './l10n/applications.en.json';\nimport ru from './l10n/applications.ru.json';\n\nL10nService.registerTranslations({ en, ru });\n\ninterface ApplicationEditModel {\n code: string;\n displayName: string;\n baseUrl: string;\n internalBaseUrl: string;\n icon: string;\n order: number;\n enabled: boolean;\n serviceType: NonNullable<ApplicationRegistryItemDto['serviceType']>;\n}\n\ninterface ApplicationTableItem extends ApplicationRegistryItemDto {\n _isEditing?: boolean;\n _isNew?: boolean;\n _editModel?: ApplicationEditModel;\n}\n\n@Component({\n imports: [\n FormsModule,\n TableModule,\n Tag,\n ButtonModule,\n ToolbarModule,\n Tooltip,\n ConfirmDialog,\n TranslatePipe,\n InputText,\n SelectModule,\n ToggleSwitchModule\n ],\n providers: [ApplicationsApi, ConfirmationService],\n selector: 'app-applications',\n template: `\n <p-confirmDialog></p-confirmDialog>\n <div class=\"flex flex-col gap-4\">\n <div class=\"card w-full\">\n <div class=\"flex flex-col gap-3 md:flex-row md:items-center md:justify-between\">\n <div>\n <div class=\"font-semibold text-xl mb-1\">\n {{ 'applications.title' | translate }}\n </div>\n <p class=\"m-0 text-surface-500\">{{ 'applications.subtitle' | translate }}</p>\n </div>\n <div class=\"flex flex-col gap-2 sm:flex-row\">\n <input\n class=\"w-full sm:w-72\"\n pInputText\n type=\"text\"\n [placeholder]=\"'applications.searchPlaceholder' | translate\"\n [(ngModel)]=\"globalFilter\"\n (keydown.enter)=\"applyGlobalFilter()\" />\n <p-button\n icon=\"pi pi-search\"\n [label]=\"'applications.search' | translate\"\n (onClick)=\"applyGlobalFilter()\"></p-button>\n <p-button\n icon=\"pi pi-filter-slash\"\n severity=\"secondary\"\n [label]=\"'applications.clear' | translate\"\n (onClick)=\"clearFilters()\"></p-button>\n </div>\n </div>\n\n <div class=\"my-4\">\n <p-toolbar>\n <p-button\n icon=\"pi pi-plus\"\n severity=\"success\"\n [disabled]=\"loading || activeRowAction\"\n [label]=\"'applications.add' | translate\"\n (onClick)=\"beginCreateApplication()\"></p-button>\n <p-button\n icon=\"pi pi-refresh\"\n rounded=\"true\"\n severity=\"secondary\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"loading || activeRowAction\"\n [pTooltip]=\"'applications.refreshTooltip' | translate\"\n (onClick)=\"refreshAction()\"></p-button>\n </p-toolbar>\n </div>\n\n <p-table\n #table\n dataKey=\"code\"\n responsiveLayout=\"scroll\"\n [globalFilterFields]=\"globalFilterFields\"\n [loading]=\"loading\"\n [paginator]=\"true\"\n [rows]=\"25\"\n [rowsPerPageOptions]=\"[10, 25, 50, 100]\"\n [value]=\"visibleApplications\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th pSortableColumn=\"code\">\n {{ 'applications.table.code' | translate }}\n <p-sortIcon field=\"code\"></p-sortIcon>\n </th>\n <th pSortableColumn=\"displayName\">\n {{ 'applications.table.displayName' | translate }}\n <p-sortIcon field=\"displayName\"></p-sortIcon>\n </th>\n <th pSortableColumn=\"baseUrl\">\n {{ 'applications.table.baseUrl' | translate }}\n <p-sortIcon field=\"baseUrl\"></p-sortIcon>\n </th>\n <th pSortableColumn=\"internalBaseUrl\">\n {{ 'applications.table.internalBaseUrl' | translate }}\n <p-sortIcon field=\"internalBaseUrl\"></p-sortIcon>\n </th>\n <th pSortableColumn=\"icon\">\n {{ 'applications.table.icon' | translate }}\n <p-sortIcon field=\"icon\"></p-sortIcon>\n </th>\n <th class=\"text-right\" pSortableColumn=\"order\">\n {{ 'applications.table.order' | translate }}\n <p-sortIcon field=\"order\"></p-sortIcon>\n </th>\n <th class=\"text-center\">{{ 'applications.table.enabled' | translate }}</th>\n <th pSortableColumn=\"serviceType\">\n {{ 'applications.table.serviceType' | translate }}\n <p-sortIcon field=\"serviceType\"></p-sortIcon>\n </th>\n <th class=\"text-center\">{{ 'applications.table.current' | translate }}</th>\n <th class=\"text-center min-w-36\">{{ 'applications.table.actions' | translate }}</th>\n </tr>\n </ng-template>\n\n <ng-template let-application pTemplate=\"body\">\n <tr>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input\n class=\"w-full min-w-32\"\n pInputText\n [disabled]=\"!application._isNew\"\n [(ngModel)]=\"editModel.code\" />\n } @else {\n <span class=\"font-medium\">{{ application.code }}</span>\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input class=\"w-full min-w-40\" pInputText [(ngModel)]=\"editModel.displayName\" />\n } @else {\n {{ application.displayName }}\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input class=\"w-full min-w-56\" pInputText [(ngModel)]=\"editModel.baseUrl\" />\n } @else {\n <span class=\"break-all\">{{ application.baseUrl }}</span>\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input class=\"w-full min-w-56\" pInputText [(ngModel)]=\"editModel.internalBaseUrl\" />\n } @else {\n <span class=\"break-all\">{{ application.internalBaseUrl }}</span>\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input class=\"w-full min-w-32\" pInputText [(ngModel)]=\"editModel.icon\" />\n } @else {\n <div class=\"flex items-center gap-2\">\n <i [class]=\"application.icon || 'pi pi-th-large'\"></i>\n <span>{{ application.icon }}</span>\n </div>\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input class=\"w-full min-w-24 text-right\" pInputText type=\"number\" [(ngModel)]=\"editModel.order\" />\n } @else {\n <span class=\"block text-right tabular-nums\">{{ application.order }}</span>\n }\n </td>\n <td class=\"text-center\">\n @if (application._isEditing && application._editModel; as editModel) {\n <p-toggle-switch [(ngModel)]=\"editModel.enabled\"></p-toggle-switch>\n } @else {\n <p-tag\n [severity]=\"application.enabled ? 'success' : 'danger'\"\n [value]=\"\n (application.enabled ? 'applications.table.yes' : 'applications.table.no') | translate\n \"></p-tag>\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <p-select\n appendTo=\"body\"\n class=\"w-full min-w-36\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [options]=\"serviceTypeOptions\"\n [(ngModel)]=\"editModel.serviceType\"></p-select>\n } @else {\n {{ serviceTypeLabel(application.serviceType) }}\n }\n </td>\n <td class=\"text-center\">\n <p-tag\n [severity]=\"application.isCurrent ? 'info' : 'secondary'\"\n [value]=\"\n (application.isCurrent ? 'applications.table.yes' : 'applications.table.no') | translate\n \"></p-tag>\n </td>\n <td>\n <div class=\"flex items-center justify-center gap-2\">\n @if (application._isEditing) {\n <p-button\n icon=\"pi pi-check\"\n severity=\"success\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"activeRowAction\"\n [pTooltip]=\"'applications.table.saveTooltip' | translate\"\n (onClick)=\"saveApplication(application)\"></p-button>\n <p-button\n icon=\"pi pi-times\"\n severity=\"secondary\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"activeRowAction\"\n [pTooltip]=\"'applications.table.cancelTooltip' | translate\"\n (onClick)=\"cancelEdit(application)\"></p-button>\n } @else {\n <p-button\n icon=\"pi pi-pencil\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"activeRowAction\"\n [pTooltip]=\"'applications.table.editTooltip' | translate\"\n (onClick)=\"editApplication(application)\"></p-button>\n <p-button\n icon=\"pi pi-trash\"\n severity=\"danger\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"activeRowAction\"\n [pTooltip]=\"'applications.table.deleteTooltip' | translate\"\n (onClick)=\"deleteApplication(application)\"></p-button>\n }\n </div>\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td class=\"py-8 text-center text-surface-500\" colspan=\"10\">\n {{ 'applications.empty' | translate }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n `\n})\nexport class ApplicationsComponent implements OnInit {\n protected readonly globalFilterFields = ['code', 'displayName', 'baseUrl', 'internalBaseUrl', 'icon', 'serviceType'];\n protected get serviceTypeOptions(): {\n label: string;\n value: NonNullable<ApplicationRegistryItemDto['serviceType']>;\n }[] {\n return [\n {\n label: this.t('applications.serviceTypes.service'),\n value: ServiceType.Service\n },\n {\n label: this.t('applications.serviceTypes.application'),\n value: ServiceType.Application\n }\n ];\n }\n protected applications: ApplicationTableItem[] = [];\n protected visibleApplications: ApplicationTableItem[] = [];\n protected globalFilter = '';\n protected loading = false;\n protected activeRowAction = false;\n\n private readonly applicationsApi = inject(ApplicationsApi);\n private readonly msgService = inject(MsgService);\n private readonly l10nService = inject(L10nService);\n private readonly titleService = inject(AppTitleService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly translationsReady: Promise<unknown>;\n private draftApplication: ApplicationTableItem | null = null;\n\n constructor() {\n this.translationsReady = firstValueFrom(this.l10nService.loadComponentTranslations('applications'));\n }\n\n async ngOnInit(): Promise<void> {\n await this.translationsReady;\n this.titleService.setTitle(this.t('applications.title'));\n await this.refreshAction();\n }\n\n protected async refreshAction(): Promise<void> {\n this.loading = true;\n this.cancelAllEdits();\n\n try {\n this.applications = (await this.applicationsApi.getApplicationRegistryItems()).map(\n (application: ApplicationRegistryItemDto) => ({ ...application })\n );\n this.syncVisibleApplications();\n } catch (error) {\n this.applications = [];\n this.syncVisibleApplications();\n this.msgService.error(error);\n } finally {\n this.loading = false;\n }\n }\n\n protected applyGlobalFilter(): void {\n this.visibleApplications = this.filterApplications(this.globalFilter);\n }\n\n protected clearFilters(): void {\n this.globalFilter = '';\n this.syncVisibleApplications();\n }\n\n protected beginCreateApplication(): void {\n this.cancelAllEdits();\n this.draftApplication = {\n code: '',\n displayName: '',\n baseUrl: '',\n internalBaseUrl: '',\n icon: 'pi pi-th-large',\n order: this.getNextOrder(),\n enabled: true,\n serviceType: ServiceType.Service,\n isCurrent: false,\n _isNew: true,\n _isEditing: true,\n _editModel: this.createEditModel()\n };\n this.draftApplication._editModel.order = this.draftApplication.order ?? 0;\n this.syncVisibleApplications();\n }\n\n protected editApplication(application: ApplicationTableItem): void {\n this.cancelAllEdits(application);\n application._isEditing = true;\n application._editModel = this.createEditModel(application);\n this.syncVisibleApplications();\n }\n\n protected cancelEdit(application: ApplicationTableItem): void {\n if (application._isNew) {\n this.draftApplication = null;\n } else {\n application._isEditing = false;\n application._editModel = undefined;\n }\n\n this.syncVisibleApplications();\n }\n\n protected async saveApplication(application: ApplicationTableItem): Promise<void> {\n const editModel = application._editModel;\n if (!editModel) {\n return;\n }\n\n const request = this.normalizeEditModel(editModel);\n if (!request.code || !request.displayName || !request.baseUrl) {\n this.msgService.error(this.t('applications.messages.requiredFields'));\n return;\n }\n\n this.activeRowAction = true;\n\n try {\n if (application._isNew) {\n await this.applicationsApi.createApplicationRegistryItem(request);\n this.draftApplication = null;\n this.msgService.success(this.t('applications.messages.createSuccess'));\n } else {\n await this.applicationsApi.updateApplicationRegistryItem({ code: application.code as string }, request);\n application._isEditing = false;\n application._editModel = undefined;\n this.msgService.success(this.t('applications.messages.updateSuccess'));\n }\n\n await this.refreshAction();\n } catch (error) {\n this.msgService.error(error);\n } finally {\n this.activeRowAction = false;\n }\n }\n\n protected async deleteApplication(application: ApplicationTableItem): Promise<void> {\n await this.translationsReady;\n\n if (application._isNew) {\n this.cancelEdit(application);\n return;\n }\n\n if (!application.code) {\n return;\n }\n\n this.confirmationService.confirm({\n header: this.t('applications.confirm.header'),\n message: this.t('applications.confirm.message', { displayName: application.displayName || application.code }),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.t('applications.confirm.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.t('applications.confirm.delete'),\n severity: 'danger'\n },\n accept: async () => {\n this.activeRowAction = true;\n\n try {\n await this.applicationsApi.deleteApplicationRegistryItem({ code: application.code as string });\n this.msgService.success(this.t('applications.messages.deleteSuccess'));\n await this.refreshAction();\n } catch (error) {\n this.msgService.error(error);\n } finally {\n this.activeRowAction = false;\n }\n }\n });\n }\n\n private createEditModel(application?: ApplicationRegistryItemDto): ApplicationEditModel {\n return {\n code: application?.code ?? '',\n displayName: application?.displayName ?? '',\n baseUrl: application?.baseUrl ?? '',\n internalBaseUrl: application?.internalBaseUrl ?? '',\n icon: application?.icon ?? 'pi pi-th-large',\n order: application?.order ?? 0,\n enabled: application?.enabled ?? true,\n serviceType: application?.serviceType ?? ServiceType.Service\n };\n }\n\n private normalizeEditModel(model: ApplicationEditModel): ApplicationRegistryItemDto {\n return {\n code: model.code.trim(),\n displayName: model.displayName.trim(),\n baseUrl: model.baseUrl.trim(),\n internalBaseUrl: model.internalBaseUrl.trim(),\n icon: model.icon.trim(),\n order: Number(model.order) || 0,\n enabled: model.enabled,\n serviceType: model.serviceType\n };\n }\n\n protected serviceTypeLabel(serviceType: ApplicationRegistryItemDto['serviceType']): string {\n return this.t(\n serviceType === ServiceType.Application\n ? 'applications.serviceTypes.application'\n : 'applications.serviceTypes.service'\n );\n }\n\n private cancelAllEdits(exceptApplication?: ApplicationTableItem): void {\n if (!exceptApplication?._isNew) {\n this.draftApplication = null;\n }\n\n for (const application of this.applications) {\n if (application === exceptApplication) {\n continue;\n }\n\n application._isEditing = false;\n application._editModel = undefined;\n }\n }\n\n private syncVisibleApplications(): void {\n this.visibleApplications = this.filterApplications(this.globalFilter);\n }\n\n private filterApplications(filter: string): ApplicationTableItem[] {\n const source = this.draftApplication ? [this.draftApplication, ...this.applications] : [...this.applications];\n const normalizedFilter = filter.trim().toLocaleLowerCase();\n\n if (!normalizedFilter) {\n return source;\n }\n\n return source.filter((application) =>\n this.globalFilterFields.some((field) =>\n String(application[field as keyof ApplicationRegistryItemDto] ?? '')\n .toLocaleLowerCase()\n .includes(normalizedFilter)\n )\n );\n }\n\n private getNextOrder(): number {\n return Math.max(0, ...this.applications.map((application) => application.order ?? 0)) + 1;\n }\n\n private t(key: string, params?: Record<string, unknown>): string {\n return this.l10nService.instant(key, params) as string;\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n AddReactionRequest,\n ApiExceptionResponse,\n AttachmentDto,\n CommentDto,\n CommentHistoryDto,\n CommentReactionDto,\n CreateCommentRequest,\n DeleteAttachmentParams,\n DeleteParams,\n GetAttachmentContentParams,\n GetByIdParams,\n GetByObjectParams,\n GetHistoryParams,\n MentionUserDto,\n RemoveReactionParams,\n SearchMentionUsersParams,\n UpdateCommentRequest,\n UpdateParams,\n UploadAttachmentPayload,\n} from \"./discussion-data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class DiscussionApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getByObject = (query: GetByObjectParams, params: RequestParams = {}) =>\n this.request<CommentDto[], ApiExceptionResponse>({\n path: `/api/discussion/get-by-object`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n getById = (query: GetByIdParams, params: RequestParams = {}) =>\n this.request<CommentDto, ApiExceptionResponse>({\n path: `/api/discussion/get-by-id`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n create = (data: CreateCommentRequest, params: RequestParams = {}) =>\n this.request<CommentDto, ApiExceptionResponse>({\n path: `/api/discussion/create`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n update = (\n { id, ...query }: UpdateParams,\n data: UpdateCommentRequest,\n params: RequestParams = {},\n ) =>\n this.request<CommentDto, ApiExceptionResponse>({\n path: `/api/discussion/update/${id}`,\n method: \"PUT\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n delete = ({ id, ...query }: DeleteParams, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/discussion/delete/${id}`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n getHistory = (\n { id, ...query }: GetHistoryParams,\n params: RequestParams = {},\n ) =>\n this.request<CommentHistoryDto[], ApiExceptionResponse>({\n path: `/api/discussion/get-history/${id}`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n uploadAttachment = (\n data: UploadAttachmentPayload,\n params: RequestParams = {},\n ) =>\n this.request<AttachmentDto, ApiExceptionResponse>({\n path: `/api/discussion/upload-attachment`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.FormData,\n format: \"json\",\n ...params,\n });\n deleteAttachment = (\n { id, ...query }: DeleteAttachmentParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/discussion/delete-attachment/${id}`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n getAttachmentContent = (\n { id, ...query }: GetAttachmentContentParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/discussion/get-attachment-content/${id}`,\n method: \"GET\",\n secure: true,\n ...params,\n });\n addReaction = (data: AddReactionRequest, params: RequestParams = {}) =>\n this.request<CommentReactionDto[], ApiExceptionResponse>({\n path: `/api/discussion/add-reaction`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n removeReaction = (query: RemoveReactionParams, params: RequestParams = {}) =>\n this.request<CommentReactionDto[], ApiExceptionResponse>({\n path: `/api/discussion/remove-reaction`,\n method: \"DELETE\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n searchMentionUsers = (\n query: SearchMentionUsersParams,\n params: RequestParams = {},\n ) =>\n this.request<MentionUserDto[], ApiExceptionResponse>({\n path: `/api/discussion/search-mention-users`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","export function getInitialsFromString(input: string): string {\r\n if (!input || input.trim().length === 0) {\r\n return '';\r\n }\r\n\r\n const words = input.trim().split(/\\s+/);\r\n\r\n if (words.length === 1) {\r\n return words[0].charAt(0).toUpperCase();\r\n }\r\n\r\n const firstInitial = words[0].charAt(0).toUpperCase();\r\n const lastInitial = words[words.length - 1].charAt(0).toUpperCase();\r\n\r\n return firstInitial + lastInitial;\r\n}\r\n","import { CommonModule, DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n SecurityContext,\n SimpleChanges,\n inject,\n OnInit\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { ConfirmationService } from 'primeng/api';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ButtonModule } from 'primeng/button';\nimport { CardModule } from 'primeng/card';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { DividerModule } from 'primeng/divider';\nimport { PanelModule } from 'primeng/panel';\nimport { PopoverModule } from 'primeng/popover';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { TagModule } from 'primeng/tag';\nimport { Textarea } from 'primeng/textarea';\nimport {\n AttachmentDto,\n CommentDto,\n CommentHistoryDto,\n CommentReactionDto,\n MentionUserDto\n} from '../../api/discussion-data-contracts';\nimport { DiscussionApi } from '../../api/discussion.api';\nimport { MsgService } from '../../services/msg.service';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { getInitialsFromString } from '../../helpers/avatar.helper';\nimport { L10nService } from '../../services/l10n.service';\n\nimport en from './l10n/discussion.en.json';\nimport ru from './l10n/discussion.ru.json';\n\nL10nService.registerTranslations({ en, ru });\n\ntype HistoryState = {\n loading: boolean;\n opened: boolean;\n items: DiscussionHistoryItem[];\n};\n\ntype DiscussionAttachment = Required<AttachmentDto>;\ntype DiscussionReaction = Required<CommentReactionDto>;\ntype DiscussionMentionUser = Required<MentionUserDto>;\ntype DiscussionComment = Omit<CommentDto, 'attachments' | 'reactions' | 'mentions'> & {\n commentId: number;\n content: string;\n authorDisplayName: string;\n authorEmail: string;\n isEdited: boolean;\n historyCount: number;\n canEdit: boolean;\n canDelete: boolean;\n attachments: DiscussionAttachment[];\n reactions: DiscussionReaction[];\n};\ntype DiscussionHistoryItem = Required<CommentHistoryDto>;\n\n@Component({\n selector: 'discussion',\n standalone: true,\n providers: [ConfirmationService, DiscussionApi],\n imports: [\n CommonModule,\n FormsModule,\n AvatarModule,\n ButtonModule,\n CardModule,\n ConfirmDialog,\n DividerModule,\n PanelModule,\n PopoverModule,\n ProgressSpinnerModule,\n TagModule,\n Textarea,\n DatePipe,\n TranslatePipe\n ],\n template: `\n <p-confirmDialog />\n\n <section class=\"flex flex-col gap-4\">\n <p-card class=\"block\">\n <div class=\"flex flex-col gap-4\">\n @if (!previewMode) {\n <textarea\n class=\"min-h-28 w-full\"\n pTextarea\n rows=\"5\"\n [autoResize]=\"true\"\n [placeholder]=\"'discussionComponent.writeCommentPlaceholder' | translate\"\n [(ngModel)]=\"newComment\"\n (ngModelChange)=\"onComposerInput()\"></textarea>\n } @else {\n <div\n class=\"markdown-preview min-h-28 rounded-2xl border border-surface-200 bg-surface-50 px-4 py-3 leading-7 dark:border-surface-700 dark:bg-surface-900/40\"\n [innerHTML]=\"renderMarkdown(newComment)\"></div>\n }\n\n @if (mentionSuggestions.length > 0) {\n <p-panel class=\"block\">\n <ng-template pTemplate=\"header\">\n <div class=\"inline-flex items-center gap-2 text-sm font-medium\">\n <i class=\"pi pi-at\"></i>\n <span>{{ 'discussionComponent.mentionSuggestions' | translate }}</span>\n </div>\n </ng-template>\n\n <div class=\"flex flex-col gap-3\">\n @for (candidate of mentionSuggestions; track candidate.userId) {\n <button\n class=\"flex w-full items-center justify-between gap-4 rounded-xl border border-transparent px-3 py-3 text-left transition hover:border-primary-200 hover:bg-primary-50 dark:hover:border-primary-800 dark:hover:bg-primary-950/30\"\n type=\"button\"\n (click)=\"insertMention(candidate)\">\n <div class=\"min-w-0\">\n <strong>{{ candidate.displayName }}</strong>\n <small class=\"mt-1 block text-surface-500\">{{ candidate.email }}</small>\n </div>\n <i class=\"pi pi-arrow-up-left shrink-0 text-surface-400\"></i>\n </button>\n }\n </div>\n </p-panel>\n }\n\n @if (pendingFiles.length > 0) {\n <div class=\"flex flex-col gap-3\">\n @for (file of pendingFiles; track file.name + file.size) {\n <div\n class=\"flex flex-col gap-3 rounded-2xl border border-surface-200 px-4 py-3 sm:flex-row sm:items-center sm:justify-between dark:border-surface-700\">\n <div class=\"inline-flex items-center gap-2\">\n <i class=\"pi pi-file\"></i>\n <span class=\"break-all\">{{ file.name }}</span>\n <p-tag severity=\"contrast\" [value]=\"formatBytes(file.size)\" />\n </div>\n <p-button\n icon=\"pi pi-times\"\n severity=\"danger\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"removePendingFile(file)\" />\n </div>\n }\n </div>\n }\n\n <div class=\"flex flex-col gap-2 sm:flex-row sm:justify-end\">\n <p-button\n severity=\"secondary\"\n [icon]=\"previewMode ? 'pi pi-pencil' : 'pi pi-eye'\"\n [label]=\"\n previewMode ? ('discussionComponent.edit' | translate) : ('discussionComponent.preview' | translate)\n \"\n [text]=\"true\"\n (onClick)=\"previewMode = !previewMode\" />\n\n <label class=\"file-trigger\">\n <p-button\n icon=\"pi pi-paperclip\"\n severity=\"secondary\"\n [label]=\"'discussionComponent.attachFiles' | translate\"\n [text]=\"true\" />\n <input multiple type=\"file\" (change)=\"onFilesSelected($event)\" />\n </label>\n <p-button\n icon=\"pi pi-send\"\n [disabled]=\"submitting || !newComment.trim()\"\n [label]=\"'discussionComponent.send' | translate\"\n [loading]=\"submitting\"\n (onClick)=\"createComment()\" />\n </div>\n </div>\n </p-card>\n\n @if (loading) {\n <div\n class=\"flex min-h-20 flex-col items-center justify-center gap-3 rounded-2xl border border-surface-200 px-4 py-5 text-surface-500 dark:border-surface-700\">\n <p-progressSpinner strokeWidth=\"4\" />\n <span>{{ 'discussionComponent.loadingComments' | translate }}</span>\n </div>\n } @else if (comments.length === 0) {\n <div\n class=\"flex min-h-20 items-center justify-center gap-3 rounded-2xl border border-surface-200 px-4 py-5 text-surface-500 dark:border-surface-700\">\n <i class=\"pi pi-inbox\"></i>\n <span>{{ 'discussionComponent.noCommentsYet' | translate }}</span>\n </div>\n } @else {\n <div class=\"flex flex-col gap-4\">\n @for (comment of comments; track comment.commentId) {\n <p-card class=\"block\">\n <ng-template pTemplate=\"content\">\n <div class=\"grid gap-4 md:grid-cols-[3.2rem_minmax(0,1fr)]\">\n <div>\n <p-avatar shape=\"circle\" [label]=\"getInitialsFromString(comment.authorDisplayName)\" />\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex flex-row gap-3 justify-between\">\n <div class=\"flex flex-wrap items-center gap-2\">\n <strong>{{ comment.authorDisplayName }}</strong>\n <span class=\"text-sm text-surface-500\">{{\n comment.createdAt | date: layoutService.dateTimeFormat()\n }}</span>\n </div>\n\n <div class=\"flex flex-wrap items-center justify-end gap-2\">\n <div class=\"flex flex-wrap items-center\">\n @if (comment.isEdited) {\n <p-tag\n icon=\"pi pi-pencil\"\n severity=\"warn\"\n [value]=\"'discussionComponent.edited' | translate\" />\n }\n </div>\n @if (comment.canEdit) {\n <p-button\n icon=\"pi pi-pencil\"\n severity=\"secondary\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"startEdit(comment)\" />\n }\n @if (comment.historyCount > 0) {\n <p-button\n icon=\"pi pi-history\"\n severity=\"secondary\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"toggleHistory(comment)\" />\n }\n @if (comment.canDelete) {\n <p-button\n icon=\"pi pi-trash\"\n severity=\"danger\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"deleteComment(comment)\" />\n }\n </div>\n </div>\n @if (editingCommentId === comment.commentId) {\n <div class=\"flex flex-col gap-4\">\n <textarea\n class=\"min-h-24 w-full\"\n pTextarea\n rows=\"4\"\n [autoResize]=\"true\"\n [placeholder]=\"'discussionComponent.editCommentPlaceholder' | translate\"\n [(ngModel)]=\"editContent\"></textarea>\n <div class=\"flex flex-col gap-2 sm:flex-row sm:justify-end\">\n <div>\n <label class=\"file-trigger\">\n <p-button\n icon=\"pi pi-paperclip\"\n severity=\"secondary\"\n [label]=\"'discussionComponent.addAttachment' | translate\"\n [text]=\"true\" />\n <input multiple type=\"file\" (change)=\"onInlineFilesSelected(comment, $event)\" />\n </label>\n </div>\n\n <p-button\n icon=\"pi pi-check\"\n [disabled]=\"!editContent.trim()\"\n [label]=\"'discussionComponent.save' | translate\"\n (onClick)=\"saveEdit(comment)\" />\n <p-button\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [label]=\"'discussionComponent.cancel' | translate\"\n [text]=\"true\"\n (onClick)=\"cancelEdit()\" />\n </div>\n </div>\n } @else {\n <div class=\"markdown-preview\" [innerHTML]=\"renderMarkdown(comment.content)\"></div>\n }\n\n @if (comment.attachments.length > 0) {\n <div class=\"flex flex-col gap-3\">\n <div class=\"flex flex-col gap-3\">\n @for (attachment of comment.attachments; track attachment.attachmentId) {\n <div class=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-end\">\n <div class=\"inline-flex items-center gap-2\">\n <i class=\"pi pi-file\"></i>\n <button\n class=\"break-all bg-transparent p-0 text-left font-semibold text-primary-600 transition hover:text-primary-500\"\n type=\"button\"\n (click)=\"downloadAttachment(attachment)\">\n {{ attachment.fileName }}\n </button>\n <p-tag severity=\"contrast\" [value]=\"formatBytes(attachment.fileSize)\" />\n </div>\n\n @if (comment.canEdit) {\n <p-button\n icon=\"pi pi-times\"\n severity=\"danger\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"deleteAttachment(comment, attachment)\" />\n }\n </div>\n }\n </div>\n </div>\n }\n\n <div class=\"flex flex-wrap items-center gap-2\">\n @for (reaction of getReactions(comment); track reaction.emojiCode) {\n <p-button\n severity=\"secondary\"\n [label]=\"reaction.emojiCode + ' ' + reaction.count\"\n [outlined]=\"false\"\n (onClick)=\"toggleReaction(comment, reaction)\" />\n }\n\n @if (!hasUserReaction(comment)) {\n <p-button\n icon=\"pi pi-face-smile\"\n severity=\"secondary\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"reactionPopover.toggle($event)\" />\n <p-popover #reactionPopover>\n <div class=\"emoji-popover\">\n @for (emoji of emojiPalette; track emoji) {\n <button\n class=\"emoji-option\"\n type=\"button\"\n (click)=\"reactWithEmoji(comment, emoji, reactionPopover)\">\n {{ emoji }}\n </button>\n }\n </div>\n </p-popover>\n }\n </div>\n\n @if (historyByComment[comment.commentId]?.opened) {\n <p-panel class=\"block\" [collapsed]=\"false\" [toggleable]=\"true\">\n <ng-template pTemplate=\"header\">\n <div class=\"inline-flex items-center gap-2 text-sm font-medium\">\n <i class=\"pi pi-history\"></i>\n <span>{{ 'discussionComponent.editHistory' | translate }}</span>\n </div>\n </ng-template>\n\n @if (historyByComment[comment.commentId]?.loading) {\n <div class=\"flex items-center gap-3 text-surface-500\">\n <p-progressSpinner strokeWidth=\"4\" />\n <span>{{ 'discussionComponent.loadingHistory' | translate }}</span>\n </div>\n } @else {\n <div class=\"flex flex-col gap-4\">\n @for (\n item of historyByComment[comment.commentId]?.items ?? [];\n track item.commentEditHistoryId\n ) {\n <div class=\"rounded-2xl border border-surface-200 px-4 py-4 dark:border-surface-700\">\n <div class=\"mb-3 inline-flex items-center gap-2 text-sm font-semibold\">\n <i class=\"pi pi-clock\"></i>\n <span>{{ item.editedByDisplayName }} · {{ item.editedAt | date: 'short' }}</span>\n </div>\n <div class=\"grid gap-4 lg:grid-cols-2\">\n <div class=\"flex flex-col gap-2\">\n <p-tag severity=\"secondary\" [value]=\"'discussionComponent.before' | translate\" />\n <div\n class=\"history-markdown rounded-2xl bg-surface-50 px-4 py-3 leading-7 dark:bg-surface-900/40\"\n [innerHTML]=\"renderMarkdown(item.oldContent)\"></div>\n </div>\n <div class=\"flex flex-col gap-2\">\n <p-tag severity=\"success\" [value]=\"'discussionComponent.after' | translate\" />\n <div\n class=\"history-markdown rounded-2xl bg-surface-50 px-4 py-3 leading-7 dark:bg-surface-900/40\"\n [innerHTML]=\"renderMarkdown(item.newContent)\"></div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n </p-panel>\n }\n </div>\n </div>\n </ng-template>\n </p-card>\n }\n </div>\n }\n </section>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .file-trigger {\n position: relative;\n display: inline-flex;\n }\n\n .file-trigger input {\n position: absolute;\n inset: 0;\n opacity: 0;\n cursor: pointer;\n }\n\n .markdown-preview,\n .history-markdown {\n word-break: break-word;\n }\n\n .markdown-preview :is(h1, h2, h3),\n .history-markdown :is(h1, h2, h3) {\n margin: 0 0 0.75rem;\n font-weight: 600;\n }\n\n .markdown-preview a,\n .history-markdown a {\n color: #2563eb;\n text-decoration: underline;\n text-underline-offset: 0.18em;\n }\n\n .emoji-popover {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n max-width: 16rem;\n }\n\n .emoji-option {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n font-size: 1.25rem;\n cursor: pointer;\n }\n `\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DiscussionComponent implements OnChanges, OnDestroy, OnInit {\n private readonly msgService = inject(MsgService);\n private readonly discussionApi = inject(DiscussionApi);\n private readonly sanitizer = inject(DomSanitizer);\n private readonly translateService = inject(TranslateService);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly confirmationService = inject(ConfirmationService);\n protected readonly layoutService = inject(LayoutService);\n\n @Input({ required: true }) objectTypeId = 1;\n @Input({ required: true }) objectId = 1;\n\n comments: DiscussionComment[] = [];\n loading = false;\n submitting = false;\n previewMode = false;\n newComment = '';\n editContent = '';\n editingCommentId: number | null = null;\n pendingFiles: File[] = [];\n mentionSuggestions: DiscussionMentionUser[] = [];\n historyByComment: Record<number, HistoryState> = {};\n emojiPalette = ['👍', '👎', '🐳', '🍆', '🍑'];\n private mentionSearchTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(l10nService: L10nService) {\n l10nService.get('discussionComponent');\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if ((changes['objectTypeId'] || changes['objectId']) && this.objectTypeId && this.objectId) {\n this.loadComments().then();\n }\n }\n\n async ngOnInit() {\n await this.loadComments();\n }\n\n ngOnDestroy(): void {\n if (this.mentionSearchTimer) {\n clearTimeout(this.mentionSearchTimer);\n }\n }\n\n async loadComments(): Promise<void> {\n if (!this.objectTypeId || !this.objectId) {\n return;\n }\n\n this.loading = true;\n this.cdr.markForCheck();\n\n try {\n const items = await this.discussionApi.getByObject({\n objectTypeId: this.objectTypeId,\n objectId: this.objectId,\n skip: 0,\n take: 50\n });\n this.comments = items.map((item) => this.normalizeComment(item));\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.loadComments')\n );\n } finally {\n this.loading = false;\n this.cdr.markForCheck();\n }\n }\n\n async createComment(): Promise<void> {\n const content = this.newComment.trim();\n if (!content) {\n return;\n }\n\n this.submitting = true;\n this.cdr.markForCheck();\n\n try {\n const created = await this.discussionApi.create({\n objectTypeId: this.objectTypeId,\n objectId: this.objectId,\n content\n });\n\n if (this.pendingFiles.length > 0) {\n for (const file of this.pendingFiles) {\n await this.discussionApi.uploadAttachment({\n CommentId: created.commentId as number,\n File: file\n });\n }\n }\n\n this.newComment = '';\n this.pendingFiles = [];\n this.previewMode = false;\n this.mentionSuggestions = [];\n await this.loadComments();\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.createComment')\n );\n } finally {\n this.submitting = false;\n this.cdr.markForCheck();\n }\n }\n\n startEdit(comment: DiscussionComment): void {\n this.editingCommentId = comment.commentId;\n this.editContent = comment.content;\n }\n\n cancelEdit(): void {\n this.editingCommentId = null;\n this.editContent = '';\n }\n\n async saveEdit(comment: DiscussionComment): Promise<void> {\n try {\n const updated = await this.discussionApi.update({ id: comment.commentId }, { content: this.editContent.trim() });\n this.comments = this.comments.map((item) =>\n item.commentId === comment.commentId ? this.normalizeComment(updated) : item\n );\n this.cancelEdit();\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.updateComment')\n );\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n deleteComment(comment: DiscussionComment): void {\n this.confirmationService.confirm({\n header: this.translateService.instant('discussionComponent.warning'),\n message: this.translateService.instant('discussionComponent.confirmDeleteComment'),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.translateService.instant('discussionComponent.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.translateService.instant('discussionComponent.delete'),\n severity: 'danger'\n },\n accept: async () => {\n await this.performDeleteComment(comment);\n }\n });\n }\n\n async toggleHistory(comment: DiscussionComment): Promise<void> {\n const current = this.historyByComment[comment.commentId];\n if (current?.opened) {\n this.historyByComment[comment.commentId] = { ...current, opened: false };\n return;\n }\n\n this.historyByComment[comment.commentId] = {\n opened: true,\n loading: true,\n items: current?.items ?? []\n };\n this.cdr.markForCheck();\n\n try {\n const items = await this.discussionApi.getHistory({ id: comment.commentId });\n this.historyByComment[comment.commentId] = {\n opened: true,\n loading: false,\n items: items.map((item) => this.normalizeHistoryItem(item))\n };\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.loadEditHistory')\n );\n this.historyByComment[comment.commentId] = {\n opened: false,\n loading: false,\n items: []\n };\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n onFilesSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.pendingFiles = [...this.pendingFiles, ...Array.from(input.files ?? [])];\n input.value = '';\n }\n\n removePendingFile(file: File): void {\n this.pendingFiles = this.pendingFiles.filter((item) => item !== file);\n }\n\n async onInlineFilesSelected(comment: DiscussionComment, event: Event): Promise<void> {\n const input = event.target as HTMLInputElement;\n const files = Array.from(input.files ?? []);\n input.value = '';\n\n try {\n for (const file of files) {\n await this.discussionApi.uploadAttachment({\n CommentId: comment.commentId,\n File: file\n });\n }\n await this.loadComments();\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.uploadAttachment')\n );\n this.cdr.markForCheck();\n }\n }\n\n deleteAttachment(comment: DiscussionComment, attachment: DiscussionAttachment): void {\n this.confirmationService.confirm({\n header: this.translateService.instant('discussionComponent.warning'),\n message: this.translateService.instant('discussionComponent.confirmDeleteFile', {\n fileName: attachment.fileName\n }),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.translateService.instant('discussionComponent.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.translateService.instant('discussionComponent.delete'),\n severity: 'danger'\n },\n accept: async () => {\n await this.performDeleteAttachment(comment, attachment);\n }\n });\n }\n\n private async performDeleteComment(comment: DiscussionComment): Promise<void> {\n try {\n await this.discussionApi.delete({ id: comment.commentId });\n this.comments = this.comments.filter((item) => item.commentId !== comment.commentId);\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.deleteComment')\n );\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n private async performDeleteAttachment(comment: DiscussionComment, attachment: DiscussionAttachment): Promise<void> {\n try {\n await this.discussionApi.deleteAttachment({ id: attachment.attachmentId });\n this.comments = this.comments.map((item) =>\n item.commentId === comment.commentId\n ? { ...item, attachments: item.attachments.filter((entry) => entry.attachmentId !== attachment.attachmentId) }\n : item\n );\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.deleteAttachment')\n );\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n async downloadAttachment(attachment: DiscussionAttachment): Promise<void> {\n try {\n const blob = (await this.discussionApi.getAttachmentContent(\n { id: attachment.attachmentId },\n { format: 'blob' }\n )) as unknown as Blob;\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = attachment.fileName;\n link.click();\n URL.revokeObjectURL(url);\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.downloadAttachment')\n );\n this.cdr.markForCheck();\n }\n }\n\n async toggleReaction(comment: DiscussionComment, reaction: DiscussionReaction): Promise<void> {\n try {\n const reactions = reaction.reactedByCurrentUser\n ? await this.discussionApi.removeReaction({ commentId: comment.commentId, emojiCode: reaction.emojiCode })\n : await this.discussionApi.addReaction({ commentId: comment.commentId, emojiCode: reaction.emojiCode });\n this.applyReactions(\n comment.commentId,\n reactions.map((item) => this.normalizeReaction(item))\n );\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.updateReaction')\n );\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n async reactWithEmoji(comment: DiscussionComment, emojiCode: string, popover?: { hide: () => void }): Promise<void> {\n try {\n const reactions = await this.discussionApi.addReaction({ commentId: comment.commentId, emojiCode });\n this.applyReactions(\n comment.commentId,\n reactions.map((item) => this.normalizeReaction(item))\n );\n popover?.hide();\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.addReaction')\n );\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n onComposerInput(): void {\n if (this.mentionSearchTimer) {\n clearTimeout(this.mentionSearchTimer);\n }\n\n const token = this.extractMentionQuery(this.newComment);\n if (!token || token.length < 2) {\n this.mentionSuggestions = [];\n this.cdr.markForCheck();\n return;\n }\n\n this.mentionSearchTimer = setTimeout(async () => {\n try {\n const users = await this.discussionApi.searchMentionUsers({ term: token });\n this.mentionSuggestions = users.map((item) => this.normalizeMentionUser(item));\n } catch {\n this.mentionSuggestions = [];\n } finally {\n this.cdr.markForCheck();\n }\n }, 250);\n }\n\n insertMention(candidate: DiscussionMentionUser): void {\n const query = this.extractMentionQuery(this.newComment);\n if (!query) {\n return;\n }\n\n this.newComment = this.newComment.replace(/@[\\w.+\\-@]*$/, `@${candidate.email} `);\n this.mentionSuggestions = [];\n }\n\n renderMarkdown(markdown: string): string {\n const escaped = markdown.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n\n const html = escaped\n .replace(/^### (.*)$/gm, '<h3>$1</h3>')\n .replace(/^## (.*)$/gm, '<h2>$1</h2>')\n .replace(/^# (.*)$/gm, '<h1>$1</h1>')\n .replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>')\n .replace(/\\*(.+?)\\*/g, '<em>$1</em>')\n .replace(/`(.+?)`/g, '<code>$1</code>')\n .replace(/\\[([^\\]]+)\\]\\((https?:\\/\\/[^\\s]+)\\)/g, '<a href=\"$2\" target=\"_blank\" rel=\"noopener\">$1</a>')\n .replace(/(^|\\s)@([A-Za-z0-9._+\\-@]+)/g, '$1<span class=\"mention-token\">@$2</span>')\n .replace(/\\n/g, '<br>');\n\n return this.sanitizer.sanitize(SecurityContext.HTML, html) ?? '';\n }\n\n formatBytes(value: number): string {\n if (value < 1024) {\n return `${value} ${this.translateService.instant('discussionComponent.units.bytes')}`;\n }\n if (value < 1024 * 1024) {\n return `${(value / 1024).toFixed(1)} ${this.translateService.instant('discussionComponent.units.kilobytes')}`;\n }\n return `${(value / (1024 * 1024)).toFixed(1)} ${this.translateService.instant('discussionComponent.units.megabytes')}`;\n }\n\n hasUserReaction(comment: DiscussionComment): boolean {\n return comment.reactions.some((reaction) => reaction.reactedByCurrentUser);\n }\n\n getReactions(comment: DiscussionComment): DiscussionReaction[] {\n return comment.reactions;\n }\n\n private applyReactions(commentId: number, reactions: DiscussionReaction[]): void {\n this.comments = this.comments.map((item) => (item.commentId === commentId ? { ...item, reactions } : item));\n }\n\n private normalizeComment(comment: CommentDto): DiscussionComment {\n return {\n ...comment,\n commentId: comment.commentId ?? 0,\n content: comment.content ?? '',\n authorDisplayName: comment.authorDisplayName ?? '',\n authorEmail: comment.authorEmail ?? '',\n isEdited: comment.isEdited ?? false,\n historyCount: comment.historyCount ?? 0,\n canEdit: comment.canEdit ?? false,\n canDelete: comment.canDelete ?? false,\n attachments: (comment.attachments ?? []).map((item) => this.normalizeAttachment(item)),\n reactions: (comment.reactions ?? []).map((item) => this.normalizeReaction(item))\n };\n }\n\n private normalizeAttachment(attachment: AttachmentDto): DiscussionAttachment {\n return {\n attachmentId: attachment.attachmentId ?? 0,\n fileName: attachment.fileName ?? '',\n fileType: attachment.fileType ?? '',\n fileSize: attachment.fileSize ?? 0,\n uploadedAt: attachment.uploadedAt ?? new Date(0),\n storageFileId: attachment.storageFileId ?? '',\n downloadUrl: attachment.downloadUrl ?? ''\n };\n }\n\n private normalizeReaction(reaction: CommentReactionDto): DiscussionReaction {\n return {\n emojiCode: reaction.emojiCode ?? '',\n count: reaction.count ?? 0,\n reactedByCurrentUser: reaction.reactedByCurrentUser ?? false\n };\n }\n\n private normalizeMentionUser(user: MentionUserDto): DiscussionMentionUser {\n return {\n userId: user.userId ?? 0,\n displayName: user.displayName ?? '',\n email: user.email ?? ''\n };\n }\n\n private normalizeHistoryItem(item: CommentHistoryDto): DiscussionHistoryItem {\n return {\n commentEditHistoryId: item.commentEditHistoryId ?? 0,\n oldContent: item.oldContent ?? '',\n newContent: item.newContent ?? '',\n editedByUserId: item.editedByUserId ?? 0,\n editedByDisplayName: item.editedByDisplayName ?? '',\n editedAt: item.editedAt ?? new Date(0)\n };\n }\n\n private extractMentionQuery(value: string): string | null {\n const match = value.match(/@([A-Za-z0-9._+\\-@]*)$/);\n return match?.[1] ?? null;\n }\n\n protected readonly getInitialsFromString = getInitialsFromString;\n}\n","import { Component, ElementRef, inject, OnDestroy, OnInit, Renderer2, ViewChild } from '@angular/core';\nimport { BaseModuleComponent } from '../base-module/base-module.component';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { InputText } from 'primeng/inputtext';\nimport { FormsModule } from '@angular/forms';\nimport { Button } from 'primeng/button';\nimport { SecurityComponent } from '../security/security.component';\nimport { IframeModuleSettings } from '../../api/data-contracts';\nimport en from './l10n/iframe-module.en.json';\nimport ru from './l10n/iframe-module.ru.json';\n\n@Component({\n standalone: true,\n imports: [SecurityComponent, TranslatePipe, InputText, FormsModule, Button],\n template: `\n @if (isContent) {\n <iframe\n #iframe\n class=\"w-full h-screen\"\n style=\"background-color: var(--surface-ground)\"\n title=\"Main iframe\"\n (error)=\"onIframeError()\">\n </iframe>\n } @else if (isSettings) {\n <div class=\"flex flex-col md:flex-row gap-8\">\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ 'baseComponent.settings' | translate }}</div>\n <div class=\"col-span-30 md:col-span-10 w-full\">\n <input\n class=\"w-full\"\n pInputText\n placeholder=\"{{ 'iframe-module.iframeModule.urlPlaceholder' | translate }}\"\n qa-id=\"iframe-module-settings-site-url-input\"\n type=\"text\"\n [(ngModel)]=\"settings.url\" />\n </div>\n <div class=\"flex justify-end\">\n <p-button\n icon=\"pi pi-save\"\n label=\"{{ 'iframe-module.iframeModule.settingSaveButtonLabel' | translate }}\"\n qa-id=\"iframe-module-settings-save-button\"\n (onClick)=\"saveSettings(settings)\">\n </p-button>\n </div>\n </div>\n </div>\n </div>\n } @else if (isSecurity) {\n <security [controller]=\"controller\" [id]=\"id\" />\n }\n `\n})\nexport class IframeModuleComponent\n extends BaseModuleComponent<IframeModuleSettings, IframeModuleSettings>\n implements OnInit, OnDestroy\n{\n static override readonly translations = { en, ru };\n\n private iframe?: ElementRef<HTMLIFrameElement>;\n private readonly renderer = inject(Renderer2);\n private readonly translate = inject(TranslateService);\n\n protected iframeUrl: string | null = null;\n\n constructor() {\n super();\n }\n\n @ViewChild('iframe')\n private set iframeElement(element: ElementRef<HTMLIFrameElement> | undefined) {\n this.iframe = element;\n this.updateIframeSrc();\n }\n\n private setIframeUrl(url: string | null | undefined): void {\n const iframeUrl = url?.trim();\n\n if (!iframeUrl) {\n this.iframeUrl = null;\n this.updateIframeSrc();\n const message: string = this.translate.instant('iframe-module.iframeModule.emptyUrlMessage');\n this.msgService.warn(message);\n return;\n }\n\n if (!this.isAllowedIframeUrl(iframeUrl)) {\n this.iframeUrl = null;\n this.updateIframeSrc();\n const message: string = this.translate.instant('iframe-module.iframeModule.siteLoadingMessage');\n this.msgService.error(message);\n return;\n }\n\n this.iframeUrl = iframeUrl;\n this.updateIframeSrc();\n }\n\n private isAllowedIframeUrl(url: string): boolean {\n try {\n const parsedUrl = new URL(url, window.location.origin);\n\n return parsedUrl.protocol === 'http:' || parsedUrl.protocol === 'https:';\n } catch {\n return false;\n }\n }\n\n protected override async onModuleInstanceChange(): Promise<void> {\n this.setIframeUrl(this.settings.url);\n }\n\n private updateIframeSrc(): void {\n if (!this.iframe) {\n return;\n }\n\n if (!this.iframeUrl) {\n this.renderer.removeAttribute(this.iframe.nativeElement, 'src');\n return;\n }\n\n this.renderer.setAttribute(this.iframe.nativeElement, 'src', this.iframeUrl);\n }\n\n onIframeError() {\n const errorMessage = this.translate.instant('iframe-module.iframeModule.siteLoadingMessage');\n this.msgService.error(errorMessage);\n }\n}\n","import { OipExtensionHostContext, OipExtensionNavigateEvent, OipExtensionNotifyEvent } from './extension-host.types';\r\n\r\nexport const OIP_EXTENSION_EVENTS = {\r\n contextChange: 'oip:context-change',\r\n titleChange: 'oip:title-change',\r\n settingsChange: 'oip:settings-change',\r\n notify: 'oip:notify',\r\n navigate: 'oip:navigate',\r\n error: 'oip:error'\r\n} as const;\r\n\r\nexport function emitOipTitleChange(element: HTMLElement, title: string): void {\r\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.titleChange, { detail: title, bubbles: true }));\r\n}\r\n\r\nexport function emitOipSettingsChange(element: HTMLElement, settings: unknown): void {\r\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.settingsChange, { detail: settings, bubbles: true }));\r\n}\r\n\r\nexport function emitOipNotify(element: HTMLElement, notification: OipExtensionNotifyEvent): void {\r\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.notify, { detail: notification, bubbles: true }));\r\n}\r\n\r\nexport function emitOipNavigate(element: HTMLElement, navigation: OipExtensionNavigateEvent): void {\r\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.navigate, { detail: navigation, bubbles: true }));\r\n}\r\n\r\nexport function emitOipError(element: HTMLElement, error: unknown): void {\r\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.error, { detail: error, bubbles: true }));\r\n}\r\n\r\nexport function emitOipContextChange(element: HTMLElement, context: OipExtensionHostContext): void {\r\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.contextChange, { detail: context }));\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ExtensionLoaderService {\r\n private readonly loadedScripts = new Map<string, Promise<void>>();\r\n\r\n loadScript(scriptUrl: string): Promise<void> {\r\n const existing = this.loadedScripts.get(scriptUrl);\r\n if (existing) {\r\n return existing;\r\n }\r\n\r\n const loadPromise = new Promise<void>((resolve, reject) => {\r\n const script = document.createElement('script');\r\n script.type = 'module';\r\n script.src = scriptUrl;\r\n script.async = true;\r\n script.onload = () => resolve();\r\n script.onerror = () => {\r\n this.loadedScripts.delete(scriptUrl);\r\n reject(new Error(`Extension script could not be loaded: ${scriptUrl}`));\r\n };\r\n\r\n document.head.appendChild(script);\r\n });\r\n\r\n this.loadedScripts.set(scriptUrl, loadPromise);\r\n return loadPromise;\r\n }\r\n}\r\n","import { ChangeDetectorRef, Component, ElementRef, inject, OnDestroy, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SecurityComponent } from './security/security.component';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Button } from 'primeng/button';\nimport { firstValueFrom } from 'rxjs';\nimport { ExtensionModulesApi } from '../api/extension-modules.api';\nimport { BaseModuleComponent } from './base-module/base-module.component';\nimport { ExtensionLoaderService } from '../extension-host/extension-loader.service';\nimport { Router } from '@angular/router';\nimport {\n OipExtensionHostContext,\n OipExtensionModuleMetadata,\n OipExtensionNavigateEvent,\n OipExtensionNotifyEvent\n} from '../extension-host/extension-host.types';\nimport { emitOipContextChange, OIP_EXTENSION_EVENTS } from '../extension-host/extension-host.events';\n\n@Component({\n standalone: true,\n imports: [CommonModule, SecurityComponent, TranslatePipe, Button],\n providers: [ExtensionModulesApi],\n template: `\n @if (showContent) {\n <div class=\"min-h-[calc(100vh-10rem)] w-full\">\n @if (loadError) {\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ loadError }}</div>\n <p-button icon=\"pi pi-refresh\" label=\"Retry\" (onClick)=\"reloadExtension()\"></p-button>\n </div>\n } @else {\n <div #extensionContainer class=\"w-full\"></div>\n }\n </div>\n } @else if (showSettings) {\n <div class=\"flex flex-col md:flex-row gap-8\">\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ 'baseComponent.settings' | translate }}</div>\n <p-button icon=\"pi pi-save\" label=\"Save\" (onClick)=\"saveSettings(settings)\"></p-button>\n </div>\n </div>\n </div>\n } @else if (showSecurity) {\n <security [controller]=\"controller\" [id]=\"id\" />\n }\n `\n})\nexport class CustomElementExtensionModuleHostComponent\n extends BaseModuleComponent<unknown, unknown>\n implements OnDestroy\n{\n @ViewChild('extensionContainer')\n private set extensionContainer(element: ElementRef<HTMLElement> | undefined) {\n this.container = element;\n this.queueRenderExtension();\n }\n\n private readonly extensionLoader = inject(ExtensionLoaderService);\n private readonly router = inject(Router);\n private readonly hostChangeDetectorRef = inject(ChangeDetectorRef);\n private readonly extensionModulesApi = inject(ExtensionModulesApi);\n private container?: ElementRef<HTMLElement>;\n private extensionElement?: HTMLElement;\n private extensionMetadata?: OipExtensionModuleMetadata;\n private removeListeners: Array<() => void> = [];\n private renderQueued = false;\n private activeTabSyncQueued = false;\n private activeTabId = this.getCurrentActiveTabId();\n private destroyed = false;\n\n protected loadError: string | null = null;\n\n protected get showContent(): boolean {\n return this.isActiveTab('content');\n }\n\n protected get showSettings(): boolean {\n return this.isActiveTab('settings');\n }\n\n protected get showSecurity(): boolean {\n return this.isActiveTab('security');\n }\n\n private get extensionKey(): string {\n return this.route.snapshot.paramMap.get('extensionKey') ?? '';\n }\n\n constructor() {\n super();\n this.subscriptions.push(\n this.topBarService.activeId$.subscribe(() => {\n this.queueActiveTabSync();\n })\n );\n }\n\n protected override async onModuleInstanceChange(): Promise<void> {\n await this.loadExtensionMetadata();\n await this.renderExtension();\n }\n\n protected override onSecurityRightsChange(): void {\n this.updateExtensionContext();\n }\n\n override ngOnDestroy(): void {\n this.destroyed = true;\n this.destroyExtensionElement();\n super.ngOnDestroy();\n }\n\n async reloadExtension(): Promise<void> {\n this.loadError = null;\n this.extensionMetadata = undefined;\n await this.loadExtensionMetadata();\n await this.renderExtension();\n }\n\n private async loadExtensionMetadata(): Promise<void> {\n if (this.extensionMetadata) {\n return;\n }\n\n if (!this.extensionKey) {\n this.loadError = 'Extension key is missing.';\n return;\n }\n\n this.extensionMetadata = (await this.extensionModulesApi.getExtensionModuleByKey({\n extensionKey: this.extensionKey\n })) as unknown as OipExtensionModuleMetadata;\n\n await this.loadExtensionTranslations(this.extensionMetadata);\n }\n\n private async renderExtension(): Promise<void> {\n if (this.destroyed || !this.container || !this.extensionMetadata || !this.showContent) {\n return;\n }\n\n try {\n this.loadError = null;\n this.destroyExtensionElement();\n await this.renderCustomElementExtension(this.extensionMetadata);\n } catch (error) {\n this.loadError = error instanceof Error ? error.message : 'Extension could not be loaded.';\n this.msgService.error(error);\n }\n }\n\n private queueRenderExtension(): void {\n if (this.renderQueued) {\n return;\n }\n this.renderQueued = true;\n queueMicrotask(() => {\n this.renderQueued = false;\n void this.renderExtension();\n });\n }\n\n private isActiveTab(id: string): boolean {\n return this.activeTabId === id;\n }\n\n private queueActiveTabSync(): void {\n const nextActiveTabId = this.getCurrentActiveTabId();\n if (this.activeTabId === nextActiveTabId || this.activeTabSyncQueued) {\n return;\n }\n\n this.activeTabSyncQueued = true;\n queueMicrotask(() => {\n this.activeTabSyncQueued = false;\n if (this.destroyed) {\n return;\n }\n\n this.activeTabId = this.getCurrentActiveTabId();\n this.hostChangeDetectorRef.detectChanges();\n\n if (this.showContent) {\n this.queueRenderExtension();\n } else {\n this.destroyExtensionElement();\n }\n });\n }\n\n private getCurrentActiveTabId(): string {\n return this.topBarService.activeTopBarItem?.id ?? 'content';\n }\n\n private updateExtensionContext(): void {\n if (!this.extensionElement || !this.extensionMetadata?.extensionKey) {\n return;\n }\n\n const context: OipExtensionHostContext = {\n moduleInstanceId: this.id,\n extensionKey: this.extensionMetadata.extensionKey,\n apiBasePath: this.buildUrl(`api/extensions/${this.extensionMetadata.extensionKey}`),\n settings: this.settings,\n locale: this.layoutService.language(),\n theme: this.layoutService.layoutConfig(),\n user: this.securityService.getCurrentUser(),\n activeTabId: this.topBarService.activeId ?? 'content',\n permissions: {\n canRead: this.canRead,\n canEdit: this.canEdit,\n canDelete: this.canDelete\n }\n };\n\n Object.assign(this.extensionElement, { oipContext: context });\n emitOipContextChange(this.extensionElement, context);\n }\n\n private attachListeners(element: HTMLElement): void {\n this.addListener(element, OIP_EXTENSION_EVENTS.titleChange, (event) => {\n const title = (event as CustomEvent<string>).detail;\n if (title) {\n this.appTitleService.setTitle(title);\n }\n });\n\n this.addListener(element, OIP_EXTENSION_EVENTS.settingsChange, (event) => {\n this.settings = (event as CustomEvent<unknown>).detail;\n void this.saveSettings(this.settings);\n });\n\n this.addListener(element, OIP_EXTENSION_EVENTS.notify, (event) => {\n const detail = (event as CustomEvent<OipExtensionNotifyEvent>).detail;\n const severity = detail?.severity ?? 'info';\n const message = detail?.detail ?? detail?.summary ?? '';\n switch (severity) {\n case 'success':\n this.msgService.success(message, detail?.summary);\n break;\n case 'warn':\n this.msgService.warn(message, detail?.summary);\n break;\n case 'error':\n this.msgService.error(message, detail?.summary);\n break;\n default:\n this.msgService.info(message, detail?.summary);\n }\n });\n\n this.addListener(element, OIP_EXTENSION_EVENTS.navigate, (event) => {\n const detail = (event as CustomEvent<OipExtensionNavigateEvent>).detail;\n if (detail?.commands) {\n void this.router.navigate(detail.commands as any[]);\n } else if (detail?.url) {\n void this.router.navigateByUrl(detail.url);\n }\n });\n\n this.addListener(element, OIP_EXTENSION_EVENTS.error, (event) => {\n this.msgService.error((event as CustomEvent<unknown>).detail);\n });\n }\n\n private buildUrl(path: string): string {\n const baseUrl = document.getElementsByTagName('base')[0]?.href ?? `${window.location.origin}/`;\n return `${baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`}${path}`;\n }\n\n private async loadExtensionTranslations(metadata: OipExtensionModuleMetadata): Promise<void> {\n const extensionKey = metadata.extensionKey ?? this.extensionKey;\n const apiBaseUrl = metadata.apiBaseUrl;\n if (!extensionKey || !apiBaseUrl) {\n return;\n }\n\n const lang = this.translateService.currentLang || this.layoutService.language() || 'en';\n const url = this.buildExtensionI18nUrl(apiBaseUrl, extensionKey, lang);\n try {\n await firstValueFrom(this.l10nService.loadTranslationsFromUrl(extensionKey, url, lang));\n } catch (error) {\n console.error(`No translations found for extension ${extensionKey}.${lang}.json`, error);\n }\n }\n\n private buildExtensionI18nUrl(apiBaseUrl: string, extensionKey: string, lang: string): string {\n return `${apiBaseUrl.replace(/\\/+$/, '')}/assets/i18n/${encodeURIComponent(extensionKey)}.${encodeURIComponent(lang)}.json`;\n }\n\n private addListener(element: HTMLElement, eventName: string, listener: EventListener): void {\n element.addEventListener(eventName, listener);\n this.removeListeners.push(() => element.removeEventListener(eventName, listener));\n }\n\n private destroyExtensionElement(): void {\n this.removeListeners.forEach((remove) => remove());\n this.removeListeners = [];\n this.extensionElement?.remove();\n this.extensionElement = undefined;\n }\n\n private async renderCustomElementExtension(metadata: OipExtensionModuleMetadata): Promise<void> {\n const { elementName, scriptUrl } = metadata;\n if (!this.container || !elementName || !scriptUrl) {\n this.loadError = 'Custom Element extension metadata is incomplete.';\n return;\n }\n\n await this.extensionLoader.loadScript(scriptUrl);\n await customElements.whenDefined(elementName);\n const element = document.createElement(elementName);\n this.extensionElement = element;\n this.attachListeners(element);\n this.container.nativeElement.appendChild(element);\n this.updateExtensionContext();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ComponentRef,\n EnvironmentInjector,\n inject,\n Injector,\n OnDestroy,\n Type,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport { loadRemoteModule } from '@angular-architects/module-federation';\nimport { Button } from 'primeng/button';\nimport { firstValueFrom } from 'rxjs';\nimport { BaseModuleComponent } from './base-module/base-module.component';\nimport { emitOipContextChange } from '../extension-host/extension-host.events';\nimport { ExtensionModulesApi } from '../api/extension-modules.api';\nimport { OipExtensionHostContext, OipExtensionModuleMetadata } from '../extension-host/extension-host.types';\nimport { CustomElementExtensionModuleHostComponent } from './custom-element-extension-module-host.component';\n\n@Component({\n standalone: true,\n imports: [CommonModule, Button],\n providers: [ExtensionModulesApi],\n template: `\n @if (loadError) {\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ loadError }}</div>\n <p-button icon=\"pi pi-refresh\" label=\"Retry\" (onClick)=\"reloadExtension()\"></p-button>\n </div>\n } @else {\n <ng-container #extensionContainer></ng-container>\n }\n `\n})\nexport class ExtensionModuleHostComponent extends BaseModuleComponent<unknown, unknown> implements OnDestroy {\n @ViewChild('extensionContainer', { read: ViewContainerRef })\n private set extensionViewContainer(viewContainer: ViewContainerRef | undefined) {\n this.viewContainer = viewContainer;\n this.queueRenderExtension();\n }\n\n private readonly injector = inject(Injector);\n private readonly environmentInjector = inject(EnvironmentInjector);\n private readonly extensionModulesApi = inject(ExtensionModulesApi);\n private viewContainer?: ViewContainerRef;\n private extensionComponent?: ComponentRef<unknown>;\n private extensionElement?: HTMLElement;\n private extensionMetadata?: OipExtensionModuleMetadata;\n private renderQueued = false;\n private destroyed = false;\n\n protected loadError: string | null = null;\n\n private get extensionKey(): string {\n return this.route.snapshot.paramMap.get('extensionKey') ?? '';\n }\n\n constructor() {\n super();\n this.subscriptions.push(\n this.topBarService.activeId$.subscribe(() => {\n this.updateExtensionContext();\n })\n );\n }\n\n async reloadExtension(): Promise<void> {\n this.loadError = null;\n this.extensionMetadata = undefined;\n await this.loadExtensionMetadata();\n await this.renderExtension();\n }\n\n protected override async onModuleInstanceChange(): Promise<void> {\n await this.loadExtensionMetadata();\n await this.renderExtension();\n }\n\n protected override onSecurityRightsChange(): void {\n this.updateExtensionContext();\n }\n\n override ngOnDestroy(): void {\n this.destroyed = true;\n this.destroyExtensionComponent();\n super.ngOnDestroy();\n }\n\n private async loadExtensionMetadata(): Promise<void> {\n if (this.extensionMetadata) {\n return;\n }\n\n if (!this.extensionKey) {\n this.loadError = 'Extension key is missing.';\n return;\n }\n\n this.extensionMetadata = (await this.extensionModulesApi.getExtensionModuleByKey({\n extensionKey: this.extensionKey\n })) as unknown as OipExtensionModuleMetadata;\n\n await this.loadExtensionTranslations(this.extensionMetadata);\n }\n\n private async renderExtension(): Promise<void> {\n if (this.destroyed || !this.viewContainer) {\n return;\n }\n\n try {\n this.loadError = null;\n await this.loadExtensionMetadata();\n if (!this.extensionMetadata) {\n return;\n }\n\n this.destroyExtensionComponent();\n\n if (this.extensionMetadata.loadType === 'moduleFederation') {\n await this.renderFederatedExtension(this.extensionMetadata);\n } else {\n this.extensionComponent = this.viewContainer.createComponent(CustomElementExtensionModuleHostComponent, {\n injector: this.injector,\n environmentInjector: this.environmentInjector\n });\n }\n } catch (error) {\n this.loadError = error instanceof Error ? error.message : 'Extension could not be loaded.';\n console.error(error);\n }\n }\n\n private queueRenderExtension(): void {\n if (this.renderQueued) {\n return;\n }\n this.renderQueued = true;\n queueMicrotask(() => {\n this.renderQueued = false;\n void this.renderExtension();\n });\n }\n\n private destroyExtensionComponent(): void {\n this.extensionComponent?.destroy();\n this.extensionComponent = undefined;\n this.extensionElement = undefined;\n this.viewContainer?.clear();\n }\n\n private async renderFederatedExtension(metadata: OipExtensionModuleMetadata): Promise<void> {\n const { remoteEntryUrl, exposedModule, componentName } = metadata;\n if (!remoteEntryUrl || !exposedModule || !componentName) {\n this.loadError = 'Module Federation extension metadata is incomplete.';\n return;\n }\n\n const remoteModule = await loadRemoteModule<Record<string, Type<unknown>>>({\n type: 'module',\n remoteEntry: remoteEntryUrl,\n exposedModule\n });\n const component = remoteModule[componentName];\n if (!component) {\n throw new Error(`Remote component '${componentName}' was not exported by '${exposedModule}'.`);\n }\n\n this.extensionComponent = this.viewContainer?.createComponent(component, {\n environmentInjector: this.environmentInjector\n });\n this.extensionElement = this.extensionComponent?.location.nativeElement as HTMLElement | undefined;\n this.updateExtensionContext();\n }\n\n private async loadExtensionTranslations(metadata: OipExtensionModuleMetadata): Promise<void> {\n const extensionKey = metadata.extensionKey ?? this.extensionKey;\n const apiBaseUrl = metadata.apiBaseUrl;\n if (!extensionKey || !apiBaseUrl) {\n return;\n }\n\n const lang = this.translateService.currentLang || this.layoutService.language() || 'en';\n for (const namespace of this.getExtensionTranslationNamespaces(metadata, extensionKey)) {\n const url = this.buildExtensionI18nUrl(apiBaseUrl, namespace, lang);\n try {\n await firstValueFrom(this.l10nService.loadTranslationsFromUrl(namespace, url, lang));\n return;\n } catch (error) {\n console.error(`No translations found for extension ${namespace}.${lang}.json`, error);\n }\n }\n }\n\n private buildExtensionI18nUrl(apiBaseUrl: string, extensionKey: string, lang: string): string {\n return `${apiBaseUrl.replace(/\\/+$/, '')}/assets/i18n/${encodeURIComponent(extensionKey)}.${encodeURIComponent(lang)}.json`;\n }\n\n private getExtensionTranslationNamespaces(metadata: OipExtensionModuleMetadata, extensionKey: string): string[] {\n const namespaces = [extensionKey];\n const componentNamespace = this.toKebabCase(metadata.componentName?.replace(/Component$/, '') ?? '');\n if (componentNamespace && !namespaces.includes(componentNamespace)) {\n namespaces.push(componentNamespace);\n }\n\n return namespaces;\n }\n\n private toKebabCase(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n }\n\n private updateExtensionContext(): void {\n if (!this.extensionElement || !this.extensionMetadata?.extensionKey) {\n return;\n }\n\n const context: OipExtensionHostContext = {\n moduleInstanceId: this.id,\n extensionKey: this.extensionMetadata.extensionKey,\n apiBasePath: this.buildUrl(`api/extensions/${this.extensionMetadata.extensionKey}`),\n settings: this.settings,\n locale: this.layoutService.language(),\n theme: this.layoutService.layoutConfig(),\n user: this.securityService.getCurrentUser(),\n activeTabId: this.topBarService.activeId ?? 'content',\n permissions: {\n canRead: this.canRead,\n canEdit: this.canEdit,\n canDelete: this.canDelete\n }\n };\n\n Object.assign(this.extensionElement, { oipContext: context });\n emitOipContextChange(this.extensionElement, context);\n }\n\n private buildUrl(path: string): string {\n const baseUrl = document.getElementsByTagName('base')[0]?.href ?? `${window.location.origin}/`;\n return `${baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`}${path}`;\n }\n}\n","import { inject, Injectable } from '@angular/core';\r\nimport { map } from 'rxjs/operators';\r\nimport { Observable } from 'rxjs';\r\nimport { SecurityService } from './security.service';\r\n\r\n/**\r\n * A route guard that ensures the user is authenticated and has a valid access token.\r\n * If the access token is expired, it attempts to refresh the session.\r\n * If authentication fails or refresh is unsuccessful, redirects to the unauthorized page.\r\n */\r\n@Injectable()\r\nexport class AuthGuardService {\r\n private readonly oidcSecurityService = inject(SecurityService);\r\n\r\n /**\r\n * Checks whether the route can be activated.\r\n * - Returns `true` if the user is authenticated and the token is valid.\r\n * - Attempts to refresh the token if expired.\r\n * - Starts the authorization flow if not authenticated or refresh fails.\r\n *\r\n * @returns {Observable<boolean>} A stream resolving to true (allow), or false after starting authorization.\r\n */\r\n canActivate(returnUrl = '/'): Observable<boolean> {\r\n this.oidcSecurityService.auth();\r\n return this.oidcSecurityService.isAuthenticated().pipe(\r\n map((authenticated) => {\r\n if (authenticated) {\r\n return true;\r\n }\r\n\r\n this.oidcSecurityService.authorize(returnUrl);\r\n return false;\r\n })\r\n );\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\nimport { MenuApi } from '../api/menu.api';\nimport { SecurityService } from './security.service';\n\n/**\n * Reads the rights the current user has on a module instance.\n *\n * Results are cached per instance and dropped whenever the authenticated user changes.\n */\n@Injectable()\nexport class ModuleInstanceRightsService {\n public static readonly readRight = 'read';\n\n private readonly menuApi = inject(MenuApi);\n private readonly securityService = inject(SecurityService);\n private readonly cache = new Map<number, Promise<string[]>>();\n private cachedIdentity: string | undefined = undefined;\n\n constructor() {\n this.securityService.payload.subscribe((payload) => {\n // Rights depend on both the user and the roles of the current session.\n const roles: string[] = payload?.realm_access?.roles ?? [];\n const identity = `${payload?.preferred_username ?? ''}|${[...roles].sort().join(',')}`;\n if (identity !== this.cachedIdentity) {\n this.cachedIdentity = identity;\n this.clearCache();\n }\n });\n }\n\n /**\n * Gets the rights of the current user on the given module instance.\n */\n public getRights(moduleInstanceId: number): Promise<string[]> {\n const cached = this.cache.get(moduleInstanceId);\n if (cached) {\n return cached;\n }\n\n const request = this.menuApi\n .getModuleInstanceRights({ id: moduleInstanceId })\n .then((rights) => rights ?? [])\n .catch((error) => {\n this.cache.delete(moduleInstanceId);\n throw error;\n });\n\n this.cache.set(moduleInstanceId, request);\n return request;\n }\n\n /**\n * Checks whether the current user has the `read` right on the given module instance.\n */\n public async canRead(moduleInstanceId: number): Promise<boolean> {\n const rights = await this.getRights(moduleInstanceId);\n return rights.includes(ModuleInstanceRightsService.readRight);\n }\n\n /**\n * Drops every cached result, for example after module security was changed.\n */\n public clearCache(): void {\n this.cache.clear();\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateChildFn, Router } from '@angular/router';\nimport { firstValueFrom } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { ModuleInstanceRightsService } from './module-instance-rights.service';\nimport { SecurityService } from './security.service';\n\n/**\n * Route data flag marking a route that only administrators may open.\n */\nexport interface ModuleAccessRouteData {\n requireAdmin?: boolean;\n}\n\n/**\n * Guards module routes against direct navigation without the required rights.\n *\n * - Routes flagged with `data: { requireAdmin: true }` require the `admin` role.\n * - Routes carrying an `:id` segment require the `read` right on that module instance.\n * - Everything else is left to {@link AuthGuardService}.\n *\n * Denied navigation is redirected to the access denied page. This is a UX guard only:\n * the backend checks the same rights on every module endpoint.\n */\nexport const moduleAccessGuard: CanActivateChildFn = async (route) => {\n const router = inject(Router);\n const securityService = inject(SecurityService);\n const rightsService = inject(ModuleInstanceRightsService);\n const accessDenied = router.parseUrl('/access');\n\n if ((route.data as ModuleAccessRouteData)?.requireAdmin) {\n // Wait for the session payload so a direct URL entry does not read roles before they are loaded.\n await firstValueFrom(\n securityService.payload.pipe(\n filter((payload) => payload != null),\n take(1)\n )\n );\n return securityService.isAdmin() ? true : accessDenied;\n }\n\n const routeId = route.paramMap.get('id');\n if (routeId == null) {\n return true;\n }\n\n const moduleInstanceId = Number(routeId);\n if (!Number.isFinite(moduleInstanceId)) {\n return accessDenied;\n }\n\n try {\n return (await rightsService.canRead(moduleInstanceId)) ? true : accessDenied;\n } catch (error) {\n console.error('Failed to load module instance rights', error);\n return accessDenied;\n }\n};\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { FilterMetadata } from 'primeng/api';\r\nimport { Table } from 'primeng/table';\r\n\r\n/**\r\n * Prime-ng table filter service\r\n */\r\n@Injectable()\r\nexport class TableFilterService {\r\n public filterState: { [field: string]: boolean } = {};\r\n private filtersState = new BehaviorSubject<boolean>(false);\r\n public filtersState$ = this.filtersState.asObservable();\r\n\r\n /**\r\n * Updates filter state\r\n * @param filters\r\n */\r\n public updateFiltersState(filters: any) {\r\n const hasFilters = Object.values(filters).some((filterArray: any) => {\r\n if (Array.isArray(filterArray)) {\r\n return filterArray.some((filter) => !!filter.value);\r\n }\r\n return false;\r\n });\r\n this.filtersState.next(hasFilters);\r\n }\r\n\r\n /**\r\n * Checks if a filter is active\r\n * @param {FilterMetadata | FilterMetadata[]} filter\r\n * @return {boolean}\r\n */\r\n public isFilterActive(filter: FilterMetadata | FilterMetadata[]): boolean {\r\n if (!filter) return false;\r\n\r\n if (Array.isArray(filter)) {\r\n return filter.some((f) => !!f.value && f.matchMode !== 'unspecified');\r\n } else {\r\n return !!filter.value && filter.matchMode !== 'unspecified';\r\n }\r\n }\r\n\r\n /**\r\n * Checks the state of table filters\r\n * @param {Table} table\r\n * @param {FilterMetadata | FilterMetadata[]} filters\r\n */\r\n public updateFilterFieldStates(table: Table, filters: FilterMetadata | FilterMetadata[]) {\r\n if (table && filters) {\r\n Object.keys(filters).forEach((field) => {\r\n const filter = filters[field];\r\n this.filterState[field] = this.isFilterActive(filter);\r\n });\r\n }\r\n this.updateFiltersState(filters);\r\n }\r\n}\r\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\r\nimport {\r\n APP_THEME_PRESETS,\r\n APP_THEME_PRESETS_MERGE_MODE,\r\n AppThemePreset,\r\n AppThemePresetMergeMode\r\n} from './theme-presets.token';\r\n\r\nexport interface ProvideAppThemesOptions {\r\n mode?: AppThemePresetMergeMode;\r\n}\r\n\r\nexport function provideAppThemes(themes: AppThemePreset[], options?: ProvideAppThemesOptions): EnvironmentProviders {\r\n const mode = options?.mode ?? 'mergeWithDefaults';\r\n return makeEnvironmentProviders([\r\n { provide: APP_THEME_PRESETS, useValue: themes },\r\n { provide: APP_THEME_PRESETS_MERGE_MODE, useValue: mode }\r\n ]);\r\n}\r\n\r\nexport function mergeWithDefaults(themes: AppThemePreset[]): EnvironmentProviders {\r\n return provideAppThemes(themes, { mode: 'mergeWithDefaults' });\r\n}\r\n\r\nexport function replaceDefaults(themes: AppThemePreset[]): EnvironmentProviders {\r\n return provideAppThemes(themes, { mode: 'replaceDefaults' });\r\n}\r\n","import { definePreset } from '@primeng/themes';\nimport Aura from '@primeng/themes/aura';\nimport { primitive } from '@primeng/themes/aura/base';\nimport { AppThemePreset } from './theme-presets.token';\n\nexport const defaultTheme: AppThemePreset[] = [\n {\n id: 'Oip',\n label: 'Oip',\n preset: definePreset(Aura, {\n components: {\n toolbar: {\n colorScheme: {\n light: {\n root: {\n borderRadius: '0.7rem'\n }\n },\n dark: {\n root: {\n borderRadius: '0.7rem'\n }\n }\n }\n }\n }\n }),\n primaryColors: {\n rose: primitive['red']\n },\n surfaceColors: {\n zinc: {\n 0: '#ffffff',\n 50: '#fafafa',\n 100: '#f4f4f5',\n 200: '#e4e4e7',\n 300: '#d4d4d8',\n 400: '#a1a1aa',\n 500: '#71717a',\n 600: '#52525b',\n 700: '#3f3f46',\n 800: '#27272a',\n 900: '#18181b',\n 950: '#09090b'\n }\n }\n }\n];\n","import { inject } from '@angular/core';\nimport { HttpInterceptorFn } from '@angular/common/http';\nimport { switchMap, take } from 'rxjs/operators';\nimport { LayoutService } from '../services/app.layout.service';\nimport { SecurityService } from '../services/security.service';\n\nexport const langIntercept: HttpInterceptorFn = (req, next) => {\n const layoutService = inject(LayoutService);\n const securityService = inject(SecurityService);\n const lang = layoutService.language() ? layoutService.language() : 'en';\n const headers = req.headers.set('Accept-language', lang).set('X-Timezone', layoutService.timeZone());\n const reqWithCredentials = req.clone({\n headers,\n withCredentials: true\n });\n\n if (!['POST', 'PUT', 'PATCH', 'DELETE'].includes(req.method.toUpperCase())) {\n return next(reqWithCredentials);\n }\n\n if (req.url.includes('/api/security/create-auth-session') || req.url.includes('/api/security/get-auth-csrf-token')) {\n return next(reqWithCredentials);\n }\n\n return securityService.getCsrfToken().pipe(\n take(1),\n switchMap((csrfToken) =>\n next(\n csrfToken?.token\n ? reqWithCredentials.clone({\n headers: reqWithCredentials.headers.set(csrfToken.headerName, csrfToken.token)\n })\n : reqWithCredentials\n )\n )\n );\n};\n","import { LocationStrategy, PathLocationStrategy } from '@angular/common';\nimport { HttpClient, provideHttpClient, withFetch, withInterceptors } from '@angular/common/http';\nimport { importProvidersFrom, makeEnvironmentProviders } from '@angular/core';\nimport { TranslateLoader, TranslateModule } from '@ngx-translate/core';\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\nimport { MessageService } from 'primeng/api';\nimport { MenuApi } from '../api/menu.api';\nimport { NotificationApi } from '../api/notification.api';\nimport { SecurityApi } from '../api/security.api';\nimport { UserProfileApi } from '../api/user-profile.api';\nimport { langIntercept } from '../intercepts/i18n-intercept.service';\nimport { AuthGuardService } from '../services/auth-guard.service';\nimport { ModuleInstanceRightsService } from '../services/module-instance-rights.service';\nimport { NotificationService } from '../services/notification.service';\nimport { BffSecurityService, SecurityService } from '../services/security.service';\nimport { UserService } from '../services/user.service';\n\nconst httpLoaderFactory: (http: HttpClient) => TranslateHttpLoader = (http: HttpClient) =>\n new TranslateHttpLoader(http);\n\nexport function provideOip() {\n return makeEnvironmentProviders([\n provideHttpClient(withInterceptors([langIntercept]), withFetch()),\n { provide: LocationStrategy, useClass: PathLocationStrategy },\n { provide: SecurityService, useClass: BffSecurityService },\n AuthGuardService,\n ModuleInstanceRightsService,\n MessageService,\n UserService,\n NotificationService,\n UserProfileApi,\n SecurityApi,\n NotificationApi,\n MenuApi,\n importProvidersFrom([\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: httpLoaderFactory,\n deps: [HttpClient]\n }\n })\n ])\n ]);\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport { ApiExceptionResponse, FolderModuleSettings } from \"./data-contracts\";\nimport { HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class FolderModuleApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getModuleInstanceSettings = (params: RequestParams = {}) =>\n this.request<FolderModuleSettings, ApiExceptionResponse>({\n path: `/api/folder-module/get-module-instance-settings`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport { ApiExceptionResponse, IframeModuleSettings } from \"./data-contracts\";\nimport { HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class IframeModuleApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getModuleInstanceSettings = (params: RequestParams = {}) =>\n this.request<IframeModuleSettings, ApiExceptionResponse>({\n path: `/api/iframe-module/get-module-instance-settings`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","// Components\nexport { BaseModuleComponent } from './components/base-module/base-module.component';\nexport { SecurityComponent } from './components/security/security.component';\nexport { AppTopbar } from './components/top-bar.component';\nexport { FooterComponent } from './components/footer.component';\nexport { MenuComponent } from './components/menu/menu.component';\nexport { AppLayoutComponent } from './components/app.layout.component';\nexport { SidebarComponent } from './components/sidebar.component';\nexport { LogoComponent } from './components/logo.component';\nexport { NotfoundComponent } from './components/notfound/notfound.component';\nexport { UnauthorizedComponent } from './components/auth/unauthorized/unauthorized.component';\nexport { AccessComponent } from './components/auth/access/access.component';\nexport { ErrorComponent } from './components/auth/error/error.component';\nexport { UserProfileComponent } from './components/user-profile/user-profile.component';\nexport { ConfigComponent } from './components/config/config.component';\nexport { DbMigrationComponent } from './components/db-migration/db-migration.component';\nexport { AppModulesComponent } from './components/app-modules/app-modules.component';\nexport { ApplicationsComponent } from './components/applications/applications.component';\nexport { AppConfiguratorComponent } from './components/app-configurator/app-configurator.component';\nexport { AppFloatingConfiguratorComponent } from './components/app-floating-configurator.component';\nexport { DiscussionComponent } from './components/discussion/discussion.component';\nexport { IframeModuleComponent } from './components/iframe-module/iframe-module.component';\nexport { ExtensionModuleHostComponent } from './components/extension-module-host.component';\nexport { UserNotificationsComponent } from './components/user-notifications/user-notifications.component';\nexport { AppTopbarApplicationSwitcherComponent } from './components/top-bar-application-switcher.component';\n\n// DTOs\nexport { TopBarDto } from './dtos/top-bar.dto';\nexport { SecurityDto } from './dtos/security.dto';\nexport { PutSecurityDto } from './dtos/put-security.dto';\nexport { NoSettingsDto } from './dtos/no-settings.dto';\n\n// Services\nexport { TopBarService } from './services/top-bar.service';\nexport { AuthCsrfToken, BffSecurityService, SecurityService } from './services/security.service';\nexport { MsgService } from './services/msg.service';\nexport { AuthGuardService } from './services/auth-guard.service';\nexport { moduleAccessGuard, ModuleAccessRouteData } from './services/module-access-guard.service';\nexport { ModuleInstanceRightsService } from './services/module-instance-rights.service';\nexport { AppConfig, LayoutService } from './services/app.layout.service';\nexport { MenuService } from './services/app.menu.service';\nexport { UserService } from './services/user.service';\nexport { L10nService, LanguageDto } from './services/l10n.service';\nexport { provideLogoComponent, LogoService, LOGO_COMPONENT_TOKEN } from './services/logo.service';\nexport { NotificationService } from './services/notification.service';\nexport { ApplicationRegistryService } from './services/application-registry.service';\nexport { TableFilterService } from './services/table-filter.service';\nexport { ExtensionLoaderService } from './extension-host/extension-loader.service';\nexport {\n APP_THEME_PRESETS,\n APP_THEME_PRESETS_MERGE_MODE,\n AppThemePreset,\n AppThemePresetMergeMode\n} from './services/theme-presets.token';\nexport { mergeWithDefaults, provideAppThemes, replaceDefaults } from './services/theme-presets.provider';\nexport { defaultTheme } from './services/app-default.theme';\nexport { provideOip } from './providers/oip.provider';\n\n// Events\nexport { MenuChangeEvent } from './events/menu-change.event';\n\n// other\nexport { langIntercept } from './intercepts/i18n-intercept.service';\nexport { ContentType, HttpClient, RequestParams } from './api/http-client';\nexport {\n OipExtensionHostContext,\n OipExtensionLoadType,\n OipExtensionManifest,\n OipExtensionModuleMetadata,\n OipExtensionNavigateEvent,\n OipExtensionNotifyEvent\n} from './extension-host/extension-host.types';\nexport {\n OIP_EXTENSION_EVENTS,\n emitOipContextChange,\n emitOipError,\n emitOipNavigate,\n emitOipNotify,\n emitOipSettingsChange,\n emitOipTitleChange\n} from './extension-host/extension-host.events';\nexport { FolderModuleApi } from './api/folder-module.api';\nexport { IframeModuleApi } from './api/iframe-module.api';\nexport { SecurityApi } from './api/security.api';\nexport { ApplicationsApi } from './api/applications.api';\nexport { UserProfileApi } from './api/user-profile.api';\nexport { convertToPrimeNgDateFormat } from './helpers/date.helper';\nexport { NotificationApi } from './api/notification.api';\nexport { CustomElementExtensionModuleHostComponent } from './components/custom-element-extension-module-host.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["en","ru","HttpClient","tap","i1.L10nService","i4","i2","i3","i1","i5","i2.MenuService","i6","i7","filter","i11"],"mappings":"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"}
1
+ {"version":3,"file":"oip-common.mjs","sources":["../../../projects/oip-common/src/services/top-bar.service.ts","../../../projects/oip-common/src/services/msg.service.ts","../../../projects/oip-common/src/services/app-title.service.ts","../../../projects/oip-common/src/helpers/date.helper.ts","../../../projects/oip-common/src/services/app.layout.service.ts","../../../projects/oip-common/src/services/l10n.service.ts","../../../projects/oip-common/src/services/security.service.ts","../../../projects/oip-common/src/api/http-client.ts","../../../projects/oip-common/src/helpers/l10n.helper.ts","../../../projects/oip-common/src/components/base-module/base-module.component.ts","../../../projects/oip-common/src/api/security.api.ts","../../../projects/oip-common/src/components/security/security.component.ts","../../../projects/oip-common/src/services/theme-presets.token.ts","../../../projects/oip-common/src/components/app-configurator/app-configurator.component.ts","../../../projects/oip-common/src/api/user-profile.api.ts","../../../projects/oip-common/src/services/user.service.ts","../../../projects/oip-common/src/components/logo/logo.component.ts","../../../projects/oip-common/src/services/logo.service.ts","../../../projects/oip-common/src/services/app-info.service.ts","../../../projects/oip-common/src/api/notification.api.ts","../../../projects/oip-common/src/services/notification.service.ts","../../../projects/oip-common/src/components/user-notifications/user-notifications.component.ts","../../../projects/oip-common/src/api/applications.api.ts","../../../projects/oip-common/src/services/application-registry.service.ts","../../../projects/oip-common/src/components/top-bar-application-switcher/top-bar-application-switcher.component.ts","../../../projects/oip-common/src/components/top-bar/top-bar.component.ts","../../../projects/oip-common/src/components/footer/footer.component.ts","../../../projects/oip-common/src/api/menu.api.ts","../../../projects/oip-common/src/services/app.menu.service.ts","../../../projects/oip-common/src/components/menu/menu-item.component.ts","../../../projects/oip-common/src/components/menu/menu-item-create-dialog.component.ts","../../../projects/oip-common/src/components/menu/menu-item-edit-dialog.component.ts","../../../projects/oip-common/src/components/menu/menu.component.ts","../../../projects/oip-common/src/components/sidebar/sidebar.component.ts","../../../projects/oip-common/src/components/app.layout/app.layout.component.ts","../../../projects/oip-common/src/components/app-floating-configurator/app-floating-configurator.component.ts","../../../projects/oip-common/src/components/notfound/notfound.component.ts","../../../projects/oip-common/src/components/auth/unauthorized/unauthorized.component.ts","../../../projects/oip-common/src/components/auth/access/access.component.ts","../../../projects/oip-common/src/components/auth/error/error.component.ts","../../../projects/oip-common/src/components/user-profile/user-profile.component.ts","../../../projects/oip-common/src/components/config/config.component.ts","../../../projects/oip-common/src/components/db-migration/db-migration.component.ts","../../../projects/oip-common/src/api/extension-modules.api.ts","../../../projects/oip-common/src/api/module.api.ts","../../../projects/oip-common/src/components/app-modules/app-modules.component.ts","../../../projects/oip-common/src/api/applications-data-contracts.ts","../../../projects/oip-common/src/components/applications/applications.component.ts","../../../projects/oip-common/src/api/discussion.api.ts","../../../projects/oip-common/src/helpers/avatar.helper.ts","../../../projects/oip-common/src/components/discussion/discussion.component.ts","../../../projects/oip-common/src/components/iframe-module/iframe-module.component.ts","../../../projects/oip-common/src/extension-host/extension-host.events.ts","../../../projects/oip-common/src/extension-host/extension-loader.service.ts","../../../projects/oip-common/src/components/custom-element-extension-module-host/custom-element-extension-module-host.component.ts","../../../projects/oip-common/src/components/extension-module-host/extension-module-host.component.ts","../../../projects/oip-common/src/services/auth-guard.service.ts","../../../projects/oip-common/src/services/module-instance-rights.service.ts","../../../projects/oip-common/src/services/module-access-guard.service.ts","../../../projects/oip-common/src/services/table-filter.service.ts","../../../projects/oip-common/src/services/theme-presets.provider.ts","../../../projects/oip-common/src/services/app-default.theme.ts","../../../projects/oip-common/src/intercepts/i18n-intercept.service.ts","../../../projects/oip-common/src/providers/oip.provider.ts","../../../projects/oip-common/src/api/folder-module.api.ts","../../../projects/oip-common/src/api/iframe-module.api.ts","../../../projects/oip-common/src/public-api.ts","../../../projects/oip-common/src/oip-common.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { TopBarDto } from '../dtos/top-bar.dto';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TopBarService {\n topBarItems: TopBarDto[] = [];\n private readonly activeIdSubject = new Subject<string | undefined>();\n\n readonly activeId$ = this.activeIdSubject.asObservable();\n\n private _activeId: string | undefined;\n\n get availableTopBarItems(): TopBarDto[] {\n return this.topBarItems;\n }\n\n get activeTopBarItem(): TopBarDto | undefined {\n if (this._activeId === undefined) {\n return undefined;\n }\n return this.topBarItems.find((topBarItem: TopBarDto) => topBarItem.id === this._activeId);\n }\n\n get activeId(): string | undefined {\n return this._activeId;\n }\n\n set activeId(value: string | undefined) {\n this._activeId = value;\n const activeTopBarItem = this.activeTopBarItem;\n if (activeTopBarItem?.click) activeTopBarItem.click();\n this.activeIdSubject.next(value);\n }\n\n constructor() {}\n\n // Set tob bar items\n setTopBarItems(items: TopBarDto[]) {\n this.topBarItems = items;\n }\n\n checkId(id: string): boolean {\n const activeTopBarItem = this.activeTopBarItem;\n const result = activeTopBarItem === undefined ? id === 'content' : activeTopBarItem.id == id;\n return result;\n }\n}\n","import { inject, Injectable } from '@angular/core';\r\nimport { MessageService } from 'primeng/api';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { ToastMessageOptions } from 'primeng/api';\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class MsgService {\r\n protected readonly messageService: MessageService = inject(MessageService);\r\n private readonly translate = inject(TranslateService);\r\n private readonly lifetime: number = 2000;\r\n\r\n add(msg: ToastMessageOptions) {\r\n this.messageService.add(msg);\r\n }\r\n\r\n success(detail: any, summary: any = this.translate.instant('msgService.success'), life: number = this.lifetime) {\r\n this.messageService.add({\r\n severity: 'success',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n\r\n info(detail: any, summary: any = this.translate.instant('msgService.info'), life: number = this.lifetime) {\r\n this.messageService.add({\r\n severity: 'info',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n\r\n warn(detail: any, summary: any = this.translate.instant('msgService.warn'), life: number = this.lifetime) {\r\n this.messageService.add({\r\n severity: 'warn',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n\r\n error(detail: any, summary: any = this.translate.instant('msgService.error'), life: number = this.lifetime) {\r\n if (detail instanceof HttpErrorResponse) {\r\n summary = `Error: ${detail.status} ${detail.statusText}`;\r\n detail = this.extractErrorMessage(detail, `${detail.name} \\r\\n ${detail.message}`);\r\n } else {\r\n detail = this.extractErrorMessage(detail, detail?.toString?.() ?? this.translate.instant('msgService.error'));\r\n }\r\n\r\n this.messageService.add({\r\n severity: 'error',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n\r\n extractErrorMessage(error: unknown, fallback: string): string {\r\n const validationMessage = this.extractValidationMessage(error);\r\n if (validationMessage) {\r\n return validationMessage;\r\n }\r\n\r\n const apiExceptionMessage = this.extractApiExceptionMessage(error);\r\n if (apiExceptionMessage) {\r\n return apiExceptionMessage;\r\n }\r\n\r\n if (typeof error === 'object' && error && 'message' in error && typeof error.message === 'string') {\r\n return error.message;\r\n }\r\n\r\n return fallback;\r\n }\r\n\r\n private extractValidationMessage(error: unknown): string | null {\r\n const responseError = this.getObjectProperty(error, 'error');\r\n const validationErrors = this.getObjectProperty(responseError, 'errors') ?? this.getObjectProperty(error, 'errors');\r\n\r\n if (!validationErrors) {\r\n return null;\r\n }\r\n\r\n const messages = Object.entries(validationErrors)\r\n .reduce<string[]>((result, [field, value]) => [...result, ...this.toValidationMessages(field, value)], [])\r\n .filter((message) => message.length > 0);\r\n\r\n return messages.length > 0 ? messages.join('\\n') : null;\r\n }\r\n\r\n private extractApiExceptionMessage(error: unknown): string | null {\r\n const responseError = this.getObjectProperty(error, 'error');\r\n const message = this.getStringProperty(responseError, 'message') ?? this.getStringProperty(error, 'message');\r\n const title = this.getStringProperty(responseError, 'title') ?? this.getStringProperty(error, 'title');\r\n\r\n if (message && title) {\r\n return `${title}: ${message}`;\r\n }\r\n\r\n return message ?? title;\r\n }\r\n\r\n private toValidationMessages(field: string, value: unknown): string[] {\r\n if (Array.isArray(value)) {\r\n return value\r\n .filter((message): message is string => typeof message === 'string')\r\n .map((message) => `${field}: ${message}`);\r\n }\r\n\r\n if (typeof value === 'string') {\r\n return [`${field}: ${value}`];\r\n }\r\n\r\n return [];\r\n }\r\n\r\n private getObjectProperty(source: unknown, property: string): Record<string, unknown> | null {\r\n if (typeof source !== 'object' || source === null || !(property in source)) {\r\n return null;\r\n }\r\n\r\n const value = (source as Record<string, unknown>)[property];\r\n return typeof value === 'object' && value !== null ? (value as Record<string, unknown>) : null;\r\n }\r\n\r\n private getStringProperty(source: unknown, property: string): string | null {\r\n if (typeof source !== 'object' || source === null || !(property in source)) {\r\n return null;\r\n }\r\n\r\n const value = (source as Record<string, unknown>)[property];\r\n return typeof value === 'string' && value.length > 0 ? value : null;\r\n }\r\n\r\n errorFromException(error: unknown, fallback: string, summary: string = fallback, life: number = this.lifetime) {\r\n this.error(this.extractErrorMessage(error, fallback), summary, life);\r\n }\r\n\r\n contrast(detail: any, summary: any = this.translate.instant('msgService.error'), life: number = this.lifetime) {\r\n this.messageService.add({\r\n severity: 'contrast',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n\r\n secondary(detail: any, summary: any = this.translate.instant('msgService.secondary'), life: number = this.lifetime) {\r\n this.messageService.add({\r\n severity: 'secondary',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { Title } from '@angular/platform-browser';\r\n\r\n/**\r\n * Service to manage the application title.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class AppTitleService {\r\n private readonly title = inject(Title);\r\n private titleSubject = new BehaviorSubject<string>('');\r\n public title$ = this.titleSubject.asObservable();\r\n\r\n /**\r\n * Set the title of the current HTML document.\r\n * @param newTitle\r\n */\r\n setTitle(newTitle: string): void {\r\n this.title.setTitle(newTitle);\r\n this.titleSubject.next(newTitle);\r\n }\r\n}\r\n","/**\r\n * Convert Date to string in format 2022-02-22\r\n * @param date\r\n */\r\nexport function dateToString(date: Date): string {\r\n const year = date.getFullYear();\r\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\r\n const day = date.getDate().toString().padStart(2, '0');\r\n\r\n return `${year}-${month}-${day}`;\r\n}\r\n\r\n/**\r\n * Convert string in format 2022-02-22 to Date\r\n * @param date\r\n */\r\nexport function stringToDate(date: string): Date {\r\n const dateParts = date.split('-');\r\n const day = parseInt(dateParts[2], 10);\r\n const month = parseInt(dateParts[1], 10) - 1;\r\n const year = parseInt(dateParts[0], 10);\r\n\r\n return new Date(year, month, day);\r\n}\r\n\r\n/**\r\n * Add days to date\r\n * @param date\r\n * @param days\r\n */\r\nexport function addDays(date: Date, days: number): Date {\r\n const clonedDate = structuredClone(date);\r\n clonedDate.setDate(clonedDate.getDate() + days);\r\n return clonedDate;\r\n}\r\n\r\n/**\r\n * Get today's date\r\n * @param date\r\n */\r\nexport function getTodayDate(): Date {\r\n const date = new Date();\r\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n}\r\n\r\n/* Convert dateformat from DatePipe to PrimeNG*/\r\nexport function convertToPrimeNgDateFormat(dateformat: string): string {\r\n switch (dateformat) {\r\n case 'dd.MM.yyyy':\r\n return 'dd.mm.yy';\r\n case 'dd.MM.yy':\r\n return 'dd.mm.y';\r\n case 'yyyy-MM-dd':\r\n return 'yy-mm-dd';\r\n case 'dd.MMM.yyyy':\r\n return 'dd.M.yy';\r\n default:\r\n console.error(`Failed to convert format: ${dateformat}`);\r\n }\r\n}\r\n\r\n/**\r\n * Convert all properties of an object with string dates to Date objects\r\n * @param obj\r\n */\r\nexport function restoreDates(obj: any) {\r\n if (obj === null || typeof obj !== 'object') return obj;\r\n\r\n if (Array.isArray(obj)) {\r\n return obj.map((item) => restoreDates(item));\r\n }\r\n\r\n const result = {};\r\n for (const key in obj) {\r\n const value = obj[key];\r\n\r\n if (typeof value === 'string' && isIsoDate(value)) {\r\n result[key] = new Date(value);\r\n } else if (typeof value === 'object' && value !== null && !(value instanceof Date)) {\r\n result[key] = restoreDates(value);\r\n } else {\r\n result[key] = value;\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Check if a string is a date in ISO format\r\n * @param str\r\n */\r\nexport function isIsoDate(str: string) {\r\n return /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$/.test(str);\r\n}\r\n","import { Injectable, effect, signal, computed } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { convertToPrimeNgDateFormat } from '../helpers/date.helper';\n\nexport interface AppConfig {\n preset?: string;\n primary?: string;\n surface?: string | null;\n darkTheme?: boolean;\n menuMode?: string;\n language?: string;\n dateFormat: string;\n timeFormat: string;\n dateTimeFormat: string;\n timeZone: string;\n adminMode?: boolean;\n}\n\ninterface LayoutState {\n staticMenuDesktopInactive?: boolean;\n overlayMenuActive?: boolean;\n configSidebarVisible?: boolean;\n staticMenuMobileActive?: boolean;\n menuHoverActive?: boolean;\n}\n\ninterface MenuChangeEvent {\n key: string;\n routeEvent?: boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class LayoutService {\n _config: AppConfig = this.getAppConfigFromStorage();\n\n _state: LayoutState = {\n staticMenuDesktopInactive: false,\n overlayMenuActive: false,\n configSidebarVisible: false,\n staticMenuMobileActive: false,\n menuHoverActive: false\n };\n\n layoutConfig = signal<AppConfig>(this._config);\n\n layoutState = signal<LayoutState>(this._state);\n\n private readonly configUpdate = new Subject<AppConfig>();\n\n private readonly overlayOpen = new Subject<any>();\n\n private readonly menuSource = new Subject<MenuChangeEvent>();\n\n private readonly resetSource = new Subject();\n\n menuSource$ = this.menuSource.asObservable();\n\n resetSource$ = this.resetSource.asObservable();\n\n configUpdate$ = this.configUpdate.asObservable();\n\n overlayOpen$ = this.overlayOpen.asObservable();\n\n theme = computed(() => (this.layoutConfig()?.darkTheme ? 'light' : 'dark'));\n\n isSidebarActive = computed(() => this.layoutState().overlayMenuActive || this.layoutState().staticMenuMobileActive);\n\n isDarkTheme = computed(() => this.layoutConfig().darkTheme);\n\n getPrimary = computed(() => this.layoutConfig().primary);\n\n getSurface = computed(() => this.layoutConfig().surface);\n\n isOverlay = computed(() => this.layoutConfig().menuMode === 'overlay');\n\n language = computed(() => this.layoutConfig().language);\n\n dateFormat = computed(() => this.layoutConfig().dateFormat);\n\n primeNgDateFormat = computed(() => convertToPrimeNgDateFormat(this.layoutConfig().dateFormat));\n\n timeFormat = computed(() => this.layoutConfig().timeFormat);\n\n dateTimeFormat = computed(() => `${this.layoutConfig().dateFormat} ${this.layoutConfig().timeFormat}`);\n\n monthFormat = computed(() => {\n const reDay = /d+/i;\n const reDelimiter = /^[^\\w]|[^\\w]$|([^\\w])\\1+/;\n const ngDateFormat = convertToPrimeNgDateFormat(this.layoutConfig().dateFormat);\n const ngDate = ngDateFormat.replace(reDay, '');\n const dateGroups = ngDate.match(reDelimiter);\n if (Array.isArray(dateGroups) && dateGroups.length > 1) {\n return dateGroups[1] !== undefined\n ? ngDate.replace(dateGroups[0], '')\n : ngDate.startsWith(dateGroups[0])\n ? ngDate.substring(1)\n : ngDate.substring(0, ngDate.length - 1);\n }\n return ngDateFormat;\n });\n\n timeZone = computed(() => this.layoutConfig().timeZone);\n\n adminMode = computed(() => this.layoutConfig().adminMode ?? false);\n\n transitionComplete = signal<boolean>(false);\n\n private initialized = false;\n\n constructor() {\n effect(() => {\n const config = this.layoutConfig();\n if (config) {\n this.onConfigUpdate();\n }\n });\n\n effect(() => {\n const config = this.layoutConfig();\n\n if (!this.initialized || !config) {\n this.initialized = true;\n return;\n }\n\n this.handleDarkModeTransition(config);\n });\n }\n\n /**\n * Get application settings from browser storage\n * @returns AppConfig\n */\n private getAppConfigFromStorage(): AppConfig {\n const appConfigUiString = localStorage.getItem('layoutConfig');\n if (appConfigUiString != null) {\n const config = JSON.parse(appConfigUiString) as AppConfig;\n config.timeZone ??= Intl.DateTimeFormat().resolvedOptions().timeZone;\n return config;\n }\n return {\n preset: 'Aura',\n primary: 'emerald',\n surface: null,\n darkTheme: false,\n menuMode: 'static',\n language: 'ru',\n dateFormat: 'yyyy-MM-dd',\n timeFormat: 'HH:mm:ss',\n dateTimeFormat: 'yyyy-MM-dd HH:mm:ss',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n adminMode: false\n };\n }\n\n private handleDarkModeTransition(config: AppConfig): void {\n if ((document as any).startViewTransition) {\n this.startViewTransition(config);\n } else {\n this.toggleDarkMode(config);\n this.onTransitionEnd();\n }\n }\n\n private startViewTransition(config: AppConfig): void {\n const transition = (document as any).startViewTransition(() => {\n this.toggleDarkMode(config);\n });\n\n transition.ready\n .then(() => {\n this.onTransitionEnd();\n })\n .catch(() => {});\n }\n\n toggleDarkMode(config?: AppConfig): void {\n const _config = config || this.layoutConfig();\n if (_config.darkTheme) {\n document.documentElement.classList.add('app-dark');\n } else {\n document.documentElement.classList.remove('app-dark');\n }\n }\n\n private onTransitionEnd() {\n this.transitionComplete.set(true);\n setTimeout(() => {\n this.transitionComplete.set(false);\n });\n }\n\n onMenuToggle() {\n if (this.isOverlay()) {\n this.layoutState.update((prev) => ({ ...prev, overlayMenuActive: !this.layoutState().overlayMenuActive }));\n\n if (this.layoutState().overlayMenuActive) {\n this.overlayOpen.next(null);\n }\n }\n\n if (this.isDesktop()) {\n this.layoutState.update((prev) => ({\n ...prev,\n staticMenuDesktopInactive: !this.layoutState().staticMenuDesktopInactive\n }));\n } else {\n this.layoutState.update((prev) => ({\n ...prev,\n staticMenuMobileActive: !this.layoutState().staticMenuMobileActive\n }));\n\n if (this.layoutState().staticMenuMobileActive) {\n this.overlayOpen.next(null);\n }\n }\n }\n\n isDesktop() {\n return window.innerWidth > 991;\n }\n\n isMobile() {\n return !this.isDesktop();\n }\n\n onConfigUpdate() {\n this._config = { ...this.layoutConfig() };\n this.configUpdate.next(this.layoutConfig());\n localStorage.setItem('layoutConfig', JSON.stringify(this.layoutConfig()));\n }\n\n onMenuStateChange(event: MenuChangeEvent) {\n this.menuSource.next(event);\n }\n\n reset() {\n this.resetSource.next(true);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { InterpolationParameters, TranslateService, Translation, TranslationObject } from '@ngx-translate/core';\nimport { LayoutService } from './app.layout.service';\nimport { PrimeNG } from 'primeng/config';\nimport { Observable, of, shareReplay, tap } from 'rxjs';\nimport en from './l10n/en.json';\nimport ru from './l10n/ru.json';\n\n/**\n * Translations of a single namespace grouped by language code, e.g. { en: {...}, ru: {...} }\n */\nexport type TranslationsByLang = Record<string, TranslationObject>;\n\n/**\n * Global dictionaries shared by all components. They are bundled with the library,\n * so the application never requests `assets/i18n/{lang}.json`.\n */\nconst globalTranslations: TranslationsByLang = { en, ru };\n\nexport interface LanguageDto {\n code: string;\n name: string;\n icon: string;\n}\n\n/**\n * Service for managing translation loading in the application\n */\n@Injectable({ providedIn: 'root' }) // Provided at root level for singleton usage\nexport class L10nService {\n private loadedTranslations: Set<string> = new Set();\n private loadingTranslations: Map<string, Observable<unknown>> = new Map();\n private httpClient = inject(HttpClient);\n private translateService = inject(TranslateService);\n private readonly primeNg = inject(PrimeNG);\n private readonly layoutService = inject(LayoutService);\n public availableLanguages: LanguageDto[];\n\n /**\n * Translations bundled with components, registered at module load time.\n */\n private static readonly staticTranslations: Map<string, TranslationsByLang> = new Map();\n\n /**\n * Registers translations bundled with a component instead of loading them over HTTP.\n * Namespaces are taken from the root keys of the passed dictionaries.\n * Components derived from <c>BaseModuleComponent</c> don't call it directly - it is enough\n * to declare the static <c>translations</c> field.\n * @param byLang - Translations grouped by language code\n * @param namespace - Explicit namespace, needed when the dictionaries are still empty\n */\n public static registerTranslations(byLang: TranslationsByLang | undefined, namespace?: string): void {\n if (!byLang) {\n return;\n }\n if (namespace) {\n L10nService.staticTranslations.set(namespace, byLang);\n }\n for (const translations of Object.values(byLang)) {\n for (const namespace of Object.keys(translations)) {\n L10nService.staticTranslations.set(namespace, byLang);\n }\n }\n }\n\n constructor() {\n // Global dictionaries are available before the first `use()` call, so TranslateHttpLoader is never asked for them.\n L10nService.registerTranslations(globalTranslations);\n Object.entries(globalTranslations).forEach(([lang, translations]) => this.mergeTranslation(lang, translations));\n\n // Static translations are merged once per language, so they have to be re-merged on every language change.\n this.translateService.onLangChange.subscribe((event) => {\n L10nService.staticTranslations.forEach((byLang) => {\n const translations = byLang[event.lang];\n if (translations) {\n this.mergeTranslation(event.lang, translations);\n }\n });\n });\n }\n\n /**\n * Loads translations for a specific component\n * @param component - Name of the component to load translations for\n */\n public loadComponentTranslations(component: string): Observable<unknown> {\n const lang = this.translateService.currentLang || this.layoutService.language() || 'en';\n return this.loadTranslations(component, lang);\n }\n\n /**\n * Loads translations from an explicit asset URL and merges them into the active language dictionary.\n * Use this for extension modules whose assets are hosted outside the shell application.\n */\n public loadTranslationsFromUrl(namespace: string, url: string, lang?: string): Observable<unknown> {\n const selectedLang = lang || this.translateService.currentLang || this.layoutService.language() || 'en';\n const key = `${namespace}.${selectedLang}.${url}`;\n if (this.loadedTranslations.has(key)) {\n return of(null);\n }\n\n const loading = this.loadingTranslations.get(key);\n if (loading) {\n return loading;\n }\n\n const request = this.httpClient.get(url).pipe(\n tap((translations) => {\n this.mergeTranslation(selectedLang, translations as TranslationObject);\n this.loadedTranslations.add(key);\n this.loadingTranslations.delete(key);\n }),\n shareReplay(1)\n );\n\n this.loadingTranslations.set(key, request);\n request.subscribe({\n error: (e) => {\n this.loadingTranslations.delete(key);\n console.error(`No translations found for ${namespace}.${selectedLang}.json at ${url}`);\n console.error(e);\n }\n });\n\n return request;\n }\n\n /**\n * Gets the translated value of a key (or an array of keys)\n * @returns the translated key, or an object of translated keys\n */\n public get(key: string) {\n this.loadComponentTranslations(key.split('.')[0]);\n return this.translateService.get(key);\n }\n\n /**\n * Internal method to merge a namespace's statically-registered translations\n * (see <c>registerTranslations</c>) into the active language dictionary.\n * @param component - Translation namespace\n * @param lang - Language code to load translations for\n */\n private loadTranslations(component: string, lang: string): Observable<unknown> {\n const key = `${component}.${lang}`;\n if (this.loadedTranslations.has(key)) {\n return of(null);\n }\n\n const staticTranslations = L10nService.staticTranslations.get(component);\n if (!staticTranslations) {\n console.error(`No translations registered for namespace \"${component}\".`);\n return of(null);\n }\n\n const translations = staticTranslations[lang];\n if (translations) {\n this.mergeTranslation(lang, translations);\n }\n this.loadedTranslations.add(key);\n\n return of(null);\n }\n\n /**\n * Merges a translation dictionary into the dictionary of the given language\n * @param lang - Language code\n * @param translations - Translations to merge\n */\n private mergeTranslation(lang: string, translations: TranslationObject): void {\n const current = this.translateService.translations[lang] || {};\n this.translateService.setTranslation(lang, { ...current, ...translations }, true);\n }\n\n /**\n * Changes the lang currently used\n */\n use(selectedLanguage: string, key: string = null) {\n if (key) {\n this.get(key);\n }\n this.translateService.use(selectedLanguage);\n }\n\n init(languages: LanguageDto[]) {\n this.availableLanguages = languages;\n this.translateService.addLangs(languages.map((x) => x.code));\n const lang = this.layoutService.language() ? this.layoutService.language() : 'en';\n this.translateService.setDefaultLang(lang);\n this.translateService.use(lang).subscribe(() => {\n this.loadComponentTranslations('app-info');\n this.translateService.get('primeng').subscribe((res) => this.primeNg.setTranslation(res));\n });\n }\n\n instant(key: string | string[], interpolateParams?: InterpolationParameters): Translation | TranslationObject {\n return this.translateService.instant(key, interpolateParams);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, OnDestroy, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, ReplaySubject, firstValueFrom, of } from 'rxjs';\nimport { catchError, distinctUntilChanged, filter, tap } from 'rxjs/operators';\n\ntype RefreshCustomParams = { [key: string]: string | number | boolean };\n\nexport type AuthSessionRefreshResult = {\n isAuthenticated: boolean;\n userData: any;\n};\n\nexport type AuthCsrfToken = {\n token: string;\n headerName: string;\n};\n\ntype AuthSessionResponse = {\n isAuthenticated: boolean;\n userName?: string;\n displayName?: string;\n email?: string;\n roles: string[];\n};\n\ntype CurrentUser = {\n userName?: string;\n displayName?: string;\n email?: string;\n roles: string[];\n preferred_username?: string;\n name?: string;\n given_name?: string;\n family_name?: string;\n};\n\nexport abstract class SecurityService {\n abstract auth(): void;\n\n abstract logout(): void;\n\n abstract isAuthenticated(): Observable<boolean>;\n\n abstract getAccessToken(): Observable<string>;\n\n abstract isTokenExpired(): Observable<boolean>;\n\n abstract getCurrentUser(): any;\n\n abstract getCurrentUser$(): Observable<any>;\n\n abstract forceRefreshSession(\n customParams?: RefreshCustomParams,\n configId?: string\n ): Observable<AuthSessionRefreshResult>;\n\n abstract getCsrfToken(): Observable<AuthCsrfToken | null>;\n\n abstract isAdmin(): boolean;\n\n abstract authorize(returnUrl?: string): void;\n\n abstract payload: BehaviorSubject<any>;\n}\n\n@Injectable()\nexport class BffSecurityService implements OnDestroy, SecurityService {\n public static readonly authorizeAfterLogoutReturnUrlKey = 'oip.authorizeAfterLogoutReturnUrl';\n\n private readonly http = inject(HttpClient);\n private readonly authenticated = new BehaviorSubject<boolean | null>(null);\n private readonly currentUser = new BehaviorSubject<any>(null);\n private readonly csrfToken = new ReplaySubject<AuthCsrfToken | null>(1);\n\n public readonly payload = new BehaviorSubject<any>(null);\n\n auth(): void {\n this.http\n .get<AuthSessionResponse>(this.buildUrl('api/security/get-current-auth-session'), {\n withCredentials: true\n })\n .pipe(\n tap((session) => this.applySession(session)),\n catchError(() => {\n this.applyAnonymousSession();\n return of(null);\n })\n )\n .subscribe();\n }\n\n logout(): void {\n firstValueFrom(this.getCsrfToken()).then((csrfToken) => {\n this.storeAuthorizeAfterLogoutReturnUrl();\n\n const form = this.createPostForm(this.buildUrl('api/security/delete-auth-session'));\n if (csrfToken?.token) {\n const tokenInput = document.createElement('input');\n tokenInput.type = 'hidden';\n tokenInput.name = '__RequestVerificationToken';\n tokenInput.value = csrfToken.token;\n form.appendChild(tokenInput);\n }\n document.body.appendChild(form);\n form.submit();\n });\n }\n\n isAuthenticated(): Observable<boolean> {\n return this.authenticated.asObservable().pipe(\n filter((value): value is boolean => value !== null),\n distinctUntilChanged()\n );\n }\n\n getAccessToken(): Observable<string> {\n return of('');\n }\n\n isTokenExpired(): Observable<boolean> {\n return of(false);\n }\n\n getCurrentUser(): any {\n return this.currentUser.getValue();\n }\n\n getCurrentUser$(): Observable<any> {\n return this.currentUser.asObservable();\n }\n\n forceRefreshSession(): Observable<AuthSessionRefreshResult> {\n this.auth();\n return of({\n isAuthenticated: this.authenticated.getValue() === true,\n userData: this.currentUser.getValue()\n });\n }\n\n getCsrfToken(): Observable<AuthCsrfToken | null> {\n this.http\n .get<AuthCsrfToken>(this.buildUrl('api/security/get-auth-csrf-token'), {\n withCredentials: true\n })\n .pipe(catchError(() => of(null)))\n .subscribe((token) => this.csrfToken.next(token));\n\n return this.csrfToken.asObservable();\n }\n\n isAdmin(): boolean {\n return this.payload.getValue()?.realm_access?.roles?.includes('admin') ?? false;\n }\n\n authorize(returnUrl?: string): void {\n const normalizedReturnUrl = this.normalizeReturnUrl(returnUrl);\n this.replaceWithUnauthorizedUrl(normalizedReturnUrl);\n\n const form = this.createPostForm(this.buildUrl('api/security/create-auth-session'));\n document.body.appendChild(form);\n form.submit();\n }\n\n ngOnDestroy(): void {\n this.authenticated.complete();\n this.currentUser.complete();\n this.payload.complete();\n }\n\n private applySession(session: AuthSessionResponse): void {\n const roles = session.roles ?? [];\n const user = this.createCurrentUser(session, roles);\n\n this.authenticated.next(session.isAuthenticated);\n this.currentUser.next(user);\n this.payload.next({ realm_access: { roles }, ...user });\n }\n\n private createCurrentUser(session: AuthSessionResponse, roles: string[]): CurrentUser {\n const displayName = session.displayName || session.userName || session.email;\n const nameParts = this.splitDisplayName(displayName);\n\n return {\n userName: session.userName,\n displayName,\n email: session.email,\n roles,\n preferred_username: session.userName,\n name: displayName,\n given_name: nameParts.givenName,\n family_name: nameParts.familyName\n };\n }\n\n private splitDisplayName(displayName?: string): { givenName?: string; familyName?: string } {\n const parts = displayName?.trim().split(/\\s+/).filter(Boolean) ?? [];\n\n return {\n givenName: parts[0],\n familyName: parts.length > 1 ? parts.slice(1).join(' ') : undefined\n };\n }\n\n private applyAnonymousSession(): void {\n this.authenticated.next(false);\n this.currentUser.next(null);\n this.payload.next(null);\n this.csrfToken.next(null);\n }\n\n private createPostForm(action: string): HTMLFormElement {\n const form = document.createElement('form');\n form.method = 'post';\n form.action = action;\n form.style.display = 'none';\n return form;\n }\n\n private normalizeReturnUrl(returnUrl?: string): string {\n const candidate = returnUrl?.trim();\n if (!candidate || /[\\u0000-\\u001f\\u007f\\\\]/.test(candidate)) {\n return '/';\n }\n\n if (!candidate.startsWith('/') || candidate.startsWith('//')) {\n return '/';\n }\n\n try {\n const url = new URL(candidate, window.location.origin);\n if (url.origin !== window.location.origin) {\n return '/';\n }\n\n const normalizedUrl = `${url.pathname}${url.search}${url.hash}`;\n return normalizedUrl.startsWith('/unauthorized') ? '/' : normalizedUrl;\n } catch {\n return '/';\n }\n }\n\n private replaceWithUnauthorizedUrl(returnUrl: string): void {\n const unauthorizedUrl = new URL('unauthorized', this.getBaseUrl());\n unauthorizedUrl.searchParams.set('returnUrl', returnUrl);\n\n history.replaceState(history.state, '', `${unauthorizedUrl.pathname}${unauthorizedUrl.search}`);\n }\n\n private storeAuthorizeAfterLogoutReturnUrl(): void {\n sessionStorage.setItem(\n BffSecurityService.authorizeAfterLogoutReturnUrlKey,\n this.normalizeReturnUrl(`${window.location.pathname}${window.location.search}${window.location.hash}`)\n );\n }\n\n private buildUrl(path: string): string {\n return `${this.getBaseUrl()}${path}`;\n }\n\n private getBaseUrl(): string {\n const baseUrl = document.getElementsByTagName('base')[0].href;\n return baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`;\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { inject, Injectable } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { firstValueFrom } from \"rxjs\";\nimport { LayoutService } from \"../services/app.layout.service\";\nimport { SecurityService } from \"../services/security.service\";\n\nexport type QueryParamsType = Record<string | number, any>;\nexport type ResponseFormat = keyof Omit<Body, \"body\" | \"bodyUsed\">;\n\nexport interface FullRequestParams extends Omit<RequestInit, \"body\"> {\n /** set parameter to `true` for call `securityWorker` for this request */\n secure?: boolean;\n /** request path */\n path: string;\n /** content type of request body */\n type?: ContentType;\n /** query params */\n query?: QueryParamsType;\n /** format of response (i.e. response.json() -> format: \"json\") */\n format?: ResponseFormat;\n /** request body */\n body?: unknown;\n /** base url */\n baseUrl?: string;\n /** request cancellation token */\n cancelToken?: CancelToken;\n}\n\nexport type RequestParams = Omit<\n FullRequestParams,\n \"body\" | \"method\" | \"query\" | \"path\"\n>;\n\nexport interface ApiConfig<SecurityDataType = unknown> {\n baseUrl?: string;\n baseApiParams?: Omit<RequestParams, \"baseUrl\" | \"cancelToken\" | \"signal\">;\n securityWorker?: (\n securityData: SecurityDataType | null,\n ) => Promise<RequestParams | void> | RequestParams | void;\n customFetch?: typeof fetch;\n}\n\nexport interface HttpResponse<D extends unknown, E extends unknown = unknown>\n extends Response {\n data: D;\n error: E;\n}\n\ntype CancelToken = Symbol | string | number;\n\nexport enum ContentType {\n Json = \"application/json\",\n JsonApi = \"application/vnd.api+json\",\n FormData = \"multipart/form-data\",\n UrlEncoded = \"application/x-www-form-urlencoded\",\n Text = \"text/plain\",\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class HttpClient<SecurityDataType = unknown> {\n protected securityService = inject(SecurityService);\n protected layoutService = inject(LayoutService);\n protected router = inject(Router);\n public baseUrl: string = \"\";\n private securityWorker?: ApiConfig<SecurityDataType>[\"securityWorker\"] =\n () => {\n const moduleInstanceId = this.getCurrentModuleInstanceId();\n return {\n headers: {\n \"Accept-language\": this.layoutService.language()\n ? this.layoutService.language()\n : \"en\",\n \"X-Timezone\": this.layoutService.timeZone(),\n ...(moduleInstanceId != null\n ? { \"X-Module-Instance-Id\": String(moduleInstanceId) }\n : {}),\n },\n };\n };\n\n /**\n * Reads the module instance id of the deepest activated route.\n * The backend uses it to check module instance rights on endpoints that do not carry the id in their contract.\n */\n protected getCurrentModuleInstanceId(): number | undefined {\n // May run before the first navigation completes, when route snapshots are not available yet.\n let route: ActivatedRoute | null | undefined =\n this.router.routerState?.root;\n let id: string | null = null;\n\n while (route) {\n id = route.snapshot?.paramMap?.get(\"id\") ?? id;\n route = route.firstChild;\n }\n\n const parsed = id != null ? Number(id) : Number.NaN;\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n\n private abortControllers = new Map<CancelToken, AbortController>();\n private customFetch = (...fetchParams: Parameters<typeof fetch>) =>\n fetch(...fetchParams);\n\n private baseApiParams: RequestParams = {\n credentials: \"same-origin\",\n headers: {},\n redirect: \"follow\",\n referrerPolicy: \"no-referrer\",\n };\n\n public setSecurityData = (data: SecurityDataType | null) => {};\n\n protected encodeQueryParam(key: string, value: any) {\n const encodedKey = encodeURIComponent(key);\n return `${encodedKey}=${encodeURIComponent(typeof value === \"number\" ? value : `${value}`)}`;\n }\n\n protected addQueryParam(query: QueryParamsType, key: string) {\n return this.encodeQueryParam(key, query[key]);\n }\n\n protected addArrayQueryParam(query: QueryParamsType, key: string) {\n const value = query[key];\n return value.map((v: any) => this.encodeQueryParam(key, v)).join(\"&\");\n }\n\n protected toQueryString(rawQuery?: QueryParamsType): string {\n const query = rawQuery || {};\n const keys = Object.keys(query).filter(\n (key) => \"undefined\" !== typeof query[key],\n );\n return keys\n .map((key) =>\n Array.isArray(query[key])\n ? this.addArrayQueryParam(query, key)\n : this.addQueryParam(query, key),\n )\n .join(\"&\");\n }\n\n protected addQueryParams(rawQuery?: QueryParamsType): string {\n const queryString = this.toQueryString(rawQuery);\n return queryString ? `?${queryString}` : \"\";\n }\n\n private contentFormatters: Record<ContentType, (input: any) => any> = {\n [ContentType.Json]: (input: any) =>\n input !== null && (typeof input === \"object\" || typeof input === \"string\")\n ? JSON.stringify(input)\n : input,\n [ContentType.JsonApi]: (input: any) =>\n input !== null && (typeof input === \"object\" || typeof input === \"string\")\n ? JSON.stringify(input)\n : input,\n [ContentType.Text]: (input: any) =>\n input !== null && typeof input !== \"string\"\n ? JSON.stringify(input)\n : input,\n [ContentType.FormData]: (input: any) => {\n if (input instanceof FormData) {\n return input;\n }\n\n return Object.keys(input || {}).reduce((formData, key) => {\n const property = input[key];\n formData.append(\n key,\n property instanceof Blob\n ? property\n : typeof property === \"object\" && property !== null\n ? JSON.stringify(property)\n : `${property}`,\n );\n return formData;\n }, new FormData());\n },\n [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input),\n };\n\n protected mergeRequestParams(\n params1: RequestParams,\n params2?: RequestParams,\n ): RequestParams {\n return {\n ...this.baseApiParams,\n ...params1,\n ...(params2 || {}),\n headers: {\n ...(this.baseApiParams.headers || {}),\n ...(params1.headers || {}),\n ...((params2 && params2.headers) || {}),\n },\n };\n }\n\n protected createAbortSignal = (\n cancelToken: CancelToken,\n ): AbortSignal | undefined => {\n if (this.abortControllers.has(cancelToken)) {\n const abortController = this.abortControllers.get(cancelToken);\n if (abortController) {\n return abortController.signal;\n }\n return void 0;\n }\n\n const abortController = new AbortController();\n this.abortControllers.set(cancelToken, abortController);\n return abortController.signal;\n };\n\n public abortRequest = (cancelToken: CancelToken) => {\n const abortController = this.abortControllers.get(cancelToken);\n\n if (abortController) {\n abortController.abort();\n this.abortControllers.delete(cancelToken);\n }\n };\n\n public request = async <T = any, E = any>({\n body,\n secure,\n path,\n type,\n query,\n format,\n baseUrl,\n cancelToken,\n ...params\n }: FullRequestParams): Promise<T> => {\n const secureParams =\n ((typeof secure === \"boolean\" ? secure : this.baseApiParams.secure) &&\n this.securityWorker &&\n (await this.securityWorker(null))) ||\n {};\n const csrfParams = await this.getCsrfRequestParams(params.method, path);\n const requestParams = this.mergeRequestParams(\n this.mergeRequestParams(params, secureParams),\n csrfParams,\n );\n const queryString = query && this.toQueryString(query);\n const payloadFormatter = this.contentFormatters[type || ContentType.Json];\n let responseFormat = format || requestParams.format;\n\n return this.customFetch(\n `${baseUrl || this.baseUrl || \"\"}${path}${queryString ? `?${queryString}` : \"\"}`,\n {\n ...requestParams,\n headers: {\n ...(requestParams.headers || {}),\n ...(type && type !== ContentType.FormData\n ? { \"Content-Type\": type }\n : {}),\n },\n signal:\n (cancelToken\n ? this.createAbortSignal(cancelToken)\n : requestParams.signal) || null,\n body:\n typeof body === \"undefined\" || body === null\n ? null\n : payloadFormatter(body),\n },\n ).then(async (response) => {\n const r = response as HttpResponse<T, E>;\n r.data = null as unknown as T;\n r.error = null as unknown as E;\n\n if (typeof E !== undefined && responseFormat === undefined)\n responseFormat = \"json\";\n\n const responseToParse = responseFormat ? response.clone() : response;\n const data = !responseFormat\n ? r\n : await responseToParse[responseFormat]()\n .then((data) => {\n if (r.ok) {\n r.data = data;\n } else {\n r.error = data;\n }\n return r;\n })\n .catch((e) => {\n r.error = e;\n return r;\n });\n\n if (cancelToken) {\n this.abortControllers.delete(cancelToken);\n }\n\n if (!response.ok) {\n this.authorizeOnUnauthorized(response, path);\n throw data;\n }\n return data.data;\n });\n };\n\n private authorizeOnUnauthorized(response: Response, path: string): void {\n if (\n response.status !== 401 ||\n path.includes(\"/api/security/create-auth-session\")\n ) {\n return;\n }\n\n this.securityService.authorize(\n `${window.location.pathname}${window.location.search}${window.location.hash}`,\n );\n }\n\n private async getCsrfRequestParams(\n method: string | undefined,\n path: string,\n ): Promise<RequestParams> {\n if (\n !method ||\n ![\"POST\", \"PUT\", \"PATCH\", \"DELETE\"].includes(method.toUpperCase())\n ) {\n return {};\n }\n\n if (\n path.includes(\"/api/security/create-auth-session\") ||\n path.includes(\"/api/security/get-auth-csrf-token\")\n ) {\n return {};\n }\n\n const csrfToken = await firstValueFrom(this.securityService.getCsrfToken());\n return csrfToken?.token\n ? { headers: { [csrfToken.headerName]: csrfToken.token } }\n : {};\n }\n}\n","import { inject, isDevMode } from '@angular/core';\nimport { L10nService, TranslationsByLang } from '../services/l10n.service';\nimport { Observable, of } from 'rxjs';\nimport { Translation, TranslationObject } from '@ngx-translate/core';\n\n/**\n * Registers a component's co-located translations and merges them into the\n * active language. The namespace is derived from the JSON's own root key,\n * so callers never repeat it as a string literal.\n *\n * Must be called from an injection context - as a field initializer, or as\n * the first statement in a constructor - the same requirement as `inject()`\n * itself, which it uses internally.\n *\n * ```ts\n * import en from './l10n/menu.en.json';\n * import ru from './l10n/menu.ru.json';\n *\n * @Component({ ... })\n * export class MenuComponent {\n * private readonly translations = provideTranslations({ en, ru });\n * }\n * ```\n */\nexport function provideTranslations(byLang: TranslationsByLang): Observable<Translation | TranslationObject> {\n if (isDevMode()) {\n warnOnKeyMismatch(byLang);\n }\n\n L10nService.registerTranslations(byLang);\n\n const namespace = namespaceOf(byLang);\n return namespace ? inject(L10nService).get(namespace) : of({});\n}\n\nfunction namespaceOf(byLang: TranslationsByLang): string | undefined {\n const firstLangDict = Object.values(byLang)[0];\n return firstLangDict ? Object.keys(firstLangDict)[0] : undefined;\n}\n\n/**\n * Dev-only sanity check: warns when the language dictionaries in `byLang`\n * don't all declare the same set of keys - a common source of a translated\n * string silently falling back to its raw key in one language only.\n */\nfunction warnOnKeyMismatch(byLang: TranslationsByLang): void {\n const langs = Object.keys(byLang);\n if (langs.length < 2) {\n return;\n }\n\n const keysByLang = new Map(langs.map((lang) => [lang, collectKeyPaths(byLang[lang])]));\n const [baseLang, ...otherLangs] = langs;\n const baseKeys = keysByLang.get(baseLang)!;\n const namespace = namespaceOf(byLang) ?? '(unknown namespace)';\n\n for (const lang of otherLangs) {\n const langKeys = keysByLang.get(lang)!;\n const missing = [...baseKeys].filter((key) => !langKeys.has(key));\n const extra = [...langKeys].filter((key) => !baseKeys.has(key));\n\n if (missing.length > 0) {\n console.warn(\n `[provideTranslations] \"${namespace}\": \"${lang}\" is missing keys present in \"${baseLang}\": ${missing.join(', ')}`\n );\n }\n if (extra.length > 0) {\n console.warn(\n `[provideTranslations] \"${namespace}\": \"${lang}\" has extra keys not present in \"${baseLang}\": ${extra.join(', ')}`\n );\n }\n }\n}\n\n/**\n * Recursively collects dot-joined paths to every leaf value in an object,\n * e.g. { a: { b: 'x' } } -> ['a.b'].\n */\nfunction collectKeyPaths(value: unknown, prefix = '', paths: Set<string> = new Set()): Set<string> {\n if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n for (const [key, child] of Object.entries(value as Record<string, unknown>)) {\n collectKeyPaths(child, prefix ? `${prefix}.${key}` : key, paths);\n }\n } else {\n paths.add(prefix);\n }\n\n return paths;\n}\n","import {\n ChangeDetectorRef,\n Component,\n DestroyRef,\n effect,\n inject,\n OnDestroy,\n OnInit,\n signal,\n WritableSignal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TopBarDto } from '../../dtos/top-bar.dto';\nimport { TopBarService } from '../../services/top-bar.service';\nimport { MsgService } from '../../services/msg.service';\nimport { ActivatedRoute } from '@angular/router';\nimport { InterpolationParameters, TranslateService, Translation, TranslationObject } from '@ngx-translate/core';\nimport { from, Subject, Subscription } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { AppTitleService } from '../../services/app-title.service';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { L10nService } from '../../services/l10n.service';\nimport { SecurityDto } from '../../dtos/security.dto';\nimport { SecurityService } from '../../services/security.service';\nimport { ContentType, HttpClient } from '../../api/http-client';\nimport { PutSecurityDto } from '../../dtos/put-security.dto';\nimport { ApiExceptionResponse } from '../../api/data-contracts';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/base-module.en.json';\nimport ru from './l10n/base-module.ru.json';\n\ninterface BaseComponentLocalization {\n security: string;\n settings: string;\n content: string;\n}\n\n@Component({standalone: true, template: ''})\nexport abstract class BaseModuleComponent<TBackendStoreSettings, TLocalStoreSettings> implements OnInit, OnDestroy {\n private static readonly readRight = 'read';\n private static readonly editRight = 'edit';\n private static readonly deleteRight = 'delete';\n\n protected isInitialized = false;\n protected moduleInstanceReloadPromise: Promise<void> = Promise.resolve();\n protected rightsSubscription?: Subscription;\n protected securityRoles: string[] = [];\n protected securitySettings: SecurityDto[] = [];\n protected readonly destroyRef = inject(DestroyRef);\n protected readonly securityService = inject(SecurityService);\n protected readonly httpClient = inject(HttpClient);\n\n /**\n * Provide access to app settings\n */\n public readonly layoutService = inject(LayoutService);\n /**\n * Provides access to topbar related functionality, such as managing visibility and content.\n * @type {TopBarService}\n */\n public readonly topBarService: TopBarService = inject(TopBarService);\n\n /**\n * Provides access to information about the current route.\n * This includes route parameters, data, and the route's path.\n */\n public readonly route: ActivatedRoute = inject(ActivatedRoute);\n\n /**\n * Provides access to messaging services.\n */\n public readonly msgService = inject(MsgService);\n\n /**\n * Provides access to translation functionality.\n */\n public readonly translateService = inject(TranslateService);\n\n /**\n * Provides access to the application's title service.\n */\n public readonly appTitleService = inject(AppTitleService);\n\n /**\n * Reference to the ChangeDetector. Used to trigger change detection manually.\n */\n private changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n /**\n * Represents a subscription to an observable.\n * Manages the lifecycle of receiving data from the observable and allows unsubscribing to stop receiving data.\n * @type {Subscription}\n */\n public subscriptions: Subscription[] = [];\n /**\n * Configuration object for backend storage\n * @type {TBackendStoreSettings}\n */\n public settings: TBackendStoreSettings = {} as TBackendStoreSettings;\n\n /**\n * Configuration object for local storage.\n * @type {TLocalStoreSettings}\n */\n public _localSettings: TLocalStoreSettings = {} as TLocalStoreSettings;\n\n /**\n * A signal representing the local application settings. Changes to this signal\n * propagate updates to the underlying local store settings.\n * @type {WritableSignal<TLocalStoreSettings>}\n */\n public localSettings: WritableSignal<TLocalStoreSettings> = signal<TLocalStoreSettings>(this._localSettings);\n\n /**\n * A Subject emitting updates to local store settings. Observables can subscribe to this Subject to react to changes in local settings.\n * @type {Subject<TLocalStoreSettings>}\n */\n public localSettingsUpdate: Subject<TLocalStoreSettings> = new Subject<TLocalStoreSettings>();\n\n /**\n * The title of the component. Get from Title in ngOnInit\n * @type {string}\n */\n public title: string;\n\n private readonly baseTranslations = provideTranslations({ en, ru });\n\n public l10nService = inject(L10nService);\n public canRead = false;\n public canEdit = false;\n public canDelete = false;\n public securityRightsLoaded = false;\n\n /**\n * Updates local settings and persists them to local storage.\n * @return {void}\n */\n private onConfigUpdate(): void {\n if (Object.keys(this.localSettings()).length > 0) {\n this._localSettings = {...this.localSettings()};\n this.localSettingsUpdate.next(this._localSettings);\n localStorage.setItem(`Instance_${this.id}`, JSON.stringify(this._localSettings));\n }\n }\n\n private getLocalStorageSettings() {\n try {\n const localStorageSettingsString = localStorage.getItem(`Instance_${this.id}`);\n if (localStorageSettingsString != null) {\n this.localSettings.set(JSON.parse(localStorageSettingsString) as TLocalStoreSettings);\n } else {\n this.localSettings.set({} as TLocalStoreSettings);\n }\n } catch (error) {\n this.msgService.error(error, 'Error parsing layoutConfig:');\n this.localSettings.set({} as TLocalStoreSettings);\n }\n }\n\n /**\n * A unique numerical identifier for the module.\n * @type {number}\n */\n id: number | undefined = undefined;\n\n /**\n * The name of the controller currently handling the request.\n * @type {string}\n */\n controller: string;\n\n /**\n * Checks if the content ID is present.\n * @returns {boolean} True if the content ID is present, false otherwise.\n */\n get isContent(): boolean {\n return this.topBarService.checkId('content');\n }\n\n /**\n * Checks if the settings ID is present.\n * @returns {boolean} True if the settings ID is present, false otherwise.\n */\n get isSettings(): boolean {\n return this.topBarService.checkId('settings');\n }\n\n /**\n * Checks if the security ID is present.\n * @returns {boolean} True if the security ID is present, false otherwise.\n */\n get isSecurity(): boolean {\n return this.topBarService.checkId('security');\n }\n\n /**\n * Defines the top bar items.\n */\n public topBarItems: TopBarDto[] = [\n {id: 'content', icon: 'pi-box', caption: ''},\n {id: 'settings', icon: 'pi-cog', caption: ''},\n {id: 'security', icon: 'pi-lock', caption: ''}\n ];\n\n /**\n * Gets an instant translation for a key or an array of keys.\n */\n public t(key: string | string[], interpolateParams?: InterpolationParameters): Translation | TranslationObject {\n return this.translateService.instant(key, interpolateParams);\n }\n\n /**\n * Checks whether the current user has the specified security right.\n */\n public hasRight(code: string): boolean {\n return this.hasSecurityRight(this.securityRoles, this.securitySettings, code);\n }\n\n /**\n * Initializes the component and subscribes to local settings updates.\n */\n constructor() {\n effect(() => {\n const config = this.localSettings();\n if (config) {\n this.onConfigUpdate();\n }\n });\n this.subscriptions.push(\n this.route.url.subscribe((url) => {\n this.controller = url[0].path;\n })\n );\n this.subscriptions.push(\n this.route.paramMap.subscribe((params) => {\n const routeId = params.get('id');\n const nextId = routeId != null ? +routeId : undefined;\n const idChanged = this.id !== nextId;\n\n this.id = nextId;\n this.getLocalStorageSettings();\n\n if (this.isInitialized && idChanged) {\n void this.reloadModuleInstance();\n }\n })\n );\n }\n\n /**\n * Lifecycle hook that is called when a component is destroyed.\n * Unsubscribes from all subscriptions to prevent memory leaks,\n * resets the top bar items to an empty array, and sets the active ID\n * to the ID of the first top bar item (if available).\n */\n ngOnDestroy() {\n this.topBarService.setTopBarItems([]);\n this.topBarService.activeId = this.topBarItems[0].id;\n this.rightsSubscription?.unsubscribe();\n this.subscriptions.forEach((s) => s.unsubscribe());\n }\n\n /**\n * Initializes the component. Subscribes to translation service to set captions for top bar items,\n * sets the top bar items via the top bar service, sets the active ID,\n * subscribes to route parameters to get the ID, and retrieves settings.\n * @return {Promise<void>} A promise that resolves when the initialization is complete.\n */\n async ngOnInit(): Promise<void> {\n this.subscriptions.push(\n this.translateService.stream('baseComponent').subscribe((value: BaseComponentLocalization) => {\n this.topBarItems.forEach((item) => {\n item.caption = value[item.id];\n });\n })\n );\n\n this.topBarService.setTopBarItems(this.topBarItems);\n this.topBarService.activeId = this.topBarItems[0].id;\n\n this.isInitialized = true;\n await this.reloadModuleInstance();\n\n this.subscriptions.push(\n this.appTitleService.title$.subscribe((title) => {\n this.title = title;\n this.changeDetectorRef.detectChanges();\n })\n );\n }\n\n /**\n * Retrieves module instance settings.\n * @return {Promise<void>} A promise that resolves when settings are retrieved.\n */\n async getSettings(): Promise<void> {\n try {\n if (this.id == null) {\n return;\n }\n\n this.settings = await this.getModuleInstanceSettings<TBackendStoreSettings>();\n } catch (error) {\n this.msgService.error(error);\n }\n }\n\n /**\n * Saves the provided settings to the backend.\n * @param {TLocalStoreSettings} settings - The settings object to save.\n * @return {Promise<void>} A promise that resolves when the settings are saved. Reject if an error occurs.\n */\n async saveSettings(settings: TBackendStoreSettings): Promise<void> {\n if (this.id == null) {\n this.msgService.error('Module id not passed!');\n return;\n }\n\n await this.saveModuleInstanceSettings({\n id: this.id,\n settings: settings\n })\n .then(() => {\n this.msgService.success(this.translateService.instant('baseComponent.success'));\n })\n .catch((error) => {\n this.msgService.error(error);\n });\n }\n\n /**\n * Called whenever the module instance changes, including the first load.\n * Derived components can override this to refresh module-specific data.\n */\n protected async onModuleInstanceChange(): Promise<void> {\n }\n\n /**\n * Called whenever current user rights for the active module instance are recalculated.\n */\n protected onSecurityRightsChange(): void {\n }\n\n /**\n * Starts watching current token roles and maps them to module instance security settings.\n */\n protected watchSecurityRights(controller: string = this.controller, id: number | undefined = this.id): Promise<void> {\n this.rightsSubscription?.unsubscribe();\n this.resetRightsState();\n\n if (!controller || id == null) {\n return Promise.resolve();\n }\n\n return new Promise<void>((resolve) => {\n let settled = false;\n const settle = () => {\n if (!settled) {\n settled = true;\n resolve();\n }\n };\n\n this.rightsSubscription = this.securityService.payload\n .pipe(\n switchMap((payload) =>\n from(this.getSecurity(controller, id)).pipe(map((securitySettings) => ({payload, securitySettings})))\n ),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe({\n next: ({payload, securitySettings}) => {\n const roles = payload?.realm_access?.roles ?? [];\n this.updateRightsState(roles, securitySettings);\n settle();\n },\n error: (error) => {\n this.securityRightsLoaded = true;\n console.error('Не удалось загрузить права', error);\n this.onSecurityRightsChange();\n settle();\n }\n });\n });\n }\n\n private resetRightsState(): void {\n this.canRead = false;\n this.canEdit = false;\n this.canDelete = false;\n this.securityRightsLoaded = false;\n this.securityRoles = [];\n this.securitySettings = [];\n }\n\n private updateRightsState(roles: string[], securitySettings: SecurityDto[]): void {\n this.securityRoles = roles;\n this.securitySettings = securitySettings;\n this.canRead = this.hasSecurityRight(roles, securitySettings, BaseModuleComponent.readRight);\n this.canEdit = this.hasSecurityRight(roles, securitySettings, BaseModuleComponent.editRight);\n this.canDelete = this.hasSecurityRight(roles, securitySettings, BaseModuleComponent.deleteRight);\n this.securityRightsLoaded = true;\n this.onSecurityRightsChange();\n }\n\n protected hasSecurityRight(roles: string[], securitySettings: SecurityDto[], code: string): boolean {\n return (\n securitySettings.find((security) => security.code === code)?.roles?.some((role) => roles.includes(role)) ?? false\n );\n }\n\n protected getSecurity(controller: string = this.controller, id: number | undefined = this.id): Promise<SecurityDto[]> {\n if (!controller || id == null) {\n return Promise.resolve([]);\n }\n\n return this.httpClient.request<SecurityDto[], ApiExceptionResponse>({\n path: `/api/${controller}/get-security`,\n method: 'GET',\n secure: true,\n format: 'json'\n });\n }\n\n protected saveSecurity(request: PutSecurityDto, controller: string = this.controller): Promise<unknown> {\n return this.httpClient.request<unknown, ApiExceptionResponse>({\n path: `/api/${controller}/put-security`,\n method: 'PUT',\n body: request,\n secure: true,\n type: ContentType.Json\n });\n }\n\n protected getModuleInstanceSettings<TSettings>(controller: string = this.controller): Promise<TSettings> {\n return this.httpClient.request<TSettings, ApiExceptionResponse>({\n path: `/api/${controller}/get-module-instance-settings`,\n method: 'GET',\n secure: true,\n format: 'json'\n });\n }\n\n protected saveModuleInstanceSettings<TSettings>(\n request: { id: number; settings: TSettings },\n controller: string = this.controller\n ): Promise<unknown> {\n return this.httpClient.request<unknown, ApiExceptionResponse>({\n path: `/api/${controller}/put-module-instance-settings`,\n method: 'PUT',\n body: request,\n secure: true,\n type: ContentType.Json\n });\n }\n\n protected getMigrations<TMigration>(controller: string = this.controller): Promise<TMigration[]> {\n return this.httpClient.request<TMigration[], ApiExceptionResponse>({\n path: `/api/${controller}/get-migrations`,\n method: 'GET',\n secure: true,\n format: 'json'\n });\n }\n\n protected applyModuleMigration(request: unknown, controller: string = this.controller): Promise<unknown> {\n return this.httpClient.request<unknown, ApiExceptionResponse>({\n path: `/api/${controller}/apply-migration`,\n method: 'POST',\n body: request,\n secure: true,\n type: ContentType.Json\n });\n }\n\n private async reloadModuleInstance(): Promise<void> {\n this.moduleInstanceReloadPromise = this.moduleInstanceReloadPromise.then(async () => {\n // Rights first: the backend rejects settings and data requests without the read right.\n await this.watchSecurityRights();\n if (!this.canRead) {\n return;\n }\n\n await this.getSettings();\n await this.onModuleInstanceChange();\n });\n\n await this.moduleInstanceReloadPromise;\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n ApiExceptionResponse,\n AuthCsrfTokenResponse,\n AuthSessionResponse,\n} from \"./data-contracts\";\nimport { HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class SecurityApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getCurrentAuthSession = (params: RequestParams = {}) =>\n this.request<AuthSessionResponse, ApiExceptionResponse>({\n path: `/api/security/get-current-auth-session`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n createAuthSession = (params: RequestParams = {}) =>\n this.request<any, void | ApiExceptionResponse>({\n path: `/api/security/create-auth-session`,\n method: \"POST\",\n secure: true,\n ...params,\n });\n deleteAuthSession = (params: RequestParams = {}) =>\n this.request<any, void | ApiExceptionResponse>({\n path: `/api/security/delete-auth-session`,\n method: \"POST\",\n secure: true,\n ...params,\n });\n getAuthCsrfToken = (params: RequestParams = {}) =>\n this.request<AuthCsrfTokenResponse, ApiExceptionResponse>({\n path: `/api/security/get-auth-csrf-token`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n getRealmRoles = (params: RequestParams = {}) =>\n this.request<string[], any>({\n path: `/api/security/get-realm-roles`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","import { Component, inject, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { ButtonModule } from 'primeng/button';\nimport { FormsModule } from '@angular/forms';\nimport { MsgService } from '../../services/msg.service';\nimport { PutSecurityDto } from '../../dtos/put-security.dto';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { ContentType, HttpClient } from '../../api/http-client';\nimport { SecurityDto } from '../../dtos/security.dto';\nimport { SecurityApi } from '../../api/security.api';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/security.en.json';\nimport ru from './l10n/security.ru.json';\n\n@Component({\n selector: 'security',\n template: `\n <div class=\"flex flex-col md:flex-row gap-8\">\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">\n {{ 'securityComponent.security' | translate }}\n </div>\n @for (item of securityData; track item.name) {\n <div class=\"flex flex-col gap-2\">\n <label htmlFor=\"oip-security-multiselect-{{ item.name }}\">\n {{ item.name }}\n <span class=\"pi pi-question-circle\" pTooltip=\"{{ item.description }}\" tooltipPosition=\"right\"></span>\n </label>\n <p-multiSelect\n id=\"oip-security-multiselect-{{ item.name }}\"\n placeholder=\"{{ 'securityComponent.selectRoles' | translate }}\"\n [maxSelectedLabels]=\"10\"\n [options]=\"roles\"\n [(ngModel)]=\"item.roles\" />\n </div>\n }\n <div class=\"flex justify-content-end flex-wrap\">\n <p-button\n icon=\"pi pi-save\"\n id=\"oip-security-save-button\"\n label=\"{{ 'securityComponent.save' | translate }}\"\n (click)=\"saveClick()\"\n (keydown)=\"saveKeyDown($event)\" />\n </div>\n </div>\n </div>\n </div>\n `,\n imports: [MultiSelectModule, TooltipModule, FormsModule, ButtonModule, TranslatePipe],\n standalone: true\n})\nexport class SecurityComponent implements OnChanges, OnInit, OnDestroy {\n private readonly translations = provideTranslations({ en, ru });\n\n private readonly msgService = inject(MsgService);\n private readonly translateService = inject(TranslateService);\n private readonly httpClient = inject(HttpClient);\n private readonly securityApi = inject(SecurityApi);\n private securityLoadToken = 0;\n\n securityData: SecurityDto[] = [];\n @Input() id?: number;\n @Input() controller?: string;\n roles: string[] = [];\n\n ngOnDestroy(): void {\n // on destroy\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['id'] || changes['controller']) {\n void this.loadSecurity();\n }\n }\n\n ngOnInit(): void {\n this.securityApi.getRealmRoles().then(\n (result) => {\n this.roles = result;\n },\n (error) => this.msgService.error(error)\n );\n }\n\n saveClick() {\n if (this.id == null) {\n this.msgService.error('Module id not passed!');\n return;\n }\n if (!this.controller) {\n this.msgService.error('Controller not passed!');\n return;\n }\n\n const request: PutSecurityDto = {\n id: this.id,\n securities: this.securityData\n };\n this.saveSecurity(this.controller, request).then(\n (result) => {\n this.msgService.success(this.translateService.instant('securityComponent.savedSecurity'));\n },\n (error) => this.msgService.error(error)\n );\n }\n\n saveKeyDown($event: KeyboardEvent) {\n if ($event.key === 'Enter' || $event.key === 'Space') {\n this.saveClick();\n }\n }\n\n private async loadSecurity(): Promise<void> {\n const loadToken = ++this.securityLoadToken;\n const controller = this.controller;\n const id = this.id;\n\n this.securityData = [];\n\n if (!controller || id == null) {\n return;\n }\n\n try {\n const result = await this.getSecurity(controller);\n if (loadToken === this.securityLoadToken) {\n this.securityData = result;\n }\n } catch (error) {\n if (loadToken === this.securityLoadToken) {\n this.msgService.error(error);\n }\n }\n }\n\n private getSecurity(controller: string) {\n return this.httpClient.request<SecurityDto[]>({\n path: `/api/${controller}/get-security`,\n method: 'GET',\n secure: true,\n format: 'json'\n });\n }\n\n private saveSecurity(controller: string, request: PutSecurityDto) {\n return this.httpClient.request<unknown>({\n path: `/api/${controller}/put-security`,\n method: 'PUT',\n body: request,\n secure: true,\n type: ContentType.Json\n });\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport type { PaletteDesignToken, Preset } from '@primeuix/themes/types';\n\nexport interface AppThemePreset {\n id: string;\n label?: string;\n preset: Preset;\n primaryColors?: Record<string, PaletteDesignToken | undefined>;\n surfaceColors?: Record<string, PaletteDesignToken | undefined>;\n}\n\nexport type AppThemePresetMergeMode = 'mergeWithDefaults' | 'replaceDefaults';\n\nexport const APP_THEME_PRESETS = new InjectionToken<ReadonlyArray<AppThemePreset>>('APP_THEME_PRESETS', {\n factory: () => []\n});\n\nexport const APP_THEME_PRESETS_MERGE_MODE = new InjectionToken<AppThemePresetMergeMode>(\n 'APP_THEME_PRESETS_MERGE_MODE',\n {\n factory: () => 'mergeWithDefaults'\n }\n);\n","import { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { Component, computed, inject, PLATFORM_ID, signal, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { $t, updatePreset, updateSurfacePalette } from '@primeng/themes';\nimport type { PaletteDesignToken, Preset } from '@primeuix/themes/types';\nimport Aura from '@primeng/themes/aura';\nimport Lara from '@primeng/themes/lara';\nimport Nora from '@primeng/themes/nora';\nimport { PrimeNG } from 'primeng/config';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { APP_THEME_PRESETS, APP_THEME_PRESETS_MERGE_MODE, AppThemePreset } from '../../services/theme-presets.token';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/app-configurator.en.json';\nimport ru from './l10n/app-configurator.ru.json';\n\nconst DEFAULT_THEME_PRESETS: ReadonlyArray<AppThemePreset> = [\n { id: 'Aura', label: 'Aura', preset: Aura as Preset },\n { id: 'Lara', label: 'Lara', preset: Lara as Preset },\n { id: 'Nora', label: 'Nora', preset: Nora as Preset }\n];\n\nconst PRIMARY_COLORS = [\n 'emerald',\n 'green',\n 'lime',\n 'orange',\n 'amber',\n 'yellow',\n 'teal',\n 'cyan',\n 'sky',\n 'blue',\n 'indigo',\n 'violet',\n 'purple',\n 'fuchsia',\n 'pink',\n 'rose'\n] as const;\n\ndeclare type SurfacesType = {\n name?: string;\n palette?: PaletteDesignToken;\n};\n\n@Component({\n selector: 'app-configurator',\n standalone: true,\n imports: [CommonModule, FormsModule, SelectButtonModule, TranslatePipe],\n template: `\n <div class=\"flex flex-col gap-4\">\n <div>\n <span class=\"text-sm text-muted-color font-semibold\">{{ 'app-configurator.primary' | translate }}</span>\n <div class=\"pt-2 flex gap-2 flex-wrap justify-start\">\n @for (primaryColor of primaryColors(); track primaryColor.name) {\n <button\n class=\"border-none w-5 h-5 rounded-full p-0 cursor-pointer outline-none outline-offset-1\"\n id=\"oip-app-configurator-primary-color-{{ primaryColor.name }}\"\n type=\"button\"\n [ngClass]=\"{\n 'outline-primary': primaryColor.name === selectedPrimaryColor()\n }\"\n [style]=\"{\n 'background-color': primaryColor?.name === 'noir' ? 'var(--text-color)' : primaryColor?.palette?.['500']\n }\"\n [title]=\"primaryColor.name\"\n (click)=\"updateColors($event, 'primary', primaryColor)\"></button>\n }\n </div>\n </div>\n <div>\n <span class=\"text-sm text-muted-color font-semibold\">{{ 'app-configurator.surface' | translate }}</span>\n <div class=\"pt-2 flex gap-2 flex-wrap justify-start\">\n @for (surface of surfaceColors(); track surface.name) {\n <button\n class=\"border-none w-5 h-5 rounded-full p-0 cursor-pointer outline-none outline-offset-1\"\n id=\"oip-app-configurator-surface-color-{{ surface.name }}\"\n type=\"button\"\n [ngClass]=\"{\n 'outline-primary': selectedSurfaceColor()\n ? selectedSurfaceColor() === surface.name\n : layoutService.layoutConfig().darkTheme\n ? surface.name === 'zinc'\n : surface.name === 'slate'\n }\"\n [style]=\"{\n 'background-color': surface?.name === 'noir' ? 'var(--text-color)' : surface?.palette?.['500']\n }\"\n [title]=\"surface.name\"\n (click)=\"updateColors($event, 'surface', surface)\"></button>\n }\n </div>\n </div>\n <div class=\"flex flex-col gap-2\">\n <span class=\"text-sm text-muted-color font-semibold\">{{ 'app-configurator.presets' | translate }}</span>\n <p-selectButton\n id=\"oip-app-configurator-preset-select-button\"\n optionLabel=\"label\"\n optionValue=\"value\"\n size=\"small\"\n [allowEmpty]=\"false\"\n [ngModel]=\"selectedPreset()\"\n [options]=\"presets\"\n (ngModelChange)=\"onPresetChange($event)\" />\n </div>\n @if (showMenuModeButton()) {\n <div class=\"flex flex-col gap-2\">\n <span class=\"text-sm text-muted-color font-semibold\">{{ 'app-configurator.menuMode' | translate }}</span>\n <p-selectButton\n id=\"oip-app-configurator-menu-mode-select-button\"\n size=\"small\"\n [allowEmpty]=\"false\"\n [ngModel]=\"menuMode()\"\n [options]=\"menuModeOptions\"\n (ngModelChange)=\"onMenuModeChange($event)\">\n <ng-template pTemplate=\"item\" let-item>\n {{ item.label | translate }}\n </ng-template>\n </p-selectButton>\n </div>\n }\n </div>\n `,\n host: {\n class:\n 'hidden absolute top-[3.25rem] right-0 w-72 p-4 bg-surface-0 dark:bg-surface-900 border border-surface rounded-border origin-top shadow-[0px_3px_5px_rgba(0,0,0,0.02),0px_0px_2px_rgba(0,0,0,0.05),0px_1px_4px_rgba(0,0,0,0.08)]'\n }\n})\nexport class AppConfiguratorComponent implements OnInit {\n private readonly translations = provideTranslations({ en, ru });\n\n router = inject(Router);\n\n config: PrimeNG = inject(PrimeNG);\n\n layoutService: LayoutService = inject(LayoutService);\n\n platformId = inject(PLATFORM_ID);\n\n primeng = inject(PrimeNG);\n\n private readonly injectedThemePresets = inject(APP_THEME_PRESETS);\n private readonly themePresetMergeMode = inject(APP_THEME_PRESETS_MERGE_MODE);\n\n private readonly themePresets = this.getThemePresets();\n\n private readonly themePresetsMap = new Map(this.themePresets.map((theme) => [theme.id, theme]));\n\n private readonly defaultThemePreset = this.themePresets[0] ?? DEFAULT_THEME_PRESETS[0];\n\n private readonly fallbackPrimaryColors = ((\n DEFAULT_THEME_PRESETS[0].preset as { primitive?: Record<string, PaletteDesignToken> }\n ).primitive ?? {}) as Record<string, PaletteDesignToken>;\n\n presets = this.themePresets.map((theme) => ({ label: theme.label ?? theme.id, value: theme.id }));\n\n showMenuModeButton = signal(!this.router.url.includes('auth'));\n\n menuModeOptions = [\n { label: 'app-configurator.menuModeStatic', value: 'static' },\n { label: 'app-configurator.menuModeOverlay', value: 'overlay' }\n ];\n\n ngOnInit() {\n if (isPlatformBrowser(this.platformId)) {\n const presetId = this.ensureValidThemeId(this.layoutService.layoutConfig().preset);\n this.onPresetChange(presetId);\n }\n }\n\n surfaces: SurfacesType[] = [\n {\n name: 'slate',\n palette: {\n 0: '#ffffff',\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#0f172a',\n 950: '#020617'\n }\n },\n {\n name: 'gray',\n palette: {\n 0: '#ffffff',\n 50: '#f9fafb',\n 100: '#f3f4f6',\n 200: '#e5e7eb',\n 300: '#d1d5db',\n 400: '#9ca3af',\n 500: '#6b7280',\n 600: '#4b5563',\n 700: '#374151',\n 800: '#1f2937',\n 900: '#111827',\n 950: '#030712'\n }\n },\n {\n name: 'zinc',\n palette: {\n 0: '#ffffff',\n 50: '#fafafa',\n 100: '#f4f4f5',\n 200: '#e4e4e7',\n 300: '#d4d4d8',\n 400: '#a1a1aa',\n 500: '#71717a',\n 600: '#52525b',\n 700: '#3f3f46',\n 800: '#27272a',\n 900: '#18181b',\n 950: '#09090b'\n }\n },\n {\n name: 'neutral',\n palette: {\n 0: '#ffffff',\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#e5e5e5',\n 300: '#d4d4d4',\n 400: '#a3a3a3',\n 500: '#737373',\n 600: '#525252',\n 700: '#404040',\n 800: '#262626',\n 900: '#171717',\n 950: '#0a0a0a'\n }\n },\n {\n name: 'stone',\n palette: {\n 0: '#ffffff',\n 50: '#fafaf9',\n 100: '#f5f5f4',\n 200: '#e7e5e4',\n 300: '#d6d3d1',\n 400: '#a8a29e',\n 500: '#78716c',\n 600: '#57534e',\n 700: '#44403c',\n 800: '#292524',\n 900: '#1c1917',\n 950: '#0c0a09'\n }\n },\n {\n name: 'soho',\n palette: {\n 0: '#ffffff',\n 50: '#ececec',\n 100: '#dedfdf',\n 200: '#c4c4c6',\n 300: '#adaeb0',\n 400: '#97979b',\n 500: '#7f8084',\n 600: '#6a6b70',\n 700: '#55565b',\n 800: '#3f4046',\n 900: '#2c2c34',\n 950: '#16161d'\n }\n },\n {\n name: 'viva',\n palette: {\n 0: '#ffffff',\n 50: '#f3f3f3',\n 100: '#e7e7e8',\n 200: '#cfd0d0',\n 300: '#b7b8b9',\n 400: '#9fa1a1',\n 500: '#87898a',\n 600: '#6e7173',\n 700: '#565a5b',\n 800: '#3e4244',\n 900: '#262b2c',\n 950: '#0e1315'\n }\n },\n {\n name: 'ocean',\n palette: {\n 0: '#ffffff',\n 50: '#fbfcfc',\n 100: '#F7F9F8',\n 200: '#EFF3F2',\n 300: '#DADEDD',\n 400: '#B1B7B6',\n 500: '#828787',\n 600: '#5F7274',\n 700: '#415B61',\n 800: '#29444E',\n 900: '#183240',\n 950: '#0c1920'\n }\n }\n ];\n\n selectedPrimaryColor = computed(() => {\n return this.layoutService.layoutConfig().primary;\n });\n\n selectedSurfaceColor = computed(() => this.layoutService.layoutConfig().surface);\n\n selectedPreset = computed(() => this.layoutService.layoutConfig().preset);\n\n menuMode = computed(() => this.layoutService.layoutConfig().menuMode);\n\n primaryColors = computed<SurfacesType[]>(() => {\n const activeThemePreset = this.getThemeById(this.layoutService.layoutConfig().preset);\n return this.getPrimaryColorOptions(activeThemePreset);\n });\n\n surfaceColors = computed<SurfacesType[]>(() => {\n const activeThemePreset = this.getThemeById(this.layoutService.layoutConfig().preset);\n return this.getSurfaceColorOptions(activeThemePreset);\n });\n\n getPresetExt() {\n const color: SurfacesType = this.primaryColors().find((c) => c.name === this.selectedPrimaryColor()) || {};\n const preset = this.getThemeById(this.layoutService.layoutConfig().preset).id;\n\n if (color.name === 'noir') {\n return {\n semantic: {\n primary: {\n 50: '{surface.50}',\n 100: '{surface.100}',\n 200: '{surface.200}',\n 300: '{surface.300}',\n 400: '{surface.400}',\n 500: '{surface.500}',\n 600: '{surface.600}',\n 700: '{surface.700}',\n 800: '{surface.800}',\n 900: '{surface.900}',\n 950: '{surface.950}'\n },\n colorScheme: {\n light: {\n primary: {\n color: '{primary.950}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.800}',\n activeColor: '{primary.700}'\n },\n highlight: {\n background: '{primary.950}',\n focusBackground: '{primary.700}',\n color: '#ffffff',\n focusColor: '#ffffff'\n }\n },\n dark: {\n primary: {\n color: '{primary.50}',\n contrastColor: '{primary.950}',\n hoverColor: '{primary.200}',\n activeColor: '{primary.300}'\n },\n highlight: {\n background: '{primary.50}',\n focusBackground: '{primary.300}',\n color: '{primary.950}',\n focusColor: '{primary.950}'\n }\n }\n }\n }\n };\n } else if (preset === 'Nora') {\n return {\n semantic: {\n primary: color.palette,\n colorScheme: {\n light: {\n primary: {\n color: '{primary.600}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.700}',\n activeColor: '{primary.800}'\n },\n highlight: {\n background: '{primary.600}',\n focusBackground: '{primary.700}',\n color: '#ffffff',\n focusColor: '#ffffff'\n }\n },\n dark: {\n primary: {\n color: '{primary.500}',\n contrastColor: '{surface.900}',\n hoverColor: '{primary.400}',\n activeColor: '{primary.300}'\n },\n highlight: {\n background: '{primary.500}',\n focusBackground: '{primary.400}',\n color: '{surface.900}',\n focusColor: '{surface.900}'\n }\n }\n }\n }\n };\n } else {\n return {\n semantic: {\n primary: color.palette,\n colorScheme: {\n light: {\n primary: {\n color: '{primary.500}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.600}',\n activeColor: '{primary.700}'\n },\n highlight: {\n background: '{primary.50}',\n focusBackground: '{primary.100}',\n color: '{primary.700}',\n focusColor: '{primary.800}'\n }\n },\n dark: {\n primary: {\n color: '{primary.400}',\n contrastColor: '{surface.900}',\n hoverColor: '{primary.300}',\n activeColor: '{primary.200}'\n },\n highlight: {\n background: 'color-mix(in srgb, {primary.400}, transparent 84%)',\n focusBackground: 'color-mix(in srgb, {primary.400}, transparent 76%)',\n color: 'rgba(255,255,255,.87)',\n focusColor: 'rgba(255,255,255,.87)'\n }\n }\n }\n }\n };\n }\n }\n\n private getThemePresets(): AppThemePreset[] {\n const source = this.themePresetMergeMode === 'replaceDefaults' ? [] : [...DEFAULT_THEME_PRESETS];\n const result = [...source];\n for (const theme of this.injectedThemePresets ?? []) {\n if (!theme?.id || !theme?.preset) {\n continue;\n }\n const index = result.findIndex((item) => item.id === theme.id);\n if (index >= 0) {\n result[index] = theme;\n } else {\n result.push(theme);\n }\n }\n return result;\n }\n\n private getThemeById(themeId?: string): AppThemePreset {\n return this.themePresetsMap.get(themeId ?? '') ?? this.defaultThemePreset;\n }\n\n private getPrimaryColorOptions(activeThemePreset: AppThemePreset): SurfacesType[] {\n if (activeThemePreset.primaryColors) {\n return Object.entries(activeThemePreset.primaryColors)\n .filter((entry): entry is [string, PaletteDesignToken] => Boolean(entry[1]))\n .map(([name, palette]) => ({ name, palette }));\n }\n\n const presetPalette =\n (activeThemePreset.preset as { primitive?: Record<string, PaletteDesignToken> }).primitive ?? {};\n const palettes: SurfacesType[] = [{ name: 'noir', palette: {} }];\n\n PRIMARY_COLORS.forEach((color) => {\n palettes.push({\n name: color,\n palette: presetPalette[color] ?? this.fallbackPrimaryColors[color]\n });\n });\n\n return palettes;\n }\n\n private getSurfaceColorOptions(activeThemePreset: AppThemePreset): SurfacesType[] {\n if (activeThemePreset.surfaceColors) {\n return Object.entries(activeThemePreset.surfaceColors)\n .filter((entry): entry is [string, PaletteDesignToken] => Boolean(entry[1]))\n .map(([name, palette]) => ({ name, palette }));\n }\n\n return this.surfaces;\n }\n\n private ensureValidThemeId(themeId?: string): string {\n if (themeId && this.themePresetsMap.has(themeId)) {\n return themeId;\n }\n\n if (themeId && isPlatformBrowser(this.platformId)) {\n console.warn(`[AppConfigurator] Unknown theme preset \"${themeId}\", fallback to \"${this.defaultThemePreset.id}\".`);\n }\n\n return this.defaultThemePreset.id;\n }\n\n updateColors(event: MouseEvent, type: string, color: SurfacesType) {\n if (type === 'primary') {\n this.layoutService.layoutConfig.update((state) => ({\n ...state,\n primary: color.name\n }));\n } else if (type === 'surface') {\n this.layoutService.layoutConfig.update((state) => ({\n ...state,\n surface: color.name\n }));\n }\n this.applyTheme(type, color);\n\n event.stopPropagation();\n }\n\n applyTheme(type: string, color: SurfacesType) {\n if (type === 'primary') {\n updatePreset(this.getPresetExt());\n } else if (type === 'surface') {\n updateSurfacePalette(color.palette);\n }\n }\n\n onPresetChange(event: string) {\n const nextThemeId = this.ensureValidThemeId(event);\n const nextTheme = this.getThemeById(nextThemeId);\n const primaryColors = this.getPrimaryColorOptions(nextTheme);\n const surfaceColors = this.getSurfaceColorOptions(nextTheme);\n\n this.layoutService.layoutConfig.update((state) => ({\n ...state,\n preset: nextThemeId,\n primary: primaryColors.some((color) => color.name === state.primary)\n ? state.primary\n : (primaryColors[0]?.name ?? state.primary),\n surface:\n nextTheme.surfaceColors && !surfaceColors.some((color) => color.name === state.surface)\n ? (surfaceColors[0]?.name ?? state.surface)\n : state.surface\n }));\n const preset = nextTheme.preset;\n const surfacePalette = this.surfaceColors().find((s) => s.name === this.selectedSurfaceColor())?.palette;\n $t().preset(preset).preset(this.getPresetExt()).surfacePalette(surfacePalette).use({ useDefaultOptions: true });\n }\n\n onMenuModeChange(event: string) {\n this.layoutService.layoutConfig.update((prev) => ({\n ...prev,\n menuMode: event\n }));\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\nimport {\n ApiExceptionResponse,\n GetUserPhotoByIdParams,\n PostUserPhotoPayload,\n UserSettingsDto,\n} from \"./users-data-contracts\";\n\n@Injectable()\nexport class UserProfileApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getUserPhoto = (params: RequestParams = {}) =>\n this.request<Blob, ApiExceptionResponse>({\n path: `/api/user-profile/get-user-photo`,\n method: \"GET\",\n secure: true,\n format: \"blob\",\n ...params,\n });\n getUserPhotoById = (\n { userId, ...query }: GetUserPhotoByIdParams,\n params: RequestParams = {},\n ) =>\n this.request<Blob, ApiExceptionResponse>({\n path: `/api/user-profile/get-user-photo-by-id/${userId}`,\n method: \"GET\",\n secure: true,\n format: \"blob\",\n ...params,\n });\n postUserPhoto = (data: PostUserPhotoPayload, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/user-profile/post-user-photo`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.FormData,\n ...params,\n });\n deleteUserPhoto = (params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/user-profile/delete-user-photo`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n getSettings = (params: RequestParams = {}) =>\n this.request<UserSettingsDto, ApiExceptionResponse>({\n path: `/api/user-profile/get-settings`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n setSettings = (data: UserSettingsDto, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/user-profile/set-settings`,\n method: \"PUT\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { SecurityService } from './security.service';\nimport { distinctUntilChanged, filter, map } from 'rxjs/operators';\nimport { UserProfileApi } from '../api/user-profile.api';\nimport { MsgService } from './msg.service';\nimport { TranslateService } from '@ngx-translate/core';\n\n/**\n * UserService is responsible for retrieving and handling user-related data,\n * including the user's photo and short label for avatar display.\n */\n@Injectable()\nexport class UserService {\n private readonly securityService = inject(SecurityService);\n private readonly userProfileApi = inject(UserProfileApi);\n private readonly msgService = inject(MsgService);\n private readonly translateService = inject(TranslateService);\n private requestedPhotoKey: string | null = null;\n\n constructor() {\n this.securityService\n .getCurrentUser$()\n .pipe(\n map((user) => this.getCurrentUserPhotoKey(user)),\n filter((photoKey) => !!photoKey),\n distinctUntilChanged()\n )\n .subscribe(() => {\n this.getUserPhoto();\n });\n }\n\n /**\n * Stores the user's photo as a data URL or binary blob, depending on how it's processed.\n */\n photo: any = null;\n\n /**\n * Indicates whether the user photo has finished loading.\n */\n photoLoaded: boolean = false;\n\n /**\n * Returns a short label composed of the user's initials.\n * Typically used for avatar display when a photo is unavailable.\n */\n get shortLabel(): string {\n const data = this.securityService.getCurrentUser();\n const givenNameInitial = data?.given_name?.trim()?.[0];\n const familyNameInitial = data?.family_name?.trim()?.[0];\n const displayNameInitials = this.getInitials(\n data?.displayName ?? data?.name ?? data?.userName ?? data?.preferred_username\n );\n\n return `${givenNameInitial ?? ''}${familyNameInitial ?? ''}`.toUpperCase() || displayNameInitials;\n }\n\n get userName(): string {\n const data = this.securityService.getCurrentUser();\n return (\n [data?.given_name, data?.family_name].filter(Boolean).join(' ') ||\n data?.displayName ||\n data?.name ||\n data?.userName ||\n data?.preferred_username ||\n data?.email ||\n ''\n );\n }\n\n /**\n * Initiates an HTTP request to fetch the current user's photo,\n * and updates the `photo` and `photoLoaded` properties accordingly.\n */\n getUserPhoto(): void {\n const photoKey = this.getCurrentUserPhotoKey(this.securityService.getCurrentUser());\n\n if (!photoKey) {\n return;\n }\n\n if (this.requestedPhotoKey === photoKey && (this.photoLoaded || this.photo)) {\n return;\n }\n\n this.requestedPhotoKey = photoKey;\n\n this.userProfileApi.getUserPhoto({ format: 'blob' }).then(\n (data) => {\n this.createImageFromBlob(data as Blob);\n this.photoLoaded = true;\n },\n (error) => {\n // A 404 just means the user hasn't uploaded a photo yet (e.g. on first login) —\n // that's an expected state, not a failure, so fall back to initials silently.\n if ((error as { status?: number })?.status !== 404) {\n this.msgService.errorFromException(error, this.translateService.instant('profileComponent.failedToLoadPhoto'));\n }\n this.photoLoaded = false;\n }\n );\n }\n\n refreshUserPhoto(): void {\n this.requestedPhotoKey = null;\n this.photo = null;\n this.photoLoaded = false;\n this.getUserPhoto();\n }\n\n /**\n * Converts a Blob image into a Base64 data URL and stores it in the `photo` property.\n *\n * @param image - The image Blob to be converted.\n */\n private createImageFromBlob(image: Blob): void {\n const reader = new FileReader();\n reader.addEventListener(\n 'load',\n () => {\n this.photo = reader.result;\n },\n false\n );\n if (image) {\n reader.readAsDataURL(image);\n }\n }\n\n private getInitials(value?: string): string {\n return (\n value\n ?.trim()\n .split(/\\s+/)\n .filter(Boolean)\n .slice(0, 2)\n .map((part) => part[0])\n .join('')\n .toUpperCase() ?? ''\n );\n }\n\n private getCurrentUserPhotoKey(user: any): string | null {\n return user?.sub || user?.userName || user?.preferred_username || user?.displayName || user?.name || null;\n }\n}\n","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'logo',\r\n standalone: true,\r\n template: `\r\n <svg\r\n viewBox=\"0.8516 1.7159 60.0074 64.7142\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n [attr.height]=\"height + 'px'\"\r\n [attr.width]=\"width + 'px'\">\r\n <path\r\n class=\"primary-logo-color\"\r\n d=\"M -130.45 -104.78 C -130.45 -105.9 -130.43 -107.01 -130.45 -108.13 C -130.49 -108.52 -130.28 -108.9 -129.92 -109.07 C -125.87 -111.4 -121.82 -113.74 -117.77 -116.08 C -115.7 -117.26 -113.63 -118.45 -111.58 -119.67 C -111.26 -119.89 -110.83 -119.89 -110.51 -119.67 C -101.66 -114.53 -92.787 -109.41 -83.915 -104.29 C -83.752 -104.2 -83.479 -104.16 -83.475 -103.94 C -83.472 -103.72 -83.766 -103.65 -83.947 -103.54 C -86.326 -102.16 -88.716 -100.79 -91.092 -99.39 C -91.377 -99.18 -91.761 -99.18 -92.046 -99.39 C -98.211 -102.98 -104.38 -106.55 -110.56 -110.12 C -110.85 -110.33 -111.23 -110.33 -111.52 -110.12 C -114.88 -108.16 -118.25 -106.22 -121.63 -104.28 C -122.01 -104.11 -122.24 -103.71 -122.2 -103.3 C -122.18 -101.11 -122.2 -98.922 -122.2 -96.736 C -122.19 -95.98 -122.21 -95.98 -122.84 -96.335 C -125.2 -97.7 -127.57 -99.07 -129.93 -100.42 C -130.27 -100.57 -130.49 -100.92 -130.46 -101.3 C -130.43 -102.46 -130.45 -103.62 -130.45 -104.78 Z\"\r\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\r\n <path\r\n class=\"primary-logo-color\"\r\n d=\"M -70.504 -100.94 L -70.504 -90.438 C -70.447 -89.98 -70.692 -89.537 -71.11 -89.342 C -78.942 -84.839 -86.769 -80.325 -94.592 -75.8 C -95.635 -75.2 -96.684 -74.612 -97.713 -73.988 C -98.17 -73.708 -98.255 -73.846 -98.255 -74.314 L -98.255 -82.785 C -98.268 -83.116 -98.07 -83.419 -97.762 -83.541 C -92.003 -86.86 -86.269 -90.236 -80.468 -93.47 C -79.181 -94.179 -78.667 -94.934 -78.731 -96.441 C -78.869 -99.76 -78.791 -103.09 -78.755 -106.42 C -78.694 -107 -79.02 -107.56 -79.56 -107.8 C -81.436 -108.83 -83.28 -109.93 -85.138 -110.99 C -85.734 -111.34 -85.734 -111.34 -85.113 -111.7 C -82.748 -113.07 -80.379 -114.43 -78.021 -115.82 C -77.707 -116.05 -77.283 -116.06 -76.957 -115.84 C -74.962 -114.66 -72.953 -113.5 -70.929 -112.37 C -70.62 -112.19 -70.456 -111.84 -70.521 -111.49 C -70.514 -107.99 -70.508 -104.48 -70.504 -100.94 Z\"\r\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\r\n <path\r\n class=\"primary-logo-color\"\r\n d=\"M -108.68 -85.743 L -108.68 -75.169 C -108.72 -74.754 -108.5 -74.358 -108.12 -74.179 C -104.77 -72.267 -101.44 -70.339 -98.117 -68.396 C -97.762 -68.141 -97.284 -68.141 -96.929 -68.396 C -95.028 -69.527 -93.096 -70.598 -91.195 -71.725 C -90.667 -72.041 -90.581 -71.892 -90.581 -71.371 C -90.596 -68.591 -90.596 -65.811 -90.581 -63.03 C -90.551 -62.7 -90.729 -62.386 -91.028 -62.243 C -93.083 -61.073 -95.13 -59.891 -97.17 -58.697 C -97.436 -58.537 -97.775 -58.569 -98.007 -58.775 C -102.74 -61.517 -107.47 -64.254 -112.22 -66.984 C -113.63 -67.796 -115.01 -68.615 -116.42 -69.406 C -116.77 -69.561 -116.97 -69.913 -116.94 -70.286 C -116.93 -80.555 -116.93 -90.823 -116.94 -101.09 C -116.94 -101.63 -116.86 -101.75 -116.35 -101.44 C -113.98 -100.05 -111.59 -98.667 -109.19 -97.303 C -108.84 -97.135 -108.62 -96.76 -108.66 -96.367 C -108.68 -92.833 -108.69 -89.291 -108.68 -85.743 Z\"\r\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\r\n <path\r\n class=\"secondary-logo-color\"\r\n d=\"M -122.18 -85.807 L -122.18 -82.129 C -122.18 -81.637 -122.34 -81.615 -122.72 -81.839 C -125.16 -83.257 -127.6 -84.667 -130.05 -86.069 C -130.35 -86.219 -130.53 -86.535 -130.5 -86.867 L -130.5 -94.09 C -130.5 -94.64 -130.34 -94.679 -129.89 -94.417 C -127.49 -92.998 -125.09 -91.607 -122.67 -90.243 C -122.35 -90.103 -122.15 -89.772 -122.18 -89.42 C -122.21 -88.214 -122.18 -87.012 -122.18 -85.807 Z M -82.688 -119.15 C -83.954 -118.41 -85.17 -117.7 -86.365 -117.02 C -87.748 -116.22 -89.138 -115.44 -90.514 -114.63 C -90.761 -114.45 -91.093 -114.45 -91.34 -114.63 C -93.432 -115.86 -95.535 -117.07 -97.649 -118.27 C -98.053 -118.5 -98.191 -118.63 -97.67 -118.93 C -95.216 -120.32 -92.776 -121.74 -90.337 -123.15 C -90.134 -123.33 -89.845 -123.36 -89.61 -123.23 L -82.918 -119.33 C -82.862 -119.28 -82.812 -119.24 -82.688 -119.15 Z M -85.365 -65.616 L -85.365 -72.062 L -85.365 -74.622 C -85.403 -74.928 -85.24 -75.223 -84.961 -75.353 C -82.886 -76.534 -80.83 -77.736 -78.77 -78.931 C -78.174 -79.286 -78.135 -79.257 -78.135 -78.576 L -78.135 -70.303 C -78.135 -69.991 -78.135 -69.711 -78.468 -69.52 C -80.656 -68.275 -82.833 -67.013 -85.014 -65.761 C -85.127 -65.704 -85.245 -65.655 -85.365 -65.616 Z\"\r\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\r\n </svg>\r\n `,\r\n styles: [\r\n `\r\n .primary-logo-color {\r\n fill: var(--primary-color);\r\n }\r\n\r\n .secondary-logo-color {\r\n fill: var(--p-primary-600);\r\n }\r\n `\r\n ]\r\n})\r\nexport class LogoComponent {\r\n @Input() width: number;\r\n @Input() height: number;\r\n}\r\n","import { Injectable, Type, InjectionToken, inject } from '@angular/core';\r\nimport { LogoComponent } from '../components/logo/logo.component';\r\nimport { Provider } from '@angular/core';\r\n\r\nexport const LOGO_COMPONENT_TOKEN = new InjectionToken<Type<any>>('LOGO_COMPONENT_TOKEN');\r\n\r\nexport function provideLogoComponent(component: Type<any>): Provider {\r\n return {\r\n provide: LOGO_COMPONENT_TOKEN,\r\n useValue: component\r\n };\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LogoService {\r\n private customLogoComponent = inject(LOGO_COMPONENT_TOKEN, { optional: true });\r\n\r\n getLogoComponent(): Type<any> {\r\n return this.customLogoComponent || LogoComponent;\r\n }\r\n}\r\n","import { inject, Injectable, InjectionToken, Provider } from '@angular/core';\n\n/**\n * Application information value. A function or a signal is read on every change detection,\n * so it can return a localized value.\n */\nexport type AppInfoValue = string | (() => string);\n\n/**\n * Application information displayed by the shell components.\n */\nexport interface AppInfo {\n /**\n * Application version, for example generated at build time from package.json.\n */\n version?: AppInfoValue;\n\n /**\n * Application name displayed in the footer.\n */\n footer?: AppInfoValue;\n\n /**\n * Application name displayed in the top bar.\n */\n title?: AppInfoValue;\n}\n\nexport const APP_INFO_TOKEN = new InjectionToken<AppInfo>('APP_INFO_TOKEN');\n\n/**\n * Provides application information instead of the `app-info.*` translation keys.\n */\nexport function provideAppInfo(appInfo: AppInfo): Provider {\n return {\n provide: APP_INFO_TOKEN,\n useValue: appInfo\n };\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AppInfoService {\n private appInfo = inject(APP_INFO_TOKEN, { optional: true });\n\n /**\n * Returns the provided version or null when it should be taken from translations.\n */\n getVersion(): string | null {\n return this.resolve(this.appInfo?.version);\n }\n\n /**\n * Returns the provided application name or null when it should be taken from translations.\n */\n getFooter(): string | null {\n return this.resolve(this.appInfo?.footer);\n }\n\n /**\n * Returns the provided application name or null when it should be taken from translations.\n */\n getTitle(): string | null {\n return this.resolve(this.appInfo?.title);\n }\n\n private resolve(value: AppInfoValue | undefined): string | null {\n return (typeof value === 'function' ? value() : value) || null;\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport { HttpClient, RequestParams } from \"./http-client\";\nimport {\n ApiExceptionResponse,\n GetNotificationByIdParams,\n GetNotificationByUserParams,\n MarkNotificationAsReadParams,\n UserNotificationCountResponse,\n UserNotificationDto,\n UserNotificationListResponse,\n} from \"./notification-data-contracts\";\n\n@Injectable()\nexport class NotificationApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getNotificationByUser = (\n query: GetNotificationByUserParams,\n params: RequestParams = {},\n ) =>\n this.request<UserNotificationListResponse, ApiExceptionResponse>({\n path: `/api/notification/get-notification-by-user`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n getNotificationCountByUser = (params: RequestParams = {}) =>\n this.request<UserNotificationCountResponse, ApiExceptionResponse>({\n path: `/api/notification/get-notification-count-by-user`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n markNotificationAsRead = (\n { id, ...query }: MarkNotificationAsReadParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/notification/mark-notification-as-read/${id}`,\n method: \"POST\",\n secure: true,\n ...params,\n });\n getNotificationById = (\n query: GetNotificationByIdParams,\n params: RequestParams = {},\n ) =>\n this.request<UserNotificationDto, ApiExceptionResponse>({\n path: `/api/notification/get-notification-by-id`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","import * as signalR from '@microsoft/signalr';\r\nimport { SecurityService } from './security.service';\r\nimport { inject, Injectable, signal } from '@angular/core';\r\nimport { MsgService } from './msg.service';\r\nimport { NotificationApi } from '../api/notification.api';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NotificationService {\r\n private connection: signalR.HubConnection;\r\n private securityService = inject(SecurityService);\r\n private msgService = inject(MsgService);\r\n private notificationApi = inject(NotificationApi);\r\n unreadNotificationCount = signal<number | undefined>(undefined);\r\n\r\n constructor() {\r\n this.connection = new signalR.HubConnectionBuilder()\r\n .withUrl('/hubs/notification', {\r\n withCredentials: true,\r\n skipNegotiation: true,\r\n transport: signalR.HttpTransportType.WebSockets\r\n })\r\n .configureLogging(signalR.LogLevel.Error)\r\n .build();\r\n\r\n this.connection.on('ReceiveNotification', (notification) => {\r\n const opt = {\r\n severity: notification.severity,\r\n summary: notification.subject,\r\n detail: notification.message,\r\n life: 0\r\n };\r\n this.msgService.add(opt);\r\n this.unreadNotificationCount.update((count) => (count ?? 0) + 1);\r\n });\r\n\r\n this.securityService.isAuthenticated().subscribe((authenticated) => {\r\n if (!authenticated) {\r\n this.unreadNotificationCount.set(undefined);\r\n if (this.connection.state !== signalR.HubConnectionState.Disconnected) {\r\n this.connection.stop();\r\n }\r\n return;\r\n }\r\n\r\n this.loadUnreadNotificationCount();\r\n\r\n if (this.connection.state === signalR.HubConnectionState.Disconnected) {\r\n this.connection.start().catch((error) => console.error('Failed to start notification connection', error));\r\n return;\r\n }\r\n\r\n this.connection.stop().then(() => {\r\n this.connection.start().catch((error) => console.error('Failed to restart notification connection', error));\r\n });\r\n });\r\n }\r\n\r\n loadUnreadNotificationCount(): void {\r\n this.notificationApi\r\n .getNotificationCountByUser()\r\n .then((response) => this.unreadNotificationCount.set(response.count ?? 0))\r\n .catch((error) => console.error('Failed to load notification count', error));\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\nimport { Component, ViewChild, computed, inject } from '@angular/core';\nimport { BadgeModule } from 'primeng/badge';\nimport { ButtonModule } from 'primeng/button';\nimport { PaginatorModule, PaginatorState } from 'primeng/paginator';\nimport { Popover } from 'primeng/popover';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { Tag } from 'primeng/tag';\nimport { Tooltip } from 'primeng/tooltip';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { NotificationApi } from '../../api/notification.api';\nimport { UserNotificationDto } from '../../api/notification-data-contracts';\nimport { MsgService } from '../../services/msg.service';\nimport { NotificationService } from '../../services/notification.service';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/user-notifications.en.json';\nimport ru from './l10n/user-notifications.ru.json';\n\n@Component({\n selector: 'app-user-notifications',\n standalone: true,\n imports: [\n CommonModule,\n BadgeModule,\n ButtonModule,\n PaginatorModule,\n Popover,\n ProgressSpinnerModule,\n Tag,\n Tooltip,\n TranslatePipe\n ],\n template: `\n <button\n class=\"layout-topbar-action relative\"\n id=\"oip-app-topbar-notification-button\"\n type=\"button\"\n [attr.aria-label]=\"'Notifications: ' + unreadNotificationCount()\"\n (click)=\"toggle($event)\">\n <i class=\"pi pi-bell\"></i>\n @if (unreadNotificationCount() > 0) {\n <p-badge\n class=\"absolute -top-1 -right-1\"\n severity=\"danger\"\n [badgeSize]=\"'small'\"\n [value]=\"unreadNotificationBadge()\" />\n }\n </button>\n\n <p-popover #popover styleClass=\"w-[min(92vw,34rem)]\">\n <div class=\"flex items-center justify-between gap-3 mb-4\">\n <div class=\"font-semibold text-lg\">\n {{ 'userNotifications.title' | translate }}\n </div>\n <p-button\n icon=\"pi pi-refresh\"\n rounded=\"true\"\n severity=\"secondary\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"loading\"\n [pTooltip]=\"'userNotifications.refresh' | translate\"\n (onClick)=\"loadNotifications()\"></p-button>\n </div>\n\n @if (loading && notifications.length === 0) {\n <div class=\"flex justify-center py-8\">\n <p-progressSpinner style=\"w-8 h-8\"></p-progressSpinner>\n </div>\n } @else if (notifications.length === 0) {\n <div class=\"text-center py-8 text-surface-500\">\n {{ 'userNotifications.empty' | translate }}\n </div>\n } @else {\n <div class=\"flex flex-col gap-3 max-h-[26rem] overflow-y-auto pr-1\">\n @for (notification of notifications; track notification.notificationUserId) {\n <div class=\"border border-surface-200 dark:border-surface-700 rounded-md p-3\">\n <div class=\"flex items-start justify-between gap-3\">\n <div class=\"min-w-0\">\n <div class=\"font-medium leading-snug break-words\">\n {{ notification.subject }}\n </div>\n <div class=\"text-xs text-surface-500 mt-1\">\n {{ notification.createdAt | date: 'dd.MM.yyyy HH:mm' }}\n </div>\n </div>\n @if (notification.importance) {\n <p-tag\n class=\"shrink-0\"\n [severity]=\"getImportanceSeverity(notification.importance)\"\n [value]=\"notification.importance\"></p-tag>\n }\n </div>\n\n <div class=\"text-sm text-surface-700 dark:text-surface-200 mt-3 whitespace-pre-line break-words\">\n {{ notification.message }}\n </div>\n\n <div class=\"flex justify-end mt-3\">\n <p-button\n icon=\"pi pi-check\"\n size=\"small\"\n [label]=\"'userNotifications.markAsRead' | translate\"\n [loading]=\"readingNotificationId === notification.notificationUserId\"\n (onClick)=\"markAsRead(notification)\"></p-button>\n </div>\n </div>\n }\n </div>\n\n <p-paginator\n class=\"mt-3\"\n [first]=\"skip\"\n [rows]=\"take\"\n [rowsPerPageOptions]=\"[5, 10, 20]\"\n [totalRecords]=\"totalCount\"\n (onPageChange)=\"onPageChange($event)\"></p-paginator>\n }\n </p-popover>\n `\n})\nexport class UserNotificationsComponent {\n private readonly translations = provideTranslations({ en, ru });\n\n @ViewChild('popover') private popover?: Popover;\n\n protected notifications: UserNotificationDto[] = [];\n protected totalCount = 0;\n protected skip = 0;\n protected take = 5;\n protected loading = false;\n protected readingNotificationId?: number;\n\n private readonly notificationApi = inject(NotificationApi);\n private readonly notificationService = inject(NotificationService);\n private readonly msgService = inject(MsgService);\n private readonly translateService = inject(TranslateService);\n\n protected readonly unreadNotificationCount = computed(() => this.notificationService.unreadNotificationCount() ?? 0);\n protected readonly unreadNotificationBadge = computed(() => {\n const count = this.unreadNotificationCount();\n\n return count > 99 ? '99+' : count.toString();\n });\n\n protected async toggle(event: Event): Promise<void> {\n this.popover?.toggle(event);\n await this.loadNotifications();\n }\n\n async loadNotifications(): Promise<void> {\n this.loading = true;\n\n try {\n const response = await this.notificationApi.getNotificationByUser({\n skip: this.skip,\n take: this.take,\n unreadOnly: true\n });\n\n this.notifications = response.notifications ?? [];\n this.totalCount = response.totalCount ?? 0;\n } catch (error) {\n this.msgService.error(error);\n } finally {\n this.loading = false;\n }\n }\n\n async onPageChange(event: PaginatorState): Promise<void> {\n this.skip = event.first ?? 0;\n this.take = event.rows ?? this.take;\n await this.loadNotifications();\n }\n\n async markAsRead(notification: UserNotificationDto): Promise<void> {\n if (!notification.notificationUserId) {\n return;\n }\n\n this.readingNotificationId = notification.notificationUserId;\n\n try {\n await this.notificationApi.markNotificationAsRead({ id: notification.notificationUserId });\n this.msgService.success(this.translateService.instant('userNotifications.markedAsRead'));\n this.notificationService.loadUnreadNotificationCount();\n\n if (this.notifications.length === 1 && this.skip > 0) {\n this.skip = Math.max(this.skip - this.take, 0);\n }\n\n await this.loadNotifications();\n } catch (error) {\n this.msgService.error(error);\n } finally {\n this.readingNotificationId = undefined;\n }\n }\n\n protected getImportanceSeverity(importance: string): 'success' | 'info' | 'warn' | 'danger' | 'secondary' {\n switch (importance) {\n case 'Critical':\n case 'High':\n return 'danger';\n case 'Medium':\n return 'warn';\n case 'Low':\n return 'info';\n default:\n return 'secondary';\n }\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n ApiExceptionResponse,\n ApplicationRegistryItemDto,\n DeleteApplicationRegistryItemParams,\n GetApplicationRegistryItemByCodeParams,\n UpdateApplicationRegistryItemParams,\n} from \"./applications-data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class ApplicationsApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getApplicationRegistryItems = (params: RequestParams = {}) =>\n this.request<ApplicationRegistryItemDto[], ApiExceptionResponse>({\n path: `/api/applications/get-application-registry-items`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n getApplicationRegistryItemByCode = (\n { code, ...query }: GetApplicationRegistryItemByCodeParams,\n params: RequestParams = {},\n ) =>\n this.request<any, ApiExceptionResponse>({\n path: `/api/applications/get-application-registry-item-by-code/${code}`,\n method: \"GET\",\n secure: true,\n ...params,\n });\n createApplicationRegistryItem = (\n data: ApplicationRegistryItemDto,\n params: RequestParams = {},\n ) =>\n this.request<any, ApiExceptionResponse>({\n path: `/api/applications/create-application-registry-item`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n updateApplicationRegistryItem = (\n { code, ...query }: UpdateApplicationRegistryItemParams,\n data: ApplicationRegistryItemDto,\n params: RequestParams = {},\n ) =>\n this.request<any, ApiExceptionResponse>({\n path: `/api/applications/update-application-registry-item/${code}`,\n method: \"PUT\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n deleteApplicationRegistryItem = (\n { code, ...query }: DeleteApplicationRegistryItemParams,\n params: RequestParams = {},\n ) =>\n this.request<any, ApiExceptionResponse>({\n path: `/api/applications/delete-application-registry-item/${code}`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ApplicationsApi } from '../api/applications.api';\nimport { ApplicationRegistryItemDto } from '../api/applications-data-contracts';\n\n@Injectable()\nexport class ApplicationRegistryService {\n private readonly applicationsApi = inject(ApplicationsApi);\n\n applications: ApplicationRegistryItemDto[] = [];\n currentApplication: ApplicationRegistryItemDto | null = null;\n\n async loadApplications(): Promise<void> {\n this.applications = await this.applicationsApi.getApplicationRegistryItems();\n this.currentApplication = this.applications.find((application) => application.isCurrent) ?? null;\n }\n\n openApplication(application: ApplicationRegistryItemDto): void {\n if (application.isCurrent || !application.baseUrl) {\n return;\n }\n\n window.location.href = application.baseUrl;\n }\n}\n","import { CommonModule } from '@angular/common';\r\nimport { Component, inject, OnInit } from '@angular/core';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { MenuModule } from 'primeng/menu';\r\nimport { ApplicationsApi } from '../../api/applications.api';\r\nimport { ApplicationRegistryItemDto } from '../../api/applications-data-contracts';\r\nimport { ApplicationRegistryService } from '../../services/application-registry.service';\r\n\r\n@Component({\r\n selector: 'app-topbar-application-switcher',\r\n standalone: true,\r\n imports: [CommonModule, ButtonModule, MenuModule, TranslatePipe],\r\n template: `\r\n @if (applicationRegistryService.applications.length > 1) {\r\n <p-button\r\n class=\"layout-topbar-action\"\r\n id=\"oip-app-topbar-application-switcher-button\"\r\n severity=\"secondary\"\r\n type=\"button\"\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n (click)=\"applicationMenu.toggle($event)\">\r\n <i [ngClass]=\"applicationRegistryService.currentApplication?.icon || 'pi pi-th-large'\"></i>\r\n <span class=\"ml-2 hidden md:inline\">\r\n {{ applicationRegistryService.currentApplication?.displayName || ('topbar.applications' | translate) }}\r\n </span>\r\n </p-button>\r\n <p-menu #applicationMenu [model]=\"applicationMenuItems\" [popup]=\"true\" />\r\n }\r\n `,\r\n providers: [ApplicationsApi, ApplicationRegistryService]\r\n})\r\nexport class AppTopbarApplicationSwitcherComponent implements OnInit {\r\n protected applicationMenuItems: MenuItem[] = [];\r\n protected readonly applicationRegistryService = inject(ApplicationRegistryService);\r\n\r\n async ngOnInit(): Promise<void> {\r\n try {\r\n await this.applicationRegistryService.loadApplications();\r\n this.applicationMenuItems = this.applicationRegistryService.applications.map((application) =>\r\n this.createApplicationMenuItem(application)\r\n );\r\n } catch {\r\n this.applicationMenuItems = [];\r\n }\r\n }\r\n\r\n private createApplicationMenuItem(application: ApplicationRegistryItemDto): MenuItem {\r\n return {\r\n id: `oip-app-switcher-${application.code}`,\r\n label: application.displayName ?? '',\r\n icon: application.icon ?? undefined,\r\n disabled: application.isCurrent,\r\n command: () => this.applicationRegistryService.openApplication(application)\r\n };\r\n }\r\n}\r\n","import { Component, inject } from '@angular/core';\nimport { ConfirmationService } from 'primeng/api';\nimport { RouterModule } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { StyleClassModule } from 'primeng/styleclass';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { AppConfiguratorComponent } from '../app-configurator/app-configurator.component';\nimport { SecurityService } from '../../services/security.service';\nimport { TopBarService } from '../../services/top-bar.service';\nimport { Tab, TabList, Tabs } from 'primeng/tabs';\nimport { AvatarModule } from 'primeng/avatar';\nimport { UserService } from '../../services/user.service';\nimport { ButtonModule } from 'primeng/button';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { LogoService } from '../../services/logo.service';\nimport { AppInfoService } from '../../services/app-info.service';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { UserNotificationsComponent } from '../user-notifications/user-notifications.component';\nimport { AppTopbarApplicationSwitcherComponent } from '../top-bar-application-switcher/top-bar-application-switcher.component';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/topbar.en.json';\nimport ru from './l10n/topbar.ru.json';\n\n@Component({\n selector: 'app-topbar',\n standalone: true,\n imports: [\n RouterModule,\n CommonModule,\n StyleClassModule,\n AppConfiguratorComponent,\n Tabs,\n TabList,\n Tab,\n AvatarModule,\n ButtonModule,\n ConfirmDialog,\n UserNotificationsComponent,\n TranslatePipe,\n AppTopbarApplicationSwitcherComponent\n ],\n template: `\n <div class=\"layout-topbar\">\n <p-confirmDialog appendTo=\"body\"/>\n <div class=\"layout-topbar-logo-container\">\n <button class=\"layout-menu-button layout-topbar-action\" (click)=\"layoutService.onMenuToggle()\">\n <i class=\"pi pi-bars\"></i>\n </button>\n <a class=\"layout-topbar-logo\" id=\"oip-app-topbar-logo-link\" routerLink=\"\">\n <ng-container\n *ngComponentOutlet=\"logoService.getLogoComponent(); inputs: { width: 36, height: 36 }\"></ng-container>\n <span>{{ appInfoService.getTitle() ?? ('app-info.title' | translate) }}</span>\n </a>\n </div>\n\n @if (securityService.isAdmin() && topBarService.topBarItems.length > 0) {\n <p-tabs\n class=\"layout-topbar-tabs ml-2\"\n [value]=\"topBarService.activeId\"\n (valueChange)=\"onActiveTabChange($event)\">\n <p-tablist>\n @for (tab of topBarService.availableTopBarItems; track tab.id) {\n <p-tab id=\"oip-app-topbar-tab-{{ tab.id }}\" [value]=\"tab.id\">\n <i class=\"pi {{ tab.icon }}\"></i>\n <span class=\"ml-2\">{{ tab.caption }}</span>\n </p-tab>\n }\n </p-tablist>\n </p-tabs>\n }\n <div class=\"layout-topbar-actions\">\n <div class=\"layout-config-menu\">\n <app-topbar-application-switcher/>\n <app-user-notifications/>\n <p-button\n class=\"layout-topbar-action\"\n id=\"oip-app-topbar-theme-button\"\n severity=\"secondary\"\n type=\"button\"\n [rounded]=\"true\"\n [text]=\"true\"\n (click)=\"toggleDarkMode()\">\n <i\n class=\"pi\"\n [ngClass]=\"{\n 'pi-moon': layoutService.isDarkTheme(),\n 'pi-sun': !layoutService.isDarkTheme()\n }\"></i>\n </p-button>\n <div class=\"relative\">\n <p-button\n class=\"layout-topbar-action layout-topbar-action-highlight\"\n enterActiveClass=\"animate-scalein\"\n enterFromClass=\"hidden\"\n id=\"oip-app-topbar-palette-button\"\n leaveActiveClass=\"animate-fadeout\"\n leaveToClass=\"hidden\"\n pStyleClass=\"@next\"\n [hideOnOutsideClick]=\"true\"\n [rounded]=\"true\">\n <i class=\"pi pi-palette\"></i>\n </p-button>\n <app-configurator/>\n </div>\n </div>\n\n <button\n class=\"layout-topbar-menu-button layout-topbar-action\"\n enterActiveClass=\"animate-scalein\"\n enterFromClass=\"hidden\"\n id=\"oip-app-topbar-menu-expand-button\"\n leaveActiveClass=\"animate-fadeout\"\n leaveToClass=\"hidden\"\n pStyleClass=\"@next\"\n [hideOnOutsideClick]=\"true\">\n <i class=\"pi pi-ellipsis-v\"></i>\n </button>\n\n <div class=\"layout-topbar-menu hidden lg:block\">\n <div class=\"layout-topbar-menu-content\">\n <button\n class=\"layout-topbar-action\"\n id=\"oip-app-topbar-logout-button\"\n type=\"button\"\n (click)=\"confirmLogout()\"\n (keydown)=\"logoutKeyDown($event)\">\n <i class=\"pi pi-sign-out\"></i>\n <span>{{ 'topbar.logout' | translate }}</span>\n </button>\n <button class=\"layout-topbar-action\" routerLink=\"config\">\n <p-avatar\n class=\"p-link flex align-items-center\"\n id=\"oip-app-topbar-user-avatar\"\n shape=\"circle\"\n size=\"normal\"\n [image]=\"userService.photoLoaded ? userService.photo : null\"\n >{{ !userService.photoLoaded ? userService.shortLabel : null }}\n </p-avatar>\n <span class=\"ml-2\">{{ 'topbar.profile' | translate }}</span>\n </button>\n </div>\n </div>\n </div>\n </div>`,\n providers: [ConfirmationService]\n})\nexport class AppTopbar {\n private readonly translations = provideTranslations({ en, ru });\n\n securityService = inject(SecurityService);\n topBarService = inject(TopBarService);\n userService = inject(UserService);\n layoutService = inject(LayoutService);\n logoService = inject(LogoService);\n appInfoService = inject(AppInfoService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly translateService = inject(TranslateService);\n\n onActiveTabChange(value: string | number | undefined) {\n this.topBarService.activeId = value == null ? undefined : String(value);\n }\n\n toggleDarkMode() {\n this.layoutService.layoutConfig.update((state) => ({\n ...state,\n darkTheme: !state.darkTheme\n }));\n }\n\n logoutKeyDown($event: KeyboardEvent) {\n if ($event.key === 'Enter') {\n $event.preventDefault();\n this.confirmLogout();\n }\n }\n\n confirmLogout() {\n this.confirmationService.confirm({\n header: this.translateService.instant('topbar.logoutConfirmHeader'),\n message: this.translateService.instant('topbar.logoutConfirmMessage'),\n icon: 'pi pi-sign-out',\n rejectButtonProps: {\n label: this.translateService.instant('topbar.logoutConfirmCancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.translateService.instant('topbar.logoutConfirmAccept'),\n severity: 'danger'\n },\n accept: () => {\n this.securityService.logout();\n }\n });\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { NgComponentOutlet } from '@angular/common';\nimport { LogoService } from '../../services/logo.service';\nimport { AppInfoService } from '../../services/app-info.service';\n\n@Component({\n selector: 'app-footer',\n template: `\n <div class=\"layout-footer\">\n <div class=\"flex justify-center flex-1\">\n <div class=\"mr-2 -my-0.5\">\n <ng-container\n *ngComponentOutlet=\"logoService.getLogoComponent(); inputs: { width: 18, height: 18 }\"></ng-container>\n </div>\n <span class=\"font-medium\">{{ appInfoService.getFooter() ?? ('app-info.footer' | translate) }}</span>\n </div>\n <p class=\"mr-auto\">{{ appInfoService.getVersion() ?? ('app-info.version' | translate) }}</p>\n </div>\n `,\n standalone: true,\n imports: [TranslatePipe, NgComponentOutlet]\n})\nexport class FooterComponent {\n protected logoService = inject(LogoService);\n protected appInfoService = inject(AppInfoService);\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n AddModuleInstanceDto,\n ApiExceptionResponse,\n ChangeOrderParams,\n DeleteModuleInstanceParams,\n EditModuleInstanceDto,\n GetModuleInstanceRightsParams,\n IntKeyValueDto,\n ModuleInstanceDto,\n} from \"./data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class MenuApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n get = (params: RequestParams = {}) =>\n this.request<ModuleInstanceDto[], any>({\n path: `/api/menu/get`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n getModuleInstanceRights = (\n query: GetModuleInstanceRightsParams,\n params: RequestParams = {},\n ) =>\n this.request<string[], ApiExceptionResponse>({\n path: `/api/menu/get-module-instance-rights`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n getAdminMenu = (params: RequestParams = {}) =>\n this.request<ModuleInstanceDto[], any>({\n path: `/api/menu/get-admin-menu`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n getModules = (params: RequestParams = {}) =>\n this.request<IntKeyValueDto[], any>({\n path: `/api/menu/get-modules`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n addModuleInstance = (\n data: AddModuleInstanceDto,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/add-module-instance`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n editModuleInstance = (\n data: EditModuleInstanceDto,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/edit-module-instance`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n deleteModuleInstance = (\n query: DeleteModuleInstanceParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/delete-module-instance`,\n method: \"DELETE\",\n query: query,\n secure: true,\n ...params,\n });\n changeOrder = (query: ChangeOrderParams, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/change-order`,\n method: \"POST\",\n query: query,\n secure: true,\n ...params,\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { MenuChangeEvent } from '../events/menu-change.event';\nimport { MenuApi } from '../api/menu.api';\nimport { AppTitleService } from './app-title.service';\nimport { LayoutService } from './app.layout.service';\nimport {\n AddModuleInstanceDto,\n DeleteModuleInstanceParams,\n EditModuleInstanceDto,\n ModuleInstanceDto\n} from '../api/data-contracts';\n\n@Injectable()\nexport class MenuService {\n private readonly menuSource = new Subject<MenuChangeEvent>();\n private readonly resetSource = new Subject();\n private readonly titleService = inject(AppTitleService);\n private readonly menuDataService = inject(MenuApi);\n private readonly layoutService = inject(LayoutService);\n menuSource$ = this.menuSource.asObservable();\n resetSource$ = this.resetSource.asObservable();\n contextMenuItem: any;\n\n public menu: ModuleInstanceDto[] = [];\n\n get adminMode(): boolean {\n return this.layoutService.adminMode();\n }\n\n set adminMode(value: boolean) {\n this.layoutService.layoutConfig.update((config) => ({ ...config, adminMode: value }));\n }\n\n async loadMenu() {\n this.menu = this.adminMode ? await this.getAdminMenu() : await this.getMenu();\n }\n\n /**\n * Handles changes in the menu state.\n * @param {MenuChangeEvent} event - The event containing information about the menu state change.\n * @return {void}\n */\n onMenuStateChange(event: MenuChangeEvent): void {\n this.menuSource.next(event);\n if (!event.item.items?.length) {\n this.titleService.setTitle(event.item.label);\n }\n }\n\n reset() {\n this.resetSource.next(true);\n }\n\n getMenu() {\n return this.menuDataService.get();\n }\n\n getAdminMenu() {\n return this.menuDataService.getAdminMenu();\n }\n\n getModules() {\n return this.menuDataService.getModules();\n }\n\n addModuleInstance(addModuleInstance: AddModuleInstanceDto) {\n return this.menuDataService.addModuleInstance(addModuleInstance as AddModuleInstanceDto);\n }\n\n deleteItem(moduleInstanceId: number) {\n return this.menuDataService.deleteModuleInstance({ id: moduleInstanceId } as DeleteModuleInstanceParams);\n }\n\n editModuleInstance(item: EditModuleInstanceDto) {\n return this.menuDataService.editModuleInstance(item);\n }\n}\n","import { ChangeDetectorRef, Component, HostBinding, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { NavigationEnd, Router, RouterLinkActive, RouterLink } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { MenuService } from '../../services/app.menu.service';\nimport { RippleModule } from 'primeng/ripple';\nimport { NgClass } from '@angular/common';\nimport { ConfirmationService, ContextMenuService, MenuItem, MenuItemCommandEvent, PrimeIcons } from 'primeng/api';\nimport { MenuItemCreateDialogComponent } from './menu-item-create-dialog.component';\nimport { ContextMenu, ContextMenuModule } from 'primeng/contextmenu';\nimport { MsgService } from '../../services/msg.service';\nimport { MenuItemEditDialogComponent } from './menu-item-edit-dialog.component';\nimport { ContextMenuItemDto } from '../../dtos/context-menu-item.dto';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { MenuApi } from '../../api/menu.api';\nimport { ChangeOrderParams, DeleteModuleInstanceParams, ModuleInstanceDto } from '../../api/data-contracts';\nimport { SecurityService } from '../../services/security.service';\n\ninterface MenuItemComponentTranslation {\n delete: string;\n edit: string;\n new: string;\n deleteItemConfirmHeader: string;\n deleteItemConfirmMessage: string;\n deleteItemSuccessMessage: string;\n deleteItemConfirmRejectButtonPropsLabel: string;\n deleteItemConfirmAcceptButtonPropsLabel: string;\n moveUp: string;\n moveDown: string;\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[app-menuitem]',\n template: `\n <ng-container>\n <p-confirm-dialog />\n @if (root && item.visible !== false) {\n <div class=\"layout-menuitem-root-text\" (contextmenu)=\"onContextMenu($event, item)\">\n {{ item.label }}\n </div>\n }\n @if ((!item.routerLink || item.items) && item.visible !== false) {\n <a\n pRipple\n tabindex=\"0\"\n [attr.href]=\"item.url\"\n [attr.target]=\"item.target\"\n [ngClass]=\"item.class\"\n (click)=\"itemClick($event)\"\n (contextmenu)=\"onContextMenu($event, item)\">\n <i class=\"layout-menuitem-icon\" [ngClass]=\"item.icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label }}</span>\n @if (item.items) {\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"></i>\n }\n </a>\n }\n @if (item.routerLink && !item.items && item.visible !== false) {\n <a\n pRipple\n routerLinkActive=\"active-route\"\n tabindex=\"0\"\n [attr.target]=\"item.target\"\n [fragment]=\"item.fragment\"\n [ngClass]=\"item.class\"\n [preserveFragment]=\"item.preserveFragment\"\n [queryParams]=\"item.queryParams\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [replaceUrl]=\"item.replaceUrl\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActiveOptions]=\"\n item.routerLinkActiveOptions || {\n paths: 'exact',\n queryParams: 'ignored',\n matrixParams: 'ignored',\n fragment: 'ignored'\n }\n \"\n [skipLocationChange]=\"item.skipLocationChange\"\n [state]=\"item.state\"\n (click)=\"itemClick($event)\"\n (contextmenu)=\"onContextMenu($event, item)\">\n <i class=\"layout-menuitem-icon\" [ngClass]=\"item.icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label }}</span>\n @if (item.items) {\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"></i>\n }\n </a>\n }\n\n @if (item.items && item.visible !== false) {\n <ul class=\"layout-submenu\" [class.layout-submenu-expanded]=\"isSubmenuExpanded\">\n @for (child of item.items; track child; let i = $index) {\n <li\n app-menuitem\n [class]=\"child.badgeClass\"\n [contextMenu]=\"contextMenu\"\n [index]=\"i\"\n [item]=\"child\"\n [menuItemCreateDialogComponent]=\"menuItemCreateDialogComponent\"\n [menuItemEditDialogComponent]=\"menuItemEditDialogComponent\"\n [parentKey]=\"key\"></li>\n }\n </ul>\n }\n </ng-container>\n `,\n imports: [RippleModule, NgClass, RouterLinkActive, RouterLink, ContextMenuModule, ConfirmDialog],\n providers: [ConfirmationService]\n})\nexport class MenuItemComponent implements OnInit, OnDestroy {\n private readonly layoutService = inject(LayoutService);\n private readonly translateService = inject(TranslateService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly msgService = inject(MsgService);\n private readonly menuDataService = inject(MenuApi);\n private readonly securityService = inject(SecurityService);\n\n @Input() item: ContextMenuItemDto;\n @Input() index!: number;\n @Input() @HostBinding('class.layout-root-menuitem') root!: boolean;\n @Input() parentKey!: string;\n @Input() menuItemCreateDialogComponent: MenuItemCreateDialogComponent;\n @Input() menuItemEditDialogComponent: MenuItemEditDialogComponent;\n @Input() contextMenu: ContextMenu;\n\n private active = false;\n private subscriptions: Subscription[] = [];\n private localization: MenuItemComponentTranslation = {} as MenuItemComponentTranslation;\n\n protected key: string = '';\n\n constructor(\n private readonly cd: ChangeDetectorRef,\n public router: Router,\n private readonly menuService: MenuService\n ) {\n this.subscriptions.push(\n this.menuService.menuSource$.subscribe((value) => {\n Promise.resolve(null).then(() => {\n if (value.routeEvent && (value.key === this.key || value.key.startsWith(this.key + '-'))) {\n this.active = true;\n }\n });\n })\n );\n\n this.subscriptions.push(\n this.menuService.resetSource$.subscribe(() => {\n this.active = false;\n })\n );\n\n this.subscriptions.push(\n this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe((params) => {\n if (this.item.routerLink) {\n this.updateActiveStateFromRoute();\n }\n })\n );\n\n this.subscriptions.push(\n this.translateService.get('menuItemComponent').subscribe((value: MenuItemComponentTranslation) => {\n this.localization = value;\n })\n );\n }\n\n ngOnInit() {\n this.key = this.parentKey ? this.parentKey + '-' + this.index : String(this.index);\n if (this.item.routerLink) {\n this.updateActiveStateFromRoute();\n }\n }\n\n updateActiveStateFromRoute() {\n const activeRoute = this.router.isActive(this.item.routerLink[0], {\n paths: 'exact',\n queryParams: 'ignored',\n matrixParams: 'ignored',\n fragment: 'ignored'\n });\n\n if (activeRoute) {\n this.menuService.onMenuStateChange({\n key: this.key,\n item: this.item,\n routeEvent: true\n });\n }\n }\n\n itemClick(event: Event) {\n // avoid processing disabled items\n if (this.item.disabled) {\n event.preventDefault();\n return;\n }\n\n // execute command\n if (this.item.command) {\n this.item.command({ originalEvent: event, item: this.item });\n }\n\n // toggle active state\n if (this.item.items) {\n this.active = !this.active;\n }\n\n this.menuService.onMenuStateChange({ key: this.key, item: this.item });\n }\n\n get isSubmenuExpanded() {\n return this.root || this.active;\n }\n\n @HostBinding('class.active-menuitem')\n get activeClass() {\n return this.active && !this.root;\n }\n\n ngOnDestroy() {\n this.subscriptions.map((s) => s.unsubscribe());\n }\n\n private newClick(e: MenuItemCommandEvent) {\n this.menuItemCreateDialogComponent.showDialog();\n }\n\n onContextMenu($event: MouseEvent, item: any) {\n if (!this.securityService.isAdmin()) {\n return;\n }\n\n $event.stopPropagation();\n $event.preventDefault();\n\n this.menuService.contextMenuItem = item;\n this.contextMenu.model = [\n {\n label: this.localization.new,\n icon: PrimeIcons.PLUS,\n command: (event) => this.newClick(event)\n },\n {\n label: this.localization.edit,\n icon: PrimeIcons.FILE_EDIT,\n command: (event) => this.editClick(event)\n },\n { separator: true },\n {\n label: this.localization.delete,\n icon: PrimeIcons.TRASH,\n command: (event) => this.deleteItem(event)\n },\n { separator: true, visible: this.hasVisibleNext(item) || this.hasVisiblePrev(item) },\n {\n label: this.localization.moveUp,\n icon: PrimeIcons.ANGLE_UP,\n command: (event) => {\n this.moveUp(item);\n $event.stopPropagation();\n $event.preventDefault();\n },\n visible: this.hasVisiblePrev(item)\n },\n {\n label: this.localization.moveDown,\n icon: PrimeIcons.ANGLE_DOWN,\n command: (event) => {\n this.moveDown(item);\n $event.stopPropagation();\n $event.preventDefault();\n },\n visible: this.hasVisibleNext(item)\n }\n ];\n this.contextMenu.show($event);\n }\n\n private deleteItem(event: MenuItemCommandEvent) {\n this.confirmationService.confirm({\n header: this.localization.deleteItemConfirmHeader,\n message: this.localization.deleteItemConfirmMessage,\n icon: PrimeIcons.TRASH,\n rejectButtonProps: {\n label: this.localization.deleteItemConfirmRejectButtonPropsLabel,\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.localization.deleteItemConfirmAcceptButtonPropsLabel,\n severity: 'danger'\n },\n accept: async () => {\n await this.menuDataService.deleteModuleInstance({\n id: this.menuService.contextMenuItem?.moduleInstanceId\n } as DeleteModuleInstanceParams);\n this.msgService.success(this.localization.deleteItemSuccessMessage);\n await this.menuService.loadMenu();\n }\n });\n }\n\n private editClick(event: MenuItemCommandEvent) {\n this.menuItemEditDialogComponent.showDialog().then();\n }\n\n moveUp(currentItem: any) {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId === currentItem.moduleInstanceId);\n\n if (currentIndex > 0) {\n const prevVisibleItem = this.findPrevVisibleItem(items, currentIndex);\n if (prevVisibleItem !== null) {\n this.swapItems(items[currentIndex], items[prevVisibleItem]);\n }\n }\n }\n\n moveDown(currentItem: any) {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId === currentItem.moduleInstanceId);\n\n if (currentIndex < items.length - 1) {\n const nextVisibleIndex = this.findNextVisibleIndex(items, currentIndex);\n if (nextVisibleIndex !== -1) {\n this.swapItems(items[currentIndex], items[nextVisibleIndex]);\n }\n }\n }\n\n private findPrevVisibleItem(items: any[], currentIndex: number): number {\n for (let i = currentIndex - 1; i >= 0; i--) {\n if (items[i].visible !== false) {\n return i;\n }\n }\n return -1;\n }\n\n private findNextVisibleIndex(items: any[], currentIndex: number): number {\n for (let i = currentIndex + 1; i < items.length; i++) {\n if (items[i].visible !== false) {\n return i;\n }\n }\n return -1;\n }\n\n private swapItems(firstModule: any, secondModule: any) {\n const items = this.getItems(firstModule);\n\n const firstIndex = items.findIndex((item) => item.moduleInstanceId === firstModule.moduleInstanceId);\n const secondIndex = items.findIndex((item) => item.moduleInstanceId === secondModule.moduleInstanceId);\n\n [items[firstIndex], items[secondIndex]] = [items[secondIndex], items[firstIndex]];\n\n this.menuDataService\n .changeOrder({\n firstModuleId: firstModule.moduleInstanceId,\n secondModuleId: secondModule.moduleInstanceId\n } as ChangeOrderParams)\n .then();\n }\n\n hasVisiblePrev(currentItem: any): boolean {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId == currentItem.moduleInstanceId);\n return this.findPrevVisibleItem(items, currentIndex) !== -1;\n }\n\n private getItems(currentItem: any): ModuleInstanceDto[] {\n if (!currentItem.parentId) {\n return this.menuService.menu;\n }\n\n return this.findItemByModuleInstanceId(this.menuService.menu, currentItem.parentId)?.items ?? [];\n }\n\n private findItemByModuleInstanceId(items: ModuleInstanceDto[], moduleInstanceId: number): ModuleInstanceDto | null {\n for (const item of items) {\n if (item.moduleInstanceId == moduleInstanceId) {\n return item;\n }\n\n const foundItem = this.findItemByModuleInstanceId(item.items ?? [], moduleInstanceId);\n if (foundItem) {\n return foundItem;\n }\n }\n\n return null;\n }\n\n hasVisibleNext(currentItem: any): boolean {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId == currentItem.moduleInstanceId);\n return this.findNextVisibleIndex(items, currentIndex) !== -1;\n }\n}\n","import { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { SelectModule } from 'primeng/select';\nimport { PrimeIcons } from 'primeng/api';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { AddModuleInstanceDto, IntKeyValueDto } from '../../api/data-contracts';\nimport { MenuApi } from '../../api/menu.api';\nimport { MenuService } from '../../services/app.menu.service';\nimport { MsgService } from '../../services/msg.service';\n\ntype PrimeIconOption = {\n label: string;\n value: string;\n};\n\n@Component({\n selector: 'menu-item-create-dialog',\n standalone: true,\n imports: [ButtonModule, DialogModule, InputTextModule, SelectModule, FormsModule, TranslatePipe],\n template: `\n <p-dialog\n header=\"{{ 'menuItemCreateDialogComponent.header' | translate }}\"\n [modal]=\"true\"\n [style]=\"{ width: '40rem' }\"\n [(visible)]=\"visible\"\n (keydown.enter)=\"save()\">\n @if (menuService.contextMenuItem) {\n <div class=\"flex items-center gap-4 mb-4 mt-1\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-dialog-parent-input\">\n {{ 'menuItemCreateDialogComponent.parentLabel' | translate }}\n </label>\n <input\n autocomplete=\"off\"\n class=\"flex-auto\"\n id=\"oip-menu-item-create-dialog-parent-input\"\n pInputText\n readonly\n [ngModel]=\"menuService.contextMenuItem?.label\" />\n </div>\n }\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-label\">\n {{ 'menuItemCreateDialogComponent.label' | translate }}\n </label>\n <input autocomplete=\"off\" class=\"flex-auto\" id=\"oip-menu-item-create-label\" pInputText [(ngModel)]=\"label\" />\n </div>\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-module\">\n {{ 'menuItemCreateDialogComponent.module' | translate }}\n </label>\n <p-select\n appendTo=\"body\"\n class=\"flex-auto\"\n filterBy=\"value\"\n filterPlaceholder=\"{{ 'menuItemCreateDialogComponent.searchModule' | translate }}\"\n id=\"oip-menu-item-create-module\"\n optionLabel=\"value\"\n optionValue=\"key\"\n placeholder=\"{{ 'menuItemCreateDialogComponent.selectModule' | translate }}\"\n scrollHeight=\"18rem\"\n [filter]=\"true\"\n [options]=\"modules\"\n [(ngModel)]=\"selectModule\" />\n </div>\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-dialog-icon\">\n {{ 'menuItemCreateDialogComponent.icon' | translate }}\n </label>\n <p-select\n appendTo=\"body\"\n class=\"flex-auto\"\n filterBy=\"label,value\"\n id=\"oip-menu-item-create-dialog-icon\"\n optionLabel=\"label\"\n optionValue=\"value\"\n scrollHeight=\"18rem\"\n [filter]=\"true\"\n [options]=\"iconOptions\"\n [(ngModel)]=\"selectIcon\">\n <ng-template let-icon pTemplate=\"selectedItem\">\n <div class=\"flex items-center gap-2\">\n <i [class]=\"icon.value\"></i>\n <span>{{ icon.label }}</span>\n </div>\n </ng-template>\n <ng-template let-icon pTemplate=\"item\">\n <div class=\"flex items-center gap-2\">\n <i [class]=\"icon.value\"></i>\n <span>{{ icon.label }}</span>\n </div>\n </ng-template>\n </p-select>\n </div>\n <div class=\"flex justify-end gap-2\">\n <p-button\n id=\"oip-menu-item-create-cancel\"\n label=\"{{ 'menuItemCreateDialogComponent.cancel' | translate }}\"\n severity=\"secondary\"\n [disabled]=\"saving\"\n (click)=\"changeVisible()\" />\n <p-button\n id=\"oip-menu-item-create-save\"\n label=\"{{ 'menuItemCreateDialogComponent.save' | translate }}\"\n [disabled]=\"!canSave\"\n [loading]=\"saving\"\n (click)=\"save()\" />\n </div>\n </p-dialog>\n `\n})\nexport class MenuItemCreateDialogComponent implements OnInit {\n protected readonly menuService = inject(MenuService);\n protected readonly menu = inject(MenuApi);\n private readonly msgService = inject(MsgService);\n @Input() visible!: boolean;\n @Output() visibleChange = new EventEmitter<boolean>();\n modules: IntKeyValueDto[] = [];\n iconOptions: PrimeIconOption[] = Object.values(PrimeIcons)\n .filter((icon): icon is string => typeof icon === 'string')\n .map((icon) => ({\n label: icon.replace('pi pi-', ''),\n value: icon\n }))\n .sort((left, right) => left.label.localeCompare(right.label));\n selectModule: any;\n label: string;\n selectIcon: string = 'pi pi-box';\n saving = false;\n\n get canSave(): boolean {\n return !this.saving && !!this.selectModule;\n }\n\n async ngOnInit() {\n this.modules = await this.menu.getModules();\n }\n\n changeVisible() {\n this.visible = !this.visible;\n this.visibleChange.emit(this.visible);\n }\n\n async save() {\n if (this.saving) {\n return;\n }\n\n if (!this.selectModule) {\n return;\n }\n\n const item: AddModuleInstanceDto = {\n moduleId: this.selectModule,\n label: this.label,\n icon: this.selectIcon,\n parentId: this.menuService.contextMenuItem?.moduleInstanceId\n };\n\n this.saving = true;\n try {\n await this.menuService.addModuleInstance(item);\n await this.menuService.loadMenu();\n this.hide();\n } catch (error) {\n this.msgService.errorFromException(error, 'Unexpected error');\n } finally {\n this.saving = false;\n }\n }\n\n hide() {\n this.visible = false;\n this.visibleChange.emit(this.visible);\n }\n\n showDialog() {\n this.visible = true;\n this.visibleChange.emit(this.visible);\n }\n}\n","import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { SelectModule } from 'primeng/select';\nimport { PrimeIcons } from 'primeng/api';\nimport { FormsModule } from '@angular/forms';\nimport { MenuService } from '../../services/app.menu.service';\nimport { MsgService } from '../../services/msg.service';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { EditModuleInstanceDto } from '../../api/data-contracts';\nimport { SecurityApi } from '../../api/security.api';\n\ntype PrimeIconOption = {\n label: string;\n value: string;\n};\n\n@Component({\n imports: [ButtonModule, DialogModule, InputTextModule, SelectModule, FormsModule, TranslatePipe, MultiSelectModule],\n selector: 'menu-item-edit-dialog',\n standalone: true,\n template: `\n <p-dialog\n header=\"{{ 'menuItemEditDialogComponent.header' | translate }}\"\n [modal]=\"true\"\n [style]=\"{ width: '40rem' }\"\n [(visible)]=\"visible\"\n (keydown.enter)=\"save()\">\n <div class=\"flex items-center gap-4 mb-4 mt-1\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-edit-dialog-menu-input\">\n {{ 'menuItemEditDialogComponent.label' | translate }}\n </label>\n <input\n autocomplete=\"off\"\n class=\"flex-auto\"\n id=\"oip-menu-item-edit-dialog-menu-input\"\n pInputText\n [(ngModel)]=\"item.label\" />\n </div>\n\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-edit-dialog-icon\">\n {{ 'menuItemEditDialogComponent.icon' | translate }}\n </label>\n <p-select\n appendTo=\"body\"\n class=\"flex-auto\"\n filterBy=\"label,value\"\n id=\"oip-menu-item-edit-dialog-icon\"\n optionLabel=\"label\"\n optionValue=\"value\"\n scrollHeight=\"18rem\"\n [filter]=\"true\"\n [options]=\"iconOptions\"\n [(ngModel)]=\"item.icon\">\n <ng-template let-icon pTemplate=\"selectedItem\">\n <div class=\"flex items-center gap-2\">\n <i [class]=\"icon.value\"></i>\n <span>{{ icon.label }}</span>\n </div>\n </ng-template>\n <ng-template let-icon pTemplate=\"item\">\n <div class=\"flex items-center gap-2\">\n <i [class]=\"icon.value\"></i>\n <span>{{ icon.label }}</span>\n </div>\n </ng-template>\n </p-select>\n </div>\n\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"security\">\n {{ 'menuItemEditDialogComponent.security' | translate }}\n </label>\n <p-multiSelect\n appendTo=\"body\"\n class=\"flex-auto\"\n id=\"oip-menu-item-edit-dialog-roles-multi-select\"\n placeholder=\"Select roles\"\n [maxSelectedLabels]=\"10\"\n [options]=\"roles\"\n [(ngModel)]=\"item.viewRoles\" />\n </div>\n\n <div class=\"flex justify-end gap-2\">\n <p-button\n id=\"oip-menu-item-edit-dialog-cancel-edit-button\"\n label=\"{{ 'menuItemEditDialogComponent.cancel' | translate }}\"\n severity=\"secondary\"\n [disabled]=\"saving\"\n (click)=\"changeVisible()\" />\n <p-button\n id=\"oip-menu-item-edit-dialog-save-edit-button\"\n label=\"{{ 'menuItemEditDialogComponent.save' | translate }}\"\n [disabled]=\"saving\"\n [loading]=\"saving\"\n (click)=\"save()\" />\n </div>\n </p-dialog>\n `\n})\nexport class MenuItemEditDialogComponent {\n private readonly menuService = inject(MenuService);\n private readonly securityApi = inject(SecurityApi);\n private readonly msgService = inject(MsgService);\n\n @Input() visible!: boolean;\n @Output() visibleChange = new EventEmitter<boolean>();\n\n roles: string[] = [];\n iconOptions: PrimeIconOption[] = Object.values(PrimeIcons)\n .filter((icon): icon is string => typeof icon === 'string')\n .map((icon) => ({\n label: icon.replace('pi pi-', ''),\n value: icon\n }))\n .sort((left, right) => left.label.localeCompare(right.label));\n item: EditModuleInstanceDto = {\n icon: '',\n label: '',\n viewRoles: [''],\n moduleId: 0,\n moduleInstanceId: 0,\n parentId: 0\n };\n saving = false;\n\n changeVisible() {\n this.visible = !this.visible;\n this.visibleChange.emit(this.visible);\n }\n\n async save() {\n if (this.saving) {\n return;\n }\n\n this.saving = true;\n try {\n await this.menuService.editModuleInstance(this.item);\n await this.menuService.loadMenu();\n this.hide();\n } catch (error) {\n this.msgService.error(error);\n } finally {\n this.saving = false;\n }\n }\n\n hide() {\n this.visible = false;\n this.visibleChange.emit(this.visible);\n }\n\n async showDialog() {\n this.item = {\n moduleInstanceId: this.menuService.contextMenuItem?.moduleInstanceId,\n moduleId: this.menuService.contextMenuItem?.moduleId,\n parentId: this.menuService.contextMenuItem?.parentId,\n label: this.menuService.contextMenuItem?.label,\n icon: this.menuService.contextMenuItem?.icon,\n viewRoles: this.menuService.contextMenuItem?.securities\n };\n\n this.roles = await this.securityApi.getRealmRoles();\n\n this.visible = true;\n this.visibleChange.emit(this.visible);\n }\n}\n","import { Component, inject, OnInit, ViewChild } from '@angular/core';\nimport { MenuService } from '../../services/app.menu.service';\nimport { ButtonModule } from 'primeng/button';\nimport { SecurityService } from '../../services/security.service';\nimport { ContextMenu, ContextMenuModule } from 'primeng/contextmenu';\nimport { DialogModule } from 'primeng/dialog';\nimport { MenuItemCommandEvent, PrimeIcons } from 'primeng/api';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { FormsModule } from '@angular/forms';\nimport { MenuItemComponent } from './menu-item.component';\nimport { MenuItemCreateDialogComponent } from './menu-item-create-dialog.component';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MenuItemEditDialogComponent } from './menu-item-edit-dialog.component';\nimport { MenuApi } from '../../api/menu.api';\n\nimport { provideTranslations } from '../../helpers/l10n.helper';\nimport en from './l10n/menu.en.json';\nimport ru from './l10n/menu.ru.json';\n\n@Component({\n imports: [\n MenuItemComponent,\n ButtonModule,\n ContextMenuModule,\n DialogModule,\n InputTextModule,\n MenuItemCreateDialogComponent,\n FormsModule,\n MenuItemEditDialogComponent\n ],\n providers: [MenuApi],\n selector: 'app-menu',\n standalone: true,\n template: ` <div #empty class=\"layout-sidebar\" (contextmenu)=\"onContextMenu($event)\">\n <ul class=\"layout-menu\">\n @for (item of menuService.menu; track item; let i = $index) {\n <ng-container>\n @if (item.separator) {\n <li class=\"menu-separator\"></li>\n } @else {\n <li\n app-menuitem\n [contextMenu]=\"contextMenu\"\n [index]=\"i\"\n [item]=\"item\"\n [menuItemCreateDialogComponent]=\"menuItemCreateDialogComponent\"\n [menuItemEditDialogComponent]=\"menuItemEditDialogComponent\"\n [root]=\"true\"></li>\n }\n </ng-container>\n }\n </ul>\n </div>\n @if (securityService.isAdmin()) {\n <p-contextMenu [target]=\"empty\" />\n <menu-item-create-dialog />\n <menu-item-edit-dialog />\n }`\n})\nexport class MenuComponent implements OnInit {\n // Registers the whole menu/l10n/menu.*.json bundle, which also covers\n // menuItemComponent, menuItemEditDialogComponent and menuItemCreateDialogComponent.\n private readonly translations = provideTranslations({ en, ru });\n\n readonly menuService = inject(MenuService);\n readonly securityService = inject(SecurityService);\n readonly translateService = inject(TranslateService);\n @ViewChild(MenuItemCreateDialogComponent) menuItemCreateDialogComponent: MenuItemCreateDialogComponent;\n @ViewChild(MenuItemEditDialogComponent) menuItemEditDialogComponent: MenuItemEditDialogComponent;\n @ViewChild(ContextMenu) contextMenu: ContextMenu;\n\n ngOnInit() {\n this.menuService.loadMenu().then();\n }\n\n private newClick(e: MenuItemCommandEvent) {\n this.menuItemCreateDialogComponent.showDialog();\n }\n\n protected onContextMenu($event: MouseEvent) {\n if (!this.securityService.isAdmin()) {\n return;\n }\n\n this.menuService.contextMenuItem = null;\n this.contextMenu.model = [\n {\n label: this.translateService.instant('menuComponent.new'),\n icon: PrimeIcons.PLUS,\n command: (event) => this.newClick(event)\n }\n ];\n }\n}\n","import { Component } from '@angular/core';\r\nimport { MenuComponent } from '../menu/menu.component';\r\n\r\n@Component({\r\n selector: 'app-sidebar',\r\n template: ` <app-menu></app-menu>`,\r\n standalone: true,\r\n imports: [MenuComponent]\r\n})\r\nexport class SidebarComponent {\r\n constructor() {}\r\n}\r\n","import { Component, Renderer2, ViewChild, OnDestroy, inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { AppTopbar } from '../top-bar/top-bar.component';\r\nimport { FooterComponent } from '../footer/footer.component';\r\nimport { LayoutService } from '../../services/app.layout.service';\r\nimport { SidebarComponent } from '../sidebar/sidebar.component';\r\nimport { MenuApi } from '../../api/menu.api';\r\nimport { MenuService } from '../../services/app.menu.service';\r\n\r\n@Component({\r\n selector: 'app-layout',\r\n standalone: true,\r\n imports: [CommonModule, AppTopbar, SidebarComponent, RouterModule, FooterComponent],\r\n template: `\r\n <div class=\"layout-wrapper\" [ngClass]=\"containerClass\">\r\n <app-topbar></app-topbar>\r\n <app-sidebar></app-sidebar>\r\n <div class=\"layout-main-container\">\r\n <div class=\"layout-main\">\r\n <router-outlet></router-outlet>\r\n </div>\r\n <app-footer></app-footer>\r\n </div>\r\n <div class=\"layout-mask animate-fadein\"></div>\r\n </div>\r\n `,\r\n providers: [MenuService, MenuApi]\r\n})\r\nexport class AppLayoutComponent implements OnDestroy {\r\n protected layoutService = inject(LayoutService);\r\n protected router = inject(Router);\r\n protected renderer = inject(Renderer2);\r\n overlayMenuOpenSubscription: Subscription;\r\n\r\n menuOutsideClickListener: () => void;\r\n\r\n @ViewChild(SidebarComponent) appSidebar!: SidebarComponent;\r\n\r\n @ViewChild(AppTopbar) appTopBar!: AppTopbar;\r\n\r\n constructor() {\r\n this.overlayMenuOpenSubscription = this.layoutService.overlayOpen$.subscribe(() => {\r\n if (!this.menuOutsideClickListener) {\r\n this.menuOutsideClickListener = this.renderer.listen('document', 'click', (event) => {\r\n if (this.isOutsideClicked(event)) {\r\n this.hideMenu();\r\n }\r\n });\r\n }\r\n\r\n if (this.layoutService.layoutState().staticMenuMobileActive) {\r\n this.blockBodyScroll();\r\n }\r\n });\r\n\r\n this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe(() => {\r\n this.hideMenu();\r\n });\r\n }\r\n\r\n isOutsideClicked(event: MouseEvent) {\r\n const sidebarEl = document.querySelector('.layout-sidebar');\r\n const topbarEl = document.querySelector('.layout-menu-button');\r\n const eventTarget = event.target as Node;\r\n\r\n return !(\r\n sidebarEl?.isSameNode(eventTarget) ||\r\n sidebarEl?.contains(eventTarget) ||\r\n topbarEl?.isSameNode(eventTarget) ||\r\n topbarEl?.contains(eventTarget)\r\n );\r\n }\r\n\r\n hideMenu() {\r\n this.layoutService.layoutState.update((prev) => ({\r\n ...prev,\r\n overlayMenuActive: false,\r\n staticMenuMobileActive: false,\r\n menuHoverActive: false\r\n }));\r\n if (this.menuOutsideClickListener) {\r\n this.menuOutsideClickListener();\r\n this.menuOutsideClickListener = null;\r\n }\r\n this.unblockBodyScroll();\r\n }\r\n\r\n blockBodyScroll(): void {\r\n if (document.body.classList) {\r\n document.body.classList.add('blocked-scroll');\r\n } else {\r\n document.body.className += ' blocked-scroll';\r\n }\r\n }\r\n\r\n unblockBodyScroll(): void {\r\n if (document.body.classList) {\r\n document.body.classList.remove('blocked-scroll');\r\n } else {\r\n document.body.className = document.body.className.replace(\r\n new RegExp('(^|\\\\b)' + 'blocked-scroll'.split(' ').join('|') + '(\\\\b|$)', 'gi'),\r\n ' '\r\n );\r\n }\r\n }\r\n\r\n get containerClass() {\r\n return {\r\n 'layout-overlay': this.layoutService.layoutConfig().menuMode === 'overlay',\r\n 'layout-static': this.layoutService.layoutConfig().menuMode === 'static',\r\n 'layout-static-inactive':\r\n this.layoutService.layoutState().staticMenuDesktopInactive &&\r\n this.layoutService.layoutConfig().menuMode === 'static',\r\n 'layout-overlay-active': this.layoutService.layoutState().overlayMenuActive,\r\n 'layout-mobile-active': this.layoutService.layoutState().staticMenuMobileActive\r\n };\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.overlayMenuOpenSubscription) {\r\n this.overlayMenuOpenSubscription.unsubscribe();\r\n }\r\n\r\n if (this.menuOutsideClickListener) {\r\n this.menuOutsideClickListener();\r\n }\r\n }\r\n}\r\n","import { Component, computed, inject } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { StyleClassModule } from 'primeng/styleclass';\nimport { AppConfiguratorComponent } from '../app-configurator/app-configurator.component';\nimport { LayoutService } from '../../services/app.layout.service';\n\n@Component({\n selector: 'app-floating-configurator',\n imports: [ButtonModule, StyleClassModule, AppConfiguratorComponent],\n template: `\n <div class=\"fixed flex gap-4 top-8 right-8\">\n <p-button\n id=\"oip-app-floating-configurator-dark-theme-button\"\n severity=\"secondary\"\n type=\"button\"\n [icon]=\"isDarkTheme() ? 'pi pi-moon' : 'pi pi-sun'\"\n [rounded]=\"true\"\n (onClick)=\"toggleDarkMode()\" />\n <div class=\"relative\">\n <p-button\n enterActiveClass=\"animate-scalein\"\n enterFromClass=\"hidden\"\n icon=\"pi pi-palette\"\n id=\"oip-app-floating-configurator-next-button\"\n leaveActiveClass=\"animate-fadeout\"\n leaveToClass=\"hidden\"\n pStyleClass=\"@next\"\n type=\"button\"\n [hideOnOutsideClick]=\"true\"\n [rounded]=\"true\" />\n <app-configurator />\n </div>\n </div>\n `\n})\nexport class AppFloatingConfiguratorComponent {\n LayoutService = inject(LayoutService);\n\n isDarkTheme = computed(() => this.LayoutService.layoutConfig().darkTheme);\n\n toggleDarkMode() {\n this.LayoutService.layoutConfig.update((state) => ({\n ...state,\n darkTheme: !state.darkTheme\n }));\n }\n}\n","import { Component } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { LogoComponent } from '../logo/logo.component';\nimport { Button } from 'primeng/button';\nimport { AppFloatingConfiguratorComponent } from '../app-floating-configurator/app-floating-configurator.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/notfound.en.json';\nimport ru from './l10n/notfound.ru.json';\n\n@Component({\n selector: 'app-notfound',\n template: ` <app-floating-configurator />\n <div class=\"flex items-center justify-center min-h-screen overflow-hidden\">\n <div class=\"flex flex-col items-center justify-center\">\n <div\n style=\"border-radius: 56px; padding: 0.3rem; background: linear-gradient(180deg, color-mix(in srgb, var(--primary-color), transparent 60%) 10%, var(--surface-ground) 30%)\">\n <div\n class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20 flex flex-col items-center\"\n style=\"border-radius: 53px\">\n <div class=\"flex flex-col items-center justify-center\">\n <logo [height]=\"96\" [width]=\"96\"></logo>\n </div>\n <span class=\"text-primary font-bold text-3xl\">{{ 'notfound.errorCode' | translate }}</span>\n <h1 class=\"text-surface-900 dark:text-surface-0 font-bold text-3xl lg:text-5xl mb-2\">\n {{ 'notfound.title' | translate }}\n </h1>\n <div class=\"text-surface-600 dark:text-surface-200 mb-8\">{{ 'notfound.description' | translate }}</div>\n <p-button id=\"oip-app-notfound-go-to-home-button\" routerLink=\"/\" [label]=\"'notfound.button' | translate\" />\n </div>\n </div>\n </div>\n </div>`,\n imports: [RouterLink, LogoComponent, Button, AppFloatingConfiguratorComponent, TranslateModule],\n standalone: true\n})\nexport class NotfoundComponent {\n private readonly translations = provideTranslations({ en, ru });\n}\n","import { Component, OnInit, inject } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { RippleModule } from 'primeng/ripple';\r\nimport { LogoComponent } from '../../logo/logo.component';\r\nimport { BffSecurityService, SecurityService } from '../../../services/security.service';\r\nimport { AppFloatingConfiguratorComponent } from '../../app-floating-configurator/app-floating-configurator.component';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { provideTranslations } from '../../../helpers/l10n.helper';\r\n\r\nimport en from './l10n/unauthorized.en.json';\r\nimport ru from './l10n/unauthorized.ru.json';\r\n\r\n@Component({\r\n template: `\r\n <app-floating-configurator />\r\n <div\r\n class=\"bg-surface-50 dark:bg-surface-950 flex items-center justify-center min-h-screen min-w-[100vw] overflow-hidden\">\r\n <div class=\"flex flex-col items-center justify-center\">\r\n <div\r\n style=\"border-radius: 56px; padding: 0.3rem; background: linear-gradient(180deg, var(--primary-color) 10%, rgba(33, 150, 243, 0) 30%)\">\r\n <div class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20\" style=\"border-radius: 53px\">\r\n <div class=\"flex flex-col items-center justify-center\">\r\n <logo [height]=\"96\" [width]=\"96\" />\r\n </div>\r\n <div class=\"text-center mb-8\">\r\n <div class=\"text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4\">\r\n {{ 'unauthorized.welcomeToOip' | translate }}\r\n </div>\r\n <span class=\"text-muted-color font-medium\">{{ 'unauthorized.signInToContinue' | translate }}</span>\r\n </div>\r\n <div>\r\n <p-button\r\n id=\"oip-unauthorized-error-sign-in-button\"\r\n label=\"{{ 'unauthorized.signIn' | translate }}\"\r\n styleClass=\"w-full\"\r\n (click)=\"signIn()\"></p-button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n imports: [\r\n ButtonModule,\r\n RippleModule,\r\n LogoComponent,\r\n AppFloatingConfiguratorComponent,\r\n ReactiveFormsModule,\r\n TranslatePipe\r\n ]\r\n})\r\nexport class UnauthorizedComponent implements OnInit {\r\n private readonly translations = provideTranslations({ en, ru });\r\n\r\n protected readonly securityService = inject(SecurityService);\r\n private readonly route = inject(ActivatedRoute);\r\n\r\n ngOnInit(): void {\r\n const returnUrl = sessionStorage.getItem(BffSecurityService.authorizeAfterLogoutReturnUrlKey);\r\n if (!returnUrl) {\r\n return;\r\n }\r\n\r\n sessionStorage.removeItem(BffSecurityService.authorizeAfterLogoutReturnUrlKey);\r\n this.securityService.authorize(returnUrl);\r\n }\r\n\r\n protected signIn(): void {\r\n const returnUrl = this.route.snapshot.queryParamMap.get('returnUrl') || '/';\r\n this.securityService.authorize(returnUrl);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { ButtonModule } from 'primeng/button';\nimport { RippleModule } from 'primeng/ripple';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { provideTranslations } from '../../../helpers/l10n.helper';\n\nimport en from './l10n/access.en.json';\nimport ru from './l10n/access.ru.json';\n\n@Component({\n selector: 'app-access',\n template: `<div\n class=\"surface-ground flex align-items-center justify-content-center min-h-screen min-w-screen overflow-hidden\">\n <div class=\"flex flex-column align-items-center justify-content-center\">\n <img alt=\"Sakai logo\" class=\"mb-5 w-6rem flex-shrink-0\" src=\"assets/demo/images/access/logo-orange.svg\" />\n <div\n style=\"border-radius:56px; padding:0.3rem; background: linear-gradient(180deg, rgba(247, 149, 48, 0.4) 10%, rgba(247, 149, 48, 0) 30%);\">\n <div\n class=\"w-full surface-card py-8 px-5 sm:px-8 flex flex-column align-items-center\"\n style=\"border-radius:53px\">\n <div class=\"grid flex-column align-items-center\">\n <div\n class=\"flex justify-content-center align-items-center bg-orange-500 border-circle\"\n style=\"width:3.2rem; height:3.2rem;\">\n <i class=\"text-50 pi pi-fw pi-lock text-2xl\"></i>\n </div>\n <h1 class=\"text-900 font-bold text-4xl lg:text-5xl mb-2\">{{ 'access.title' | translate }}</h1>\n <span class=\"text-600 mb-5\">{{ 'access.message' | translate }}</span>\n <img alt=\"Access denied\" class=\"mb-5\" src=\"assets/demo/images/access/asset-access.svg\" width=\"80%\" />\n <p-button\n class=\"p-button-text\"\n icon=\"pi pi-arrow-left\"\n id=\"oip-app-access-go-to-dashboard-button\"\n pButton\n pRipple\n [label]=\"'access.button' | translate\"\n [routerLink]=\"['/']\"></p-button>\n </div>\n </div>\n </div>\n </div>\n </div>`,\n imports: [RouterLink, ButtonModule, RippleModule, TranslatePipe],\n standalone: true\n})\nexport class AccessComponent {\n private readonly translations = provideTranslations({ en, ru });\n}\n","import { Component } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { RippleModule } from 'primeng/ripple';\nimport { RouterLink } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { provideTranslations } from '../../../helpers/l10n.helper';\n\nimport en from './l10n/error.en.json';\nimport ru from './l10n/error.ru.json';\n\n@Component({\n selector: 'app-error',\n template: `<div\n class=\"surface-ground flex align-items-center justify-content-center min-h-screen min-w-screen overflow-hidden\">\n <div class=\"flex flex-column align-items-center justify-content-center\">\n <img alt=\"Sakai logo\" class=\"mb-5 w-6rem flex-shrink-0\" src=\"assets/demo/images/error/logo-error.svg\" />\n <div\n style=\"border-radius:56px; padding:0.3rem; background: linear-gradient(180deg, rgba(233, 30, 99, 0.4) 10%, rgba(33, 150, 243, 0) 30%);\">\n <div\n class=\"w-full surface-card py-8 px-5 sm:px-8 flex flex-column align-items-center\"\n style=\"border-radius:53px\">\n <div class=\"grid flex flex-column align-items-center\">\n <div\n class=\"flex justify-content-center align-items-center bg-pink-500 border-circle\"\n style=\"height:3.2rem; width:3.2rem;\">\n <i class=\"pi pi-fw pi-exclamation-circle text-2xl text-white\"></i>\n </div>\n <h1 class=\"text-900 font-bold text-5xl mb-2\">{{ 'error.title' | translate }}</h1>\n <span class=\"text-600 mb-5\">{{ 'error.message' | translate }}</span>\n <img alt=\"Error\" class=\"mb-5\" src=\"assets/demo/images/error/asset-error.svg\" width=\"80%\" />\n <button\n class=\"p-button-text\"\n icon=\"pi pi-arrow-left\"\n id=\"oip-app-error-go-to-dashboard-button\"\n pButton\n pRipple\n [label]=\"'error.button' | translate\"\n [routerLink]=\"['/']\"></button>\n </div>\n </div>\n </div>\n </div>\n </div>`,\n standalone: true,\n imports: [ButtonModule, RippleModule, RouterLink, TranslatePipe]\n})\nexport class ErrorComponent {\n private readonly translations = provideTranslations({ en, ru });\n}\n","import { Component, inject } from '@angular/core';\nimport { FileUploadModule } from 'primeng/fileupload';\nimport { ImageModule } from 'primeng/image';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ButtonModule } from 'primeng/button';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { ConfirmationService } from 'primeng/api';\nimport { MsgService } from '../../services/msg.service';\nimport { UserService } from '../../services/user.service';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { UserProfileApi } from '../../api/user-profile.api';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/profile.en.json';\nimport ru from './l10n/profile.ru.json';\n\n@Component({\n selector: 'user-profile',\n standalone: true,\n imports: [FileUploadModule, ImageModule, AvatarModule, ButtonModule, ConfirmDialog, TranslatePipe],\n providers: [ConfirmationService],\n template: `\n <p-confirmDialog></p-confirmDialog>\n <p-avatar\n class=\"mr-2\"\n id=\"oip-user-profile-photo-avatar\"\n shape=\"circle\"\n size=\"xlarge\"\n [image]=\"userService.photoLoaded ? userService.photo : null\" />\n <div class=\"mt-2 flex gap-2\">\n <p-fileupload\n accept=\"image/*\"\n chooseIcon=\"pi pi-upload\"\n chooseLabel=\"{{ 'profileComponent.changePhoto' | translate }}\"\n id=\"oip-user-profile-file-upload\"\n maxFileSize=\"1000000\"\n mode=\"basic\"\n name=\"files\"\n [auto]=\"true\"\n [customUpload]=\"true\"\n (uploadHandler)=\"uploadPhoto($event)\" />\n @if (userService.photoLoaded) {\n <p-button\n icon=\"pi pi-trash\"\n id=\"oip-user-profile-delete-photo\"\n label=\"{{ 'profileComponent.deletePhoto' | translate }}\"\n severity=\"danger\"\n [outlined]=\"true\"\n (onClick)=\"confirmDeletePhoto($event)\" />\n }\n </div>\n `\n})\nexport class UserProfileComponent {\n private readonly translations = provideTranslations({ en, ru });\n\n readonly userService = inject(UserService);\n readonly msgService = inject(MsgService);\n readonly translateService = inject(TranslateService);\n readonly userProfileApi = inject(UserProfileApi);\n private readonly confirmationService = inject(ConfirmationService);\n\n async uploadPhoto(event: any): Promise<void> {\n const file = event.files?.[0];\n if (!file) {\n return;\n }\n\n try {\n await this.userProfileApi.postUserPhoto({ files: file });\n this.userService.refreshUserPhoto();\n this.msgService.success(this.translateService.instant('profileComponent.successfullyUploaded'));\n } catch (error) {\n this.msgService.error(error);\n }\n }\n\n confirmDeletePhoto(event: Event): void {\n this.confirmationService.confirm({\n target: event.target as EventTarget,\n header: this.translateService.instant('profileComponent.deletePhotoConfirmHeader'),\n message: this.translateService.instant('profileComponent.deletePhotoConfirmMessage'),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.translateService.instant('profileComponent.deletePhotoConfirmRejectButtonPropsLabel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.translateService.instant('profileComponent.deletePhotoConfirmAcceptButtonPropsLabel'),\n severity: 'danger'\n },\n accept: async () => {\n await this.deletePhoto();\n }\n });\n }\n\n private async deletePhoto(): Promise<void> {\n try {\n await this.userProfileApi.deleteUserPhoto();\n this.userService.refreshUserPhoto();\n this.msgService.success(this.translateService.instant('profileComponent.photoDeleted'));\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('profileComponent.failedToDeletePhoto'));\n }\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { UserProfileComponent } from '../user-profile/user-profile.component';\nimport { Tooltip } from 'primeng/tooltip';\nimport { FormsModule } from '@angular/forms';\nimport { Select } from 'primeng/select';\nimport { TableModule } from 'primeng/table';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { UserService } from '../../services/user.service';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\nimport { RouterLink } from '@angular/router';\nimport { SecurityService } from '../../services/security.service';\nimport { MenuService } from '../../services/app.menu.service';\nimport { Button } from 'primeng/button';\nimport { L10nService } from '../../services/l10n.service';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/config.en.json';\nimport ru from './l10n/config.ru.json';\n\n@Component({\n selector: 'app-config',\n template: `\n <div class=\"flex flex-col md:flex-row gap-4\">\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ 'config.profile' | translate }}</div>\n <div class=\"flex justify-content-end flex-wrap\">\n {{ userService.userName }}\n </div>\n <label>\n {{ 'config.photo' | translate }}\n <span\n class=\"pi pi-question-circle\"\n pTooltip=\"{{ 'config.usePhoto256x256Pixel' | translate }}\"\n tooltipPosition=\"right\"></span>\n </label>\n <div class=\"flex justify-content-end flex-wrap\">\n <user-profile></user-profile>\n </div>\n </div>\n </div>\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ 'config.localization' | translate }}</div>\n <label> {{ 'config.selectLanguage' | translate }} </label>\n <div class=\"flex justify-content-end flex-wrap\">\n <p-select\n class=\"w-full md:w-56\"\n optionLabel=\"name\"\n optionValue=\"code\"\n qa-id=\"oip-app-config-language-select\"\n [options]=\"l10nService.availableLanguages\"\n [(ngModel)]=\"selectedLanguage\"\n (onChange)=\"changeLanguage()\">\n <ng-template #selectedItem let-selectedOption>\n <div class=\"flex items-center gap-2\">\n <span [class]=\"selectedOption.icon\"></span>\n <div>{{ selectedOption.name }}</div>\n </div>\n </ng-template>\n <ng-template #item let-languages>\n <div class=\"flex items-center gap-2\">\n <span [class]=\"languages.icon\"></span>\n <div>{{ languages.name }}</div>\n </div>\n </ng-template>\n </p-select>\n </div>\n <div class=\"flex flex-col gap-5\">\n <div class=\"mt-5\">{{ 'config.dateTimeFormat' | translate }}</div>\n <p-select\n class=\"w-full md:w-56\"\n qa-id=\"oip-app-config-date-format-select\"\n [options]=\"dateFormats\"\n [placeholder]=\"'config.dateFormat' | translate\"\n [(ngModel)]=\"selectedDateFormat\"\n (onChange)=\"changeDateFormat()\" />\n <p-select\n class=\"w-full md:w-56\"\n qa-id=\"oip-app-config-time-format-select\"\n [options]=\"timeFormats\"\n [placeholder]=\"'config.timeFormat' | translate\"\n [(ngModel)]=\"selectedTimeFormat\"\n (onChange)=\"changeTimeFormat()\" />\n <div class=\"mt-5\">{{ 'config.timeZone' | translate }}</div>\n <p-select\n class=\"w-full md:w-56\"\n qa-id=\"oip-app-config-timezone-select\"\n [filter]=\"true\"\n [options]=\"allTimeZones\"\n [placeholder]=\"'config.timeZone' | translate\"\n [virtualScroll]=\"true\"\n [virtualScrollItemSize]=\"34\"\n [(ngModel)]=\"selectedTimeZone\"\n (onChange)=\"changeTimeZone()\" />\n </div>\n </div>\n </div>\n @if (securityService.isAdmin()) {\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ 'config.menu' | translate }}</div>\n <div class=\"flex items-center gap-2\">\n <label for=\"oip-app-config-admin-mode\">{{ 'config.all' | translate }}</label>\n <p-toggle-switch\n id=\"oip-app-config-admin-mode\"\n [(ngModel)]=\"menuService.adminMode\"\n (onChange)=\"onSwitchChange()\"></p-toggle-switch>\n </div>\n <div class=\"flex items-center gap-2\">\n <label for=\"oip-app-config-admin-mode\">{{ 'config.moduleManagement' | translate }}</label>\n <p-button icon=\"pi pi-cog\" label=\"{{ 'config.goTo' | translate }}\" routerLink=\"/modules\" />\n </div>\n <div class=\"flex items-center gap-2\">\n <label for=\"oip-app-config-applications-link\">{{ 'config.applicationManagement' | translate }}</label>\n <p-button\n icon=\"pi pi-th-large\"\n id=\"oip-app-config-applications-link\"\n label=\"{{ 'config.goTo' | translate }}\"\n routerLink=\"/applications\" />\n </div>\n </div>\n </div>\n }\n </div>\n `,\n imports: [\n UserProfileComponent,\n Tooltip,\n FormsModule,\n Select,\n TableModule,\n TranslatePipe,\n ToggleSwitchModule,\n Button,\n RouterLink\n ]\n})\nexport class ConfigComponent {\n private readonly translations = provideTranslations({ en, ru });\n\n private readonly layoutService = inject(LayoutService);\n protected readonly l10nService = inject(L10nService);\n protected readonly userService = inject(UserService);\n protected readonly securityService = inject(SecurityService);\n protected readonly menuService = inject(MenuService);\n protected readonly dateFormats: string[] = ['dd.MM.yyyy', 'dd.MM.yy', 'yyyy-MM-dd', 'dd.MMM.yyyy'];\n protected readonly timeFormats: string[] = ['HH:mm:ss', 'HH:mm'];\n // @ts-ignore\n protected readonly allTimeZones: any[] = Intl.supportedValuesOf('timeZone');\n\n protected selectedLanguage: any;\n protected selectedDateFormat: string;\n protected selectedTimeFormat: string;\n protected selectedTimeZone: string;\n\n constructor() {\n this.selectedLanguage = this.layoutService.language();\n this.selectedDateFormat = this.layoutService.dateFormat();\n this.selectedTimeFormat = this.layoutService.timeFormat();\n this.selectedTimeZone = this.layoutService.timeZone();\n }\n\n changeLanguage() {\n this.layoutService.layoutConfig.update((config) => ({\n ...config,\n language: this.selectedLanguage\n }));\n this.l10nService.use(this.selectedLanguage, 'config');\n }\n\n changeDateFormat() {\n this.layoutService.layoutConfig.update((config) => ({ ...config, dateFormat: this.selectedDateFormat }));\n }\n\n changeTimeFormat() {\n this.layoutService.layoutConfig.update((config) => ({ ...config, timeFormat: this.selectedTimeFormat }));\n }\n\n changeTimeZone() {\n this.layoutService.layoutConfig.update((config) => ({ ...config, timeZone: this.selectedTimeZone }));\n }\n\n async onSwitchChange(): Promise<void> {\n await this.menuService.loadMenu();\n }\n}\n","import { Component, inject, OnDestroy, OnInit } from '@angular/core';\nimport { TagModule } from 'primeng/tag';\nimport { ConfirmationService, SharedModule } from 'primeng/api';\nimport { TableModule } from 'primeng/table';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { TextareaModule } from 'primeng/textarea';\nimport { ButtonModule } from 'primeng/button';\nimport { FormsModule } from '@angular/forms';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { Tooltip } from 'primeng/tooltip';\nimport { BaseModuleComponent } from '../base-module/base-module.component';\nimport { NoSettingsDto } from '../../dtos/no-settings.dto';\nimport { SecurityComponent } from '../security/security.component';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { provideTranslations } from '../../helpers/l10n.helper';\nimport en from './l10n/db-migration.en.json';\nimport ru from './l10n/db-migration.ru.json';\n\nexport interface MigrationDto {\n name: string;\n applied: boolean;\n pending: boolean;\n exist: boolean;\n}\n\nexport interface ApplyMigrationRequest {\n name: string;\n}\n\n@Component({\n imports: [\n TableModule,\n SharedModule,\n TagModule,\n InputTextModule,\n TextareaModule,\n ButtonModule,\n FormsModule,\n ConfirmDialog,\n SecurityComponent,\n Tooltip,\n TranslatePipe\n ],\n selector: 'db-migration',\n template: `\n @if (isContent) {\n <div class=\"card\" style=\"height: 100%\">\n <p-confirmDialog />\n <div>\n <h5>{{ 'db-migration.migrationManager' | translate }}</h5>\n <div class=\"flex flex-row gap-2\">\n <p-button\n icon=\"pi pi-refresh\"\n severity=\"secondary\"\n tooltipPosition=\"bottom\"\n [outlined]=\"true\"\n [pTooltip]=\"'db-migration.actions.refresh' | translate\"\n (click)=\"refreshAction()\" />\n <p-button\n icon=\"pi pi-filter-slash\"\n severity=\"secondary\"\n tooltipPosition=\"bottom\"\n [outlined]=\"true\"\n [pTooltip]=\"'db-migration.actions.cleanFilter' | translate\"\n (click)=\"dt.clear()\" />\n </div>\n <div>\n <p-table #dt dataKey=\"name\" editMode=\"row\" size=\"small\" [scrollable]=\"true\" [value]=\"data\">\n <ng-template let-columns pTemplate=\"header\">\n <tr>\n <th pSortableColumn=\"name\" scope=\"col\">\n {{ 'db-migration.columns.name' | translate }}\n <p-columnFilter display=\"menu\" field=\"name\" type=\"text\" />\n </th>\n <th scope=\"col\">{{ 'db-migration.columns.applied' | translate }}</th>\n <th scope=\"col\">{{ 'db-migration.columns.exist' | translate }}</th>\n <th scope=\"col\">{{ 'db-migration.columns.pending' | translate }}</th>\n <th scope=\"col\"></th>\n </tr>\n </ng-template>\n\n <ng-template #body let-columns=\"columns\" let-editing=\"editing\" let-ri=\"rowIndex\" let-rowData>\n <tr [pEditableRow]=\"rowData\">\n <td>\n {{ rowData.name }}\n </td>\n <td>\n @if (rowData.applied) {\n <p-button icon=\"pi pi-check\" severity=\"success\" [rounded]=\"true\" [text]=\"true\"></p-button>\n }\n </td>\n <td>\n @if (rowData.exist) {\n <p-button icon=\"pi pi-check\" severity=\"success\" [rounded]=\"true\" [text]=\"true\" />\n }\n </td>\n <td>\n @if (rowData.pending) {\n <p-button icon=\"pi pi-check\" severity=\"success\" [rounded]=\"true\" [text]=\"true\"></p-button>\n }\n </td>\n <td>\n <p-button\n icon=\"pi pi-bolt\"\n pCancelEditableRow\n pTooltip=\"{{ 'db-migration.actions.applyMigration' | translate }}\"\n severity=\"secondary\"\n tooltipPosition=\"left\"\n [rounded]=\"true\"\n [text]=\"true\"\n (click)=\"applyMigration(rowData)\">\n </p-button>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n </div>\n } @else if (isSecurity) {\n <security [controller]=\"controller\" [id]=\"id\" />\n }\n `,\n providers: [ConfirmationService]\n})\nexport class DbMigrationComponent\n extends BaseModuleComponent<NoSettingsDto, NoSettingsDto>\n implements OnInit, OnDestroy\n{\n private readonly translations = provideTranslations({ en, ru });\n\n data: MigrationDto[];\n\n async ngOnInit() {\n await super.ngOnInit();\n await this.refreshAction();\n }\n\n async refreshAction() {\n this.getData()\n .then((response) => {\n this.data = response;\n })\n .catch((error) => {\n console.log(error);\n this.msgService.error(this.l10nService.instant('db-migration.messages.errorRefreshing'));\n });\n }\n\n async getData() {\n return this.getMigrations<MigrationDto>();\n }\n\n async applyMigration(rowData: MigrationDto) {\n const request = { name: rowData.name } as ApplyMigrationRequest;\n return this.applyModuleMigration(request);\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n ApiExceptionResponse,\n DeleteExtensionModuleParams,\n GetExtensionModuleByKeyParams,\n ModuleDto,\n RegisterExtensionModuleRequest,\n UpdateExtensionModuleParams,\n UpdateExtensionModuleRequest,\n} from \"./data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class ExtensionModulesApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getExtensionModules = (params: RequestParams = {}) =>\n this.request<ModuleDto[], ApiExceptionResponse>({\n path: `/api/extension-modules/get-extension-modules`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n getExtensionModuleByKey = (\n { extensionKey, ...query }: GetExtensionModuleByKeyParams,\n params: RequestParams = {},\n ) =>\n this.request<ModuleDto, ApiExceptionResponse>({\n path: `/api/extension-modules/get-extension-module-by-key/${extensionKey}`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n registerExtensionModule = (\n data: RegisterExtensionModuleRequest,\n params: RequestParams = {},\n ) =>\n this.request<ModuleDto, ApiExceptionResponse>({\n path: `/api/extension-modules/register-extension-module`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n updateExtensionModule = (\n { id, ...query }: UpdateExtensionModuleParams,\n data: UpdateExtensionModuleRequest,\n params: RequestParams = {},\n ) =>\n this.request<ModuleDto, ApiExceptionResponse>({\n path: `/api/extension-modules/update-extension-module/${id}`,\n method: \"PUT\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n deleteExtensionModule = (\n { id, ...query }: DeleteExtensionModuleParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/extension-modules/delete-extension-module/${id}`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n ApiExceptionResponse,\n ExistModuleDto,\n ModuleDeleteRequest,\n ModuleDto,\n} from \"./data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class ModuleApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getAll = (params: RequestParams = {}) =>\n this.request<ModuleDto[], ApiExceptionResponse>({\n path: `/api/module/get-all`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n insert = (data: ModuleDto, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/module/insert`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n delete = (data: ModuleDeleteRequest, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/module/delete`,\n method: \"DELETE\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n getModulesWithLoadStatus = (params: RequestParams = {}) =>\n this.request<ExistModuleDto[], ApiExceptionResponse>({\n path: `/api/module/get-modules-with-load-status`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { Tooltip } from 'primeng/tooltip';\nimport { FormsModule } from '@angular/forms';\nimport { TableModule } from 'primeng/table';\nimport { Tag } from 'primeng/tag';\nimport { ButtonModule } from 'primeng/button';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { MsgService } from '../../services/msg.service';\nimport { ConfirmationService } from 'primeng/api';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { L10nService } from '../../services/l10n.service';\nimport { ExtensionModulesApi } from '../../api/extension-modules.api';\nimport { ModuleApi } from '../../api/module.api';\nimport { ExistModuleDto } from '../../api/data-contracts';\nimport { AppTitleService } from '../../services/app-title.service';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { firstValueFrom } from 'rxjs';\n\nimport en from './l10n/app-modules.en.json';\nimport ru from './l10n/app-modules.ru.json';\n\nL10nService.registerTranslations({ en, ru });\n\n@Component({\n imports: [\n FormsModule,\n TableModule,\n Tag,\n ButtonModule,\n ToolbarModule,\n Tooltip,\n ConfirmDialog,\n TranslatePipe,\n InputTextModule\n ],\n providers: [ConfirmationService, ModuleApi, ExtensionModulesApi],\n selector: 'app-modules',\n template: `\n <p-confirmDialog></p-confirmDialog>\n <div class=\"flex flex-col md:flex-row gap-4\">\n <div class=\"card w-full\">\n <div class=\"font-semibold text-xl mb-4\">\n {{ 'app-modules.title' | translate }}\n </div>\n <div class=\"mb-4\">\n <p-toolbar>\n <div class=\"flex flex-col md:flex-row md:items-center gap-2 w-full\">\n <div class=\"flex flex-col sm:flex-row gap-2 flex-1\">\n <input\n class=\"w-full\"\n pInputText\n type=\"url\"\n [disabled]=\"registeringExternalModule\"\n [placeholder]=\"'app-modules.register.manifestUrlPlaceholder' | translate\"\n [(ngModel)]=\"externalModuleManifestUrl\"\n (keydown.enter)=\"registerExternalModule()\" />\n <p-button\n icon=\"pi pi-plus\"\n severity=\"success\"\n [disabled]=\"!canRegisterExternalModule\"\n [label]=\"'app-modules.register.button' | translate\"\n [loading]=\"registeringExternalModule\"\n (onClick)=\"registerExternalModule()\"></p-button>\n </div>\n <p-button\n icon=\"pi pi-refresh\"\n rounded=\"true\"\n severity=\"secondary\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [pTooltip]=\"'app-modules.refreshTooltip' | translate\"\n (onClick)=\"refreshAction()\"></p-button>\n </div>\n </p-toolbar>\n </div>\n <p-table class=\"mt-4\" [paginator]=\"true\" [rows]=\"100\" [value]=\"modules\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th>{{ 'app-modules.table.moduleId' | translate }}</th>\n <th>{{ 'app-modules.table.name' | translate }}</th>\n <th>{{ 'app-modules.table.currentlyLoaded' | translate }}</th>\n <th style=\"width: 4rem\"></th>\n </tr>\n </ng-template>\n <ng-template let-module pTemplate=\"body\">\n <tr>\n <td>{{ module.moduleId }}</td>\n <td>{{ module.name }}</td>\n <td>\n <p-tag\n [severity]=\"module.currentlyLoaded ? 'success' : 'danger'\"\n [value]=\"\n (module.currentlyLoaded ? 'app-modules.table.yes' : 'app-modules.table.no') | translate\n \"></p-tag>\n </td>\n <td>\n <p-button\n icon=\"pi pi-trash\"\n rounded=\"true\"\n severity=\"danger\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [pTooltip]=\"'app-modules.table.deleteTooltip' | translate\"\n (onClick)=\"deleteModule(module)\"></p-button>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n `\n})\nexport class AppModulesComponent implements OnInit {\n protected modules: ExistModuleDto[] = [];\n protected msgService = inject(MsgService);\n protected confirmationService = inject(ConfirmationService);\n protected l10nService = inject(L10nService);\n protected titleService = inject(AppTitleService);\n protected externalModuleManifestUrl = '';\n protected registeringExternalModule = false;\n private moduleService = inject(ModuleApi);\n private extensionModulesService = inject(ExtensionModulesApi);\n private translationsReady: Promise<unknown>;\n\n constructor() {\n this.translationsReady = firstValueFrom(this.l10nService.loadComponentTranslations('app-modules'));\n }\n\n async ngOnInit() {\n await this.translationsReady;\n this.titleService.setTitle(this.t('app-modules.title'));\n await this.refreshAction();\n }\n\n async refreshAction() {\n this.modules = await this.moduleService.getModulesWithLoadStatus();\n }\n\n protected get canRegisterExternalModule() {\n return !!this.externalModuleManifestUrl.trim() && !this.registeringExternalModule;\n }\n\n async registerExternalModule() {\n if (!this.canRegisterExternalModule) {\n return;\n }\n\n await this.translationsReady;\n this.registeringExternalModule = true;\n\n try {\n await this.extensionModulesService.registerExtensionModule({\n manifestUrl: this.externalModuleManifestUrl.trim()\n });\n this.externalModuleManifestUrl = '';\n await this.refreshAction();\n this.msgService.success(this.t('app-modules.messages.registerSuccess'));\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.t('app-modules.messages.registerError'),\n this.t('app-modules.messages.registerError')\n );\n } finally {\n this.registeringExternalModule = false;\n }\n }\n\n async deleteModule(module: ExistModuleDto) {\n await this.translationsReady;\n\n this.confirmationService.confirm({\n header: this.t('app-modules.confirm.header'),\n message: this.t('app-modules.confirm.message'),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.t('app-modules.confirm.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.t('app-modules.confirm.delete'),\n severity: 'danger'\n },\n accept: async () => {\n try {\n await this.moduleService.delete({\n moduleId: module.moduleId\n });\n await this.refreshAction();\n this.msgService.success(this.t('app-modules.messages.deleteSuccess'));\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.t('app-modules.messages.deleteError'),\n this.t('app-modules.messages.deleteError')\n );\n }\n }\n });\n }\n\n t(key: string) {\n return this.l10nService.instant(key);\n }\n}\n","export enum ServiceType {\n Service = \"Service\",\n Application = \"Application\",\n}\n\nexport interface ApiExceptionResponse {\n title?: string | null;\n message?: string | null;\n statusCode?: number;\n stackTrace?: string | null;\n}\n\nexport interface ApplicationRegistryItemDto {\n code?: string | null;\n displayName?: string | null;\n baseUrl?: string | null;\n internalBaseUrl?: string | null;\n icon?: string | null;\n order?: number;\n enabled?: boolean;\n serviceType?: ServiceType;\n isCurrent?: boolean;\n}\n\nexport interface GetApplicationRegistryItemByCodeParams {\n code: string;\n}\n\nexport interface UpdateApplicationRegistryItemParams {\n code: string;\n}\n\nexport interface DeleteApplicationRegistryItemParams {\n code: string;\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ConfirmationService } from 'primeng/api';\nimport { ButtonModule } from 'primeng/button';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { InputText } from 'primeng/inputtext';\nimport { SelectModule } from 'primeng/select';\nimport { TableModule } from 'primeng/table';\nimport { Tag } from 'primeng/tag';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { Tooltip } from 'primeng/tooltip';\nimport { firstValueFrom } from 'rxjs';\nimport { ApplicationsApi } from '../../api/applications.api';\nimport { ApplicationRegistryItemDto, ServiceType } from '../../api/applications-data-contracts';\nimport { AppTitleService } from '../../services/app-title.service';\nimport { L10nService } from '../../services/l10n.service';\nimport { MsgService } from '../../services/msg.service';\n\nimport en from './l10n/applications.en.json';\nimport ru from './l10n/applications.ru.json';\n\nL10nService.registerTranslations({ en, ru });\n\ninterface ApplicationEditModel {\n code: string;\n displayName: string;\n baseUrl: string;\n internalBaseUrl: string;\n icon: string;\n order: number;\n enabled: boolean;\n serviceType: NonNullable<ApplicationRegistryItemDto['serviceType']>;\n}\n\ninterface ApplicationTableItem extends ApplicationRegistryItemDto {\n _isEditing?: boolean;\n _isNew?: boolean;\n _editModel?: ApplicationEditModel;\n}\n\n@Component({\n imports: [\n FormsModule,\n TableModule,\n Tag,\n ButtonModule,\n ToolbarModule,\n Tooltip,\n ConfirmDialog,\n TranslatePipe,\n InputText,\n SelectModule,\n ToggleSwitchModule\n ],\n providers: [ApplicationsApi, ConfirmationService],\n selector: 'app-applications',\n template: `\n <p-confirmDialog></p-confirmDialog>\n <div class=\"flex flex-col gap-4\">\n <div class=\"card w-full\">\n <div class=\"flex flex-col gap-3 md:flex-row md:items-center md:justify-between\">\n <div>\n <div class=\"font-semibold text-xl mb-1\">\n {{ 'applications.title' | translate }}\n </div>\n <p class=\"m-0 text-surface-500\">{{ 'applications.subtitle' | translate }}</p>\n </div>\n <div class=\"flex flex-col gap-2 sm:flex-row\">\n <input\n class=\"w-full sm:w-72\"\n pInputText\n type=\"text\"\n [placeholder]=\"'applications.searchPlaceholder' | translate\"\n [(ngModel)]=\"globalFilter\"\n (keydown.enter)=\"applyGlobalFilter()\" />\n <p-button\n icon=\"pi pi-search\"\n [label]=\"'applications.search' | translate\"\n (onClick)=\"applyGlobalFilter()\"></p-button>\n <p-button\n icon=\"pi pi-filter-slash\"\n severity=\"secondary\"\n [label]=\"'applications.clear' | translate\"\n (onClick)=\"clearFilters()\"></p-button>\n </div>\n </div>\n\n <div class=\"my-4\">\n <p-toolbar>\n <p-button\n icon=\"pi pi-plus\"\n severity=\"success\"\n [disabled]=\"loading || activeRowAction\"\n [label]=\"'applications.add' | translate\"\n (onClick)=\"beginCreateApplication()\"></p-button>\n <p-button\n icon=\"pi pi-refresh\"\n rounded=\"true\"\n severity=\"secondary\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"loading || activeRowAction\"\n [pTooltip]=\"'applications.refreshTooltip' | translate\"\n (onClick)=\"refreshAction()\"></p-button>\n </p-toolbar>\n </div>\n\n <p-table\n #table\n dataKey=\"code\"\n responsiveLayout=\"scroll\"\n [globalFilterFields]=\"globalFilterFields\"\n [loading]=\"loading\"\n [paginator]=\"true\"\n [rows]=\"25\"\n [rowsPerPageOptions]=\"[10, 25, 50, 100]\"\n [value]=\"visibleApplications\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th pSortableColumn=\"code\">\n {{ 'applications.table.code' | translate }}\n <p-sortIcon field=\"code\"></p-sortIcon>\n </th>\n <th pSortableColumn=\"displayName\">\n {{ 'applications.table.displayName' | translate }}\n <p-sortIcon field=\"displayName\"></p-sortIcon>\n </th>\n <th pSortableColumn=\"baseUrl\">\n {{ 'applications.table.baseUrl' | translate }}\n <p-sortIcon field=\"baseUrl\"></p-sortIcon>\n </th>\n <th pSortableColumn=\"internalBaseUrl\">\n {{ 'applications.table.internalBaseUrl' | translate }}\n <p-sortIcon field=\"internalBaseUrl\"></p-sortIcon>\n </th>\n <th pSortableColumn=\"icon\">\n {{ 'applications.table.icon' | translate }}\n <p-sortIcon field=\"icon\"></p-sortIcon>\n </th>\n <th class=\"text-right\" pSortableColumn=\"order\">\n {{ 'applications.table.order' | translate }}\n <p-sortIcon field=\"order\"></p-sortIcon>\n </th>\n <th class=\"text-center\">{{ 'applications.table.enabled' | translate }}</th>\n <th pSortableColumn=\"serviceType\">\n {{ 'applications.table.serviceType' | translate }}\n <p-sortIcon field=\"serviceType\"></p-sortIcon>\n </th>\n <th class=\"text-center\">{{ 'applications.table.current' | translate }}</th>\n <th class=\"text-center min-w-36\">{{ 'applications.table.actions' | translate }}</th>\n </tr>\n </ng-template>\n\n <ng-template let-application pTemplate=\"body\">\n <tr>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input\n class=\"w-full min-w-32\"\n pInputText\n [disabled]=\"!application._isNew\"\n [(ngModel)]=\"editModel.code\" />\n } @else {\n <span class=\"font-medium\">{{ application.code }}</span>\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input class=\"w-full min-w-40\" pInputText [(ngModel)]=\"editModel.displayName\" />\n } @else {\n {{ application.displayName }}\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input class=\"w-full min-w-56\" pInputText [(ngModel)]=\"editModel.baseUrl\" />\n } @else {\n <span class=\"break-all\">{{ application.baseUrl }}</span>\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input class=\"w-full min-w-56\" pInputText [(ngModel)]=\"editModel.internalBaseUrl\" />\n } @else {\n <span class=\"break-all\">{{ application.internalBaseUrl }}</span>\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input class=\"w-full min-w-32\" pInputText [(ngModel)]=\"editModel.icon\" />\n } @else {\n <div class=\"flex items-center gap-2\">\n <i [class]=\"application.icon || 'pi pi-th-large'\"></i>\n <span>{{ application.icon }}</span>\n </div>\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input class=\"w-full min-w-24 text-right\" pInputText type=\"number\" [(ngModel)]=\"editModel.order\" />\n } @else {\n <span class=\"block text-right tabular-nums\">{{ application.order }}</span>\n }\n </td>\n <td class=\"text-center\">\n @if (application._isEditing && application._editModel; as editModel) {\n <p-toggle-switch [(ngModel)]=\"editModel.enabled\"></p-toggle-switch>\n } @else {\n <p-tag\n [severity]=\"application.enabled ? 'success' : 'danger'\"\n [value]=\"\n (application.enabled ? 'applications.table.yes' : 'applications.table.no') | translate\n \"></p-tag>\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <p-select\n appendTo=\"body\"\n class=\"w-full min-w-36\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [options]=\"serviceTypeOptions\"\n [(ngModel)]=\"editModel.serviceType\"></p-select>\n } @else {\n {{ serviceTypeLabel(application.serviceType) }}\n }\n </td>\n <td class=\"text-center\">\n <p-tag\n [severity]=\"application.isCurrent ? 'info' : 'secondary'\"\n [value]=\"\n (application.isCurrent ? 'applications.table.yes' : 'applications.table.no') | translate\n \"></p-tag>\n </td>\n <td>\n <div class=\"flex items-center justify-center gap-2\">\n @if (application._isEditing) {\n <p-button\n icon=\"pi pi-check\"\n severity=\"success\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"activeRowAction\"\n [pTooltip]=\"'applications.table.saveTooltip' | translate\"\n (onClick)=\"saveApplication(application)\"></p-button>\n <p-button\n icon=\"pi pi-times\"\n severity=\"secondary\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"activeRowAction\"\n [pTooltip]=\"'applications.table.cancelTooltip' | translate\"\n (onClick)=\"cancelEdit(application)\"></p-button>\n } @else {\n <p-button\n icon=\"pi pi-pencil\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"activeRowAction\"\n [pTooltip]=\"'applications.table.editTooltip' | translate\"\n (onClick)=\"editApplication(application)\"></p-button>\n <p-button\n icon=\"pi pi-trash\"\n severity=\"danger\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"activeRowAction\"\n [pTooltip]=\"'applications.table.deleteTooltip' | translate\"\n (onClick)=\"deleteApplication(application)\"></p-button>\n }\n </div>\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td class=\"py-8 text-center text-surface-500\" colspan=\"10\">\n {{ 'applications.empty' | translate }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n `\n})\nexport class ApplicationsComponent implements OnInit {\n protected readonly globalFilterFields = ['code', 'displayName', 'baseUrl', 'internalBaseUrl', 'icon', 'serviceType'];\n protected get serviceTypeOptions(): {\n label: string;\n value: NonNullable<ApplicationRegistryItemDto['serviceType']>;\n }[] {\n return [\n {\n label: this.t('applications.serviceTypes.service'),\n value: ServiceType.Service\n },\n {\n label: this.t('applications.serviceTypes.application'),\n value: ServiceType.Application\n }\n ];\n }\n protected applications: ApplicationTableItem[] = [];\n protected visibleApplications: ApplicationTableItem[] = [];\n protected globalFilter = '';\n protected loading = false;\n protected activeRowAction = false;\n\n private readonly applicationsApi = inject(ApplicationsApi);\n private readonly msgService = inject(MsgService);\n private readonly l10nService = inject(L10nService);\n private readonly titleService = inject(AppTitleService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly translationsReady: Promise<unknown>;\n private draftApplication: ApplicationTableItem | null = null;\n\n constructor() {\n this.translationsReady = firstValueFrom(this.l10nService.loadComponentTranslations('applications'));\n }\n\n async ngOnInit(): Promise<void> {\n await this.translationsReady;\n this.titleService.setTitle(this.t('applications.title'));\n await this.refreshAction();\n }\n\n protected async refreshAction(): Promise<void> {\n this.loading = true;\n this.cancelAllEdits();\n\n try {\n this.applications = (await this.applicationsApi.getApplicationRegistryItems()).map(\n (application: ApplicationRegistryItemDto) => ({ ...application })\n );\n this.syncVisibleApplications();\n } catch (error) {\n this.applications = [];\n this.syncVisibleApplications();\n this.msgService.error(error);\n } finally {\n this.loading = false;\n }\n }\n\n protected applyGlobalFilter(): void {\n this.visibleApplications = this.filterApplications(this.globalFilter);\n }\n\n protected clearFilters(): void {\n this.globalFilter = '';\n this.syncVisibleApplications();\n }\n\n protected beginCreateApplication(): void {\n this.cancelAllEdits();\n this.draftApplication = {\n code: '',\n displayName: '',\n baseUrl: '',\n internalBaseUrl: '',\n icon: 'pi pi-th-large',\n order: this.getNextOrder(),\n enabled: true,\n serviceType: ServiceType.Service,\n isCurrent: false,\n _isNew: true,\n _isEditing: true,\n _editModel: this.createEditModel()\n };\n this.draftApplication._editModel.order = this.draftApplication.order ?? 0;\n this.syncVisibleApplications();\n }\n\n protected editApplication(application: ApplicationTableItem): void {\n this.cancelAllEdits(application);\n application._isEditing = true;\n application._editModel = this.createEditModel(application);\n this.syncVisibleApplications();\n }\n\n protected cancelEdit(application: ApplicationTableItem): void {\n if (application._isNew) {\n this.draftApplication = null;\n } else {\n application._isEditing = false;\n application._editModel = undefined;\n }\n\n this.syncVisibleApplications();\n }\n\n protected async saveApplication(application: ApplicationTableItem): Promise<void> {\n const editModel = application._editModel;\n if (!editModel) {\n return;\n }\n\n const request = this.normalizeEditModel(editModel);\n if (!request.code || !request.displayName || !request.baseUrl) {\n this.msgService.error(this.t('applications.messages.requiredFields'));\n return;\n }\n\n this.activeRowAction = true;\n\n try {\n if (application._isNew) {\n await this.applicationsApi.createApplicationRegistryItem(request);\n this.draftApplication = null;\n this.msgService.success(this.t('applications.messages.createSuccess'));\n } else {\n await this.applicationsApi.updateApplicationRegistryItem({ code: application.code as string }, request);\n application._isEditing = false;\n application._editModel = undefined;\n this.msgService.success(this.t('applications.messages.updateSuccess'));\n }\n\n await this.refreshAction();\n } catch (error) {\n this.msgService.error(error);\n } finally {\n this.activeRowAction = false;\n }\n }\n\n protected async deleteApplication(application: ApplicationTableItem): Promise<void> {\n await this.translationsReady;\n\n if (application._isNew) {\n this.cancelEdit(application);\n return;\n }\n\n if (!application.code) {\n return;\n }\n\n this.confirmationService.confirm({\n header: this.t('applications.confirm.header'),\n message: this.t('applications.confirm.message', { displayName: application.displayName || application.code }),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.t('applications.confirm.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.t('applications.confirm.delete'),\n severity: 'danger'\n },\n accept: async () => {\n this.activeRowAction = true;\n\n try {\n await this.applicationsApi.deleteApplicationRegistryItem({ code: application.code as string });\n this.msgService.success(this.t('applications.messages.deleteSuccess'));\n await this.refreshAction();\n } catch (error) {\n this.msgService.error(error);\n } finally {\n this.activeRowAction = false;\n }\n }\n });\n }\n\n private createEditModel(application?: ApplicationRegistryItemDto): ApplicationEditModel {\n return {\n code: application?.code ?? '',\n displayName: application?.displayName ?? '',\n baseUrl: application?.baseUrl ?? '',\n internalBaseUrl: application?.internalBaseUrl ?? '',\n icon: application?.icon ?? 'pi pi-th-large',\n order: application?.order ?? 0,\n enabled: application?.enabled ?? true,\n serviceType: application?.serviceType ?? ServiceType.Service\n };\n }\n\n private normalizeEditModel(model: ApplicationEditModel): ApplicationRegistryItemDto {\n return {\n code: model.code.trim(),\n displayName: model.displayName.trim(),\n baseUrl: model.baseUrl.trim(),\n internalBaseUrl: model.internalBaseUrl.trim(),\n icon: model.icon.trim(),\n order: Number(model.order) || 0,\n enabled: model.enabled,\n serviceType: model.serviceType\n };\n }\n\n protected serviceTypeLabel(serviceType: ApplicationRegistryItemDto['serviceType']): string {\n return this.t(\n serviceType === ServiceType.Application\n ? 'applications.serviceTypes.application'\n : 'applications.serviceTypes.service'\n );\n }\n\n private cancelAllEdits(exceptApplication?: ApplicationTableItem): void {\n if (!exceptApplication?._isNew) {\n this.draftApplication = null;\n }\n\n for (const application of this.applications) {\n if (application === exceptApplication) {\n continue;\n }\n\n application._isEditing = false;\n application._editModel = undefined;\n }\n }\n\n private syncVisibleApplications(): void {\n this.visibleApplications = this.filterApplications(this.globalFilter);\n }\n\n private filterApplications(filter: string): ApplicationTableItem[] {\n const source = this.draftApplication ? [this.draftApplication, ...this.applications] : [...this.applications];\n const normalizedFilter = filter.trim().toLocaleLowerCase();\n\n if (!normalizedFilter) {\n return source;\n }\n\n return source.filter((application) =>\n this.globalFilterFields.some((field) =>\n String(application[field as keyof ApplicationRegistryItemDto] ?? '')\n .toLocaleLowerCase()\n .includes(normalizedFilter)\n )\n );\n }\n\n private getNextOrder(): number {\n return Math.max(0, ...this.applications.map((application) => application.order ?? 0)) + 1;\n }\n\n private t(key: string, params?: Record<string, unknown>): string {\n return this.l10nService.instant(key, params) as string;\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n AddReactionRequest,\n ApiExceptionResponse,\n AttachmentDto,\n CommentDto,\n CommentHistoryDto,\n CommentReactionDto,\n CreateCommentRequest,\n DeleteAttachmentParams,\n DeleteParams,\n GetAttachmentContentParams,\n GetByIdParams,\n GetByObjectParams,\n GetHistoryParams,\n MentionUserDto,\n RemoveReactionParams,\n SearchMentionUsersParams,\n UpdateCommentRequest,\n UpdateParams,\n UploadAttachmentPayload,\n} from \"./discussion-data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class DiscussionApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getByObject = (query: GetByObjectParams, params: RequestParams = {}) =>\n this.request<CommentDto[], ApiExceptionResponse>({\n path: `/api/discussion/get-by-object`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n getById = (query: GetByIdParams, params: RequestParams = {}) =>\n this.request<CommentDto, ApiExceptionResponse>({\n path: `/api/discussion/get-by-id`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n create = (data: CreateCommentRequest, params: RequestParams = {}) =>\n this.request<CommentDto, ApiExceptionResponse>({\n path: `/api/discussion/create`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n update = (\n { id, ...query }: UpdateParams,\n data: UpdateCommentRequest,\n params: RequestParams = {},\n ) =>\n this.request<CommentDto, ApiExceptionResponse>({\n path: `/api/discussion/update/${id}`,\n method: \"PUT\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n delete = ({ id, ...query }: DeleteParams, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/discussion/delete/${id}`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n getHistory = (\n { id, ...query }: GetHistoryParams,\n params: RequestParams = {},\n ) =>\n this.request<CommentHistoryDto[], ApiExceptionResponse>({\n path: `/api/discussion/get-history/${id}`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n uploadAttachment = (\n data: UploadAttachmentPayload,\n params: RequestParams = {},\n ) =>\n this.request<AttachmentDto, ApiExceptionResponse>({\n path: `/api/discussion/upload-attachment`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.FormData,\n format: \"json\",\n ...params,\n });\n deleteAttachment = (\n { id, ...query }: DeleteAttachmentParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/discussion/delete-attachment/${id}`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n getAttachmentContent = (\n { id, ...query }: GetAttachmentContentParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/discussion/get-attachment-content/${id}`,\n method: \"GET\",\n secure: true,\n ...params,\n });\n addReaction = (data: AddReactionRequest, params: RequestParams = {}) =>\n this.request<CommentReactionDto[], ApiExceptionResponse>({\n path: `/api/discussion/add-reaction`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n removeReaction = (query: RemoveReactionParams, params: RequestParams = {}) =>\n this.request<CommentReactionDto[], ApiExceptionResponse>({\n path: `/api/discussion/remove-reaction`,\n method: \"DELETE\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n searchMentionUsers = (\n query: SearchMentionUsersParams,\n params: RequestParams = {},\n ) =>\n this.request<MentionUserDto[], ApiExceptionResponse>({\n path: `/api/discussion/search-mention-users`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","export function getInitialsFromString(input: string): string {\r\n if (!input || input.trim().length === 0) {\r\n return '';\r\n }\r\n\r\n const words = input.trim().split(/\\s+/);\r\n\r\n if (words.length === 1) {\r\n return words[0].charAt(0).toUpperCase();\r\n }\r\n\r\n const firstInitial = words[0].charAt(0).toUpperCase();\r\n const lastInitial = words[words.length - 1].charAt(0).toUpperCase();\r\n\r\n return firstInitial + lastInitial;\r\n}\r\n","import { CommonModule, DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n SecurityContext,\n SimpleChanges,\n inject,\n OnInit\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { ConfirmationService } from 'primeng/api';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ButtonModule } from 'primeng/button';\nimport { CardModule } from 'primeng/card';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { DividerModule } from 'primeng/divider';\nimport { PanelModule } from 'primeng/panel';\nimport { PopoverModule } from 'primeng/popover';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { TagModule } from 'primeng/tag';\nimport { Textarea } from 'primeng/textarea';\nimport {\n AttachmentDto,\n CommentDto,\n CommentHistoryDto,\n CommentReactionDto,\n MentionUserDto\n} from '../../api/discussion-data-contracts';\nimport { DiscussionApi } from '../../api/discussion.api';\nimport { MsgService } from '../../services/msg.service';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { getInitialsFromString } from '../../helpers/avatar.helper';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/discussion.en.json';\nimport ru from './l10n/discussion.ru.json';\n\ntype HistoryState = {\n loading: boolean;\n opened: boolean;\n items: DiscussionHistoryItem[];\n};\n\ntype DiscussionAttachment = Required<AttachmentDto>;\ntype DiscussionReaction = Required<CommentReactionDto>;\ntype DiscussionMentionUser = Required<MentionUserDto>;\ntype DiscussionComment = Omit<CommentDto, 'attachments' | 'reactions' | 'mentions'> & {\n commentId: number;\n content: string;\n authorDisplayName: string;\n authorEmail: string;\n isEdited: boolean;\n historyCount: number;\n canEdit: boolean;\n canDelete: boolean;\n attachments: DiscussionAttachment[];\n reactions: DiscussionReaction[];\n};\ntype DiscussionHistoryItem = Required<CommentHistoryDto>;\n\n@Component({\n selector: 'discussion',\n standalone: true,\n providers: [ConfirmationService, DiscussionApi],\n imports: [\n CommonModule,\n FormsModule,\n AvatarModule,\n ButtonModule,\n CardModule,\n ConfirmDialog,\n DividerModule,\n PanelModule,\n PopoverModule,\n ProgressSpinnerModule,\n TagModule,\n Textarea,\n DatePipe,\n TranslatePipe\n ],\n template: `\n <p-confirmDialog />\n\n <section class=\"flex flex-col gap-4\">\n <p-card class=\"block\">\n <div class=\"flex flex-col gap-4\">\n @if (!previewMode) {\n <textarea\n class=\"min-h-28 w-full\"\n pTextarea\n rows=\"5\"\n [autoResize]=\"true\"\n [placeholder]=\"'discussionComponent.writeCommentPlaceholder' | translate\"\n [(ngModel)]=\"newComment\"\n (ngModelChange)=\"onComposerInput()\"></textarea>\n } @else {\n <div\n class=\"markdown-preview min-h-28 rounded-2xl border border-surface-200 bg-surface-50 px-4 py-3 leading-7 dark:border-surface-700 dark:bg-surface-900/40\"\n [innerHTML]=\"renderMarkdown(newComment)\"></div>\n }\n\n @if (mentionSuggestions.length > 0) {\n <p-panel class=\"block\">\n <ng-template pTemplate=\"header\">\n <div class=\"inline-flex items-center gap-2 text-sm font-medium\">\n <i class=\"pi pi-at\"></i>\n <span>{{ 'discussionComponent.mentionSuggestions' | translate }}</span>\n </div>\n </ng-template>\n\n <div class=\"flex flex-col gap-3\">\n @for (candidate of mentionSuggestions; track candidate.userId) {\n <button\n class=\"flex w-full items-center justify-between gap-4 rounded-xl border border-transparent px-3 py-3 text-left transition hover:border-primary-200 hover:bg-primary-50 dark:hover:border-primary-800 dark:hover:bg-primary-950/30\"\n type=\"button\"\n (click)=\"insertMention(candidate)\">\n <div class=\"min-w-0\">\n <strong>{{ candidate.displayName }}</strong>\n <small class=\"mt-1 block text-surface-500\">{{ candidate.email }}</small>\n </div>\n <i class=\"pi pi-arrow-up-left shrink-0 text-surface-400\"></i>\n </button>\n }\n </div>\n </p-panel>\n }\n\n @if (pendingFiles.length > 0) {\n <div class=\"flex flex-col gap-3\">\n @for (file of pendingFiles; track file.name + file.size) {\n <div\n class=\"flex flex-col gap-3 rounded-2xl border border-surface-200 px-4 py-3 sm:flex-row sm:items-center sm:justify-between dark:border-surface-700\">\n <div class=\"inline-flex items-center gap-2\">\n <i class=\"pi pi-file\"></i>\n <span class=\"break-all\">{{ file.name }}</span>\n <p-tag severity=\"contrast\" [value]=\"formatBytes(file.size)\" />\n </div>\n <p-button\n icon=\"pi pi-times\"\n severity=\"danger\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"removePendingFile(file)\" />\n </div>\n }\n </div>\n }\n\n <div class=\"flex flex-col gap-2 sm:flex-row sm:justify-end\">\n <p-button\n severity=\"secondary\"\n [icon]=\"previewMode ? 'pi pi-pencil' : 'pi pi-eye'\"\n [label]=\"\n previewMode ? ('discussionComponent.edit' | translate) : ('discussionComponent.preview' | translate)\n \"\n [text]=\"true\"\n (onClick)=\"previewMode = !previewMode\" />\n\n <label class=\"file-trigger\">\n <p-button\n icon=\"pi pi-paperclip\"\n severity=\"secondary\"\n [label]=\"'discussionComponent.attachFiles' | translate\"\n [text]=\"true\" />\n <input multiple type=\"file\" (change)=\"onFilesSelected($event)\" />\n </label>\n <p-button\n icon=\"pi pi-send\"\n [disabled]=\"submitting || !newComment.trim()\"\n [label]=\"'discussionComponent.send' | translate\"\n [loading]=\"submitting\"\n (onClick)=\"createComment()\" />\n </div>\n </div>\n </p-card>\n\n @if (loading) {\n <div\n class=\"flex min-h-20 flex-col items-center justify-center gap-3 rounded-2xl border border-surface-200 px-4 py-5 text-surface-500 dark:border-surface-700\">\n <p-progressSpinner strokeWidth=\"4\" />\n <span>{{ 'discussionComponent.loadingComments' | translate }}</span>\n </div>\n } @else if (comments.length === 0) {\n <div\n class=\"flex min-h-20 items-center justify-center gap-3 rounded-2xl border border-surface-200 px-4 py-5 text-surface-500 dark:border-surface-700\">\n <i class=\"pi pi-inbox\"></i>\n <span>{{ 'discussionComponent.noCommentsYet' | translate }}</span>\n </div>\n } @else {\n <div class=\"flex flex-col gap-4\">\n @for (comment of comments; track comment.commentId) {\n <p-card class=\"block\">\n <ng-template pTemplate=\"content\">\n <div class=\"grid gap-4 md:grid-cols-[3.2rem_minmax(0,1fr)]\">\n <div>\n <p-avatar shape=\"circle\" [label]=\"getInitialsFromString(comment.authorDisplayName)\" />\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex flex-row gap-3 justify-between\">\n <div class=\"flex flex-wrap items-center gap-2\">\n <strong>{{ comment.authorDisplayName }}</strong>\n <span class=\"text-sm text-surface-500\">{{\n comment.createdAt | date: layoutService.dateTimeFormat()\n }}</span>\n </div>\n\n <div class=\"flex flex-wrap items-center justify-end gap-2\">\n <div class=\"flex flex-wrap items-center\">\n @if (comment.isEdited) {\n <p-tag\n icon=\"pi pi-pencil\"\n severity=\"warn\"\n [value]=\"'discussionComponent.edited' | translate\" />\n }\n </div>\n @if (comment.canEdit) {\n <p-button\n icon=\"pi pi-pencil\"\n severity=\"secondary\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"startEdit(comment)\" />\n }\n @if (comment.historyCount > 0) {\n <p-button\n icon=\"pi pi-history\"\n severity=\"secondary\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"toggleHistory(comment)\" />\n }\n @if (comment.canDelete) {\n <p-button\n icon=\"pi pi-trash\"\n severity=\"danger\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"deleteComment(comment)\" />\n }\n </div>\n </div>\n @if (editingCommentId === comment.commentId) {\n <div class=\"flex flex-col gap-4\">\n <textarea\n class=\"min-h-24 w-full\"\n pTextarea\n rows=\"4\"\n [autoResize]=\"true\"\n [placeholder]=\"'discussionComponent.editCommentPlaceholder' | translate\"\n [(ngModel)]=\"editContent\"></textarea>\n <div class=\"flex flex-col gap-2 sm:flex-row sm:justify-end\">\n <div>\n <label class=\"file-trigger\">\n <p-button\n icon=\"pi pi-paperclip\"\n severity=\"secondary\"\n [label]=\"'discussionComponent.addAttachment' | translate\"\n [text]=\"true\" />\n <input multiple type=\"file\" (change)=\"onInlineFilesSelected(comment, $event)\" />\n </label>\n </div>\n\n <p-button\n icon=\"pi pi-check\"\n [disabled]=\"!editContent.trim()\"\n [label]=\"'discussionComponent.save' | translate\"\n (onClick)=\"saveEdit(comment)\" />\n <p-button\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [label]=\"'discussionComponent.cancel' | translate\"\n [text]=\"true\"\n (onClick)=\"cancelEdit()\" />\n </div>\n </div>\n } @else {\n <div class=\"markdown-preview\" [innerHTML]=\"renderMarkdown(comment.content)\"></div>\n }\n\n @if (comment.attachments.length > 0) {\n <div class=\"flex flex-col gap-3\">\n <div class=\"flex flex-col gap-3\">\n @for (attachment of comment.attachments; track attachment.attachmentId) {\n <div class=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-end\">\n <div class=\"inline-flex items-center gap-2\">\n <i class=\"pi pi-file\"></i>\n <button\n class=\"break-all bg-transparent p-0 text-left font-semibold text-primary-600 transition hover:text-primary-500\"\n type=\"button\"\n (click)=\"downloadAttachment(attachment)\">\n {{ attachment.fileName }}\n </button>\n <p-tag severity=\"contrast\" [value]=\"formatBytes(attachment.fileSize)\" />\n </div>\n\n @if (comment.canEdit) {\n <p-button\n icon=\"pi pi-times\"\n severity=\"danger\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"deleteAttachment(comment, attachment)\" />\n }\n </div>\n }\n </div>\n </div>\n }\n\n <div class=\"flex flex-wrap items-center gap-2\">\n @for (reaction of getReactions(comment); track reaction.emojiCode) {\n <p-button\n severity=\"secondary\"\n [label]=\"reaction.emojiCode + ' ' + reaction.count\"\n [outlined]=\"false\"\n (onClick)=\"toggleReaction(comment, reaction)\" />\n }\n\n @if (!hasUserReaction(comment)) {\n <p-button\n icon=\"pi pi-face-smile\"\n severity=\"secondary\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"reactionPopover.toggle($event)\" />\n <p-popover #reactionPopover>\n <div class=\"emoji-popover\">\n @for (emoji of emojiPalette; track emoji) {\n <button\n class=\"emoji-option\"\n type=\"button\"\n (click)=\"reactWithEmoji(comment, emoji, reactionPopover)\">\n {{ emoji }}\n </button>\n }\n </div>\n </p-popover>\n }\n </div>\n\n @if (historyByComment[comment.commentId]?.opened) {\n <p-panel class=\"block\" [collapsed]=\"false\" [toggleable]=\"true\">\n <ng-template pTemplate=\"header\">\n <div class=\"inline-flex items-center gap-2 text-sm font-medium\">\n <i class=\"pi pi-history\"></i>\n <span>{{ 'discussionComponent.editHistory' | translate }}</span>\n </div>\n </ng-template>\n\n @if (historyByComment[comment.commentId]?.loading) {\n <div class=\"flex items-center gap-3 text-surface-500\">\n <p-progressSpinner strokeWidth=\"4\" />\n <span>{{ 'discussionComponent.loadingHistory' | translate }}</span>\n </div>\n } @else {\n <div class=\"flex flex-col gap-4\">\n @for (\n item of historyByComment[comment.commentId]?.items ?? [];\n track item.commentEditHistoryId\n ) {\n <div class=\"rounded-2xl border border-surface-200 px-4 py-4 dark:border-surface-700\">\n <div class=\"mb-3 inline-flex items-center gap-2 text-sm font-semibold\">\n <i class=\"pi pi-clock\"></i>\n <span>{{ item.editedByDisplayName }} · {{ item.editedAt | date: 'short' }}</span>\n </div>\n <div class=\"grid gap-4 lg:grid-cols-2\">\n <div class=\"flex flex-col gap-2\">\n <p-tag severity=\"secondary\" [value]=\"'discussionComponent.before' | translate\" />\n <div\n class=\"history-markdown rounded-2xl bg-surface-50 px-4 py-3 leading-7 dark:bg-surface-900/40\"\n [innerHTML]=\"renderMarkdown(item.oldContent)\"></div>\n </div>\n <div class=\"flex flex-col gap-2\">\n <p-tag severity=\"success\" [value]=\"'discussionComponent.after' | translate\" />\n <div\n class=\"history-markdown rounded-2xl bg-surface-50 px-4 py-3 leading-7 dark:bg-surface-900/40\"\n [innerHTML]=\"renderMarkdown(item.newContent)\"></div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n </p-panel>\n }\n </div>\n </div>\n </ng-template>\n </p-card>\n }\n </div>\n }\n </section>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .file-trigger {\n position: relative;\n display: inline-flex;\n }\n\n .file-trigger input {\n position: absolute;\n inset: 0;\n opacity: 0;\n cursor: pointer;\n }\n\n .markdown-preview,\n .history-markdown {\n word-break: break-word;\n }\n\n .markdown-preview :is(h1, h2, h3),\n .history-markdown :is(h1, h2, h3) {\n margin: 0 0 0.75rem;\n font-weight: 600;\n }\n\n .markdown-preview a,\n .history-markdown a {\n color: #2563eb;\n text-decoration: underline;\n text-underline-offset: 0.18em;\n }\n\n .emoji-popover {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n max-width: 16rem;\n }\n\n .emoji-option {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n font-size: 1.25rem;\n cursor: pointer;\n }\n `\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DiscussionComponent implements OnChanges, OnDestroy, OnInit {\n private readonly msgService = inject(MsgService);\n private readonly translations = provideTranslations({ en, ru });\n\n private readonly discussionApi = inject(DiscussionApi);\n private readonly sanitizer = inject(DomSanitizer);\n private readonly translateService = inject(TranslateService);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly confirmationService = inject(ConfirmationService);\n protected readonly layoutService = inject(LayoutService);\n\n @Input({ required: true }) objectTypeId = 1;\n @Input({ required: true }) objectId = 1;\n\n comments: DiscussionComment[] = [];\n loading = false;\n submitting = false;\n previewMode = false;\n newComment = '';\n editContent = '';\n editingCommentId: number | null = null;\n pendingFiles: File[] = [];\n mentionSuggestions: DiscussionMentionUser[] = [];\n historyByComment: Record<number, HistoryState> = {};\n emojiPalette = ['👍', '👎', '🐳', '🍆', '🍑'];\n private mentionSearchTimer: ReturnType<typeof setTimeout> | null = null;\n\n ngOnChanges(changes: SimpleChanges): void {\n if ((changes['objectTypeId'] || changes['objectId']) && this.objectTypeId && this.objectId) {\n this.loadComments().then();\n }\n }\n\n async ngOnInit() {\n await this.loadComments();\n }\n\n ngOnDestroy(): void {\n if (this.mentionSearchTimer) {\n clearTimeout(this.mentionSearchTimer);\n }\n }\n\n async loadComments(): Promise<void> {\n if (!this.objectTypeId || !this.objectId) {\n return;\n }\n\n this.loading = true;\n this.cdr.markForCheck();\n\n try {\n const items = await this.discussionApi.getByObject({\n objectTypeId: this.objectTypeId,\n objectId: this.objectId,\n skip: 0,\n take: 50\n });\n this.comments = items.map((item) => this.normalizeComment(item));\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.loadComments')\n );\n } finally {\n this.loading = false;\n this.cdr.markForCheck();\n }\n }\n\n async createComment(): Promise<void> {\n const content = this.newComment.trim();\n if (!content) {\n return;\n }\n\n this.submitting = true;\n this.cdr.markForCheck();\n\n try {\n const created = await this.discussionApi.create({\n objectTypeId: this.objectTypeId,\n objectId: this.objectId,\n content\n });\n\n if (this.pendingFiles.length > 0) {\n for (const file of this.pendingFiles) {\n await this.discussionApi.uploadAttachment({\n CommentId: created.commentId as number,\n File: file\n });\n }\n }\n\n this.newComment = '';\n this.pendingFiles = [];\n this.previewMode = false;\n this.mentionSuggestions = [];\n await this.loadComments();\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.createComment')\n );\n } finally {\n this.submitting = false;\n this.cdr.markForCheck();\n }\n }\n\n startEdit(comment: DiscussionComment): void {\n this.editingCommentId = comment.commentId;\n this.editContent = comment.content;\n }\n\n cancelEdit(): void {\n this.editingCommentId = null;\n this.editContent = '';\n }\n\n async saveEdit(comment: DiscussionComment): Promise<void> {\n try {\n const updated = await this.discussionApi.update({ id: comment.commentId }, { content: this.editContent.trim() });\n this.comments = this.comments.map((item) =>\n item.commentId === comment.commentId ? this.normalizeComment(updated) : item\n );\n this.cancelEdit();\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.updateComment')\n );\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n deleteComment(comment: DiscussionComment): void {\n this.confirmationService.confirm({\n header: this.translateService.instant('discussionComponent.warning'),\n message: this.translateService.instant('discussionComponent.confirmDeleteComment'),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.translateService.instant('discussionComponent.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.translateService.instant('discussionComponent.delete'),\n severity: 'danger'\n },\n accept: async () => {\n await this.performDeleteComment(comment);\n }\n });\n }\n\n async toggleHistory(comment: DiscussionComment): Promise<void> {\n const current = this.historyByComment[comment.commentId];\n if (current?.opened) {\n this.historyByComment[comment.commentId] = { ...current, opened: false };\n return;\n }\n\n this.historyByComment[comment.commentId] = {\n opened: true,\n loading: true,\n items: current?.items ?? []\n };\n this.cdr.markForCheck();\n\n try {\n const items = await this.discussionApi.getHistory({ id: comment.commentId });\n this.historyByComment[comment.commentId] = {\n opened: true,\n loading: false,\n items: items.map((item) => this.normalizeHistoryItem(item))\n };\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.loadEditHistory')\n );\n this.historyByComment[comment.commentId] = {\n opened: false,\n loading: false,\n items: []\n };\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n onFilesSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.pendingFiles = [...this.pendingFiles, ...Array.from(input.files ?? [])];\n input.value = '';\n }\n\n removePendingFile(file: File): void {\n this.pendingFiles = this.pendingFiles.filter((item) => item !== file);\n }\n\n async onInlineFilesSelected(comment: DiscussionComment, event: Event): Promise<void> {\n const input = event.target as HTMLInputElement;\n const files = Array.from(input.files ?? []);\n input.value = '';\n\n try {\n for (const file of files) {\n await this.discussionApi.uploadAttachment({\n CommentId: comment.commentId,\n File: file\n });\n }\n await this.loadComments();\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.uploadAttachment')\n );\n this.cdr.markForCheck();\n }\n }\n\n deleteAttachment(comment: DiscussionComment, attachment: DiscussionAttachment): void {\n this.confirmationService.confirm({\n header: this.translateService.instant('discussionComponent.warning'),\n message: this.translateService.instant('discussionComponent.confirmDeleteFile', {\n fileName: attachment.fileName\n }),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.translateService.instant('discussionComponent.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.translateService.instant('discussionComponent.delete'),\n severity: 'danger'\n },\n accept: async () => {\n await this.performDeleteAttachment(comment, attachment);\n }\n });\n }\n\n private async performDeleteComment(comment: DiscussionComment): Promise<void> {\n try {\n await this.discussionApi.delete({ id: comment.commentId });\n this.comments = this.comments.filter((item) => item.commentId !== comment.commentId);\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.deleteComment')\n );\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n private async performDeleteAttachment(comment: DiscussionComment, attachment: DiscussionAttachment): Promise<void> {\n try {\n await this.discussionApi.deleteAttachment({ id: attachment.attachmentId });\n this.comments = this.comments.map((item) =>\n item.commentId === comment.commentId\n ? { ...item, attachments: item.attachments.filter((entry) => entry.attachmentId !== attachment.attachmentId) }\n : item\n );\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.deleteAttachment')\n );\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n async downloadAttachment(attachment: DiscussionAttachment): Promise<void> {\n try {\n const blob = (await this.discussionApi.getAttachmentContent(\n { id: attachment.attachmentId },\n { format: 'blob' }\n )) as unknown as Blob;\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = attachment.fileName;\n link.click();\n URL.revokeObjectURL(url);\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.downloadAttachment')\n );\n this.cdr.markForCheck();\n }\n }\n\n async toggleReaction(comment: DiscussionComment, reaction: DiscussionReaction): Promise<void> {\n try {\n const reactions = reaction.reactedByCurrentUser\n ? await this.discussionApi.removeReaction({ commentId: comment.commentId, emojiCode: reaction.emojiCode })\n : await this.discussionApi.addReaction({ commentId: comment.commentId, emojiCode: reaction.emojiCode });\n this.applyReactions(\n comment.commentId,\n reactions.map((item) => this.normalizeReaction(item))\n );\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.updateReaction')\n );\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n async reactWithEmoji(comment: DiscussionComment, emojiCode: string, popover?: { hide: () => void }): Promise<void> {\n try {\n const reactions = await this.discussionApi.addReaction({ commentId: comment.commentId, emojiCode });\n this.applyReactions(\n comment.commentId,\n reactions.map((item) => this.normalizeReaction(item))\n );\n popover?.hide();\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.addReaction')\n );\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n onComposerInput(): void {\n if (this.mentionSearchTimer) {\n clearTimeout(this.mentionSearchTimer);\n }\n\n const token = this.extractMentionQuery(this.newComment);\n if (!token || token.length < 2) {\n this.mentionSuggestions = [];\n this.cdr.markForCheck();\n return;\n }\n\n this.mentionSearchTimer = setTimeout(async () => {\n try {\n const users = await this.discussionApi.searchMentionUsers({ term: token });\n this.mentionSuggestions = users.map((item) => this.normalizeMentionUser(item));\n } catch {\n this.mentionSuggestions = [];\n } finally {\n this.cdr.markForCheck();\n }\n }, 250);\n }\n\n insertMention(candidate: DiscussionMentionUser): void {\n const query = this.extractMentionQuery(this.newComment);\n if (!query) {\n return;\n }\n\n this.newComment = this.newComment.replace(/@[\\w.+\\-@]*$/, `@${candidate.email} `);\n this.mentionSuggestions = [];\n }\n\n renderMarkdown(markdown: string): string {\n const escaped = markdown.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n\n const html = escaped\n .replace(/^### (.*)$/gm, '<h3>$1</h3>')\n .replace(/^## (.*)$/gm, '<h2>$1</h2>')\n .replace(/^# (.*)$/gm, '<h1>$1</h1>')\n .replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>')\n .replace(/\\*(.+?)\\*/g, '<em>$1</em>')\n .replace(/`(.+?)`/g, '<code>$1</code>')\n .replace(/\\[([^\\]]+)\\]\\((https?:\\/\\/[^\\s]+)\\)/g, '<a href=\"$2\" target=\"_blank\" rel=\"noopener\">$1</a>')\n .replace(/(^|\\s)@([A-Za-z0-9._+\\-@]+)/g, '$1<span class=\"mention-token\">@$2</span>')\n .replace(/\\n/g, '<br>');\n\n return this.sanitizer.sanitize(SecurityContext.HTML, html) ?? '';\n }\n\n formatBytes(value: number): string {\n if (value < 1024) {\n return `${value} ${this.translateService.instant('discussionComponent.units.bytes')}`;\n }\n if (value < 1024 * 1024) {\n return `${(value / 1024).toFixed(1)} ${this.translateService.instant('discussionComponent.units.kilobytes')}`;\n }\n return `${(value / (1024 * 1024)).toFixed(1)} ${this.translateService.instant('discussionComponent.units.megabytes')}`;\n }\n\n hasUserReaction(comment: DiscussionComment): boolean {\n return comment.reactions.some((reaction) => reaction.reactedByCurrentUser);\n }\n\n getReactions(comment: DiscussionComment): DiscussionReaction[] {\n return comment.reactions;\n }\n\n private applyReactions(commentId: number, reactions: DiscussionReaction[]): void {\n this.comments = this.comments.map((item) => (item.commentId === commentId ? { ...item, reactions } : item));\n }\n\n private normalizeComment(comment: CommentDto): DiscussionComment {\n return {\n ...comment,\n commentId: comment.commentId ?? 0,\n content: comment.content ?? '',\n authorDisplayName: comment.authorDisplayName ?? '',\n authorEmail: comment.authorEmail ?? '',\n isEdited: comment.isEdited ?? false,\n historyCount: comment.historyCount ?? 0,\n canEdit: comment.canEdit ?? false,\n canDelete: comment.canDelete ?? false,\n attachments: (comment.attachments ?? []).map((item) => this.normalizeAttachment(item)),\n reactions: (comment.reactions ?? []).map((item) => this.normalizeReaction(item))\n };\n }\n\n private normalizeAttachment(attachment: AttachmentDto): DiscussionAttachment {\n return {\n attachmentId: attachment.attachmentId ?? 0,\n fileName: attachment.fileName ?? '',\n fileType: attachment.fileType ?? '',\n fileSize: attachment.fileSize ?? 0,\n uploadedAt: attachment.uploadedAt ?? new Date(0),\n storageFileId: attachment.storageFileId ?? '',\n downloadUrl: attachment.downloadUrl ?? ''\n };\n }\n\n private normalizeReaction(reaction: CommentReactionDto): DiscussionReaction {\n return {\n emojiCode: reaction.emojiCode ?? '',\n count: reaction.count ?? 0,\n reactedByCurrentUser: reaction.reactedByCurrentUser ?? false\n };\n }\n\n private normalizeMentionUser(user: MentionUserDto): DiscussionMentionUser {\n return {\n userId: user.userId ?? 0,\n displayName: user.displayName ?? '',\n email: user.email ?? ''\n };\n }\n\n private normalizeHistoryItem(item: CommentHistoryDto): DiscussionHistoryItem {\n return {\n commentEditHistoryId: item.commentEditHistoryId ?? 0,\n oldContent: item.oldContent ?? '',\n newContent: item.newContent ?? '',\n editedByUserId: item.editedByUserId ?? 0,\n editedByDisplayName: item.editedByDisplayName ?? '',\n editedAt: item.editedAt ?? new Date(0)\n };\n }\n\n private extractMentionQuery(value: string): string | null {\n const match = value.match(/@([A-Za-z0-9._+\\-@]*)$/);\n return match?.[1] ?? null;\n }\n\n protected readonly getInitialsFromString = getInitialsFromString;\n}\n","import { Component, ElementRef, inject, OnDestroy, OnInit, Renderer2, ViewChild } from '@angular/core';\nimport { BaseModuleComponent } from '../base-module/base-module.component';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { InputText } from 'primeng/inputtext';\nimport { FormsModule } from '@angular/forms';\nimport { Button } from 'primeng/button';\nimport { SecurityComponent } from '../security/security.component';\nimport { IframeModuleSettings } from '../../api/data-contracts';\nimport { provideTranslations } from '../../helpers/l10n.helper';\nimport en from './l10n/iframe-module.en.json';\nimport ru from './l10n/iframe-module.ru.json';\n\n@Component({\n standalone: true,\n imports: [SecurityComponent, TranslatePipe, InputText, FormsModule, Button],\n template: `\n @if (isContent) {\n <iframe\n #iframe\n class=\"w-full h-screen\"\n style=\"background-color: var(--surface-ground)\"\n title=\"Main iframe\"\n (error)=\"onIframeError()\">\n </iframe>\n } @else if (isSettings) {\n <div class=\"flex flex-col md:flex-row gap-8\">\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ 'baseComponent.settings' | translate }}</div>\n <div class=\"col-span-30 md:col-span-10 w-full\">\n <input\n class=\"w-full\"\n pInputText\n placeholder=\"{{ 'iframe-module.iframeModule.urlPlaceholder' | translate }}\"\n qa-id=\"iframe-module-settings-site-url-input\"\n type=\"text\"\n [(ngModel)]=\"settings.url\" />\n </div>\n <div class=\"flex justify-end\">\n <p-button\n icon=\"pi pi-save\"\n label=\"{{ 'iframe-module.iframeModule.settingSaveButtonLabel' | translate }}\"\n qa-id=\"iframe-module-settings-save-button\"\n (onClick)=\"saveSettings(settings)\">\n </p-button>\n </div>\n </div>\n </div>\n </div>\n } @else if (isSecurity) {\n <security [controller]=\"controller\" [id]=\"id\" />\n }\n `\n})\nexport class IframeModuleComponent\n extends BaseModuleComponent<IframeModuleSettings, IframeModuleSettings>\n implements OnInit, OnDestroy\n{\n private readonly translations = provideTranslations({ en, ru });\n\n private iframe?: ElementRef<HTMLIFrameElement>;\n private readonly renderer = inject(Renderer2);\n private readonly translate = inject(TranslateService);\n\n protected iframeUrl: string | null = null;\n\n constructor() {\n super();\n }\n\n @ViewChild('iframe')\n private set iframeElement(element: ElementRef<HTMLIFrameElement> | undefined) {\n this.iframe = element;\n this.updateIframeSrc();\n }\n\n private setIframeUrl(url: string | null | undefined): void {\n const iframeUrl = url?.trim();\n\n if (!iframeUrl) {\n this.iframeUrl = null;\n this.updateIframeSrc();\n const message: string = this.translate.instant('iframe-module.iframeModule.emptyUrlMessage');\n this.msgService.warn(message);\n return;\n }\n\n if (!this.isAllowedIframeUrl(iframeUrl)) {\n this.iframeUrl = null;\n this.updateIframeSrc();\n const message: string = this.translate.instant('iframe-module.iframeModule.siteLoadingMessage');\n this.msgService.error(message);\n return;\n }\n\n this.iframeUrl = iframeUrl;\n this.updateIframeSrc();\n }\n\n private isAllowedIframeUrl(url: string): boolean {\n try {\n const parsedUrl = new URL(url, window.location.origin);\n\n return parsedUrl.protocol === 'http:' || parsedUrl.protocol === 'https:';\n } catch {\n return false;\n }\n }\n\n protected override async onModuleInstanceChange(): Promise<void> {\n this.setIframeUrl(this.settings.url);\n }\n\n private updateIframeSrc(): void {\n if (!this.iframe) {\n return;\n }\n\n if (!this.iframeUrl) {\n this.renderer.removeAttribute(this.iframe.nativeElement, 'src');\n return;\n }\n\n this.renderer.setAttribute(this.iframe.nativeElement, 'src', this.iframeUrl);\n }\n\n onIframeError() {\n const errorMessage = this.translate.instant('iframe-module.iframeModule.siteLoadingMessage');\n this.msgService.error(errorMessage);\n }\n}\n","import { OipExtensionHostContext, OipExtensionNavigateEvent, OipExtensionNotifyEvent } from './extension-host.types';\r\n\r\nexport const OIP_EXTENSION_EVENTS = {\r\n contextChange: 'oip:context-change',\r\n titleChange: 'oip:title-change',\r\n settingsChange: 'oip:settings-change',\r\n notify: 'oip:notify',\r\n navigate: 'oip:navigate',\r\n error: 'oip:error'\r\n} as const;\r\n\r\nexport function emitOipTitleChange(element: HTMLElement, title: string): void {\r\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.titleChange, { detail: title, bubbles: true }));\r\n}\r\n\r\nexport function emitOipSettingsChange(element: HTMLElement, settings: unknown): void {\r\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.settingsChange, { detail: settings, bubbles: true }));\r\n}\r\n\r\nexport function emitOipNotify(element: HTMLElement, notification: OipExtensionNotifyEvent): void {\r\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.notify, { detail: notification, bubbles: true }));\r\n}\r\n\r\nexport function emitOipNavigate(element: HTMLElement, navigation: OipExtensionNavigateEvent): void {\r\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.navigate, { detail: navigation, bubbles: true }));\r\n}\r\n\r\nexport function emitOipError(element: HTMLElement, error: unknown): void {\r\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.error, { detail: error, bubbles: true }));\r\n}\r\n\r\nexport function emitOipContextChange(element: HTMLElement, context: OipExtensionHostContext): void {\r\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.contextChange, { detail: context }));\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ExtensionLoaderService {\r\n private readonly loadedScripts = new Map<string, Promise<void>>();\r\n\r\n loadScript(scriptUrl: string): Promise<void> {\r\n const existing = this.loadedScripts.get(scriptUrl);\r\n if (existing) {\r\n return existing;\r\n }\r\n\r\n const loadPromise = new Promise<void>((resolve, reject) => {\r\n const script = document.createElement('script');\r\n script.type = 'module';\r\n script.src = scriptUrl;\r\n script.async = true;\r\n script.onload = () => resolve();\r\n script.onerror = () => {\r\n this.loadedScripts.delete(scriptUrl);\r\n reject(new Error(`Extension script could not be loaded: ${scriptUrl}`));\r\n };\r\n\r\n document.head.appendChild(script);\r\n });\r\n\r\n this.loadedScripts.set(scriptUrl, loadPromise);\r\n return loadPromise;\r\n }\r\n}\r\n","import { ChangeDetectorRef, Component, ElementRef, inject, OnDestroy, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SecurityComponent } from '../security/security.component';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Button } from 'primeng/button';\nimport { firstValueFrom } from 'rxjs';\nimport { ExtensionModulesApi } from '../../api/extension-modules.api';\nimport { BaseModuleComponent } from '../base-module/base-module.component';\nimport { ExtensionLoaderService } from '../../extension-host/extension-loader.service';\nimport { Router } from '@angular/router';\nimport {\n OipExtensionHostContext,\n OipExtensionModuleMetadata,\n OipExtensionNavigateEvent,\n OipExtensionNotifyEvent\n} from '../../extension-host/extension-host.types';\nimport { emitOipContextChange, OIP_EXTENSION_EVENTS } from '../../extension-host/extension-host.events';\n\n@Component({\n standalone: true,\n imports: [CommonModule, SecurityComponent, TranslatePipe, Button],\n providers: [ExtensionModulesApi],\n template: `\n @if (showContent) {\n <div class=\"min-h-[calc(100vh-10rem)] w-full\">\n @if (loadError) {\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ loadError }}</div>\n <p-button icon=\"pi pi-refresh\" label=\"Retry\" (onClick)=\"reloadExtension()\"></p-button>\n </div>\n } @else {\n <div #extensionContainer class=\"w-full\"></div>\n }\n </div>\n } @else if (showSettings) {\n <div class=\"flex flex-col md:flex-row gap-8\">\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ 'baseComponent.settings' | translate }}</div>\n <p-button icon=\"pi pi-save\" label=\"Save\" (onClick)=\"saveSettings(settings)\"></p-button>\n </div>\n </div>\n </div>\n } @else if (showSecurity) {\n <security [controller]=\"controller\" [id]=\"id\" />\n }\n `\n})\nexport class CustomElementExtensionModuleHostComponent\n extends BaseModuleComponent<unknown, unknown>\n implements OnDestroy\n{\n @ViewChild('extensionContainer')\n private set extensionContainer(element: ElementRef<HTMLElement> | undefined) {\n this.container = element;\n this.queueRenderExtension();\n }\n\n private readonly extensionLoader = inject(ExtensionLoaderService);\n private readonly router = inject(Router);\n private readonly hostChangeDetectorRef = inject(ChangeDetectorRef);\n private readonly extensionModulesApi = inject(ExtensionModulesApi);\n private container?: ElementRef<HTMLElement>;\n private extensionElement?: HTMLElement;\n private extensionMetadata?: OipExtensionModuleMetadata;\n private removeListeners: Array<() => void> = [];\n private renderQueued = false;\n private activeTabSyncQueued = false;\n private activeTabId = this.getCurrentActiveTabId();\n private destroyed = false;\n\n protected loadError: string | null = null;\n\n protected get showContent(): boolean {\n return this.isActiveTab('content');\n }\n\n protected get showSettings(): boolean {\n return this.isActiveTab('settings');\n }\n\n protected get showSecurity(): boolean {\n return this.isActiveTab('security');\n }\n\n private get extensionKey(): string {\n return this.route.snapshot.paramMap.get('extensionKey') ?? '';\n }\n\n constructor() {\n super();\n this.subscriptions.push(\n this.topBarService.activeId$.subscribe(() => {\n this.queueActiveTabSync();\n })\n );\n }\n\n protected override async onModuleInstanceChange(): Promise<void> {\n await this.loadExtensionMetadata();\n await this.renderExtension();\n }\n\n protected override onSecurityRightsChange(): void {\n this.updateExtensionContext();\n }\n\n override ngOnDestroy(): void {\n this.destroyed = true;\n this.destroyExtensionElement();\n super.ngOnDestroy();\n }\n\n async reloadExtension(): Promise<void> {\n this.loadError = null;\n this.extensionMetadata = undefined;\n await this.loadExtensionMetadata();\n await this.renderExtension();\n }\n\n private async loadExtensionMetadata(): Promise<void> {\n if (this.extensionMetadata) {\n return;\n }\n\n if (!this.extensionKey) {\n this.loadError = 'Extension key is missing.';\n return;\n }\n\n this.extensionMetadata = (await this.extensionModulesApi.getExtensionModuleByKey({\n extensionKey: this.extensionKey\n })) as unknown as OipExtensionModuleMetadata;\n\n await this.loadExtensionTranslations(this.extensionMetadata);\n }\n\n private async renderExtension(): Promise<void> {\n if (this.destroyed || !this.container || !this.extensionMetadata || !this.showContent) {\n return;\n }\n\n try {\n this.loadError = null;\n this.destroyExtensionElement();\n await this.renderCustomElementExtension(this.extensionMetadata);\n } catch (error) {\n this.loadError = error instanceof Error ? error.message : 'Extension could not be loaded.';\n this.msgService.error(error);\n }\n }\n\n private queueRenderExtension(): void {\n if (this.renderQueued) {\n return;\n }\n this.renderQueued = true;\n queueMicrotask(() => {\n this.renderQueued = false;\n void this.renderExtension();\n });\n }\n\n private isActiveTab(id: string): boolean {\n return this.activeTabId === id;\n }\n\n private queueActiveTabSync(): void {\n const nextActiveTabId = this.getCurrentActiveTabId();\n if (this.activeTabId === nextActiveTabId || this.activeTabSyncQueued) {\n return;\n }\n\n this.activeTabSyncQueued = true;\n queueMicrotask(() => {\n this.activeTabSyncQueued = false;\n if (this.destroyed) {\n return;\n }\n\n this.activeTabId = this.getCurrentActiveTabId();\n this.hostChangeDetectorRef.detectChanges();\n\n if (this.showContent) {\n this.queueRenderExtension();\n } else {\n this.destroyExtensionElement();\n }\n });\n }\n\n private getCurrentActiveTabId(): string {\n return this.topBarService.activeTopBarItem?.id ?? 'content';\n }\n\n private updateExtensionContext(): void {\n if (!this.extensionElement || !this.extensionMetadata?.extensionKey) {\n return;\n }\n\n const context: OipExtensionHostContext = {\n moduleInstanceId: this.id,\n extensionKey: this.extensionMetadata.extensionKey,\n apiBasePath: this.buildUrl(`api/extensions/${this.extensionMetadata.extensionKey}`),\n settings: this.settings,\n locale: this.layoutService.language(),\n theme: this.layoutService.layoutConfig(),\n user: this.securityService.getCurrentUser(),\n activeTabId: this.topBarService.activeId ?? 'content',\n permissions: {\n canRead: this.canRead,\n canEdit: this.canEdit,\n canDelete: this.canDelete\n }\n };\n\n Object.assign(this.extensionElement, { oipContext: context });\n emitOipContextChange(this.extensionElement, context);\n }\n\n private attachListeners(element: HTMLElement): void {\n this.addListener(element, OIP_EXTENSION_EVENTS.titleChange, (event) => {\n const title = (event as CustomEvent<string>).detail;\n if (title) {\n this.appTitleService.setTitle(title);\n }\n });\n\n this.addListener(element, OIP_EXTENSION_EVENTS.settingsChange, (event) => {\n this.settings = (event as CustomEvent<unknown>).detail;\n void this.saveSettings(this.settings);\n });\n\n this.addListener(element, OIP_EXTENSION_EVENTS.notify, (event) => {\n const detail = (event as CustomEvent<OipExtensionNotifyEvent>).detail;\n const severity = detail?.severity ?? 'info';\n const message = detail?.detail ?? detail?.summary ?? '';\n switch (severity) {\n case 'success':\n this.msgService.success(message, detail?.summary);\n break;\n case 'warn':\n this.msgService.warn(message, detail?.summary);\n break;\n case 'error':\n this.msgService.error(message, detail?.summary);\n break;\n default:\n this.msgService.info(message, detail?.summary);\n }\n });\n\n this.addListener(element, OIP_EXTENSION_EVENTS.navigate, (event) => {\n const detail = (event as CustomEvent<OipExtensionNavigateEvent>).detail;\n if (detail?.commands) {\n void this.router.navigate(detail.commands as any[]);\n } else if (detail?.url) {\n void this.router.navigateByUrl(detail.url);\n }\n });\n\n this.addListener(element, OIP_EXTENSION_EVENTS.error, (event) => {\n this.msgService.error((event as CustomEvent<unknown>).detail);\n });\n }\n\n private buildUrl(path: string): string {\n const baseUrl = document.getElementsByTagName('base')[0]?.href ?? `${window.location.origin}/`;\n return `${baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`}${path}`;\n }\n\n private async loadExtensionTranslations(metadata: OipExtensionModuleMetadata): Promise<void> {\n const extensionKey = metadata.extensionKey ?? this.extensionKey;\n const apiBaseUrl = metadata.apiBaseUrl;\n if (!extensionKey || !apiBaseUrl) {\n return;\n }\n\n const lang = this.translateService.currentLang || this.layoutService.language() || 'en';\n const url = this.buildExtensionI18nUrl(apiBaseUrl, extensionKey, lang);\n try {\n await firstValueFrom(this.l10nService.loadTranslationsFromUrl(extensionKey, url, lang));\n } catch (error) {\n console.error(`No translations found for extension ${extensionKey}.${lang}.json`, error);\n }\n }\n\n private buildExtensionI18nUrl(apiBaseUrl: string, extensionKey: string, lang: string): string {\n return `${apiBaseUrl.replace(/\\/+$/, '')}/assets/i18n/${encodeURIComponent(extensionKey)}.${encodeURIComponent(lang)}.json`;\n }\n\n private addListener(element: HTMLElement, eventName: string, listener: EventListener): void {\n element.addEventListener(eventName, listener);\n this.removeListeners.push(() => element.removeEventListener(eventName, listener));\n }\n\n private destroyExtensionElement(): void {\n this.removeListeners.forEach((remove) => remove());\n this.removeListeners = [];\n this.extensionElement?.remove();\n this.extensionElement = undefined;\n }\n\n private async renderCustomElementExtension(metadata: OipExtensionModuleMetadata): Promise<void> {\n const { elementName, scriptUrl } = metadata;\n if (!this.container || !elementName || !scriptUrl) {\n this.loadError = 'Custom Element extension metadata is incomplete.';\n return;\n }\n\n await this.extensionLoader.loadScript(scriptUrl);\n await customElements.whenDefined(elementName);\n const element = document.createElement(elementName);\n this.extensionElement = element;\n this.attachListeners(element);\n this.container.nativeElement.appendChild(element);\n this.updateExtensionContext();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ComponentRef,\n EnvironmentInjector,\n inject,\n Injector,\n OnDestroy,\n Type,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport { loadRemoteModule } from '@angular-architects/module-federation';\nimport { Button } from 'primeng/button';\nimport { firstValueFrom } from 'rxjs';\nimport { BaseModuleComponent } from '../base-module/base-module.component';\nimport { emitOipContextChange } from '../../extension-host/extension-host.events';\nimport { ExtensionModulesApi } from '../../api/extension-modules.api';\nimport { OipExtensionHostContext, OipExtensionModuleMetadata } from '../../extension-host/extension-host.types';\nimport { CustomElementExtensionModuleHostComponent } from '../custom-element-extension-module-host/custom-element-extension-module-host.component';\n\n@Component({\n standalone: true,\n imports: [CommonModule, Button],\n providers: [ExtensionModulesApi],\n template: `\n @if (loadError) {\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ loadError }}</div>\n <p-button icon=\"pi pi-refresh\" label=\"Retry\" (onClick)=\"reloadExtension()\"></p-button>\n </div>\n } @else {\n <ng-container #extensionContainer></ng-container>\n }\n `\n})\nexport class ExtensionModuleHostComponent extends BaseModuleComponent<unknown, unknown> implements OnDestroy {\n @ViewChild('extensionContainer', { read: ViewContainerRef })\n private set extensionViewContainer(viewContainer: ViewContainerRef | undefined) {\n this.viewContainer = viewContainer;\n this.queueRenderExtension();\n }\n\n private readonly injector = inject(Injector);\n private readonly environmentInjector = inject(EnvironmentInjector);\n private readonly extensionModulesApi = inject(ExtensionModulesApi);\n private viewContainer?: ViewContainerRef;\n private extensionComponent?: ComponentRef<unknown>;\n private extensionElement?: HTMLElement;\n private extensionMetadata?: OipExtensionModuleMetadata;\n private renderQueued = false;\n private destroyed = false;\n\n protected loadError: string | null = null;\n\n private get extensionKey(): string {\n return this.route.snapshot.paramMap.get('extensionKey') ?? '';\n }\n\n constructor() {\n super();\n this.subscriptions.push(\n this.topBarService.activeId$.subscribe(() => {\n this.updateExtensionContext();\n })\n );\n }\n\n async reloadExtension(): Promise<void> {\n this.loadError = null;\n this.extensionMetadata = undefined;\n await this.loadExtensionMetadata();\n await this.renderExtension();\n }\n\n protected override async onModuleInstanceChange(): Promise<void> {\n await this.loadExtensionMetadata();\n await this.renderExtension();\n }\n\n protected override onSecurityRightsChange(): void {\n this.updateExtensionContext();\n }\n\n override ngOnDestroy(): void {\n this.destroyed = true;\n this.destroyExtensionComponent();\n super.ngOnDestroy();\n }\n\n private async loadExtensionMetadata(): Promise<void> {\n if (this.extensionMetadata) {\n return;\n }\n\n if (!this.extensionKey) {\n this.loadError = 'Extension key is missing.';\n return;\n }\n\n this.extensionMetadata = (await this.extensionModulesApi.getExtensionModuleByKey({\n extensionKey: this.extensionKey\n })) as unknown as OipExtensionModuleMetadata;\n\n await this.loadExtensionTranslations(this.extensionMetadata);\n }\n\n private async renderExtension(): Promise<void> {\n if (this.destroyed || !this.viewContainer) {\n return;\n }\n\n try {\n this.loadError = null;\n await this.loadExtensionMetadata();\n if (!this.extensionMetadata) {\n return;\n }\n\n this.destroyExtensionComponent();\n\n if (this.extensionMetadata.loadType === 'moduleFederation') {\n await this.renderFederatedExtension(this.extensionMetadata);\n } else {\n this.extensionComponent = this.viewContainer.createComponent(CustomElementExtensionModuleHostComponent, {\n injector: this.injector,\n environmentInjector: this.environmentInjector\n });\n }\n } catch (error) {\n this.loadError = error instanceof Error ? error.message : 'Extension could not be loaded.';\n console.error(error);\n }\n }\n\n private queueRenderExtension(): void {\n if (this.renderQueued) {\n return;\n }\n this.renderQueued = true;\n queueMicrotask(() => {\n this.renderQueued = false;\n void this.renderExtension();\n });\n }\n\n private destroyExtensionComponent(): void {\n this.extensionComponent?.destroy();\n this.extensionComponent = undefined;\n this.extensionElement = undefined;\n this.viewContainer?.clear();\n }\n\n private async renderFederatedExtension(metadata: OipExtensionModuleMetadata): Promise<void> {\n const { remoteEntryUrl, exposedModule, componentName } = metadata;\n if (!remoteEntryUrl || !exposedModule || !componentName) {\n this.loadError = 'Module Federation extension metadata is incomplete.';\n return;\n }\n\n const remoteModule = await loadRemoteModule<Record<string, Type<unknown>>>({\n type: 'module',\n remoteEntry: remoteEntryUrl,\n exposedModule\n });\n const component = remoteModule[componentName];\n if (!component) {\n throw new Error(`Remote component '${componentName}' was not exported by '${exposedModule}'.`);\n }\n\n this.extensionComponent = this.viewContainer?.createComponent(component, {\n environmentInjector: this.environmentInjector\n });\n this.extensionElement = this.extensionComponent?.location.nativeElement as HTMLElement | undefined;\n this.updateExtensionContext();\n }\n\n private async loadExtensionTranslations(metadata: OipExtensionModuleMetadata): Promise<void> {\n const extensionKey = metadata.extensionKey ?? this.extensionKey;\n const apiBaseUrl = metadata.apiBaseUrl;\n if (!extensionKey || !apiBaseUrl) {\n return;\n }\n\n const lang = this.translateService.currentLang || this.layoutService.language() || 'en';\n for (const namespace of this.getExtensionTranslationNamespaces(metadata, extensionKey)) {\n const url = this.buildExtensionI18nUrl(apiBaseUrl, namespace, lang);\n try {\n await firstValueFrom(this.l10nService.loadTranslationsFromUrl(namespace, url, lang));\n return;\n } catch (error) {\n console.error(`No translations found for extension ${namespace}.${lang}.json`, error);\n }\n }\n }\n\n private buildExtensionI18nUrl(apiBaseUrl: string, extensionKey: string, lang: string): string {\n return `${apiBaseUrl.replace(/\\/+$/, '')}/assets/i18n/${encodeURIComponent(extensionKey)}.${encodeURIComponent(lang)}.json`;\n }\n\n private getExtensionTranslationNamespaces(metadata: OipExtensionModuleMetadata, extensionKey: string): string[] {\n const namespaces = [extensionKey];\n const componentNamespace = this.toKebabCase(metadata.componentName?.replace(/Component$/, '') ?? '');\n if (componentNamespace && !namespaces.includes(componentNamespace)) {\n namespaces.push(componentNamespace);\n }\n\n return namespaces;\n }\n\n private toKebabCase(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n }\n\n private updateExtensionContext(): void {\n if (!this.extensionElement || !this.extensionMetadata?.extensionKey) {\n return;\n }\n\n const context: OipExtensionHostContext = {\n moduleInstanceId: this.id,\n extensionKey: this.extensionMetadata.extensionKey,\n apiBasePath: this.buildUrl(`api/extensions/${this.extensionMetadata.extensionKey}`),\n settings: this.settings,\n locale: this.layoutService.language(),\n theme: this.layoutService.layoutConfig(),\n user: this.securityService.getCurrentUser(),\n activeTabId: this.topBarService.activeId ?? 'content',\n permissions: {\n canRead: this.canRead,\n canEdit: this.canEdit,\n canDelete: this.canDelete\n }\n };\n\n Object.assign(this.extensionElement, { oipContext: context });\n emitOipContextChange(this.extensionElement, context);\n }\n\n private buildUrl(path: string): string {\n const baseUrl = document.getElementsByTagName('base')[0]?.href ?? `${window.location.origin}/`;\n return `${baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`}${path}`;\n }\n}\n","import { inject, Injectable } from '@angular/core';\r\nimport { map } from 'rxjs/operators';\r\nimport { Observable } from 'rxjs';\r\nimport { SecurityService } from './security.service';\r\n\r\n/**\r\n * A route guard that ensures the user is authenticated and has a valid access token.\r\n * If the access token is expired, it attempts to refresh the session.\r\n * If authentication fails or refresh is unsuccessful, redirects to the unauthorized page.\r\n */\r\n@Injectable()\r\nexport class AuthGuardService {\r\n private readonly oidcSecurityService = inject(SecurityService);\r\n\r\n /**\r\n * Checks whether the route can be activated.\r\n * - Returns `true` if the user is authenticated and the token is valid.\r\n * - Attempts to refresh the token if expired.\r\n * - Starts the authorization flow if not authenticated or refresh fails.\r\n *\r\n * @returns {Observable<boolean>} A stream resolving to true (allow), or false after starting authorization.\r\n */\r\n canActivate(returnUrl = '/'): Observable<boolean> {\r\n this.oidcSecurityService.auth();\r\n return this.oidcSecurityService.isAuthenticated().pipe(\r\n map((authenticated) => {\r\n if (authenticated) {\r\n return true;\r\n }\r\n\r\n this.oidcSecurityService.authorize(returnUrl);\r\n return false;\r\n })\r\n );\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\nimport { MenuApi } from '../api/menu.api';\nimport { SecurityService } from './security.service';\n\n/**\n * Reads the rights the current user has on a module instance.\n *\n * Results are cached per instance and dropped whenever the authenticated user changes.\n */\n@Injectable()\nexport class ModuleInstanceRightsService {\n public static readonly readRight = 'read';\n\n private readonly menuApi = inject(MenuApi);\n private readonly securityService = inject(SecurityService);\n private readonly cache = new Map<number, Promise<string[]>>();\n private cachedIdentity: string | undefined = undefined;\n\n constructor() {\n this.securityService.payload.subscribe((payload) => {\n // Rights depend on both the user and the roles of the current session.\n const roles: string[] = payload?.realm_access?.roles ?? [];\n const identity = `${payload?.preferred_username ?? ''}|${[...roles].sort().join(',')}`;\n if (identity !== this.cachedIdentity) {\n this.cachedIdentity = identity;\n this.clearCache();\n }\n });\n }\n\n /**\n * Gets the rights of the current user on the given module instance.\n */\n public getRights(moduleInstanceId: number): Promise<string[]> {\n const cached = this.cache.get(moduleInstanceId);\n if (cached) {\n return cached;\n }\n\n const request = this.menuApi\n .getModuleInstanceRights({ id: moduleInstanceId })\n .then((rights) => rights ?? [])\n .catch((error) => {\n this.cache.delete(moduleInstanceId);\n throw error;\n });\n\n this.cache.set(moduleInstanceId, request);\n return request;\n }\n\n /**\n * Checks whether the current user has the `read` right on the given module instance.\n */\n public async canRead(moduleInstanceId: number): Promise<boolean> {\n const rights = await this.getRights(moduleInstanceId);\n return rights.includes(ModuleInstanceRightsService.readRight);\n }\n\n /**\n * Drops every cached result, for example after module security was changed.\n */\n public clearCache(): void {\n this.cache.clear();\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateChildFn, Router } from '@angular/router';\nimport { firstValueFrom } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { ModuleInstanceRightsService } from './module-instance-rights.service';\nimport { SecurityService } from './security.service';\n\n/**\n * Route data flag marking a route that only administrators may open.\n */\nexport interface ModuleAccessRouteData {\n requireAdmin?: boolean;\n}\n\n/**\n * Guards module routes against direct navigation without the required rights.\n *\n * - Routes flagged with `data: { requireAdmin: true }` require the `admin` role.\n * - Routes carrying an `:id` segment require the `read` right on that module instance.\n * - Everything else is left to {@link AuthGuardService}.\n *\n * Denied navigation is redirected to the access denied page. This is a UX guard only:\n * the backend checks the same rights on every module endpoint.\n */\nexport const moduleAccessGuard: CanActivateChildFn = async (route) => {\n const router = inject(Router);\n const securityService = inject(SecurityService);\n const rightsService = inject(ModuleInstanceRightsService);\n const accessDenied = router.parseUrl('/access');\n\n if ((route.data as ModuleAccessRouteData)?.requireAdmin) {\n // Wait for the session payload so a direct URL entry does not read roles before they are loaded.\n await firstValueFrom(\n securityService.payload.pipe(\n filter((payload) => payload != null),\n take(1)\n )\n );\n return securityService.isAdmin() ? true : accessDenied;\n }\n\n const routeId = route.paramMap.get('id');\n if (routeId == null) {\n return true;\n }\n\n const moduleInstanceId = Number(routeId);\n if (!Number.isFinite(moduleInstanceId)) {\n return accessDenied;\n }\n\n try {\n return (await rightsService.canRead(moduleInstanceId)) ? true : accessDenied;\n } catch (error) {\n console.error('Failed to load module instance rights', error);\n return accessDenied;\n }\n};\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { FilterMetadata } from 'primeng/api';\r\nimport { Table } from 'primeng/table';\r\n\r\n/**\r\n * Prime-ng table filter service\r\n */\r\n@Injectable()\r\nexport class TableFilterService {\r\n public filterState: { [field: string]: boolean } = {};\r\n private filtersState = new BehaviorSubject<boolean>(false);\r\n public filtersState$ = this.filtersState.asObservable();\r\n\r\n /**\r\n * Updates filter state\r\n * @param filters\r\n */\r\n public updateFiltersState(filters: any) {\r\n const hasFilters = Object.values(filters).some((filterArray: any) => {\r\n if (Array.isArray(filterArray)) {\r\n return filterArray.some((filter) => !!filter.value);\r\n }\r\n return false;\r\n });\r\n this.filtersState.next(hasFilters);\r\n }\r\n\r\n /**\r\n * Checks if a filter is active\r\n * @param {FilterMetadata | FilterMetadata[]} filter\r\n * @return {boolean}\r\n */\r\n public isFilterActive(filter: FilterMetadata | FilterMetadata[]): boolean {\r\n if (!filter) return false;\r\n\r\n if (Array.isArray(filter)) {\r\n return filter.some((f) => !!f.value && f.matchMode !== 'unspecified');\r\n } else {\r\n return !!filter.value && filter.matchMode !== 'unspecified';\r\n }\r\n }\r\n\r\n /**\r\n * Checks the state of table filters\r\n * @param {Table} table\r\n * @param {FilterMetadata | FilterMetadata[]} filters\r\n */\r\n public updateFilterFieldStates(table: Table, filters: FilterMetadata | FilterMetadata[]) {\r\n if (table && filters) {\r\n Object.keys(filters).forEach((field) => {\r\n const filter = filters[field];\r\n this.filterState[field] = this.isFilterActive(filter);\r\n });\r\n }\r\n this.updateFiltersState(filters);\r\n }\r\n}\r\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\r\nimport {\r\n APP_THEME_PRESETS,\r\n APP_THEME_PRESETS_MERGE_MODE,\r\n AppThemePreset,\r\n AppThemePresetMergeMode\r\n} from './theme-presets.token';\r\n\r\nexport interface ProvideAppThemesOptions {\r\n mode?: AppThemePresetMergeMode;\r\n}\r\n\r\nexport function provideAppThemes(themes: AppThemePreset[], options?: ProvideAppThemesOptions): EnvironmentProviders {\r\n const mode = options?.mode ?? 'mergeWithDefaults';\r\n return makeEnvironmentProviders([\r\n { provide: APP_THEME_PRESETS, useValue: themes },\r\n { provide: APP_THEME_PRESETS_MERGE_MODE, useValue: mode }\r\n ]);\r\n}\r\n\r\nexport function mergeWithDefaults(themes: AppThemePreset[]): EnvironmentProviders {\r\n return provideAppThemes(themes, { mode: 'mergeWithDefaults' });\r\n}\r\n\r\nexport function replaceDefaults(themes: AppThemePreset[]): EnvironmentProviders {\r\n return provideAppThemes(themes, { mode: 'replaceDefaults' });\r\n}\r\n","import { definePreset } from '@primeng/themes';\nimport Aura from '@primeng/themes/aura';\nimport { primitive } from '@primeng/themes/aura/base';\nimport { AppThemePreset } from './theme-presets.token';\n\nexport const defaultTheme: AppThemePreset[] = [\n {\n id: 'Oip',\n label: 'Oip',\n preset: definePreset(Aura, {\n components: {\n toolbar: {\n colorScheme: {\n light: {\n root: {\n borderRadius: '0.7rem'\n }\n },\n dark: {\n root: {\n borderRadius: '0.7rem'\n }\n }\n }\n }\n }\n }),\n primaryColors: {\n rose: primitive['red']\n },\n surfaceColors: {\n zinc: {\n 0: '#ffffff',\n 50: '#fafafa',\n 100: '#f4f4f5',\n 200: '#e4e4e7',\n 300: '#d4d4d8',\n 400: '#a1a1aa',\n 500: '#71717a',\n 600: '#52525b',\n 700: '#3f3f46',\n 800: '#27272a',\n 900: '#18181b',\n 950: '#09090b'\n }\n }\n }\n];\n","import { inject } from '@angular/core';\nimport { HttpInterceptorFn } from '@angular/common/http';\nimport { switchMap, take } from 'rxjs/operators';\nimport { LayoutService } from '../services/app.layout.service';\nimport { SecurityService } from '../services/security.service';\n\nexport const langIntercept: HttpInterceptorFn = (req, next) => {\n const layoutService = inject(LayoutService);\n const securityService = inject(SecurityService);\n const lang = layoutService.language() ? layoutService.language() : 'en';\n const headers = req.headers.set('Accept-language', lang).set('X-Timezone', layoutService.timeZone());\n const reqWithCredentials = req.clone({\n headers,\n withCredentials: true\n });\n\n if (!['POST', 'PUT', 'PATCH', 'DELETE'].includes(req.method.toUpperCase())) {\n return next(reqWithCredentials);\n }\n\n if (req.url.includes('/api/security/create-auth-session') || req.url.includes('/api/security/get-auth-csrf-token')) {\n return next(reqWithCredentials);\n }\n\n return securityService.getCsrfToken().pipe(\n take(1),\n switchMap((csrfToken) =>\n next(\n csrfToken?.token\n ? reqWithCredentials.clone({\n headers: reqWithCredentials.headers.set(csrfToken.headerName, csrfToken.token)\n })\n : reqWithCredentials\n )\n )\n );\n};\n","import { LocationStrategy, PathLocationStrategy } from '@angular/common';\nimport { HttpClient, provideHttpClient, withFetch, withInterceptors } from '@angular/common/http';\nimport { importProvidersFrom, makeEnvironmentProviders } from '@angular/core';\nimport { TranslateLoader, TranslateModule } from '@ngx-translate/core';\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\nimport { MessageService } from 'primeng/api';\nimport { MenuApi } from '../api/menu.api';\nimport { NotificationApi } from '../api/notification.api';\nimport { SecurityApi } from '../api/security.api';\nimport { UserProfileApi } from '../api/user-profile.api';\nimport { langIntercept } from '../intercepts/i18n-intercept.service';\nimport { AuthGuardService } from '../services/auth-guard.service';\nimport { ModuleInstanceRightsService } from '../services/module-instance-rights.service';\nimport { NotificationService } from '../services/notification.service';\nimport { BffSecurityService, SecurityService } from '../services/security.service';\nimport { UserService } from '../services/user.service';\n\nconst httpLoaderFactory: (http: HttpClient) => TranslateHttpLoader = (http: HttpClient) =>\n new TranslateHttpLoader(http);\n\nexport function provideOip() {\n return makeEnvironmentProviders([\n provideHttpClient(withInterceptors([langIntercept]), withFetch()),\n { provide: LocationStrategy, useClass: PathLocationStrategy },\n { provide: SecurityService, useClass: BffSecurityService },\n AuthGuardService,\n ModuleInstanceRightsService,\n MessageService,\n UserService,\n NotificationService,\n UserProfileApi,\n SecurityApi,\n NotificationApi,\n MenuApi,\n importProvidersFrom([\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: httpLoaderFactory,\n deps: [HttpClient]\n }\n })\n ])\n ]);\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport { ApiExceptionResponse, FolderModuleSettings } from \"./data-contracts\";\nimport { HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class FolderModuleApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getModuleInstanceSettings = (params: RequestParams = {}) =>\n this.request<FolderModuleSettings, ApiExceptionResponse>({\n path: `/api/folder-module/get-module-instance-settings`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport { ApiExceptionResponse, IframeModuleSettings } from \"./data-contracts\";\nimport { HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class IframeModuleApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getModuleInstanceSettings = (params: RequestParams = {}) =>\n this.request<IframeModuleSettings, ApiExceptionResponse>({\n path: `/api/iframe-module/get-module-instance-settings`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","// Components\nexport { BaseModuleComponent } from './components/base-module/base-module.component';\nexport { SecurityComponent } from './components/security/security.component';\nexport { AppTopbar } from './components/top-bar/top-bar.component';\nexport { FooterComponent } from './components/footer/footer.component';\nexport { MenuComponent } from './components/menu/menu.component';\nexport { AppLayoutComponent } from './components/app.layout/app.layout.component';\nexport { SidebarComponent } from './components/sidebar/sidebar.component';\nexport { LogoComponent } from './components/logo/logo.component';\nexport { NotfoundComponent } from './components/notfound/notfound.component';\nexport { UnauthorizedComponent } from './components/auth/unauthorized/unauthorized.component';\nexport { AccessComponent } from './components/auth/access/access.component';\nexport { ErrorComponent } from './components/auth/error/error.component';\nexport { UserProfileComponent } from './components/user-profile/user-profile.component';\nexport { ConfigComponent } from './components/config/config.component';\nexport { DbMigrationComponent } from './components/db-migration/db-migration.component';\nexport { AppModulesComponent } from './components/app-modules/app-modules.component';\nexport { ApplicationsComponent } from './components/applications/applications.component';\nexport { AppConfiguratorComponent } from './components/app-configurator/app-configurator.component';\nexport { AppFloatingConfiguratorComponent } from './components/app-floating-configurator/app-floating-configurator.component';\nexport { DiscussionComponent } from './components/discussion/discussion.component';\nexport { IframeModuleComponent } from './components/iframe-module/iframe-module.component';\nexport { ExtensionModuleHostComponent } from './components/extension-module-host/extension-module-host.component';\nexport { UserNotificationsComponent } from './components/user-notifications/user-notifications.component';\nexport { AppTopbarApplicationSwitcherComponent } from './components/top-bar-application-switcher/top-bar-application-switcher.component';\n\n// DTOs\nexport { TopBarDto } from './dtos/top-bar.dto';\nexport { SecurityDto } from './dtos/security.dto';\nexport { PutSecurityDto } from './dtos/put-security.dto';\nexport { NoSettingsDto } from './dtos/no-settings.dto';\n\n// Services\nexport { TopBarService } from './services/top-bar.service';\nexport { AuthCsrfToken, BffSecurityService, SecurityService } from './services/security.service';\nexport { MsgService } from './services/msg.service';\nexport { AuthGuardService } from './services/auth-guard.service';\nexport { moduleAccessGuard, ModuleAccessRouteData } from './services/module-access-guard.service';\nexport { ModuleInstanceRightsService } from './services/module-instance-rights.service';\nexport { AppConfig, LayoutService } from './services/app.layout.service';\nexport { MenuService } from './services/app.menu.service';\nexport { UserService } from './services/user.service';\nexport { L10nService, LanguageDto } from './services/l10n.service';\nexport { provideLogoComponent, LogoService, LOGO_COMPONENT_TOKEN } from './services/logo.service';\nexport { provideAppInfo, AppInfoService, APP_INFO_TOKEN, AppInfo, AppInfoValue } from './services/app-info.service';\nexport { NotificationService } from './services/notification.service';\nexport { ApplicationRegistryService } from './services/application-registry.service';\nexport { TableFilterService } from './services/table-filter.service';\nexport { ExtensionLoaderService } from './extension-host/extension-loader.service';\nexport {\n APP_THEME_PRESETS,\n APP_THEME_PRESETS_MERGE_MODE,\n AppThemePreset,\n AppThemePresetMergeMode\n} from './services/theme-presets.token';\nexport { mergeWithDefaults, provideAppThemes, replaceDefaults } from './services/theme-presets.provider';\nexport { defaultTheme } from './services/app-default.theme';\nexport { provideOip } from './providers/oip.provider';\n\n// Events\nexport { MenuChangeEvent } from './events/menu-change.event';\n\n// other\nexport { langIntercept } from './intercepts/i18n-intercept.service';\nexport { ContentType, HttpClient, RequestParams } from './api/http-client';\nexport {\n OipExtensionHostContext,\n OipExtensionLoadType,\n OipExtensionManifest,\n OipExtensionModuleMetadata,\n OipExtensionNavigateEvent,\n OipExtensionNotifyEvent\n} from './extension-host/extension-host.types';\nexport {\n OIP_EXTENSION_EVENTS,\n emitOipContextChange,\n emitOipError,\n emitOipNavigate,\n emitOipNotify,\n emitOipSettingsChange,\n emitOipTitleChange\n} from './extension-host/extension-host.events';\nexport { FolderModuleApi } from './api/folder-module.api';\nexport { IframeModuleApi } from './api/iframe-module.api';\nexport { SecurityApi } from './api/security.api';\nexport { ApplicationsApi } from './api/applications.api';\nexport { UserProfileApi } from './api/user-profile.api';\nexport { convertToPrimeNgDateFormat } from './helpers/date.helper';\nexport { provideTranslations } from './helpers/l10n.helper';\nexport { NotificationApi } from './api/notification.api';\nexport { CustomElementExtensionModuleHostComponent } from './components/custom-element-extension-module-host/custom-element-extension-module-host.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["en","ru","HttpClient","tap","i3","i1","i2","i4","i5","i2.MenuService","i6","i7","filter","i10"],"mappings":"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"}