@valtimo/admin-settings 13.46.0 → 13.47.0
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.
- package/fesm2022/valtimo-admin-settings.mjs +770 -27
- package/fesm2022/valtimo-admin-settings.mjs.map +1 -1
- package/lib/components/admin-settings/admin-settings.component.d.ts +1 -0
- package/lib/components/admin-settings-menu-configuration/admin-settings-menu-configuration.component.d.ts +172 -0
- package/lib/constants/admin-settings.constants.d.ts +1 -0
- package/lib/constants/index.d.ts +1 -0
- package/lib/constants/menu-configuration.test-ids.d.ts +10 -0
- package/lib/models/index.d.ts +1 -0
- package/lib/models/menu-configuration.model.d.ts +22 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valtimo-admin-settings.mjs","sources":["../../../../projects/valtimo/admin-settings/src/lib/constants/accent-colors.constants.ts","../../../../projects/valtimo/admin-settings/src/lib/constants/admin-settings.constants.ts","../../../../projects/valtimo/admin-settings/src/lib/constants/feature-toggle.constants.ts","../../../../projects/valtimo/admin-settings/src/lib/services/admin-settings-management-api.service.ts","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-logo/admin-settings-logo.component.ts","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-logo/admin-settings-logo.component.html","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-color/admin-settings-color.component.ts","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-color/admin-settings-color.component.html","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-appearance/admin-settings-appearance.component.ts","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-appearance/admin-settings-appearance.component.html","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-feature-toggles/admin-settings-feature-toggles.component.ts","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-feature-toggles/admin-settings-feature-toggles.component.html","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings/admin-settings.component.ts","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings/admin-settings.component.html","../../../../projects/valtimo/admin-settings/src/lib/components/start-reindex-modal/start-reindex-modal.component.ts","../../../../projects/valtimo/admin-settings/src/lib/components/start-reindex-modal/start-reindex-modal.component.html","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-opensearch/admin-settings-opensearch.component.ts","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-opensearch/admin-settings-opensearch.component.html","../../../../projects/valtimo/admin-settings/src/lib/admin-settings-routing.ts","../../../../projects/valtimo/admin-settings/src/lib/admin-settings.module.ts","../../../../projects/valtimo/admin-settings/src/lib/models/accent-colors.model.ts","../../../../projects/valtimo/admin-settings/src/lib/models/feature-toggle.model.ts","../../../../projects/valtimo/admin-settings/src/lib/models/reindex.model.ts","../../../../projects/valtimo/admin-settings/src/lib/models/search-engine.model.ts","../../../../projects/valtimo/admin-settings/src/lib/models/index.ts","../../../../projects/valtimo/admin-settings/src/public-api.ts","../../../../projects/valtimo/admin-settings/src/valtimo-admin-settings.ts"],"sourcesContent":["/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {AccentColorDefinition} from '../models';\n\nconst ACCENT_COLOR_DEFINITIONS: AccentColorDefinition[] = [\n {\n cssVar: '--vcds-color-100',\n labelTranslationKey: 'adminSettings.appearance.colors.color100',\n },\n {\n cssVar: '--vcds-color-90',\n labelTranslationKey: 'adminSettings.appearance.colors.color90',\n },\n {\n cssVar: '--vcds-color-80',\n labelTranslationKey: 'adminSettings.appearance.colors.color80',\n },\n {\n cssVar: '--vcds-color-70',\n labelTranslationKey: 'adminSettings.appearance.colors.color70',\n },\n {\n cssVar: '--vcds-color-60',\n labelTranslationKey: 'adminSettings.appearance.colors.color60',\n },\n {\n cssVar: '--vcds-color-50',\n labelTranslationKey: 'adminSettings.appearance.colors.color50',\n },\n {\n cssVar: '--vcds-color-40',\n labelTranslationKey: 'adminSettings.appearance.colors.color40',\n },\n {\n cssVar: '--vcds-color-30',\n labelTranslationKey: 'adminSettings.appearance.colors.color30',\n },\n {\n cssVar: '--vcds-color-20',\n labelTranslationKey: 'adminSettings.appearance.colors.color20',\n },\n {\n cssVar: '--vcds-color-10',\n labelTranslationKey: 'adminSettings.appearance.colors.color10',\n },\n];\n\nexport {ACCENT_COLOR_DEFINITIONS};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ADMIN_SETTINGS_TABS = {\n APPEARANCE: 'appearance',\n FEATURE_TOGGLES: 'feature-toggles',\n} as const;\n\nexport {ADMIN_SETTINGS_TABS};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {FeatureToggleDefinition} from '../models';\n\nconst FEATURE_TOGGLE_DEFINITIONS: FeatureToggleDefinition[] = [\n {key: 'allowUserThemeSwitching'},\n {key: 'enableCompactModeToggle'},\n {key: 'compactModeOnByDefault'},\n {key: 'enableUserNameInTopBarToggle'},\n {key: 'showUserNameInTopBar'},\n {key: 'showPlantATreeButton'},\n {key: 'largeLogoMargin'},\n {key: 'applicationTitleAsSuffix'},\n {key: 'disableCaseCount'},\n {key: 'enableObjectManagement'},\n {key: 'sortFilesByDate'},\n {key: 'returnToLastUrlAfterTokenExpiration'},\n {key: 'enableTabManagement'},\n {key: 'hideValtimoVersionsForNonAdmins'},\n {key: 'useStartEventNameAsStartFormTitle'},\n {key: 'enableFormViewModel'},\n {key: 'enableIntermediateSave'},\n {key: 'enableFormFlowBreadcrumbs'},\n {key: 'enablePbacDocumentenApiDocuments'},\n {key: 'enableSuppressDocumentError'},\n {key: 'enableIkoType'},\n {key: 'menuCollapsedByDefault'},\n {key: 'enableGenericCaseList'},\n {key: 'enableManualTaskListRefresh'},\n {key: 'disableFormioTokenInLocalStorage'},\n];\n\nexport {FEATURE_TOGGLE_DEFINITIONS};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Injectable} from '@angular/core';\nimport {HttpClient, HttpParams} from '@angular/common/http';\nimport {catchError, Observable, of} from 'rxjs';\nimport {\n AdminSettingsLogoDto,\n AdminSettingsLogosDto,\n BaseApiService,\n ConfigService,\n CreateAdminSettingsLogoDto,\n Page,\n} from '@valtimo/shared';\nimport {\n AccentColorsDto,\n FeatureToggleOverridesDto,\n ReindexStatusDto,\n SearchEngineDto,\n StartReindexRequestDto,\n StartReindexResponseDto,\n UpdateFeatureToggleDto,\n} from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AdminSettingsManagementApiService extends BaseApiService {\n constructor(\n protected readonly httpClient: HttpClient,\n protected readonly configService: ConfigService\n ) {\n super(httpClient, configService);\n }\n\n public getLogos(): Observable<AdminSettingsLogosDto> {\n return this.httpClient.get<AdminSettingsLogosDto>(\n this.getApiUrl('/v1/admin-settings/logos')\n );\n }\n\n public uploadLogo(\n logoType: string,\n dto: CreateAdminSettingsLogoDto\n ): Observable<AdminSettingsLogoDto> {\n return this.httpClient.post<AdminSettingsLogoDto>(\n this.getApiUrl(`/management/v1/admin-settings/logo/${logoType}`),\n dto\n );\n }\n\n public deleteLogo(logoType: string): Observable<void> {\n return this.httpClient.delete<void>(\n this.getApiUrl(`/management/v1/admin-settings/logo/${logoType}`)\n );\n }\n\n public getFeatureToggleOverrides(): Observable<FeatureToggleOverridesDto> {\n return this.httpClient.get<FeatureToggleOverridesDto>(\n this.getApiUrl('/v1/admin-settings/feature-toggles')\n );\n }\n\n public updateFeatureToggle(dto: UpdateFeatureToggleDto): Observable<FeatureToggleOverridesDto> {\n return this.httpClient.put<FeatureToggleOverridesDto>(\n this.getApiUrl('/management/v1/admin-settings/feature-toggles'),\n dto\n );\n }\n\n public removeFeatureToggle(key: string): Observable<FeatureToggleOverridesDto> {\n return this.httpClient.delete<FeatureToggleOverridesDto>(\n this.getApiUrl(`/management/v1/admin-settings/feature-toggles/${key}`)\n );\n }\n\n public getAccentColors(): Observable<AccentColorsDto> {\n return this.httpClient.get<AccentColorsDto>(\n this.getApiUrl('/v1/admin-settings/accent-colors')\n );\n }\n\n public updateAccentColors(dto: AccentColorsDto): Observable<AccentColorsDto> {\n return this.httpClient.put<AccentColorsDto>(\n this.getApiUrl('/management/v1/admin-settings/accent-colors'),\n dto\n );\n }\n\n public getSearchEngine(): Observable<SearchEngineDto | null> {\n return this.httpClient\n .get<SearchEngineDto>(this.getApiUrl('/management/v1/search-engine'))\n .pipe(catchError(() => of(null)));\n }\n\n public updateSearchEngine(useOpenSearch: boolean): Observable<SearchEngineDto> {\n return this.httpClient.put<SearchEngineDto>(\n this.getApiUrl('/management/v1/search-engine'),\n {active: useOpenSearch ? 'OPENSEARCH' : 'POSTGRES'}\n );\n }\n\n public startReindex(request: StartReindexRequestDto = {}): Observable<StartReindexResponseDto> {\n return this.httpClient.post<StartReindexResponseDto>(\n this.getApiUrl('/management/v1/document-opensearch/reindex'),\n request\n );\n }\n\n public getReindexStatus(): Observable<ReindexStatusDto | null> {\n return this.httpClient\n .get<ReindexStatusDto>(this.getApiUrl('/management/v1/document-opensearch/reindex/status'))\n .pipe(catchError(() => of(null)));\n }\n\n public getReindexRuns(page: number, size: number): Observable<Page<ReindexStatusDto>> {\n const params = new HttpParams().set('page', page.toString()).set('size', size.toString());\n return this.httpClient.get<Page<ReindexStatusDto>>(\n this.getApiUrl('/management/v1/document-opensearch/reindex/runs'),\n {params}\n );\n }\n\n public getReindexRun(runId: string): Observable<ReindexStatusDto> {\n return this.httpClient.get<ReindexStatusDto>(\n this.getApiUrl(`/management/v1/document-opensearch/reindex/${runId}`)\n );\n }\n}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {FormBuilder, FormControl, ReactiveFormsModule, Validators} from '@angular/forms';\nimport {\n AdminSettingsService,\n ConfirmationModalModule,\n RenderInBodyComponent,\n} from '@valtimo/components';\nimport {\n ButtonModule,\n FileUploaderModule,\n IconModule,\n IconService,\n LayerModule,\n LoadingModule,\n} from 'carbon-components-angular';\nimport {BehaviorSubject, map, Subscription, switchMap, tap} from 'rxjs';\nimport {TrashCan16, Upload16} from '@carbon/icons';\nimport {AdminSettingsManagementApiService} from '../../services';\n\n@Component({\n standalone: true,\n selector: 'valtimo-admin-settings-logo',\n templateUrl: './admin-settings-logo.component.html',\n styleUrls: ['./admin-settings-logo.component.scss'],\n imports: [\n CommonModule,\n TranslatePipe,\n ReactiveFormsModule,\n LayerModule,\n ButtonModule,\n FileUploaderModule,\n LoadingModule,\n IconModule,\n ConfirmationModalModule,\n RenderInBodyComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdminSettingsLogoComponent implements OnInit, OnDestroy {\n @Input() public logoType!: string;\n @Input() public titleTranslationKey!: string;\n\n public get previewTheme(): string {\n return this.logoType === 'LOGO_DARK_MODE' ? 'g90' : 'g10';\n }\n\n public readonly ACCEPTED_FILES: string[] = ['png', 'svg'];\n\n public readonly formGroup = this._formBuilder.group({\n file: this._formBuilder.control(new Set<any>(), [Validators.required]),\n });\n\n public get file(): FormControl<Set<any>> {\n return this.formGroup.get('file') as FormControl<Set<File>>;\n }\n\n public readonly loading$ = new BehaviorSubject<boolean>(true);\n\n private readonly _refresh$ = new BehaviorSubject<null>(null);\n\n public readonly logo$ = this._refresh$.pipe(\n switchMap(() => this._adminSettingsManagementApiService.getLogos()),\n map(logos => (this.logoType === 'LOGO' ? logos.logo : logos.logoDarkMode) ?? null),\n tap(() => this.loading$.next(false))\n );\n\n public readonly showDeleteConfirmationModal$ = new BehaviorSubject<boolean>(false);\n\n private readonly _subscriptions = new Subscription();\n\n constructor(\n private readonly _adminSettingsManagementApiService: AdminSettingsManagementApiService,\n private readonly _adminSettingsService: AdminSettingsService,\n private readonly _formBuilder: FormBuilder,\n private readonly _iconService: IconService\n ) {\n this._iconService.registerAll([Upload16, TrashCan16]);\n }\n\n public ngOnInit(): void {\n this._subscriptions.add(this.logo$.subscribe());\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n public async onSave(): Promise<void> {\n const file = Array.from(this.file.value)[0]?.file;\n const imageBase64 = await this._fileToBase64(file);\n\n this.formGroup.disable();\n\n this._adminSettingsManagementApiService.uploadLogo(this.logoType, {imageBase64}).subscribe({\n next: () => {\n this.loading$.next(true);\n this._refresh$.next(null);\n this._adminSettingsService.refreshLogos();\n this.formGroup.enable();\n },\n error: () => {\n this.formGroup.enable();\n },\n });\n }\n\n public getImageSrc(imageBase64: string): string {\n const mimeType = this._isSvg(imageBase64) ? 'image/svg+xml' : 'image/png';\n return `data:${mimeType};base64,${imageBase64}`;\n }\n\n public onDeleteButtonClick(): void {\n this.showDeleteConfirmationModal$.next(true);\n }\n\n public onDelete(): void {\n this._adminSettingsManagementApiService.deleteLogo(this.logoType).subscribe(() => {\n this.loading$.next(true);\n this._refresh$.next(null);\n this._adminSettingsService.refreshLogos();\n });\n }\n\n private _isSvg(base64: string): boolean {\n try {\n const decoded = atob(base64.substring(0, 64));\n const trimmed = decoded.trimStart();\n return trimmed.startsWith('<?xml') || trimmed.startsWith('<svg');\n } catch {\n return false;\n }\n }\n\n private async _fileToBase64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n const result = reader.result as string;\n const pureBase64 = result.split(',')[1];\n resolve(pureBase64);\n };\n reader.onerror = error => reject(error);\n });\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form\n *ngIf=\"{\n logo: logo$ | async,\n loading: loading$ | async,\n } as obs\"\n class=\"admin-settings-logo\"\n [formGroup]=\"formGroup\"\n [cdsLayer]=\"1\"\n>\n <h4 class=\"admin-settings-logo__title\">\n {{ titleTranslationKey | translate }}\n </h4>\n\n @if (obs.loading) {\n <div class=\"loading-container\"><cds-loading></cds-loading></div>\n } @else if (obs.logo) {\n <div class=\"admin-settings-logo__preview\" [attr.data-carbon-theme]=\"previewTheme\">\n <img\n class=\"admin-settings-logo__image\"\n [src]=\"getImageSrc(obs.logo.imageBase64)\"\n />\n </div>\n\n <div class=\"admin-settings-logo__buttons\">\n <button cdsButton=\"danger\" (click)=\"onDeleteButtonClick()\" [disabled]=\"formGroup.disabled\">\n {{ 'interface.delete' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </div>\n } @else {\n <cds-file-uploader\n [accept]=\"ACCEPTED_FILES\"\n [multiple]=\"false\"\n buttonType=\"primary\"\n [title]=\"'adminSettings.appearance.logo.fileUploaderTitle' | translate\"\n [description]=\"'adminSettings.appearance.logo.fileUploaderDescription' | translate\"\n [buttonText]=\"'adminSettings.appearance.logo.fileUploaderButton' | translate\"\n formControlName=\"file\"\n >\n </cds-file-uploader>\n\n <div class=\"admin-settings-logo__buttons\">\n <button\n cdsButton=\"primary\"\n [disabled]=\"formGroup.disabled || formGroup.invalid || formGroup.pristine\"\n (click)=\"onSave()\"\n >\n {{ 'interface.upload' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n </div>\n }\n</form>\n\n<valtimo-render-in-body>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"adminSettings.appearance.logo.deleteConfirmationModalText\"\n [showModalSubject$]=\"showDeleteConfirmationModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDelete()\"\n ></valtimo-confirmation-modal>\n</valtimo-render-in-body>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectionStrategy, Component, OnDestroy, OnInit} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormBuilder, FormGroup, ReactiveFormsModule} from '@angular/forms';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {\n ButtonModule,\n IconModule,\n IconService,\n LayerModule,\n LinkModule,\n LoadingModule,\n NotificationModule,\n} from 'carbon-components-angular';\nimport {Reset16} from '@carbon/icons';\nimport {AdminSettingsService, ColorPickerComponent, ColorPickerI18n} from '@valtimo/components';\nimport {BehaviorSubject, map, Observable, Subscription, switchMap, tap} from 'rxjs';\nimport {AdminSettingsManagementApiService} from '../../services';\nimport {ACCENT_COLOR_DEFINITIONS} from '../../constants';\nimport {AccentColorDefinition} from '../../models';\n\n@Component({\n standalone: true,\n selector: 'valtimo-admin-settings-color',\n templateUrl: './admin-settings-color.component.html',\n styleUrls: ['./admin-settings-color.component.scss'],\n imports: [\n CommonModule,\n TranslateModule,\n ReactiveFormsModule,\n LayerModule,\n ButtonModule,\n IconModule,\n LoadingModule,\n LinkModule,\n NotificationModule,\n ColorPickerComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdminSettingsColorComponent implements OnInit, OnDestroy {\n public readonly ACCENT_COLOR_DEFINITIONS: AccentColorDefinition[] = ACCENT_COLOR_DEFINITIONS;\n public readonly DOCS_URL =\n 'https://docs.valtimo.nl/customizing-valtimo/front-end-customization/customizing-carbon-theme';\n public readonly formGroup: FormGroup;\n\n public readonly loading$ = new BehaviorSubject<boolean>(true);\n public readonly saving$ = new BehaviorSubject<boolean>(false);\n\n private readonly _refresh$ = new BehaviorSubject<null>(null);\n private readonly _cssDefaults: {[cssVar: string]: string} = {};\n\n public readonly colors$ = this._refresh$.pipe(\n switchMap(() => this._adminSettingsManagementApiService.getAccentColors()),\n tap(dto => {\n this._patchForm(dto.colors);\n this.loading$.next(false);\n })\n );\n\n public readonly pickrI18n$: Observable<ColorPickerI18n> =\n this._translateService.stream('adminSettings.appearance.colors.pickr').pipe(\n map(pickr => ({\n save: pickr?.save || 'OK',\n cancel: pickr?.cancel || 'Cancel',\n clear: pickr?.clear || 'Clear',\n }))\n );\n\n private readonly _subscriptions = new Subscription();\n\n constructor(\n private readonly _adminSettingsManagementApiService: AdminSettingsManagementApiService,\n private readonly _adminSettingsService: AdminSettingsService,\n private readonly _formBuilder: FormBuilder,\n private readonly _iconService: IconService,\n private readonly _translateService: TranslateService\n ) {\n this._iconService.register(Reset16);\n this._snapshotCssDefaults();\n this.formGroup = this._buildForm();\n }\n\n public ngOnInit(): void {\n this._subscriptions.add(this.colors$.subscribe());\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n public onSave(): void {\n const colors: {[key: string]: string} = {};\n\n for (const def of ACCENT_COLOR_DEFINITIONS) {\n const raw = this.formGroup.get(def.cssVar)?.value || this._getCssDefault(def.cssVar);\n colors[def.cssVar] = this._normalizeHex(raw);\n }\n\n this.saving$.next(true);\n this.formGroup.disable();\n\n this._adminSettingsManagementApiService.updateAccentColors({colors}).subscribe({\n next: () => {\n this._adminSettingsService.applyAccentColors(colors);\n this.saving$.next(false);\n this.formGroup.enable();\n this.formGroup.markAsPristine();\n this._adminSettingsService.refreshAccentColors();\n },\n error: () => {\n this.saving$.next(false);\n this.formGroup.enable();\n },\n });\n }\n\n public isDefaultColor(def: AccentColorDefinition): boolean {\n const value = this.formGroup.get(def.cssVar)?.value || '';\n return value.toLowerCase() === this._getCssDefault(def.cssVar).toLowerCase();\n }\n\n public onReset(def: AccentColorDefinition): void {\n this.formGroup.get(def.cssVar)?.setValue(this._getCssDefault(def.cssVar));\n this.formGroup.markAsDirty();\n }\n\n private _buildForm(): FormGroup {\n const controls: {[key: string]: any} = {};\n for (const def of ACCENT_COLOR_DEFINITIONS) {\n controls[def.cssVar] = this._formBuilder.control(this._getCssDefault(def.cssVar));\n }\n return this._formBuilder.group(controls);\n }\n\n private _patchForm(colors: {[key: string]: string}): void {\n const patch: {[key: string]: string} = {};\n for (const def of ACCENT_COLOR_DEFINITIONS) {\n patch[def.cssVar] = colors[def.cssVar] || this._getCssDefault(def.cssVar);\n }\n this.formGroup.patchValue(patch, {emitEvent: false});\n this.formGroup.markAsPristine();\n }\n\n private _snapshotCssDefaults(): void {\n for (const def of ACCENT_COLOR_DEFINITIONS) {\n this._cssDefaults[def.cssVar] =\n this._adminSettingsService.getDefaultAccentColor(def.cssVar);\n }\n }\n\n private _getCssDefault(cssVar: string): string {\n return this._cssDefaults[cssVar] || '';\n }\n\n private _normalizeHex(value: string): string {\n if (!value) return value;\n\n const upper = value.toUpperCase();\n if (upper.length === 9 && upper.endsWith('FF')) {\n return value.substring(0, 7);\n }\n return value;\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form\n *ngIf=\"{\n colors: colors$ | async,\n loading: loading$ | async,\n saving: saving$ | async,\n pickrI18n: pickrI18n$ | async,\n } as obs\"\n class=\"admin-settings-color\"\n [formGroup]=\"formGroup\"\n [cdsLayer]=\"1\"\n>\n <h4 class=\"admin-settings-color__title\">\n {{ 'adminSettings.appearance.colors.title' | translate }}\n </h4>\n\n <ng-template #infoNotification>\n <p>\n {{ 'adminSettings.appearance.colors.infoMessage' | translate }}\n\n <a [href]=\"DOCS_URL\" target=\"_blank\" rel=\"noopener noreferrer\" cdsLink>\n {{ 'adminSettings.appearance.colors.infoLinkText' | translate }}\n </a>\n </p>\n </ng-template>\n\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'info',\n title: '',\n template: infoNotification,\n showClose: false,\n lowContrast: true,\n }\"\n ></cds-inline-notification>\n\n @if (obs.loading) {\n <div class=\"loading-container\"><cds-loading></cds-loading></div>\n } @else {\n <div class=\"admin-settings-color__grid\">\n @for (def of ACCENT_COLOR_DEFINITIONS; track def.cssVar) {\n <div class=\"admin-settings-color__field\">\n <valtimo-color-picker\n [formControlName]=\"def.cssVar\"\n [labelTranslationKey]=\"def.labelTranslationKey\"\n [config]=\"{opacity: false, lockOpacity: true}\"\n [i18n]=\"obs.pickrI18n\"\n (clearEvent)=\"onReset(def)\"\n ></valtimo-color-picker>\n\n <button\n cdsButton=\"ghost\"\n [disabled]=\"isDefaultColor(def)\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onReset(def)\"\n class=\"admin-settings-color__reset\"\n >\n <svg cdsIcon=\"reset\" size=\"16\"></svg>\n </button>\n </div>\n }\n </div>\n\n <div class=\"admin-settings-color__buttons\">\n <button\n cdsButton=\"primary\"\n [disabled]=\"formGroup.disabled || formGroup.pristine || obs.saving\"\n (click)=\"onSave()\"\n >\n {{ 'interface.save' | translate }}\n </button>\n </div>\n }\n</form>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectionStrategy, Component} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MuuriDirectiveModule} from '@valtimo/components';\nimport {AdminSettingsLogoComponent} from '../admin-settings-logo/admin-settings-logo.component';\nimport {AdminSettingsColorComponent} from '../admin-settings-color/admin-settings-color.component';\n\n@Component({\n standalone: true,\n selector: 'valtimo-admin-settings-appearance',\n templateUrl: './admin-settings-appearance.component.html',\n imports: [CommonModule, MuuriDirectiveModule, AdminSettingsLogoComponent, AdminSettingsColorComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdminSettingsAppearanceComponent {}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"admin-settings-appearance\">\n <div muuri [columnMinWidth]=\"450\">\n <valtimo-muuri-item>\n <valtimo-admin-settings-logo\n logoType=\"LOGO\"\n titleTranslationKey=\"adminSettings.appearance.logo.title\"\n ></valtimo-admin-settings-logo>\n </valtimo-muuri-item>\n\n <valtimo-muuri-item>\n <valtimo-admin-settings-logo\n logoType=\"LOGO_DARK_MODE\"\n titleTranslationKey=\"adminSettings.appearance.logoDarkMode.title\"\n ></valtimo-admin-settings-logo>\n </valtimo-muuri-item>\n\n <valtimo-muuri-item>\n <valtimo-admin-settings-color></valtimo-admin-settings-color>\n </valtimo-muuri-item>\n </div>\n</div>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectionStrategy, Component} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {ToggleModule} from 'carbon-components-angular';\nimport {AdminSettingsService} from '@valtimo/components';\nimport {ConfigService, ValtimoConfigFeatureToggles} from '@valtimo/shared';\nimport {AdminSettingsManagementApiService} from '../../services';\nimport {FEATURE_TOGGLE_DEFINITIONS} from '../../constants';\nimport {FeatureToggleDefinition} from '../../models';\n\n@Component({\n standalone: true,\n selector: 'valtimo-admin-settings-feature-toggles',\n templateUrl: './admin-settings-feature-toggles.component.html',\n styleUrls: ['./admin-settings-feature-toggles.component.scss'],\n imports: [\n CommonModule,\n TranslatePipe,\n ToggleModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdminSettingsFeatureTogglesComponent {\n public readonly TOGGLE_DEFINITIONS = FEATURE_TOGGLE_DEFINITIONS;\n\n public readonly featureToggles$ = this._configService.featureToggles$;\n\n public readonly searchEngine$ = this._adminSettingsManagementApiService.getSearchEngine();\n\n constructor(\n private readonly _adminSettingsManagementApiService: AdminSettingsManagementApiService,\n private readonly _adminSettingsService: AdminSettingsService,\n private readonly _configService: ConfigService\n ) {}\n\n public getEffectiveValue(\n definition: FeatureToggleDefinition,\n toggles: ValtimoConfigFeatureToggles\n ): boolean {\n return !!(toggles as Record<string, boolean | undefined>)[definition.key];\n }\n\n public onToggleChange(definition: FeatureToggleDefinition, newValue: boolean): void {\n this._adminSettingsManagementApiService\n .updateFeatureToggle({key: definition.key, enabled: newValue})\n .subscribe(() => {\n this._adminSettingsService.refreshFeatureToggles();\n });\n }\n\n public onSearchEngineChange(useOpenSearch: boolean): void {\n this._adminSettingsManagementApiService.updateSearchEngine(useOpenSearch).subscribe();\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n@if (featureToggles$ | async; as toggles) {\n <div class=\"feature-toggles\">\n <div class=\"feature-toggles__list\">\n @if (searchEngine$ | async; as searchEngine) {\n <div class=\"feature-toggles__item\" [class.feature-toggles__item--disabled]=\"!searchEngine.available\">\n <div class=\"feature-toggles__info\">\n <span class=\"feature-toggles__title\">\n {{ 'adminSettings.featureToggles.searchEngine.useOpenSearch.title' | translate }}\n </span>\n <span class=\"feature-toggles__description\">\n @if (searchEngine.available) {\n {{ 'adminSettings.featureToggles.searchEngine.useOpenSearch.description' | translate }}\n } @else {\n {{ 'adminSettings.featureToggles.searchEngine.useOpenSearch.unavailable' | translate }}\n }\n </span>\n </div>\n <div class=\"feature-toggles__control\">\n <cds-toggle\n [checked]=\"searchEngine.active === 'OPENSEARCH'\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n [size]=\"'sm'\"\n [disabled]=\"!searchEngine.available\"\n (checkedChange)=\"onSearchEngineChange($event)\"\n ></cds-toggle>\n </div>\n </div>\n }\n @for (definition of TOGGLE_DEFINITIONS; track definition.key) {\n <div class=\"feature-toggles__item\">\n <div class=\"feature-toggles__info\">\n <span class=\"feature-toggles__title\">\n {{ 'adminSettings.featureToggles.toggles.' + definition.key + '.title' | translate }}\n </span>\n\n <span class=\"feature-toggles__description\">\n {{ 'adminSettings.featureToggles.toggles.' + definition.key + '.description' | translate }}\n </span>\n </div>\n\n <div class=\"feature-toggles__control\">\n <cds-toggle\n [checked]=\"getEffectiveValue(definition, toggles)\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n [size]=\"'sm'\"\n (checkedChange)=\"onToggleChange(definition, $event)\"\n ></cds-toggle>\n </div>\n </div>\n }\n </div>\n </div>\n}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectionStrategy, Component} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {TabsModule} from 'carbon-components-angular';\nimport {map} from 'rxjs';\nimport {ADMIN_SETTINGS_TABS} from '../../constants';\nimport {AdminSettingsAppearanceComponent} from '../admin-settings-appearance/admin-settings-appearance.component';\nimport {AdminSettingsFeatureTogglesComponent} from '../admin-settings-feature-toggles/admin-settings-feature-toggles.component';\n\n@Component({\n standalone: true,\n selector: 'valtimo-admin-settings',\n templateUrl: './admin-settings.component.html',\n styleUrls: ['./admin-settings.component.scss'],\n imports: [\n CommonModule,\n TranslatePipe,\n TabsModule,\n AdminSettingsAppearanceComponent,\n AdminSettingsFeatureTogglesComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdminSettingsComponent {\n public readonly ADMIN_SETTINGS_TABS = ADMIN_SETTINGS_TABS;\n\n public readonly activeTabKey$ = this._route.params.pipe(\n map(params => params['tabKey'] || ADMIN_SETTINGS_TABS.APPEARANCE)\n );\n\n constructor(\n private readonly _route: ActivatedRoute,\n private readonly _router: Router\n ) {}\n\n public switchTab(tabKey: string): void {\n this._router.navigate(['..', tabKey], {relativeTo: this._route});\n }\n}\n","<!--\n ~ /*\n ~ * Copyright 2015-2026 Ritense BV, the Netherlands.\n ~ *\n ~ * Licensed under EUPL, Version 1.2 (the \"License\");\n ~ * you may not use this file except in compliance with the License.\n ~ * You may obtain a copy of the License at\n ~ *\n ~ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~ *\n ~ * Unless required by applicable law or agreed to in writing, software\n ~ * distributed under the License is distributed on an \"AS IS\" basis,\n ~ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ * See the License for the specific language governing permissions and\n ~ * limitations under the License.\n ~ */\n -->\n\n@if (activeTabKey$ | async; as activeTabKey) {\n <cds-tabs type=\"line\">\n @if ({active: activeTabKey === ADMIN_SETTINGS_TABS.APPEARANCE}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'adminSettings.tabs.appearance' | translate\"\n (selected)=\"switchTab(ADMIN_SETTINGS_TABS.APPEARANCE)\"\n >\n @if (obs.active) {\n <valtimo-admin-settings-appearance></valtimo-admin-settings-appearance>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === ADMIN_SETTINGS_TABS.FEATURE_TOGGLES}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'adminSettings.tabs.featureToggles' | translate\"\n (selected)=\"switchTab(ADMIN_SETTINGS_TABS.FEATURE_TOGGLES)\"\n >\n @if (obs.active) {\n <valtimo-admin-settings-feature-toggles></valtimo-admin-settings-feature-toggles>\n }\n </cds-tab>\n }\n\n </cds-tabs>\n}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormBuilder, FormGroup, ReactiveFormsModule} from '@angular/forms';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {\n ButtonModule,\n CheckboxModule,\n DatePickerInputModule,\n DatePickerModule,\n DropdownModule,\n LayerModule,\n ListItem,\n ModalModule,\n} from 'carbon-components-angular';\nimport {TooltipIconModule, ValtimoCdsModalDirective} from '@valtimo/components';\nimport {StartReindexRequestDto} from '../../models';\n\n@Component({\n standalone: true,\n selector: 'valtimo-start-reindex-modal',\n templateUrl: './start-reindex-modal.component.html',\n styleUrls: ['./start-reindex-modal.component.scss'],\n imports: [\n CommonModule,\n TranslateModule,\n ReactiveFormsModule,\n ModalModule,\n ValtimoCdsModalDirective,\n ButtonModule,\n CheckboxModule,\n DatePickerInputModule,\n DatePickerModule,\n DropdownModule,\n LayerModule,\n TooltipIconModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StartReindexModalComponent {\n @Input() public open = false;\n @Input() public documentDefinitions: ListItem[] = [];\n\n @Output() public readonly closeEvent = new EventEmitter<StartReindexRequestDto | null>();\n\n public readonly formGroup: FormGroup = this._fb.group({\n pruneOrphans: [false],\n documentDefinitionName: [null],\n modifiedAfter: [null],\n });\n\n constructor(private readonly _fb: FormBuilder) {}\n\n public onDateSelected(event: string[]): void {\n const dateValue = event?.[0] || null;\n this.formGroup.patchValue({modifiedAfter: dateValue});\n }\n\n public onCancel(): void {\n this._resetForm();\n this.closeEvent.emit(null);\n }\n\n public onSubmit(): void {\n const request = this._buildRequest();\n this._resetForm();\n this.closeEvent.emit(request);\n }\n\n private _buildRequest(): StartReindexRequestDto {\n const formValue = this.formGroup.value;\n const request: StartReindexRequestDto = {};\n\n if (formValue.pruneOrphans) {\n request.pruneOrphans = true;\n }\n\n if (formValue.documentDefinitionName?.value) {\n request.documentDefinitionName = formValue.documentDefinitionName.value;\n }\n\n if (formValue.modifiedAfter) {\n request.modifiedAfter = this._formatDateToIso(formValue.modifiedAfter);\n }\n\n return request;\n }\n\n private _formatDateToIso(date: string | Date): string {\n if (date instanceof Date) {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}T00:00:00`;\n }\n const parts = date.split('-');\n if (parts.length === 3) {\n const [day, month, year] = parts;\n return `${year}-${month}-${day}T00:00:00`;\n }\n return date;\n }\n\n private _resetForm(): void {\n this.formGroup.reset({\n pruneOrphans: false,\n documentDefinitionName: null,\n modifiedAfter: null,\n });\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal valtimoCdsModal *ngIf=\"open\" [open]=\"open\" size=\"sm\" (close)=\"onCancel()\">\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCancel()\">\n <h3 cdsModalHeaderHeading>{{ 'adminSettings.opensearch.reindex.startModalTitle' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\" [formGroup]=\"formGroup\" class=\"start-reindex-form\">\n <cds-checkbox formControlName=\"pruneOrphans\">\n <span class=\"label-with-tooltip\">\n {{ 'adminSettings.opensearch.reindex.pruneOrphans' | translate }}\n <v-tooltip-icon [tooltip]=\"'adminSettings.opensearch.reindex.tooltips.pruneOrphans' | translate\"></v-tooltip-icon>\n </span>\n </cds-checkbox>\n\n <cds-dropdown\n [label]=\"'adminSettings.opensearch.reindex.documentDefinitionName' | translate\"\n [placeholder]=\"'adminSettings.opensearch.reindex.documentDefinitionPlaceholder' | translate\"\n formControlName=\"documentDefinitionName\"\n >\n <cds-dropdown-list [items]=\"documentDefinitions\"></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-date-picker\n [label]=\"'adminSettings.opensearch.reindex.modifiedAfter' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected($event)\"\n ></cds-date-picker>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"secondary\" (click)=\"onCancel()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button cdsButton=\"primary\" (click)=\"onSubmit()\">\n {{ 'adminSettings.opensearch.reindex.startButton' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectionStrategy, Component, OnDestroy, OnInit} from '@angular/core';\nimport {CommonModule, DatePipe} from '@angular/common';\nimport {Router} from '@angular/router';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {\n BehaviorSubject,\n finalize,\n interval,\n map,\n merge,\n Observable,\n of,\n shareReplay,\n startWith,\n Subject,\n switchMap,\n take,\n takeUntil,\n takeWhile,\n} from 'rxjs';\nimport {\n ButtonModule,\n IconModule,\n IconService,\n ListItem,\n LoadingModule,\n ProgressBarModule,\n TagModule,\n} from 'carbon-components-angular';\nimport {Launch16} from '@carbon/icons';\nimport {CarbonListModule, ColumnConfig, Pagination, TooltipIconModule, ViewType} from '@valtimo/components';\nimport {Page} from '@valtimo/shared';\nimport {AdminSettingsManagementApiService} from '../../services';\nimport {ReindexStatusDto, StartReindexRequestDto} from '../../models';\nimport {DocumentService} from '@valtimo/document';\nimport {StartReindexModalComponent} from '../start-reindex-modal/start-reindex-modal.component';\n\n@Component({\n standalone: true,\n selector: 'valtimo-admin-settings-opensearch',\n templateUrl: './admin-settings-opensearch.component.html',\n styleUrls: ['./admin-settings-opensearch.component.scss'],\n imports: [\n CommonModule,\n DatePipe,\n TranslateModule,\n ButtonModule,\n IconModule,\n LoadingModule,\n ProgressBarModule,\n TagModule,\n CarbonListModule,\n StartReindexModalComponent,\n TooltipIconModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdminSettingsOpensearchComponent implements OnInit, OnDestroy {\n private readonly _destroy$ = new Subject<void>();\n private readonly _manualRefresh$ = new BehaviorSubject<void>(undefined);\n private readonly _silentRefresh$ = new Subject<void>();\n\n public readonly fields: ColumnConfig[] = [\n {key: 'statusTag', label: 'adminSettings.opensearch.reindex.columns.status', viewType: ViewType.TAGS},\n {key: 'startedOn', label: 'adminSettings.opensearch.reindex.columns.startedOn', viewType: ViewType.DATE},\n {key: 'finishedOn', label: 'adminSettings.opensearch.reindex.columns.finishedOn', viewType: ViewType.DATE},\n {key: 'progress', label: 'adminSettings.opensearch.reindex.columns.progress', viewType: ViewType.TEXT},\n ];\n\n public pagination: Pagination = {\n collectionSize: 0,\n page: 1,\n size: 10,\n };\n\n public readonly showModal$ = new BehaviorSubject<boolean>(false);\n public readonly startingReindex$ = new BehaviorSubject<boolean>(false);\n public readonly loading$ = new BehaviorSubject<boolean>(false);\n\n public documentDefinitions$: Observable<ListItem[]>;\n\n public readonly runs$: Observable<Page<ReindexStatusDto>> = merge(\n this._manualRefresh$.pipe(\n switchMap(() => {\n this.loading$.next(true);\n return this._apiService.getReindexRuns(this.pagination.page - 1, this.pagination.size).pipe(\n finalize(() => this.loading$.next(false))\n );\n })\n ),\n this._silentRefresh$.pipe(\n switchMap(() => this._apiService.getReindexRuns(this.pagination.page - 1, this.pagination.size))\n )\n ).pipe(shareReplay(1));\n\n public readonly tableItems$: Observable<any[]> = this.runs$.pipe(\n switchMap(page => {\n this.pagination = {...this.pagination, collectionSize: page.totalElements};\n if (page.content.length === 0) {\n return of([]);\n }\n const statusKeys = page.content.map(run => `adminSettings.opensearch.reindex.statuses.${run.status}`);\n return this._translateService.get(statusKeys).pipe(\n map(translations => page.content.map(run => ({\n ...run,\n progress: `${run.processedCount} / ${run.totalCount}`,\n statusTag: {\n content: translations[`adminSettings.opensearch.reindex.statuses.${run.status}`],\n type: this._getStatusTagType(run.status),\n },\n })))\n );\n })\n );\n\n public readonly hasRunningRun$: Observable<boolean> = this.runs$.pipe(\n map(page => page.content.some(run => run.status === 'RUNNING'))\n );\n\n constructor(\n private readonly _apiService: AdminSettingsManagementApiService,\n private readonly _documentService: DocumentService,\n private readonly _translateService: TranslateService,\n private readonly _router: Router,\n private readonly _iconService: IconService\n ) {\n this._iconService.register(Launch16);\n }\n\n public ngOnInit(): void {\n this.documentDefinitions$ = this._documentService.queryDefinitionsForManagement().pipe(\n switchMap(page =>\n this._translateService.get('adminSettings.opensearch.reindex.allDocumentDefinitions').pipe(\n map(allLabel => [\n {content: allLabel, value: null, selected: false},\n ...page.content.map(def => ({\n content: def.id.name,\n value: def.id.name,\n selected: false,\n })),\n ])\n )\n ),\n startWith([])\n );\n\n this.hasRunningRun$\n .pipe(\n switchMap(hasRunning => {\n if (!hasRunning) return [];\n return interval(3000).pipe(\n takeWhile(() => true),\n takeUntil(this._destroy$)\n );\n }),\n takeUntil(this._destroy$)\n )\n .subscribe(() => this._silentRefresh$.next());\n }\n\n public onPageChange(page: number): void {\n this.pagination = {...this.pagination, page};\n this._manualRefresh$.next();\n }\n\n public onPageSizeChange(size: number): void {\n this.pagination = {...this.pagination, size, page: 1};\n this._manualRefresh$.next();\n }\n\n public openModal(): void {\n this.showModal$.next(true);\n }\n\n public onModalClose(request: StartReindexRequestDto | null): void {\n this.showModal$.next(false);\n if (!request) return;\n\n this.startingReindex$.next(true);\n this._apiService\n .startReindex(request)\n .pipe(\n take(1),\n finalize(() => this.startingReindex$.next(false))\n )\n .subscribe({\n next: () => this._manualRefresh$.next(),\n error: err => {\n if (err.status === 409) {\n this._manualRefresh$.next();\n }\n },\n });\n }\n\n private _getStatusTagType(status: string): string {\n switch (status) {\n case 'RUNNING':\n return 'blue';\n case 'COMPLETED':\n return 'green';\n case 'FAILED':\n return 'red';\n case 'STOPPED':\n return 'gray';\n default:\n return 'gray';\n }\n }\n\n public navigateToLogs(run: ReindexStatusDto): void {\n const afterTimestamp = new Date(new Date(run.startedOn).getTime() - 5000).toISOString();\n const beforeTimestamp = run.finishedOn\n ? new Date(new Date(run.finishedOn).getTime() + 5000).toISOString()\n : new Date().toISOString();\n\n this._router.navigate(['/logging'], {\n queryParams: {\n level: 'ERROR',\n afterTimestamp,\n beforeTimestamp,\n },\n });\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"opensearch-reindex\"\n *ngIf=\"{\n items: tableItems$ | async,\n loading: loading$ | async,\n starting: startingReindex$ | async,\n documentDefinitions: documentDefinitions$ | async,\n showModal: showModal$ | async,\n hasRunning: hasRunningRun$ | async\n } as obs\"\n>\n <valtimo-carbon-list\n [header]=\"false\"\n [items]=\"obs.items || []\"\n [fields]=\"fields\"\n [loading]=\"obs.loading\"\n [pagination]=\"pagination\"\n [expandedRowTemplate]=\"expandedRowTemplate\"\n [expandedRowKey]=\"'runId'\"\n (paginationClicked)=\"onPageChange($event)\"\n (paginationSet)=\"onPageSizeChange($event)\"\n >\n <ng-container header>\n {{ 'adminSettings.opensearch.reindex.title' | translate }}\n </ng-container>\n\n <div carbonToolbarContent>\n <button\n cdsButton=\"primary\"\n [disabled]=\"obs.hasRunning || obs.starting\"\n (click)=\"openModal()\"\n >\n @if (obs.starting) {\n <cds-loading size=\"sm\"></cds-loading>\n }\n {{ 'adminSettings.opensearch.reindex.startButton' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </div>\n\n <valtimo-no-results\n title=\"{{ 'adminSettings.opensearch.reindex.noResults.title' | translate }}\"\n description=\"{{ 'adminSettings.opensearch.reindex.noResults.description' | translate }}\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n\n <valtimo-start-reindex-modal\n [open]=\"obs.showModal\"\n [documentDefinitions]=\"obs.documentDefinitions\"\n (closeEvent)=\"onModalClose($event)\"\n ></valtimo-start-reindex-modal>\n</div>\n\n<ng-template #expandedRowTemplate let-data=\"data\">\n <div class=\"opensearch-reindex__expanded\">\n <span class=\"opensearch-reindex__label\">{{ 'adminSettings.opensearch.reindex.started' | translate }}</span>\n <span class=\"opensearch-reindex__value\">{{ data.startedOn | date:'medium' }}</span>\n\n <span class=\"opensearch-reindex__label\">{{ 'adminSettings.opensearch.reindex.finished' | translate }}</span>\n <span class=\"opensearch-reindex__value\">{{ data.finishedOn ? (data.finishedOn | date:'medium') : '-' }}</span>\n\n <span class=\"opensearch-reindex__label\">{{ 'adminSettings.opensearch.reindex.documentDefinitionName' | translate }}</span>\n <span class=\"opensearch-reindex__value\">{{ data.scope?.documentDefinitionName || '-' }}</span>\n\n <span class=\"opensearch-reindex__label\">{{ 'adminSettings.opensearch.reindex.pruneOrphans' | translate }}</span>\n <span class=\"opensearch-reindex__value opensearch-reindex__value-with-tooltip\">\n {{ data.scope?.pruneOrphans ? ('interface.yes' | translate) : ('interface.no' | translate) }}\n <v-tooltip-icon [tooltip]=\"'adminSettings.opensearch.reindex.tooltips.pruneOrphans' | translate\"></v-tooltip-icon>\n </span>\n\n <span class=\"opensearch-reindex__label\">{{ 'adminSettings.opensearch.reindex.modifiedAfter' | translate }}</span>\n <span class=\"opensearch-reindex__value\">{{ data.scope?.modifiedAfter ? (data.scope.modifiedAfter | date:'medium') : '-' }}</span>\n\n <div class=\"opensearch-reindex__results-column\">\n <div class=\"opensearch-reindex__progress\">\n <span class=\"opensearch-reindex__progress-label\">\n {{ 'adminSettings.opensearch.reindex.reindexing' | translate }}\n </span>\n <cds-progress-bar\n [value]=\"data.totalCount > 0 ? (data.processedCount / data.totalCount) * 100 : 0\"\n [status]=\"data.status === 'RUNNING' && !data.pruningPhase ? 'active' : (data.status === 'COMPLETED' ? 'finished' : (data.status === 'RUNNING' ? 'finished' : 'error'))\"\n ></cds-progress-bar>\n <div class=\"opensearch-reindex__progress-footer\">\n <span>{{ 'adminSettings.opensearch.reindex.processed' | translate:{current: data.processedCount, total: data.totalCount} }}</span>\n <span>{{ 'adminSettings.opensearch.reindex.skipped' | translate }}: {{ data.skippedCount || 0 }}</span>\n </div>\n </div>\n\n @if (data.pruningPhase || data.pruneTotalCount) {\n <div class=\"opensearch-reindex__progress\">\n <span class=\"opensearch-reindex__progress-label\">\n {{ 'adminSettings.opensearch.reindex.pruning' | translate }}\n <v-tooltip-icon [tooltip]=\"'adminSettings.opensearch.reindex.tooltips.pruned' | translate\"></v-tooltip-icon>\n </span>\n <cds-progress-bar\n [value]=\"data.pruneTotalCount > 0 ? (data.pruneCheckedCount / data.pruneTotalCount) * 100 : 0\"\n [status]=\"data.pruningPhase ? 'active' : (data.status === 'COMPLETED' ? 'finished' : 'error')\"\n ></cds-progress-bar>\n <div class=\"opensearch-reindex__progress-footer\">\n <span>{{ 'adminSettings.opensearch.reindex.processed' | translate:{current: data.pruneCheckedCount, total: data.pruneTotalCount || 0} }}</span>\n <span>{{ 'adminSettings.opensearch.reindex.pruningProgress' | translate:{removed: data.prunedCount || 0} }}</span>\n </div>\n </div>\n }\n\n @if (data.status === 'FAILED') {\n <a class=\"opensearch-reindex__error-link\" (click)=\"navigateToLogs(data)\">\n {{ 'adminSettings.opensearch.reindex.viewErrorLogs' | translate }}\n <svg cdsIcon=\"launch\" size=\"16\"></svg>\n </a>\n }\n </div>\n </div>\n</ng-template>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {CommonModule} from '@angular/common';\nimport {AuthGuardService} from '@valtimo/security';\nimport {ROLE_ADMIN} from '@valtimo/shared';\nimport {AdminSettingsComponent} from './components/admin-settings/admin-settings.component';\nimport {AdminSettingsOpensearchComponent} from './components/admin-settings-opensearch/admin-settings-opensearch.component';\nimport {ADMIN_SETTINGS_TABS} from './constants';\n\nconst routes: Routes = [\n {\n path: 'admin-settings',\n redirectTo: `admin-settings/${ADMIN_SETTINGS_TABS.APPEARANCE}`,\n pathMatch: 'full',\n },\n {\n path: 'admin-settings/:tabKey',\n component: AdminSettingsComponent,\n canActivate: [AuthGuardService],\n data: {title: 'adminSettings.title', roles: [ROLE_ADMIN]},\n },\n {\n path: 'opensearch',\n component: AdminSettingsOpensearchComponent,\n canActivate: [AuthGuardService],\n data: {title: 'adminSettings.opensearch.title', roles: [ROLE_ADMIN]},\n },\n];\n\n@NgModule({\n declarations: [],\n imports: [CommonModule, RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class AdminSettingsRouting {}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {NgModule} from '@angular/core';\nimport {AdminSettingsRouting} from './admin-settings-routing';\nimport {AdminSettingsComponent} from './components/admin-settings/admin-settings.component';\n\n@NgModule({\n declarations: [],\n imports: [AdminSettingsRouting, AdminSettingsComponent],\n providers: [],\n})\nexport class AdminSettingsModule {}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ninterface AccentColorDefinition {\n cssVar: string;\n labelTranslationKey: string;\n}\n\nexport {AccentColorsDto} from '@valtimo/shared';\nexport {AccentColorDefinition};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ValtimoConfigFeatureToggles} from '@valtimo/shared';\n\ninterface FeatureToggleDefinition {\n key: keyof ValtimoConfigFeatureToggles;\n}\n\nexport {FeatureToggleOverridesDto, UpdateFeatureToggleDto} from '@valtimo/shared';\nexport {FeatureToggleDefinition};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ntype ReindexStatus = 'RUNNING' | 'COMPLETED' | 'FAILED' | 'STOPPED';\n\ninterface ReindexScope {\n pruneOrphans?: boolean;\n documentDefinitionName?: string;\n modifiedBefore?: string;\n modifiedAfter?: string;\n pageSize?: number;\n resumeRunId?: string;\n documentIds?: string[];\n}\n\ninterface ReindexStatusDto {\n runId: string;\n status: ReindexStatus;\n running: boolean;\n scope: ReindexScope | null;\n totalCount: number;\n processedCount: number;\n skippedCount: number;\n prunedCount: number;\n pruneCheckedCount: number;\n pruneTotalCount: number | null;\n pruningPhase: boolean;\n startedOn: string;\n finishedOn: string | null;\n elapsedSeconds: number;\n error: string | null;\n}\n\ninterface StartReindexRequestDto {\n pruneOrphans?: boolean;\n documentDefinitionName?: string;\n modifiedAfter?: string;\n}\n\ninterface StartReindexResponseDto {\n status: string;\n runId: string;\n}\n\nexport {\n ReindexStatus,\n ReindexScope,\n ReindexStatusDto,\n StartReindexRequestDto,\n StartReindexResponseDto,\n};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface SearchEngineDto {\n available: boolean;\n active: 'OPENSEARCH' | 'POSTGRES';\n}\n\nexport interface UpdateSearchEngineDto {\n active: 'OPENSEARCH' | 'POSTGRES';\n}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './accent-colors.model';\nexport * from './feature-toggle.model';\nexport * from './reindex.model';\nexport * from './search-engine.model';\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './lib/admin-settings.module';\nexport * from './lib/services';\nexport * from './lib/constants';\nexport * from './lib/models';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AdminSettingsManagementApiService","i2","i5","i1","i3","i4","i7"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"valtimo-admin-settings.mjs","sources":["../../../../projects/valtimo/admin-settings/src/lib/constants/accent-colors.constants.ts","../../../../projects/valtimo/admin-settings/src/lib/constants/admin-settings.constants.ts","../../../../projects/valtimo/admin-settings/src/lib/constants/feature-toggle.constants.ts","../../../../projects/valtimo/admin-settings/src/lib/constants/menu-configuration.test-ids.ts","../../../../projects/valtimo/admin-settings/src/lib/services/admin-settings-management-api.service.ts","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-logo/admin-settings-logo.component.ts","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-logo/admin-settings-logo.component.html","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-color/admin-settings-color.component.ts","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-color/admin-settings-color.component.html","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-appearance/admin-settings-appearance.component.ts","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-appearance/admin-settings-appearance.component.html","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-feature-toggles/admin-settings-feature-toggles.component.ts","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-feature-toggles/admin-settings-feature-toggles.component.html","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-menu-configuration/admin-settings-menu-configuration.component.ts","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-menu-configuration/admin-settings-menu-configuration.component.html","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings/admin-settings.component.ts","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings/admin-settings.component.html","../../../../projects/valtimo/admin-settings/src/lib/components/start-reindex-modal/start-reindex-modal.component.ts","../../../../projects/valtimo/admin-settings/src/lib/components/start-reindex-modal/start-reindex-modal.component.html","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-opensearch/admin-settings-opensearch.component.ts","../../../../projects/valtimo/admin-settings/src/lib/components/admin-settings-opensearch/admin-settings-opensearch.component.html","../../../../projects/valtimo/admin-settings/src/lib/admin-settings-routing.ts","../../../../projects/valtimo/admin-settings/src/lib/admin-settings.module.ts","../../../../projects/valtimo/admin-settings/src/lib/models/accent-colors.model.ts","../../../../projects/valtimo/admin-settings/src/lib/models/feature-toggle.model.ts","../../../../projects/valtimo/admin-settings/src/lib/models/menu-configuration.model.ts","../../../../projects/valtimo/admin-settings/src/lib/models/reindex.model.ts","../../../../projects/valtimo/admin-settings/src/lib/models/search-engine.model.ts","../../../../projects/valtimo/admin-settings/src/lib/models/index.ts","../../../../projects/valtimo/admin-settings/src/public-api.ts","../../../../projects/valtimo/admin-settings/src/valtimo-admin-settings.ts"],"sourcesContent":["/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {AccentColorDefinition} from '../models';\n\nconst ACCENT_COLOR_DEFINITIONS: AccentColorDefinition[] = [\n {\n cssVar: '--vcds-color-100',\n labelTranslationKey: 'adminSettings.appearance.colors.color100',\n },\n {\n cssVar: '--vcds-color-90',\n labelTranslationKey: 'adminSettings.appearance.colors.color90',\n },\n {\n cssVar: '--vcds-color-80',\n labelTranslationKey: 'adminSettings.appearance.colors.color80',\n },\n {\n cssVar: '--vcds-color-70',\n labelTranslationKey: 'adminSettings.appearance.colors.color70',\n },\n {\n cssVar: '--vcds-color-60',\n labelTranslationKey: 'adminSettings.appearance.colors.color60',\n },\n {\n cssVar: '--vcds-color-50',\n labelTranslationKey: 'adminSettings.appearance.colors.color50',\n },\n {\n cssVar: '--vcds-color-40',\n labelTranslationKey: 'adminSettings.appearance.colors.color40',\n },\n {\n cssVar: '--vcds-color-30',\n labelTranslationKey: 'adminSettings.appearance.colors.color30',\n },\n {\n cssVar: '--vcds-color-20',\n labelTranslationKey: 'adminSettings.appearance.colors.color20',\n },\n {\n cssVar: '--vcds-color-10',\n labelTranslationKey: 'adminSettings.appearance.colors.color10',\n },\n];\n\nexport {ACCENT_COLOR_DEFINITIONS};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst ADMIN_SETTINGS_TABS = {\n APPEARANCE: 'appearance',\n MENU_CONFIGURATION: 'menu-configuration',\n FEATURE_TOGGLES: 'feature-toggles',\n} as const;\n\nexport {ADMIN_SETTINGS_TABS};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {FeatureToggleDefinition} from '../models';\n\nconst FEATURE_TOGGLE_DEFINITIONS: FeatureToggleDefinition[] = [\n {key: 'allowUserThemeSwitching'},\n {key: 'enableCompactModeToggle'},\n {key: 'compactModeOnByDefault'},\n {key: 'enableUserNameInTopBarToggle'},\n {key: 'showUserNameInTopBar'},\n {key: 'showPlantATreeButton'},\n {key: 'largeLogoMargin'},\n {key: 'applicationTitleAsSuffix'},\n {key: 'disableCaseCount'},\n {key: 'enableObjectManagement'},\n {key: 'sortFilesByDate'},\n {key: 'returnToLastUrlAfterTokenExpiration'},\n {key: 'enableTabManagement'},\n {key: 'hideValtimoVersionsForNonAdmins'},\n {key: 'useStartEventNameAsStartFormTitle'},\n {key: 'enableFormViewModel'},\n {key: 'enableIntermediateSave'},\n {key: 'enableFormFlowBreadcrumbs'},\n {key: 'enablePbacDocumentenApiDocuments'},\n {key: 'enableSuppressDocumentError'},\n {key: 'enableIkoType'},\n {key: 'menuCollapsedByDefault'},\n {key: 'enableGenericCaseList'},\n {key: 'enableManualTaskListRefresh'},\n {key: 'disableFormioTokenInLocalStorage'},\n];\n\nexport {FEATURE_TOGGLE_DEFINITIONS};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst MENU_CONFIGURATION_TEST_IDS = {\n saveButton: 'menuConfigurationSaveButton',\n resetButton: 'menuConfigurationResetButton',\n structureList: 'menuConfigurationStructureList',\n editorTitleInput: 'menuConfigurationEditorTitleInput',\n editorLinkInput: 'menuConfigurationEditorLinkInput',\n editorSaveButton: 'menuConfigurationEditorSaveButton',\n editorCancelButton: 'menuConfigurationEditorCancelButton',\n} as const;\n\nexport {MENU_CONFIGURATION_TEST_IDS};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Injectable} from '@angular/core';\nimport {HttpClient, HttpParams} from '@angular/common/http';\nimport {catchError, Observable, of} from 'rxjs';\nimport {\n AdminSettingsLogoDto,\n AdminSettingsLogosDto,\n BaseApiService,\n ConfigService,\n CreateAdminSettingsLogoDto,\n Page,\n} from '@valtimo/shared';\nimport {\n AccentColorsDto,\n FeatureToggleOverridesDto,\n ReindexStatusDto,\n SearchEngineDto,\n StartReindexRequestDto,\n StartReindexResponseDto,\n UpdateFeatureToggleDto,\n} from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AdminSettingsManagementApiService extends BaseApiService {\n constructor(\n protected readonly httpClient: HttpClient,\n protected readonly configService: ConfigService\n ) {\n super(httpClient, configService);\n }\n\n public getLogos(): Observable<AdminSettingsLogosDto> {\n return this.httpClient.get<AdminSettingsLogosDto>(\n this.getApiUrl('/v1/admin-settings/logos')\n );\n }\n\n public uploadLogo(\n logoType: string,\n dto: CreateAdminSettingsLogoDto\n ): Observable<AdminSettingsLogoDto> {\n return this.httpClient.post<AdminSettingsLogoDto>(\n this.getApiUrl(`/management/v1/admin-settings/logo/${logoType}`),\n dto\n );\n }\n\n public deleteLogo(logoType: string): Observable<void> {\n return this.httpClient.delete<void>(\n this.getApiUrl(`/management/v1/admin-settings/logo/${logoType}`)\n );\n }\n\n public getFeatureToggleOverrides(): Observable<FeatureToggleOverridesDto> {\n return this.httpClient.get<FeatureToggleOverridesDto>(\n this.getApiUrl('/v1/admin-settings/feature-toggles')\n );\n }\n\n public updateFeatureToggle(dto: UpdateFeatureToggleDto): Observable<FeatureToggleOverridesDto> {\n return this.httpClient.put<FeatureToggleOverridesDto>(\n this.getApiUrl('/management/v1/admin-settings/feature-toggles'),\n dto\n );\n }\n\n public removeFeatureToggle(key: string): Observable<FeatureToggleOverridesDto> {\n return this.httpClient.delete<FeatureToggleOverridesDto>(\n this.getApiUrl(`/management/v1/admin-settings/feature-toggles/${key}`)\n );\n }\n\n public getAccentColors(): Observable<AccentColorsDto> {\n return this.httpClient.get<AccentColorsDto>(\n this.getApiUrl('/v1/admin-settings/accent-colors')\n );\n }\n\n public updateAccentColors(dto: AccentColorsDto): Observable<AccentColorsDto> {\n return this.httpClient.put<AccentColorsDto>(\n this.getApiUrl('/management/v1/admin-settings/accent-colors'),\n dto\n );\n }\n\n public getSearchEngine(): Observable<SearchEngineDto | null> {\n return this.httpClient\n .get<SearchEngineDto>(this.getApiUrl('/management/v1/search-engine'))\n .pipe(catchError(() => of(null)));\n }\n\n public updateSearchEngine(useOpenSearch: boolean): Observable<SearchEngineDto> {\n return this.httpClient.put<SearchEngineDto>(\n this.getApiUrl('/management/v1/search-engine'),\n {active: useOpenSearch ? 'OPENSEARCH' : 'POSTGRES'}\n );\n }\n\n public startReindex(request: StartReindexRequestDto = {}): Observable<StartReindexResponseDto> {\n return this.httpClient.post<StartReindexResponseDto>(\n this.getApiUrl('/management/v1/document-opensearch/reindex'),\n request\n );\n }\n\n public getReindexStatus(): Observable<ReindexStatusDto | null> {\n return this.httpClient\n .get<ReindexStatusDto>(this.getApiUrl('/management/v1/document-opensearch/reindex/status'))\n .pipe(catchError(() => of(null)));\n }\n\n public getReindexRuns(page: number, size: number): Observable<Page<ReindexStatusDto>> {\n const params = new HttpParams().set('page', page.toString()).set('size', size.toString());\n return this.httpClient.get<Page<ReindexStatusDto>>(\n this.getApiUrl('/management/v1/document-opensearch/reindex/runs'),\n {params}\n );\n }\n\n public getReindexRun(runId: string): Observable<ReindexStatusDto> {\n return this.httpClient.get<ReindexStatusDto>(\n this.getApiUrl(`/management/v1/document-opensearch/reindex/${runId}`)\n );\n }\n}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {FormBuilder, FormControl, ReactiveFormsModule, Validators} from '@angular/forms';\nimport {\n AdminSettingsService,\n ConfirmationModalModule,\n RenderInBodyComponent,\n} from '@valtimo/components';\nimport {\n ButtonModule,\n FileUploaderModule,\n IconModule,\n IconService,\n LayerModule,\n LoadingModule,\n} from 'carbon-components-angular';\nimport {BehaviorSubject, map, Subscription, switchMap, tap} from 'rxjs';\nimport {TrashCan16, Upload16} from '@carbon/icons';\nimport {AdminSettingsManagementApiService} from '../../services';\n\n@Component({\n standalone: true,\n selector: 'valtimo-admin-settings-logo',\n templateUrl: './admin-settings-logo.component.html',\n styleUrls: ['./admin-settings-logo.component.scss'],\n imports: [\n CommonModule,\n TranslatePipe,\n ReactiveFormsModule,\n LayerModule,\n ButtonModule,\n FileUploaderModule,\n LoadingModule,\n IconModule,\n ConfirmationModalModule,\n RenderInBodyComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdminSettingsLogoComponent implements OnInit, OnDestroy {\n @Input() public logoType!: string;\n @Input() public titleTranslationKey!: string;\n\n public get previewTheme(): string {\n return this.logoType === 'LOGO_DARK_MODE' ? 'g90' : 'g10';\n }\n\n public readonly ACCEPTED_FILES: string[] = ['png', 'svg'];\n\n public readonly formGroup = this._formBuilder.group({\n file: this._formBuilder.control(new Set<any>(), [Validators.required]),\n });\n\n public get file(): FormControl<Set<any>> {\n return this.formGroup.get('file') as FormControl<Set<File>>;\n }\n\n public readonly loading$ = new BehaviorSubject<boolean>(true);\n\n private readonly _refresh$ = new BehaviorSubject<null>(null);\n\n public readonly logo$ = this._refresh$.pipe(\n switchMap(() => this._adminSettingsManagementApiService.getLogos()),\n map(logos => (this.logoType === 'LOGO' ? logos.logo : logos.logoDarkMode) ?? null),\n tap(() => this.loading$.next(false))\n );\n\n public readonly showDeleteConfirmationModal$ = new BehaviorSubject<boolean>(false);\n\n private readonly _subscriptions = new Subscription();\n\n constructor(\n private readonly _adminSettingsManagementApiService: AdminSettingsManagementApiService,\n private readonly _adminSettingsService: AdminSettingsService,\n private readonly _formBuilder: FormBuilder,\n private readonly _iconService: IconService\n ) {\n this._iconService.registerAll([Upload16, TrashCan16]);\n }\n\n public ngOnInit(): void {\n this._subscriptions.add(this.logo$.subscribe());\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n public async onSave(): Promise<void> {\n const file = Array.from(this.file.value)[0]?.file;\n const imageBase64 = await this._fileToBase64(file);\n\n this.formGroup.disable();\n\n this._adminSettingsManagementApiService.uploadLogo(this.logoType, {imageBase64}).subscribe({\n next: () => {\n this.loading$.next(true);\n this._refresh$.next(null);\n this._adminSettingsService.refreshLogos();\n this.formGroup.enable();\n },\n error: () => {\n this.formGroup.enable();\n },\n });\n }\n\n public getImageSrc(imageBase64: string): string {\n const mimeType = this._isSvg(imageBase64) ? 'image/svg+xml' : 'image/png';\n return `data:${mimeType};base64,${imageBase64}`;\n }\n\n public onDeleteButtonClick(): void {\n this.showDeleteConfirmationModal$.next(true);\n }\n\n public onDelete(): void {\n this._adminSettingsManagementApiService.deleteLogo(this.logoType).subscribe(() => {\n this.loading$.next(true);\n this._refresh$.next(null);\n this._adminSettingsService.refreshLogos();\n });\n }\n\n private _isSvg(base64: string): boolean {\n try {\n const decoded = atob(base64.substring(0, 64));\n const trimmed = decoded.trimStart();\n return trimmed.startsWith('<?xml') || trimmed.startsWith('<svg');\n } catch {\n return false;\n }\n }\n\n private async _fileToBase64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n const result = reader.result as string;\n const pureBase64 = result.split(',')[1];\n resolve(pureBase64);\n };\n reader.onerror = error => reject(error);\n });\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form\n *ngIf=\"{\n logo: logo$ | async,\n loading: loading$ | async,\n } as obs\"\n class=\"admin-settings-logo\"\n [formGroup]=\"formGroup\"\n [cdsLayer]=\"1\"\n>\n <h4 class=\"admin-settings-logo__title\">\n {{ titleTranslationKey | translate }}\n </h4>\n\n @if (obs.loading) {\n <div class=\"loading-container\"><cds-loading></cds-loading></div>\n } @else if (obs.logo) {\n <div class=\"admin-settings-logo__preview\" [attr.data-carbon-theme]=\"previewTheme\">\n <img\n class=\"admin-settings-logo__image\"\n [src]=\"getImageSrc(obs.logo.imageBase64)\"\n />\n </div>\n\n <div class=\"admin-settings-logo__buttons\">\n <button cdsButton=\"danger\" (click)=\"onDeleteButtonClick()\" [disabled]=\"formGroup.disabled\">\n {{ 'interface.delete' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </div>\n } @else {\n <cds-file-uploader\n [accept]=\"ACCEPTED_FILES\"\n [multiple]=\"false\"\n buttonType=\"primary\"\n [title]=\"'adminSettings.appearance.logo.fileUploaderTitle' | translate\"\n [description]=\"'adminSettings.appearance.logo.fileUploaderDescription' | translate\"\n [buttonText]=\"'adminSettings.appearance.logo.fileUploaderButton' | translate\"\n formControlName=\"file\"\n >\n </cds-file-uploader>\n\n <div class=\"admin-settings-logo__buttons\">\n <button\n cdsButton=\"primary\"\n [disabled]=\"formGroup.disabled || formGroup.invalid || formGroup.pristine\"\n (click)=\"onSave()\"\n >\n {{ 'interface.upload' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n </div>\n }\n</form>\n\n<valtimo-render-in-body>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"adminSettings.appearance.logo.deleteConfirmationModalText\"\n [showModalSubject$]=\"showDeleteConfirmationModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDelete()\"\n ></valtimo-confirmation-modal>\n</valtimo-render-in-body>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectionStrategy, Component, OnDestroy, OnInit} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormBuilder, FormGroup, ReactiveFormsModule} from '@angular/forms';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {\n ButtonModule,\n IconModule,\n IconService,\n LayerModule,\n LinkModule,\n LoadingModule,\n NotificationModule,\n} from 'carbon-components-angular';\nimport {Reset16} from '@carbon/icons';\nimport {AdminSettingsService, ColorPickerComponent, ColorPickerI18n} from '@valtimo/components';\nimport {BehaviorSubject, map, Observable, Subscription, switchMap, tap} from 'rxjs';\nimport {AdminSettingsManagementApiService} from '../../services';\nimport {ACCENT_COLOR_DEFINITIONS} from '../../constants';\nimport {AccentColorDefinition} from '../../models';\n\n@Component({\n standalone: true,\n selector: 'valtimo-admin-settings-color',\n templateUrl: './admin-settings-color.component.html',\n styleUrls: ['./admin-settings-color.component.scss'],\n imports: [\n CommonModule,\n TranslateModule,\n ReactiveFormsModule,\n LayerModule,\n ButtonModule,\n IconModule,\n LoadingModule,\n LinkModule,\n NotificationModule,\n ColorPickerComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdminSettingsColorComponent implements OnInit, OnDestroy {\n public readonly ACCENT_COLOR_DEFINITIONS: AccentColorDefinition[] = ACCENT_COLOR_DEFINITIONS;\n public readonly DOCS_URL =\n 'https://docs.valtimo.nl/customizing-valtimo/front-end-customization/customizing-carbon-theme';\n public readonly formGroup: FormGroup;\n\n public readonly loading$ = new BehaviorSubject<boolean>(true);\n public readonly saving$ = new BehaviorSubject<boolean>(false);\n\n private readonly _refresh$ = new BehaviorSubject<null>(null);\n private readonly _cssDefaults: {[cssVar: string]: string} = {};\n\n public readonly colors$ = this._refresh$.pipe(\n switchMap(() => this._adminSettingsManagementApiService.getAccentColors()),\n tap(dto => {\n this._patchForm(dto.colors);\n this.loading$.next(false);\n })\n );\n\n public readonly pickrI18n$: Observable<ColorPickerI18n> =\n this._translateService.stream('adminSettings.appearance.colors.pickr').pipe(\n map(pickr => ({\n save: pickr?.save || 'OK',\n cancel: pickr?.cancel || 'Cancel',\n clear: pickr?.clear || 'Clear',\n }))\n );\n\n private readonly _subscriptions = new Subscription();\n\n constructor(\n private readonly _adminSettingsManagementApiService: AdminSettingsManagementApiService,\n private readonly _adminSettingsService: AdminSettingsService,\n private readonly _formBuilder: FormBuilder,\n private readonly _iconService: IconService,\n private readonly _translateService: TranslateService\n ) {\n this._iconService.register(Reset16);\n this._snapshotCssDefaults();\n this.formGroup = this._buildForm();\n }\n\n public ngOnInit(): void {\n this._subscriptions.add(this.colors$.subscribe());\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n public onSave(): void {\n const colors: {[key: string]: string} = {};\n\n for (const def of ACCENT_COLOR_DEFINITIONS) {\n const raw = this.formGroup.get(def.cssVar)?.value || this._getCssDefault(def.cssVar);\n colors[def.cssVar] = this._normalizeHex(raw);\n }\n\n this.saving$.next(true);\n this.formGroup.disable();\n\n this._adminSettingsManagementApiService.updateAccentColors({colors}).subscribe({\n next: () => {\n this._adminSettingsService.applyAccentColors(colors);\n this.saving$.next(false);\n this.formGroup.enable();\n this.formGroup.markAsPristine();\n this._adminSettingsService.refreshAccentColors();\n },\n error: () => {\n this.saving$.next(false);\n this.formGroup.enable();\n },\n });\n }\n\n public isDefaultColor(def: AccentColorDefinition): boolean {\n const value = this.formGroup.get(def.cssVar)?.value || '';\n return value.toLowerCase() === this._getCssDefault(def.cssVar).toLowerCase();\n }\n\n public onReset(def: AccentColorDefinition): void {\n this.formGroup.get(def.cssVar)?.setValue(this._getCssDefault(def.cssVar));\n this.formGroup.markAsDirty();\n }\n\n private _buildForm(): FormGroup {\n const controls: {[key: string]: any} = {};\n for (const def of ACCENT_COLOR_DEFINITIONS) {\n controls[def.cssVar] = this._formBuilder.control(this._getCssDefault(def.cssVar));\n }\n return this._formBuilder.group(controls);\n }\n\n private _patchForm(colors: {[key: string]: string}): void {\n const patch: {[key: string]: string} = {};\n for (const def of ACCENT_COLOR_DEFINITIONS) {\n patch[def.cssVar] = colors[def.cssVar] || this._getCssDefault(def.cssVar);\n }\n this.formGroup.patchValue(patch, {emitEvent: false});\n this.formGroup.markAsPristine();\n }\n\n private _snapshotCssDefaults(): void {\n for (const def of ACCENT_COLOR_DEFINITIONS) {\n this._cssDefaults[def.cssVar] =\n this._adminSettingsService.getDefaultAccentColor(def.cssVar);\n }\n }\n\n private _getCssDefault(cssVar: string): string {\n return this._cssDefaults[cssVar] || '';\n }\n\n private _normalizeHex(value: string): string {\n if (!value) return value;\n\n const upper = value.toUpperCase();\n if (upper.length === 9 && upper.endsWith('FF')) {\n return value.substring(0, 7);\n }\n return value;\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form\n *ngIf=\"{\n colors: colors$ | async,\n loading: loading$ | async,\n saving: saving$ | async,\n pickrI18n: pickrI18n$ | async,\n } as obs\"\n class=\"admin-settings-color\"\n [formGroup]=\"formGroup\"\n [cdsLayer]=\"1\"\n>\n <h4 class=\"admin-settings-color__title\">\n {{ 'adminSettings.appearance.colors.title' | translate }}\n </h4>\n\n <ng-template #infoNotification>\n <p>\n {{ 'adminSettings.appearance.colors.infoMessage' | translate }}\n\n <a [href]=\"DOCS_URL\" target=\"_blank\" rel=\"noopener noreferrer\" cdsLink>\n {{ 'adminSettings.appearance.colors.infoLinkText' | translate }}\n </a>\n </p>\n </ng-template>\n\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'info',\n title: '',\n template: infoNotification,\n showClose: false,\n lowContrast: true,\n }\"\n ></cds-inline-notification>\n\n @if (obs.loading) {\n <div class=\"loading-container\"><cds-loading></cds-loading></div>\n } @else {\n <div class=\"admin-settings-color__grid\">\n @for (def of ACCENT_COLOR_DEFINITIONS; track def.cssVar) {\n <div class=\"admin-settings-color__field\">\n <valtimo-color-picker\n [formControlName]=\"def.cssVar\"\n [labelTranslationKey]=\"def.labelTranslationKey\"\n [config]=\"{opacity: false, lockOpacity: true}\"\n [i18n]=\"obs.pickrI18n\"\n (clearEvent)=\"onReset(def)\"\n ></valtimo-color-picker>\n\n <button\n cdsButton=\"ghost\"\n [disabled]=\"isDefaultColor(def)\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onReset(def)\"\n class=\"admin-settings-color__reset\"\n >\n <svg cdsIcon=\"reset\" size=\"16\"></svg>\n </button>\n </div>\n }\n </div>\n\n <div class=\"admin-settings-color__buttons\">\n <button\n cdsButton=\"primary\"\n [disabled]=\"formGroup.disabled || formGroup.pristine || obs.saving\"\n (click)=\"onSave()\"\n >\n {{ 'interface.save' | translate }}\n </button>\n </div>\n }\n</form>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectionStrategy, Component} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MuuriDirectiveModule} from '@valtimo/components';\nimport {AdminSettingsLogoComponent} from '../admin-settings-logo/admin-settings-logo.component';\nimport {AdminSettingsColorComponent} from '../admin-settings-color/admin-settings-color.component';\n\n@Component({\n standalone: true,\n selector: 'valtimo-admin-settings-appearance',\n templateUrl: './admin-settings-appearance.component.html',\n imports: [CommonModule, MuuriDirectiveModule, AdminSettingsLogoComponent, AdminSettingsColorComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdminSettingsAppearanceComponent {}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"admin-settings-appearance\">\n <div muuri [columnMinWidth]=\"450\">\n <valtimo-muuri-item>\n <valtimo-admin-settings-logo\n logoType=\"LOGO\"\n titleTranslationKey=\"adminSettings.appearance.logo.title\"\n ></valtimo-admin-settings-logo>\n </valtimo-muuri-item>\n\n <valtimo-muuri-item>\n <valtimo-admin-settings-logo\n logoType=\"LOGO_DARK_MODE\"\n titleTranslationKey=\"adminSettings.appearance.logoDarkMode.title\"\n ></valtimo-admin-settings-logo>\n </valtimo-muuri-item>\n\n <valtimo-muuri-item>\n <valtimo-admin-settings-color></valtimo-admin-settings-color>\n </valtimo-muuri-item>\n </div>\n</div>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectionStrategy, Component} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {ToggleModule} from 'carbon-components-angular';\nimport {AdminSettingsService} from '@valtimo/components';\nimport {ConfigService, ValtimoConfigFeatureToggles} from '@valtimo/shared';\nimport {AdminSettingsManagementApiService} from '../../services';\nimport {FEATURE_TOGGLE_DEFINITIONS} from '../../constants';\nimport {FeatureToggleDefinition} from '../../models';\n\n@Component({\n standalone: true,\n selector: 'valtimo-admin-settings-feature-toggles',\n templateUrl: './admin-settings-feature-toggles.component.html',\n styleUrls: ['./admin-settings-feature-toggles.component.scss'],\n imports: [\n CommonModule,\n TranslatePipe,\n ToggleModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdminSettingsFeatureTogglesComponent {\n public readonly TOGGLE_DEFINITIONS = FEATURE_TOGGLE_DEFINITIONS;\n\n public readonly featureToggles$ = this._configService.featureToggles$;\n\n public readonly searchEngine$ = this._adminSettingsManagementApiService.getSearchEngine();\n\n constructor(\n private readonly _adminSettingsManagementApiService: AdminSettingsManagementApiService,\n private readonly _adminSettingsService: AdminSettingsService,\n private readonly _configService: ConfigService\n ) {}\n\n public getEffectiveValue(\n definition: FeatureToggleDefinition,\n toggles: ValtimoConfigFeatureToggles\n ): boolean {\n return !!(toggles as Record<string, boolean | undefined>)[definition.key];\n }\n\n public onToggleChange(definition: FeatureToggleDefinition, newValue: boolean): void {\n this._adminSettingsManagementApiService\n .updateFeatureToggle({key: definition.key, enabled: newValue})\n .subscribe(() => {\n this._adminSettingsService.refreshFeatureToggles();\n });\n }\n\n public onSearchEngineChange(useOpenSearch: boolean): void {\n this._adminSettingsManagementApiService.updateSearchEngine(useOpenSearch).subscribe();\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n@if (featureToggles$ | async; as toggles) {\n <div class=\"feature-toggles\">\n <div class=\"feature-toggles__list\">\n @if (searchEngine$ | async; as searchEngine) {\n <div class=\"feature-toggles__item\" [class.feature-toggles__item--disabled]=\"!searchEngine.available\">\n <div class=\"feature-toggles__info\">\n <span class=\"feature-toggles__title\">\n {{ 'adminSettings.featureToggles.searchEngine.useOpenSearch.title' | translate }}\n </span>\n <span class=\"feature-toggles__description\">\n @if (searchEngine.available) {\n {{ 'adminSettings.featureToggles.searchEngine.useOpenSearch.description' | translate }}\n } @else {\n {{ 'adminSettings.featureToggles.searchEngine.useOpenSearch.unavailable' | translate }}\n }\n </span>\n </div>\n <div class=\"feature-toggles__control\">\n <cds-toggle\n [checked]=\"searchEngine.active === 'OPENSEARCH'\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n [size]=\"'sm'\"\n [disabled]=\"!searchEngine.available\"\n (checkedChange)=\"onSearchEngineChange($event)\"\n ></cds-toggle>\n </div>\n </div>\n }\n @for (definition of TOGGLE_DEFINITIONS; track definition.key) {\n <div class=\"feature-toggles__item\">\n <div class=\"feature-toggles__info\">\n <span class=\"feature-toggles__title\">\n {{ 'adminSettings.featureToggles.toggles.' + definition.key + '.title' | translate }}\n </span>\n\n <span class=\"feature-toggles__description\">\n {{ 'adminSettings.featureToggles.toggles.' + definition.key + '.description' | translate }}\n </span>\n </div>\n\n <div class=\"feature-toggles__control\">\n <cds-toggle\n [checked]=\"getEffectiveValue(definition, toggles)\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n [size]=\"'sm'\"\n (checkedChange)=\"onToggleChange(definition, $event)\"\n ></cds-toggle>\n </div>\n </div>\n }\n </div>\n </div>\n}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {CommonModule} from '@angular/common';\nimport {\n CdkDrag,\n CdkDragDrop,\n CdkDropList,\n moveItemInArray,\n transferArrayItem,\n} from '@angular/cdk/drag-drop';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n OnDestroy,\n OnInit,\n signal,\n} from '@angular/core';\nimport {takeUntilDestroyed, toObservable, toSignal} from '@angular/core/rxjs-interop';\nimport {FormBuilder, ReactiveFormsModule, Validators} from '@angular/forms';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {\n AdminSettingsService,\n buildMenuConfigurationFromRuntimeMenu,\n ConfirmationModalModule,\n DragDropListComponent,\n FitPageDirective,\n getMenuCatalogEntry,\n hasSavedMenuConfiguration,\n MdiIconSelectorComponent,\n MENU_CONFIGURATION_VERSION,\n MENU_ITEM_CATALOG,\n MenuConfiguration,\n MenuConfigurationItem,\n MenuItemPlacement,\n serializeIncludeFunction,\n TooltipModule,\n} from '@valtimo/components';\nimport {ConfigService, IncludeFunction} from '@valtimo/shared';\nimport {ExternalPluginMenuPage, ExternalPluginPageService} from '@valtimo/plugin';\nimport {\n ButtonModule,\n IconModule,\n IconService,\n InputModule,\n LayerModule,\n LoadingModule,\n ModalModule,\n NotificationModule,\n SelectModule,\n TagModule,\n} from 'carbon-components-angular';\nimport {Add16, Edit16, Locked16, TrashCan16} from '@carbon/icons';\nimport {catchError, forkJoin, merge, of} from 'rxjs';\nimport {MENU_CONFIGURATION_TEST_IDS} from '../../constants';\nimport {BuilderNode, PaletteGroup, PaletteItem} from '../../models';\n\n@Component({\n standalone: true,\n selector: 'valtimo-admin-settings-menu-configuration',\n templateUrl: './admin-settings-menu-configuration.component.html',\n styleUrls: ['./admin-settings-menu-configuration.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TranslateModule,\n ScrollingModule,\n DragDropListComponent,\n FitPageDirective,\n MdiIconSelectorComponent,\n ConfirmationModalModule,\n TooltipModule,\n ButtonModule,\n IconModule,\n InputModule,\n LayerModule,\n LoadingModule,\n ModalModule,\n NotificationModule,\n SelectModule,\n TagModule,\n ],\n})\nexport class AdminSettingsMenuConfigurationComponent implements OnInit, OnDestroy {\n protected readonly testIds = MENU_CONFIGURATION_TEST_IDS;\n\n public readonly $loading = signal<boolean>(true);\n public readonly $saving = signal<boolean>(false);\n public readonly $saved = signal<boolean>(false);\n public readonly $structure = signal<BuilderNode[]>([]);\n\n /** Drives the post-save \"reload now?\" confirmation modal. */\n private readonly _$reloadModalOpen = signal<boolean>(false);\n public readonly reloadModalOpen$ = toObservable(this._$reloadModalOpen);\n public readonly $pluginPages = signal<Array<ExternalPluginMenuPage>>([]);\n\n /** True while a drag is in progress, so the panels can desaturate the sections that cannot receive it. */\n public readonly $dragging = signal<boolean>(false);\n\n public readonly $editorOpen = signal<boolean>(false);\n public readonly $editorKind = signal<MenuConfigurationItem['kind']>('catalog');\n /** True while editing a required item (Admin/Settings) — its Include-function field is suppressed. */\n public readonly $editorRequired = signal<boolean>(false);\n\n /**\n * Bumped whenever ngx-translate (re)loads, so the translated palette/section labels — resolved\n * imperatively via `translateService.instant` inside computeds — recompute once translations arrive\n * (a plain computed would otherwise keep the raw keys captured on first, pre-load evaluation).\n */\n private readonly _$translationTick = signal<number>(0);\n\n public readonly $paletteGroups = computed<PaletteGroup[]>(() => {\n this._$translationTick();\n return this._buildPaletteGroups();\n });\n\n /**\n * All structure drop-list ids (root + every container), so each list — including palette lists and\n * the nested container lists — connects to every structure list **by id**. CDK resolves these ids\n * globally, so connections work regardless of DOM/DI nesting (a `cdkDropListGroup` would not see a\n * nested list whose template is declared outside the group element).\n */\n public readonly $structureListIds = computed<string[]>(() => {\n // Container lists are listed BEFORE the root list so that, where a nested section's drop zone\n // overlaps the root list's area, CDK resolves to the inner (section) list first. The result:\n // dropping inside a section's box lands in that section, while the section header row and the\n // top-level gaps (covered only by the root list) still drop at the top level.\n const containerIds: string[] = [];\n this._walk(this.$structure(), node => {\n if (this.isContainer(node)) containerIds.push(this.containerListId(node));\n });\n return [...containerIds, 'structure-root'];\n });\n\n public readonly includeFunctionKeys: string[] = Object.keys(IncludeFunction).filter(key =>\n isNaN(Number(key))\n );\n\n public readonly editorForm = this.fb.group({\n title: this.fb.control('', Validators.required),\n link: this.fb.control(''),\n icon: this.fb.control<string | null>(null),\n includeFunction: this.fb.control<string | null>(null),\n section: this.fb.control<string>('root'),\n });\n\n /** Sections an item can be placed in via the editor: top level + each container present in the tree. */\n public readonly $sectionOptions = computed<Array<{value: string; label: string}>>(() => {\n this._$translationTick();\n const options = [\n {\n value: 'root',\n label: this.translateService.instant('adminSettings.menuConfiguration.editor.sectionRoot'),\n },\n ];\n this.$structure().forEach(node => {\n if (this.isContainer(node))\n options.push({value: this._sectionValue(node), label: this.displayTitle(node)});\n });\n return options;\n });\n\n /** Kinds that can be freely placed in any section (and so get the editor's Section selector). */\n private readonly SECTION_CAPABLE_KINDS: ReadonlyArray<MenuConfigurationItem['kind']> = [\n 'custom-link',\n 'section-header',\n 'plugin-page',\n ];\n\n public readonly $editorShowSection = computed<boolean>(() =>\n this.SECTION_CAPABLE_KINDS.includes(this.$editorKind())\n );\n\n /** Tracks the editor's currently selected section so the icon field can react to placement changes. */\n private readonly _$editorSection = toSignal(this.editorForm.controls.section.valueChanges, {\n initialValue: this.editorForm.controls.section.value,\n });\n\n /**\n * The icon only surfaces in the rendered menu for top-level entries, so the editor hides the icon\n * field for section headers and for any item placed inside a section (a sub-menu item).\n */\n public readonly $editorShowIcon = computed<boolean>(\n () => this.$editorKind() !== 'section-header' && this._$editorSection() === 'root'\n );\n\n private _editingUid: string | null = null;\n private _pendingPaletteItem: PaletteItem | null = null;\n private _uidCounter = 0;\n\n // Drop predicates — placement constraints. Every predicate also defers to a deeper nested list under\n // the pointer (see `_pointerOverDeeperList`), so the innermost list always wins: without this, the\n // root list — which geometrically encloses every nested list — would steal freely-placeable ('any')\n // items (custom links, section headers, plugin pages) out of a section while you reorder inside it,\n // because root accepts them (catalog items are protected only by their placement constraint).\n // Palette lists reject all drops (you drag *out* of them).\n public readonly topEnterPredicate = (drag: CdkDrag, drop: CdkDropList): boolean =>\n !this._pointerOverDeeperList(drop) && ['top', 'any'].includes(this._placementOf(drag.data));\n public readonly adminEnterPredicate = (drag: CdkDrag, drop: CdkDropList): boolean =>\n !this._pointerOverDeeperList(drop) && this._containerAccepts('admin', drag.data);\n public readonly developmentEnterPredicate = (drag: CdkDrag, drop: CdkDropList): boolean =>\n !this._pointerOverDeeperList(drop) && this._containerAccepts('development', drag.data);\n // A custom section only accepts freely-placeable ('any') items — never another section or a\n // placement-constrained catalog page — so the menu never nests beyond the two levels it renders.\n public readonly groupEnterPredicate = (drag: CdkDrag, drop: CdkDropList): boolean =>\n !this._pointerOverDeeperList(drop) && this._placementOf(drag.data) === 'any';\n public readonly paletteEnterPredicate = (): boolean => false;\n\n /** Last known pointer position during a drag, used to resolve nested drop-list ambiguity. */\n private _pointer = {x: 0, y: 0};\n private readonly _trackPointer = (event: PointerEvent | TouchEvent): void => {\n const point = 'touches' in event ? event.touches[0] : event;\n if (point) this._pointer = {x: point.clientX, y: point.clientY};\n };\n\n /**\n * True when a `.valtimo-drag-drop-list` nested *inside* `drop` currently sits under the pointer.\n * Such a deeper list is the more specific target, so `drop` should decline the item — this keeps a\n * reorder inside a section from being hijacked by the enclosing (ancestor) list.\n */\n private _pointerOverDeeperList(drop: CdkDropList): boolean {\n const nested = (drop.element.nativeElement as HTMLElement).querySelectorAll(\n '.valtimo-drag-drop-list'\n );\n return Array.from(nested).some(list => {\n const r = list.getBoundingClientRect();\n return (\n this._pointer.x >= r.left &&\n this._pointer.x <= r.right &&\n this._pointer.y >= r.top &&\n this._pointer.y <= r.bottom\n );\n });\n }\n\n constructor(\n private readonly fb: FormBuilder,\n private readonly adminSettingsService: AdminSettingsService,\n private readonly pluginPageService: ExternalPluginPageService,\n private readonly configService: ConfigService,\n private readonly translateService: TranslateService,\n private readonly iconService: IconService\n ) {\n this.iconService.registerAll([Add16, Edit16, Locked16, TrashCan16]);\n\n merge(\n this.translateService.onLangChange,\n this.translateService.onDefaultLangChange,\n this.translateService.onTranslationChange\n )\n .pipe(takeUntilDestroyed())\n .subscribe(() => this._$translationTick.update(tick => tick + 1));\n }\n\n public ngOnInit(): void {\n this.load();\n }\n\n public ngOnDestroy(): void {\n // A drag can still be in progress when the component is destroyed (route change mid-drag), in\n // which case onDragEnded never fires — always detach the document-level pointer listeners.\n this._removePointerListeners();\n }\n\n // ----- Loading & seeding -----\n\n public load(): void {\n this.$loading.set(true);\n forkJoin({\n dto: this.adminSettingsService\n .getMenuConfiguration()\n .pipe(catchError(() => of({configuration: {}}))),\n pages: this.pluginPageService.getMenuPages().pipe(catchError(() => of([]))),\n }).subscribe(({dto, pages}) => {\n this.$pluginPages.set(pages);\n const items = hasSavedMenuConfiguration(dto)\n ? (dto.configuration.items as MenuConfigurationItem[])\n : buildMenuConfigurationFromRuntimeMenu(this.configService.config?.menu?.menuItems ?? [])\n .items;\n this.$structure.set(this._assignUids(items));\n this.$loading.set(false);\n });\n }\n\n public onReset(): void {\n this.load();\n }\n\n // ----- Drag & drop -----\n\n public onDragStarted(): void {\n this.$dragging.set(true);\n document.addEventListener('pointermove', this._trackPointer, true);\n document.addEventListener('touchmove', this._trackPointer, true);\n }\n\n public onDragEnded(): void {\n this.$dragging.set(false);\n this._removePointerListeners();\n }\n\n private _removePointerListeners(): void {\n document.removeEventListener('pointermove', this._trackPointer, true);\n document.removeEventListener('touchmove', this._trackPointer, true);\n }\n\n public onDrop(event: CdkDragDrop<BuilderNode[]>): void {\n const isFromPalette = event.previousContainer.id.startsWith('palette-');\n\n if (event.previousContainer === event.container) {\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\n } else if (isFromPalette) {\n const node = this._paletteItemToNode(event.item.data as PaletteItem);\n if (!node) return;\n event.container.data.splice(event.currentIndex, 0, node);\n } else {\n transferArrayItem(\n event.previousContainer.data,\n event.container.data,\n event.previousIndex,\n event.currentIndex\n );\n }\n\n this._bump();\n }\n\n // ----- Palette actions -----\n\n public onAddPaletteItem(item: PaletteItem): void {\n // Catalog items have a fixed placement — add them straight to the matching section.\n if (item.paletteType === 'catalog') {\n const node = this._paletteItemToNode(item);\n if (!node) return;\n this._defaultTargetFor(item).push(node);\n this._bump();\n return;\n }\n\n // Generic (custom link, section header, section/group) + plugin-page items open the editor so\n // the admin can set the title and pick the section (top level, Admin, a custom section, …)\n // before the item is committed to the tree.\n this.openNewItemEditor(item);\n }\n\n // ----- Row actions -----\n\n public openEditor(node: BuilderNode): void {\n this._editingUid = node._uid;\n this._pendingPaletteItem = null;\n this.$editorKind.set(node.kind);\n this.$editorRequired.set(this.isRequired(node));\n\n this.editorForm.reset({\n title: this._editableTitle(node),\n // Only a custom link has an editable URL; every other kind's control is disabled and\n // unrendered, so it is seeded empty — matching openNewItemEditor.\n link: node.kind === 'custom-link' ? node.link : '',\n icon: this._mdiKeyFromIconClass(this._displayIconClass(node)),\n // Empty string (not null) so the \"Geen\" option (value=\"\") is selected on open when the item\n // carries no include function — a null value would leave the native select blank. The stored\n // value is the enum name (or a legacy numeric ordinal); the select works with names.\n includeFunction:\n node.kind === 'catalog' && !this.isRequired(node)\n ? (serializeIncludeFunction(node.includeFunction) ?? '')\n : '',\n section: this._findSectionOf(node._uid),\n });\n\n this._syncLinkControl(node.kind);\n this.$editorOpen.set(true);\n }\n\n public openNewItemEditor(item: PaletteItem): void {\n this._editingUid = null;\n this._pendingPaletteItem = item;\n this.$editorKind.set(item.paletteType);\n this.$editorRequired.set(false);\n\n const defaultTitle =\n item.paletteType === 'section-header'\n ? this.translateService.instant('adminSettings.menuConfiguration.defaults.sectionHeader')\n : item.paletteType === 'custom-link'\n ? this.translateService.instant('adminSettings.menuConfiguration.defaults.customLink')\n : item.paletteType === 'group'\n ? this.translateService.instant('adminSettings.menuConfiguration.defaults.group')\n : item.label;\n\n this.editorForm.reset({\n title: defaultTitle,\n link: item.paletteType === 'custom-link' ? '/' : '',\n icon: item.icon ? this._mdiKeyFromIconClass(item.icon) : null,\n includeFunction: '',\n section: 'root',\n });\n\n this._syncLinkControl(item.paletteType);\n this.$editorOpen.set(true);\n }\n\n public onEditorSave(): void {\n if (this.editorForm.invalid) return;\n const value = this.editorForm.getRawValue();\n\n const node =\n this._editingUid !== null\n ? this._findByUid(this.$structure(), this._editingUid)\n : this._pendingPaletteItem\n ? this._paletteItemToNode(this._pendingPaletteItem)\n : null;\n if (!node) {\n this.closeEditor();\n return;\n }\n\n node.title = (value.title ?? '').trim();\n if (node.kind === 'custom-link') {\n node.link = (value.link ?? '').trim();\n }\n if (node.kind === 'catalog' || node.kind === 'custom-link' || node.kind === 'plugin-page') {\n const iconClass = this._iconClassFromMdiKey(value.icon);\n if (iconClass) {\n node.icon = iconClass;\n } else if (this._editingUid !== null) {\n delete node.icon;\n }\n }\n if (node.kind === 'catalog') {\n // Required items must never carry an include function (it could hide them at runtime).\n // Persisted as the enum member *name* so the stored config survives enum reorders.\n node.includeFunction =\n this.isRequired(node) || !value.includeFunction\n ? undefined\n : serializeIncludeFunction(value.includeFunction);\n if (node.includeFunction === undefined) delete node.includeFunction;\n }\n\n this._placeNode(node, value.section ?? 'root');\n this._bump();\n this.closeEditor();\n }\n\n public closeEditor(): void {\n this.$editorOpen.set(false);\n this._editingUid = null;\n this._pendingPaletteItem = null;\n }\n\n /** Commits a (new or edited) node into the chosen section, moving it if its section changed. */\n private _placeNode(node: BuilderNode, section: string): void {\n const sectionCapable = this.SECTION_CAPABLE_KINDS.includes(node.kind);\n\n if (this._editingUid !== null) {\n // Existing node: only move it when it is section-capable and the section actually changed.\n if (sectionCapable && this._findSectionOf(node._uid) !== section) {\n this._removeByUid(this.$structure(), node._uid);\n this._targetForSection(section).push(node);\n }\n return;\n }\n\n // New node: place into the chosen section (top level for non-section-capable kinds).\n const target = sectionCapable ? this._targetForSection(section) : this.$structure();\n target.push(node);\n }\n\n private _syncLinkControl(kind: MenuConfigurationItem['kind']): void {\n if (kind === 'custom-link') {\n this.editorForm.controls.link.enable();\n } else {\n this.editorForm.controls.link.disable();\n }\n }\n\n public onRemove(node: BuilderNode): void {\n if (this.isRequired(node)) return;\n this._removeByUid(this.$structure(), node._uid);\n this._bump();\n }\n\n public onSave(): void {\n this.$saving.set(true);\n this.$saved.set(false);\n const configuration: MenuConfiguration = {\n version: MENU_CONFIGURATION_VERSION,\n items: this._stripUids(this.$structure()),\n };\n this.adminSettingsService.updateMenuConfiguration({configuration}).subscribe({\n next: () => {\n this.$saving.set(false);\n this._$reloadModalOpen.set(true);\n },\n error: () => this.$saving.set(false),\n });\n }\n\n /** Reload the app so the freshly saved menu takes effect. */\n public onReloadConfirm(): void {\n window.location.reload();\n }\n\n /** Dismiss the reload modal, leaving a persistent inline reminder that a reload is still pending. */\n public onReloadDismiss(): void {\n this._$reloadModalOpen.set(false);\n this.$saved.set(true);\n }\n\n /** Dismiss the persistent \"menu saved\" reminder. */\n public onDismissSavedNotification(): void {\n this.$saved.set(false);\n }\n\n // ----- Display helpers (used by the template) -----\n\n public isContainer(node: BuilderNode): boolean {\n return (\n node.kind === 'group' ||\n (node.kind === 'catalog' && (node.itemId === 'admin' || node.itemId === 'development'))\n );\n }\n\n public isRequired(node: BuilderNode): boolean {\n return node.kind === 'catalog' && !!getMenuCatalogEntry(node.itemId)?.required;\n }\n\n public hasRuntimeSubmenu(node: BuilderNode): boolean {\n return node.kind === 'catalog' && (node.itemId === 'cases' || node.itemId === 'objects');\n }\n\n public displayTitle(node: BuilderNode): string {\n if (node.kind === 'catalog') {\n return this.translateService.instant(\n node.title ?? getMenuCatalogEntry(node.itemId)?.defaultTitleKey ?? node.itemId\n );\n }\n return node.title;\n }\n\n public childrenOf(node: BuilderNode): BuilderNode[] {\n return this._childArray(node) ?? [];\n }\n\n public containerListId(node: BuilderNode): string {\n return `structure-children-${node.kind === 'catalog' ? node.itemId : node._uid}`;\n }\n\n public containerEnterPredicate(node: BuilderNode): (drag: CdkDrag, drop: CdkDropList) => boolean {\n if (node.kind === 'group') return this.groupEnterPredicate;\n if (node.kind === 'catalog' && node.itemId === 'development')\n return this.developmentEnterPredicate;\n return this.adminEnterPredicate;\n }\n\n public iconClassOf(node: BuilderNode): string | null {\n return this._displayIconClass(node);\n }\n\n /**\n * Which plugin configuration a placed page belongs to. Every configuration of one plugin\n * contributes a page with the same title, so the row is otherwise indistinguishable from its\n * siblings. Empty for every other kind, and for a page whose configuration no longer exists.\n */\n public configurationTitleOf(node: BuilderNode): string {\n if (node.kind !== 'plugin-page') return '';\n return (\n this.$pluginPages().find(page => page.configurationId === node.configurationId)\n ?.configurationTitle ?? ''\n );\n }\n\n public trackByUid = (_: number, node: BuilderNode): string => node._uid;\n\n // ----- Private helpers -----\n\n private _displayIconClass(node: BuilderNode): string | null {\n if (node.kind === 'catalog')\n return node.icon ?? getMenuCatalogEntry(node.itemId)?.defaultIcon ?? null;\n if (node.kind === 'custom-link' || node.kind === 'plugin-page' || node.kind === 'group') {\n return node.icon ?? null;\n }\n return null;\n }\n\n private _editableTitle(node: BuilderNode): string {\n if (node.kind === 'catalog')\n return node.title ?? getMenuCatalogEntry(node.itemId)?.defaultTitleKey ?? '';\n return node.title;\n }\n\n private _placementOf(data: PaletteItem | BuilderNode): MenuItemPlacement {\n if (data && 'paletteType' in data) {\n if (data.paletteType === 'catalog' && data.itemId) {\n return getMenuCatalogEntry(data.itemId)?.placement ?? 'any';\n }\n // A section (group) is top-level only; everything else generic is freely placeable.\n return data.paletteType === 'group' ? 'top' : 'any';\n }\n if (data && 'kind' in data && data.kind === 'catalog') {\n return getMenuCatalogEntry(data.itemId)?.placement ?? 'any';\n }\n return data && 'kind' in data && data.kind === 'group' ? 'top' : 'any';\n }\n\n private _containerAccepts(\n placement: MenuItemPlacement,\n data: PaletteItem | BuilderNode\n ): boolean {\n const itemPlacement = this._placementOf(data);\n return itemPlacement === 'any' || itemPlacement === placement;\n }\n\n private _paletteItemToNode(item: PaletteItem): BuilderNode | null {\n switch (item.paletteType) {\n case 'catalog':\n return item.itemId ? this._withUid({kind: 'catalog', itemId: item.itemId}) : null;\n case 'group':\n return this._withUid({\n kind: 'group',\n title: this.translateService.instant('adminSettings.menuConfiguration.defaults.group'),\n children: [],\n });\n case 'section-header':\n return this._withUid({\n kind: 'section-header',\n title: this.translateService.instant(\n 'adminSettings.menuConfiguration.defaults.sectionHeader'\n ),\n });\n case 'custom-link':\n return this._withUid({\n kind: 'custom-link',\n title: this.translateService.instant(\n 'adminSettings.menuConfiguration.defaults.customLink'\n ),\n link: '/',\n });\n case 'plugin-page':\n return item.page\n ? this._withUid({\n kind: 'plugin-page',\n configurationId: item.page.configurationId,\n bundleKey: item.page.bundleKey ?? undefined,\n title: item.label,\n icon: item.page.icon ?? undefined,\n })\n : null;\n default:\n return null;\n }\n }\n\n private _defaultTargetFor(item: PaletteItem): BuilderNode[] {\n // Drag is unconstrained for these items, but the Add button still drops a page into its natural\n // home section by default (its catalog category), falling back to the top level.\n if (item.paletteType === 'catalog' && item.itemId) {\n const category = getMenuCatalogEntry(item.itemId)?.category;\n if (category === 'admin') return this._targetForSection('admin');\n if (category === 'development') return this._targetForSection('development');\n }\n return this.$structure();\n }\n\n /** A container's stable section id: catalog `itemId` for Admin/Development, `_uid` for a custom section. */\n private _sectionValue(node: BuilderNode): string {\n return node.kind === 'catalog' ? node.itemId : node._uid;\n }\n\n /** The array that backs a section id (`'root'`, a catalog `itemId`, or a group `_uid`), creating children if needed. */\n private _targetForSection(section: string): BuilderNode[] {\n if (!section || section === 'root') return this.$structure();\n const container = this.$structure().find(\n node => this.isContainer(node) && this._sectionValue(node) === section\n );\n if (container && (container.kind === 'catalog' || container.kind === 'group')) {\n container.children = (container.children as BuilderNode[]) ?? [];\n return container.children as BuilderNode[];\n }\n return this.$structure();\n }\n\n /** Which section a node currently lives in: `'root'` or the containing section's id. */\n private _findSectionOf(uid: string): string {\n if (this.$structure().some(node => node._uid === uid)) return 'root';\n for (const node of this.$structure()) {\n const children = this._childArray(node);\n if (children && children.some(child => child._uid === uid)) {\n return this._sectionValue(node);\n }\n }\n return 'root';\n }\n\n private _buildPaletteGroups(): PaletteGroup[] {\n const placedCatalog = new Set<string>();\n const placedPlugins = new Set<string>();\n this._walk(this.$structure(), node => {\n if (node.kind === 'catalog') placedCatalog.add(node.itemId);\n if (node.kind === 'plugin-page')\n placedPlugins.add(this._pluginKey(node.configurationId, node.bundleKey));\n });\n\n const fromCatalog = (category: string): PaletteItem[] =>\n MENU_ITEM_CATALOG.filter(\n entry => entry.category === category && !placedCatalog.has(entry.itemId)\n ).map(entry => ({\n paletteType: 'catalog',\n itemId: entry.itemId,\n label: this.translateService.instant(entry.defaultTitleKey),\n icon: entry.defaultIcon,\n }));\n\n const pluginPages: PaletteItem[] = this.$pluginPages()\n .filter(page => !placedPlugins.has(this._pluginKey(page.configurationId, page.bundleKey)))\n .map(page => ({\n paletteType: 'plugin-page',\n page,\n label: this._localizedPluginTitle(page),\n sublabel: page.configurationTitle,\n icon: page.icon ?? undefined,\n }));\n\n return [\n {\n categoryKey: 'generic',\n items: [\n {\n paletteType: 'group',\n label: this.translateService.instant('adminSettings.menuConfiguration.generic.group'),\n },\n {\n paletteType: 'section-header',\n label: this.translateService.instant(\n 'adminSettings.menuConfiguration.generic.sectionHeader'\n ),\n },\n {\n paletteType: 'custom-link',\n label: this.translateService.instant(\n 'adminSettings.menuConfiguration.generic.customLink'\n ),\n },\n ],\n },\n {categoryKey: 'main', items: fromCatalog('main')},\n {categoryKey: 'admin', items: fromCatalog('admin')},\n {categoryKey: 'development', items: fromCatalog('development')},\n {categoryKey: 'pluginPages', items: pluginPages},\n ];\n }\n\n private _localizedPluginTitle(page: ExternalPluginMenuPage): string {\n const lang = this.translateService.currentLang ?? this.translateService.defaultLang ?? 'en';\n return page.titleTranslations?.[lang] ?? page.title ?? page.configurationTitle;\n }\n\n private _pluginKey(configurationId: string, bundleKey: string | null | undefined): string {\n return `${configurationId}:${bundleKey ?? ''}`;\n }\n\n /**\n * The MDI icon selector works with the full MDI class token (e.g. `mdi-view-dashboard`) — its\n * preview binds the value straight onto an element class and `POPULAR_MDI_ICONS` is `mdi-*` keyed\n * — so we keep the `mdi-` prefix here (stripping it broke the preview and double-prefixed on save).\n */\n private _mdiKeyFromIconClass(iconClass: string | null): string | null {\n if (!iconClass) return null;\n const match = iconClass.match(/(mdi-[a-z0-9-]+)/i);\n return match ? match[1] : null;\n }\n\n /** Builds the menu `iconClass` from the selector's MDI class token (`mdi-view-dashboard` → `icon mdi mdi-view-dashboard`). */\n private _iconClassFromMdiKey(key: string | null | undefined): string | undefined {\n return key ? `icon mdi ${key}` : undefined;\n }\n\n // ----- Tree utilities -----\n\n /** The editable children array of a branch node (catalog group or custom section), else null. */\n private _childArray(node: BuilderNode): BuilderNode[] | null {\n if ((node.kind === 'catalog' || node.kind === 'group') && Array.isArray(node.children)) {\n return node.children as BuilderNode[];\n }\n return null;\n }\n\n private _withUid(node: MenuConfigurationItem): BuilderNode {\n return {...node, _uid: `node-${this._uidCounter++}`} as BuilderNode;\n }\n\n private _assignUids(items: MenuConfigurationItem[]): BuilderNode[] {\n return items.map(item => {\n const node = this._withUid(item);\n const children = this._childArray(node);\n if (children) {\n (node as {children: BuilderNode[]}).children = this._assignUids(children);\n }\n return node;\n });\n }\n\n private _walk(nodes: BuilderNode[], visit: (node: BuilderNode) => void): void {\n nodes.forEach(node => {\n visit(node);\n const children = this._childArray(node);\n if (children) this._walk(children, visit);\n });\n }\n\n private _findByUid(nodes: BuilderNode[], uid: string): BuilderNode | null {\n for (const node of nodes) {\n if (node._uid === uid) return node;\n const children = this._childArray(node);\n if (children) {\n const found = this._findByUid(children, uid);\n if (found) return found;\n }\n }\n return null;\n }\n\n private _removeByUid(nodes: BuilderNode[], uid: string): boolean {\n const index = nodes.findIndex(node => node._uid === uid);\n if (index >= 0) {\n nodes.splice(index, 1);\n return true;\n }\n return nodes.some(node => {\n const children = this._childArray(node);\n return !!children && this._removeByUid(children, uid);\n });\n }\n\n /** Deep-clones array references so the OnPush drag-drop lists re-render after an in-place mutation. */\n private _bump(): void {\n this.$saved.set(false);\n this.$structure.set(this._clone(this.$structure()));\n }\n\n private _clone(nodes: BuilderNode[]): BuilderNode[] {\n return nodes.map(node => {\n const copy = {...node} as BuilderNode;\n const children = this._childArray(node);\n if (children) (copy as {children: BuilderNode[]}).children = this._clone(children);\n return copy;\n });\n }\n\n /** Produces the persisted structure without the transient `_uid` fields. */\n private _stripUids(nodes: BuilderNode[]): MenuConfigurationItem[] {\n return nodes.map(node => {\n const {_uid, ...rest} = node as BuilderNode & {_uid: string};\n const clean = rest as MenuConfigurationItem;\n if ((clean.kind === 'catalog' || clean.kind === 'group') && Array.isArray(clean.children)) {\n clean.children = this._stripUids(clean.children as BuilderNode[]);\n }\n return clean;\n });\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n@if ($loading()) {\n <div class=\"menu-configuration__status\">\n <cds-loading [isActive]=\"true\" [overlay]=\"false\" size=\"normal\"></cds-loading>\n </div>\n} @else {\n <div class=\"menu-configuration\">\n @if ($saved()) {\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'success',\n title: ('adminSettings.menuConfiguration.savedTitle' | translate),\n message: ('adminSettings.menuConfiguration.savedSubtitle' | translate),\n showClose: true,\n lowContrast: true,\n }\"\n (close)=\"onDismissSavedNotification()\"\n ></cds-inline-notification>\n }\n\n <div\n fitPage\n [disableOverflow]=\"true\"\n class=\"menu-configuration__panels\"\n [class.menu-configuration__panels--dragging]=\"$dragging()\"\n >\n <!-- Left: the editable menu structure -->\n <section cdkScrollable class=\"menu-configuration__panel\">\n <div class=\"menu-configuration__panel-header\">\n <h4 class=\"menu-configuration__panel-title\">\n {{ 'adminSettings.menuConfiguration.structureTitle' | translate }}\n </h4>\n\n <div class=\"menu-configuration__panel-actions\">\n <button\n cdsButton=\"tertiary\"\n size=\"sm\"\n [onBottom]=\"true\"\n [vTooltip]=\"'adminSettings.menuConfiguration.resetTooltip' | translate\"\n (click)=\"onReset()\"\n [attr.data-test-id]=\"testIds.resetButton\"\n >\n {{ 'adminSettings.menuConfiguration.reset' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n size=\"sm\"\n [disabled]=\"$saving()\"\n (click)=\"onSave()\"\n [attr.data-test-id]=\"testIds.saveButton\"\n >\n {{ 'adminSettings.menuConfiguration.save' | translate }}\n </button>\n </div>\n </div>\n\n <valtimo-drag-drop-list\n [attr.data-test-id]=\"testIds.structureList\"\n [connectedTo]=\"$structureListIds()\"\n [enterPredicate]=\"topEnterPredicate\"\n [handleAriaLabel]=\"'adminSettings.menuConfiguration.dragHandle' | translate\"\n [items]=\"$structure()\"\n [itemTemplate]=\"structureItemTpl\"\n [expansionTemplate]=\"structureExpansionTpl\"\n [emptyTemplate]=\"structureEmptyTpl\"\n [wholeRowDraggable]=\"true\"\n listId=\"structure-root\"\n (dragEndedEvent)=\"onDragEnded()\"\n (dragStartedEvent)=\"onDragStarted()\"\n (droppedEvent)=\"onDrop($event)\"\n ></valtimo-drag-drop-list>\n </section>\n\n <!-- Right: the available-items catalog -->\n <section cdkScrollable class=\"menu-configuration__panel\">\n <div class=\"menu-configuration__panel-header\">\n <h4 class=\"menu-configuration__panel-title\">\n {{ 'adminSettings.menuConfiguration.availableTitle' | translate }}\n </h4>\n </div>\n\n @for (group of $paletteGroups(); track group.categoryKey) {\n <div class=\"menu-configuration__palette-group\">\n <h5 class=\"menu-configuration__palette-group-title\">\n {{ 'adminSettings.menuConfiguration.categories.' + group.categoryKey | translate }}\n </h5>\n\n @if (!group.items.length) {\n <p class=\"menu-configuration__palette-empty\">\n {{ 'adminSettings.menuConfiguration.allPlaced' | translate }}\n </p>\n } @else {\n <valtimo-drag-drop-list\n [connectedTo]=\"$structureListIds()\"\n [enterPredicate]=\"paletteEnterPredicate\"\n [handleAriaLabel]=\"'adminSettings.menuConfiguration.dragHandle' | translate\"\n [items]=\"group.items\"\n [itemTemplate]=\"paletteItemTpl\"\n [listId]=\"'palette-' + group.categoryKey\"\n [sortingDisabled]=\"true\"\n [wholeRowDraggable]=\"true\"\n (dragEndedEvent)=\"onDragEnded()\"\n (dragStartedEvent)=\"onDragStarted()\"\n ></valtimo-drag-drop-list>\n }\n </div>\n }\n </section>\n </div>\n </div>\n}\n\n<!-- The header row of a menu-structure item (icon, title, actions). The sub-list, if any, is rendered\n by structureExpansionTpl below the row — never inside it. -->\n<ng-template #structureItemTpl let-node>\n <div class=\"menu-configuration__row\">\n <div class=\"menu-configuration__row-main\">\n @if (iconClassOf(node)) {\n <i class=\"menu-configuration__row-icon\" [ngClass]=\"iconClassOf(node)\"></i>\n }\n\n <span\n class=\"menu-configuration__row-title\"\n [class.menu-configuration__row-title--group]=\"isContainer(node)\"\n >{{ displayTitle(node) }}</span\n >\n\n @if (configurationTitleOf(node)) {\n <span class=\"menu-configuration__row-subtitle\">{{ configurationTitleOf(node) }}</span>\n }\n\n @if (isRequired(node)) {\n <cds-tag type=\"cool-gray\" size=\"sm\">\n <svg cdsIcon=\"locked\" size=\"16\"></svg>\n {{ 'adminSettings.menuConfiguration.required' | translate }}\n </cds-tag>\n }\n </div>\n\n <div class=\"menu-configuration__row-actions\">\n <button\n cdsButton=\"ghost\"\n size=\"sm\"\n [iconOnly]=\"true\"\n (click)=\"openEditor(node)\"\n [title]=\"'interface.edit' | translate\"\n >\n <svg cdsIcon=\"edit\" size=\"16\"></svg>\n </button>\n\n @if (!isRequired(node)) {\n <button\n cdsButton=\"ghost\"\n size=\"sm\"\n [iconOnly]=\"true\"\n (click)=\"onRemove(node)\"\n [title]=\"'interface.delete' | translate\"\n >\n <svg cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- The sub-list under a structure item, rendered below (and outside) the row (recursive). -->\n<ng-template #structureExpansionTpl let-node>\n @if (isContainer(node)) {\n <div class=\"menu-configuration__children\">\n <valtimo-drag-drop-list\n [connectedTo]=\"$structureListIds()\"\n [emptyTemplate]=\"sectionEmptyTpl\"\n [enterPredicate]=\"containerEnterPredicate(node)\"\n [handleAriaLabel]=\"'adminSettings.menuConfiguration.dragHandle' | translate\"\n [items]=\"childrenOf(node)\"\n [itemTemplate]=\"structureItemTpl\"\n [expansionTemplate]=\"structureExpansionTpl\"\n [listId]=\"containerListId(node)\"\n [wholeRowDraggable]=\"true\"\n (dragEndedEvent)=\"onDragEnded()\"\n (dragStartedEvent)=\"onDragStarted()\"\n (droppedEvent)=\"onDrop($event)\"\n ></valtimo-drag-drop-list>\n </div>\n }\n\n <!-- Dynamic-submenu items (Cases, Objects) show a dummy submenu explaining it grows at runtime. -->\n @if (hasRuntimeSubmenu(node)) {\n <div class=\"menu-configuration__children menu-configuration__children--runtime\">\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'info',\n title: ('adminSettings.menuConfiguration.runtimeSubmenu' | translate),\n message: ('adminSettings.menuConfiguration.runtimeSubmenuNote' | translate),\n showClose: false,\n lowContrast: true,\n }\"\n ></cds-inline-notification>\n </div>\n }\n</ng-template>\n\n<!-- A row in the available-items palette -->\n<ng-template #paletteItemTpl let-item>\n <div\n class=\"menu-configuration__palette-item\"\n [title]=\"item.label + (item.sublabel ? ' — ' + item.sublabel : '')\"\n >\n @if (item.icon) {\n <i class=\"menu-configuration__row-icon\" [ngClass]=\"item.icon\"></i>\n }\n\n <span class=\"menu-configuration__palette-text\">\n <span class=\"menu-configuration__palette-label\">{{ item.label }}</span>\n @if (item.sublabel) {\n <span class=\"menu-configuration__palette-sublabel\">{{ item.sublabel }}</span>\n }\n </span>\n\n <button\n cdsButton=\"ghost\"\n size=\"sm\"\n [iconOnly]=\"true\"\n (click)=\"onAddPaletteItem(item)\"\n [title]=\"'adminSettings.menuConfiguration.add' | translate\"\n >\n <svg cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #structureEmptyTpl>\n <p class=\"menu-configuration__structure-empty\">\n {{ 'adminSettings.menuConfiguration.emptyStructure' | translate }}\n </p>\n</ng-template>\n\n<ng-template #sectionEmptyTpl>\n <p class=\"menu-configuration__structure-empty\">\n {{ 'adminSettings.menuConfiguration.emptySection' | translate }}\n </p>\n</ng-template>\n\n<!-- Item editor -->\n<cds-modal [open]=\"$editorOpen()\" (overlaySelected)=\"closeEditor()\">\n <cds-modal-header (closeSelect)=\"closeEditor()\">\n <h3 cdsModalHeaderHeading>{{ 'adminSettings.menuConfiguration.editor.title' | translate }}</h3>\n </cds-modal-header>\n\n <section\n cdsModalContent\n [cdsLayer]=\"1\"\n [formGroup]=\"editorForm\"\n class=\"menu-configuration__editor\"\n >\n <cds-text-label [helperText]=\"'adminSettings.menuConfiguration.editor.titleHelper' | translate\">\n {{ 'interface.title' | translate }}\n <input cdsText formControlName=\"title\" [attr.data-test-id]=\"testIds.editorTitleInput\" />\n </cds-text-label>\n\n @if ($editorKind() === 'custom-link') {\n <cds-text-label>\n {{ 'adminSettings.menuConfiguration.editor.link' | translate }}\n <input cdsText formControlName=\"link\" [attr.data-test-id]=\"testIds.editorLinkInput\" />\n </cds-text-label>\n }\n\n <!-- Gated on $editorOpen() so the icon selector (and its Carbon combobox) is recreated fresh each\n time the editor opens — otherwise the reused combobox keeps the previous entry's filter state. -->\n @if ($editorOpen() && $editorShowIcon()) {\n <valtimo-mdi-icon-selector\n [appendInline]=\"false\"\n [fullWidth]=\"true\"\n formControlName=\"icon\"\n ></valtimo-mdi-icon-selector>\n }\n\n @if ($editorShowSection()) {\n <cds-select\n formControlName=\"section\"\n [label]=\"'adminSettings.menuConfiguration.editor.section' | translate\"\n >\n @for (option of $sectionOptions(); track option.value) {\n <option [value]=\"option.value\">{{ option.label }}</option>\n }\n </cds-select>\n }\n\n @if ($editorKind() === 'catalog' && !$editorRequired()) {\n <cds-select\n formControlName=\"includeFunction\"\n [label]=\"'adminSettings.menuConfiguration.editor.includeFunction' | translate\"\n >\n <option value=\"\">\n {{ 'adminSettings.menuConfiguration.editor.includeFunctionNone' | translate }}\n </option>\n @for (key of includeFunctionKeys; track key) {\n <option [value]=\"key\">{{ key }}</option>\n }\n </cds-select>\n }\n\n <p class=\"menu-configuration__editor-note\">\n {{ 'adminSettings.menuConfiguration.editor.pbacNote' | translate }}\n </p>\n </section>\n\n <cds-modal-footer>\n <button\n cdsButton=\"secondary\"\n (click)=\"closeEditor()\"\n [attr.data-test-id]=\"testIds.editorCancelButton\"\n >\n {{ 'interface.cancel' | translate }}\n </button>\n <button\n cdsButton=\"primary\"\n [disabled]=\"editorForm.invalid\"\n (click)=\"onEditorSave()\"\n [attr.data-test-id]=\"testIds.editorSaveButton\"\n >\n {{ 'interface.save' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n\n<!-- After a successful save, offer to reload so the new menu takes effect immediately. -->\n<valtimo-confirmation-modal\n cancelButtonTextTranslationKey=\"adminSettings.menuConfiguration.reloadModal.dismiss\"\n confirmButtonTextTranslationKey=\"adminSettings.menuConfiguration.reloadModal.confirm\"\n contentTranslationKey=\"adminSettings.menuConfiguration.reloadModal.content\"\n titleTranslationKey=\"adminSettings.menuConfiguration.reloadModal.title\"\n [showModalSubject$]=\"reloadModalOpen$\"\n (cancelEvent)=\"onReloadDismiss()\"\n (confirmEvent)=\"onReloadConfirm()\"\n></valtimo-confirmation-modal>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectionStrategy, Component} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {TabsModule} from 'carbon-components-angular';\nimport {map} from 'rxjs';\nimport {ADMIN_SETTINGS_TABS} from '../../constants';\nimport {AdminSettingsAppearanceComponent} from '../admin-settings-appearance/admin-settings-appearance.component';\nimport {AdminSettingsFeatureTogglesComponent} from '../admin-settings-feature-toggles/admin-settings-feature-toggles.component';\nimport {AdminSettingsMenuConfigurationComponent} from '../admin-settings-menu-configuration/admin-settings-menu-configuration.component';\n\n@Component({\n standalone: true,\n selector: 'valtimo-admin-settings',\n templateUrl: './admin-settings.component.html',\n styleUrls: ['./admin-settings.component.scss'],\n imports: [\n CommonModule,\n TranslatePipe,\n TabsModule,\n AdminSettingsAppearanceComponent,\n AdminSettingsFeatureTogglesComponent,\n AdminSettingsMenuConfigurationComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdminSettingsComponent {\n public readonly ADMIN_SETTINGS_TABS = ADMIN_SETTINGS_TABS;\n\n public readonly activeTabKey$ = this._route.params.pipe(\n map(params => params['tabKey'] || ADMIN_SETTINGS_TABS.APPEARANCE)\n );\n\n constructor(\n private readonly _route: ActivatedRoute,\n private readonly _router: Router\n ) {}\n\n public switchTab(tabKey: string): void {\n this._router.navigate(['..', tabKey], {relativeTo: this._route});\n }\n}\n","<!--\n ~ /*\n ~ * Copyright 2015-2026 Ritense BV, the Netherlands.\n ~ *\n ~ * Licensed under EUPL, Version 1.2 (the \"License\");\n ~ * you may not use this file except in compliance with the License.\n ~ * You may obtain a copy of the License at\n ~ *\n ~ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~ *\n ~ * Unless required by applicable law or agreed to in writing, software\n ~ * distributed under the License is distributed on an \"AS IS\" basis,\n ~ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ * See the License for the specific language governing permissions and\n ~ * limitations under the License.\n ~ */\n -->\n\n@if (activeTabKey$ | async; as activeTabKey) {\n <cds-tabs type=\"line\">\n @if ({active: activeTabKey === ADMIN_SETTINGS_TABS.APPEARANCE}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'adminSettings.tabs.appearance' | translate\"\n (selected)=\"switchTab(ADMIN_SETTINGS_TABS.APPEARANCE)\"\n >\n @if (obs.active) {\n <valtimo-admin-settings-appearance></valtimo-admin-settings-appearance>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === ADMIN_SETTINGS_TABS.MENU_CONFIGURATION}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'adminSettings.tabs.menuConfiguration' | translate\"\n (selected)=\"switchTab(ADMIN_SETTINGS_TABS.MENU_CONFIGURATION)\"\n >\n @if (obs.active) {\n <valtimo-admin-settings-menu-configuration></valtimo-admin-settings-menu-configuration>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === ADMIN_SETTINGS_TABS.FEATURE_TOGGLES}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'adminSettings.tabs.featureToggles' | translate\"\n (selected)=\"switchTab(ADMIN_SETTINGS_TABS.FEATURE_TOGGLES)\"\n >\n @if (obs.active) {\n <valtimo-admin-settings-feature-toggles></valtimo-admin-settings-feature-toggles>\n }\n </cds-tab>\n }\n\n </cds-tabs>\n}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormBuilder, FormGroup, ReactiveFormsModule} from '@angular/forms';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {\n ButtonModule,\n CheckboxModule,\n DatePickerInputModule,\n DatePickerModule,\n DropdownModule,\n LayerModule,\n ListItem,\n ModalModule,\n} from 'carbon-components-angular';\nimport {TooltipIconModule, ValtimoCdsModalDirective} from '@valtimo/components';\nimport {StartReindexRequestDto} from '../../models';\n\n@Component({\n standalone: true,\n selector: 'valtimo-start-reindex-modal',\n templateUrl: './start-reindex-modal.component.html',\n styleUrls: ['./start-reindex-modal.component.scss'],\n imports: [\n CommonModule,\n TranslateModule,\n ReactiveFormsModule,\n ModalModule,\n ValtimoCdsModalDirective,\n ButtonModule,\n CheckboxModule,\n DatePickerInputModule,\n DatePickerModule,\n DropdownModule,\n LayerModule,\n TooltipIconModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StartReindexModalComponent {\n @Input() public open = false;\n @Input() public documentDefinitions: ListItem[] = [];\n\n @Output() public readonly closeEvent = new EventEmitter<StartReindexRequestDto | null>();\n\n public readonly formGroup: FormGroup = this._fb.group({\n pruneOrphans: [false],\n documentDefinitionName: [null],\n modifiedAfter: [null],\n });\n\n constructor(private readonly _fb: FormBuilder) {}\n\n public onDateSelected(event: string[]): void {\n const dateValue = event?.[0] || null;\n this.formGroup.patchValue({modifiedAfter: dateValue});\n }\n\n public onCancel(): void {\n this._resetForm();\n this.closeEvent.emit(null);\n }\n\n public onSubmit(): void {\n const request = this._buildRequest();\n this._resetForm();\n this.closeEvent.emit(request);\n }\n\n private _buildRequest(): StartReindexRequestDto {\n const formValue = this.formGroup.value;\n const request: StartReindexRequestDto = {};\n\n if (formValue.pruneOrphans) {\n request.pruneOrphans = true;\n }\n\n if (formValue.documentDefinitionName?.value) {\n request.documentDefinitionName = formValue.documentDefinitionName.value;\n }\n\n if (formValue.modifiedAfter) {\n request.modifiedAfter = this._formatDateToIso(formValue.modifiedAfter);\n }\n\n return request;\n }\n\n private _formatDateToIso(date: string | Date): string {\n if (date instanceof Date) {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}T00:00:00`;\n }\n const parts = date.split('-');\n if (parts.length === 3) {\n const [day, month, year] = parts;\n return `${year}-${month}-${day}T00:00:00`;\n }\n return date;\n }\n\n private _resetForm(): void {\n this.formGroup.reset({\n pruneOrphans: false,\n documentDefinitionName: null,\n modifiedAfter: null,\n });\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal valtimoCdsModal *ngIf=\"open\" [open]=\"open\" size=\"sm\" (close)=\"onCancel()\">\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCancel()\">\n <h3 cdsModalHeaderHeading>{{ 'adminSettings.opensearch.reindex.startModalTitle' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\" [formGroup]=\"formGroup\" class=\"start-reindex-form\">\n <cds-checkbox formControlName=\"pruneOrphans\">\n <span class=\"label-with-tooltip\">\n {{ 'adminSettings.opensearch.reindex.pruneOrphans' | translate }}\n <v-tooltip-icon [tooltip]=\"'adminSettings.opensearch.reindex.tooltips.pruneOrphans' | translate\"></v-tooltip-icon>\n </span>\n </cds-checkbox>\n\n <cds-dropdown\n [label]=\"'adminSettings.opensearch.reindex.documentDefinitionName' | translate\"\n [placeholder]=\"'adminSettings.opensearch.reindex.documentDefinitionPlaceholder' | translate\"\n formControlName=\"documentDefinitionName\"\n >\n <cds-dropdown-list [items]=\"documentDefinitions\"></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-date-picker\n [label]=\"'adminSettings.opensearch.reindex.modifiedAfter' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected($event)\"\n ></cds-date-picker>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"secondary\" (click)=\"onCancel()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button cdsButton=\"primary\" (click)=\"onSubmit()\">\n {{ 'adminSettings.opensearch.reindex.startButton' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectionStrategy, Component, OnDestroy, OnInit} from '@angular/core';\nimport {CommonModule, DatePipe} from '@angular/common';\nimport {Router} from '@angular/router';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {\n BehaviorSubject,\n finalize,\n interval,\n map,\n merge,\n Observable,\n of,\n shareReplay,\n startWith,\n Subject,\n switchMap,\n take,\n takeUntil,\n takeWhile,\n} from 'rxjs';\nimport {\n ButtonModule,\n IconModule,\n IconService,\n ListItem,\n LoadingModule,\n ProgressBarModule,\n TagModule,\n} from 'carbon-components-angular';\nimport {Launch16} from '@carbon/icons';\nimport {CarbonListModule, ColumnConfig, Pagination, TooltipIconModule, ViewType} from '@valtimo/components';\nimport {Page} from '@valtimo/shared';\nimport {AdminSettingsManagementApiService} from '../../services';\nimport {ReindexStatusDto, StartReindexRequestDto} from '../../models';\nimport {DocumentService} from '@valtimo/document';\nimport {StartReindexModalComponent} from '../start-reindex-modal/start-reindex-modal.component';\n\n@Component({\n standalone: true,\n selector: 'valtimo-admin-settings-opensearch',\n templateUrl: './admin-settings-opensearch.component.html',\n styleUrls: ['./admin-settings-opensearch.component.scss'],\n imports: [\n CommonModule,\n DatePipe,\n TranslateModule,\n ButtonModule,\n IconModule,\n LoadingModule,\n ProgressBarModule,\n TagModule,\n CarbonListModule,\n StartReindexModalComponent,\n TooltipIconModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdminSettingsOpensearchComponent implements OnInit, OnDestroy {\n private readonly _destroy$ = new Subject<void>();\n private readonly _manualRefresh$ = new BehaviorSubject<void>(undefined);\n private readonly _silentRefresh$ = new Subject<void>();\n\n public readonly fields: ColumnConfig[] = [\n {key: 'statusTag', label: 'adminSettings.opensearch.reindex.columns.status', viewType: ViewType.TAGS},\n {key: 'startedOn', label: 'adminSettings.opensearch.reindex.columns.startedOn', viewType: ViewType.DATE},\n {key: 'finishedOn', label: 'adminSettings.opensearch.reindex.columns.finishedOn', viewType: ViewType.DATE},\n {key: 'progress', label: 'adminSettings.opensearch.reindex.columns.progress', viewType: ViewType.TEXT},\n ];\n\n public pagination: Pagination = {\n collectionSize: 0,\n page: 1,\n size: 10,\n };\n\n public readonly showModal$ = new BehaviorSubject<boolean>(false);\n public readonly startingReindex$ = new BehaviorSubject<boolean>(false);\n public readonly loading$ = new BehaviorSubject<boolean>(false);\n\n public documentDefinitions$: Observable<ListItem[]>;\n\n public readonly runs$: Observable<Page<ReindexStatusDto>> = merge(\n this._manualRefresh$.pipe(\n switchMap(() => {\n this.loading$.next(true);\n return this._apiService.getReindexRuns(this.pagination.page - 1, this.pagination.size).pipe(\n finalize(() => this.loading$.next(false))\n );\n })\n ),\n this._silentRefresh$.pipe(\n switchMap(() => this._apiService.getReindexRuns(this.pagination.page - 1, this.pagination.size))\n )\n ).pipe(shareReplay(1));\n\n public readonly tableItems$: Observable<any[]> = this.runs$.pipe(\n switchMap(page => {\n this.pagination = {...this.pagination, collectionSize: page.totalElements};\n if (page.content.length === 0) {\n return of([]);\n }\n const statusKeys = page.content.map(run => `adminSettings.opensearch.reindex.statuses.${run.status}`);\n return this._translateService.get(statusKeys).pipe(\n map(translations => page.content.map(run => ({\n ...run,\n progress: `${run.processedCount} / ${run.totalCount}`,\n statusTag: {\n content: translations[`adminSettings.opensearch.reindex.statuses.${run.status}`],\n type: this._getStatusTagType(run.status),\n },\n })))\n );\n })\n );\n\n public readonly hasRunningRun$: Observable<boolean> = this.runs$.pipe(\n map(page => page.content.some(run => run.status === 'RUNNING'))\n );\n\n constructor(\n private readonly _apiService: AdminSettingsManagementApiService,\n private readonly _documentService: DocumentService,\n private readonly _translateService: TranslateService,\n private readonly _router: Router,\n private readonly _iconService: IconService\n ) {\n this._iconService.register(Launch16);\n }\n\n public ngOnInit(): void {\n this.documentDefinitions$ = this._documentService.queryDefinitionsForManagement().pipe(\n switchMap(page =>\n this._translateService.get('adminSettings.opensearch.reindex.allDocumentDefinitions').pipe(\n map(allLabel => [\n {content: allLabel, value: null, selected: false},\n ...page.content.map(def => ({\n content: def.id.name,\n value: def.id.name,\n selected: false,\n })),\n ])\n )\n ),\n startWith([])\n );\n\n this.hasRunningRun$\n .pipe(\n switchMap(hasRunning => {\n if (!hasRunning) return [];\n return interval(3000).pipe(\n takeWhile(() => true),\n takeUntil(this._destroy$)\n );\n }),\n takeUntil(this._destroy$)\n )\n .subscribe(() => this._silentRefresh$.next());\n }\n\n public onPageChange(page: number): void {\n this.pagination = {...this.pagination, page};\n this._manualRefresh$.next();\n }\n\n public onPageSizeChange(size: number): void {\n this.pagination = {...this.pagination, size, page: 1};\n this._manualRefresh$.next();\n }\n\n public openModal(): void {\n this.showModal$.next(true);\n }\n\n public onModalClose(request: StartReindexRequestDto | null): void {\n this.showModal$.next(false);\n if (!request) return;\n\n this.startingReindex$.next(true);\n this._apiService\n .startReindex(request)\n .pipe(\n take(1),\n finalize(() => this.startingReindex$.next(false))\n )\n .subscribe({\n next: () => this._manualRefresh$.next(),\n error: err => {\n if (err.status === 409) {\n this._manualRefresh$.next();\n }\n },\n });\n }\n\n private _getStatusTagType(status: string): string {\n switch (status) {\n case 'RUNNING':\n return 'blue';\n case 'COMPLETED':\n return 'green';\n case 'FAILED':\n return 'red';\n case 'STOPPED':\n return 'gray';\n default:\n return 'gray';\n }\n }\n\n public navigateToLogs(run: ReindexStatusDto): void {\n const afterTimestamp = new Date(new Date(run.startedOn).getTime() - 5000).toISOString();\n const beforeTimestamp = run.finishedOn\n ? new Date(new Date(run.finishedOn).getTime() + 5000).toISOString()\n : new Date().toISOString();\n\n this._router.navigate(['/logging'], {\n queryParams: {\n level: 'ERROR',\n afterTimestamp,\n beforeTimestamp,\n },\n });\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"opensearch-reindex\"\n *ngIf=\"{\n items: tableItems$ | async,\n loading: loading$ | async,\n starting: startingReindex$ | async,\n documentDefinitions: documentDefinitions$ | async,\n showModal: showModal$ | async,\n hasRunning: hasRunningRun$ | async\n } as obs\"\n>\n <valtimo-carbon-list\n [header]=\"false\"\n [items]=\"obs.items || []\"\n [fields]=\"fields\"\n [loading]=\"obs.loading\"\n [pagination]=\"pagination\"\n [expandedRowTemplate]=\"expandedRowTemplate\"\n [expandedRowKey]=\"'runId'\"\n (paginationClicked)=\"onPageChange($event)\"\n (paginationSet)=\"onPageSizeChange($event)\"\n >\n <ng-container header>\n {{ 'adminSettings.opensearch.reindex.title' | translate }}\n </ng-container>\n\n <div carbonToolbarContent>\n <button\n cdsButton=\"primary\"\n [disabled]=\"obs.hasRunning || obs.starting\"\n (click)=\"openModal()\"\n >\n @if (obs.starting) {\n <cds-loading size=\"sm\"></cds-loading>\n }\n {{ 'adminSettings.opensearch.reindex.startButton' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </div>\n\n <valtimo-no-results\n title=\"{{ 'adminSettings.opensearch.reindex.noResults.title' | translate }}\"\n description=\"{{ 'adminSettings.opensearch.reindex.noResults.description' | translate }}\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n\n <valtimo-start-reindex-modal\n [open]=\"obs.showModal\"\n [documentDefinitions]=\"obs.documentDefinitions\"\n (closeEvent)=\"onModalClose($event)\"\n ></valtimo-start-reindex-modal>\n</div>\n\n<ng-template #expandedRowTemplate let-data=\"data\">\n <div class=\"opensearch-reindex__expanded\">\n <span class=\"opensearch-reindex__label\">{{ 'adminSettings.opensearch.reindex.started' | translate }}</span>\n <span class=\"opensearch-reindex__value\">{{ data.startedOn | date:'medium' }}</span>\n\n <span class=\"opensearch-reindex__label\">{{ 'adminSettings.opensearch.reindex.finished' | translate }}</span>\n <span class=\"opensearch-reindex__value\">{{ data.finishedOn ? (data.finishedOn | date:'medium') : '-' }}</span>\n\n <span class=\"opensearch-reindex__label\">{{ 'adminSettings.opensearch.reindex.documentDefinitionName' | translate }}</span>\n <span class=\"opensearch-reindex__value\">{{ data.scope?.documentDefinitionName || '-' }}</span>\n\n <span class=\"opensearch-reindex__label\">{{ 'adminSettings.opensearch.reindex.pruneOrphans' | translate }}</span>\n <span class=\"opensearch-reindex__value opensearch-reindex__value-with-tooltip\">\n {{ data.scope?.pruneOrphans ? ('interface.yes' | translate) : ('interface.no' | translate) }}\n <v-tooltip-icon [tooltip]=\"'adminSettings.opensearch.reindex.tooltips.pruneOrphans' | translate\"></v-tooltip-icon>\n </span>\n\n <span class=\"opensearch-reindex__label\">{{ 'adminSettings.opensearch.reindex.modifiedAfter' | translate }}</span>\n <span class=\"opensearch-reindex__value\">{{ data.scope?.modifiedAfter ? (data.scope.modifiedAfter | date:'medium') : '-' }}</span>\n\n <div class=\"opensearch-reindex__results-column\">\n <div class=\"opensearch-reindex__progress\">\n <span class=\"opensearch-reindex__progress-label\">\n {{ 'adminSettings.opensearch.reindex.reindexing' | translate }}\n </span>\n <cds-progress-bar\n [value]=\"data.totalCount > 0 ? (data.processedCount / data.totalCount) * 100 : 0\"\n [status]=\"data.status === 'RUNNING' && !data.pruningPhase ? 'active' : (data.status === 'COMPLETED' ? 'finished' : (data.status === 'RUNNING' ? 'finished' : 'error'))\"\n ></cds-progress-bar>\n <div class=\"opensearch-reindex__progress-footer\">\n <span>{{ 'adminSettings.opensearch.reindex.processed' | translate:{current: data.processedCount, total: data.totalCount} }}</span>\n <span>{{ 'adminSettings.opensearch.reindex.skipped' | translate }}: {{ data.skippedCount || 0 }}</span>\n </div>\n </div>\n\n @if (data.pruningPhase || data.pruneTotalCount) {\n <div class=\"opensearch-reindex__progress\">\n <span class=\"opensearch-reindex__progress-label\">\n {{ 'adminSettings.opensearch.reindex.pruning' | translate }}\n <v-tooltip-icon [tooltip]=\"'adminSettings.opensearch.reindex.tooltips.pruned' | translate\"></v-tooltip-icon>\n </span>\n <cds-progress-bar\n [value]=\"data.pruneTotalCount > 0 ? (data.pruneCheckedCount / data.pruneTotalCount) * 100 : 0\"\n [status]=\"data.pruningPhase ? 'active' : (data.status === 'COMPLETED' ? 'finished' : 'error')\"\n ></cds-progress-bar>\n <div class=\"opensearch-reindex__progress-footer\">\n <span>{{ 'adminSettings.opensearch.reindex.processed' | translate:{current: data.pruneCheckedCount, total: data.pruneTotalCount || 0} }}</span>\n <span>{{ 'adminSettings.opensearch.reindex.pruningProgress' | translate:{removed: data.prunedCount || 0} }}</span>\n </div>\n </div>\n }\n\n @if (data.status === 'FAILED') {\n <a class=\"opensearch-reindex__error-link\" (click)=\"navigateToLogs(data)\">\n {{ 'adminSettings.opensearch.reindex.viewErrorLogs' | translate }}\n <svg cdsIcon=\"launch\" size=\"16\"></svg>\n </a>\n }\n </div>\n </div>\n</ng-template>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {CommonModule} from '@angular/common';\nimport {AuthGuardService} from '@valtimo/security';\nimport {ROLE_ADMIN} from '@valtimo/shared';\nimport {AdminSettingsComponent} from './components/admin-settings/admin-settings.component';\nimport {AdminSettingsOpensearchComponent} from './components/admin-settings-opensearch/admin-settings-opensearch.component';\nimport {ADMIN_SETTINGS_TABS} from './constants';\n\nconst routes: Routes = [\n {\n path: 'admin-settings',\n redirectTo: `admin-settings/${ADMIN_SETTINGS_TABS.APPEARANCE}`,\n pathMatch: 'full',\n },\n {\n path: 'admin-settings/:tabKey',\n component: AdminSettingsComponent,\n canActivate: [AuthGuardService],\n data: {title: 'adminSettings.title', roles: [ROLE_ADMIN]},\n },\n {\n path: 'opensearch',\n component: AdminSettingsOpensearchComponent,\n canActivate: [AuthGuardService],\n data: {title: 'adminSettings.opensearch.title', roles: [ROLE_ADMIN]},\n },\n];\n\n@NgModule({\n declarations: [],\n imports: [CommonModule, RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class AdminSettingsRouting {}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {NgModule} from '@angular/core';\nimport {AdminSettingsRouting} from './admin-settings-routing';\nimport {AdminSettingsComponent} from './components/admin-settings/admin-settings.component';\n\n@NgModule({\n declarations: [],\n imports: [AdminSettingsRouting, AdminSettingsComponent],\n providers: [],\n})\nexport class AdminSettingsModule {}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ninterface AccentColorDefinition {\n cssVar: string;\n labelTranslationKey: string;\n}\n\nexport {AccentColorsDto} from '@valtimo/shared';\nexport {AccentColorDefinition};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ValtimoConfigFeatureToggles} from '@valtimo/shared';\n\ninterface FeatureToggleDefinition {\n key: keyof ValtimoConfigFeatureToggles;\n}\n\nexport {FeatureToggleOverridesDto, UpdateFeatureToggleDto} from '@valtimo/shared';\nexport {FeatureToggleDefinition};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {MenuConfigurationItem} from '@valtimo/components';\nimport {ExternalPluginMenuPage} from '@valtimo/plugin';\n\n/** A draggable entry in the right-hand \"Available items\" palette. */\ninterface PaletteItem {\n paletteType: 'catalog' | 'group' | 'section-header' | 'custom-link' | 'plugin-page';\n label: string;\n /** Secondary line under the label, for entries whose label alone does not identify them. */\n sublabel?: string;\n icon?: string;\n itemId?: string;\n page?: ExternalPluginMenuPage;\n}\n\ninterface PaletteGroup {\n categoryKey: string;\n items: PaletteItem[];\n}\n\n/** Builder node = a stored config node plus a transient `_uid` for stable identity across redraws. */\ntype BuilderNode = MenuConfigurationItem & {_uid: string; children?: BuilderNode[]};\n\nexport {PaletteItem, PaletteGroup, BuilderNode};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ntype ReindexStatus = 'RUNNING' | 'COMPLETED' | 'FAILED' | 'STOPPED';\n\ninterface ReindexScope {\n pruneOrphans?: boolean;\n documentDefinitionName?: string;\n modifiedBefore?: string;\n modifiedAfter?: string;\n pageSize?: number;\n resumeRunId?: string;\n documentIds?: string[];\n}\n\ninterface ReindexStatusDto {\n runId: string;\n status: ReindexStatus;\n running: boolean;\n scope: ReindexScope | null;\n totalCount: number;\n processedCount: number;\n skippedCount: number;\n prunedCount: number;\n pruneCheckedCount: number;\n pruneTotalCount: number | null;\n pruningPhase: boolean;\n startedOn: string;\n finishedOn: string | null;\n elapsedSeconds: number;\n error: string | null;\n}\n\ninterface StartReindexRequestDto {\n pruneOrphans?: boolean;\n documentDefinitionName?: string;\n modifiedAfter?: string;\n}\n\ninterface StartReindexResponseDto {\n status: string;\n runId: string;\n}\n\nexport {\n ReindexStatus,\n ReindexScope,\n ReindexStatusDto,\n StartReindexRequestDto,\n StartReindexResponseDto,\n};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface SearchEngineDto {\n available: boolean;\n active: 'OPENSEARCH' | 'POSTGRES';\n}\n\nexport interface UpdateSearchEngineDto {\n active: 'OPENSEARCH' | 'POSTGRES';\n}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './accent-colors.model';\nexport * from './feature-toggle.model';\nexport * from './menu-configuration.model';\nexport * from './reindex.model';\nexport * from './search-engine.model';\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './lib/admin-settings.module';\nexport * from './lib/services';\nexport * from './lib/constants';\nexport * from './lib/models';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AdminSettingsManagementApiService","i2","i3","i1","i4","i5","i6","i7"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;AAcG;AAIH,MAAM,wBAAwB,GAA4B;AACxD,IAAA;AACE,QAAA,MAAM,EAAE,kBAAkB;AAC1B,QAAA,mBAAmB,EAAE,0CAA0C;AAChE,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,iBAAiB;AACzB,QAAA,mBAAmB,EAAE,yCAAyC;AAC/D,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,iBAAiB;AACzB,QAAA,mBAAmB,EAAE,yCAAyC;AAC/D,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,iBAAiB;AACzB,QAAA,mBAAmB,EAAE,yCAAyC;AAC/D,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,iBAAiB;AACzB,QAAA,mBAAmB,EAAE,yCAAyC;AAC/D,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,iBAAiB;AACzB,QAAA,mBAAmB,EAAE,yCAAyC;AAC/D,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,iBAAiB;AACzB,QAAA,mBAAmB,EAAE,yCAAyC;AAC/D,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,iBAAiB;AACzB,QAAA,mBAAmB,EAAE,yCAAyC;AAC/D,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,iBAAiB;AACzB,QAAA,mBAAmB,EAAE,yCAAyC;AAC/D,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,iBAAiB;AACzB,QAAA,mBAAmB,EAAE,yCAAyC;AAC/D,KAAA;;;AC1DH;;;;;;;;;;;;;;AAcG;AAEH,MAAM,mBAAmB,GAAG;AAC1B,IAAA,UAAU,EAAE,YAAY;AACxB,IAAA,kBAAkB,EAAE,oBAAoB;AACxC,IAAA,eAAe,EAAE,iBAAiB;;;ACnBpC;;;;;;;;;;;;;;AAcG;AAIH,MAAM,0BAA0B,GAA8B;IAC5D,EAAC,GAAG,EAAE,yBAAyB,EAAC;IAChC,EAAC,GAAG,EAAE,yBAAyB,EAAC;IAChC,EAAC,GAAG,EAAE,wBAAwB,EAAC;IAC/B,EAAC,GAAG,EAAE,8BAA8B,EAAC;IACrC,EAAC,GAAG,EAAE,sBAAsB,EAAC;IAC7B,EAAC,GAAG,EAAE,sBAAsB,EAAC;IAC7B,EAAC,GAAG,EAAE,iBAAiB,EAAC;IACxB,EAAC,GAAG,EAAE,0BAA0B,EAAC;IACjC,EAAC,GAAG,EAAE,kBAAkB,EAAC;IACzB,EAAC,GAAG,EAAE,wBAAwB,EAAC;IAC/B,EAAC,GAAG,EAAE,iBAAiB,EAAC;IACxB,EAAC,GAAG,EAAE,qCAAqC,EAAC;IAC5C,EAAC,GAAG,EAAE,qBAAqB,EAAC;IAC5B,EAAC,GAAG,EAAE,iCAAiC,EAAC;IACxC,EAAC,GAAG,EAAE,mCAAmC,EAAC;IAC1C,EAAC,GAAG,EAAE,qBAAqB,EAAC;IAC5B,EAAC,GAAG,EAAE,wBAAwB,EAAC;IAC/B,EAAC,GAAG,EAAE,2BAA2B,EAAC;IAClC,EAAC,GAAG,EAAE,kCAAkC,EAAC;IACzC,EAAC,GAAG,EAAE,6BAA6B,EAAC;IACpC,EAAC,GAAG,EAAE,eAAe,EAAC;IACtB,EAAC,GAAG,EAAE,wBAAwB,EAAC;IAC/B,EAAC,GAAG,EAAE,uBAAuB,EAAC;IAC9B,EAAC,GAAG,EAAE,6BAA6B,EAAC;IACpC,EAAC,GAAG,EAAE,kCAAkC,EAAC;;;AC3C3C;;;;;;;;;;;;;;AAcG;AAEH,MAAM,2BAA2B,GAAG;AAClC,IAAA,UAAU,EAAE,6BAA6B;AACzC,IAAA,WAAW,EAAE,8BAA8B;AAC3C,IAAA,aAAa,EAAE,gCAAgC;AAC/C,IAAA,gBAAgB,EAAE,mCAAmC;AACrD,IAAA,eAAe,EAAE,kCAAkC;AACnD,IAAA,gBAAgB,EAAE,mCAAmC;AACrD,IAAA,kBAAkB,EAAE,qCAAqC;;;ACvB3D;;;;;;;;;;;;;;AAcG;AA0BG,MAAO,iCAAkC,SAAQ,cAAc,CAAA;IACnE,WAAA,CACqB,UAAsB,EACtB,aAA4B,EAAA;AAE/C,QAAA,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC;QAHb,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,aAAa,GAAb,aAAa;IAGlC;IAEO,QAAQ,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CACxB,IAAI,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAC3C;IACH;IAEO,UAAU,CACf,QAAgB,EAChB,GAA+B,EAAA;AAE/B,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CACzB,IAAI,CAAC,SAAS,CAAC,sCAAsC,QAAQ,CAAA,CAAE,CAAC,EAChE,GAAG,CACJ;IACH;AAEO,IAAA,UAAU,CAAC,QAAgB,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAC3B,IAAI,CAAC,SAAS,CAAC,CAAA,mCAAA,EAAsC,QAAQ,CAAA,CAAE,CAAC,CACjE;IACH;IAEO,yBAAyB,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CACxB,IAAI,CAAC,SAAS,CAAC,oCAAoC,CAAC,CACrD;IACH;AAEO,IAAA,mBAAmB,CAAC,GAA2B,EAAA;AACpD,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CACxB,IAAI,CAAC,SAAS,CAAC,+CAA+C,CAAC,EAC/D,GAAG,CACJ;IACH;AAEO,IAAA,mBAAmB,CAAC,GAAW,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAC3B,IAAI,CAAC,SAAS,CAAC,CAAA,8CAAA,EAAiD,GAAG,CAAA,CAAE,CAAC,CACvE;IACH;IAEO,eAAe,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CACxB,IAAI,CAAC,SAAS,CAAC,kCAAkC,CAAC,CACnD;IACH;AAEO,IAAA,kBAAkB,CAAC,GAAoB,EAAA;AAC5C,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CACxB,IAAI,CAAC,SAAS,CAAC,6CAA6C,CAAC,EAC7D,GAAG,CACJ;IACH;IAEO,eAAe,GAAA;QACpB,OAAO,IAAI,CAAC;AACT,aAAA,GAAG,CAAkB,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC;AACnE,aAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACrC;AAEO,IAAA,kBAAkB,CAAC,aAAsB,EAAA;QAC9C,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CACxB,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC,EAC9C,EAAC,MAAM,EAAE,aAAa,GAAG,YAAY,GAAG,UAAU,EAAC,CACpD;IACH;IAEO,YAAY,CAAC,UAAkC,EAAE,EAAA;AACtD,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CACzB,IAAI,CAAC,SAAS,CAAC,4CAA4C,CAAC,EAC5D,OAAO,CACR;IACH;IAEO,gBAAgB,GAAA;QACrB,OAAO,IAAI,CAAC;AACT,aAAA,GAAG,CAAmB,IAAI,CAAC,SAAS,CAAC,mDAAmD,CAAC;AACzF,aAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACrC;IAEO,cAAc,CAAC,IAAY,EAAE,IAAY,EAAA;QAC9C,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzF,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CACxB,IAAI,CAAC,SAAS,CAAC,iDAAiD,CAAC,EACjE,EAAC,MAAM,EAAC,CACT;IACH;AAEO,IAAA,aAAa,CAAC,KAAa,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CACxB,IAAI,CAAC,SAAS,CAAC,CAAA,2CAAA,EAA8C,KAAK,CAAA,CAAE,CAAC,CACtE;IACH;+GApGW,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,cAFhC,MAAM,EAAA,CAAA,CAAA;;4FAEP,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAH7C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACvCD;;;;;;;;;;;;;;AAcG;MA0CU,0BAA0B,CAAA;AAIrC,IAAA,IAAW,YAAY,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,QAAQ,KAAK,gBAAgB,GAAG,KAAK,GAAG,KAAK;IAC3D;AAQA,IAAA,IAAW,IAAI,GAAA;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAA2B;IAC7D;AAgBA,IAAA,WAAA,CACmB,kCAAqE,EACrE,qBAA2C,EAC3C,YAAyB,EACzB,YAAyB,EAAA;QAHzB,IAAA,CAAA,kCAAkC,GAAlC,kCAAkC;QAClC,IAAA,CAAA,qBAAqB,GAArB,qBAAqB;QACrB,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,YAAY,GAAZ,YAAY;AA5Bf,QAAA,IAAA,CAAA,cAAc,GAAa,CAAC,KAAK,EAAE,KAAK,CAAC;AAEzC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAClD,YAAA,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,GAAG,EAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvE,SAAA,CAAC;AAMc,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC;AAE5C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAO,IAAI,CAAC;AAE5C,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACzC,SAAS,CAAC,MAAM,IAAI,CAAC,kCAAkC,CAAC,QAAQ,EAAE,CAAC,EACnE,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,MAAM,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,EAClF,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CACrC;AAEe,QAAA,IAAA,CAAA,4BAA4B,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAEjE,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAE;QAQlD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACvD;IAEO,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;IACjD;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;IACnC;AAEO,IAAA,MAAM,MAAM,GAAA;AACjB,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI;QACjD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AAElD,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAExB,QAAA,IAAI,CAAC,kCAAkC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAC,WAAW,EAAC,CAAC,CAAC,SAAS,CAAC;YACzF,IAAI,EAAE,MAAK;AACT,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,gBAAA,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE;AACzC,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACzB,CAAC;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACzB,CAAC;AACF,SAAA,CAAC;IACJ;AAEO,IAAA,WAAW,CAAC,WAAmB,EAAA;AACpC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,eAAe,GAAG,WAAW;AACzE,QAAA,OAAO,CAAA,KAAA,EAAQ,QAAQ,CAAA,QAAA,EAAW,WAAW,EAAE;IACjD;IAEO,mBAAmB,GAAA;AACxB,QAAA,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9C;IAEO,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,kCAAkC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAK;AAC/E,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE;AAC3C,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,MAAM,CAAC,MAAc,EAAA;AAC3B,QAAA,IAAI;AACF,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC7C,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE;AACnC,YAAA,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;QAClE;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,KAAK;QACd;IACF;IAEQ,MAAM,aAAa,CAAC,IAAU,EAAA;QACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;AAC1B,YAAA,MAAM,CAAC,MAAM,GAAG,MAAK;AACnB,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAgB;gBACtC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACvC,OAAO,CAAC,UAAU,CAAC;AACrB,YAAA,CAAC;YACD,MAAM,CAAC,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;AACzC,QAAA,CAAC,CAAC;IACJ;+GA1GW,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,iCAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxDvC,k0FAkFA,EAAA,MAAA,EAAA,CAAA,i0CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDvCI,YAAY,mLACZ,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,WAAW,yKACX,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,cAAA,EAAA,MAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,aAAa,+JACb,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACV,uBAAuB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,iCAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,kCAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,gCAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,qBAAqB,EAAA,QAAA,EAAA,wBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAIZ,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAnBtC,SAAS;iCACI,IAAI,EAAA,QAAA,EACN,6BAA6B,EAAA,OAAA,EAG9B;wBACP,YAAY;wBACZ,aAAa;wBACb,mBAAmB;wBACnB,WAAW;wBACX,YAAY;wBACZ,kBAAkB;wBAClB,aAAa;wBACb,UAAU;wBACV,uBAAuB;wBACvB,qBAAqB;qBACtB,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,k0FAAA,EAAA,MAAA,EAAA,CAAA,i0CAAA,CAAA,EAAA;8LAG/B,QAAQ,EAAA,CAAA;sBAAvB;gBACe,mBAAmB,EAAA,CAAA;sBAAlC;;;AE1DH;;;;;;;;;;;;;;AAcG;MAyCU,2BAA2B,CAAA;IA+BtC,WAAA,CACmB,kCAAqE,EACrE,qBAA2C,EAC3C,YAAyB,EACzB,YAAyB,EACzB,iBAAmC,EAAA;QAJnC,IAAA,CAAA,kCAAkC,GAAlC,kCAAkC;QAClC,IAAA,CAAA,qBAAqB,GAArB,qBAAqB;QACrB,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAnCpB,IAAA,CAAA,wBAAwB,GAA4B,wBAAwB;QAC5E,IAAA,CAAA,QAAQ,GACtB,8FAA8F;AAGhF,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC;AAC7C,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAE5C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAO,IAAI,CAAC;QAC3C,IAAA,CAAA,YAAY,GAA+B,EAAE;QAE9C,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAC3C,SAAS,CAAC,MAAM,IAAI,CAAC,kCAAkC,CAAC,eAAe,EAAE,CAAC,EAC1E,GAAG,CAAC,GAAG,IAAG;AACR,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3B,CAAC,CAAC,CACH;AAEe,QAAA,IAAA,CAAA,UAAU,GACxB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,IAAI,CACzE,GAAG,CAAC,KAAK,KAAK;AACZ,YAAA,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,IAAI;AACzB,YAAA,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,QAAQ;AACjC,YAAA,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,OAAO;SAC/B,CAAC,CAAC,CACJ;AAEc,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAE;AASlD,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE;IACpC;IAEO,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;IACnD;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;IACnC;IAEO,MAAM,GAAA;QACX,MAAM,MAAM,GAA4B,EAAE;AAE1C,QAAA,KAAK,MAAM,GAAG,IAAI,wBAAwB,EAAE;YAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;AACpF,YAAA,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;QAC9C;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;QAExB,IAAI,CAAC,kCAAkC,CAAC,kBAAkB,CAAC,EAAC,MAAM,EAAC,CAAC,CAAC,SAAS,CAAC;YAC7E,IAAI,EAAE,MAAK;AACT,gBAAA,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,MAAM,CAAC;AACpD,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACvB,gBAAA,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;AAC/B,gBAAA,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,EAAE;YAClD,CAAC;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACzB,CAAC;AACF,SAAA,CAAC;IACJ;AAEO,IAAA,cAAc,CAAC,GAA0B,EAAA;AAC9C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE;AACzD,QAAA,OAAO,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;IAC9E;AAEO,IAAA,OAAO,CAAC,GAA0B,EAAA;QACvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACzE,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;IAC9B;IAEQ,UAAU,GAAA;QAChB,MAAM,QAAQ,GAAyB,EAAE;AACzC,QAAA,KAAK,MAAM,GAAG,IAAI,wBAAwB,EAAE;YAC1C,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnF;QACA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC1C;AAEQ,IAAA,UAAU,CAAC,MAA+B,EAAA;QAChD,MAAM,KAAK,GAA4B,EAAE;AACzC,QAAA,KAAK,MAAM,GAAG,IAAI,wBAAwB,EAAE;YAC1C,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;QAC3E;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;AACpD,QAAA,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;IACjC;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,KAAK,MAAM,GAAG,IAAI,wBAAwB,EAAE;AAC1C,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC3B,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC;QAChE;IACF;AAEQ,IAAA,cAAc,CAAC,MAAc,EAAA;QACnC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE;IACxC;AAEQ,IAAA,aAAa,CAAC,KAAa,EAAA;AACjC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK;AAExB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE;AACjC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAC9C,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9B;AACA,QAAA,OAAO,KAAK;IACd;+GA3HW,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,iCAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvDxC,yxFA0FA,EAAA,MAAA,EAAA,CAAA,i5CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDhDI,YAAY,uLACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,WAAW,yKACX,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACV,aAAa,+JACb,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACV,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,oBAAoB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAIX,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAnBvC,SAAS;iCACI,IAAI,EAAA,QAAA,EACN,8BAA8B,EAAA,OAAA,EAG/B;wBACP,YAAY;wBACZ,eAAe;wBACf,mBAAmB;wBACnB,WAAW;wBACX,YAAY;wBACZ,UAAU;wBACV,aAAa;wBACb,UAAU;wBACV,kBAAkB;wBAClB,oBAAoB;qBACrB,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,yxFAAA,EAAA,MAAA,EAAA,CAAA,i5CAAA,CAAA,EAAA;;;AErDjD;;;;;;;;;;;;;;AAcG;MAeU,gCAAgC,CAAA;+GAAhC,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7B7C,u0CAqCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDXY,YAAY,8BAAE,oBAAoB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,0BAA0B,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,2BAA2B,EAAA,QAAA,EAAA,8BAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAG1F,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAP5C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,EAAA,QAAA,EACN,mCAAmC,EAAA,OAAA,EAEpC,CAAC,YAAY,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,2BAA2B,CAAC,EAAA,eAAA,EACrF,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,u0CAAA,EAAA;;;AE3BjD;;;;;;;;;;;;;;AAcG;MAwBU,oCAAoC,CAAA;AAO/C,IAAA,WAAA,CACmB,kCAAqE,EACrE,qBAA2C,EAC3C,cAA6B,EAAA;QAF7B,IAAA,CAAA,kCAAkC,GAAlC,kCAAkC;QAClC,IAAA,CAAA,qBAAqB,GAArB,qBAAqB;QACrB,IAAA,CAAA,cAAc,GAAd,cAAc;QATjB,IAAA,CAAA,kBAAkB,GAAG,0BAA0B;AAE/C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe;AAErD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,kCAAkC,CAAC,eAAe,EAAE;IAMtF;IAEI,iBAAiB,CACtB,UAAmC,EACnC,OAAoC,EAAA;QAEpC,OAAO,CAAC,CAAE,OAA+C,CAAC,UAAU,CAAC,GAAG,CAAC;IAC3E;IAEO,cAAc,CAAC,UAAmC,EAAE,QAAiB,EAAA;AAC1E,QAAA,IAAI,CAAC;AACF,aAAA,mBAAmB,CAAC,EAAC,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAC;aAC5D,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,EAAE;AACpD,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,oBAAoB,CAAC,aAAsB,EAAA;QAChD,IAAI,CAAC,kCAAkC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,SAAS,EAAE;IACvF;+GA9BW,oCAAoC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,iCAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oCAAoC,kGCtCjD,s+FAuEA,EAAA,MAAA,EAAA,CAAA,q2CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDvCI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACZ,aAAa,iDACb,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAIH,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBAZhD,SAAS;iCACI,IAAI,EAAA,QAAA,EACN,wCAAwC,EAAA,OAAA,EAGzC;wBACP,YAAY;wBACZ,aAAa;wBACb,YAAY;qBACb,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,s+FAAA,EAAA,MAAA,EAAA,CAAA,q2CAAA,CAAA,EAAA;;;AEpCjD;;;;;;;;;;;;;;AAcG;MAqFU,uCAAuC,CAAA;AAoIlD;;;;AAIG;AACK,IAAA,sBAAsB,CAAC,IAAiB,EAAA;AAC9C,QAAA,MAAM,MAAM,GAAI,IAAI,CAAC,OAAO,CAAC,aAA6B,CAAC,gBAAgB,CACzE,yBAAyB,CAC1B;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,IAAG;AACpC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,qBAAqB,EAAE;YACtC,QACE,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI;AACzB,gBAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK;AAC1B,gBAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG;gBACxB,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM;AAE/B,QAAA,CAAC,CAAC;IACJ;IAEA,WAAA,CACmB,EAAe,EACf,oBAA0C,EAC1C,iBAA4C,EAC5C,aAA4B,EAC5B,gBAAkC,EAClC,WAAwB,EAAA;QALxB,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,oBAAoB,GAApB,oBAAoB;QACpB,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,WAAW,GAAX,WAAW;QA7JX,IAAA,CAAA,OAAO,GAAG,2BAA2B;AAExC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAU,IAAI,CAAC;AAChC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAU,KAAK,CAAC;AAChC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAU,KAAK,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAgB,EAAE,CAAC;;AAGrC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAU,KAAK,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACvD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAgC,EAAE,CAAC;;AAGxD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAU,KAAK,CAAC;AAElC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAU,KAAK,CAAC;AACpC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAgC,SAAS,CAAC;;AAE9D,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAU,KAAK,CAAC;AAExD;;;;AAIG;AACc,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAS,CAAC,CAAC;AAEtC,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAiB,MAAK;YAC7D,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE;AACnC,QAAA,CAAC,CAAC;AAEF;;;;;AAKG;AACa,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAW,MAAK;;;;;YAK1D,MAAM,YAAY,GAAa,EAAE;YACjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,IAAG;AACnC,gBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;oBAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC3E,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,CAAC,GAAG,YAAY,EAAE,gBAAgB,CAAC;AAC5C,QAAA,CAAC,CAAC;QAEc,IAAA,CAAA,mBAAmB,GAAa,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,GAAG,IACrF,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CACnB;AAEe,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACzC,YAAA,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;YAC/C,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAgB,IAAI,CAAC;YAC1C,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAgB,IAAI,CAAC;YACrD,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAS,MAAM,CAAC;AACzC,SAAA,CAAC;;AAGc,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAwC,MAAK;YACrF,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,MAAM,OAAO,GAAG;AACd,gBAAA;AACE,oBAAA,KAAK,EAAE,MAAM;oBACb,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,oDAAoD,CAAC;AAC3F,iBAAA;aACF;YACD,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,IAAG;AAC/B,gBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;oBACxB,OAAO,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAC,CAAC;AACnF,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC,CAAC;;AAGe,QAAA,IAAA,CAAA,qBAAqB,GAAiD;YACrF,aAAa;YACb,gBAAgB;YAChB,aAAa;SACd;AAEe,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAU,MACrD,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CACxD;;AAGgB,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE;YACzF,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK;AACrD,SAAA,CAAC;AAEF;;;AAGG;QACa,IAAA,CAAA,eAAe,GAAG,QAAQ,CACxC,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,gBAAgB,IAAI,IAAI,CAAC,eAAe,EAAE,KAAK,MAAM,CACnF;QAEO,IAAA,CAAA,WAAW,GAAkB,IAAI;QACjC,IAAA,CAAA,mBAAmB,GAAuB,IAAI;QAC9C,IAAA,CAAA,WAAW,GAAG,CAAC;;;;;;;AAQP,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,IAAa,EAAE,IAAiB,KACnE,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,IAAA,CAAA,mBAAmB,GAAG,CAAC,IAAa,EAAE,IAAiB,KACrE,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;QAClE,IAAA,CAAA,yBAAyB,GAAG,CAAC,IAAa,EAAE,IAAiB,KAC3E,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC;;;QAGxE,IAAA,CAAA,mBAAmB,GAAG,CAAC,IAAa,EAAE,IAAiB,KACrE,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK;AAC9D,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAe,KAAK;;QAGpD,IAAA,CAAA,QAAQ,GAAG,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC;AACd,QAAA,IAAA,CAAA,aAAa,GAAG,CAAC,KAAgC,KAAU;AAC1E,YAAA,MAAM,KAAK,GAAG,SAAS,IAAI,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK;AAC3D,YAAA,IAAI,KAAK;AAAE,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAC,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAC;AACjE,QAAA,CAAC;QAqWM,IAAA,CAAA,UAAU,GAAG,CAAC,CAAS,EAAE,IAAiB,KAAa,IAAI,CAAC,IAAI;AAvUrE,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAEnE,QAAA,KAAK,CACH,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAClC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EACzC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB;aAExC,IAAI,CAAC,kBAAkB,EAAE;AACzB,aAAA,SAAS,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;IACrE;IAEO,QAAQ,GAAA;QACb,IAAI,CAAC,IAAI,EAAE;IACb;IAEO,WAAW,GAAA;;;QAGhB,IAAI,CAAC,uBAAuB,EAAE;IAChC;;IAIO,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,QAAA,QAAQ,CAAC;YACP,GAAG,EAAE,IAAI,CAAC;AACP,iBAAA,oBAAoB;AACpB,iBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAC,aAAa,EAAE,EAAE,EAAC,CAAC,CAAC,CAAC;YAClD,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAC5E,CAAC,CAAC,SAAS,CAAC,CAAC,EAAC,GAAG,EAAE,KAAK,EAAC,KAAI;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,YAAA,MAAM,KAAK,GAAG,yBAAyB,CAAC,GAAG;AACzC,kBAAG,GAAG,CAAC,aAAa,CAAC;AACrB,kBAAE,qCAAqC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,IAAI,EAAE;AACnF,qBAAA,KAAK;AACZ,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,CAAC,CAAC;IACJ;IAEO,OAAO,GAAA;QACZ,IAAI,CAAC,IAAI,EAAE;IACb;;IAIO,aAAa,GAAA;AAClB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QACxB,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC;QAClE,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC;IAClE;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,uBAAuB,EAAE;IAChC;IAEQ,uBAAuB,GAAA;QAC7B,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC;QACrE,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC;IACrE;AAEO,IAAA,MAAM,CAAC,KAAiC,EAAA;AAC7C,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAEvE,IAAI,KAAK,CAAC,iBAAiB,KAAK,KAAK,CAAC,SAAS,EAAE;AAC/C,YAAA,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;QAChF;aAAO,IAAI,aAAa,EAAE;AACxB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAmB,CAAC;AACpE,YAAA,IAAI,CAAC,IAAI;gBAAE;AACX,YAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC;QAC1D;aAAO;YACL,iBAAiB,CACf,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAC5B,KAAK,CAAC,SAAS,CAAC,IAAI,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,YAAY,CACnB;QACH;QAEA,IAAI,CAAC,KAAK,EAAE;IACd;;AAIO,IAAA,gBAAgB,CAAC,IAAiB,EAAA;;AAEvC,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE;YAClC,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAC1C,YAAA,IAAI,CAAC,IAAI;gBAAE;YACX,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACvC,IAAI,CAAC,KAAK,EAAE;YACZ;QACF;;;;AAKA,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;IAC9B;;AAIO,IAAA,UAAU,CAAC,IAAiB,EAAA;AACjC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI;AAC5B,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;QAC/B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAE/C,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACpB,YAAA,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;;;AAGhC,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE;YAClD,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;;;;AAI7D,YAAA,eAAe,EACb,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI;mBAC3C,wBAAwB,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;AACvD,kBAAE,EAAE;YACR,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AACxC,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5B;AAEO,IAAA,iBAAiB,CAAC,IAAiB,EAAA;AACxC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;QAC/B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;AACtC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;AAE/B,QAAA,MAAM,YAAY,GAChB,IAAI,CAAC,WAAW,KAAK;cACjB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,wDAAwD;AACxF,cAAE,IAAI,CAAC,WAAW,KAAK;kBACnB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,qDAAqD;AACrF,kBAAE,IAAI,CAAC,WAAW,KAAK;sBACnB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,gDAAgD;AAChF,sBAAE,IAAI,CAAC,KAAK;AAEpB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACpB,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,IAAI,EAAE,IAAI,CAAC,WAAW,KAAK,aAAa,GAAG,GAAG,GAAG,EAAE;AACnD,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;AAC7D,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,OAAO,EAAE,MAAM;AAChB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;AACvC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5B;IAEO,YAAY,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO;YAAE;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;AAE3C,QAAA,MAAM,IAAI,GACR,IAAI,CAAC,WAAW,KAAK;AACnB,cAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,WAAW;cACnD,IAAI,CAAC;kBACH,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,mBAAmB;kBAChD,IAAI;QACZ,IAAI,CAAC,IAAI,EAAE;YACT,IAAI,CAAC,WAAW,EAAE;YAClB;QACF;AAEA,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;AACvC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;AAC/B,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE;QACvC;AACA,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;YACzF,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC;YACvD,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,GAAG,SAAS;YACvB;AAAO,iBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;gBACpC,OAAO,IAAI,CAAC,IAAI;YAClB;QACF;AACA,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;;;AAG3B,YAAA,IAAI,CAAC,eAAe;gBAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9B,sBAAE;AACF,sBAAE,wBAAwB,CAAC,KAAK,CAAC,eAAe,CAAC;AACrD,YAAA,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC,eAAe;QACrE;QAEA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,CAAC,WAAW,EAAE;IACpB;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;IACjC;;IAGQ,UAAU,CAAC,IAAiB,EAAE,OAAe,EAAA;AACnD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAErE,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;;AAE7B,YAAA,IAAI,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE;AAChE,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC;gBAC/C,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5C;YACA;QACF;;AAGA,QAAA,MAAM,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE;AACnF,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACnB;AAEQ,IAAA,gBAAgB,CAAC,IAAmC,EAAA;AAC1D,QAAA,IAAI,IAAI,KAAK,aAAa,EAAE;YAC1B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE;QACxC;aAAO;YACL,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE;QACzC;IACF;AAEO,IAAA,QAAQ,CAAC,IAAiB,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC;QAC/C,IAAI,CAAC,KAAK,EAAE;IACd;IAEO,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,QAAA,MAAM,aAAa,GAAsB;AACvC,YAAA,OAAO,EAAE,0BAA0B;YACnC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;SAC1C;QACD,IAAI,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,EAAC,aAAa,EAAC,CAAC,CAAC,SAAS,CAAC;YAC3E,IAAI,EAAE,MAAK;AACT,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;YAClC,CAAC;YACD,KAAK,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACrC,SAAA,CAAC;IACJ;;IAGO,eAAe,GAAA;AACpB,QAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;IAC1B;;IAGO,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB;;IAGO,0BAA0B,GAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IACxB;;AAIO,IAAA,WAAW,CAAC,IAAiB,EAAA;AAClC,QAAA,QACE,IAAI,CAAC,IAAI,KAAK,OAAO;aACpB,IAAI,CAAC,IAAI,KAAK,SAAS,KAAK,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;IAE3F;AAEO,IAAA,UAAU,CAAC,IAAiB,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ;IAChF;AAEO,IAAA,iBAAiB,CAAC,IAAiB,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,KAAK,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC;IAC1F;AAEO,IAAA,YAAY,CAAC,IAAiB,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;YAC3B,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,IAAI,CAAC,KAAK,IAAI,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,eAAe,IAAI,IAAI,CAAC,MAAM,CAC/E;QACH;QACA,OAAO,IAAI,CAAC,KAAK;IACnB;AAEO,IAAA,UAAU,CAAC,IAAiB,EAAA;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE;IACrC;AAEO,IAAA,eAAe,CAAC,IAAiB,EAAA;AACtC,QAAA,OAAO,sBAAsB,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;IAClF;AAEO,IAAA,uBAAuB,CAAC,IAAiB,EAAA;AAC9C,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC,mBAAmB;QAC1D,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa;YAC1D,OAAO,IAAI,CAAC,yBAAyB;QACvC,OAAO,IAAI,CAAC,mBAAmB;IACjC;AAEO,IAAA,WAAW,CAAC,IAAiB,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;IACrC;AAEA;;;;AAIG;AACI,IAAA,oBAAoB,CAAC,IAAiB,EAAA;AAC3C,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa;AAAE,YAAA,OAAO,EAAE;AAC1C,QAAA,QACE,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,eAAe;AAC5E,cAAE,kBAAkB,IAAI,EAAE;IAEhC;;AAMQ,IAAA,iBAAiB,CAAC,IAAiB,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AACzB,YAAA,OAAO,IAAI,CAAC,IAAI,IAAI,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,IAAI,IAAI;AAC3E,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACvF,YAAA,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI;QAC1B;AACA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,cAAc,CAAC,IAAiB,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AACzB,YAAA,OAAO,IAAI,CAAC,KAAK,IAAI,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,eAAe,IAAI,EAAE;QAC9E,OAAO,IAAI,CAAC,KAAK;IACnB;AAEQ,IAAA,YAAY,CAAC,IAA+B,EAAA;AAClD,QAAA,IAAI,IAAI,IAAI,aAAa,IAAI,IAAI,EAAE;YACjC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE;gBACjD,OAAO,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,IAAI,KAAK;YAC7D;;AAEA,YAAA,OAAO,IAAI,CAAC,WAAW,KAAK,OAAO,GAAG,KAAK,GAAG,KAAK;QACrD;AACA,QAAA,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;YACrD,OAAO,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,IAAI,KAAK;QAC7D;AACA,QAAA,OAAO,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,KAAK,GAAG,KAAK;IACxE;IAEQ,iBAAiB,CACvB,SAA4B,EAC5B,IAA+B,EAAA;QAE/B,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AAC7C,QAAA,OAAO,aAAa,KAAK,KAAK,IAAI,aAAa,KAAK,SAAS;IAC/D;AAEQ,IAAA,kBAAkB,CAAC,IAAiB,EAAA;AAC1C,QAAA,QAAQ,IAAI,CAAC,WAAW;AACtB,YAAA,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC,GAAG,IAAI;AACnF,YAAA,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,QAAQ,CAAC;AACnB,oBAAA,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,gDAAgD,CAAC;AACtF,oBAAA,QAAQ,EAAE,EAAE;AACb,iBAAA,CAAC;AACJ,YAAA,KAAK,gBAAgB;gBACnB,OAAO,IAAI,CAAC,QAAQ,CAAC;AACnB,oBAAA,IAAI,EAAE,gBAAgB;oBACtB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,wDAAwD,CACzD;AACF,iBAAA,CAAC;AACJ,YAAA,KAAK,aAAa;gBAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;AACnB,oBAAA,IAAI,EAAE,aAAa;oBACnB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,qDAAqD,CACtD;AACD,oBAAA,IAAI,EAAE,GAAG;AACV,iBAAA,CAAC;AACJ,YAAA,KAAK,aAAa;gBAChB,OAAO,IAAI,CAAC;AACV,sBAAE,IAAI,CAAC,QAAQ,CAAC;AACZ,wBAAA,IAAI,EAAE,aAAa;AACnB,wBAAA,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe;AAC1C,wBAAA,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS;wBAC3C,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,wBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS;qBAClC;sBACD,IAAI;AACV,YAAA;AACE,gBAAA,OAAO,IAAI;;IAEjB;AAEQ,IAAA,iBAAiB,CAAC,IAAiB,EAAA;;;QAGzC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE;YACjD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ;YAC3D,IAAI,QAAQ,KAAK,OAAO;AAAE,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;YAChE,IAAI,QAAQ,KAAK,aAAa;AAAE,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;QAC9E;AACA,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE;IAC1B;;AAGQ,IAAA,aAAa,CAAC,IAAiB,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI;IAC1D;;AAGQ,IAAA,iBAAiB,CAAC,OAAe,EAAA;AACvC,QAAA,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC,UAAU,EAAE;AAC5D,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CACtC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,OAAO,CACvE;AACD,QAAA,IAAI,SAAS,KAAK,SAAS,CAAC,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE;YAC7E,SAAS,CAAC,QAAQ,GAAI,SAAS,CAAC,QAA0B,IAAI,EAAE;YAChE,OAAO,SAAS,CAAC,QAAyB;QAC5C;AACA,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE;IAC1B;;AAGQ,IAAA,cAAc,CAAC,GAAW,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC;AAAE,YAAA,OAAO,MAAM;QACpE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACvC,YAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;AAC1D,gBAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YACjC;QACF;AACA,QAAA,OAAO,MAAM;IACf;IAEQ,mBAAmB,GAAA;AACzB,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU;AACvC,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU;QACvC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,IAAG;AACnC,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,gBAAA,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3D,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa;AAC7B,gBAAA,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AAC5E,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,WAAW,GAAG,CAAC,QAAgB,KACnC,iBAAiB,CAAC,MAAM,CACtB,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CACzE,CAAC,GAAG,CAAC,KAAK,KAAK;AACd,YAAA,WAAW,EAAE,SAAS;YACtB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC;YAC3D,IAAI,EAAE,KAAK,CAAC,WAAW;AACxB,SAAA,CAAC,CAAC;AAEL,QAAA,MAAM,WAAW,GAAkB,IAAI,CAAC,YAAY;aACjD,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACxF,aAAA,GAAG,CAAC,IAAI,KAAK;AACZ,YAAA,WAAW,EAAE,aAAa;YAC1B,IAAI;AACJ,YAAA,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;YACvC,QAAQ,EAAE,IAAI,CAAC,kBAAkB;AACjC,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS;AAC7B,SAAA,CAAC,CAAC;QAEL,OAAO;AACL,YAAA;AACE,gBAAA,WAAW,EAAE,SAAS;AACtB,gBAAA,KAAK,EAAE;AACL,oBAAA;AACE,wBAAA,WAAW,EAAE,OAAO;wBACpB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,+CAA+C,CAAC;AACtF,qBAAA;AACD,oBAAA;AACE,wBAAA,WAAW,EAAE,gBAAgB;wBAC7B,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,uDAAuD,CACxD;AACF,qBAAA;AACD,oBAAA;AACE,wBAAA,WAAW,EAAE,aAAa;wBAC1B,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,oDAAoD,CACrD;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;YACD,EAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,EAAC;YACjD,EAAC,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,EAAC;YACnD,EAAC,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,CAAC,aAAa,CAAC,EAAC;AAC/D,YAAA,EAAC,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAC;SACjD;IACH;AAEQ,IAAA,qBAAqB,CAAC,IAA4B,EAAA;AACxD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,IAAI,IAAI,CAAC,gBAAgB,CAAC,WAAW,IAAI,IAAI;AAC3F,QAAA,OAAO,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,kBAAkB;IAChF;IAEQ,UAAU,CAAC,eAAuB,EAAE,SAAoC,EAAA;AAC9E,QAAA,OAAO,GAAG,eAAe,CAAA,CAAA,EAAI,SAAS,IAAI,EAAE,EAAE;IAChD;AAEA;;;;AAIG;AACK,IAAA,oBAAoB,CAAC,SAAwB,EAAA;AACnD,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,IAAI;QAC3B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,mBAAmB,CAAC;AAClD,QAAA,OAAO,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;IAChC;;AAGQ,IAAA,oBAAoB,CAAC,GAA8B,EAAA;QACzD,OAAO,GAAG,GAAG,CAAA,SAAA,EAAY,GAAG,CAAA,CAAE,GAAG,SAAS;IAC5C;;;AAKQ,IAAA,WAAW,CAAC,IAAiB,EAAA;QACnC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACtF,OAAO,IAAI,CAAC,QAAyB;QACvC;AACA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,QAAQ,CAAC,IAA2B,EAAA;AAC1C,QAAA,OAAO,EAAC,GAAG,IAAI,EAAE,IAAI,EAAE,CAAA,KAAA,EAAQ,IAAI,CAAC,WAAW,EAAE,CAAA,CAAE,EAAgB;IACrE;AAEQ,IAAA,WAAW,CAAC,KAA8B,EAAA;AAChD,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,IAAG;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACvC,IAAI,QAAQ,EAAE;gBACX,IAAkC,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;YAC3E;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;IAEQ,KAAK,CAAC,KAAoB,EAAE,KAAkC,EAAA;AACpE,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;YACnB,KAAK,CAAC,IAAI,CAAC;YACX,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACvC,YAAA,IAAI,QAAQ;AAAE,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;AAC3C,QAAA,CAAC,CAAC;IACJ;IAEQ,UAAU,CAAC,KAAoB,EAAE,GAAW,EAAA;AAClD,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG;AAAE,gBAAA,OAAO,IAAI;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACvC,IAAI,QAAQ,EAAE;gBACZ,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC5C,gBAAA,IAAI,KAAK;AAAE,oBAAA,OAAO,KAAK;YACzB;QACF;AACA,QAAA,OAAO,IAAI;IACb;IAEQ,YAAY,CAAC,KAAoB,EAAE,GAAW,EAAA;AACpD,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC;AACxD,QAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,YAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACtB,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,IAAG;YACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACvC,YAAA,OAAO,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC;AACvD,QAAA,CAAC,CAAC;IACJ;;IAGQ,KAAK,GAAA;AACX,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACrD;AAEQ,IAAA,MAAM,CAAC,KAAoB,EAAA;AACjC,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,IAAG;AACtB,YAAA,MAAM,IAAI,GAAG,EAAC,GAAG,IAAI,EAAgB;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACvC,YAAA,IAAI,QAAQ;gBAAG,IAAkC,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AAClF,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;;AAGQ,IAAA,UAAU,CAAC,KAAoB,EAAA;AACrC,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,IAAG;YACtB,MAAM,EAAC,IAAI,EAAE,GAAG,IAAI,EAAC,GAAG,IAAoC;YAC5D,MAAM,KAAK,GAAG,IAA6B;YAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;gBACzF,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAyB,CAAC;YACnE;AACA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC,CAAC;IACJ;+GAtwBW,uCAAuC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,EAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uCAAuC,qGCnGpD,syZAgWA,EAAA,MAAA,EAAA,CAAA,o8IAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjRI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,6HACf,qBAAqB,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,gBAAgB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,wBAAwB,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,uBAAA,EAAA,2BAAA,EAAA,cAAA,EAAA,QAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACxB,uBAAuB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,iCAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,kCAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,gCAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACvB,aAAa,+JACb,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACV,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,aAAa,+JACb,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,SAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,YAAY,oXACZ,SAAS,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAGA,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBA3BnD,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,YACN,2CAA2C,EAAA,eAAA,EAGpC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,eAAe;wBACf,eAAe;wBACf,qBAAqB;wBACrB,gBAAgB;wBAChB,wBAAwB;wBACxB,uBAAuB;wBACvB,aAAa;wBACb,YAAY;wBACZ,UAAU;wBACV,WAAW;wBACX,WAAW;wBACX,aAAa;wBACb,WAAW;wBACX,kBAAkB;wBAClB,YAAY;wBACZ,SAAS;AACV,qBAAA,EAAA,QAAA,EAAA,syZAAA,EAAA,MAAA,EAAA,CAAA,o8IAAA,CAAA,EAAA;;;AEjGH;;;;;;;;;;;;;;AAcG;MA4BU,sBAAsB,CAAA;IAOjC,WAAA,CACmB,MAAsB,EACtB,OAAe,EAAA;QADf,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,OAAO,GAAP,OAAO;QARV,IAAA,CAAA,mBAAmB,GAAG,mBAAmB;QAEzC,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CACrD,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC,UAAU,CAAC,CAClE;IAKE;AAEI,IAAA,SAAS,CAAC,MAAc,EAAA;AAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC;IAClE;+GAdW,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1CnC,glEA0DA,EAAA,MAAA,EAAA,CAAA,2IAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzBI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACZ,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,gCAAgC,EAAA,QAAA,EAAA,mCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChC,oCAAoC,mFACpC,uCAAuC,EAAA,QAAA,EAAA,2CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAI9B,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAflC,SAAS;iCACI,IAAI,EAAA,QAAA,EACN,wBAAwB,EAAA,OAAA,EAGzB;wBACP,YAAY;wBACZ,aAAa;wBACb,UAAU;wBACV,gCAAgC;wBAChC,oCAAoC;wBACpC,uCAAuC;qBACxC,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,glEAAA,EAAA,MAAA,EAAA,CAAA,2IAAA,CAAA,EAAA;;;AExCjD;;;;;;;;;;;;;;AAcG;MAwCU,0BAA0B,CAAA;AAYrC,IAAA,WAAA,CAA6B,GAAgB,EAAA;QAAhB,IAAA,CAAA,GAAG,GAAH,GAAG;QAXhB,IAAA,CAAA,IAAI,GAAG,KAAK;QACZ,IAAA,CAAA,mBAAmB,GAAe,EAAE;AAE1B,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAiC;AAExE,QAAA,IAAA,CAAA,SAAS,GAAc,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YACpD,YAAY,EAAE,CAAC,KAAK,CAAC;YACrB,sBAAsB,EAAE,CAAC,IAAI,CAAC;YAC9B,aAAa,EAAE,CAAC,IAAI,CAAC;AACtB,SAAA,CAAC;IAE8C;AAEzC,IAAA,cAAc,CAAC,KAAe,EAAA;QACnC,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI;QACpC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAC,aAAa,EAAE,SAAS,EAAC,CAAC;IACvD;IAEO,QAAQ,GAAA;QACb,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;IAEO,QAAQ,GAAA;AACb,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE;QACpC,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;IAC/B;IAEQ,aAAa,GAAA;AACnB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK;QACtC,MAAM,OAAO,GAA2B,EAAE;AAE1C,QAAA,IAAI,SAAS,CAAC,YAAY,EAAE;AAC1B,YAAA,OAAO,CAAC,YAAY,GAAG,IAAI;QAC7B;AAEA,QAAA,IAAI,SAAS,CAAC,sBAAsB,EAAE,KAAK,EAAE;YAC3C,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,sBAAsB,CAAC,KAAK;QACzE;AAEA,QAAA,IAAI,SAAS,CAAC,aAAa,EAAE;YAC3B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,aAAa,CAAC;QACxE;AAEA,QAAA,OAAO,OAAO;IAChB;AAEQ,IAAA,gBAAgB,CAAC,IAAmB,EAAA;AAC1C,QAAA,IAAI,IAAI,YAAY,IAAI,EAAE;AACxB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC1D,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACnD,YAAA,OAAO,GAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,GAAG,WAAW;QAC3C;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK;AAChC,YAAA,OAAO,GAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,GAAG,WAAW;QAC3C;AACA,QAAA,OAAO,IAAI;IACb;IAEQ,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACnB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,sBAAsB,EAAE,IAAI;AAC5B,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CAAC;IACJ;+GAtEW,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtDvC,8yEAuDA,EAAA,MAAA,EAAA,CAAA,yxBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDhBI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,SAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,wBAAwB,2FACxB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,IAAA,EAAA,UAAA,EAAA,OAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACrB,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,WAAA,EAAA,cAAA,EAAA,IAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAIR,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBArBtC,SAAS;iCACI,IAAI,EAAA,QAAA,EACN,6BAA6B,EAAA,OAAA,EAG9B;wBACP,YAAY;wBACZ,eAAe;wBACf,mBAAmB;wBACnB,WAAW;wBACX,wBAAwB;wBACxB,YAAY;wBACZ,cAAc;wBACd,qBAAqB;wBACrB,gBAAgB;wBAChB,cAAc;wBACd,WAAW;wBACX,iBAAiB;qBAClB,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,8yEAAA,EAAA,MAAA,EAAA,CAAA,yxBAAA,CAAA,EAAA;kFAG/B,IAAI,EAAA,CAAA;sBAAnB;gBACe,mBAAmB,EAAA,CAAA;sBAAlC;gBAEyB,UAAU,EAAA,CAAA;sBAAnC;;;AE1DH;;;;;;;;;;;;;;AAcG;MA2DU,gCAAgC,CAAA;IA8D3C,WAAA,CACmB,WAA8C,EAC9C,gBAAiC,EACjC,iBAAmC,EACnC,OAAe,EACf,YAAyB,EAAA;QAJzB,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,YAAY,GAAZ,YAAY;AAlEd,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;AAC/B,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAO,SAAS,CAAC;AACtD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAAQ;AAEtC,QAAA,IAAA,CAAA,MAAM,GAAmB;AACvC,YAAA,EAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,iDAAiD,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAC;AACrG,YAAA,EAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,oDAAoD,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAC;AACxG,YAAA,EAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,qDAAqD,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAC;AAC1G,YAAA,EAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,mDAAmD,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAC;SACvG;AAEM,QAAA,IAAA,CAAA,UAAU,GAAe;AAC9B,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,EAAE;SACT;AAEe,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAChD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AACtD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAI9C,QAAA,IAAA,CAAA,KAAK,GAAuC,KAAK,CAC/D,IAAI,CAAC,eAAe,CAAC,IAAI,CACvB,SAAS,CAAC,MAAK;AACb,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CACzF,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAC1C;QACH,CAAC,CAAC,CACH,EACD,IAAI,CAAC,eAAe,CAAC,IAAI,CACvB,SAAS,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CACjG,CACF,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAEN,IAAA,CAAA,WAAW,GAAsB,IAAI,CAAC,KAAK,CAAC,IAAI,CAC9D,SAAS,CAAC,IAAI,IAAG;AACf,YAAA,IAAI,CAAC,UAAU,GAAG,EAAC,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,IAAI,CAAC,aAAa,EAAC;YAC1E,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,gBAAA,OAAO,EAAE,CAAC,EAAE,CAAC;YACf;AACA,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA,0CAAA,EAA6C,GAAG,CAAC,MAAM,CAAA,CAAE,CAAC;YACrG,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAChD,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK;AAC3C,gBAAA,GAAG,GAAG;gBACN,QAAQ,EAAE,GAAG,GAAG,CAAC,cAAc,CAAA,GAAA,EAAM,GAAG,CAAC,UAAU,CAAA,CAAE;AACrD,gBAAA,SAAS,EAAE;oBACT,OAAO,EAAE,YAAY,CAAC,CAAA,0CAAA,EAA6C,GAAG,CAAC,MAAM,EAAE,CAAC;oBAChF,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;AACzC,iBAAA;aACF,CAAC,CAAC,CAAC,CACL;QACH,CAAC,CAAC,CACH;AAEe,QAAA,IAAA,CAAA,cAAc,GAAwB,IAAI,CAAC,KAAK,CAAC,IAAI,CACnE,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAChE;AASC,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACtC;IAEO,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,CAAC,6BAA6B,EAAE,CAAC,IAAI,CACpF,SAAS,CAAC,IAAI,IACZ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC,IAAI,CACxF,GAAG,CAAC,QAAQ,IAAI;YACd,EAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAC;YACjD,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK;AAC1B,gBAAA,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI;AACpB,gBAAA,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI;AAClB,gBAAA,QAAQ,EAAE,KAAK;AAChB,aAAA,CAAC,CAAC;SACJ,CAAC,CACH,CACF,EACD,SAAS,CAAC,EAAE,CAAC,CACd;AAED,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CACH,SAAS,CAAC,UAAU,IAAG;AACrB,YAAA,IAAI,CAAC,UAAU;AAAE,gBAAA,OAAO,EAAE;YAC1B,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CACxB,SAAS,CAAC,MAAM,IAAI,CAAC,EACrB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;QACH,CAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;aAE1B,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IACjD;AAEO,IAAA,YAAY,CAAC,IAAY,EAAA;QAC9B,IAAI,CAAC,UAAU,GAAG,EAAC,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAC;AAC5C,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;IAC7B;AAEO,IAAA,gBAAgB,CAAC,IAAY,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAC,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAC;AACrD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;IAC7B;IAEO,SAAS,GAAA;AACd,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;AAEO,IAAA,YAAY,CAAC,OAAsC,EAAA;AACxD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO;YAAE;AAEd,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC;aACF,YAAY,CAAC,OAAO;aACpB,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAElD,aAAA,SAAS,CAAC;YACT,IAAI,EAAE,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;YACvC,KAAK,EAAE,GAAG,IAAG;AACX,gBAAA,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AACtB,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;gBAC7B;YACF,CAAC;AACF,SAAA,CAAC;IACN;AAEQ,IAAA,iBAAiB,CAAC,MAAc,EAAA;QACtC,QAAQ,MAAM;AACZ,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,MAAM;AACf,YAAA,KAAK,WAAW;AACd,gBAAA,OAAO,OAAO;AAChB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,KAAK;AACd,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,MAAM;AACf,YAAA;AACE,gBAAA,OAAO,MAAM;;IAEnB;AAEO,IAAA,cAAc,CAAC,GAAqB,EAAA;QACzC,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;AACvF,QAAA,MAAM,eAAe,GAAG,GAAG,CAAC;AAC1B,cAAE,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;AACjE,cAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAE5B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE;AAClC,YAAA,WAAW,EAAE;AACX,gBAAA,KAAK,EAAE,OAAO;gBACd,cAAc;gBACd,eAAe;AAChB,aAAA;AACF,SAAA,CAAC;IACJ;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;IAC3B;+GA3KW,gCAAgC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAL,iCAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzE7C,8hMAmIA,EAAA,MAAA,EAAA,CAAA,ixEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDxEI,YAAY,0OAEZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,UAAU,4NACV,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,OAAA,EAAA,YAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,SAAS,8BACT,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,6BAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,OAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,0BAA0B,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAC1B,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAIR,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBApB5C,SAAS;iCACI,IAAI,EAAA,QAAA,EACN,mCAAmC,EAAA,OAAA,EAGpC;wBACP,YAAY;wBACZ,QAAQ;wBACR,eAAe;wBACf,YAAY;wBACZ,UAAU;wBACV,aAAa;wBACb,iBAAiB;wBACjB,SAAS;wBACT,gBAAgB;wBAChB,0BAA0B;wBAC1B,iBAAiB;qBAClB,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,8hMAAA,EAAA,MAAA,EAAA,CAAA,ixEAAA,CAAA,EAAA;;;AEvEjD;;;;;;;;;;;;;;AAcG;AAWH,MAAM,MAAM,GAAW;AACrB,IAAA;AACE,QAAA,IAAI,EAAE,gBAAgB;AACtB,QAAA,UAAU,EAAE,CAAA,eAAA,EAAkB,mBAAmB,CAAC,UAAU,CAAA,CAAE;AAC9D,QAAA,SAAS,EAAE,MAAM;AAClB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,wBAAwB;AAC9B,QAAA,SAAS,EAAE,sBAAsB;QACjC,WAAW,EAAE,CAAC,gBAAgB,CAAC;QAC/B,IAAI,EAAE,EAAC,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAC;AAC1D,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,SAAS,EAAE,gCAAgC;QAC3C,WAAW,EAAE,CAAC,gBAAgB,CAAC;QAC/B,IAAI,EAAE,EAAC,KAAK,EAAE,gCAAgC,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAC;AACrE,KAAA;CACF;MAOY,oBAAoB,CAAA;+GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAApB,oBAAoB,EAAA,OAAA,EAAA,CAHrB,YAAY,EAAAJ,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CACZ,YAAY,CAAA,EAAA,CAAA,CAAA;gHAEX,oBAAoB,EAAA,OAAA,EAAA,CAHrB,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC3C,YAAY,CAAA,EAAA,CAAA,CAAA;;4FAEX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;oBAChB,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACtD,OAAO,EAAE,CAAC,YAAY,CAAC;AACxB,iBAAA;;;ACjDD;;;;;;;;;;;;;;AAcG;MAWU,mBAAmB,CAAA;+GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAnB,mBAAmB,EAAA,OAAA,EAAA,CAHpB,oBAAoB,EAAE,sBAAsB,CAAA,EAAA,CAAA,CAAA;gHAG3C,mBAAmB,EAAA,OAAA,EAAA,CAHpB,oBAAoB,EAAE,sBAAsB,CAAA,EAAA,CAAA,CAAA;;4FAG3C,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE,CAAC,oBAAoB,EAAE,sBAAsB,CAAC;AACvD,oBAAA,SAAS,EAAE,EAAE;AACd,iBAAA;;;ACxBD;;;;;;;;;;;;;;AAcG;;ACdH;;;;;;;;;;;;;;AAcG;;ACdH;;;;;;;;;;;;;;AAcG;;ACdH;;;;;;;;;;;;;;AAcG;;ACdH;;;;;;;;;;;;;;AAcG;;ACdH;;;;;;;;;;;;;;AAcG;;ACdH;;;;;;;;;;;;;;AAcG;;ACdH;;AAEG;;;;"}
|